Skip to content

Commit 3601972

Browse files
committed
Bugfix to GLNexus
1 parent bad6efb commit 3601972

3 files changed

Lines changed: 37 additions & 8 deletions

File tree

SequenceAnalysis/api-src/org/labkey/api/sequenceanalysis/run/DockerWrapper.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,11 @@ public int getMaxRetries()
221221
return _maxRetries;
222222
}
223223

224+
public void setMaxRetries(int maxRetries)
225+
{
226+
_maxRetries = maxRetries;
227+
}
228+
224229
// NOTE: when running on a shared/cluster environment with multiple containers initializing concurrently, conflicts can result in these error codes.
225230
// As a convenience, build in auto-retry behavior if one of these occurs
226231
private final List<Integer> ALLOWABLE_FAIL_CODES = new UnmodifiableList<>(Arrays.asList(125, 127));

SequenceAnalysis/src/org/labkey/sequenceanalysis/analysis/GLNexusHandler.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import org.labkey.api.sequenceanalysis.SequenceAnalysisService;
1616
import org.labkey.api.sequenceanalysis.SequenceOutputFile;
1717
import org.labkey.api.sequenceanalysis.pipeline.AbstractParameterizedOutputHandler;
18-
import org.labkey.api.sequenceanalysis.pipeline.BcftoolsRunner;
1918
import org.labkey.api.sequenceanalysis.pipeline.PipelineOutputTracker;
2019
import org.labkey.api.sequenceanalysis.pipeline.ReferenceGenome;
2120
import org.labkey.api.sequenceanalysis.pipeline.SequenceAnalysisJobSupport;
@@ -25,9 +24,9 @@
2524
import org.labkey.api.sequenceanalysis.run.AbstractCommandWrapper;
2625
import org.labkey.api.sequenceanalysis.run.DockerWrapper;
2726
import org.labkey.api.util.FileType;
27+
import org.labkey.api.util.FileUtil;
2828
import org.labkey.api.writer.PrintWriters;
2929
import org.labkey.sequenceanalysis.SequenceAnalysisModule;
30-
import org.labkey.sequenceanalysis.run.util.BgzipRunner;
3130
import org.labkey.sequenceanalysis.util.SequenceUtil;
3231

3332
import java.io.File;
@@ -172,7 +171,7 @@ else if (genomeIds.isEmpty())
172171
SAMSequenceDictionary dict = SAMSequenceDictionaryExtractor.extractDictionary(rg.getSequenceDictionary().toPath());
173172
for (SAMSequenceRecord r : dict.getSequences())
174173
{
175-
File contigVcf = new File(ctx.getOutputDir(), basename + "." + r.getSequenceName() + ".vcf.gz");
174+
File contigVcf = FileUtil.appendName(ctx.getOutputDir(), basename + "." + r.getSequenceName() + ".vcf.gz");
176175
File contigVcfIdx = new File(contigVcf.getPath() + ".tbi");
177176
File doneFile = new File(contigVcf.getPath() + ".done");
178177
ctx.getFileManager().addIntermediateFile(contigVcf);
@@ -241,8 +240,9 @@ public void execute(List<File> inputGvcfs, File outputVcf, PipelineOutputTracker
241240
DockerWrapper wrapper = new DockerWrapper("ghcr.io/dnanexus-rnd/glnexus:" + binVersion, ctx.getLogger(), ctx);
242241
wrapper.setTmpDir(new File(SequencePipelineService.get().getJavaTempDir()));
243242
wrapper.setWorkingDir(ctx.getWorkingDirectory());
243+
wrapper.setMaxRetries(0);
244244

245-
File bed = new File(ctx.getWorkingDirectory(), "contig.bed");
245+
File bed = FileUtil.appendName(ctx.getWorkingDirectory(), "contig.bed");
246246
tracker.addIntermediateFile(bed);
247247
try (PrintWriter bedWriter = PrintWriters.getPrintWriter(bed))
248248
{
@@ -277,12 +277,10 @@ public void execute(List<File> inputGvcfs, File outputVcf, PipelineOutputTracker
277277
dockerArgs.add(f.getPath());
278278
});
279279

280-
File bcftools = BcftoolsRunner.getBcfToolsPath();
281-
File bgzip = BgzipRunner.getExe();
282-
dockerArgs.add(" | " + bcftools.getPath() + " view | " + bgzip.getPath() + " -c > " + outputVcf.getPath());
280+
dockerArgs.add(" | bcftools view | bgzip -f -c > " + outputVcf.getPath());
283281

284282
// Command will fail if this exists:
285-
File dbDir = new File (ctx.getWorkingDirectory(), "GLnexus.DB");
283+
File dbDir = FileUtil.appendName(ctx.getWorkingDirectory(), "GLnexus.DB");
286284
tracker.addIntermediateFile(dbDir);
287285
if (dbDir.exists())
288286
{
@@ -296,6 +294,10 @@ public void execute(List<File> inputGvcfs, File outputVcf, PipelineOutputTracker
296294
throw new PipelineJobException(e);
297295
}
298296
}
297+
else
298+
{
299+
getLogger().debug("GLnexus.DB does not exist: " + dbDir.getPath());
300+
}
299301

300302
wrapper.executeWithDocker(dockerArgs, ctx.getWorkingDirectory(), tracker, inputGvcfs);
301303

jbrowse/src/org/labkey/jbrowse/model/JsonFile.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package org.labkey.jbrowse.model;
22

3+
import htsjdk.samtools.BAMIndexer;
4+
import htsjdk.samtools.SamReader;
5+
import htsjdk.samtools.SamReaderFactory;
36
import htsjdk.samtools.util.FileExtensions;
47
import htsjdk.tribble.bed.BEDCodec;
58
import htsjdk.tribble.gff.Gff3Codec;
@@ -931,6 +934,25 @@ public File prepareResource(User u, Logger log, boolean throwIfNotPrepared, bool
931934
{
932935
SequenceAnalysisService.get().ensureBamOrCramIdx(targetFile, log, false);
933936
}
937+
else if (TRACK_TYPES.bam.getFileType().isType(targetFile))
938+
{
939+
if (targetFile.length() < 5e6)
940+
{
941+
log.debug("Creating BAM index: " + targetFile.getPath());
942+
try (SamReader samReader = SamReaderFactory.make().open(targetFile.toPath()))
943+
{
944+
BAMIndexer.createIndex(samReader, fileIdx);
945+
}
946+
catch (IOException e)
947+
{
948+
throw new PipelineJobException(e);
949+
}
950+
}
951+
else
952+
{
953+
log.debug("BAM lacks an index but is too large to auto-create: " + targetFile.length());
954+
}
955+
}
934956
}
935957
}
936958

0 commit comments

Comments
 (0)