Skip to content

Commit 798f0f0

Browse files
committed
Bugfix LoFreq variant import
1 parent 8f83d50 commit 798f0f0

File tree

2 files changed

+35
-25
lines changed

2 files changed

+35
-25
lines changed

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

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
import org.labkey.api.query.FieldKey;
4343
import org.labkey.api.reader.Readers;
4444
import org.labkey.api.sequenceanalysis.SequenceAnalysisService;
45-
import org.labkey.api.sequenceanalysis.SequenceOutputFile;
4645
import org.labkey.api.sequenceanalysis.model.AnalysisModel;
4746
import org.labkey.api.sequenceanalysis.model.Readset;
4847
import org.labkey.api.sequenceanalysis.pipeline.AbstractAnalysisStepProvider;
@@ -422,7 +421,7 @@ public Output performAnalysisPerSampleRemote(Readset rs, File inputBam, Referenc
422421
int totalIndelGTThreshold = 0;
423422
int totalConsensusInPBS= 0;
424423

425-
File loFreqConsensusVcf = new File(outputDir, FileUtil.getBaseName(inputBam) + ".lofreq.consensus.vcf.gz");
424+
File loFreqConsensusVcf = getConsensusVcf(outputDir, inputBam);
426425
File loFreqAllVcf = getAllVcf(outputDir, inputBam);
427426
Double strandBiasRecoveryAF = getProvider().getParameterByName("strandBiasRecoveryAF").extractValue(getPipelineCtx().getJob(), getProvider(), getStepIdx(), Double.class, 1.0);
428427
SAMSequenceDictionary dict = SAMSequenceDictionaryExtractor.extractDictionary(referenceGenome.getSequenceDictionary().toPath());
@@ -707,9 +706,19 @@ private Set<String> runBcftools(File inputBam, ReferenceGenome referenceGenome,
707706
return variantsBcftools;
708707
}
709708

709+
private File getConsensusVcf(File outputDir, File inputBam)
710+
{
711+
return new File(outputDir, FileUtil.getBaseName(inputBam) + ".lofreq.consensus.vcf.gz");
712+
}
713+
714+
private File getConsensusFasta(File loFreqConsensusVcf)
715+
{
716+
return new File(loFreqConsensusVcf.getParentFile(), SequenceAnalysisService.get().getUnzippedBaseName(loFreqConsensusVcf.getName()) + ".fasta");
717+
}
718+
710719
private File generateConsensus(File loFreqConsensusVcf, File fasta, File maskBed) throws PipelineJobException
711720
{
712-
File ret = new File(loFreqConsensusVcf.getParentFile(), SequenceAnalysisService.get().getUnzippedBaseName(loFreqConsensusVcf.getName()) + ".fasta");
721+
File ret = getConsensusFasta(loFreqConsensusVcf);
713722
List<String> args = new ArrayList<>();
714723

715724
args.add(SequencePipelineService.get().getExeForPackage("BCFTOOLS", "bcftools").getPath());
@@ -868,24 +877,19 @@ public Output performAnalysisPerSampleLocal(AnalysisModel model, File inputBam,
868877
if (runPangolinAndNextClade)
869878
{
870879
//Find the NextClade json:
871-
SimpleFilter filter = new SimpleFilter(FieldKey.fromString("analysis_id"), model.getRowId());
872-
filter.addCondition(FieldKey.fromString("category"), NextCladeHandler.NEXTCLADE_JSON);
873-
SequenceOutputFile jsonFileRecord = new TableSelector(SequenceAnalysisSchema.getTable(SequenceAnalysisSchema.TABLE_OUTPUTFILES), filter, null).getObject(SequenceOutputFile.class);
874-
if (jsonFileRecord == null)
880+
File jsonFile = NextCladeHandler.getJsonFile(outDir, getConsensusFasta(getConsensusVcf(outDir, inputBam)));
881+
if (!jsonFile.exists())
875882
{
876-
throw new PipelineJobException("Unable to find NextClade JSON record");
883+
throw new PipelineJobException("Unable to find NextClade JSON record: " + jsonFile.getPath());
877884
}
878885

879-
//Find the NextClade json:
880-
SimpleFilter filter2 = new SimpleFilter(FieldKey.fromString("analysis_id"), model.getRowId());
881-
filter2.addCondition(FieldKey.fromString("category"), CATEGORY);
882-
SequenceOutputFile vcfFileRecord = new TableSelector(SequenceAnalysisSchema.getTable(SequenceAnalysisSchema.TABLE_OUTPUTFILES), filter2, null).getObject(SequenceOutputFile.class);
883-
if (vcfFileRecord == null)
886+
File vcf = getAllVcf(outDir, inputBam);
887+
if (!vcf.exists())
884888
{
885-
throw new PipelineJobException("Unable to find LoFreq VCF record");
889+
throw new PipelineJobException("Unable to find LoFreq VCF: " + vcf.getPath());
886890
}
887891

888-
NextCladeHandler.processAndImportNextCladeAa(getPipelineCtx().getJob(), jsonFileRecord, model.getRowId(), vcfFileRecord.getFile(), dbImport);
892+
NextCladeHandler.processAndImportNextCladeAa(getPipelineCtx().getJob(), jsonFile, model.getRowId(), model.getLibraryId(), model.getAlignmentFile(), model.getReadset(), vcf, dbImport);
889893
}
890894
else
891895
{

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public void complete(PipelineJob job, List<SequenceOutputFile> inputFiles, List<
117117
throw new PipelineJobException("Unable to find parent for output: " + so.getRowid());
118118
}
119119

120-
processAndImportNextCladeAa(job, so, parent.getAnalysis_id(), parent.getFile(), true);
120+
processAndImportNextCladeAa(job, so.getFile(), parent.getAnalysis_id(), so.getLibrary_id(), so.getDataId(), so.getReadset(), parent.getFile(), true);
121121
}
122122
}
123123

@@ -134,6 +134,11 @@ public void processFilesRemote(List<SequenceOutputFile> inputFiles, JobContext c
134134
}
135135
}
136136

137+
public static File getJsonFile(File outputDir, File consensusFasta)
138+
{
139+
return new File(outputDir, FileUtil.getBaseName(consensusFasta) + ".json");
140+
}
141+
137142
public static File runNextClade(File consensusFasta, Logger log, PipelineOutputTracker tracker, File outputDir) throws PipelineJobException
138143
{
139144
if (!consensusFasta.getParentFile().equals(outputDir))
@@ -151,7 +156,7 @@ public static File runNextClade(File consensusFasta, Logger log, PipelineOutputT
151156
}
152157
}
153158

154-
File jsonFile = new File(outputDir, FileUtil.getBaseName(consensusFasta) + ".json");
159+
File jsonFile = getJsonFile(outputDir, consensusFasta);
155160

156161
File localBashScript = new File(outputDir, "dockerWrapper.sh");
157162
try (PrintWriter writer = PrintWriters.getPrintWriter(localBashScript))
@@ -224,17 +229,18 @@ private static JSONObject parseNextClade(File jsonFile) throws PipelineJobExcept
224229
}
225230
}
226231

