private List <string> ExecuteChromosomeJobs(ICliTaskManager cliTaskManager, Dictionary <string, int> chromRefIds, List <string> cmdLineList, string outMultiPath, string taskLogDir, string exePath, List <string> taskDirectories) { var tasks = new List <ICliTask>(); var paths = new List <string>(); //var loggers = new List<Illumina.CG.Common.Logging.Logger>(); foreach (var chrom in MultiProcessHelpers.GetOrderedChromosomes(chromRefIds)) { var outdir = Path.Combine(outMultiPath, chrom); //var logger = new Illumina.CG.Common.Logging.Logger(taskLogDir, $"GeminiTaskLog_{chrom}.txt"); //loggers.Add(logger); var task = _taskCreator.GetCliTask(cmdLineList.ToArray(), chrom, exePath, outdir, chromRefIds[chrom]); tasks.Add(task); paths.Add(Path.Combine(outdir, "merged.bam.sorted.bam")); taskDirectories.Add(outdir); } cliTaskManager.Process(tasks); foreach (var task in tasks) { Logger.WriteToLog($"Completed task {task.Name} with exit code {task.ExitCode}."); } if (tasks.Any(x => x.ExitCode != 0)) { foreach (var failedTask in tasks.Where(x => x.ExitCode != 0)) { Logger.WriteWarningToLog($"Processing failed for {failedTask.Name}. See error log for details."); } throw new Exception($"Application failed: {tasks.Count(x => x.ExitCode != 0)} tasks failed."); } Logger.WriteToLog($"Completed {tasks.Count} tasks."); return(paths); //try //{ // foreach (var logger in loggers) // { // logger.Dispose(); // } //} //catch (Exception e) //{ // Logger.WriteExceptionToLog( // new Exception($"Error encountered during logging cleanup step (after individual analysis completion).", e)); //} }
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)); } }