From f1f1d4640b76d553948d0134f472f7a1ccdaef96 Mon Sep 17 00:00:00 2001 From: "Philip R. Kensche" Date: Tue, 20 Dec 2022 14:01:14 +0100 Subject: [PATCH 1/2] Set SAMPESORT_MEMSIZE to smaller value. Allow setting K8 options. --- resources/analysisTools/qcPipeline/workflowLib.sh | 3 ++- resources/configurationFiles/analysisQC.xml | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/resources/analysisTools/qcPipeline/workflowLib.sh b/resources/analysisTools/qcPipeline/workflowLib.sh index 57fb0d6..702aa47 100755 --- a/resources/analysisTools/qcPipeline/workflowLib.sh +++ b/resources/analysisTools/qcPipeline/workflowLib.sh @@ -272,11 +272,12 @@ ALT_FILE="${ALT_FILE:-$INDEX_PREFIX.alt}" # By default assume that bwa-postalt.js and k8 are located besides bwa (like in bwakit). bwaPostAltJsPath="${bwaPostAltJsPath:-"$(dirname "$(which bwa)")"/bwa-postalt.js}" K8_BINARY="${K8_BINARY:-"$(dirname "$(which bwa)")"/k8}" +declare -a bwaPostAltJsK8Options="$bwaPostAltJsK8Options" optionalBwaPostAltJs() { local hlaPrefix="${1:-}" local minPaRatio="${2:-}" if [[ "$runBwaPostAltJs" == "true" ]]; then - $K8_BINARY "$bwaPostAltJsPath" ${hlaPrefix:+-p "$hlaPrefix"} ${minPaRatio:+-r "$minPaRatio"} "$ALT_FILE" + $K8_BINARY ${bwaPostAltJsK8Options[@]} "$bwaPostAltJsPath" ${hlaPrefix:+-p "$hlaPrefix"} ${minPaRatio:+-r "$minPaRatio"} "$ALT_FILE" else cat - fi diff --git a/resources/configurationFiles/analysisQC.xml b/resources/configurationFiles/analysisQC.xml index 091e8f3..4486f14 100644 --- a/resources/configurationFiles/analysisQC.xml +++ b/resources/configurationFiles/analysisQC.xml @@ -36,6 +36,8 @@ description="The bwakit module contains the bwa-postalt.js script. Used if runBwaPostAltJs=true"/> + @@ -81,6 +83,9 @@ + + From 9634047b6cb80d85c5782e1e1530e2f6b173857a Mon Sep 17 00:00:00 2001 From: "Philip R. Kensche" Date: Tue, 9 May 2023 09:05:59 +0200 Subject: [PATCH 2/2] bwaPostAltJsK8Options, SAMPESORT_MEMSIZE to deal with memory issues in ALT processing. Removed FLAG_RUN_SLIM_WORKFLOW that is unusable for years. Renamed FLAG_USE_EXISTING_PAIRED_BAMS to FLAG_USE_ONLY_EXISTING_PAIRED_BAMS --- AlignmentAndQCWorkflows.jar | Bin 100396 -> 102354 bytes AlignmentAndQCWorkflows_1.2.73-205.iml | 20 +++ AlignmentAndQCWorkflows_1.2.73.iml | 36 ----- README.md | 11 ++ buildinfo.txt | 4 +- .../qcPipeline/flags_isizes_PEaberrations.pl | 16 +- .../b080/co/QualityControlWorkflowPlugin.java | 2 +- .../co/common/AlignmentAndQCConfig.groovy | 67 +++++++-- .../co/common/COProjectsRuntimeService.groovy | 38 +++-- .../co/files/AlignedSequenceFileGroup.java | 20 ++- src/de/dkfz/b080/co/files/LaneFile.java | 15 +- src/de/dkfz/b080/co/files/LaneFileGroup.java | 58 +++++--- src/de/dkfz/b080/co/methods/Common.groovy | 2 +- src/de/dkfz/b080/co/methods/Samtools.groovy | 3 +- .../qcworkflow/BisulfiteCoreWorkflow.groovy | 139 ++++++++---------- .../PostMergeQCAnalysisWorkflow.java | 31 ++-- .../dkfz/b080/co/qcworkflow/QCPipeline.groovy | 92 ++++++------ 17 files changed, 312 insertions(+), 242 deletions(-) create mode 100644 AlignmentAndQCWorkflows_1.2.73-205.iml delete mode 100644 AlignmentAndQCWorkflows_1.2.73.iml diff --git a/AlignmentAndQCWorkflows.jar b/AlignmentAndQCWorkflows.jar index 14fa7d4fba609e8164099d1ee0fd22d473bac53b..d5ff0ab5fbac219eb8f7b99f860f1827d745b258 100644 GIT binary patch delta 80733 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

