コード例 #1
0
        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));
            //}
        }
コード例 #2
0
        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));
            }
        }