Skip to content

Commit 4b3375e

Browse files
committed
Allow CellRanger to more easily skip BAM creation
1 parent 7008b39 commit 4b3375e

File tree

2 files changed

+56
-44
lines changed

2 files changed

+56
-44
lines changed

SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/SequenceAlignmentTask.java

Lines changed: 49 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1383,57 +1383,66 @@ public File doAlignmentForSet(List<Pair<File, File>> inputFiles, ReferenceGenome
13831383
AlignmentStep.AlignmentOutput alignmentOutput = alignmentStep.performAlignment(rs, forwardFastqs, reverseFastqs, outputDirectory, referenceGenome, SequenceTaskHelper.getUnzippedBaseName(inputFiles.get(0).first.getName()) + "." + alignmentStep.getProvider().getName().toLowerCase(), String.valueOf(lowestReadDataId), platformUnit);
13841384
getHelper().getFileManager().addStepOutputs(alignmentAction, alignmentOutput);
13851385

1386-
if (alignmentOutput.getBAM() == null || !alignmentOutput.getBAM().exists())
1387-
{
1388-
throw new PipelineJobException("Unable to find BAM file after alignment: " + alignmentOutput.getBAM());
1389-
}
13901386
Date end = new Date();
13911387
alignmentAction.setEndTime(end);
13921388
getJob().getLogger().info(alignmentStep.getProvider().getLabel() + " Duration: " + DurationFormatUtils.formatDurationWords(end.getTime() - start.getTime(), true, true));
13931389
actions.add(alignmentAction);
13941390

1395-
SequenceUtil.logFastqBamDifferences(getJob().getLogger(), alignmentOutput.getBAM());
1396-
1397-
ToolParameterDescriptor mergeParam = alignmentStep.getProvider().getParameterByName(AbstractAlignmentStepProvider.SUPPORT_MERGED_UNALIGNED);
1398-
boolean doMergeUnaligned = alignmentStep.getProvider().supportsMergeUnaligned() && mergeParam != null && mergeParam.extractValue(getJob(), alignmentStep.getProvider(), alignmentStep.getStepIdx(), Boolean.class, false);
1399-
if (doMergeUnaligned)
1391+
boolean discardBam = alignmentStep.getProvider().getParameterByName(AbstractAlignmentStepProvider.DISCARD_BAM).extractValue(getJob(), alignmentStep.getProvider(), alignmentStep.getStepIdx(), Boolean.class, false);
1392+
if (discardBam && alignmentOutput.getBAM() == null)
14001393
{
1401-
getJob().setStatus(PipelineJob.TaskStatus.running, "MERGING UNALIGNED READS INTO BAM" + msgSuffix);
1402-
getJob().getLogger().info("merging unaligned reads into BAM");
1403-
File idx = SequenceAnalysisService.get().getExpectedBamOrCramIndex(alignmentOutput.getBAM());
1404-
if (idx.exists())
1405-
{
1406-
getJob().getLogger().debug("deleting index: " + idx.getPath());
1407-
idx.delete();
1408-
}
1409-
1410-
//merge unaligned reads and clean file
1411-
MergeBamAlignmentWrapper wrapper = new MergeBamAlignmentWrapper(getJob().getLogger());
1412-
wrapper.executeCommand(referenceGenome.getWorkingFastaFile(), alignmentOutput.getBAM(), inputFiles, null);
1413-
getHelper().getFileManager().addCommandsToAction(wrapper.getCommandsExecuted(), alignmentAction);
1394+
getJob().getLogger().info("The alignment did not produce a BAM, but discardBam was selected. BAM stats steps will be skipped.");
14141395
}
14151396
else
14161397
{
1417-
getJob().getLogger().info("skipping merge of unaligned reads on BAM");
1418-
}
1398+
if (alignmentOutput.getBAM() == null || !alignmentOutput.getBAM().exists())
1399+
{
1400+
throw new PipelineJobException("Unable to find BAM file after alignment: " + alignmentOutput.getBAM());
1401+
}
14191402

1420-
if (alignmentStep.doAddReadGroups())
1421-
{
1422-
getJob().setStatus(PipelineJob.TaskStatus.running, "ADDING READ GROUPS" + msgSuffix);
1423-
AddOrReplaceReadGroupsWrapper wrapper = new AddOrReplaceReadGroupsWrapper(getJob().getLogger());
1424-
wrapper.executeCommand(alignmentOutput.getBAM(), null, rs.getReadsetId().toString(), rs.getPlatform(), (platformUnit == null ? rs.getReadsetId().toString() : platformUnit), rs.getName().replaceAll(" ", "_"));
1425-
getHelper().getFileManager().addCommandsToAction(wrapper.getCommandsExecuted(), alignmentAction);
1426-
}
1427-
else
1428-
{
1429-
getJob().getLogger().info("skipping read group assignment");
1430-
}
1403+
SequenceUtil.logFastqBamDifferences(getJob().getLogger(), alignmentOutput.getBAM());
14311404

1432-
//generate stats
1433-
getJob().setStatus(PipelineJob.TaskStatus.running, "Generating BAM Stats");
1434-
FlagStatRunner runner = new FlagStatRunner(getJob().getLogger());
1435-
runner.execute(alignmentOutput.getBAM());
1436-
getHelper().getFileManager().addCommandsToAction(runner.getCommandsExecuted(), alignmentAction);
1405+
ToolParameterDescriptor mergeParam = alignmentStep.getProvider().getParameterByName(AbstractAlignmentStepProvider.SUPPORT_MERGED_UNALIGNED);
1406+
boolean doMergeUnaligned = alignmentStep.getProvider().supportsMergeUnaligned() && mergeParam != null && mergeParam.extractValue(getJob(), alignmentStep.getProvider(), alignmentStep.getStepIdx(), Boolean.class, false);
1407+
if (doMergeUnaligned)
1408+
{
1409+
getJob().setStatus(PipelineJob.TaskStatus.running, "MERGING UNALIGNED READS INTO BAM" + msgSuffix);
1410+
getJob().getLogger().info("merging unaligned reads into BAM");
1411+
File idx = SequenceAnalysisService.get().getExpectedBamOrCramIndex(alignmentOutput.getBAM());
1412+
if (idx.exists())
1413+
{
1414+
getJob().getLogger().debug("deleting index: " + idx.getPath());
1415+
idx.delete();
1416+
}
1417+
1418+
//merge unaligned reads and clean file
1419+
MergeBamAlignmentWrapper wrapper = new MergeBamAlignmentWrapper(getJob().getLogger());
1420+
wrapper.executeCommand(referenceGenome.getWorkingFastaFile(), alignmentOutput.getBAM(), inputFiles, null);
1421+
getHelper().getFileManager().addCommandsToAction(wrapper.getCommandsExecuted(), alignmentAction);
1422+
}
1423+
else
1424+
{
1425+
getJob().getLogger().info("skipping merge of unaligned reads on BAM");
1426+
}
1427+
1428+
if (alignmentStep.doAddReadGroups())
1429+
{
1430+
getJob().setStatus(PipelineJob.TaskStatus.running, "ADDING READ GROUPS" + msgSuffix);
1431+
AddOrReplaceReadGroupsWrapper wrapper = new AddOrReplaceReadGroupsWrapper(getJob().getLogger());
1432+
wrapper.executeCommand(alignmentOutput.getBAM(), null, rs.getReadsetId().toString(), rs.getPlatform(), (platformUnit == null ? rs.getReadsetId().toString() : platformUnit), rs.getName().replaceAll(" ", "_"));
1433+
getHelper().getFileManager().addCommandsToAction(wrapper.getCommandsExecuted(), alignmentAction);
1434+
}
1435+
else
1436+
{
1437+
getJob().getLogger().info("skipping read group assignment");
1438+
}
1439+
1440+
//generate stats
1441+
getJob().setStatus(PipelineJob.TaskStatus.running, "Generating BAM Stats");
1442+
FlagStatRunner runner = new FlagStatRunner(getJob().getLogger());
1443+
runner.execute(alignmentOutput.getBAM());
1444+
getHelper().getFileManager().addCommandsToAction(runner.getCommandsExecuted(), alignmentAction);
1445+
}
14371446

14381447
_resumer.setReadDataAlignmentDone(lowestReadDataId, actions, alignmentOutput.getBAM());
14391448

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -377,12 +377,15 @@ public AlignmentOutput performAlignment(Readset rs, List<File> inputFastqs1, @Nu
377377
File outdir = new File(outputDirectory, id);
378378
outdir = new File(outdir, "outs");
379379

380-
File bam = new File(outdir, "possorted_genome_bam.bam");
381-
if (!bam.exists())
380+
if (!discardBam)
382381
{
383-
throw new PipelineJobException("Unable to find file: " + bam.getPath());
382+
File bam = new File(outdir, "possorted_genome_bam.bam");
383+
if (!bam.exists())
384+
{
385+
throw new PipelineJobException("Unable to find file: " + bam.getPath());
386+
}
387+
output.setBAM(bam);
384388
}
385-
output.setBAM(bam);
386389

387390
getWrapper().deleteSymlinks(getWrapper().getLocalFastqDir(outputDirectory));
388391

0 commit comments

Comments
 (0)