11package org .labkey .sequenceanalysis .run .analysis ;
22
3+ import org .apache .logging .log4j .Logger ;
4+ import org .jetbrains .annotations .Nullable ;
35import org .labkey .api .pipeline .PipelineJobException ;
46import org .labkey .api .sequenceanalysis .model .AnalysisModel ;
57import org .labkey .api .sequenceanalysis .model .Readset ;
1012import org .labkey .api .sequenceanalysis .pipeline .PipelineContext ;
1113import org .labkey .api .sequenceanalysis .pipeline .PipelineStepProvider ;
1214import org .labkey .api .sequenceanalysis .pipeline .ReferenceGenome ;
15+ import org .labkey .api .sequenceanalysis .pipeline .SamtoolsRunner ;
1316import org .labkey .api .sequenceanalysis .pipeline .SequencePipelineService ;
1417import org .labkey .api .sequenceanalysis .run .SimpleScriptWrapper ;
18+ import org .labkey .sequenceanalysis .util .SequenceUtil ;
1519
1620import java .io .File ;
1721import 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