D$*k=E~gBEhq9KI~yUk@nn@4WWAu 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Ξ26H4mVWw0-mW@_y+;((XQNq==O_vMyoj2EPLQ6Z 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 Ryx>11@G{&gA24x<{|C@klz0FD delta 79009 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 Fe*n + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AlignmentAndQCWorkflows_1.2.73.iml b/AlignmentAndQCWorkflows_1.2.73.iml deleted file mode 100644 index ede7797..0000000 --- a/AlignmentAndQCWorkflows_1.2.73.iml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/README.md b/README.md index 2f80131..23bed50 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,17 @@ The original script with a documentation of the underlying ideas can be found [h ## Change Logs +* 1.2.73-205 (branch-specific change) + - minor: Added `bwaPostAltJsK8Options` to allow setting opt K8 options for `bwa-postalt.js` + - minor: Added `SAMPESORT_MEMSIZE` to allow reducing memory for SAM sorting. Default: ~2 GiB. + - minor: Upgrade from COWorkflows 1.2.76 to COWorkflowsBasePlugin 1.4.2. + - minor: Old `FLAG_USE_EXISTING_PAIRED_BAMS` was renamed to `FLAG_USE_ONLY_EXISTING_PAIRED_BAMS` + - minor: Removed `FLAG_RUN_SLIM_WORKFLOW`. Corresponding code is unused for years. + - patch: Little refactorings and groovification of old Java code + +* 1.2.73-204 (branch-specific change) + - minor: Separate BWA from BWAKIT version. Default `BWAKIT_VERSION` to `BWA_VERSION`. Independently set `K8_VERSION` (default 0.2.5). Changed associated module-loading code in environment setup file `tbi-lsf-cluster.sh`. + * 1.2.73-203 (branch-specific change) - minor: Optional ALT-chromosome processing via bwa.kit's `bwa-postaln.js`. * Set `runBwaPostAltJs=true` to activate the ALT chromosome processing. Default: `false`. diff --git a/buildinfo.txt b/buildinfo.txt index 862e3b7..525deae 100644 --- a/buildinfo.txt +++ b/buildinfo.txt @@ -1,4 +1,4 @@ -dependson=COWorkflows:1.2.76 +dependson=COWorkflowsBasePlugin:1.4.2 JDKVersion=1.8 GroovyVersion=2.4 -RoddyAPIVersion=3.0 +RoddyAPIVersion=3.7 diff --git a/resources/analysisTools/qcPipeline/flags_isizes_PEaberrations.pl b/resources/analysisTools/qcPipeline/flags_isizes_PEaberrations.pl index d329493..9945af7 100755 --- a/resources/analysisTools/qcPipeline/flags_isizes_PEaberrations.pl +++ b/resources/analysisTools/qcPipeline/flags_isizes_PEaberrations.pl @@ -119,13 +119,13 @@ if ($_ =~ /^\@/) # there might be a SAM header {next;} $all++; - @help = split ("\t", $_); - $flag = $help[1]; + my ($qname, $flag, $rname, $pos, $mapq, $cigar, $rnext, $pnext, $tlen, $seq, $qual) = + split ("\t", $_); # not unmapped, no duplicate and no secondary/supplementary alignment, and mapqual >= X if (!($flag & 4) && !($flag & 1024) && !($flag & 256) && !($flag & 2048)) { $uniq++; - if ($help[4] >= $minmapq) + if ($mapq >= $minmapq) { # of these, with mapqual >= X $minmapuniq++; @@ -135,15 +135,15 @@ next; } # is the read itself on a wanted chromosome? - if (defined $chroms{$help[2]}) + if (defined $chroms{$rname}) { $onchr++; # and the mate on a wanted chromosome - if (defined $chroms{$help[6]} || $help[6] eq "=") # same chrom is usually indicated by "=" instead of repeating the name + if (defined $chroms{$rnext} || $rnext eq "=") # same chrom is usually indicated by "=" instead of repeating the name { $both++; # paired end aberration: mate also has to be mapped, on a different chrom - if (!($flag & 8) && $help[6] ne "=" && ($help[2] ne $help[6])) + if (!($flag & 8) && $rnext ne "=" && ($rname ne $rnext)) # keep matrix symmetrical to see whether there is a bias, e.g. more 1->10 than 10->1 { $aberrant++; @@ -151,14 +151,14 @@ # is more interesting if ($flag & 64) { - $chrompairs{$help[2]}{$help[6]}++; + $chrompairs{$rname}{$rnext}++; } } # for insert sizes, take first read of a proper pair (-f 67 = 64 (first in pair) + 2 (proper pair) + 1 (paired)); # discarding duplicates (-F 1024) is already done further up if ($flag & 64 && $flag & 2 && $flag & 1) { - $entry = abs($help[8]); # insert size + $entry = abs($tlen); # insert size if ($entry < $min) { $min = $entry; diff --git a/src/de/dkfz/b080/co/QualityControlWorkflowPlugin.java b/src/de/dkfz/b080/co/QualityControlWorkflowPlugin.java index a841951..aa31a88 100644 --- a/src/de/dkfz/b080/co/QualityControlWorkflowPlugin.java +++ b/src/de/dkfz/b080/co/QualityControlWorkflowPlugin.java @@ -9,7 +9,7 @@ public class QualityControlWorkflowPlugin extends BasePlugin { public static final String CURRENT_VERSION_STRING = "1.2.73"; - public static final String CURRENT_VERSION_BUILD_DATE = "Wed Feb 21 15:47:18 CET 2018"; + public static final String CURRENT_VERSION_BUILD_DATE = "Wed Apr 12 10:50:50 CEST 2023"; @Override public String getVersionInfo() { diff --git a/src/de/dkfz/b080/co/common/AlignmentAndQCConfig.groovy b/src/de/dkfz/b080/co/common/AlignmentAndQCConfig.groovy index afb81da..1fe2681 100644 --- a/src/de/dkfz/b080/co/common/AlignmentAndQCConfig.groovy +++ b/src/de/dkfz/b080/co/common/AlignmentAndQCConfig.groovy @@ -20,11 +20,19 @@ class AlignmentAndQCConfig extends COConfig { public static final String CVALUE_RUN_FINGERPRINTING = "runFingerprinting" public static final String CVALUE_FINGERPRINTING_SITES_FILE="fingerprintingSitesFile" - public AlignmentAndQCConfig(ExecutionContext context) { + AlignmentAndQCConfig(ExecutionContext context) { super(context) } - public String getSingleBamParameter() { + void setUseOnlyExistingTargetBam(boolean value = true) { + setConfig("useOnlyExistingTargetBam", value.toString(), "boolean") + } + + void setExtractSamplesFromOutputFiles(boolean value = true) { + setConfig("extractSamplesFromOutputFiles", value.toString(), "boolean") + } + + String getSingleBamParameter() { return configValues.get("bam", ""); } @@ -33,22 +41,26 @@ class AlignmentAndQCConfig extends COConfig { } boolean getUseExistingLaneBams() { - return configValues.getBoolean(COConstants.FLAG_USE_EXISTING_PAIRED_BAMS, false) + return configValues.getBoolean("useExistingLaneBams", false) } - public String getIndexPrefix() { + boolean getUseOnlyExistingPairedBams() { + return configValues.getBoolean("useExistingPairedBams", false) + } + + String getIndexPrefix() { return configValues.getString(CVALUE_INDEX_PREFIX, "") } - public File getChromosomeSizesFile() { + File getChromosomeSizesFile() { return new File (configValues.getString(CVALUE_CHROMOSOME_SIZES_FILE, "")) } - public File getTargetRegionsFile() { + File getTargetRegionsFile() { return new File (configValues.getString(CVALUE_TARGET_REGIONS_FILE, "")) } - public Integer getTargetSize() { + Integer getTargetSize() { Integer returnValue = configValues.getString(CVALUE_TARGET_SIZE, null) as Integer if (null == returnValue) { returnValue = configValues.getString(CVALUE_TARGETSIZE, null) as Integer @@ -56,29 +68,54 @@ class AlignmentAndQCConfig extends COConfig { return returnValue } - public boolean getRunExomeAnalysis() { - return configValues.getBoolean(COConstants.FLAG_RUN_EXOME_ANALYSIS) + boolean getRunExomeAnalysis() { + return configValues.getBoolean("runExomeAnalysis") } - public File getCytosinePositionIndex() { + File getCytosinePositionIndex() { return new File(configValues.getString(CVALUE_CYTOSINE_POSITIONS_INDEX)) } - public File getClipIndex() { + File getClipIndex() { return new File(configValues.getString(CVALUE_CLIP_INDEX)) } - public boolean getRunFingerprinting() { + boolean getRunFingerprinting() { return configValues.getBoolean(CVALUE_RUN_FINGERPRINTING, true) } - public File getFingerprintingSitesFile() { + File getFingerprintingSitesFile() { return new File(configValues.getString(CVALUE_FINGERPRINTING_SITES_FILE)) } - public Boolean getUseOnlyExistingPairedBams() { - return configValues.getBoolean(COConstants.FLAG_USE_EXISTING_PAIRED_BAMS, false); + boolean getRunFastqcOnly() { + return configValues.getBoolean("runFastQCOnly", false) + } + + boolean getRunFastqc() { + return configValues.getBoolean("runFastQC", true) } + boolean getRunAlignmentOnly() { + return configValues.getBoolean("runAlignmentOnly", false) + } + + boolean getRunCoveragePlots() { + return configValues.getBoolean("runCoveragePlots", true) + } + + boolean getRunCollectBamFileMetrics() { + return configValues.getBoolean("runCollectBamFileMetrics", false) + } + + @Deprecated + boolean getUseCombinedAlignAndSampe() { + return true + } + + @Deprecated + boolean getRunSlimWorkflow() { + return true + } } diff --git a/src/de/dkfz/b080/co/common/COProjectsRuntimeService.groovy b/src/de/dkfz/b080/co/common/COProjectsRuntimeService.groovy index b78e0f8..0fd6b61 100644 --- a/src/de/dkfz/b080/co/common/COProjectsRuntimeService.groovy +++ b/src/de/dkfz/b080/co/common/COProjectsRuntimeService.groovy @@ -12,14 +12,13 @@ import de.dkfz.roddy.execution.io.ExecutionResult; import de.dkfz.roddy.execution.io.ExecutionService; import de.dkfz.roddy.execution.io.fs.FileSystemAccessProvider import de.dkfz.roddy.tools.LoggerWrapper +import groovy.transform.CompileStatic import java.util.function.Consumer; -/** - * Created by heinold on 15.01.16. - */ -@groovy.transform.CompileStatic -public class COProjectsRuntimeService extends BasicCOProjectsRuntimeService { + +@CompileStatic +class COProjectsRuntimeService extends BasicCOProjectsRuntimeService { private static LoggerWrapper logger = LoggerWrapper.getLogger(BasicCOProjectsRuntimeService.class.getName()); protected static void getFileCompression(ExecutionContext run, List allLaneFiles) { @@ -174,6 +173,14 @@ public class COProjectsRuntimeService extends BasicCOProjectsRuntimeService { return laneFiles } + protected static int indexOfPathElement(String pathnamePattern, String element) { + int index = pathnamePattern.split(StringConstants.SPLIT_SLASH).findIndexOf { it -> it == element } + if (index < 0) { + throw new RuntimeException("Couldn't match '${element}' in '${pathnamePattern}") + } + return index + } + public List getLaneFileGroupsFromFastqList(ExecutionContext context, Sample sample, String libraryID) { COConfig coConfig = new COConfig(context) List fastqFiles = coConfig.getFastqList().collect { String it -> new File(it); } @@ -238,11 +245,22 @@ public class COProjectsRuntimeService extends BasicCOProjectsRuntimeService { runIndex = 2; sampleName = split[0..1].join(StringConstants.UNDERSCORE); } - String run = split[runIndex..-2].join(StringConstants.UNDERSCORE); - String lane = String.format("L%03d", laneID); - - - BamFile bamFile = COBaseFile.constructSourceFile(BamFile, f, context, new COFileStageSettings(lane, run, sample, context.getDataSet())) as BamFile + RunID run = new RunID(split[runIndex..-2].join(StringConstants.UNDERSCORE)) + LaneID lane = new LaneID(String.format("L%03d", laneID)) + + + BamFile bamFile = + COBaseFile.constructSourceFile( + BamFile, + f, + context, + new COFileStageSettings( + lane, + run, + (LibraryID) null, + sample, + context.dataSet) + ) as BamFile return bamFile; }) BamFileGroup bamFileGroup = new BamFileGroup(bamFiles); diff --git a/src/de/dkfz/b080/co/files/AlignedSequenceFileGroup.java b/src/de/dkfz/b080/co/files/AlignedSequenceFileGroup.java index d96d0e9..811e664 100644 --- a/src/de/dkfz/b080/co/files/AlignedSequenceFileGroup.java +++ b/src/de/dkfz/b080/co/files/AlignedSequenceFileGroup.java @@ -1,5 +1,7 @@ package de.dkfz.b080.co.files; +import de.dkfz.b080.co.common.LaneID; +import de.dkfz.b080.co.common.RunID; import de.dkfz.roddy.config.Configuration; import de.dkfz.roddy.core.ExecutionContext; import de.dkfz.roddy.execution.jobs.BEJobResult; @@ -35,15 +37,16 @@ public BamFile pairAndSortSlim() { String libString = configuration.getConfigurationValues().getString(COConstants.PRM_CVAL_LIBRARY); String sampleName = laneFile0.getSample().getName(); String pid = context.getDataSet().getId(); - String run = laneFile0.getRunID(); - String lane = laneFile0.getLaneId(); + RunID run = laneFile0.getRunID(); + LaneID lane = laneFile0.getLaneId(); String lb = sampleName + "_" + pid + (libString.equals("addToOldLib") ? "" : "_lib2"); String laneId0 = "RAW_SEQ_FILE_1_INDEX=" + ((COFileStageSettings) laneFile0.getFileStage()).getNumericIndex(); String laneId1 = "RAW_SEQ_FILE_2_INDEX=" + ((COFileStageSettings) laneFile1.getFileStage()).getNumericIndex(); final String TOOL = "sampesortSlim"; - BamFile bamFile = GenericMethod.callGenericTool(TOOL, seqFile0, seqFile1, laneFile0, laneFile1, "SAMPLE=" + sampleName, "RUN=" + run, "LANE=" + lane, "LB=" + lb, laneId0, laneId1); + BamFile bamFile = GenericMethod.callGenericTool(TOOL, seqFile0, seqFile1, laneFile0, laneFile1, + "SAMPLE=" + sampleName, "RUN=" + run.toString(), "LANE=" + lane.toString(), "LB=" + lb, laneId0, laneId1); return bamFile; } @@ -78,7 +81,7 @@ public BamFile pairAndSort() { parameters.put(COConstants.PRM_RAW_SEQ_2, laneFile1.getAbsolutePath()); // Could be moved to the config / scripts - parameters.put("ID", parentFile.getRunID() + "_" + parentFile.getLaneId()); + parameters.put("ID", parentFile.getRunID().toString() + "_" + parentFile.getLaneId().toString()); parameters.put("SM", "sample_" + parentFile.getSample().getName() + "_" + context.getDataSet()); parameters.put("LB", parentFile.getSample().getName() + "_" + context.getDataSet() + (libString.equals("addToOldLib") ? "" : "_lib2")); @@ -90,7 +93,14 @@ public BamFile pairAndSort() { List parentFiles = new LinkedList(); parentFiles.addAll(filesInGroup); - Job job = new Job(context, context.createJobName(parentFiles.get(0), COConstants.TOOL_SAMPESORT, true), COConstants.TOOL_SAMPESORT, null, parameters, parentFiles, Arrays.asList((BaseFile)bamFile, indexFile, flagstatsFile)); + Job job = new Job( + context, + context.createJobName(parentFiles.get(0), COConstants.TOOL_SAMPESORT, true), + COConstants.TOOL_SAMPESORT, + (List) null, + parameters, + parentFiles, + Arrays.asList((BaseFile)bamFile, indexFile, flagstatsFile)); BEJobResult jobResult = job.run(); flagstatsFile.setCreatingJobsResult(jobResult); diff --git a/src/de/dkfz/b080/co/files/LaneFile.java b/src/de/dkfz/b080/co/files/LaneFile.java index e415669..aed6b85 100644 --- a/src/de/dkfz/b080/co/files/LaneFile.java +++ b/src/de/dkfz/b080/co/files/LaneFile.java @@ -1,5 +1,8 @@ package de.dkfz.b080.co.files; +import de.dkfz.b080.co.common.IndexID; +import de.dkfz.b080.co.common.LaneID; +import de.dkfz.b080.co.common.RunID; import de.dkfz.roddy.config.Configuration; import de.dkfz.roddy.core.ExecutionContext; import de.dkfz.roddy.execution.io.ExecutionResult; @@ -34,7 +37,7 @@ public class LaneFile extends COBaseFile implements ITestdataSource { private FastqcFile fastqcFile; private AlignedSequenceFile alignedSequenceFile; - public LaneFile(ConstructionHelperForBaseFiles helper) { + public LaneFile(BaseFile.ConstructionHelperForBaseFiles helper) { super(helper); } @@ -137,15 +140,15 @@ public AlignedSequenceFile getAlignedSequenceFile() { return alignedSequenceFile; } - public String getLaneId() { - return ((COFileStageSettings) fileStageSettings).getLaneId(); + public LaneID getLaneId() { + return ((COFileStageSettings) fileStageSettings).getLaneID(); } - public String getIndex() { + public IndexID getIndex() { return ((COFileStageSettings) fileStageSettings).getIndex(); } - public String getRunID() { + public RunID getRunID() { return ((COFileStageSettings) fileStageSettings).getRunID(); } @@ -215,7 +218,7 @@ public boolean createTestData() { String cmd = String.format(getDecompressionString() + " %s | head -n %s | " + recompressionString + " > %s", filePath, testLineCnt, targetFilePath); logger.log(Level.INFO, cmd); ExecutionResult er = es.execute(cmd); - if (!er.successful) { + if (!er.isSuccessful()) { logger.severe("Could not create testdata for file " + targetFilePath); } diff --git a/src/de/dkfz/b080/co/files/LaneFileGroup.java b/src/de/dkfz/b080/co/files/LaneFileGroup.java index d6d19a2..73d8188 100644 --- a/src/de/dkfz/b080/co/files/LaneFileGroup.java +++ b/src/de/dkfz/b080/co/files/LaneFileGroup.java @@ -1,5 +1,7 @@ package de.dkfz.b080.co.files; +import de.dkfz.b080.co.common.LaneID; +import de.dkfz.b080.co.common.RunID; import de.dkfz.roddy.config.Configuration; import de.dkfz.roddy.core.ExecutionContext; import de.dkfz.roddy.execution.io.ExecutionResult; @@ -33,7 +35,11 @@ public class LaneFileGroup extends FileGroup { private FastqcGroup allFastqcFiles; private AlignedSequenceFileGroup allAlignedFiles; - public LaneFileGroup(ExecutionContext executionContext, String id, String run, Sample sample, List files) { + public LaneFileGroup(ExecutionContext executionContext, + String id, + String run, + Sample sample, + List files) { super(files); this.id = id; this.run = run; @@ -68,7 +74,9 @@ public Sample getSample() { //This method could be a candidate for public FastqcGroup calcFastqcForAll() { - final boolean useSingleEndProcessing = getExecutionContext().getConfiguration().getConfigurationValues().getBoolean(COConstants.FLAG_USE_SINGLE_END_PROCESSING, false); + final boolean useSingleEndProcessing = + getExecutionContext().getConfiguration().getConfigurationValues(). + getBoolean(COConstants.FLAG_USE_SINGLE_END_PROCESSING, false); LinkedList files = new LinkedList(); for (LaneFile f : filesInGroup) { @@ -85,7 +93,9 @@ public FastqcGroup calcFastqcForAll() { } public AlignedSequenceFileGroup alignAll() { - final boolean useSingleEndProcessing = getExecutionContext().getConfiguration().getConfigurationValues().getBoolean(COConstants.FLAG_USE_SINGLE_END_PROCESSING, false); + final boolean useSingleEndProcessing = + getExecutionContext().getConfiguration().getConfigurationValues(). + getBoolean(COConstants.FLAG_USE_SINGLE_END_PROCESSING, false); LinkedList files = new LinkedList(); int i = 0; for (LaneFile f : filesInGroup) { @@ -108,37 +118,44 @@ public AlignedSequenceFileGroup alignAll() { public BamFile alignAndPairSlim() { ExecutionContext context = getExecutionContext(); Configuration configuration = context.getConfiguration(); - boolean useAcceleratedHardware = configuration.getConfigurationValues().getBoolean(COConstants.FLAG_USE_ACCELERATED_HARDWARE); + boolean useAcceleratedHardware = + configuration.getConfigurationValues(). + getBoolean(COConstants.FLAG_USE_ACCELERATED_HARDWARE); // Bad hack: Decrease the file stage level by one! LaneFile laneFile0 = filesInGroup.get(0).getFSDecreasedCopy(); LaneFile laneFile1 = filesInGroup.get(1).getFSDecreasedCopy(); - String libString = configuration.getConfigurationValues().getString(COConstants.PRM_CVAL_LIBRARY); + String libString = + configuration.getConfigurationValues(). + getString(COConstants.PRM_CVAL_LIBRARY); String sampleName = laneFile0.getSample().getName(); String pid = context.getDataSet().getId(); - String run = laneFile0.getRunID(); - String lane = laneFile0.getLaneId(); + RunID run = laneFile0.getRunID(); + LaneID lane = laneFile0.getLaneId(); String lb = sampleName + "_" + pid + (libString.equals("addToOldLib") ? "" : "_lib2"); String laneId0 = "RAW_SEQ_FILE_1_INDEX=" + ((COFileStageSettings) laneFile0.getFileStage()).getNumericIndex(); String laneId1 = "RAW_SEQ_FILE_2_INDEX=" + ((COFileStageSettings) laneFile1.getFileStage()).getNumericIndex(); - final String TOOL = useAcceleratedHardware ? COConstants.TOOL_ACCELERATED_ALIGNANDPAIR_SLIM : COConstants.TOOL_ALIGNANDPAIR_SLIM; + final String TOOL = + useAcceleratedHardware ? + COConstants.TOOL_ACCELERATED_ALIGNANDPAIR_SLIM : + COConstants.TOOL_ALIGNANDPAIR_SLIM; BamFile bamFile = GenericMethod.callGenericTool(TOOL, laneFile0, laneFile1, "SAMPLE=" + sampleName, "sample=" + sampleName, - "RUN=" + run, "run=" + run, - "LANE=" + lane, "lane=" + lane, + "RUN=" + run.toString(), "run=" + run.toString(), + "LANE=" + lane.toString(), "lane=" + lane.toString(), "LB=" + lb, laneId0, laneId1); return bamFile; } public BamFile alignAndPair() { - ExecutionContext run = getExecutionContext(); + ExecutionContext runContext = getExecutionContext(); LaneFile laneFile0 = filesInGroup.get(0); LaneFile laneFile1 = filesInGroup.get(1); - Configuration configuration = run.getConfiguration(); + Configuration configuration = runContext.getConfiguration(); BamFile bamFile = (BamFile) BaseFile.constructManual(BamFile.class, this); FlagstatsFile flagstatsFile = (FlagstatsFile)BaseFile.constructManual(FlagstatsFile.class, bamFile); BamIndexFile bamIndexFile = (BamIndexFile) BaseFile.constructManual(BamIndexFile.class, bamFile); @@ -152,15 +169,15 @@ public BamFile alignAndPair() { final String TOOL = useAcceleratedHardware ? COConstants.TOOL_ACCELERATED_ALIGNANDPAIR : COConstants.TOOL_ALIGNANDPAIR; String sampleName = laneFile0.getSample().getName(); - String pid = run.getDataSet().getId(); + String pid = runContext.getDataSet().getId(); - Map parameters = run.getDefaultJobParameters(TOOL); + Map parameters = runContext.getDefaultJobParameters(TOOL); parameters.put(COConstants.PRM_FILENAME_SORTED_BAM, bamFile.getAbsolutePath()); parameters.put(COConstants.PRM_FILENAME_FLAGSTAT, flagstatsFile.getAbsolutePath()); parameters.put(COConstants.PRM_FILENAME_BAM_INDEX, bamIndexFile.getAbsolutePath()); parameters.put(COConstants.PRM_RAW_SEQ_1, laneFile0.getAbsolutePath()); parameters.put(COConstants.PRM_RAW_SEQ_2, laneFile1.getAbsolutePath()); - parameters.put(COConstants.PRM_ID, laneFile0.getRunID() + "_" + laneFile0.getLaneId()); + parameters.put(COConstants.PRM_ID, laneFile0.getRunID().toString() + "_" + laneFile0.getLaneId().toString()); parameters.put(COConstants.PRM_SM, "sample_" + sampleName + "_" + pid); parameters.put(COConstants.PRM_LB, sampleName + "_" + pid + (libString.equals("addToOldLib") ? "" : "_lib2")); @@ -171,7 +188,14 @@ public BamFile alignAndPair() { List parentFiles = new LinkedList<>(); parentFiles.addAll(filesInGroup); - Job job = new Job(run, run.createJobName(parentFiles.get(0), TOOL, true), TOOL, null, parameters, parentFiles, Arrays.asList((BaseFile) bamFile, flagstatsFile)); + Job job = new Job( + runContext, + runContext.createJobName(parentFiles.get(0), TOOL,true), + TOOL, + (List) null, + parameters, + parentFiles, + Arrays.asList((BaseFile) bamFile, flagstatsFile)); BEJobResult jobResult = job.run(); flagstatsFile.setCreatingJobsResult(jobResult); if (indexCreated) bamIndexFile.setCreatingJobsResult(jobResult); @@ -222,7 +246,7 @@ public void createTestDataForLaneFiles() { fullCommandList.append(" wait"); logger.log(Level.INFO, fullCommandList.toString()); ExecutionResult er = es.execute(fullCommandList.toString()); - if (!er.successful) { + if (!er.isSuccessful()) { logger.severe("Could not create testdata for one or more files."); } } diff --git a/src/de/dkfz/b080/co/methods/Common.groovy b/src/de/dkfz/b080/co/methods/Common.groovy index be48b17..bfe636a 100644 --- a/src/de/dkfz/b080/co/methods/Common.groovy +++ b/src/de/dkfz/b080/co/methods/Common.groovy @@ -83,7 +83,7 @@ class Common { if (bamFileFileStage.stage.isMoreDetailedOrEqualTo(COFileStage.RUN)) { runId = bamFileFileStage.runID; if (bamFileFileStage.stage.isMoreDetailedOrEqualTo(COFileStage.LANE)) - lane = bamFileFileStage.laneId; + lane = bamFileFileStage.laneID; } def temp = run.getDefaultJobParameters(QCSUMMARY); diff --git a/src/de/dkfz/b080/co/methods/Samtools.groovy b/src/de/dkfz/b080/co/methods/Samtools.groovy index 3ddb7a3..12bd286 100644 --- a/src/de/dkfz/b080/co/methods/Samtools.groovy +++ b/src/de/dkfz/b080/co/methods/Samtools.groovy @@ -9,12 +9,13 @@ import de.dkfz.roddy.execution.jobs.ScriptCallingMethod import de.dkfz.roddy.execution.jobs.StaticScriptProviderClass import de.dkfz.roddy.knowledge.files.BaseFile import de.dkfz.roddy.tools.LoggerWrapper +import groovy.transform.CompileStatic /** * * @author michael */ -@groovy.transform.CompileStatic +@CompileStatic @StaticScriptProviderClass class Samtools { diff --git a/src/de/dkfz/b080/co/qcworkflow/BisulfiteCoreWorkflow.groovy b/src/de/dkfz/b080/co/qcworkflow/BisulfiteCoreWorkflow.groovy index 8a57aff..487ffc7 100644 --- a/src/de/dkfz/b080/co/qcworkflow/BisulfiteCoreWorkflow.groovy +++ b/src/de/dkfz/b080/co/qcworkflow/BisulfiteCoreWorkflow.groovy @@ -1,87 +1,68 @@ package de.dkfz.b080.co.qcworkflow import de.dkfz.b080.co.common.AlignmentAndQCConfig -import de.dkfz.b080.co.common.BasicCOProjectsRuntimeService import de.dkfz.b080.co.common.COProjectsRuntimeService import de.dkfz.b080.co.files.* -import de.dkfz.roddy.config.Configuration -import de.dkfz.roddy.config.RecursiveOverridableMapContainerForConfigurationValues -import de.dkfz.roddy.core.DataSet import de.dkfz.roddy.core.ExecutionContext import de.dkfz.roddy.core.ExecutionContextError import de.dkfz.roddy.execution.io.ExecutionService import de.dkfz.roddy.execution.io.fs.FileSystemAccessProvider - -import static de.dkfz.b080.co.files.COConstants.FLAG_EXTRACT_SAMPLES_FROM_OUTPUT_FILES +import groovy.transform.CompileStatic /** * @author michael */ -@groovy.transform.CompileStatic -public class BisulfiteCoreWorkflow extends QCPipeline { +@CompileStatic +class BisulfiteCoreWorkflow extends QCPipeline { @Override - public boolean execute(ExecutionContext context) { - Configuration cfg = context.getConfiguration(); - RecursiveOverridableMapContainerForConfigurationValues cfgValues = cfg.getConfigurationValues(); - cfgValues.put(FLAG_EXTRACT_SAMPLES_FROM_OUTPUT_FILES, "false", "boolean"); //Disable sample extraction from output for alignment workflows. - //cfgValues.put(COConstants.FLAG_USE_ACCELERATED_HARDWARE, "false", "boolean"); //Disable accelerated hardware usage for testing - - // Run flags - final boolean runFastQCOnly = cfgValues.getBoolean(COConstants.FLAG_RUN_FASTQC_ONLY, false) - final boolean runFastQC = cfgValues.getBoolean(COConstants.FLAG_RUN_FASTQC, true) - final boolean runAlignmentOnly = cfgValues.getBoolean(COConstants.FLAG_RUN_ALIGNMENT_ONLY, false); - final boolean runCoveragePlots = cfgValues.getBoolean(COConstants.FLAG_RUN_COVERAGE_PLOTS, true); - final boolean runCollectBamFileMetrics = cfgValues.getBoolean(COConstants.FLAG_RUN_COLLECT_BAMFILE_METRICS, false); + boolean execute(ExecutionContext context) { + AlignmentAndQCConfig cfg = new AlignmentAndQCConfig(context) + cfg.setUseOnlyExistingTargetBam(true) - COProjectsRuntimeService runtimeService = (COProjectsRuntimeService) context.getRuntimeService(); - - List samples = runtimeService.getSamplesForContext(context); + COProjectsRuntimeService runtimeService = (COProjectsRuntimeService) context.runtimeService + List samples = runtimeService.getSamplesForContext(context) - BamFileGroup mergedBamFiles = new BamFileGroup(); + BamFileGroup mergedBamFiles = new BamFileGroup() Map coverageTextFilesBySample = [:] for (Sample sample in samples) { - - List availableLibrariesForSample = sample.getLibraries(); - BamFileGroup mergedBamsPerLibrary = new BamFileGroup(); + BamFileGroup mergedBamsPerLibrary = new BamFileGroup() // Create per library merged bams - for (String library in availableLibrariesForSample) { + for (String library in sample.libraries) { BamFileGroup sortedBamFiles = [] - List rawSequenceGroups = runtimeService.loadLaneFilesForSampleAndLibrary(context, sample, library) + List rawSequenceGroups = runtimeService. + loadLaneFilesForSampleAndLibrary(context, sample, library) if (rawSequenceGroups == null || rawSequenceGroups.size() > 0) { for (LaneFileGroup rawSequenceGroup : rawSequenceGroups) { - if (runFastQC && !runAlignmentOnly) - rawSequenceGroup.calcFastqcForAll(); - if (runFastQCOnly) - continue; - + if (cfg.runFastqc && !cfg.runAlignmentOnly) + rawSequenceGroup.calcFastqcForAll() + if (cfg.runFastqcOnly) + continue - BamFile bamFile = rawSequenceGroup.alignAndPairSlim(); - //rawSequenceGroup.alignAndPairSlim() + BamFile bamFile = rawSequenceGroup.alignAndPairSlim() - bamFile.setAsTemporaryFile(); // Bam files created with sai files are only temporary. - sortedBamFiles.addFile(bamFile); + bamFile.setAsTemporaryFile() // Bam files created with sai files are only temporary. + sortedBamFiles.addFile(bamFile) } } - if (!sortedBamFiles.getFilesInGroup()) continue; + if (!sortedBamFiles.filesInGroup) continue - if (runAlignmentOnly) continue; + if (cfg.runAlignmentOnly) continue - BamFile mergedLibraryBam; - if (availableLibrariesForSample.size() == 1) { - mergedLibraryBam = sortedBamFiles.mergeAndRemoveDuplicatesSlim(sample); - if (runCollectBamFileMetrics) mergedLibraryBam.collectMetrics(); + BamFile mergedLibraryBam + if (sample.libraries.size() == 1) { + mergedLibraryBam = sortedBamFiles.mergeAndRemoveDuplicatesSlim(sample) + if (cfg.runCollectBamFileMetrics) mergedLibraryBam.collectMetrics() - Sample.SampleType sampleType = sample.getType(); - if (!coverageTextFilesBySample.containsKey(sampleType)) - coverageTextFilesBySample.put(sampleType, new CoverageTextFileGroup()); - coverageTextFilesBySample.get(sampleType).addFile(mergedLibraryBam.calcReadBinsCoverage()); + if (!coverageTextFilesBySample.containsKey(sample.type)) + coverageTextFilesBySample.put(sample.type, new CoverageTextFileGroup()) + coverageTextFilesBySample.get(sample.type).addFile(mergedLibraryBam.calcReadBinsCoverage()) mergedBamFiles.addFile(mergedLibraryBam); // Unfortunately, due to the way Roddy works, the following call needs to be encapsulated into @@ -101,38 +82,39 @@ public class BisulfiteCoreWorkflow extends QCPipeline { } // Merge library bams into per sample bams - if(availableLibrariesForSample.size() > 1) { - BamFile mergedBam = mergedBamsPerLibrary.mergeSlim(sample); + if(sample.libraries.size() > 1) { + BamFile mergedBam = mergedBamsPerLibrary.mergeSlim(sample) // Unfortunately, due to the way Roddy works, the following call needs to be encapsulated into // a method, in order to put library and merged methylation results into different directories. // This allows for selection via onMethod="BisulfiteCoreWorkflow.mergedMethylationCallingMeta". mergedBam.mergedMethylationCallingMeta() - if (runCollectBamFileMetrics) mergedBam.collectMetrics(); + if (cfg.runCollectBamFileMetrics) mergedBam.collectMetrics() - Sample.SampleType sampleType = sample.getType(); - if (!coverageTextFilesBySample.containsKey(sampleType)) - coverageTextFilesBySample.put(sampleType, new CoverageTextFileGroup()); - coverageTextFilesBySample.get(sampleType).addFile(mergedBam.calcReadBinsCoverage()); + if (!coverageTextFilesBySample.containsKey(sample.type)) + coverageTextFilesBySample.put(sample.type, new CoverageTextFileGroup()) + coverageTextFilesBySample.get(sample.type).addFile(mergedBam.calcReadBinsCoverage()) - mergedBamFiles.addFile(mergedBam); + mergedBamFiles.addFile(mergedBam) } } - if (!mergedBamFiles.getFilesInGroup()) { - context.addErrorEntry(ExecutionContextError.EXECUTION_NOINPUTDATA.expand("There were no merged bam files available.")); + if (!mergedBamFiles.filesInGroup) { + context.addErrorEntry(ExecutionContextError.EXECUTION_NOINPUTDATA. + expand("There were no merged bam files available.")) return false; } - if (runCoveragePlots && coverageTextFilesBySample.keySet().size() >= 2) { - coverageTextFilesBySample.get(Sample.SampleType.CONTROL).plotAgainst(coverageTextFilesBySample.get(Sample.SampleType.TUMOR)); - } else if (runCoveragePlots && coverageTextFilesBySample.keySet().size() == 1) { + if (cfg.runCoveragePlots && coverageTextFilesBySample.keySet().size() >= 2) { + coverageTextFilesBySample.get(Sample.SampleType.CONTROL). + plotAgainst(coverageTextFilesBySample.get(Sample.SampleType.TUMOR)); + } else if (cfg.runCoveragePlots && coverageTextFilesBySample.keySet().size() == 1) { //TODO: Think if this conflicts with plotAgainst on rerun! Maybe missing files are not recognized. - ((CoverageTextFileGroup) coverageTextFilesBySample.values().toArray()[0]).plot(); + ((CoverageTextFileGroup) coverageTextFilesBySample.values().toArray()[0]).plot() } - return true; + return true } @@ -144,18 +126,18 @@ public class BisulfiteCoreWorkflow extends QCPipeline { List samples = runtimeService.getSamplesForContext(context) for (Sample sample : samples) { LinkedHashMap laneFileGroups = [:] - for (String lib : sample.getLibraries()) { + for (String lib : sample.libraries) { for (LaneFileGroup group : runtimeService.loadLaneFilesForSampleAndLibrary(context, sample, lib)) { - String key = group.getRun() + " " + group.getId() + String key = group.run + " " + group.id if (laneFileGroups.containsKey(key)) { context.addErrorEntry(ExecutionContextError.EXECUTION_SETUP_INVALID. - expand("Duplicate lane identifiers for ${group.getRun()}_${group.getId()} among libraries " + - "(pid=${context.getDataSet()}, sample=${sample.getName()})! Check run and FASTQ names.")) + expand("Duplicate lane identifiers for ${group.run}_${group.id} among libraries " + + "(pid=${context.dataSet}, sample=${sample.name})! Check run and FASTQ names.")) returnValue = false } else { laneFileGroups[key] = group } - cnt += group.getFilesInGroup().size() + cnt += group.filesInGroup.size() } } } @@ -169,14 +151,16 @@ public class BisulfiteCoreWorkflow extends QCPipeline { protected boolean checkCytosinePositionIndex(ExecutionContext context) { AlignmentAndQCConfig aqcfg = new AlignmentAndQCConfig(context) - FileSystemAccessProvider accessProvider = FileSystemAccessProvider.getInstance() - File cposidx = aqcfg.getCytosinePositionIndex() + FileSystemAccessProvider accessProvider = FileSystemAccessProvider.instance + File cposidx = aqcfg.cytosinePositionIndex if (cposidx.toString().equals("")) { - context.addErrorEntry(ExecutionContextError.EXECUTION_SETUP_INVALID.expand("${AlignmentAndQCConfig.CVALUE_CYTOSINE_POSITIONS_INDEX} is not defined!")) + context.addErrorEntry(ExecutionContextError.EXECUTION_SETUP_INVALID. + expand("${AlignmentAndQCConfig.CVALUE_CYTOSINE_POSITIONS_INDEX} is not defined!")) return false } else if (!accessProvider.fileExists(cposidx) || !accessProvider.isReadable(cposidx)) { - context.addErrorEntry(ExecutionContextError.EXECUTION_SETUP_INVALID.expand("Cytosine position index '${cposidx}' is not accessible!")) + context.addErrorEntry(ExecutionContextError.EXECUTION_SETUP_INVALID. + expand("Cytosine position index '${cposidx}' is not accessible!")) return false } else { return true @@ -186,10 +170,11 @@ public class BisulfiteCoreWorkflow extends QCPipeline { protected boolean checkClipIndex(ExecutionContext context) { AlignmentAndQCConfig aqcfg = new AlignmentAndQCConfig(context) - FileSystemAccessProvider accessProvider = FileSystemAccessProvider.getInstance() - if (!aqcfg.getClipIndex().toString().startsWith('$' + ExecutionService.RODDY_CVALUE_DIRECTORY_EXECUTION) - && !accessProvider.isReadable(aqcfg.getClipIndex())) { - context.addErrorEntry(ExecutionContextError.EXECUTION_SETUP_INVALID.expand("Clip index '${aqcfg.getClipIndex()}' is not accessible!")); + FileSystemAccessProvider accessProvider = FileSystemAccessProvider.instance + if (!aqcfg.clipIndex.toString().startsWith('$' + ExecutionService.RODDY_CVALUE_DIRECTORY_EXECUTION) + && !accessProvider.isReadable(aqcfg.clipIndex)) { + context.addErrorEntry(ExecutionContextError.EXECUTION_SETUP_INVALID. + expand("Clip index '${aqcfg.clipIndex}' is not accessible!")) return false } else { return true @@ -197,7 +182,7 @@ public class BisulfiteCoreWorkflow extends QCPipeline { } @Override - public boolean checkExecutability(ExecutionContext context) { + boolean checkExecutability(ExecutionContext context) { boolean result = super.checkExecutability(context) result &= checkCytosinePositionIndex(context) result &= checkClipIndex(context) diff --git a/src/de/dkfz/b080/co/qcworkflow/PostMergeQCAnalysisWorkflow.java b/src/de/dkfz/b080/co/qcworkflow/PostMergeQCAnalysisWorkflow.java index ca5708e..167fe32 100644 --- a/src/de/dkfz/b080/co/qcworkflow/PostMergeQCAnalysisWorkflow.java +++ b/src/de/dkfz/b080/co/qcworkflow/PostMergeQCAnalysisWorkflow.java @@ -1,10 +1,11 @@ package de.dkfz.b080.co.qcworkflow; -import de.dkfz.b080.co.common.BasicCOProjectsRuntimeService; +import de.dkfz.b080.co.common.AlignmentAndQCConfig; import de.dkfz.b080.co.common.COProjectsRuntimeService; -import de.dkfz.b080.co.files.*; -import de.dkfz.roddy.config.Configuration; -import de.dkfz.roddy.config.RecursiveOverridableMapContainerForConfigurationValues; +import de.dkfz.b080.co.files.BamFile; +import de.dkfz.b080.co.files.BamFileGroup; +import de.dkfz.b080.co.files.CoverageTextFileGroup; +import de.dkfz.b080.co.files.Sample; import de.dkfz.roddy.core.ExecutionContext; import de.dkfz.roddy.core.ExecutionContextError; import de.dkfz.roddy.core.Workflow; @@ -13,9 +14,6 @@ import java.util.List; import java.util.Map; -import static de.dkfz.b080.co.files.COConstants.FLAG_EXTRACT_SAMPLES_FROM_OUTPUT_FILES; -import static de.dkfz.b080.co.files.COConstants.FLAG_USE_EXISTING_MERGED_BAMS; - /** * A short workflow which only does post merge alignment quality control */ @@ -25,16 +23,12 @@ public PostMergeQCAnalysisWorkflow() {} @Override public boolean execute(ExecutionContext context) { - Configuration cfg = context.getConfiguration(); - RecursiveOverridableMapContainerForConfigurationValues cfgValues = cfg.getConfigurationValues(); - cfgValues.put(FLAG_EXTRACT_SAMPLES_FROM_OUTPUT_FILES, "true", "boolean"); //Enable sample extraction from output for this workflow. - cfgValues.put(FLAG_USE_EXISTING_MERGED_BAMS, "true", "boolean"); //Enable usage of existing merged bams for this workflow. - final boolean runCoveragePlots = cfgValues.getBoolean(COConstants.FLAG_RUN_COVERAGE_PLOTS, true); - final boolean runExomeAnalysis = cfgValues.getBoolean(COConstants.FLAG_RUN_EXOME_ANALYSIS); + AlignmentAndQCConfig cfg = new AlignmentAndQCConfig(context); + cfg.setExtractSamplesFromOutputFiles(true); // Enable sample extraction from output for this workflow. + cfg.setUseOnlyExistingTargetBam(true); // Enable usage of existing merged bams for this workflow. COProjectsRuntimeService runtimeService = (COProjectsRuntimeService) context.getRuntimeService(); - - List samples = runtimeService.getSamplesForContext(context); + List samples = runtimeService.metadataAccessor.getSamples(context); if (samples.size() == 0) return false; @@ -42,10 +36,11 @@ public boolean execute(ExecutionContext context) { Map coverageTextFilesBySample = new LinkedHashMap<>(); for (Sample sample : samples) { - BamFile mergedBam = new BamFile(runtimeService.getMergedBamFileForDataSetAndSample(context, sample)); + BamFile mergedBam = new BamFile(runtimeService.metadataAccessor. + getMergedBamFileFromFilesystem(context, null, sample)); mergedBam.performPostMergeQCAnalysis(); - if (runExomeAnalysis) { + if (cfg.getRunExomeAnalysis()) { mergedBam.extractTargetsCalculateCoverage(); } @@ -62,7 +57,7 @@ public boolean execute(ExecutionContext context) { return false; } - if (runCoveragePlots && coverageTextFilesBySample.keySet().size() >= 2) { + if (cfg.getRunCoveragePlots() && coverageTextFilesBySample.keySet().size() >= 2) { coverageTextFilesBySample.get(Sample.SampleType.CONTROL).plotAgainst(coverageTextFilesBySample.get(Sample.SampleType.TUMOR)); } else if (coverageTextFilesBySample.keySet().size() == 1) { ((CoverageTextFileGroup) coverageTextFilesBySample.values().toArray()[0]).plot(); diff --git a/src/de/dkfz/b080/co/qcworkflow/QCPipeline.groovy b/src/de/dkfz/b080/co/qcworkflow/QCPipeline.groovy index 3ace2ed..2496958 100644 --- a/src/de/dkfz/b080/co/qcworkflow/QCPipeline.groovy +++ b/src/de/dkfz/b080/co/qcworkflow/QCPipeline.groovy @@ -34,7 +34,7 @@ public class QCPipeline extends Workflow { final boolean runFastQCOnly = cfgValues.getBoolean(COConstants.FLAG_RUN_FASTQC_ONLY, false); final boolean runAlignmentOnly = cfgValues.getBoolean(COConstants.FLAG_RUN_ALIGNMENT_ONLY, false); final boolean runCoveragePlots = cfgValues.getBoolean(COConstants.FLAG_RUN_COVERAGE_PLOTS, true); - final boolean runSlimWorkflow = cfgValues.getBoolean(COConstants.FLAG_RUN_SLIM_WORKFLOW, false); + final boolean runSlimWorkflow = true final boolean runExomeAnalysis = cfgValues.getBoolean(COConstants.FLAG_RUN_EXOME_ANALYSIS); final boolean runCollectBamFileMetrics = cfgValues.getBoolean(COConstants.FLAG_RUN_COLLECT_BAMFILE_METRICS, false); @@ -94,22 +94,10 @@ public class QCPipeline extends Workflow { } private BamFileGroup createSortedBams(ExecutionContext context, COProjectsRuntimeService runtimeService, Sample sample) { - Configuration cfg = context.getConfiguration(); - - RecursiveOverridableMapContainerForConfigurationValues cfgValues = cfg.getConfigurationValues(); - // Run flags - final boolean runFastQCOnly = cfgValues.getBoolean(COConstants.FLAG_RUN_FASTQC_ONLY, false); - final boolean runFastQC = cfgValues.getBoolean(COConstants.FLAG_RUN_FASTQC, true); - final boolean runAlignmentOnly = cfgValues.getBoolean(COConstants.FLAG_RUN_ALIGNMENT_ONLY, false); - - final boolean useOnlyExistingPairedBams = cfgValues.getBoolean(COConstants.FLAG_USE_EXISTING_PAIRED_BAMS, false); - // Usage flags - final boolean useCombinedAlignAndSampe = cfgValues.getBoolean(COConstants.FLAG_USE_COMBINED_ALIGN_AND_SAMPE, false); - final boolean runSlimWorkflow = cfgValues.getBoolean(COConstants.FLAG_RUN_SLIM_WORKFLOW, false); - + AlignmentAndQCConfig cfg = new AlignmentAndQCConfig(context) BamFileGroup sortedBamFiles = new BamFileGroup(); - if (useOnlyExistingPairedBams) { + if (cfg.useOnlyExistingPairedBams) { //Start from the paired bams instead of the lane files. sortedBamFiles = runtimeService.getPairedBamFilesForDataSet(context, sample); } else { @@ -119,23 +107,25 @@ public class QCPipeline extends Workflow { if (rawSequenceGroups == null || rawSequenceGroups.size() == 0) return sortedBamFiles; for (LaneFileGroup rawSequenceGroup : rawSequenceGroups) { - if (runFastQC && !runAlignmentOnly) + if (cfg.runFastqc && !cfg.runAlignmentOnly) rawSequenceGroup.calcFastqcForAll(); - if (runFastQCOnly) + if (cfg.runFastqcOnly) continue; BamFile bamFile = null; + final boolean runSlimWorkflow = true - if (useCombinedAlignAndSampe) { //I.e. bwa mem - if (runSlimWorkflow) { + // TODO Remove all this dead code. + if (cfg.useCombinedAlignAndSampe) { //I.e. bwa mem + if (cfg.runSlimWorkflow) { bamFile = rawSequenceGroup.alignAndPairSlim(); } else { bamFile = rawSequenceGroup.alignAndPair(); } } else { //I.e. bwa align rawSequenceGroup.alignAll(); - if (runSlimWorkflow) { + if (cfg.runSlimWorkflow) { bamFile = rawSequenceGroup.getAllAlignedFiles().pairAndSortSlim(); } else { bamFile = rawSequenceGroup.getAllAlignedFiles().pairAndSort(); @@ -157,7 +147,7 @@ public class QCPipeline extends Workflow { //To avoid problems with qcsummary the step is done manually. sortedBamFiles.runDefaultOperations(); - for (BamFile sortedBam : sortedBamFiles.getFilesInGroup()) + for (BamFile sortedBam : sortedBamFiles.filesInGroup) sortedBam.createQCSummaryFile(); BamFile mergedBam = sortedBamFiles.mergeAndRemoveDuplicates(); @@ -172,23 +162,28 @@ public class QCPipeline extends Workflow { private boolean valueIsEmpty(ExecutionContext context, Object value, String variableName) { if (value == null || value.toString() == "") { - context.addErrorEntry(ExecutionContextError.EXECUTION_SETUP_INVALID.expand("Expected value to be set: ${variableName}")) + context.addErrorEntry(ExecutionContextError.EXECUTION_SETUP_INVALID. + expand("Expected value to be set: ${variableName}")) return true } return false } private boolean fileIsAccessible(ExecutionContext context, File file, String variableName) { - if (valueIsEmpty(context, file, variableName) || !FileSystemAccessProvider.getInstance().checkFile(file, false, context)) { - context.addErrorEntry(ExecutionContextError.EXECUTION_SETUP_INVALID.expand("File '${file}' not accessible: ${variableName}")) + if (valueIsEmpty(context, file, variableName) || + !FileSystemAccessProvider.instance.checkFile(file, false, context)) { + context.addErrorEntry(ExecutionContextError.EXECUTION_SETUP_INVALID. + expand("File '${file}' not accessible: ${variableName}")) return false } return true } private boolean directoryIsAccessible(ExecutionContext context, File directory, String variableName) { - if (valueIsEmpty(context, directory, variableName) || !FileSystemAccessProvider.getInstance().checkDirectory(directory, context, false)) { - context.addErrorEntry(ExecutionContextError.EXECUTION_SETUP_INVALID.expand("Directory '${directory}' not accessible: ${variableName}")) + if (valueIsEmpty(context, directory, variableName) || + !FileSystemAccessProvider.instance.checkDirectory(directory, context, false)) { + context.addErrorEntry(ExecutionContextError.EXECUTION_SETUP_INVALID. + expand("Directory '${directory}' not accessible: ${variableName}")) return false } return true @@ -199,26 +194,31 @@ public class QCPipeline extends Workflow { boolean returnValue returnValue = - !valueIsEmpty(context, config.getIndexPrefix(), AlignmentAndQCConfig.CVALUE_INDEX_PREFIX) && - directoryIsAccessible(context, new File(config.getIndexPrefix()).getParentFile(), AlignmentAndQCConfig.CVALUE_INDEX_PREFIX) - returnValue = - fileIsAccessible(context, config.getChromosomeSizesFile(), AlignmentAndQCConfig.CVALUE_CHROMOSOME_SIZES_FILE) - if (config.getRunExomeAnalysis()) { - returnValue = - fileIsAccessible(context, config.getTargetRegionsFile(), AlignmentAndQCConfig.CVALUE_TARGET_REGIONS_FILE) && - !valueIsEmpty(context, config.getTargetSize(), AlignmentAndQCConfig.CVALUE_TARGET_SIZE) + !valueIsEmpty(context, config.indexPrefix, + AlignmentAndQCConfig.CVALUE_INDEX_PREFIX) && + directoryIsAccessible(context, new File(config.indexPrefix).parentFile, + AlignmentAndQCConfig.CVALUE_INDEX_PREFIX) + returnValue &= + fileIsAccessible(context, config.chromosomeSizesFile, + AlignmentAndQCConfig.CVALUE_CHROMOSOME_SIZES_FILE) + if (config.runExomeAnalysis) { + returnValue &= + fileIsAccessible(context, config.targetRegionsFile, + AlignmentAndQCConfig.CVALUE_TARGET_REGIONS_FILE) && + !valueIsEmpty(context, config.targetSize, + AlignmentAndQCConfig.CVALUE_TARGET_SIZE) } return returnValue } private boolean checkSamples(ExecutionContext context) { - BasicCOProjectsRuntimeService runtimeService = (BasicCOProjectsRuntimeService) context.getRuntimeService() + BasicCOProjectsRuntimeService runtimeService = (BasicCOProjectsRuntimeService) context.runtimeService List samples = runtimeService.getSamplesForContext(context) if (samples.size() == 0) { - context.addErrorEntry(ExecutionContextError.EXECUTION_SETUP_INVALID.expand("No samples found for PID ${context.getDataSet()}!")) + context.addErrorEntry(ExecutionContextError.EXECUTION_SETUP_INVALID.expand("No samples found for PID ${context.dataSet}!")) return false } else { - logger.postAlwaysInfo("Found " + samples.size() + " samples for dataset " + context.getDataSet().getId()); + logger.postAlwaysInfo("Found " + samples.size() + " samples for dataset " + context.dataSet.id); return true } } @@ -228,7 +228,8 @@ public class QCPipeline extends Workflow { AlignmentAndQCConfig cfg = new AlignmentAndQCConfig(context) - BasicCOProjectsRuntimeService runtimeService = (BasicCOProjectsRuntimeService) context.getRuntimeService() + BasicCOProjectsRuntimeService runtimeService = + (BasicCOProjectsRuntimeService) context.runtimeService List samples = runtimeService.getSamplesForContext(context) if (cfg.useOnlyExistingTargetBam && cfg.fastqFileListIsSet) { @@ -248,13 +249,13 @@ public class QCPipeline extends Workflow { for (Sample sample : samples) { List laneFileGroups = ((COProjectsRuntimeService) runtimeService).loadLaneFilesForSample(context, sample) for (LaneFileGroup lfg : laneFileGroups) { - cnt += lfg.getFilesInGroup().size() + cnt += lfg.filesInGroup.size() } - logger.postAlwaysInfo("Processed sample " + sample.getName() + " and found " + laneFileGroups.size() + " groups of lane files.") + logger.postAlwaysInfo("Processed sample " + sample.name + " and found " + laneFileGroups.size() + " groups of lane files.") } if (cnt <= 0) { context.addErrorEntry(ExecutionContextError.EXECUTION_NOINPUTDATA. - expand("No lane files found for PID ${context.getDataSet()}!")) + expand("No lane files found for PID ${context.dataSet}!")) returnValue = false } } @@ -284,7 +285,7 @@ public class QCPipeline extends Workflow { } def accessProvider = FileSystemAccessProvider.getInstance() - def bamFile = new File(aqcfg.getSingleBamParameter()) + def bamFile = new File(aqcfg.singleBamParameter) if (!accessProvider.fileExists(bamFile) || !accessProvider.isReadable(bamFile)) { context.addErrorEntry(ExecutionContextError.EXECUTION_SETUP_INVALID. expand("A 'bam' parameter was set, but the BAM file is not readable: '${bamFile}'")) @@ -296,7 +297,7 @@ public class QCPipeline extends Workflow { public boolean checkFingerprintingSitesFile(ExecutionContext context) { def aqcfg = new AlignmentAndQCConfig(context) - def accessProvider = FileSystemAccessProvider.getInstance() + def accessProvider = FileSystemAccessProvider.instance boolean result = true if (aqcfg.runFingerprinting) { if (!accessProvider.fileExists(aqcfg.fingerprintingSitesFile) @@ -323,7 +324,8 @@ public class QCPipeline extends Workflow { public boolean createTestdata(ExecutionContext context) { boolean allOk = true; - COProjectsRuntimeService runtimeService = (COProjectsRuntimeService) context.getRuntimeService(); + COProjectsRuntimeService runtimeService = + (COProjectsRuntimeService) context.runtimeService List samples = runtimeService.getSamplesForContext(context); for (Sample sample : samples) { @@ -332,7 +334,7 @@ public class QCPipeline extends Workflow { List rawSequenceGroups = runtimeService.getLanesForSample(context, sample); for (LaneFileGroup lfg : rawSequenceGroups) { - for (LaneFile lf : lfg.getFilesInGroup()) { + for (LaneFile lf : lfg.filesInGroup) { allLaneFiles.addFile(lf); } }