7000bc69be5351f65c48d434bcc477b8d6d7cc05
hiram
  Mon Jun 16 20:26:59 2025 -0700
the database trackDb construction does not like the chain net views mixed up they must be the stanza right before their subTracks refs #35898

diff --git src/hg/utils/automation/asmHubChainNetTrackDb.pl src/hg/utils/automation/asmHubChainNetTrackDb.pl
index 57a013e0b57..2b0d252fbac 100755
--- src/hg/utils/automation/asmHubChainNetTrackDb.pl
+++ src/hg/utils/automation/asmHubChainNetTrackDb.pl
@@ -91,192 +91,238 @@
 printf "\n";
 printf "subGroup3 chainType chain_type c00=chain c01=syntenic c02=reciprocal_best c03=lift_over c04=chain_align c05=syntenic_align c06=reciprocal_align c07=lift_over_align\n";
 printf "dragAndDrop subTracks\n";
 printf "visibility hide
 group compGeno
 color 0,0,0
 altColor 255,255,0
 type bed 3
 chainLinearGap loose
 chainMinScore 5000
 dimensions dimensionX=chainType dimensionY=species
 sortOrder species=+ view=+ chainType=+
 configurable on\n";
 printf "html html/%s.chainNet\n", $targetDb;
 
-printf "
-    track %sChainNetViewchain
-    shortLabel Chains
-    view chain
-    visibility dense
-    parent %sChainNet
-    spectrum on
-
-    track %sChainNetViewSynTen
-    shortLabel Syntenic
-    view synten
-    visibility hide
-    parent %sChainNet
-    spectrum on
-
-    track %sChainNetViewRBest
-    shortLabel Reciprocal best
-    view rbest
-    visibility hide
-    parent %sChainNet
-    spectrum on
-
-    track %sChainNetViewLiftOver
-    shortLabel Lift over
-    view liftover
-    visibility hide
-    parent %sChainNet
-    spectrum on
-", $targetDb, $targetDb, $targetDb, $targetDb, $targetDb, $targetDb, $targetDb, $targetDb;
+my $QueryDb = "QDb";
+my $queryDate = "some date";
+my $comName = "some date";
+my $queryAsmName = "qAsmName";
 
 $N = 0;
