@@ -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