Skip to content

Commit b37f065

Browse files
committed
Pre-sort BAM by tag for velocyto
1 parent 3d9fb23 commit b37f065

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

SequenceAnalysis/api-src/org/labkey/api/sequenceanalysis/pipeline/SamSorter.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import org.apache.commons.io.FileUtils;
55
import org.apache.commons.lang3.StringUtils;
66
import org.apache.logging.log4j.Logger;
7-
import org.apache.logging.log4j.LogManager;
87
import org.jetbrains.annotations.Nullable;
98
import org.labkey.api.pipeline.PipelineJobException;
109
import org.labkey.api.pipeline.PipelineJobService;
@@ -30,6 +29,11 @@ public SamSorter(@Nullable Logger logger)
3029
}
3130

3231
public File execute(File input, @Nullable File output, SAMFileHeader.SortOrder sortOrder) throws PipelineJobException
32+
{
33+
return execute(input, output, sortOrder, null);
34+
}
35+
36+
public File execute(File input, @Nullable File output, SAMFileHeader.SortOrder sortOrder, @Nullable List<String> extraArgs) throws PipelineJobException
3337
{
3438
getLogger().info("Sorting SAM/BAM: " + input.getPath());
3539

@@ -50,7 +54,7 @@ public File execute(File input, @Nullable File output, SAMFileHeader.SortOrder s
5054
}
5155
else if (sortOrder != SAMFileHeader.SortOrder.coordinate)
5256
{
53-
throw new PipelineJobException("Improper sort order: " + sortOrder.name());
57+
getLogger().debug("Using sort order: " + sortOrder.name());
5458
}
5559

5660
Integer threads = SequencePipelineService.get().getMaxThreads(getLogger());
@@ -71,6 +75,11 @@ else if (sortOrder != SAMFileHeader.SortOrder.coordinate)
7175
params.add("-T");
7276
params.add(tmpDir);
7377

78+
if (extraArgs != null)
79+
{
80+
params.addAll(extraArgs);
81+
}
82+
7483
params.add("-o");
7584
params.add(output.getPath());
7685

singlecell/src/org/labkey/singlecell/run/VelocytoAlignmentStep.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import au.com.bytecode.opencsv.CSVReader;
44
import au.com.bytecode.opencsv.CSVWriter;
5+
import htsjdk.samtools.SAMFileHeader;
56
import org.apache.logging.log4j.Logger;
67
import org.jetbrains.annotations.Nullable;
78
import org.json.JSONObject;
@@ -14,6 +15,8 @@
1415
import org.labkey.api.sequenceanalysis.pipeline.AlignmentStepProvider;
1516
import org.labkey.api.sequenceanalysis.pipeline.PipelineContext;
1617
import org.labkey.api.sequenceanalysis.pipeline.ReferenceGenome;
18+
import org.labkey.api.sequenceanalysis.pipeline.SamSorter;
19+
import org.labkey.api.sequenceanalysis.pipeline.SamtoolsRunner;
1720
import org.labkey.api.sequenceanalysis.pipeline.SequencePipelineService;
1821
import org.labkey.api.sequenceanalysis.pipeline.ToolParameterDescriptor;
1922
import org.labkey.api.sequenceanalysis.run.AbstractCommandWrapper;
@@ -149,6 +152,13 @@ public File runVelocytoFor10x(File localBam, File gtf, File outputFolder, @Nulla
149152

150153
getLogger().debug("Using BAM: " + localBam.getPath());
151154

155+
//Pre-sort since velocyto dies when doing this itself:
156+
//samtools ``sort -l [compression] -m [mb_to_use]M -t [tagname] -O BAM -@ [threads_to_use] -o cellsorted_[bamfile] [bamfile]
157+
List<String> sortArgs = Arrays.asList("-t", "CB");
158+
File sortedBam = new File(localBam.getParentFile(), "cellsorted_" + localBam.getName());
159+
new SamSorter(getLogger()).execute(localBam, sortedBam, SAMFileHeader.SortOrder.unknown, sortArgs);
160+
161+
152162
SimpleScriptWrapper wrapper = new SimpleScriptWrapper(getLogger());
153163
List<String> args = new ArrayList<>();
154164
args.add(SequencePipelineService.get().getExeForPackage("VELOCYTOPATH", "velocyto").getPath());
@@ -205,6 +215,8 @@ public File runVelocytoFor10x(File localBam, File gtf, File outputFolder, @Nulla
205215
throw new PipelineJobException("Missing expected file: " + loom.getPath());
206216
}
207217

218+
sortedBam.delete();
219+
208220
return loom;
209221
}
210222
}

0 commit comments

Comments
 (0)