+my $headerOut = 0;
 foreach my $queryDb (@queryList) {
-  my $comName = $queryDb;
+  $comName = $queryDb;
   $comName = $commonName{$queryDb} if (defined($commonName{$queryDb}));
-  my $QueryDb = ucfirst($queryDb);
+  $QueryDb = ucfirst($queryDb);
   my $overChain="${targetAccession}.${queryDb}.over.chain.gz";
   my $overToChain="${targetAccession}To${QueryDb}.over.chain.gz";
   my $lastzDir="lastz.$queryDb";
   `rm -f $buildDir/bbi/$targetDb.chain${QueryDb}.bb`;
   `rm -f $buildDir/bbi/$targetDb.chain${QueryDb}Link.bb`;
   `rm -f $buildDir/liftOver/${overToChain}`;
   if ( -s "$buildDir/trackData/$lastzDir/axtChain/${overChain}" ) {
      `ln -s ../trackData/$lastzDir/axtChain/${overChain} $buildDir/liftOver/${overToChain}`;
   } else {
      printf STDERR "# NOT FOUND: '%s'\n", "$buildDir/trackData/$lastzDir/axtChain/${overChain}";
   }
   `ln -s ../trackData/lastz.$queryDb/axtChain/chain${QueryDb}.bb  $buildDir/bbi/$targetDb.chain${QueryDb}.bb`;
   `ln -s ../trackData/lastz.$queryDb/axtChain/chain${QueryDb}Link.bb  $buildDir/bbi/$targetDb.chain${QueryDb}Link.bb`;
-  my $queryDate = "some date";
-  my $queryAsmName = "";
+  $queryDate = "some date";
   if ( $queryDb !~ m/^GC/ ) {
     $queryDate = `hgsql -N -e 'select description from dbDb where name="$queryDb"' hgcentraltest | sed -e 's/ (.*//;'`;
     chomp $queryDate;
   } else {
     ($queryDate, $queryAsmName) = &HgAutomate::hubDateName($queryDb);
   }
-  if (0 == $N) {
+  if (0 == $headerOut) {
+    printf "
+    track %sChainNetViewchain
+    shortLabel Chains
+    view chain
+    visibility dense
+    parent %sChainNet
+    spectrum on
+", $targetDb, $targetDb;
+    $headerOut = 1;
+
     printf "
         track chain%s
         parent %sChainNetViewchain on", $QueryDb, $targetDb;
   } else {
     printf "
         track chain%s
         parent %sChainNetViewchain off", $QueryDb, $targetDb;
   }
   printf "
         subGroups view=chain species=s%03d chainType=c00
         shortLabel %s Chain
         longLabel %s/%s%s (%s) Chained Alignments
         type bigChain %s
         bigDataUrl bbi/%s.chain%s.bb
         linkDataUrl bbi/%s.chain%sLink.bb
         otherDb %s
         html html/%s.chainNet
         priority %s
 ", $N, $comName, $comName, $queryDb, $queryAsmName, $queryDate, $queryDb, $targetDb,
      $QueryDb, $targetDb, $QueryDb, $queryDb, $targetDb, $queryPrio{$queryDb};
+  $N++;
+}
 
+$N = 0;
+$headerOut = 0;
+foreach my $queryDb (@queryList) {
+  $comName = $queryDb;
+  $comName = $commonName{$queryDb} if (defined($commonName{$queryDb}));
+  $QueryDb = ucfirst($queryDb);
   if ( -s "$buildDir/trackData/lastz.$queryDb/axtChain/chainSyn${QueryDb}.bb" ) {
     `rm -f $buildDir/bbi/$targetDb.chainSyn${QueryDb}.bb`;
     `rm -f $buildDir/bbi/$targetDb.chainSyn${QueryDb}Link.bb`;
     `ln -s ../trackData/lastz.$queryDb/axtChain/chainSyn${QueryDb}.bb  $buildDir/bbi/$targetDb.chainSyn${QueryDb}.bb`;
     `ln -s ../trackData/lastz.$queryDb/axtChain/chainSyn${QueryDb}Link.bb  $buildDir/bbi/$targetDb.chainSyn${QueryDb}Link.bb`;
+  if (0 == $headerOut) {
+    printf "
+    track %sChainNetViewSynTen
+    shortLabel Syntenic
+    view synten
+    visibility hide
+    parent %sChainNet
+    spectrum on
+", $targetDb, $targetDb;
+    $headerOut = 1;
+  }
   printf "
         track chainSyn%s
         parent %sChainNetViewSynTen off
         subGroups view=synten species=s%03d chainType=c01
         shortLabel %s synChain
         longLabel %s/%s%s (%s) Chained Alignments
         type bigChain %s
         bigDataUrl bbi/%s.chainSyn%s.bb
         linkDataUrl bbi/%s.chainSyn%sLink.bb
         otherDb %s
         html html/%s.chainNet
         priority %s
 ", $QueryDb, $targetDb, $N, $comName, $comName, $queryDb, $queryAsmName, $queryDate, $queryDb, $targetDb,
      $QueryDb, $targetDb, $QueryDb, $queryDb, $targetDb, $queryPrio{$queryDb};
 
   }
+  $N++;
+}
+
+$N = 0;
+$headerOut = 0;
+foreach my $queryDb (@queryList) {
+  $comName = $queryDb;
+  $comName = $commonName{$queryDb} if (defined($commonName{$queryDb}));
+  $QueryDb = ucfirst($queryDb);
 
   if ( -s "$buildDir/trackData/lastz.$queryDb/axtChain/chainRBest${QueryDb}.bb" ) {
     `rm -f $buildDir/bbi/$targetDb.chainRBest${QueryDb}.bb`;
     `rm -f $buildDir/bbi/$targetDb.chainRBest${QueryDb}Link.bb`;
     `ln -s ../trackData/lastz.$queryDb/axtChain/chainRBest${QueryDb}.bb  $buildDir/bbi/$targetDb.chainRBest${QueryDb}.bb`;
     `ln -s ../trackData/lastz.$queryDb/axtChain/chainRBest${QueryDb}Link.bb  $buildDir/bbi/$targetDb.chainRBest${QueryDb}Link.bb`;
+  if (0 == $headerOut) {
+    printf "
+    track %sChainNetViewRBest
+    shortLabel Reciprocal best
+    view rbest
+    visibility hide
+    parent %sChainNet
+    spectrum on
+", $targetDb, $targetDb;
+    $headerOut = 1;
+  }
+
   printf "
         track chainRBest%s
         parent %sChainNetViewRBest off
         subGroups view=rbest species=s%03d chainType=c02
         shortLabel %s rbChain
         longLabel %s/%s%s (%s) Chained Alignments
         type bigChain %s
         bigDataUrl bbi/%s.chainRBest%s.bb
         linkDataUrl bbi/%s.chainRBest%sLink.bb
         otherDb %s
         html html/%s.chainNet
         priority %s
 ", $QueryDb, $targetDb, $N, $comName, $comName, $queryDb, $queryAsmName, $queryDate, $queryDb, $targetDb,
      $QueryDb, $targetDb, $QueryDb, $queryDb, $targetDb, $queryPrio{$queryDb};
 
   }
+  $N++;
+}
+
+$N = 0;
+$headerOut = 0;
+foreach my $queryDb (@queryList) {
+  $comName = $queryDb;
+  $comName = $commonName{$queryDb} if (defined($commonName{$queryDb}));
+  $QueryDb = ucfirst($queryDb);
 
   if ( -s "$buildDir/trackData/lastz.$queryDb/axtChain/chainLiftOver${QueryDb}.bb" ) {
     `rm -f $buildDir/bbi/$targetDb.chainLiftOver${QueryDb}.bb`;
     `rm -f $buildDir/bbi/$targetDb.chainLiftOver${QueryDb}Link.bb`;
     `ln -s ../trackData/lastz.$queryDb/axtChain/chainLiftOver${QueryDb}.bb  $buildDir/bbi/$targetDb.chainLiftOver${QueryDb}.bb`;
     `ln -s ../trackData/lastz.$queryDb/axtChain/chainLiftOver${QueryDb}Link.bb  $buildDir/bbi/$targetDb.chainLiftOver${QueryDb}Link.bb`;
 
+  if (0 == $headerOut) {
+    printf "
+    track %sChainNetViewLiftOver
+    shortLabel Lift over
+    view liftover
+    visibility hide
+    parent %sChainNet
+    spectrum on
+", $targetDb, $targetDb;
+    $headerOut = 1;
+  }
+
   printf "
         track chainLiftOver%s
         parent %sChainNetViewLiftOver off
         subGroups view=liftover species=s%03d chainType=c03
         shortLabel %s loChain
         longLabel %s/%s%s (%s) Chained Alignments
         type bigChain %s
         bigDataUrl bbi/%s.chainLiftOver%s.bb
         linkDataUrl bbi/%s.chainLiftOver%sLink.bb
         otherDb %s
         html html/%s.chainNet
         priority %s
 ", $QueryDb, $targetDb, $N, $comName, $comName, $queryDb, $queryAsmName, $queryDate, $queryDb, $targetDb,
      $QueryDb, $targetDb, $QueryDb, $queryDb, $targetDb, $queryPrio{$queryDb};
 
   }
   $N++;
 }
 
 printf "
     track %sMafNetViewnet
     shortLabel Nets
     view align
     visibility hide
     parent %sChainNet
 ", $targetDb, $targetDb;
 
 $N = 0;
 foreach my $queryDb (@queryList) {
-  my $comName = $queryDb;
+  $comName = $queryDb;
   $comName = $commonName{$queryDb} if (defined($commonName{$queryDb}));
+  $QueryDb = ucfirst($queryDb);
   my @targetAccession = split('_', $targetDb);
   my $targetAcc = sprintf("%s_%s", $targetAccession[0], $targetAccession[1]);
-  my $QueryDb = ucfirst($queryDb);
   my $queryDate = "some date";
   my $queryAsmName = "";
   `rm -f $buildDir/bbi/$targetDb.${queryDb}.net.bb`;
   `rm -f $buildDir/bbi/$targetDb.${queryDb}.net.summary.bb`;
   if ( -s "$buildDir/trackData/lastz.$queryDb/bigMaf/${targetAcc}.${queryDb}.net.bb" ) {
   `ln -s ../trackData/lastz.$queryDb/bigMaf/${targetAcc}.${queryDb}.net.bb  $buildDir/bbi/$targetDb.${queryDb}.net.bb`;
   `ln -s ../trackData/lastz.$queryDb/bigMaf/${targetAcc}.${queryDb}.net.summary.bb  $buildDir/bbi/$targetDb.${queryDb}.net.summary.bb`;
   if ( $queryDb !~ m/^GC/ ) {
     $queryDate = `hgsql -N -e 'select description from dbDb where name="$queryDb"' hgcentraltest | sed -e 's/ (.*//;'`;
     chomp $queryDate;
   } else {
     ($queryDate, $queryAsmName) = &HgAutomate::hubDateName($queryDb);
   }
     printf "
         track net%s