private static void MergeAndFinalizeBam(List <string> perChromPaths, ISamtoolsWrapper samtoolsWrapper, string outFolder, string outputBamName) { var finalBams = perChromPaths; var mergedBam = Path.Combine(outFolder, outputBamName); Logger.WriteToLog($"Calling samtools cat on {perChromPaths.Count} files to create {mergedBam}."); samtoolsWrapper.SamtoolsCat(mergedBam, finalBams); Logger.WriteToLog($"Calling samtools index on {mergedBam}."); samtoolsWrapper.SamtoolsIndex(mergedBam); Logger.WriteToLog("Done finalizing bam."); }
public GeminiWorkflow(IGeminiDataSourceFactory dataSourceFactory, IGeminiDataOutputFactory dataOutputFactory, GeminiOptions geminiOptions, GeminiSampleOptions geminiSampleOptions, RealignmentOptions realignmentOptions, StitcherOptions stitcherOptions, string outputDirectory, RealignmentAssessmentOptions realignmentAssessmentOptions, IndelFilteringOptions indelFilteringOptions, ISamtoolsWrapper samtoolsWrapper) { _dataSourceFactory = dataSourceFactory; _dataOutputFactory = dataOutputFactory; _geminiOptions = geminiOptions; _geminiSampleOptions = geminiSampleOptions; _realignmentOptions = realignmentOptions; _samtoolsWrapper = samtoolsWrapper; _stitcherOptions = stitcherOptions ?? new StitcherOptions(); _geminiFactory = new GeminiFactory(geminiOptions, indelFilteringOptions); var bamRealignmentFactory = new BamRealignmentFactory(geminiOptions, realignmentAssessmentOptions, stitcherOptions, realignmentOptions, outputDirectory); _bamRealignmentFactory = bamRealignmentFactory; }
private static string MergeAndFinalizeBam(List <string> finalBams, ISamtoolsWrapper samtoolsWrapper, string outFolder, string outFileName, bool keepUnmerged = false, bool doIndex = false, bool doSort = true) { var mergedBam = Path.Combine(outFolder, outFileName); var sortedMerged = mergedBam + ".sorted"; var sortedMergedFinal = sortedMerged + ".bam"; Logger.WriteToLog($"Calling cat on {finalBams.Count} with output at {mergedBam}."); foreach (var finalBam in finalBams) { Logger.WriteToLog($"Intermediate bam: {finalBam}\t{new FileInfo(finalBam).Length}B"); } samtoolsWrapper.SamtoolsCat(mergedBam, finalBams); if (doSort) { Logger.WriteToLog($"Calling samtools sort on {mergedBam}."); samtoolsWrapper.SamtoolsSort(mergedBam, sortedMerged, 3, 500); } if (doIndex) { Logger.WriteToLog($"Calling samtools index on {sortedMergedFinal}."); samtoolsWrapper.SamtoolsIndex(sortedMergedFinal); } Logger.WriteToLog("Done finalizing bam."); if (File.Exists(sortedMergedFinal) && !keepUnmerged) { Logger.WriteToLog("Deleting intermediate bams."); foreach (var finalBam in finalBams) { File.Delete(finalBam); } File.Delete(mergedBam); Logger.WriteToLog("Finished deleting intermediate bams."); } return(sortedMergedFinal); }
public void Execute(ICliTaskManager cliTaskManager, Dictionary <string, int> chromRefIds, List <string> cmdLineList, ISamtoolsWrapper samtoolsWrapper) { var bamFile = _options.InputBam; var outMultiPath = _options.OutputDirectory; var exePath = _options.ExePath; List <string> paths; var taskDirectories = new List <string>(); var taskLogDir = Path.Combine(outMultiPath, "TaskLogs"); if (_options.MultiProcess) { paths = ExecuteChromosomeJobs(cliTaskManager, chromRefIds, cmdLineList, outMultiPath, taskLogDir, exePath, taskDirectories); } else { paths = ExecuteChromosomeJobs(chromRefIds, outMultiPath, taskDirectories); } var outBamName = Path.GetFileNameWithoutExtension(bamFile) + ".PairRealigned.bam"; MergeAndFinalizeBam(paths, samtoolsWrapper, outMultiPath, outBamName); try { CleanUp(outMultiPath, taskDirectories, taskLogDir); } catch (Exception e) { Logger.WriteExceptionToLog(new Exception($"Error encountered during cleanup step (after analysis completion).", e)); } }
private static void MergeAndFinalizeBam(Dictionary <string, Dictionary <PairClassification, List <string> > > categorizedAlignments, ISamtoolsWrapper samtoolsWrapper, string outFolder, bool keepUnmerged = false, bool indexFinalBam = false, bool doSort = true) { var finalBams = new List <string>(); if (categorizedAlignments.Keys.Count > 1) { foreach (var chrom in categorizedAlignments.Keys) { var chromFinalBams = categorizedAlignments[chrom].Values; if (!chromFinalBams.Any()) { Logger.WriteToLog($"No bams to merge for chromosome {chrom}."); continue; } var sortedMergedChromBam = MergeAndFinalizeBam(chromFinalBams.SelectMany(x => x).ToList(), samtoolsWrapper, outFolder, chrom + "_merged.bam", keepUnmerged: keepUnmerged, doIndex: false, doSort: doSort); finalBams.Add(sortedMergedChromBam); } } else { if (categorizedAlignments.Keys.Any()) { var chrom = categorizedAlignments.Keys.First(); finalBams = categorizedAlignments[chrom].Values.SelectMany(x => x).ToList(); } else { Logger.WriteToLog("No chromosomes with bams to merge."); } } if (finalBams.Any()) { MergeAndFinalizeBam(finalBams, samtoolsWrapper, outFolder, "merged.bam", keepUnmerged, indexFinalBam, doSort: doSort); } }