Source code for assemblerflow.generator.components.reads_quality_control


try:
    from generator.process import Process
except ImportError:
    from assemblerflow.generator.process import Process


[docs]class IntegrityCoverage(Process): """Process template interface for first integrity_coverage process This process is set with: - ``input_type``: fastq - ``output_type``: fastq - ``ptype``: pre_assembly It contains two **secondary channel link starts**: - ``SIDE_phred``: Phred score of the FastQ files - ``SIDE_max_len``: Maximum read length """ def __init__(self, **kwargs): super().__init__(**kwargs) self.input_type = "fastq" self.output_type = "fastq" self.params = { "genomeSize": { "default": 2.1, "description": "Genome size estimate for the samples. It is used to " "estimate the coverage and other assembly parameters and" "checks (default: $params.genomeSize)" }, "minCoverage": { "default": 15, "description": "Minimum coverage for a sample to proceed. Can be set to" "0 to allow any coverage (default: $params.minCoverage)" } } self.secondary_inputs = [ { "params": "genomeSize", "channel": "IN_genome_size = Channel" ".value(params.genomeSize)" "map{it -> it.toString().isNumber() ?" " it : exit(1, \"The genomeSize parameter must be a number" "or a float. Provided value: '${params.genomeSize}'\")}" }, { "params": "minCoverage", "channel": "IN_min_coverage = Channel" ".value(params.minCoverage)" "map{it -> it.toString().isNumber() ?" " it : exit(1, \"The minCoverage parameter must be a " "number or a float. Provided value: " "'${params.minCoverage}'\")}" } ] self.link_start.extend(["SIDE_phred", "SIDE_max_len"])
[docs]class CheckCoverage(Process): """Process template interface for additional integrity_coverage process This process is set with: - ``input_type``: fastq - ``output_type``: fastq - ``ptype``: pre_assembly It contains one **secondary channel link start**: - ``SIDE_max_len``: Maximum read length """ def __init__(self, **kwargs): super().__init__(**kwargs) self.input_type = "fastq" self.output_type = "fastq" self.params = { "genomeSize": { "default": 2.1, "description": "Genome size estimate for the samples. It is used to " "estimate the coverage and other assembly parameters and" "checks (default: $params.genomeSize)" }, "minCoverage": { "default": 15, "description": "Minimum coverage for a sample to proceed. Can be set to" "0 to allow any coverage (default: $params.minCoverage)" } } self.secondary_inputs = [ { "params": "genomeSize", "channel": "IN_genome_size = Channel" ".value(params.genomeSize)" "map{it -> it.toString().isNumber() ?" " it : exit(1, \"The genomeSize parameter must be a number" "or a float. Provided value: '${params.genomeSize}'\")}" }, { "params": "minCoverage", "channel": "IN_min_coverage = Channel" ".value(params.minCoverage)" "map{it -> it.toString().isNumber() ?" " it : exit(1, \"The minCoverage parameter must be a " "number or a float. Provided value: " "'${params.minCoverage}'\")}" } ] self.link_start.extend(["SIDE_max_len"])
[docs]class TrueCoverage(Process): """TrueCoverage process template interface """ def __init__(self, **kwargs): super().__init__(**kwargs) self.input_type = "fastq" self.output_type = "fastq" self.params = { "species": { "default": "null", "description": "Species name. Must be the complete species name with" "genus and species, e.g.: 'Yersinia enterocolitica'. " "(default: $params.species)" } } self.secondary_inputs = [ { "params": "species", "channel": "if ( !params.species){ exit 1, \"'species' parameter " "missing\" }\n" "if ( params.species.toString().split(\" \").size() != 2 )" "{ exit 1, \"'species' parameter must contain two " "values (e.g.: 'escherichia coli').Provided value: " "'${params.species}'\"}\n" "IN_pathoSpecies = Channel.value(params.species)" } ] self.directives = { "true_coverage": { "cpus": 4, "memory": "'1GB'", "container": "odiogosilva/true_coverage", "version": "3.2" } }
[docs]class FastQC(Process): """FastQC process template interface This process is set with: - ``input_type``: fastq - ``output_type``: fastq - ``ptype``: pre_assembly It contains two **status channels**: - ``STATUS_fastqc``: Status for the fastqc process - ``STATUS_report``: Status for the fastqc_report process """ def __init__(self, **kwargs): super().__init__(**kwargs) self.input_type = "fastq" self.output_type = "fastq" self.status_channels = ["STATUS_fastqc2", "STATUS_fastqc2_report"] """ list: Setting status channels for FastQC execution and FastQC report """ self.params = { "adapters": { "default": "'None'", "description": "Path to adapters files, if any " "(default: $params.adapters)" } } self.secondary_inputs = [ { "params": "adapters", "channel": "IN_adapters = Channel.value(params.adapters)" } ] self.directives = {"fastqc2": { "cpus": 2, "memory": "'4GB'", "container": "ummidock/fastqc", "version": "0.11.7-1" }}
[docs]class Trimmomatic(Process): """Trimmomatic process template interface This process is set with: - ``input_type``: fastq - ``output_type``: fastq - ``ptype``: pre_assembly It contains one **secondary channel link end**: - ``SIDE_phred`` (alias: ``SIDE_phred``): Receives FastQ phred score """ def __init__(self, **kwargs): super().__init__(**kwargs) self.input_type = "fastq" self.output_type = "fastq" self.link_end.append({"link": "SIDE_phred", "alias": "SIDE_phred"}) self.dependencies = ["integrity_coverage"] self.params = { "adapters": { "default": "'None'", "description": "Path to adapters files, if any " "(default: $params.adapters)" }, "trimSlidingWindow": { "default": "'5:20'", "description": "Perform sliding window trimming, cutting once the " "average quality within the window falls below a " "threshold (default: $params.trimSlidingWindow)" }, "trimLeading": { "default": "3", "description": "Cut bases off the start of a read, if below a threshold " "quality (default: $params.trimLeading" }, "trimTrailing": { "default": "3", "description": "Cut bases of the end of a read, if below a " "threshold quality (default: $params.trimTrailing)" }, "trimMinLength": { "default": "55", "description": "Drop the read if it is below a specified length " "(default: $params.trimMinLength)" } } self.secondary_inputs = [ { "params": "trimOpts", "channel": "// Check sliding window parameter\n" "if ( params.trimSlidingWindow.toString().split(\":\")" ".size() != 2 )" "{ exit 1, \"'trimSlidingWindow' parameter must contain" "two values separated by a ':'. Provided value: " "'${params.trimSlidingWindow}' \"}\n" "if ( !params.trimLeading.toString().isNumber() )" "{ exit 1, \"'trimLeading' parameter must be a number." "Provide value: '${params.trimLeading}'\"}\n" "if ( !params.trimTrailing.toString().isNumber() )" "{ exit 1, \"'trimTrailing' parameter must be a number." "Provide value: '${params.trimTrailing}'\"}\n" "if ( !params.trimMinLength.toString().isNumber() )" "{ exit 1, \"'trimMinLength' parameter must be a number." "Provide value: '${params.trimMinLength}'\"}\n" "IN_trimmomatic_opts = Channel." "value([params.trimSlidingWindow," "params.trimLeading,params.trimTrailing," "params.trimMinLength])" }, { "params": "adapters", "channel": "IN_adapters = Channel.value(params.adapters)" } ] self.directives = {"trimmomatic": { "cpus": 2, "memory": "{ 4.GB * task.attempt }", "container": "ummidock/trimmomatic", "version": "0.36-2" }}
[docs]class FastqcTrimmomatic(Process): """Fastqc + Trimmomatic process template interface This process executes FastQC only to inform the trim range for trimmomatic, not for QC checks. This process is set with: - ``input_type``: fastq - ``output_type``: fastq - ``ptype``: pre_assembly It contains one **secondary channel link end**: - ``SIDE_phred`` (alias: ``SIDE_phred``): Receives FastQ phred score It contains three **status channels**: - ``STATUS_fastqc``: Status for the fastqc process - ``STATUS_report``: Status for the fastqc_report process - ``STATUS_trim``: Status for the trimmomatic process """ def __init__(self, **kwargs): super().__init__(**kwargs) self.input_type = "fastq" self.output_type = "fastq" self.link_end.append({"link": "SIDE_phred", "alias": "SIDE_phred"}) self.status_channels = ["STATUS_fastqc", "STATUS_fastqc_report", "STATUS_trimmomatic"] self.dependencies = ["integrity_coverage"] self.params = { "adapters": { "default": "'None'", "description": "Path to adapters files, if any " "(default: $params.adapters)" }, "trimSlidingWindow": { "default": "'5:20'", "description": "Perform sliding window trimming, cutting once the " "average quality within the window falls below a " "threshold (default: $params.trimSlidingWindow)" }, "trimLeading": { "default": "3", "description": "Cut bases off the start of a read, if below a threshold " "quality (default: $params.trimLeading" }, "trimTrailing": { "default": "3", "description": "Cut bases of the end of a read, if below a " "threshold quality (default: $params.trimTrailing)" }, "trimMinLength": { "default": "55", "description": "Drop the read if it is below a specified length " "(default: $params.trimMinLength)" } } self.secondary_inputs = [ { "params": "adapters", "channel": "IN_adapters = Channel.value(params.adapters)" }, { "params": "trimOpts", "channel": "// Check sliding window parameter\n" "if ( params.trimSlidingWindow.toString().split(\":\")" ".size() != 2 )" "{ exit 1, \"'trimSlidingWindow' parameter must contain" "two values separated by a ':'. Provided value: " "'${params.trimSlidingWindow}' \"}\n" "if ( !params.trimLeading.toString().isNumber() )" "{ exit 1, \"'trimLeading' parameter must be a number." "Provide value: '${params.trimLeading}'\"}\n" "if ( !params.trimTrailing.toString().isNumber() )" "{ exit 1, \"'trimTrailing' parameter must be a number." "Provide value: '${params.trimTrailing}'\"}\n" "if ( !params.trimMinLength.toString().isNumber() )" "{ exit 1, \"'trimMinLength' parameter must be a number." "Provide value: '${params.trimMinLength}'\"}\n" "IN_trimmomatic_opts = Channel." "value([params.trimSlidingWindow," "params.trimLeading,params.trimTrailing," "params.trimMinLength])" } ] self.directives = { "fastqc": { "cpus": 2, "memory": "'4GB'", "container": "ummidock/fastqc", "version": "0.11.7-1" }, "trimmomatic": { "cpus": 2, "memory": "{ 4.GB * task.attempt }", "container": "ummidock/trimmomatic", "version": "0.36-2" } }