968f93baf48b914f5b7d127e68a5228dad673118 hiram Tue Apr 5 11:20:08 2022 -0700 adding in liftOver chainNet definitions refs #29207 diff --git src/hg/utils/automation/asmHubChainNetTrackDb.pl src/hg/utils/automation/asmHubChainNetTrackDb.pl index 43de2b0..0002333 100755 --- src/hg/utils/automation/asmHubChainNetTrackDb.pl +++ src/hg/utils/automation/asmHubChainNetTrackDb.pl @@ -1,216 +1,313 @@ #!/usr/bin/env perl use strict; use warnings; use File::Basename; sub usage() { printf STDERR "usage: asmHubChainNetTrackDb.pl <buildDir>\n"; printf STDERR "expecting to find directories: buildDir/trackData/lastz.*/\n"; printf STDERR "where each /lastz.*/ directory is one completed lastz/chainNet\n"; printf STDERR "and basename(buildDir) is the 'target' sequence name\n"; exit 255; } +# try to find the date and assembly name for a hub +sub hubDateName($) { + my ($accession) = @_; + my $returnDate = "some date"; + my $returnAsmName = ""; + + my $gcX = substr($accession, 0, 3); + my $d0 = substr($accession, 4, 3); + my $d1 = substr($accession, 7, 3); + my $d2 = substr($accession, 10, 3); + my $dirCount = `ls -d /hive/data/outside/ncbi/genomes/$gcX/$d0/$d1/$d2/${accession}* | wc -l`; + chomp $dirCount; + if (1 == $dirCount) { + my $srcDir = `ls -d /hive/data/outside/ncbi/genomes/$gcX/$d0/$d1/$d2/${accession}*`; + chomp $srcDir; + if ( -d "${srcDir}" ) { + my $asmId = basename($srcDir); + my $asmRpt = "$srcDir/${asmId}_assembly_report.txt"; + if ( -s "${asmRpt}" ) { + (undef, undef, $returnAsmName) = split('_', $asmId, 3); + if (defined($returnAsmName)) { + $returnAsmName =~ s/\r//; + $returnAsmName =~ s/^/_/; + } else { + $returnAsmName = ""; + } + my $tDate = `egrep -m 1 -i "^#[[:space:]]*Date:" "${asmRpt}" | sed -e 's/.*ate: \\+//;' | tr -d '\r'`; + chomp $tDate; + $returnDate = $tDate if (length($tDate)); + } + } + } + return ($returnDate, $returnAsmName); +} + my $argc = scalar(@ARGV); if ($argc != 1) { usage; } my $buildDir = shift; my $targetDb = basename($buildDir); my @queryList; open (DL, "ls -d $buildDir/trackData/lastz.*|") or die "can not list $buildDir/trackData/lastz.*"; while (my $lastzDir = <DL>) { chomp $lastzDir; my $queryDb = basename($lastzDir); $queryDb =~ s/lastz.//; push @queryList, $queryDb; } close (DL); # foreach my $queryDb (@queryList) { # printf "%s vs. %s\n", $queryDb, $targetDb; #} ##### begin trackDb output ###### printf "track %sChainNet\n", $targetDb; printf "compositeTrack on shortLabel Chain/Net longLabel Chain and Net alignments to target sequence: %s\n", $targetDb; printf "subGroup1 view Views chain=Chains net=Nets\n"; printf "subGroup2 species Species"; my $N = 0; foreach my $queryDb (@queryList) { printf " s%03d=%s", $N++, $queryDb; } printf "\n"; printf "subGroup3 clade Clade c00=human\n"; printf "dragAndDrop subTracks\n"; printf "visibility pack group compGeno noInherit on color 0,0,0 altColor 255,255,0 type bed 3 chainLinearGap loose chainMinScore 5000 dimensions dimensionX=clade dimensionY=species sortOrder species=+ view=+ clade=+ configurable on\n"; printf "html %sChainNet\n", $targetDb; printf " track %sChainNetViewchain shortLabel Chains view chain visibility pack subTrack %sChainNet spectrum on ", $targetDb, $targetDb; $N = 0; +my $chainNetPriority = 1; foreach my $queryDb (@queryList) { my $QueryDb = ucfirst($queryDb); `rm -f $buildDir/bbi/$targetDb.chain${QueryDb}.bb`; `rm -f $buildDir/bbi/$targetDb.chain${QueryDb}Link.bb`; `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 = ""; if ( $queryDb !~ m/^GC/ ) { $queryDate = `hgsql -N -e 'select description from dbDb where name="$queryDb"' hgcentraltest | sed -e 's/ (.*//;'`; chomp $queryDate; + } else { + ($queryDate, $queryAsmName) = hubDateName($queryDb); } printf " track chain%s subTrack %sChainNetViewchain off subGroups view=chain species=s%03d clade=c00 shortLabel %s Chain - longLabel %s (%s) Chained Alignments + longLabel %s%s (%s) Chained Alignments type bigChain %s bigDataUrl bbi/%s.chain%s.bb linkDataUrl bbi/%s.chain%sLink.bb otherDb %s -", $QueryDb, $targetDb, $N, $queryDb, $queryDb, $queryDate, $queryDb, $targetDb, - $QueryDb, $targetDb, $QueryDb, $queryDb; + priority %d +", $QueryDb, $targetDb, $N, $queryDb, $queryDb, $queryAsmName, $queryDate, $queryDb, $targetDb, + $QueryDb, $targetDb, $QueryDb, $queryDb, $chainNetPriority++; 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`; printf " track chainSyn%s subTrack %sChainNetViewchain off subGroups view=chain species=s%03d clade=c00 shortLabel %s synChain - longLabel %s (%s) Syntenic Chained Alignments + longLabel %s%s (%s) Syntenic Chained Alignments type bigChain %s bigDataUrl bbi/%s.chainSyn%s.bb linkDataUrl bbi/%s.chainSyn%sLink.bb otherDb %s -", $QueryDb, $targetDb, $N, $queryDb, $queryDb, $queryDate, $queryDb, $targetDb, - $QueryDb, $targetDb, $QueryDb, $queryDb; + priority %d +", $QueryDb, $targetDb, $N, $queryDb, $queryDb, $queryAsmName, $queryDate, $queryDb, $targetDb, + $QueryDb, $targetDb, $QueryDb, $queryDb, $chainNetPriority++; } 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`; printf " track chainRBest%s subTrack %sChainNetViewchain off subGroups view=chain species=s%03d clade=c00 shortLabel %s rbChain - longLabel %s (%s) Reciprocal Best Chained Alignments + longLabel %s%s (%s) Reciprocal Best Chained Alignments type bigChain %s bigDataUrl bbi/%s.chainRBest%s.bb linkDataUrl bbi/%s.chainRBest%sLink.bb otherDb %s -", $QueryDb, $targetDb, $N, $queryDb, $queryDb, $queryDate, $queryDb, $targetDb, - $QueryDb, $targetDb, $QueryDb, $queryDb; + priority %d +", $QueryDb, $targetDb, $N, $queryDb, $queryDb, $queryAsmName, $queryDate, $queryDb, $targetDb, + $QueryDb, $targetDb, $QueryDb, $queryDb, $chainNetPriority++; + + } + +# ln -s ../trackData/$lastzDir/axtChain/chainLiftOver${OtherDb}.bb $buildDir/bbi/${asmId}.chainLiftOver$OtherDb.bb +# ln -s ../trackData/$lastzDir/axtChain/chainLiftOver${OtherDb}Link.bb $buildDir/bbi/${asmId}.chainLiftOver${OtherDb}Link.bb +# ln -s ../trackData/$lastzDir/bigMaf/$accessionId.$otherDb.liftOverNet.bb $buildDir/bbi/${asmId}.$otherDb.liftOverNet.bb +# ln -s ../trackData/$lastzDir/bigMaf/$accessionId.$otherDb.liftOverNet.summary.bb $buildDir/bbi/${asmId}.$otherDb.liftOverNet.summary.bb + + 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`; + + printf " + track chainLiftOver%s + subTrack %sChainNetViewchain off + subGroups view=chain species=s%03d clade=c00 + shortLabel %s loChain + longLabel %s%s (%s) Lift Over Chained Alignments + type bigChain %s + bigDataUrl bbi/%s.chainLiftOver%s.bb + linkDataUrl bbi/%s.chainLiftOver%sLink.bb + otherDb %s + priority %d +", $QueryDb, $targetDb, $N, $queryDb, $queryDb, $queryAsmName, $queryDate, $queryDb, $targetDb, + $QueryDb, $targetDb, $QueryDb, $queryDb, $chainNetPriority++; } $N++; } printf " track %sMafNetViewnet shortLabel Nets view net visibility dense subTrack %sChainNet ", $targetDb, $targetDb; $N = 0; +$chainNetPriority = 1; foreach my $queryDb (@queryList) { my @targetAccession = split('_', $targetDb); my $targetAcc = sprintf("%s_%s", $targetAccession[0], $targetAccession[1]); my $QueryDb = ucfirst($queryDb); `rm -f $buildDir/bbi/$targetDb.${queryDb}.net.bb`; `rm -f $buildDir/bbi/$targetDb.${queryDb}.net.summary.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`; my $queryDate = "some date"; + my $queryAsmName = ""; if ( $queryDb !~ m/^GC/ ) { $queryDate = `hgsql -N -e 'select description from dbDb where name="$queryDb"' hgcentraltest | sed -e 's/ (.*//;'`; chomp $queryDate; + } else { + ($queryDate, $queryAsmName) = hubDateName($queryDb); } printf " track net%s parent %sMafNetViewnet subGroups view=net species=s%03d clade=c00 shortLabel %s mafNet - longLabel %s (%s) mafNet Alignment + longLabel %s%s (%s) mafNet Alignment type bigMaf bigDataUrl bbi/%s.%s.net.bb summary bbi/%s.%s.net.summary.bb speciesOrder %s html html/%s.chainNet -", $QueryDb, $targetDb, $N, $queryDb, $queryDb, $queryDate, $targetDb, $queryDb, $targetDb, $queryDb, $queryDb, $targetDb; + priority %d +", $QueryDb, $targetDb, $N, $queryDb, $queryDb, $queryAsmName, $queryDate, $targetDb, $queryDb, $targetDb, $queryDb, $queryDb, $targetDb, $chainNetPriority++; if ( -s "$buildDir/trackData/lastz.$queryDb/bigMaf/${targetAcc}.${queryDb}.synNet.bb" ) { `rm -f $buildDir/bbi/$targetDb.${queryDb}.synNet.bb`; `rm -f $buildDir/bbi/$targetDb.${queryDb}.synNet.summary.bb`; `ln -s ../trackData/lastz.$queryDb/bigMaf/${targetAcc}.${queryDb}.synNet.bb $buildDir/bbi/$targetDb.${queryDb}.synNet.bb`; `ln -s ../trackData/lastz.$queryDb/bigMaf/${targetAcc}.${queryDb}.synNet.summary.bb $buildDir/bbi/$targetDb.${queryDb}.synNet.summary.bb`; printf " track synNet%s parent %sMafNetViewnet subGroups view=net species=s%03d clade=c00 shortLabel %s synNet - longLabel %s (%s) Syntenic Net Alignment + longLabel %s%s (%s) Syntenic Net Alignment type bigMaf bigDataUrl bbi/%s.%s.synNet.bb summary bbi/%s.%s.synNet.summary.bb speciesOrder %s html html/%s.chainNet -", $QueryDb, $targetDb, $N, $queryDb, $queryDb, $queryDate, $targetDb, $queryDb, $targetDb, $queryDb, $queryDb, $targetDb; + priority %d +", $QueryDb, $targetDb, $N, $queryDb, $queryDb, $queryAsmName, $queryDate, $targetDb, $queryDb, $targetDb, $queryDb, $queryDb, $targetDb, $chainNetPriority++; } if ( -s "$buildDir/trackData/lastz.$queryDb/bigMaf/${targetAcc}.${queryDb}.rbestNet.bb" ) { `rm -f $buildDir/bbi/$targetDb.${queryDb}.rbestNet.bb`; `rm -f $buildDir/bbi/$targetDb.${queryDb}.rbestNet.summary.bb`; `ln -s ../trackData/lastz.$queryDb/bigMaf/${targetAcc}.${queryDb}.rbestNet.bb $buildDir/bbi/$targetDb.${queryDb}.rbestNet.bb`; `ln -s ../trackData/lastz.$queryDb/bigMaf/${targetAcc}.${queryDb}.rbestNet.summary.bb $buildDir/bbi/$targetDb.${queryDb}.rbestNet.summary.bb`; printf " track rbestNet%s parent %sMafNetViewnet subGroups view=net species=s%03d clade=c00 shortLabel %s rbestNet - longLabel %s (%s) Reciprocal Best Net Alignment + longLabel %s%s (%s) Reciprocal Best Net Alignment type bigMaf bigDataUrl bbi/%s.%s.rbestNet.bb summary bbi/%s.%s.rbestNet.summary.bb speciesOrder %s html html/%s.chainNet -", $QueryDb, $targetDb, $N, $queryDb, $queryDb, $queryDate, $targetDb, $queryDb, $targetDb, $queryDb, $queryDb, $targetDb; + priority %d +", $QueryDb, $targetDb, $N, $queryDb, $queryDb, $queryAsmName, $queryDate, $targetDb, $queryDb, $targetDb, $queryDb, $queryDb, $targetDb, $chainNetPriority++; + + } + + if ( -s "$buildDir/trackData/lastz.$queryDb/bigMaf/${targetAcc}.${queryDb}.liftOverNet.bb" ) { + `rm -f $buildDir/bbi/$targetDb.${queryDb}.liftOverNet.bb`; + `rm -f $buildDir/bbi/$targetDb.${queryDb}.liftOverNet.summary.bb`; + `ln -s ../trackData/lastz.$queryDb/bigMaf/${targetAcc}.${queryDb}.liftOverNet.bb $buildDir/bbi/$targetDb.${queryDb}.liftOverNet.bb`; + `ln -s ../trackData/lastz.$queryDb/bigMaf/${targetAcc}.${queryDb}.liftOverNet.summary.bb $buildDir/bbi/$targetDb.${queryDb}.liftOverNet.summary.bb`; + printf " + track liftOverNet%s + parent %sMafNetViewnet + subGroups view=net species=s%03d clade=c00 + shortLabel %s liftOverNet + longLabel %s%s (%s) Lift Over Net Alignment + type bigMaf + bigDataUrl bbi/%s.%s.liftOverNet.bb + summary bbi/%s.%s.liftOverNet.summary.bb + speciesOrder %s + html html/%s.chainNet + priority %d +", $QueryDb, $targetDb, $N, $queryDb, $queryDb, $queryAsmName, $queryDate, $targetDb, $queryDb, $targetDb, $queryDb, $queryDb, $targetDb, $chainNetPriority++; } $N++; }