Skip to content

Commit 23bf999

Browse files
committed
Provide sawfish with BAM input
1 parent 6b18016 commit 23bf999

File tree

1 file changed

+54
-1
lines changed

1 file changed

+54
-1
lines changed

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

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.labkey.sequenceanalysis.run.analysis;
22

3+
import org.apache.logging.log4j.Logger;
4+
import org.jetbrains.annotations.Nullable;
35
import org.labkey.api.pipeline.PipelineJobException;
46
import org.labkey.api.sequenceanalysis.model.AnalysisModel;
57
import org.labkey.api.sequenceanalysis.model.Readset;
@@ -10,8 +12,10 @@
1012
import org.labkey.api.sequenceanalysis.pipeline.PipelineContext;
1113
import org.labkey.api.sequenceanalysis.pipeline.PipelineStepProvider;
1214
import org.labkey.api.sequenceanalysis.pipeline.ReferenceGenome;
15+
import org.labkey.api.sequenceanalysis.pipeline.SamtoolsRunner;
1316
import org.labkey.api.sequenceanalysis.pipeline.SequencePipelineService;
1417
import org.labkey.api.sequenceanalysis.run.SimpleScriptWrapper;
18+
import org.labkey.sequenceanalysis.util.SequenceUtil;
1519

1620
import java.io.File;
1721
import java.util.ArrayList;
@@ -44,12 +48,24 @@ public Output performAnalysisPerSampleRemote(Readset rs, File inputBam, Referenc
4448
{
4549
AnalysisOutputImpl output = new AnalysisOutputImpl();
4650

51+
File inputFile = inputBam;
52+
if (SequenceUtil.FILETYPE.cram.getFileType().isType(inputFile))
53+
{
54+
CramToBam samtoolsRunner = new CramToBam(getPipelineCtx().getLogger());
55+
File bam = new File(getPipelineCtx().getWorkingDirectory(), inputFile.getName().replaceAll(".cram$", ".bam"));
56+
samtoolsRunner.convert(inputFile, bam, referenceGenome.getWorkingFastaFile(), SequencePipelineService.get().getMaxThreads(getPipelineCtx().getLogger()));
57+
inputFile = bam;
58+
59+
output.addIntermediateFile(bam);
60+
output.addIntermediateFile(new File(bam.getPath() + ".bai"));
61+
}
62+
4763
List<String> args = new ArrayList<>();
4864
args.add(getExe().getPath());
4965
args.add("discover");
5066

5167
args.add("--bam");
52-
args.add(inputBam.getPath());
68+
args.add(inputFile.getPath());
5369

5470
args.add("--ref");
5571
args.add(referenceGenome.getWorkingFastaFile().getPath());
@@ -87,4 +103,41 @@ private File getExe()
87103
{
88104
return SequencePipelineService.get().getExeForPackage("SAWFISHPATH", "sawfish");
89105
}
106+
107+
private static class CramToBam extends SamtoolsRunner
108+
{
109+
public CramToBam(Logger log)
110+
{
111+
super(log);
112+
}
113+
114+
public void convert(File inputCram, File outputBam, File fasta, @Nullable Integer threads) throws PipelineJobException
115+
{
116+
getLogger().info("Converting CRAM to BAM");
117+
118+
execute(getParams(inputCram, outputBam, fasta, threads));
119+
}
120+
121+
private List<String> getParams(File inputCram, File outputBam, File fasta, @Nullable Integer threads)
122+
{
123+
List<String> params = new ArrayList<>();
124+
params.add(getSamtoolsPath().getPath());
125+
params.add("view");
126+
params.add("-b");
127+
params.add("-T");
128+
params.add(fasta.getPath());
129+
params.add("-o");
130+
params.add(outputBam.getPath());
131+
132+
if (threads != null)
133+
{
134+
params.add("-@");
135+
params.add(String.valueOf(threads));
136+
}
137+
138+
params.add(inputCram.getPath());
139+
140+
return params;
141+
}
142+
}
90143
}

0 commit comments

Comments
 (0)