From 72b3f997fdaa9b8a747f893a034a5dc1a4c67a7f Mon Sep 17 00:00:00 2001 From: Sebastian Allard Date: Tue, 12 Dec 2023 08:54:35 +0100 Subject: [PATCH] Validate average coverage --- cg/constants/constants.py | 1 + cg/meta/workflow/microsalt/quality_checker.py | 7 +++++++ cg/meta/workflow/microsalt/utils.py | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/cg/constants/constants.py b/cg/constants/constants.py index 28b171b0ed..303d3c5b2e 100644 --- a/cg/constants/constants.py +++ b/cg/constants/constants.py @@ -211,6 +211,7 @@ class APIMethods(StrEnum): class MicrosaltQC: + AVERAGE_COVERAGE_THRESHOLD: int = 10 QC_PERCENT_THRESHOLD_MWX: float = 0.1 COVERAGE_10X_THRESHOLD: float = 0.75 DUPLICATION_RATE_THRESHOLD: float = 0.8 diff --git a/cg/meta/workflow/microsalt/quality_checker.py b/cg/meta/workflow/microsalt/quality_checker.py index b618f66fe4..eb7cde1294 100644 --- a/cg/meta/workflow/microsalt/quality_checker.py +++ b/cg/meta/workflow/microsalt/quality_checker.py @@ -6,6 +6,7 @@ from cg.constants.constants import MicrosaltAppTags, MicrosaltQC from cg.meta.workflow.microsalt.models import QualityMetrics, QualityResult, SampleMetrics from cg.meta.workflow.microsalt.utils import ( + is_valid_average_coverage, is_valid_duplication_rate, is_valid_mapped_rate, is_valid_median_insert_size, @@ -40,6 +41,8 @@ def quality_control_sample(self, sample_id: str, metrics: SampleMetrics) -> Qual valid_reads: bool = self.is_valid_total_reads(sample_id) valid_mapped_rate: bool = self.is_valid_mapped_rate(metrics) valid_duplication_rate: bool = self.is_valid_duplication_rate(metrics) + valid_median_insert_size: bool = self.is_valid_median_insert_size(metrics) + valid_average_coverage: bool = self.is_valid_average_coverage(metrics) def quality_control_case(self, sample_results: list[QualityResult]) -> bool: pass @@ -171,3 +174,7 @@ def is_valid_duplication_rate(self, metrics: SampleMetrics) -> bool: def is_valid_median_insert_size(self, metrics: SampleMetrics) -> bool: insert_size: int = metrics.picard_markduplicate.insert_size return is_valid_median_insert_size(insert_size) + + def is_valid_average_coverage(self, metrics: SampleMetrics) -> bool: + average_coverage: float = metrics.microsalt_samtools_stats.average_coverage + return is_valid_average_coverage(average_coverage) diff --git a/cg/meta/workflow/microsalt/utils.py b/cg/meta/workflow/microsalt/utils.py index ba52d28e86..008870b2ba 100644 --- a/cg/meta/workflow/microsalt/utils.py +++ b/cg/meta/workflow/microsalt/utils.py @@ -25,6 +25,10 @@ def is_valid_median_insert_size(sample_insert_size: int) -> bool: return sample_insert_size > MicrosaltQC.INSERT_SIZE_THRESHOLD +def is_valid_average_coverage(average_coverage: float) -> bool: + return average_coverage > MicrosaltQC.AVERAGE_COVERAGE_THRESHOLD + + def parse_quality_metrics(file_path: Path) -> QualityMetrics: data = read_json(file_path) return QualityMetrics.model_validate_json(data)