3c1b9cee5a4152b70e2fc10b432082ea89fecae6
hiram
  Tue Sep 29 15:06:19 2026 -0700
add trackDb construction for miniMap2 chain tracks refs #34360

diff --git src/hg/utils/automation/asmHubMiniMap2ChainNetTrackDb.sh src/hg/utils/automation/asmHubMiniMap2ChainNetTrackDb.sh
new file mode 100755
index 00000000000..38fdfef76a3
--- /dev/null
+++ src/hg/utils/automation/asmHubMiniMap2ChainNetTrackDb.sh
@@ -0,0 +1,167 @@
+#!/bin/bash
+
+set -beEu -o pipefail
+set -x
+
+if [ $# -ne 2 ]; then
+  printf "usage: asmHubMiniMap2ChainNetTrackDb.sh <asmId> <pathTo/assembly hub build directory> > miniMap2ChainNetTrackDb.txt\n" 1>&2
+  printf "expecting to find bbi/ files at given path\n" 1>&2
+  printf "single query genome case, use asmHubMiniMap2ChainNetTrackDb.pl for multiple\n" 1>&2
+  exit 255
+fi
+
+export asmId=$1
+export buildDir=$2
+
+export accessionId="${asmId}"
+case ${asmId} in
+   GC*)
+     accessionId=`echo "$asmId" | awk -F"_" '{printf "%s_%s", $1, $2}'`
+     ;;
+esac
+
+export scriptDir="$HOME/kent/src/hg/utils/automation"
+
+mkdir -p $buildDir/bbi
+
+export chainNetPriority=1
+
+printf "# asmHubMiniMap2ChainNetTrackDb.sh $asmId $buildDir\n" 1>&2
+
+for D in ${buildDir}/trackData/miniMap2.*
+do
+  targetDb=$accessionId
+  mm2Dir=`basename "${D}"`
+  # doMiniMap2.pl names this directory 'miniMap2.$QDb' where $QDb is
+  # ucfirst() of the query db/accession; OtherDb below reproduces the
+  # exact case used in the chain*.bb file names, otherDb reconstructs
+  # the actual lowercase-first db name/accession for table lookups.
+  OtherDb=`echo $mm2Dir | sed -e 's/miniMap2.//;'`
+  dbPrefix2=`printf '%s' "$OtherDb" | cut -c1-2`
+  if [ "${dbPrefix2}" = "GC" ]; then
+    otherDb="${OtherDb}"
+  else
+    firstChar=`printf '%s' "$OtherDb" | cut -c1`
+    restChars=`printf '%s' "$OtherDb" | cut -c2-`
+    lowerFirst=`printf '%s' "$firstChar" | tr 'A-Z' 'a-z'`
+    otherDb="${lowerFirst}${restChars}"
+  fi
+  asmReport=`ls -d $buildDir/download/*assembly_report.txt 2> /dev/null`
+printf "asmReport: %s\n" "${asmReport}" 1>&2
+  if [ ! -s "${asmReport}" ]; then
+ printf "# ERROR: can not find assembly_report.txt in $buildDir/download\n" 1>&2
+    exit 255
+  fi
+  if [ ! -s ${buildDir}/trackData/$mm2Dir/axtChain/chain${OtherDb}.bb ]; then
+ printf "# ERROR: can not find chain${OtherDb}.bb in $buildDir/trackData/$mm2Dir/axtChain/\n" 1>&2
+    exit 255
+  fi
+  rm -f $buildDir/bbi/${asmId}.chainMiniMap2$OtherDb.bb
+  rm -f $buildDir/bbi/${asmId}.chainMiniMap2${OtherDb}Link.bb
+  rm -f $buildDir/bbi/${asmId}.chainLiftOverMiniMap2$OtherDb.bb
+  rm -f $buildDir/bbi/${asmId}.chainLiftOverMiniMap2${OtherDb}Link.bb
+
+  ln -s ../trackData/$mm2Dir/axtChain/chain${OtherDb}.bb $buildDir/bbi/${asmId}.chainMiniMap2$OtherDb.bb
+  ln -s ../trackData/$mm2Dir/axtChain/chain${OtherDb}Link.bb $buildDir/bbi/${asmId}.chainMiniMap2${OtherDb}Link.bb
+
+  if [ -s "$buildDir/trackData/$mm2Dir/axtChain/chainLiftOver${OtherDb}.bb" ]; then
+    printf "# making chainLiftOverMiniMap2${OtherDb}.bb\n" 1>&2
+    ln -s ../trackData/$mm2Dir/axtChain/chainLiftOver${OtherDb}.bb $buildDir/bbi/${asmId}.chainLiftOverMiniMap2$OtherDb.bb
+    ln -s ../trackData/$mm2Dir/axtChain/chainLiftOver${OtherDb}Link.bb $buildDir/bbi/${asmId}.chainLiftOverMiniMap2${OtherDb}Link.bb
+  else
+    printf "# there is NO chainLiftOver${OtherDb}.bb\n" 1>&2
+  fi
+
+  otherPrefix=`echo $otherDb | cut -c1-2`
+  if [ "${otherPrefix}" = "GC" ]; then
+    # Construct path to query assembly directory: /hive/data/genomes/asmHubs/GCF/000/001/635/GCF_000001635.27/
+    gcPrefix=`echo $otherDb | sed -e 's/_.*//'`
+    numbers=`echo $otherDb | sed -e 's/GC[AF]_//; s/\.[0-9]*$//'`
+    d1=`echo $numbers | cut -c1-3`
+    d2=`echo $numbers | cut -c4-6`
+    d3=`echo $numbers | cut -c7-9`
+    queryBuildDir="/hive/data/genomes/asmHubs/$gcPrefix/$d1/$d2/$d3/$otherDb"
+    queryAsmReport=`ls -d $queryBuildDir/*assembly_report.txt 2> /dev/null || true`
+    if [ -s "${queryAsmReport}" ]; then
+      sciName=`grep -i 'organism name:' ${queryAsmReport} | head -1 | tr -d "\r" | sed -e 's/.*organism name: *//i; s/ *(.*//;'`
+      organism=`grep -i 'organism name:' ${queryAsmReport} | head -1 | tr -d "\r" | sed -e 's/.*organism name: *.*(//i; s/).*//;'`
+      taxId=`grep -i 'taxid:' ${queryAsmReport} | head -1 | tr -d "\r" | sed -e 's/.*taxid: *//i;'`
+      o_date=`grep -i 'date:' ${queryAsmReport} | head -1 | tr -d "\r" | sed -e 's/.*date: *//i;'`
+    else
+      printf "# ERROR: can not find assembly_report.txt for query assembly $otherDb in $queryBuildDir/\n" 1>&2
+      exit 255
+    fi
+  else
+    organism=`/cluster/bin/x86_64/hgsql -N -e "select organism from dbDb where name=\"$otherDb\"" hgcentraltest`
+    sciName=`/cluster/bin/x86_64/hgsql -N -e "select scientificName from dbDb where name=\"$otherDb\"" hgcentraltest`
+    taxId=`/cluster/bin/x86_64/hgsql -N -e "select taxId from dbDb where name=\"$otherDb\"" hgcentraltest`
+    o_date=`/cluster/bin/x86_64/hgsql -N -e "select description from dbDb where name=\"$otherDb\"" hgcentraltest`
+  fi
+
+  printf "##############################################################################
+# $otherDb - $organism - $sciName - taxId: $taxId
+##############################################################################
+"
+  printf "track chainNetMiniMap2$OtherDb
+compositeTrack on
+shortLabel $organism miniMap2 Chain/Net
+longLabel $organism ($o_date), minimap2 Chain and Lift Over Alignments
+subGroup1 view Views chain=Chain liftover=LiftOver
+dragAndDrop subTracks
+visibility hide
+group compGeno
+"
+
+  printf "priority 100.1
+color 0,0,0
+altColor 100,50,0
+type bed 3
+sortOrder view=+
+otherDb $otherDb
+html html/$asmId.miniMap2ChainNet
+
+"
+
+  printf "    track chainNetMiniMap2${OtherDb}Viewchain
+    shortLabel Chain
+    view chain
+    visibility pack
+    parent chainNetMiniMap2$OtherDb
+    spectrum on
+
+        track chainMiniMap2$OtherDb
+        parent chainNetMiniMap2${OtherDb}Viewchain
+        subGroups view=chain
+        shortLabel $organism mm2 Chain
+        longLabel $organism ($o_date) minimap2 Chained Alignments
+        type bigChain $otherDb
+        bigDataUrl bbi/$asmId.chainMiniMap2$OtherDb.bb
+        linkDataUrl bbi/$asmId.chainMiniMap2${OtherDb}Link.bb
+        priority %d
+
+" $((chainNetPriority++))
+
+if [ -s "$buildDir/bbi/${asmId}.chainLiftOverMiniMap2$OtherDb.bb" ]; then
+
+printf "    track chainNetMiniMap2${OtherDb}ViewLiftOver
+    shortLabel Lift Over
+    view liftover
+    visibility hide
+    parent chainNetMiniMap2$OtherDb
+    spectrum on
+
+        track chainLiftOverMiniMap2$OtherDb
+        parent chainNetMiniMap2${OtherDb}ViewLiftOver
+        subGroups view=liftover
+        shortLabel $organism mm2 loChain
+        longLabel $organism ($o_date) minimap2 Lift Over Chained Alignments
+        type bigChain $otherDb
+        bigDataUrl bbi/$asmId.chainLiftOverMiniMap2$OtherDb.bb
+        linkDataUrl bbi/$asmId.chainLiftOverMiniMap2${OtherDb}Link.bb
+        priority %d
+
+" $((chainNetPriority++))
+
+fi
+
+done