227-
public static void processAndImportNextCladeAa(PipelineJob job, SequenceOutputFile so, int analysisId, File consensusVCF, boolean dbImport) throws PipelineJobException
232+
public static void processAndImportNextCladeAa(PipelineJob job, File jsonFile, int analysisId, int libraryId, int alignmentId, int readsetId, File consensusVCF, boolean dbImport) throws PipelineJobException
228233
{
229-
JSONObject sample = parseNextClade(so.getFile());
234+
JSONObject sample = parseNextClade(jsonFile);
230235

231-
ReferenceGenome genome = SequenceAnalysisService.get().getReferenceGenome(so.getLibrary_id(), job.getUser());
236+
ReferenceGenome genome = SequenceAnalysisService.get().getReferenceGenome(libraryId, job.getUser());
232237
String clade = sample.getString("clade");
233-
saveClade(so, clade, analysisId, job);
238+
saveClade(clade, analysisId, alignmentId, readsetId, job);
234239

235240
if (!dbImport)
236241
{
237242
job.getLogger().info("DB Import not selected, will not import AA SNPs");
243+
return;
238244
}
239245

240246
JSONArray aaSubstitutions = sample.getJSONArray("aaSubstitutions");
@@ -334,17 +340,17 @@ public static void processAndImportNextCladeAa(PipelineJob job, SequenceOutputFi
334340
}
335341
}
336342

337-
private static void saveClade(SequenceOutputFile so, String clade, int analysisId, PipelineJob job) throws PipelineJobException
343+
private static void saveClade(String clade, int analysisId, int alignmentId, int readsetId, PipelineJob job) throws PipelineJobException
338344
{
339345
List<Map<String, Object>> toInsert = new ArrayList<>();
340346
Map<String, Object> row1 = new CaseInsensitiveHashMap<>();
341-
row1.put("dataid", so.getDataId());
342-
row1.put("readset", so.getReadset());
347+
row1.put("dataid", alignmentId);
348+
row1.put("readset", readsetId);
343349
row1.put("analysis_id", analysisId);
344350
row1.put("category", "NextClade");
345351
row1.put("metricName", "NextCladeClade");
346352
row1.put("qualvalue", clade);
347-
row1.put("container", so.getContainer());
353+
row1.put("container", job.getContainer().getId());
348354
toInsert.add(row1);
349355

350356
Container targetContainer = job.getContainer().isWorkbook() ? job.getContainer().getParent() : job.getContainer();

0 commit comments

Comments
 (0)