7c0c6f08b3e53af0c02ec2f198ef1592584dccd9
hiram
  Sat Apr 1 19:18:30 2023 -0700
correctly remove rmsk.customLib.fa.gz link refs #30508

diff --git src/hg/utils/automation/asmHubTrackDb.sh src/hg/utils/automation/asmHubTrackDb.sh
index a019e3f..726496f 100755
--- src/hg/utils/automation/asmHubTrackDb.sh
+++ src/hg/utils/automation/asmHubTrackDb.sh
@@ -1,977 +1,978 @@
 #!/bin/bash
 
 set -beEu -o pipefail
 
 if [ $# -ne 3 ]; then
   printf "usage: trackDb.sh <asmId> <ncbiAsmId> <pathTo/assembly hub build directory> > trackDb.txt\n" 1>&2
   printf "expecting to find *.ucsc.2bit and bbi/ files at given path\n" 1>&2
   printf "asmId may be equal to ncbiAsmId if it is a GenArk build\n" 1>&2
   printf "or asmId might be a default dbName if it is a UCSC style\n" 1>&2
   printf "browser build.\n" 1>&2
   exit 255
 fi
 
 export asmId=$1
 export ncbiAsmId=$2
 export buildDir=$3
 
 export scriptDir="$HOME/kent/src/hg/utils/automation"
 
 export asmType="n/a"
 
 # technique to set variables based on the name in another variable:
 
 if [ -s "$buildDir/dropTracks.list" ]; then
   printf "# reading dropTracks.list\n" 1>&2
   for dropTrack in `cat "$buildDir/dropTracks.list"`
   do
      notTrack="not_${dropTrack}"
 #      printf "# %s\n" "${notTrack}" 1>&2
      eval $notTrack="1"
   done
 fi
 
 case "${asmId}" in
   GCA_*) asmType="genbank"
     ;;
   GCF_*) asmType="refseq"
     ;;
 esac
 
 mkdir -p $buildDir/bbi
 mkdir -p $buildDir/ixIxx
 
 # may or may not have a searchTrix for assembly, assume none
 export searchTrix=""
 # check to see if there is a searchTrix assembly index
 if [ -s ${buildDir}/trackData/assemblyGap/${asmId}.assembly.ix ]; then
   rm -f $buildDir/ixIxx/${asmId}.assembly.ix*
   ln -s ../trackData/assemblyGap/${asmId}.assembly.ix $buildDir/ixIxx
   ln -s ../trackData/assemblyGap/${asmId}.assembly.ixx $buildDir/ixIxx
   searchTrix="
 searchTrix ixIxx/${asmId}.assembly.ix"
 fi
 
 if [ -s ${buildDir}/trackData/assemblyGap/${asmId}.assembly.bb ]; then
 rm -f $buildDir/bbi/${asmId}.assembly.bb
 ln -s ../trackData/assemblyGap/${asmId}.assembly.bb $buildDir/bbi/${asmId}.assembly.bb
 printf "track assembly
 longLabel Assembly
 shortLabel Assembly
 visibility pack
 colorByStrand 150,100,30 230,170,40
 color 150,100,30
 altColor 230,170,40
 bigDataUrl bbi/%s.assembly.bb
 type bigBed 6
 html html/%s.assembly
 searchIndex name%s
 url https://www.ncbi.nlm.nih.gov/nuccore/\$\$
 urlLabel NCBI Nucleotide database:
 group map\n\n" "${asmId}" "${asmId}" "${searchTrix}"
 $scriptDir/asmHubAssembly.pl $asmId $buildDir/html/$asmId.names.tab $buildDir/$asmId.agp.gz https://hgdownload.soe.ucsc.edu/hubs/VGP/genomes/$asmId > $buildDir/html/$asmId.assembly.html
 fi
 
 if [ -s ${buildDir}/trackData/assemblyGap/${asmId}.gap.bb ]; then
 rm -f $buildDir/bbi/${asmId}.gap.bb
 ln -s ../trackData/assemblyGap/${asmId}.gap.bb $buildDir/bbi/${asmId}.gap.bb
 printf "track gap
 longLabel AGP gap
 shortLabel Gap (AGP defined)
 visibility dense
 color 0,0,0
 bigDataUrl bbi/%s.gap.bb
 type bigBed 4
 group map
 html html/%s.gap\n\n" "${asmId}" "${asmId}"
 $scriptDir/asmHubGap.pl $asmId $buildDir/html/$asmId.names.tab $buildDir/$asmId.agp.gz https://hgdownload.soe.ucsc.edu/hubs/VGP/genomes/$asmId > $buildDir/html/$asmId.gap.html
 fi
 
 if [ -s ${buildDir}/trackData/cytoBand/${asmId}.cytoBand.bb ]; then
 rm -f $buildDir/bbi/${asmId}.cytoBand.bb
 ln -s ../trackData/cytoBand/${asmId}.cytoBand.bb $buildDir/bbi/${asmId}.cytoBand.bb
 
 # printf "track cytoBand
 # shortLabel Chromosome Band
 # longLabel Ideogram
 # group map
 # visibility dense
 # type bigBed 4 +
 # bigDataUrl bbi/%s.cytoBandIdeo.bb
 # html html/%s.cytoBand\n\n" "${asmId}" "${asmId}"
 
 # only the ideoGram is needed, not the track
 
 printf "track cytoBandIdeo
 shortLabel Chromosome Band (Ideogram)
 longLabel Ideogram for Orientation
 group map
 visibility dense
 type bigBed 4 +
 bigDataUrl bbi/%s.cytoBand.bb\n\n" "${asmId}"
 
 # $scriptDir/asmHubCytoBand.pl $asmId $buildDir/html/$asmId.names.tab $buildDir > $buildDir/html/$asmId.cytoBand.html
 fi
 
 if [ -s ${buildDir}/trackData/gc5Base/${asmId}.gc5Base.bw ]; then
 rm -f $buildDir/bbi/${asmId}.gc5Base.bw
 ln -s ../trackData/gc5Base/${asmId}.gc5Base.bw $buildDir/bbi/${asmId}.gc5Base.bw
 printf "track gc5Base
 shortLabel GC Percent
 longLabel GC Percent in 5-Base Windows
 group map
 visibility full
 autoScale Off
 maxHeightPixels 128:36:16
 graphTypeDefault Bar
 gridDefault OFF
 windowingFunction Mean
 color 0,0,0
 altColor 128,128,128
 viewLimits 30:70
 type bigWig 0 100
 bigDataUrl bbi/%s.gc5Base.bw
 html html/%s.gc5Base\n\n" "${asmId}" "${asmId}"
 
 $scriptDir/asmHubGc5Percent.pl $asmId $buildDir/html/$asmId.names.tab $buildDir > $buildDir/html/$asmId.gc5Base.html
 fi
 
 # see if there are gapOverlap or tandemDup bb files
 export gapOverlapCount=0
 export tanDupCount=0
 if [ -s $buildDir/trackData/gapOverlap/${asmId}.gapOverlap.bb ]; then
   gapOverlapCount=`zcat $buildDir/trackData/gapOverlap/${asmId}.gapOverlap.bed.gz | wc -l`
   rm -f $buildDir/bbi/${asmId}.gapOverlap.bb
   ln -s ../trackData/gapOverlap/${asmId}.gapOverlap.bb $buildDir/bbi/${asmId}.gapOverlap.bb
 fi
 if [ -s $buildDir/trackData/tandemDups/${asmId}.tandemDups.bb ]; then
   tanDupCount=`zcat $buildDir/trackData/tandemDups/${asmId}.tandemDups.bed.gz | wc -l`
   rm -f $buildDir/bbi/${asmId}.tandemDups.bb
   ln -s ../trackData/tandemDups/${asmId}.tandemDups.bb $buildDir/bbi/${asmId}.tandemDups.bb
 fi
 
 if [ "${gapOverlapCount}" -gt 0 -o "${tanDupCount}" -gt 0 ]; then
 
   if [ -z ${not_tanDups+x} ]; then
 
   printf "track tanDups
 shortLabel Tandem Dups
 longLabel Paired identical sequences
 compositeTrack on
 visibility hide
 type bigBed 12
 group map
 html html/%s.tanDups\n\n" "${asmId}"
 
   if [ "${gapOverlapCount}" -gt 0 ]; then
     printf "    track gapOverlap
     parent tanDups on
     shortLabel Gap Overlaps
     longLabel Paired exactly identical sequence on each side of a gap
     bigDataUrl bbi/%s.gapOverlap.bb
     type bigBed 12\n\n" "${asmId}"
   fi
 
   if [ "${tanDupCount}" -gt 0 ]; then
     printf "    track tandemDups
     parent tanDups on
     shortLabel Tandem Dups
     longLabel Paired exactly identical sequence survey over entire genome assembly
     bigDataUrl bbi/%s.tandemDups.bb
     type bigBed 12\n\n" "${asmId}"
   fi
 
   $scriptDir/asmHubTanDups.pl $asmId $buildDir/html/$asmId.names.tab $buildDir/trackData > $buildDir/html/$asmId.tanDups.html
 
   else
     printf "# skipping the tanDups track\n" 1>&2
   fi	#	the else clause of: if [ -z ${not_tanDups+x} ]
 fi	#	if [ "${gapOverlapCount}" -gt 0 -o "${tanDupCount}" -gt 0 ]
 
 # see if there are repeatMasker bb files
 export rmskCount=`(ls $buildDir/trackData/repeatMasker/bbi/${asmId}.rmsk.*.bb 2> /dev/null | wc -l) || true`
 export newRmsk=`(ls $buildDir/trackData/repeatMasker/${asmId}.rmsk.align.bb $buildDir/trackData/repeatMasker/${asmId}.rmsk.bb 2> /dev/null | wc -l) || true`
 
 if [ "${newRmsk}" -gt 0 -o "${rmskCount}" -gt 0 ]; then
 
 if [ ! -s "$buildDir/trackData/repeatMasker/$asmId.sorted.fa.out.gz" ]; then
   printf "ERROR: can not find trackData/repeatMasker/$asmId.sorted.fa.out.gz\n" 1>&2
   exit 255
 fi
 
 # see if there are actually rmsk items in the track, this has to be > 3
 export rmskItemCount=`zcat $buildDir/trackData/repeatMasker/$asmId.sorted.fa.out.gz | head | wc -l`
 
 # clean up garbage from previous errors here
 if [ "${rmskItemCount}" -lt 4 ]; then
   rm -f $buildDir/$asmId.repeatMasker.out.gz
   rm -f "$buildDir/${asmId}.repeatMasker.version.txt"
   rm -f $buildDir/bbi/${asmId}.rmsk.align.bb
   rm -f $buildDir/bbi/${asmId}.rmsk.bb
   rm -f $buildDir/${asmId}.fa.align.tsv.gz
   rm -f $buildDir/${asmId}.fa.join.tsv.gz
   rm -f $buildDir/${asmId}.rmsk.customLib.fa.gz
 else
 
 rm -f $buildDir/$asmId.repeatMasker.out.gz
 ln -s trackData/repeatMasker/$asmId.sorted.fa.out.gz $buildDir/$asmId.repeatMasker.out.gz
 if [ -s "$buildDir/trackData/repeatMasker/versionInfo.txt" ]; then
    rm -f "$buildDir/${asmId}.repeatMasker.version.txt"
    ln -s trackData/repeatMasker/versionInfo.txt "$buildDir/${asmId}.repeatMasker.version.txt"
 fi
 if [ -s "$buildDir/trackData/repeatModeler/${asmId}-families.fa" ]; then
