Skip to content

Commit 66e70e9

Browse files
committed
Allow SnpEff to be optional in LoFreq pipeline
1 parent ffdfc6f commit 66e70e9

File tree

1 file changed

+28
-17
lines changed

1 file changed

+28
-17
lines changed

SequenceAnalysis/src/org/labkey/sequenceanalysis/run/analysis/LofreqAnalysis.java

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public class LofreqAnalysis extends AbstractCommandPipelineStep<LofreqAnalysis.L
9494
{
9595
public static final String CATEGORY = "Lowfreq VCF";
9696

97-
public LofreqAnalysis(PipelineStepProvider provider, PipelineContext ctx)
97+
public LofreqAnalysis(PipelineStepProvider<?> provider, PipelineContext ctx)
9898
{
9999
super(provider, ctx, new LofreqWrapper(ctx.getLogger()));
100100
}
@@ -108,7 +108,7 @@ public Provider()
108108
{{
109109
put("extensions", Arrays.asList("gtf", "gff", "gbk"));
110110
put("width", 400);
111-
put("allowBlank", false);
111+
put("allowBlank", true);
112112
}}, null),
113113
ToolParameterDescriptor.create("minCoverage", "Min Coverage For Consensus", "If provided, a consensus will only be called over regions with at least this depth", "ldk-integerfield", new JSONObject(){{
114114
put("minValue", 0);
@@ -212,7 +212,6 @@ public Output performAnalysisPerSampleRemote(Readset rs, File inputBam, Referenc
212212

213213
File outputVcfRaw = new File(outputDir, FileUtil.getBaseName(inputBam) + ".lofreq.vcf.gz");
214214
File outputVcfFiltered = new File(outputDir, FileUtil.getBaseName(inputBam) + ".lofreq.filtered.vcf.gz");
215-
File outputVcfSnpEff = new File(outputDir, FileUtil.getBaseName(inputBam) + ".lofreq.snpeff.vcf.gz");
216215

217216
//LoFreq call
218217
getWrapper().execute(inputBam, outputVcfRaw, referenceGenome.getWorkingFastaFile(), SequencePipelineService.get().getMaxThreads(getPipelineCtx().getLogger()));
@@ -222,6 +221,9 @@ public Output performAnalysisPerSampleRemote(Readset rs, File inputBam, Referenc
222221
output.addIntermediateFile(outputVcfRaw);
223222
output.addIntermediateFile(new File(outputVcfRaw.getPath() + ".tbi"));
224223

224+
output.addIntermediateFile(outputVcfFiltered);
225+
output.addIntermediateFile(new File(outputVcfFiltered.getPath() + ".tbi"));
226+
225227
//Add depth for downstream use:
226228
File coverageOut = new File(outputDir, SequenceAnalysisService.get().getUnzippedBaseName(outputVcfRaw.getName()) + ".coverage");
227229
runDepthOfCoverage(getPipelineCtx(), output, outputDir, referenceGenome, inputBam, coverageOut);
@@ -438,24 +440,35 @@ public Output performAnalysisPerSampleRemote(Readset rs, File inputBam, Referenc
438440
}
439441

440442
//SnpEff:
443+
File activeVCF = outputVcfFiltered;
441444
Integer geneFileId = getProvider().getParameterByName(SNPEffStep.GENE_PARAM).extractValue(getPipelineCtx().getJob(), getProvider(), getStepIdx(), Integer.class);
442-
File snpEffBaseDir = SNPEffStep.checkOrCreateIndex(getPipelineCtx().getSequenceSupport(), getPipelineCtx().getLogger(), referenceGenome, geneFileId);
445+
if (geneFileId != null)
446+
{
447+
File outputVcfSnpEff = new File(outputDir, FileUtil.getBaseName(inputBam) + ".lofreq.snpeff.vcf.gz");
443448

444-
SnpEffWrapper snpEffWrapper = new SnpEffWrapper(getPipelineCtx().getLogger());
445-
snpEffWrapper.runSnpEff(referenceGenome.getGenomeId(), geneFileId, snpEffBaseDir, outputVcfFiltered, outputVcfSnpEff, null);
449+
File snpEffBaseDir = SNPEffStep.checkOrCreateIndex(getPipelineCtx().getSequenceSupport(), getPipelineCtx().getLogger(), referenceGenome, geneFileId);
450+
SnpEffWrapper snpEffWrapper = new SnpEffWrapper(getPipelineCtx().getLogger());
451+
snpEffWrapper.runSnpEff(referenceGenome.getGenomeId(), geneFileId, snpEffBaseDir, outputVcfFiltered, outputVcfSnpEff, null);
446452

447-
try
448-
{
449-
SequenceAnalysisService.get().ensureVcfIndex(outputVcfSnpEff, getPipelineCtx().getLogger());
453+
try
454+
{
455+
SequenceAnalysisService.get().ensureVcfIndex(outputVcfSnpEff, getPipelineCtx().getLogger());
456+
}
457+
catch (IOException e)
458+
{
459+
throw new PipelineJobException(e);
460+
}
461+
462+
output.addIntermediateFile(outputVcfSnpEff);
463+
output.addIntermediateFile(new File(outputVcfSnpEff.getPath() + ".tbi"));
464+
465+
activeVCF = outputVcfSnpEff;
450466
}
451-
catch (IOException e)
467+
else
452468
{
453-
throw new PipelineJobException(e);
469+
getPipelineCtx().getLogger().info("No GTF provided, skipping SnpEff");
454470
}
455471

456-
output.addIntermediateFile(outputVcfFiltered);
457-
output.addIntermediateFile(new File(outputVcfFiltered.getPath() + ".tbi"));
458-
459472
double minFractionForConsensus = getProvider().getParameterByName("minFractionForConsensus").extractValue(getPipelineCtx().getJob(), getProvider(), getStepIdx(), Double.class, 0.0);
460473

461474
Integer primerDataId = getProvider().getParameterByName("primerBedFile").extractValue(getPipelineCtx().getJob(), getProvider(), getStepIdx(), Integer.class);
@@ -508,7 +521,7 @@ public Output performAnalysisPerSampleRemote(Readset rs, File inputBam, Referenc
508521
SAMSequenceDictionary dict = SAMSequenceDictionaryExtractor.extractDictionary(referenceGenome.getSequenceDictionary().toPath());
509522
VariantContextWriterBuilder writerBuilderConsensus = new VariantContextWriterBuilder().setOutputFile(loFreqConsensusVcf).setReferenceDictionary(dict);
510523
VariantContextWriterBuilder writerBuilderAll = new VariantContextWriterBuilder().setOutputFile(loFreqAllVcf).setReferenceDictionary(dict);
511-
try (VCFFileReader reader = new VCFFileReader(outputVcfSnpEff);CloseableIterator<VariantContext> it = reader.iterator();VariantContextWriter writerConsensus = writerBuilderConsensus.build();VariantContextWriter writerAll = writerBuilderAll.build())
524+
try (VCFFileReader reader = new VCFFileReader(activeVCF);CloseableIterator<VariantContext> it = reader.iterator();VariantContextWriter writerConsensus = writerBuilderConsensus.build();VariantContextWriter writerAll = writerBuilderAll.build())
512525
{
513526
VCFHeader header = reader.getFileHeader();
514527

@@ -706,8 +719,6 @@ public Output performAnalysisPerSampleRemote(Readset rs, File inputBam, Referenc
706719
getPipelineCtx().getLogger().warn("Consensus ambiguities from bcftools and lofreq did not match: " + bcfToolsConsensusNs + " / " + lofreqConsensusNs);
707720
}
708721

709-
output.addIntermediateFile(outputVcfSnpEff);
710-
output.addIntermediateFile(new File(outputVcfSnpEff.getPath() + ".tbi"));
711722
output.addSequenceOutput(coverageOut, "Depth of Coverage: " + rs.getName(), "Depth of Coverage", rs.getReadsetId(), null, referenceGenome.getGenomeId(), null);
712723
output.addSequenceOutput(consensusFastaLoFreq, "Consensus: " + rs.getName(), "Viral Consensus Sequence", rs.getReadsetId(), null, referenceGenome.getGenomeId(), description);
713724

0 commit comments

Comments
 (0)