a5855ded640de30881d63cf3255399cc3c8e4238 hiram Sat Dec 20 12:44:18 2025 -0800 fixup empty lav result for axt output per Michael Hiller diff --git src/hg/utils/automation/blastz-run-ucsc src/hg/utils/automation/blastz-run-ucsc index 74fc78ddf24..b19673e83a3 100755 --- src/hg/utils/automation/blastz-run-ucsc +++ src/hg/utils/automation/blastz-run-ucsc @@ -651,43 +651,51 @@ my $littleOut = "$TMP/little.lav"; my $littleConv = "$TMP/little.conv"; # Run blastz on each {target, query} pair; lift and collect results. foreach my $tSpec (@tFileSpecs) { my ($tSeq, $tLocal) = ("", ""); my $axtResult = 0; if ($tSpec =~ m/.2bit$/) { $tLocal = $tSpec; # use .2bit file when it exists $axtResult = 1; # lastz can only output axt when using 2bit[multiple] } else { ($tSeq, $tLocal) = &unpackForBlastz($tSpec, $seq1Dir, 't'); } foreach my $qSpec (@qFileSpecs) { my ($qSeq, $qLocal) = ("", ""); + my $answer = 1; # flag: Will be set to 0 by plainBlastz() in case + # it doesn't run blastz and creates an emtpy lav file if ($qSpec =~ m/.2bit$/) { $qLocal = $qSpec; } else { ($qSeq, $qLocal) = &unpackForBlastz($qSpec, $seq2Dir, 'q'); } if ($defVars{'BLASTZ_ABRIDGE_REPEATS'}) { &abridgeLinSpecReps($tLocal, $qLocal, $blastzOptions, $littleRaw); } else { - &plainBlastz($tLocal, $qLocal, $blastzOptions, $littleRaw); + $answer = &plainBlastz($tLocal, $qLocal, $blastzOptions, $littleRaw); } # there may be no lifting involved when axtResult TBD XXX if ($axtResult) { + # in case axtResult is set and plainBlastz() created an empty lav, + # convert this to an empty axt. Otherwise axtToPsl below crashes + if ($answer) { &run("$cpCmd -p $littleRaw $littleOut"); + } else { + &convertOutput($littleRaw, $littleOut); + } } else { if ($collapsed) { # Lift target side only: &liftLav($littleRaw, $littleOut, $tSeq, undef); } else { &liftLav($littleRaw, $littleOut, $tSeq, $qSeq); if ($qLocal =~ /^$TMP/) { $qLocal =~ s/\[.*\]$//; &run("$rmCmd $qLocal"); } } } if ($opt_outFormat) { if ($axtResult) { if ($opt_outFormat eq 'axt') {