a4984ed4a91768bac66cecaf7593bc0b7fca453f hiram Mon Jan 19 14:12:05 2026 -0800 correctly recognize files in a blat directory refs #35575 diff --git src/hg/makeDb/doc/asmHubs/quickLiftCatchUp.sh src/hg/makeDb/doc/asmHubs/quickLiftCatchUp.sh index 2c6e9fafce4..eb0f3b50cd0 100755 --- src/hg/makeDb/doc/asmHubs/quickLiftCatchUp.sh +++ src/hg/makeDb/doc/asmHubs/quickLiftCatchUp.sh @@ -1,180 +1,193 @@ #!/bin/bash ####################################################################### ### quickLiftCatchUp.sh ####################################################################### set -beEu -o pipefail if [ $# -ne 2 ]; then printf "usage: ./quickLiftCatchUp.sh targetAsmId queryAsmId\n" 1>&2 printf "Helper script to catch up and create quickLift files, symLinks and quickLiftChain table entry if it hasn't been done before by the usual lastz/chain/net process.\n" 1>&2 exit 255 fi # export S=`echo $((15 + RANDOM % (85 - 15 + 1)))` # sleep $S export target="${1}" export query="${2}" export targetDir="${target}" export targetAcc="${target}" export targetSizes="chrom.sizes" export qlPath="/gbdb/genark/" export quickLinkSrc="" if [[ $target == GC* ]]; then gcX="${target:0:3}" d0="${target:4:3}" d1="${target:7:3}" d2="${target:10:3}" targetAcc=`echo $target | cut -d'_' -f1-2` tDir="/hive/data/genomes/asmHubs/allBuild/$gcX/$d0/$d1/$d2/$target" targetDir="`realpath ${tDir}`/trackData" targetSizes="`realpath ${tDir}`/${target}.chrom.sizes" qlPath="/gbdb/genark/${gcX}/${d0}/${d1}/${d2}/${targetAcc}/quickLift" quickLinkSrc="${targetDir}" else targetDir="/hive/data/genomes/${target}/bed" targetSizes="/hive/data/genomes/${target}/chrom.sizes" targetAcc="${target}" qlPath="/gbdb/${target}/quickLift" mkdir -p "${qlPath}" quickLinkSrc="/hive/data/genomes/${target}/bed" fi if [ ! -d "${targetDir}" ]; then printf "ERROR: can not find targetDir: '%s'\n" "${targetDir}" 1>&2 exit 255 fi export queryDir="${query}" export queryAcc="${query}" export querySizes="chrom.sizes" export quickLinkPath="${qlPath}" if [[ $query == GC* ]]; then gcX="${query:0:3}" d0="${query:4:3}" d1="${query:7:3}" d2="${query:10:3}" queryAcc=`echo $query | cut -d'_' -f1-2` tDir="/hive/data/genomes/asmHubs/allBuild/$gcX/$d0/$d1/$d2/$query" queryDir="`realpath ${tDir}`/trackData" querySizes="`realpath ${tDir}`/${query}.chrom.sizes" quickLinkPath="${qlPath}/${queryAcc}" quickLinkSrc="${quickLinkSrc}/lastz.${queryAcc}/axtChain/${targetAcc}.${queryAcc}" else queryDir="/hive/data/genomes/${query}/bed/" querySizes="/hive/data/genomes/${query}/chrom.sizes" quickLinkPath="${qlPath}/${query}" quickLinkSrc="${quickLinkSrc}/lastz.${queryAcc}/axtChain/${targetAcc}.${queryAcc}" fi export QueryAcc="${queryAcc^}" export targetQueryOverChain="${targetAcc}.${queryAcc}.over.chain.gz" export fbTargetQuery="../fb.${targetAcc}.quick${QueryAcc}Link.txt" if [ ! -d "${queryDir}" ]; then printf "ERROR: can not find queryDir: '%s'\n" "${queryDir}" 1>&2 exit 255 fi export axtChain="${targetDir}/lastz.${queryAcc}/axtChain" printf "checking: %s\n" "${axtChain}" 1>&2 printf "checking: %s\n" "${targetQueryOverChain}" 1>&2 if [ ! -d "${axtChain}" ]; then - axtChain="`ls -d ${targetDir}/blat.${queryAcc}.* | tail -1`" + printf "checking ${targetDir}/blastz.${queryAcc}/axtChain\n" 1>&2 + ls -d ${targetDir}/blastz.${queryAcc}/axtChain || true + axtChain="`ls -d ${targetDir}/blastz.${queryAcc}/axtChain || true | tail -1`" + if [ -d "${axtChain}" ]; then + targetQueryOverChain="${axtChain}/${targetAcc}.${queryAcc}.over.chain.gz" + fbTargetQuery="fb.${targetAcc}.quick${QueryAcc}Link.txt" + quickLinkSrc="${axtChain}/${targetAcc}.${queryAcc}" + else + printf "checking ${targetDir}/blat.${queryAcc}.*\n" 1>&2 + ls -d ${targetDir}/blat.${queryAcc}.* || true + axtChain="`ls -d ${targetDir}/blat.${queryAcc}.* || true | tail -1`" if [ -d "${axtChain}" ]; then targetQueryOverChain="${axtChain}/${targetAcc}To${QueryAcc}.over.chain.gz" fbTargetQuery="fb.${targetAcc}.quick${QueryAcc}Link.txt" quickLinkSrc="${axtChain}/${targetAcc}.${queryAcc}" if [ ! -s "${targetQueryOverChain}" ]; then printf "ERROR: can not find target.query.over.chain:\n%s\n" "${targetQueryOverChain}" exit 255 fi else printf "ERROR: can not find axtChain: '%s'\n" "${axtChain}" 1>&2 exit 255 fi fi +fi cd "${axtChain}" +# rm -f "${fbTargetQuery}" if [ -s "${fbTargetQuery}" ]; then printf "DONE: ${target} ${query} %s\n" "`cat ${fbTargetQuery}`" 1>&2 exit 0 fi +# rm -f "${quickLinkPath}.bb" if [ -s "${quickLinkPath}.bb" ]; then printf "symLink exists: ${quickLinkPath}.bb\n" 1>&2 exit 0 fi if [ ! -s "${targetQueryOverChain}" ]; then printf "ERROR: can not find target.query.over.chain:\n%s\n" "${targetQueryOverChain}" exit 255 fi printf "working: %s\n" "${axtChain}" 1>&2 printf "%s\n" "${targetSizes}" 1>&2 printf "%s\n" "${querySizes}" 1>&2 printf "%s\n" "${targetQueryOverChain}" 1>&2 printf "%s\n" "${fbTargetQuery}" 1>&2 printf "%s\n" "${quickLinkPath}" 1>&2 printf "%s\n" "${quickLinkSrc}" 1>&2 if [ "${targetQueryOverChain}" -nt ${targetAcc}.${queryAcc}.quick.chain.txt ]; then chainSwap "${targetQueryOverChain}" stdout \ | chainToBigChain stdin ${targetAcc}.${queryAcc}.quick.chain.txt \ ${targetAcc}.${queryAcc}.quick.link.txt touch -r "${targetQueryOverChain}" ${targetAcc}.${queryAcc}.quick.chain.txt touch -r "${targetQueryOverChain}" ${targetAcc}.${queryAcc}.quick.link.txt else printf "DONE: ${targetAcc}.${queryAcc}.quick.chain.txt\n" fi if [ ${targetAcc}.${queryAcc}.quick.chain.txt -nt ${targetAcc}.${queryAcc}.quick.bb ]; then bedToBigBed -type=bed6 -as=$HOME/kent/src/hg/lib/bigChain.as \ -tab ${targetAcc}.${queryAcc}.quick.chain.txt \ "${querySizes}" \ ${targetAcc}.${queryAcc}.quick.bb touch -r ${targetAcc}.${queryAcc}.quick.chain.txt ${targetAcc}.${queryAcc}.quick.bb else printf "DONE: ${targetAcc}.${queryAcc}.quick.bb\n" fi if [ ${targetAcc}.${queryAcc}.quick.link.txt -nt ${targetAcc}.${queryAcc}.quickLink.bb ]; then bedToBigBed -type=bed4+1 -as=$HOME/kent/src/hg/lib/bigLink.as \ -tab ${targetAcc}.${queryAcc}.quick.link.txt \ "${querySizes}" \ ${targetAcc}.${queryAcc}.quickLink.bb touch -r ${targetAcc}.${queryAcc}.quick.link.txt ${targetAcc}.${queryAcc}.quickLink.bb else printf "DONE: ${targetAcc}.${queryAcc}.quickLink.bb\n" fi export totalBases=`ave -col=2 "${querySizes}" | grep "^total" | awk '{printf "%d", $2}'` export basesCovered=`bigBedInfo ${targetAcc}.${queryAcc}.quickLink.bb | grep basesCovered | cut -d' ' -f2 | tr -d ','` export percentCovered=`echo $basesCovered $totalBases | awk '{printf "%.3f", 100.0*$1/$2}'` printf "%d bases of %d (%s%%) in intersection\n" "$basesCovered" "$totalBases" "$percentCovered" > "${fbTargetQuery}" printf "# %s %s %s\n" "${targetAcc}" "${queryAcc}" "`cat ${fbTargetQuery}`" 1>&2 rm -f ${targetAcc}.${queryAcc}.quick.chain.txt ${targetAcc}.${queryAcc}.quick.link.txt if [[ $target == GC* ]]; then cd "${targetDir}" cd .. ./doTrackDb.bash /cluster/home/hiram/kent/src/hg/utils/automation/addQuickLift.py \ "${targetAcc}" "${queryAcc}" "${quickLinkPath}.bb" else printf "/cluster/home/hiram/kent/src/hg/utils/automation/addQuickLift.py ${targetAcc} ${queryAcc} ${quickLinkPath}.bb\n" 1>&2 /cluster/home/hiram/kent/src/hg/utils/automation/addQuickLift.py ${targetAcc} ${queryAcc} ${quickLinkPath}.bb printf "ln -s ${quickLinkSrc}.quick.bb ${quickLinkPath}.bb\n" printf "ln -s ${quickLinkSrc}.quickLink.bb ${quickLinkPath}.link.bb\n" ln -s ${quickLinkSrc}.quick.bb ${quickLinkPath}.bb ln -s ${quickLinkSrc}.quickLink.bb ${quickLinkPath}.link.bb fi