private IBedGraphToBigWigConverter GetConverter() { if (CrossPlatform.IsThisLinux()) { return(new FormatConverterFactory(_logger, _workDoer, _commandManager).GetBedGraphToBigWigConverter()); } return(new NullBedGraphToBigWigConverter(_logger, "BedGraph to BigWig conversion unavailable on Windows.")); }
private IFileLocation GetRuntimeExecutable() { #if DotNetCore return(new FileLocation(_executableProcessor.GetEnvironmentExecutablePath("dotnet"))); #else var mono = CrossPlatform.IsThisLinux() ? _executableProcessor.GetMonoPath() : null; return(new FileLocation(mono)); #endif }
private CanvasOutput RunSingleSample(string sampleId, CanvasResequencingInput input, IDirectoryLocation sampleSandbox) { if (!_annotationFileProvider.IsSupported(input.GenomeMetadata)) { _logger.Info($"Skipping Canvas for sample {sampleId}: unsupported reference genome '{input.GenomeMetadata.Name}'"); return(null); } if (!_annotationFileProvider.CustomDbSnpVcf(input.GenomeMetadata) && input.Vcf == null) { _logger.Info($"Skipping Canvas for sample {sampleId}. A dbSNP VCF file was not provided and no small variant VCF file is available"); return(null); } StringBuilder commandLine = new StringBuilder("Germline-WGS"); commandLine.Append(_singleSampleInputCommandLineBuilder.GetSingleSampleCommandLine(sampleId, input.Bam, input.GenomeMetadata, sampleSandbox)); // use sample vcf by default (performance could be similar with dbSNP vcf though) var bAlleleVcf = input.Vcf.VcfFile; var bAlleleVcfOptionName = SingleSampleCommonOptionsParser.SampleBAlleleVcfOptionName; if (_annotationFileProvider.CustomDbSnpVcf(input.GenomeMetadata)) { bAlleleVcf = _annotationFileProvider.GetDbSnpVcf(input.GenomeMetadata); bAlleleVcfOptionName = SingleSampleCommonOptionsParser.PopulationBAlleleVcfOptionName; } commandLine.Append($" --{bAlleleVcfOptionName} \"{bAlleleVcf}\""); IFileLocation ploidyBed = _canvasPloidyBedCreator.CreateGermlinePloidyBed(input.Vcf, input.GenomeMetadata, sampleSandbox); if (ploidyBed != null) { commandLine.Append($" --{SingleSampleCommonOptionsParser.PloidyBedOptionName} \"{ploidyBed}\""); } var canvasPartitionParam = $@"--commoncnvs {_annotationFileProvider.GetCanvasAnnotationFile(input.GenomeMetadata, "commoncnvs.bed")}"; var moreCustomParameters = new Dictionary <string, string>(); moreCustomParameters["CanvasPartition"] = canvasPartitionParam; commandLine.Append(_singleSampleInputCommandLineBuilder.GetCustomParameters(moreCustomParameters)); commandLine = _singleSampleInputCommandLineBuilder.MergeCustomCanvasParameters(commandLine); UnitOfWork singleSampleJob = new UnitOfWork() { ExecutablePath = CrossPlatform.IsThisLinux() ? _runtimeExecutable.FullName : _canvasExe.FullName, CommandLine = CrossPlatform.IsThisLinux() ? _canvasExe + " " + commandLine : commandLine.ToString(), LoggingFolder = _workManager.LoggingFolder.FullName, LoggingStub = "Canvas_" + sampleId, }; _workManager.DoWorkSingleThread(singleSampleJob); return(GetCanvasOutput(sampleId, sampleSandbox)); }
private CanvasOutput RunSingleSample(string sampleId, CanvasTumorNormalEnrichmentInput input, IFileLocation bAlleleVcf, bool isDbSnpVcf, IFileLocation manifest, IDirectoryLocation sampleSandbox) { if (!_annotationFileProvider.IsSupported(input.GenomeMetadata)) { _logger.Info($"Skipping Canvas for sample {sampleId}: unsupported reference genome '{input.GenomeMetadata.Name}'"); return(null); } StringBuilder commandLine = new StringBuilder("Tumor-normal-enrichment"); commandLine.Append(_singleSampleInputCommandLineBuilder.GetSingleSampleCommandLine(sampleId, input.TumorBam, input.GenomeMetadata, sampleSandbox)); commandLine.Append($" --normal-bam \"{input.NormalBam.BamFile}\""); commandLine.Append($" --manifest \"{manifest}\""); var bAlleleVcfOptionName = isDbSnpVcf ? SingleSampleCommonOptionsParser.PopulationBAlleleVcfOptionName : SingleSampleCommonOptionsParser.SampleBAlleleVcfOptionName; commandLine.Append($" --{bAlleleVcfOptionName} {bAlleleVcf.WrapWithShellQuote()}"); commandLine.Append($" --somatic-vcf \"{input.SomaticVcf.VcfFile}\""); IFileLocation ploidyBed = _canvasPloidyBedCreator.CreatePloidyBed(input.NormalVcf, input.GenomeMetadata, sampleSandbox); if (ploidyBed != null) { commandLine.Append($" --{SingleSampleCommonOptionsParser.PloidyBedOptionName} \"{ploidyBed}\""); } commandLine.Append(_singleSampleInputCommandLineBuilder.GetCustomParameters()); commandLine = _singleSampleInputCommandLineBuilder.MergeCustomCanvasParameters(commandLine); UnitOfWork singleSampleJob = new UnitOfWork { ExecutablePath = CrossPlatform.IsThisLinux() ? _runtimeExecutable.FullName : _canvasExe.FullName, CommandLine = CrossPlatform.IsThisLinux() ? _canvasExe + " " + commandLine : commandLine.ToString(), LoggingFolder = _workManager.LoggingFolder.FullName, LoggingStub = "Canvas_" + sampleId, }; _workManager.DoWorkSingleThread(singleSampleJob); return(GetCanvasOutput(sampleId, sampleSandbox)); }
public int Launch() { CommonOptions commonOptions = _modeRunner.CommonOptions; IDirectoryLocation outFolder = commonOptions.OutputDirectory; var log = outFolder.GetFileLocation("CanvasLog.txt"); var error = outFolder.GetFileLocation("CanvasError.txt"); IsasConfiguration config = IsasConfiguration.GetConfiguration(); IDirectoryLocation genomeRoot = commonOptions.WholeGenomeFasta?.Parent?.Parent?.Parent?.Parent?.Parent; int returnValue = 0; IsasFrameworkFactory.RunWithIsasFramework(outFolder, log, error, commonOptions.StartCheckpoint, commonOptions.StopCheckpoint, 0, config.MaximumMemoryGB, config.MaximumHoursPerProcess, false, genomeRoot, frameworkServices => { var logger = frameworkServices.Logger; try { var executableProcessor = new ExecutableProcessor(new NullSampleSettings(), logger); #if DotNetCore var runtimeExecutable = new FileLocation(executableProcessor.GetEnvironmentExecutablePath("dotnet")); #else var runtimeExecutable = CrossPlatform.IsThisLinux() ? new FileLocation(executableProcessor.GetMonoPath()) : null; #endif frameworkServices.Logger.Info($"Running Canvas {_mode} {_version}"); logger.Info($"Command-line arguments: {string.Join(" ", _args)}"); _modeRunner.Run(logger, frameworkServices.Checkpointer, frameworkServices.WorkManager, runtimeExecutable); returnValue = 0; } catch (Exception e) { logger.Error($"Canvas workflow error: {e}"); returnValue = -1; } }); return(returnValue); }
public CanvasSmallPedigreeOutput Run(CanvasSmallPedigreeInput input, IDirectoryLocation sampleSandbox) { if (!_annotationFileProvider.IsSupported(input.GenomeMetadata)) { _logger.Info($"Skipping Canvas: unsupported reference genome '{input.GenomeMetadata.Name}'"); return(null); } if (!_annotationFileProvider.CustomDbSnpVcf(input.GenomeMetadata) && input.Vcf == null) { _logger.Info($"Skipping Canvas. A dbSNP VCF file was not provided and no small variant VCF file is available"); return(null); } var commandLine = new StringBuilder("SmallPedigree-WGS"); commandLine.Append(GetMultiSampleCommandLine(input.Samples, input.GenomeMetadata, input.Vcf, sampleSandbox)); // use sample vcf by default (performance could be similar with dbSNP vcf though) var bAlleleVcf = input.Vcf.VcfFile; var bAlleleVcfOptionName = SingleSampleCommonOptionsParser.SampleBAlleleVcfOptionName; if (_annotationFileProvider.CustomDbSnpVcf(input.GenomeMetadata)) { bAlleleVcf = _annotationFileProvider.GetDbSnpVcf(input.GenomeMetadata); bAlleleVcfOptionName = SingleSampleCommonOptionsParser.PopulationBAlleleVcfOptionName; } commandLine.Append($" --{bAlleleVcfOptionName} \"{bAlleleVcf}\""); var ploidyInfos = input.Samples.SelectData(sample => sample.PloidyInfo); var ploidyVcf = _canvasPloidyVcfCreator.CreatePloidyVcf(ploidyInfos, input.GenomeMetadata, sampleSandbox); if (ploidyVcf != null) { commandLine.Append($" --{SmallPedigreeOptionsParser.PloidyVcfOptionName} \"{ploidyVcf.VcfFile}\""); } var canvasPartitionParam = $@"--commoncnvs {_annotationFileProvider.GetCanvasAnnotationFile(input.GenomeMetadata, "commoncnvs.bed")}"; var moreCustomParameters = new Dictionary <string, string> { ["CanvasPartition"] = canvasPartitionParam }; commandLine.Append(_singleSampleInputCommandLineBuilder.GetCustomParameters(moreCustomParameters)); commandLine = _singleSampleInputCommandLineBuilder.MergeCustomCanvasParameters(commandLine); // use Proband or, when proband is not available, first sample as pedigree id var pedigreeId = input.Samples.Where(x => x.Value.SampleType == SampleType.Proband).Select(x => x.Key.Id).FirstOrDefault(); if (pedigreeId.IsNullOrEmpty()) { pedigreeId = input.Samples.First().Key.Id; } var singleSampleJob = new UnitOfWork() { ExecutablePath = CrossPlatform.IsThisLinux() ? _runtimeExecutable.FullName : _canvasExe.FullName, CommandLine = CrossPlatform.IsThisLinux() ? _canvasExe + " " + commandLine : commandLine.ToString(), LoggingFolder = _workManager.LoggingFolder.FullName, LoggingStub = "Canvas_" + pedigreeId, }; _workManager.DoWorkSingleThread(singleSampleJob); var sampleBams = input.Samples.SelectData(sample => sample.Bam); return(GetCanvasOutput(sampleBams, sampleSandbox)); }
private CanvasEnrichmentOutput RunSingleSample(string sampleId, CanvasEnrichmentInput input, IFileLocation dbSnpVcf, IFileLocation manifest, IDirectoryLocation sampleSandbox) { if (!_annotationFileProvider.IsSupported(input.GenomeMetadata)) { _logger.Info($"Skipping Canvas for sample {sampleId}: unsupported reference genome '{input.GenomeMetadata.Name}'"); return(null); } var moreCustomParameters = new Dictionary <string, string>(); StringBuilder commandLine = new StringBuilder("Somatic-Enrichment"); commandLine.Append(_singleSampleInputCommandLineBuilder.GetSingleSampleCommandLine(sampleId, input.Bam, input.GenomeMetadata, sampleSandbox)); string sexChromosomeKaryotype = null; if (input.PloidyInfo.IsPloidyAvailable) { sexChromosomeKaryotype = input.PloidyInfo.IsXYMale.Value ? PloidyCorrector.PrettyPrintPloidy(1, 1) : (input.PloidyInfo.IsXXFemale.Value ? PloidyCorrector.PrettyPrintPloidy(2, 0) : null); } string controlSexChromosomeKaryotype = null; if (input.IsCanvasNormalizePcaMode && input.PloidyInfo.IsPloidyAvailable) { IFileLocation pcaModelFile = input.PloidyInfo.IsXYMale.Value ? input.PcaModels.MaleModelFile : (input.PloidyInfo.IsXXFemale.Value ? input.PcaModels.FemaleModelFile : null); if (pcaModelFile == null) { string sampleSex = input.PloidyInfo.IsXYMale.Value ? "male" : (input.PloidyInfo.IsXXFemale.Value ? "female" : "sex unknown"); _logger.Info($"Skipping Canvas for sample {sampleId}: PCA model file not available for {sampleSex} samples."); return(null); } moreCustomParameters["CanvasNormalize"] = "-m PCA"; commandLine.Append($" --control-binned \"{pcaModelFile}\""); commandLine.Append($" --control-bin-size 100"); // use a dummy bin size for now controlSexChromosomeKaryotype = sexChromosomeKaryotype; } else if (input.PrecomputedControl?.BinnedPath != null) { commandLine.Append($" --control-binned \"{input.PrecomputedControl.BinnedPath}\""); commandLine.Append($" --control-bin-size {input.PrecomputedControl.BinSize}"); controlSexChromosomeKaryotype = input.PrecomputedControl.SexChromosomeKaryotype; } else { foreach (var normalBam in input.NormalBamPaths) { commandLine.Append($" --control-bam \"{normalBam.BamFile}\""); } } if (controlSexChromosomeKaryotype != null) { var controlPloidyBed = sampleSandbox.GetFileLocation("control-ploidy.bed.gz"); if (_canvasPloidyBedCreator.GeneratePloidyBedFileFromSexChromosomeKaryotype(input.GenomeMetadata, input.GenomeMetadata.Sequences.First().FastaPath, controlSexChromosomeKaryotype, controlPloidyBed.FullName, sampleSandbox.FullName)) { commandLine.Append($" --{SomaticEnrichmentOptionsParser.ControlPloidyBedOptionName} \"{controlPloidyBed}\""); } } commandLine.Append($" --{SingleSampleCommonOptionsParser.PopulationBAlleleVcfOptionName} \"{dbSnpVcf}\""); commandLine.Append($" --manifest \"{manifest}\""); if (sexChromosomeKaryotype != null) { var ploidyBed = sampleSandbox.GetFileLocation("ploidy.bed.gz"); if (_canvasPloidyBedCreator.GeneratePloidyBedFileFromSexChromosomeKaryotype(input.GenomeMetadata, input.GenomeMetadata.Sequences.First().FastaPath, sexChromosomeKaryotype, ploidyBed.FullName, sampleSandbox.FullName)) { commandLine.Append($" --{SingleSampleCommonOptionsParser.PloidyBedOptionName} \"{ploidyBed}\""); } } if (input.PredefinedBinsFile != null) { moreCustomParameters["CanvasBin"] = $"-n={input.PredefinedBinsFile.WrapWithEscapedShellQuote()}"; } commandLine.Append(_singleSampleInputCommandLineBuilder.GetCustomParameters(moreCustomParameters)); commandLine = _singleSampleInputCommandLineBuilder.MergeCustomCanvasParameters(commandLine); UnitOfWork singleSampleJob = new UnitOfWork() { ExecutablePath = CrossPlatform.IsThisLinux() ? _runtimeExecutable.FullName : _canvasExe.FullName, CommandLine = CrossPlatform.IsThisLinux() ? _canvasExe + " " + commandLine : commandLine.ToString(), LoggingFolder = _workManager.LoggingFolder.FullName, LoggingStub = "Canvas_" + sampleId, }; _workManager.DoWorkSingleThread(singleSampleJob); return(GetCanvasOutput(sampleId, sampleSandbox)); }