+   rm -f "$buildDir/${asmId}.rmsk.customLib.fa.gz"
    cp -p "$buildDir/trackData/repeatModeler/${asmId}-families.fa" "$buildDir/${asmId}.rmsk.customLib.fa"
    gzip "$buildDir/${asmId}.rmsk.customLib.fa"
 fi
 
 if [ "${newRmsk}" -gt 0 ]; then
   rm -f $buildDir/bbi/${asmId}.rmsk.align.bb
   rm -f $buildDir/bbi/${asmId}.rmsk.bb
   rm -f $buildDir/${asmId}.fa.align.tsv.gz
   rm -f $buildDir/${asmId}.fa.join.tsv.gz
   if [ -s "$buildDir/bbi/${asmId}.rmsk.align.bb" ]; then
     ln -s ../trackData/repeatMasker/${asmId}.rmsk.align.bb $buildDir/bbi/${asmId}.rmsk.align.bb
     ln -s trackData/repeatMasker/${asmId}.fa.align.tsv.gz $buildDir/${asmId}.fa.align.tsv.gz
   fi
   ln -s ../trackData/repeatMasker/${asmId}.rmsk.bb $buildDir/bbi/${asmId}.rmsk.bb
   ln -s trackData/repeatMasker/${asmId}.sorted.fa.join.tsv.gz $buildDir/${asmId}.fa.join.tsv.gz
 
 printf "track repeatMasker
 shortLabel RepeatMasker
 longLabel RepeatMasker Repetitive Elements
 type bigRmsk 9 +
 visibility pack
 group varRep
 bigDataUrl bbi/%s.rmsk.bb\n" "${asmId}"
 if [ -s "$buildDir/bbi/${asmId}.rmsk.align.bb" ]; then
   printf "xrefDataUrl bbi/%s.rmsk.align.bb\n" "${asmId}"
 fi
 printf "maxWindowToDraw 5000000\n"
 export rmskClassProfile="$buildDir/trackData/repeatMasker/$asmId.rmsk.class.profile.txt"
 if [ -s "${rmskClassProfile}" ]; then
   printf "html html/%s.repeatMasker\n\n" "${asmId}"
   $scriptDir/asmHubRmskJoinAlign.pl $asmId $buildDir > $buildDir/html/$asmId.repeatMasker.html
 else
   printf "\n"
 fi
 
 else	#	else clause of if [ "${newRmsk}" -gt 0 ]
 
 printf "track repeatMasker
 compositeTrack on
 shortLabel RepeatMasker
 longLabel Repeating Elements by RepeatMasker
 group varRep
 visibility dense
 type bigBed 6 +
 colorByStrand 50,50,150 150,50,50
 maxWindowToDraw 10000000
 spectrum on
 html html/%s.repeatMasker\n\n" "${asmId}"
 $scriptDir/asmHubRmsk.pl $asmId $buildDir/html/$asmId.names.tab $buildDir/trackData/repeatMasker/$asmId.rmsk.class.profile.txt > $buildDir/html/$asmId.repeatMasker.html
 
 
 if [ -s ${buildDir}/trackData/repeatMasker/bbi/${asmId}.rmsk.SINE.bb ]; then
 rm -f $buildDir/bbi/${asmId}.rmsk.SINE.bb
 ln -s ../trackData/repeatMasker/bbi/${asmId}.rmsk.SINE.bb $buildDir/bbi/${asmId}.rmsk.SINE.bb
 printf "    track repeatMaskerSINE
     parent repeatMasker
     shortLabel SINE
     longLabel SINE Repeating Elements by RepeatMasker
     type bigBed 6 +
     priority 1
     bigDataUrl bbi/%s.rmsk.SINE.bb\n\n" "${asmId}"
 fi
 
 if [ -s ${buildDir}/trackData/repeatMasker/bbi/${asmId}.rmsk.LINE.bb ]; then
 rm -f $buildDir/bbi/${asmId}.rmsk.LINE.bb
 ln -s ../trackData/repeatMasker/bbi/${asmId}.rmsk.LINE.bb $buildDir/bbi/${asmId}.rmsk.LINE.bb
 printf "    track repeatMaskerLINE
     parent repeatMasker
     shortLabel LINE
     longLabel LINE Repeating Elements by RepeatMasker
     type bigBed 6 +
     priority 2
     bigDataUrl bbi/%s.rmsk.LINE.bb\n\n" "${asmId}"
 fi
 
 if [ -s ${buildDir}/trackData/repeatMasker/bbi/${asmId}.rmsk.LTR.bb ]; then
 rm -f $buildDir/bbi/${asmId}.rmsk.LTR.bb
 ln -s ../trackData/repeatMasker/bbi/${asmId}.rmsk.LTR.bb $buildDir/bbi/${asmId}.rmsk.LTR.bb
 printf "    track repeatMaskerLTR
     parent repeatMasker
     shortLabel LTR
     longLabel LTR Repeating Elements by RepeatMasker
     type bigBed 6 +
     priority 3
     bigDataUrl bbi/%s.rmsk.LTR.bb\n\n" "${asmId}"
 fi
 
 if [ -s ${buildDir}/trackData/repeatMasker/bbi/${asmId}.rmsk.DNA.bb ]; then
 rm -f $buildDir/bbi/${asmId}.rmsk.DNA.bb
 ln -s ../trackData/repeatMasker/bbi/${asmId}.rmsk.DNA.bb $buildDir/bbi/${asmId}.rmsk.DNA.bb
 printf "    track repeatMaskerDNA
     parent repeatMasker
     shortLabel DNA
     longLabel DNA Repeating Elements by RepeatMasker
     type bigBed 6 +
     priority 4
     bigDataUrl bbi/%s.rmsk.DNA.bb\n\n" "${asmId}"
 fi
 
 if [ -s ${buildDir}/trackData/repeatMasker/bbi/${asmId}.rmsk.Simple.bb ]; then
 rm -f $buildDir/bbi/${asmId}.rmsk.Simple.bb
 ln -s ../trackData/repeatMasker/bbi/${asmId}.rmsk.Simple.bb $buildDir/bbi/${asmId}.rmsk.Simple.bb
 printf "    track repeatMaskerSimple
     parent repeatMasker
     shortLabel Simple
     longLabel Simple Repeating Elements by RepeatMasker
     type bigBed 6 +
     priority 5
     bigDataUrl bbi/%s.rmsk.Simple.bb\n\n" "${asmId}"
 fi
 
 if [ -s ${buildDir}/trackData/repeatMasker/bbi/${asmId}.rmsk.Low_complexity.bb ]; then
 rm -f $buildDir/bbi/${asmId}.rmsk.Low_complexity.bb
 ln -s ../trackData/repeatMasker/bbi/${asmId}.rmsk.Low_complexity.bb $buildDir/bbi/${asmId}.rmsk.Low_complexity.bb
 printf "    track repeatMaskerLowComplexity
     parent repeatMasker
     shortLabel Low Complexity
     longLabel Low Complexity Repeating Elements by RepeatMasker
     type bigBed 6 +
     priority 6
     bigDataUrl bbi/%s.rmsk.Low_complexity.bb\n\n" "${asmId}"
 fi
 
 if [ -s ${buildDir}/trackData/repeatMasker/bbi/${asmId}.rmsk.Satellite.bb ]; then
 rm -f $buildDir/bbi/${asmId}.rmsk.Satellite.bb
 ln -s ../trackData/repeatMasker/bbi/${asmId}.rmsk.Satellite.bb $buildDir/bbi/${asmId}.rmsk.Satellite.bb
 printf "    track repeatMaskerSatellite
     parent repeatMasker
     shortLabel Satellite
     longLabel Satellite Repeating Elements by RepeatMasker
     type bigBed 6 +
     priority 7
     bigDataUrl bbi/%s.rmsk.Satellite.bb\n\n" "${asmId}"
 fi
 
 if [ -s ${buildDir}/trackData/repeatMasker/bbi/${asmId}.rmsk.RNA.bb ]; then
 rm -f $buildDir/bbi/${asmId}.rmsk.RNA.bb
 ln -s ../trackData/repeatMasker/bbi/${asmId}.rmsk.RNA.bb $buildDir/bbi/${asmId}.rmsk.RNA.bb
 printf "    track repeatMaskerRNA
     parent repeatMasker
     shortLabel RNA
     longLabel RNA Repeating Elements by RepeatMasker
     type bigBed 6 +
     priority 8
     bigDataUrl bbi/%s.rmsk.RNA.bb\n\n" "${asmId}"
 fi
 
 if [ -s ${buildDir}/trackData/repeatMasker/bbi/${asmId}.rmsk.Other.bb ]; then
 rm -f $buildDir/bbi/${asmId}.rmsk.Other.bb
 ln -s ../trackData/repeatMasker/bbi/${asmId}.rmsk.Other.bb $buildDir/bbi/${asmId}.rmsk.Other.bb
 printf "    track repeatMaskerOther
     parent repeatMasker
     shortLabel Other
     longLabel Other Repeating Elements by RepeatMasker
     type bigBed 6 +
     priority 9
     bigDataUrl bbi/%s.rmsk.Other.bb\n\n" "${asmId}"
 fi
 
 fi	#	else clause of if [ "${newRmsk}" -gt 0 ]; then
 fi	#	else clause of if [ "${rmskItemCount}" -lt 4 ]
 fi      #       if [ "${newRmsk}" -eq 2 -o "${rmskCount}" -gt 0 ]; then
 
 if [ -s ${buildDir}/trackData/simpleRepeat/simpleRepeat.bb ]; then
 rm -f $buildDir/bbi/${asmId}.simpleRepeat.bb
 ln -s ../trackData/simpleRepeat/simpleRepeat.bb $buildDir/bbi/${asmId}.simpleRepeat.bb
 printf "track simpleRepeat
 shortLabel Simple Repeats
 longLabel Simple Tandem Repeats by TRF
 group varRep
 visibility dense
 type bigBed 4 +
 bigDataUrl bbi/%s.simpleRepeat.bb
 html html/%s.simpleRepeat\n\n" "${asmId}" "${asmId}"
 $scriptDir/asmHubSimpleRepeat.pl $asmId $buildDir/html/$asmId.names.tab $buildDir > $buildDir/html/$asmId.simpleRepeat.html
 fi
 
 ### assume there is no ncbiRefSeq track
 ### when there is, this will eliminate the ncbiGene track
 ### and it figures into setting the visibility of the augustus gene track
 export haveNcbiRefSeq="no"
 
 ###################################################################
 # ncbiRefSeq composite track
 if [ -s ${buildDir}/trackData/ncbiRefSeq/$asmId.ncbiRefSeq.bb ]; then
 rm -f $buildDir/bbi/${asmId}.ncbiRefSeq.bb
 rm -f $buildDir/ixIxx/${asmId}.ncbiRefSeq.ix
 rm -f $buildDir/ixIxx/${asmId}.ncbiRefSeq.ixx
 ln -s ../trackData/ncbiRefSeq/$asmId.ncbiRefSeq.bb $buildDir/bbi/${asmId}.ncbiRefSeq.bb
 ln -s ../trackData/ncbiRefSeq/$asmId.ncbiRefSeq.ix $buildDir/ixIxx/${asmId}.ncbiRefSeq.ix
 ln -s ../trackData/ncbiRefSeq/$asmId.ncbiRefSeq.ixx $buildDir/ixIxx/${asmId}.ncbiRefSeq.ixx
 if [ -s ${buildDir}/trackData/ncbiRefSeq/${asmId}*.ncbiRefSeq.gtf.gz ]; then
     mkdir -p $buildDir/genes
     rm -f ${buildDir}/genes/${asmId}.ncbiRefSeq.gtf.gz
     gtfFile=`ls ${buildDir}/trackData/ncbiRefSeq/${asmId}*.ncbiRefSeq.gtf.gz|tail -1|sed -e 's#.*/##;'`
     ln -s ../trackData/ncbiRefSeq/${gtfFile} ${buildDir}/genes/${asmId}.ncbiRefSeq.gtf.gz
 fi
 
   export dataVersion="html/ncbiRefSeqVersion.txt"
   if [ -s ${buildDir}/trackData/ncbiRefSeq/$asmId.ncbiRefSeqVersion.txt ]; then
    dataVersion=`cat ${buildDir}/trackData/ncbiRefSeq/$asmId.ncbiRefSeqVersion.txt`
   fi
 
   printf "track refSeqComposite
 compositeTrack on
 shortLabel NCBI RefSeq
 longLabel RefSeq gene predictions from NCBI
 group genes
 visibility pack
 type bigBed
 dragAndDrop subTracks
 allButtonPair on
 dataVersion $dataVersion
 html html/%s.refSeqComposite
 priority 2
 
         track ncbiRefSeq
         parent refSeqComposite on
         color 12,12,120
         altColor 120,12,12
         shortLabel RefSeq All
         type bigGenePred
         labelFields name,geneName,geneName2
         defaultLabelFields geneName2
         searchIndex name
         searchTrix ixIxx/%s.ncbiRefSeq.ix
         bigDataUrl bbi/%s.ncbiRefSeq.bb
         longLabel NCBI RefSeq genes, curated and predicted sets (NM_*, XM_*, NR_*, XR_*, NP_* or YP_*)
         idXref ncbiRefSeqLink mrnaAcc name
         baseColorUseCds given
         baseColorDefault genomicCodons
         priority 1\n\n" "${asmId}" "${asmId}" "${asmId}"
 
   if [ -s ${buildDir}/trackData/ncbiRefSeq/$asmId.ncbiRefSeqCurated.bb ]; then
     rm -f $buildDir/bbi/${asmId}.ncbiRefSeqCurated.bb
     rm -f $buildDir/ixIxx/${asmId}.ncbiRefSeqCurated.ix
     rm -f $buildDir/ixIxx/${asmId}.ncbiRefSeqCurated.ixx
     ln -s ../trackData/ncbiRefSeq/$asmId.ncbiRefSeqCurated.bb $buildDir/bbi/${asmId}.ncbiRefSeqCurated.bb
     ln -s ../trackData/ncbiRefSeq/$asmId.ncbiRefSeqCurated.ix $buildDir/ixIxx/${asmId}.ncbiRefSeqCurated.ix
     ln -s ../trackData/ncbiRefSeq/$asmId.ncbiRefSeqCurated.ixx $buildDir/ixIxx/${asmId}.ncbiRefSeqCurated.ixx
 
     printf "        track ncbiRefSeqCurated
         color 12,12,120
         parent refSeqComposite on
         shortLabel RefSeq Curated
         longLabel NCBI RefSeq genes, curated subset (NM_*, NR_*, NP_* or YP_*)
         type bigGenePred
         labelFields name,geneName,geneName2
         defaultLabelFields geneName2
         searchIndex name
         searchTrix ixIxx/%s.ncbiRefSeqCurated.ix
         idXref ncbiRefSeqLink mrnaAcc name
         bigDataUrl bbi/%s.ncbiRefSeqCurated.bb
         baseColorUseCds given
         baseColorDefault genomicCodons
         priority 2\n\n" "${asmId}" "${asmId}"
   fi
 
   if [ -s ${buildDir}/trackData/ncbiRefSeq/$asmId.ncbiRefSeqPredicted.bb ]; then
     rm -f $buildDir/bbi/${asmId}.ncbiRefSeqPredicted.bb
     rm -f $buildDir/ixIxx/${asmId}.ncbiRefSeqPredicted.ix
     rm -f $buildDir/ixIxx/${asmId}.ncbiRefSeqPredicted.ixx
     ln -s ../trackData/ncbiRefSeq/$asmId.ncbiRefSeqPredicted.bb $buildDir/bbi/${asmId}.ncbiRefSeqPredicted.bb
     ln -s ../trackData/ncbiRefSeq/$asmId.ncbiRefSeqPredicted.ix $buildDir/ixIxx/${asmId}.ncbiRefSeqPredicted.ix
     ln -s ../trackData/ncbiRefSeq/$asmId.ncbiRefSeqPredicted.ixx $buildDir/ixIxx/${asmId}.ncbiRefSeqPredicted.ixx
 
     printf "        track ncbiRefSeqPredicted
         color 12,12,120
         parent refSeqComposite on
         shortLabel RefSeq Predicted
         longLabel NCBI RefSeq genes, predicted subset (XM_* or XR_*)
         type bigGenePred
         labelFields name,geneName,geneName2
         defaultLabelFields geneName2
         searchIndex name
         searchTrix ixIxx/%s.ncbiRefSeqPredicted.ix
         idXref ncbiRefSeqLink mrnaAcc name
         bigDataUrl bbi/%s.ncbiRefSeqPredicted.bb
         baseColorUseCds given
         baseColorDefault genomicCodons
         priority 3\n\n" "${asmId}" "${asmId}"
   fi
 
   if [ -s ${buildDir}/trackData/ncbiRefSeq/$asmId.ncbiRefSeqOther.bb ]; then
     rm -f $buildDir/bbi/${asmId}.ncbiRefSeqOther.bb
     rm -f $buildDir/ixIxx/${asmId}.ncbiRefSeqOther.ix
     rm -f $buildDir/ixIxx/${asmId}.ncbiRefSeqOther.ixx
     ln -s ../trackData/ncbiRefSeq/$asmId.ncbiRefSeqOther.bb $buildDir/bbi/${asmId}.ncbiRefSeqOther.bb
 rm -f $buildDir/ixIxx/${asmId}.xenoRefGene.ix
     ln -s ../trackData/ncbiRefSeq/$asmId.ncbiRefSeqOther.ix $buildDir/ixIxx/${asmId}.ncbiRefSeqOther.ix
     ln -s ../trackData/ncbiRefSeq/$asmId.ncbiRefSeqOther.ixx $buildDir/ixIxx/${asmId}.ncbiRefSeqOther.ixx
 
     printf "        track ncbiRefSeqOther
         color 32,32,32
         parent refSeqComposite on
         shortLabel RefSeq Other
         longLabel NCBI RefSeq other annotations (not NM_*, NR_*, XM_*, XR_*, NP_* or YP_*)
         priority 4
         searchIndex name
         searchTrix ixIxx/%s.ncbiRefSeqOther.ix
         bigDataUrl bbi/%s.ncbiRefSeqOther.bb
         type bigBed 12 +
         labelFields name
         skipEmptyFields on
         urls GeneID=\"https://www.ncbi.nlm.nih.gov/gene/\$\$\" MIM=\"https://www.ncbi.nlm.nih.gov/omim/\$\$\" HGNC=\"http://www.genenames.org/cgi-bin/gene_symbol_report?hgnc_id=\$\$\" FlyBase=\"http://flybase.org/reports/\$\$\" WormBase=\"http://www.wormbase.org/db/gene/gene?name=\$\$\" RGD=\"https://rgd.mcw.edu/rgdweb/search/search.html?term=\$\$\" SGD=\"https://www.yeastgenome.org/locus/\$\$\" miRBase=\"http://www.mirbase.org/cgi-bin/mirna_entry.pl?acc=\$\$\" ZFIN=\"https://zfin.org/\$\$\" MGI=\"http://www.informatics.jax.org/marker/\$\$\"\n\n" "${asmId}" "${asmId}"
 
   fi
 
   if [ -s ${buildDir}/trackData/ncbiRefSeq/$asmId.bigPsl.bb ]; then
     rm -f $buildDir/bbi/${asmId}.bigPsl.bb
     ln -s ../trackData/ncbiRefSeq/$asmId.bigPsl.bb $buildDir/bbi/${asmId}.bigPsl.bb
 
     printf "        track ncbiRefSeqPsl
         priority 5
         parent refSeqComposite off
         shortLabel RefSeq Alignments
         longLabel RefSeq Alignments of RNAs
         type bigPsl
         searchIndex name
         bigDataUrl bbi/%s.bigPsl.bb
         indelDoubleInsert on
         indelQueryInsert on
         showDiffBasesAllScales .
         showDiffBasesMaxZoom 10000.0
         showCdsMaxZoom 10000.0
         showCdsAllScales .
         baseColorDefault diffCodons
         pslSequence no
         baseColorUseSequence lfExtra
         baseColorUseCds table given
         color 0,0,0\n\n" "${asmId}"
   fi
 
   if [ -s ${buildDir}/trackData/ncbiRefSeq/$asmId.ncbiRefSeqSelectCurated.bb ]; then
     rm -f $buildDir/bbi/${asmId}.ncbiRefSeqSelectCurated.bb
     rm -f $buildDir/ixIxx/${asmId}.ncbiRefSeqSelectCurated.ix
     rm -f $buildDir/ixIxx/${asmId}.ncbiRefSeqSelectCurated.ixx
     ln -s ../trackData/ncbiRefSeq/$asmId.ncbiRefSeqSelectCurated.bb $buildDir/bbi/${asmId}.ncbiRefSeqSelectCurated.bb
     ln -s ../trackData/ncbiRefSeq/$asmId.ncbiRefSeqSelectCurated.ix $buildDir/ixIxx/${asmId}.ncbiRefSeqSelectCurated.ix
     ln -s ../trackData/ncbiRefSeq/$asmId.ncbiRefSeqSelectCurated.ixx $buildDir/ixIxx/${asmId}.ncbiRefSeqSelectCurated.ixx
 
     printf "        track ncbiRefSeqSelect
         parent refSeqComposite off
         priority 7
         type bigGenePred
         shortLabel RefSeq Select
         longLabel NCBI RefSeq/MANE Select: one representative transcript per protein-coding gene
         idXref ncbiRefSeqLink mrnaAcc name
         color 20,20,160
         labelFields name,geneName,geneName2
         searchIndex name
         searchTrix ixIxx/%s.ncbiRefSeqSelectCurated.ix
         bigDataUrl bbi/%s.ncbiRefSeqSelectCurated.bb
         baseColorUseCds given
         baseColorDefault genomicCodons\n\n" "${asmId}" "${asmId}"
   fi
 
   if [ -s ${buildDir}/trackData/ncbiRefSeq/$asmId.ncbiRefSeqVersion.txt ]; then
     rm -f $buildDir/html/$asmId.ncbiRefSeqVersion.txt
     ln -s ../trackData/ncbiRefSeq/$asmId.ncbiRefSeqVersion.txt $buildDir/html/
   fi
 
   $scriptDir/asmHubNcbiRefSeq.pl $asmId $buildDir/html/$asmId.names.tab $buildDir/trackData > $buildDir/html/$asmId.refSeqComposite.html
 
 haveNcbiRefSeq="yes"
 fi	# ncbiRefSeq composite track
 
 ### assume there is no ncbiGene track
 ### it figures into setting the visibility of the augustus gene track
 export haveNcbiGene="no"
 
 ###################################################################
 ## setup ncbiGene only if ncbiRefSeq is not present
 if [ "${haveNcbiRefSeq}" = "no" ]; then
 
 # may or may not have a searchTrix for ncbiGene, assume none
 searchTrix=""
 # check to see if there is a index for ncbiGene
 if [ -s ${buildDir}/trackData/ncbiGene/$asmId.ncbiGene.ix ]; then
   searchTrix="
 searchTrix ixIxx/$asmId.ncbiGene.ix"
 fi
 
 
 if [ -s ${buildDir}/trackData/ncbiGene/$asmId.ncbiGene.bb ]; then
 rm -f $buildDir/bbi/${asmId}.ncbiGene.bb
 rm -f $buildDir/ixIxx/${asmId}.ncbiGene.ix
 rm -f $buildDir/ixIxx/${asmId}.ncbiGene.ixx
 export longLabel="Gene models submitted to NCBI"
 export shortLabel="Gene models"
 if [ "$asmType" = "refseq" ]; then
   longLabel="NCBI gene predictions"
   shortLabel="NCBI Genes"
 fi
 ln -s ../trackData/ncbiGene/$asmId.ncbiGene.bb $buildDir/bbi/${asmId}.ncbiGene.bb
 ln -s ../trackData/ncbiGene/$asmId.ncbiGene.ix $buildDir/ixIxx/${asmId}.ncbiGene.ix
 ln -s ../trackData/ncbiGene/$asmId.ncbiGene.ixx $buildDir/ixIxx/${asmId}.ncbiGene.ixx
   printf "track ncbiGene
 longLabel $longLabel
 shortLabel $shortLabel
 visibility pack
 color 0,80,150
 altColor 150,80,0
 colorByStrand 0,80,150 150,80,0
 bigDataUrl bbi/%s.ncbiGene.bb
 type bigGenePred
 html html/%s.ncbiGene
 searchIndex name%s
 url https://www.ncbi.nlm.nih.gov/gene/?term=\$\$
 urlLabel Entrez gene:
 labelFields geneName,geneName2
 defaultLabelFields geneName2
 group genes\n\n" "${asmId}" "${asmId}" "${searchTrix}"
 
   $scriptDir/asmHubNcbiGene.pl $asmId $ncbiAsmId $buildDir/html/$asmId.names.tab $buildDir/trackData > $buildDir/html/$asmId.ncbiGene.html
 
 haveNcbiGene="yes"
 fi	#	if [ -s ${buildDir}/trackData/ncbiGene/$asmId.ncbiGene.bb ]
 fi	#	if [ "${haveNcbiRefSeq}" = "no" ]
 ###################################################################
 
 ###################################################################
 # CpG Islands composite
 export cpgVis="off"
 # if there is no unmasked track, then set cpgVis to pack
 if [ ! -s ${buildDir}/trackData/cpgIslands/unmasked/${asmId}.cpgIslandExtUnmasked.bb ]; then
   cpgVis="on"
 fi
 if [ -s ${buildDir}/trackData/cpgIslands/unmasked/${asmId}.cpgIslandExtUnmasked.bb -o -s ${buildDir}/trackData/cpgIslands/masked/${asmId}.cpgIslandExt.bb ]; then
 rm -f ${buildDir}/bbi/${asmId}.cpgIslandExtUnmasked.bb ${buildDir}/bbi/${asmId}.cpgIslandExt.bb
 
 printf "track cpgIslands
 compositeTrack on
 shortLabel CpG Islands
 longLabel CpG Islands (Islands < 300 Bases are Light Green)
 group regulation
 visibility pack
 type bigBed 4 +
 html html/%s.cpgIslands\n\n" "${asmId}"
 fi
 
 if [ -s ${buildDir}/trackData/cpgIslands/masked/${asmId}.cpgIslandExt.bb ]; then
 ln -s ../trackData/cpgIslands/masked/${asmId}.cpgIslandExt.bb ${buildDir}/bbi/${asmId}.cpgIslandExt.bb
 printf "    track cpgIslandExt
     parent cpgIslands %s
     shortLabel CpG Islands
     longLabel CpG Islands (Islands < 300 Bases are Light Green)
     type bigBed 4 +
     priority 1
     bigDataUrl bbi/%s.cpgIslandExt.bb\n\n" "${cpgVis}" "${asmId}"
 fi
 
 if [ -s ${buildDir}/trackData/cpgIslands/unmasked/${asmId}.cpgIslandExtUnmasked.bb ]; then
 ln -s ../trackData/cpgIslands/unmasked/${asmId}.cpgIslandExtUnmasked.bb ${buildDir}/bbi/${asmId}.cpgIslandExtUnmasked.bb
 printf "    track cpgIslandExtUnmasked
     parent cpgIslands on
     shortLabel Unmasked CpG
     longLabel CpG Islands on All Sequence (Islands < 300 Bases are Light Green)
     type bigBed 4 +
     priority 2
     bigDataUrl bbi/%s.cpgIslandExtUnmasked.bb\n\n" "${asmId}"
 fi
 
 if [ -s ${buildDir}/trackData/cpgIslands/unmasked/${asmId}.cpgIslandExtUnmasked.bb -o -s ${buildDir}/trackData/cpgIslands/masked/${asmId}.cpgIslandExt.bb ]; then
   $scriptDir/asmHubCpG.pl $asmId $buildDir/html/$asmId.names.tab $buildDir/bbi/$asmId > $buildDir/html/$asmId.cpgIslands.html
 fi
 
 ###################################################################
 # windowMasker
 if [ -s ${buildDir}/trackData/windowMasker/${asmId}.windowMasker.bb ]; then
 rm -f ${buildDir}/bbi/${asmId}.windowMasker.bb
 ln -s ../trackData/windowMasker/${asmId}.windowMasker.bb ${buildDir}/bbi/${asmId}.windowMasker.bb
 
 printf "track windowMasker
 shortLabel WM + SDust
 longLabel Genomic Intervals Masked by WindowMasker + SDust
 group varRep
 visibility dense
 type bigBed 3
 bigDataUrl bbi/%s.windowMasker.bb
 html html/%s.windowMasker\n\n" "${asmId}" "${asmId}"
 $scriptDir/asmHubWindowMasker.pl $asmId $buildDir/html/$asmId.names.tab $buildDir > $buildDir/html/$asmId.windowMasker.html
 fi
 
 ###################################################################
 # allGaps
 if [ -s ${buildDir}/trackData/allGaps/${asmId}.allGaps.bb ]; then
 rm -f ${buildDir}/bbi/${asmId}.allGaps.bb
 ln -s ../trackData/allGaps/${asmId}.allGaps.bb ${buildDir}/bbi/${asmId}.allGaps.bb
 
 printf "track allGaps
 shortLabel All Gaps
 longLabel All gaps of unknown nucleotides (N's), including AGP annotated gaps
 group map
 visibility dense
 type bigBed 3
 bigDataUrl bbi/%s.allGaps.bb
 html html/%s.allGaps\n\n" "${asmId}" "${asmId}"
 $scriptDir/asmHubAllGaps.pl $asmId $buildDir/html/$asmId.names.tab $buildDir/$asmId.agp.gz https://hgdownload.soe.ucsc.edu/hubs/VGP/genomes/$asmId $buildDir/bbi/$asmId > $buildDir/html/$asmId.allGaps.html
 fi
 
 ###################################################################
 # augustus genes
 if [ -z ${not_augustus+x} ]; then
 
 if [ -s ${buildDir}/trackData/augustus/${asmId}.augustus.bb ]; then
 rm -f ${buildDir}/bbi/${asmId}.augustus.bb
 rm -f ${buildDir}/genes/${asmId}.augustus.gtf.gz
 ln -s ../trackData/augustus/${asmId}.augustus.bb ${buildDir}/bbi/${asmId}.augustus.bb
 if [ -s ${buildDir}/trackData/augustus/${asmId}.augustus.gtf.gz ]; then
     mkdir -p $buildDir/genes
     ln -s ../trackData/augustus/${asmId}.augustus.gtf.gz ${buildDir}/genes/${asmId}.augustus.gtf.gz
 fi
 
 export augustusVis="dense"
 
 if [ "${haveNcbiGene}" = "no" -a "${haveNcbiRefSeq}" = "no" ]; then
    augustusVis="pack"
 fi
 printf "track augustus
 shortLabel Augustus
 longLabel Augustus Gene Predictions
 group genes
 visibility %s
 color 180,0,0
 type bigGenePred
 bigDataUrl bbi/%s.augustus.bb
 html html/%s.augustus\n\n" "${augustusVis}" "${asmId}" "${asmId}"
 $scriptDir/asmHubAugustusGene.pl $asmId $buildDir/html/$asmId.names.tab $buildDir/bbi/$asmId > $buildDir/html/$asmId.augustus.html
 fi
 
 else
   printf "# skipping the augustus track\n" 1>&2
 fi	#	the else clause of: if [ -z ${not_augustus+x} ]
 
 ###################################################################
 # xenoRefGene genes
 if [ -s ${buildDir}/trackData/xenoRefGene/${asmId}.xenoRefGene.bb ]; then
 rm -f $buildDir/ixIxx/${asmId}.xenoRefGene.ix
 rm -f $buildDir/ixIxx/${asmId}.xenoRefGene.ixx
 rm -f $buildDir/bbi/${asmId}.xenoRefGene.bb
 rm -f $buildDir/genes/${asmId}.xenoRefGene.gtf.gz
   if [ -s ${buildDir}/trackData/xenoRefGene/${asmId}.xenoRefGene.gtf.gz ]; then
     mkdir -p $buildDir/genes
     ln -s ../trackData/xenoRefGene/${asmId}.xenoRefGene.gtf.gz ${buildDir}/genes/${asmId}.xenoRefGene.gtf.gz
   fi
 ln -s ../trackData/xenoRefGene/${asmId}.xenoRefGene.bb ${buildDir}/bbi/${asmId}.xenoRefGene.bb
 ln -s ../trackData/xenoRefGene/$asmId.xenoRefGene.ix $buildDir/ixIxx/${asmId}.xenoRefGene.ix
 ln -s ../trackData/xenoRefGene/$asmId.xenoRefGene.ixx $buildDir/ixIxx/${asmId}.xenoRefGene.ixx
 
 printf "track xenoRefGene
 shortLabel RefSeq mRNAs
 longLabel RefSeq mRNAs mapped to this assembly
 group rna
 visibility pack
 color 180,0,0
 type bigGenePred
 bigDataUrl bbi/%s.xenoRefGene.bb
 url https://www.ncbi.nlm.nih.gov/nuccore/\$\$
 urlLabel NCBI Nucleotide database:
 labelFields name,geneName,geneName2
 defaultLabelFields geneName
 searchIndex name
 searchTrix ixIxx/%s.xenoRefGene.ix
 html html/%s.xenoRefGene\n\n" "${asmId}" "${asmId}" "${asmId}"
 $scriptDir/asmHubXenoRefGene.pl $asmId $buildDir/html/$asmId.names.tab $buildDir/trackData > $buildDir/html/$asmId.xenoRefGene.html
 fi
 
 ###################################################################
 # Ensembl genes
 if [ -s ${buildDir}/trackData/ensGene/bbi/${asmId}.ensGene.bb ]; then
 ls -og ${buildDir}/trackData/ensGene/bbi/${asmId}.ensGene.bb 1>&2
 printf "# link: ../trackData/ensGene/bbi/${asmId}.ensGene.bb ${buildDir}/bbi/${asmId}.ensGene.bb\n" 1>&2
 rm -f ${buildDir}/bbi/${asmId}.ensGene.bb
 ln -s ../trackData/ensGene/bbi/${asmId}.ensGene.bb ${buildDir}/bbi/${asmId}.ensGene.bb
 rm -f ${buildDir}/ixIxx/${asmId}.ensGene.ix
 rm -f ${buildDir}/ixIxx/${asmId}.ensGene.ixx
 
 ln -s ../trackData/ensGene/process/${asmId}.ensGene.ix $buildDir/ixIxx/${asmId}.ensGene.ix
 ln -s ../trackData/ensGene/process/${asmId}.ensGene.ixx $buildDir/ixIxx/${asmId}.ensGene.ixx
 
 export ensVersion="v86"
 
 if [ -s ${buildDir}/trackData/ensGene/version.txt ]; then
   ensVersion=`cat "${buildDir}/trackData/ensGene/version.txt"`
 fi
 
 printf "track ensGene
 shortLabel Ensembl genes
 longLabel Ensembl genes %s
 group genes
 priority 40
 visibility pack
 color 150,0,0
 type bigBed 12 .
 bigDataUrl bbi/%s.ensGene.bb
 searchIndex name
 searchTrix ixIxx/%s.ensGene.ix
 html html/%s.ensGene\n\n" "${ensVersion}" "${asmId}" "${asmId}" "${asmId}"
 
 $scriptDir/asmHubEnsGene.pl $asmId $buildDir/html/$asmId.names.tab $buildDir/bbi/$asmId > $buildDir/html/$asmId.ensGene.html "${ensVersion}"
 
 else
   printf "# no ensGene found\n" 1>&2
 fi
 
 # hubLinks is for mouseStrains specific hub only
 export hubLinks="/hive/data/genomes/asmHubs/hubLinks"
 if [ -s ${hubLinks}/${asmId}/rnaSeqData/$asmId.trackDb.txt ]; then
   printf "include rnaSeqData/%s.trackDb.txt\n\n" "${asmId}"
 fi
 ##  for mouse strain hubs only
 ## turned off 2022-11-02 until these can be correctly translated
 ## to GenArk naming schemes
 ### if [ -s "${buildDir}/$asmId.bigMaf.trackDb.txt" ]; then
 ###   printf "include %s.bigMaf.trackDb.txt\n\n" "${asmId}"
 ### fi
 
 ###################################################################
 # check for blat sameSpecies liftOver, then link to lift over chain file
 export lo=`ls -d ${buildDir}/trackData/blat.* 2> /dev/null | wc -l`
 
 if [ "${lo}" -gt 0 ]; then
   mkdir -p ${buildDir}/liftOver
   for loS in `ls -d ${buildDir}/trackData/blat.* 2> /dev/null`
   do
      blatDir=`basename "${loS}"`
      overChain=`ls ${loS}/*.over.chain.gz | awk -F'/' "{print \\$NF}"`
      rm -f ${buildDir}/liftOver/${overChain}
      ln -s ../trackData/${blatDir}/${overChain} ${buildDir}/liftOver
   done
 fi
 
 ###################################################################
 # check for lastz/chain/net available
 
 export lz=`ls -d ${buildDir}/trackData/lastz.* 2> /dev/null | wc -l`
 
 if [ "${lz}" -gt 0 ]; then
   if [ "${lz}" -eq 1 ]; then
 printf "single chainNet\n" 1>&2
     export lastzDir=`ls -d ${buildDir}/trackData/lastz.*`
     export oOrganism=`basename "${lastzDir}" | sed -e 's/lastz.//;'`
     # single chainNet here, no need for a composite track, does the symLinks too
     $scriptDir/asmHubChainNetTrackDb.sh $asmId $buildDir
     $scriptDir/asmHubChainNet.pl $asmId $ncbiAsmId $buildDir/html/$asmId.names.tab $oOrganism > $buildDir/html/$asmId.chainNet.html
   else
 printf "composite chainNet\n" 1>&2
     # multiple chainNets here, create composite track, does the symLinks too
     $scriptDir/asmHubChainNetTrackDb.pl $buildDir
     $scriptDir/asmHubChainNetComposite.pl $asmId $ncbiAsmId $buildDir/html/$asmId.names.tab > $buildDir/html/$asmId.chainNet.html
   fi
 fi
 
 ###################################################################
 # crisprAll track
 
 if [ -s ${buildDir}/trackData/crisprAll/crispr.bb ]; then
 
 rm -f $buildDir/bbi/${asmId}.crisprAll.bb
 rm -f $buildDir/bbi/${asmId}.crisprAllDetails.tab
 ln -s ../trackData/crisprAll/crispr.bb ${buildDir}/bbi/${asmId}.crisprAll.bb
 ln -s ../trackData/crisprAll/crisprDetails.tab $buildDir/bbi/${asmId}.crisprAllDetails.tab
 
 printf "track crisprAllTargets
 visibility hide
 shortLabel CRISPR Targets
 longLabel CRISPR/Cas9 -NGG Targets, whole genome
 group genes
 type bigBed 9 +
 html html/%s.crisprAll
 itemRgb on
 mouseOverField _mouseOver
 scoreLabel MIT Guide Specificity Score
 bigDataUrl bbi/%s.crisprAll.bb
 # details page is not using a mysql table but a tab-sep file
 detailsTabUrls _offset=bbi/%s.crisprAllDetails.tab
 url http://crispor.tefor.net/crispor.py?org=\$D&pos=\$S:\${&pam=NGG
 urlLabel Click here to show this guide on Crispor.org, with expression oligos, validation primers and more
 tableBrowser noGenome
 noGenomeReason This track is too big for whole-genome Table Browser access, it would lead to a timeout in your internet browser. Please see the CRISPR Track documentation, the section \"Data Access\", for bulk-download options. Contact us if you encounter difficulties with downloading the data.
 denseCoverage 0
 scoreFilterMax 100
 " "${asmId}" "${asmId}" "${asmId}"
 
 $scriptDir/asmHubCrisprAll.pl $asmId $buildDir/html/$asmId.names.tab $buildDir/trackData > $buildDir/html/$asmId.crisprAll.html
 
 fi	#	if [ -s ${buildDir}/trackData/crisprAll/crispr.bb ]
 
 # TOGA track if exists
 # build directory can be either TOGAvGalGal6v1 or TOGAvHg38v1
 
 export tg=`ls -d ${buildDir}/trackData/TOGAv* 2> /dev/null | wc -l`
 if [ "${tg}" -gt 0 ]; then
   rm -f $buildDir/bbi/HLTOGAannotVs*.*
   rm -f $buildDir/ixIxx/HLTOGAannotVs*.*
   tData=`ls -d $buildDir/trackData/TOGAv* | sed -e 's#.*/trackData#trackData#;'`
   fBase=`ls $buildDir/trackData/TOGAv*/HLTOGAannotVs*.bb | sed -e 's#.*/##; s/.bb//;'`
   # there is a bug in the source files that have galGal6 when they should
   # be GalGal6
   FBase=`echo $fBase | sed -e 's#galGal6#GalGal6#;'`
   ln -s ../$tData/$fBase.bb $buildDir/bbi/$FBase.bb
   ln -s ../$tData/$fBase.ix $buildDir/ixIxx/$FBase.ix
   ln -s ../$tData/$fBase.ixx $buildDir/ixIxx/$FBase.ixx
   if [ -d ${buildDir}/trackData/TOGAvHg38v1 ]; then
 printf "track HLTOGAannotvHg38v1
 bigDataUrl bbi/HLTOGAannotVsHg38v1.bb
 shortLabel TOGA vs. hg38
 longLabel TOGA annotations using human/hg38 as reference
 group genes
 visibility pack
 itemRgb on
 type bigBed 12
 searchIndex name
 searchTrix  ixIxx/HLTOGAannotVsHg38v1.ix
 html html/TOGAannotation
 "
   elif [ -d ${buildDir}/trackData/TOGAvGalGal6v1 ]; then
 printf "track HLTOGAannotvGalGal6v1
 bigDataUrl bbi/HLTOGAannotVsGalGal6v1.bb
 shortLabel TOGA vs. galGal6
 longLabel TOGA annotations using chicken/galGal6 as reference
 group genes
 visibility pack
 itemRgb on
 type bigBed 12
 searchIndex name
 searchTrix  ixIxx/HLTOGAannotVsGalGal6v1.ix
 html html/TOGAannotation
 "
   else
     printf "# ERROR: do not recognize TOGA build directory:\n" 1>&2
     ls -d ${buildDir}/trackData/TOGAv* 1>&2
     exit 255
   fi
 
 $scriptDir/asmHubTOGA.pl $asmId $buildDir/html/$asmId.names.tab $buildDir/trackData > $buildDir/html/TOGAannotation.html
 
 fi	#	if [ "${tg}" -gt 0 ]
 
 # accessionId only used for include statements for other trackDb.txt files
 export accessionId="${asmId}"
 case ${asmId} in
    GC*)
      accessionId=`echo "$asmId" | awk -F"_" '{printf "%s_%s", $1, $2}'`
      ;;
 esac
 
 if [ -s "${buildDir}/$asmId.userTrackDb.txt" ]; then
   printf "\ninclude %s.userTrackDb.txt\n" "${accessionId}"
 fi
 
 if [ -s "${buildDir}/$asmId.trackDbOverrides.txt" ]; then
   printf "\ninclude %s.trackDbOverrides.txt\n" "${accessionId}"
 fi