Skip to content

Commit

Permalink
Add delivery report to Balsamic-QC workflow (#2689)
Browse files Browse the repository at this point in the history
### Added:
- Delivery report to Balsamic-QC workflow
  • Loading branch information
ivadym authored Nov 21, 2023
1 parent 72e7fec commit aa5e12e
Show file tree
Hide file tree
Showing 11 changed files with 153 additions and 115 deletions.
5 changes: 5 additions & 0 deletions cg/cli/generate/report/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,13 @@
Pipeline,
)
from cg.meta.report.balsamic import BalsamicReportAPI
from cg.meta.report.balsamic_qc import BalsamicQCReportAPI
from cg.meta.report.balsamic_umi import BalsamicUmiReportAPI
from cg.meta.report.mip_dna import MipDNAReportAPI
from cg.meta.report.report_api import ReportAPI
from cg.meta.report.rnafusion import RnafusionReportAPI
from cg.meta.workflow.balsamic import BalsamicAnalysisAPI
from cg.meta.workflow.balsamic_qc import BalsamicQCAnalysisAPI
from cg.meta.workflow.balsamic_umi import BalsamicUmiAnalysisAPI
from cg.meta.workflow.mip_dna import MipDNAAnalysisAPI
from cg.meta.workflow.rnafusion import RnafusionAnalysisAPI
Expand Down Expand Up @@ -85,6 +87,9 @@ def get_report_api_pipeline(context: click.Context, pipeline: Pipeline) -> Repor
Pipeline.BALSAMIC_UMI: BalsamicUmiReportAPI(
config=context.obj, analysis_api=BalsamicUmiAnalysisAPI(config=context.obj)
),
Pipeline.BALSAMIC_QC: BalsamicQCReportAPI(
config=context.obj, analysis_api=BalsamicQCAnalysisAPI(config=context.obj)
),
Pipeline.MIP_DNA: MipDNAReportAPI(
config=context.obj, analysis_api=MipDNAAnalysisAPI(config=context.obj)
),
Expand Down
52 changes: 29 additions & 23 deletions cg/constants/delivery.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@

from cg.constants.constants import Pipeline

ONLY_ONE_CASE_PER_TICKET = [
ONLY_ONE_CASE_PER_TICKET: list[Pipeline] = [
Pipeline.FASTQ,
Pipeline.MICROSALT,
Pipeline.SARS_COV_2,
]

SKIP_MISSING = [
SKIP_MISSING: list[Pipeline] = [
Pipeline.FASTQ,
Pipeline.MICROSALT,
Pipeline.SARS_COV_2,
]

BALSAMIC_ANALYSIS_CASE_TAGS = [
BALSAMIC_ANALYSIS_CASE_TAGS: list[set[str]] = [
{"delivery-report"},
{"multiqc-html"},
{"metrics"},
Expand All @@ -36,21 +36,22 @@
{"vcf2cytosure"},
]

BALSAMIC_ANALYSIS_SAMPLE_TAGS = [
BALSAMIC_ANALYSIS_SAMPLE_TAGS: list[set[str]] = [
{"cram"},
{"cram-index"},
]

BALSAMIC_QC_ANALYSIS_CASE_TAGS = [
BALSAMIC_QC_ANALYSIS_CASE_TAGS: list[set[str]] = [
{"delivery-report"},
{"multiqc-html"},
]

BALSAMIC_QC_ANALYSIS_SAMPLE_TAGS = [
BALSAMIC_QC_ANALYSIS_SAMPLE_TAGS: list[set[str]] = [
{"qc-cram"},
{"qc-cram-index"},
]

BALSAMIC_UMI_ANALYSIS_CASE_TAGS = [
BALSAMIC_UMI_ANALYSIS_CASE_TAGS: list[set[str]] = [
{"vcf-umi-snv"},
{"vcf-umi-snv-index"},
{"vcf-umi-snv-research"},
Expand All @@ -61,15 +62,15 @@

BALSAMIC_UMI_ANALYSIS_CASE_TAGS.extend(BALSAMIC_ANALYSIS_CASE_TAGS)

BALSAMIC_UMI_ANALYSIS_SAMPLE_TAGS = [
BALSAMIC_UMI_ANALYSIS_SAMPLE_TAGS: list[set[str]] = [
{"umi-cram"},
{"umi-cram-index"},
]

BALSAMIC_UMI_ANALYSIS_SAMPLE_TAGS.extend(BALSAMIC_ANALYSIS_SAMPLE_TAGS)


MIP_DNA_ANALYSIS_CASE_TAGS = [
MIP_DNA_ANALYSIS_CASE_TAGS: list[set[str]] = [
{"delivery-report"},
{"vcf-clinical-sv-bin"},
{"vcf-clinical-sv-bin-index"},
Expand All @@ -93,9 +94,14 @@
{"vcf-sv-research-index"},
]

MIP_DNA_ANALYSIS_SAMPLE_TAGS = [{"bam"}, {"bam-index"}, {"cram"}, {"cram-index"}]
MIP_DNA_ANALYSIS_SAMPLE_TAGS: list[set[str]] = [
{"bam"},
{"bam-index"},
{"cram"},
{"cram-index"},
]

MIP_RNA_ANALYSIS_CASE_TAGS = [
MIP_RNA_ANALYSIS_CASE_TAGS: list[set[str]] = [
{"fusion", "clinical", "pdf"},
{"fusion", "research", "pdf"},
{"fusion", "vcf"},
Expand All @@ -107,7 +113,7 @@
{"multiqc-html"},
]

MIP_RNA_ANALYSIS_SAMPLE_TAGS = [
MIP_RNA_ANALYSIS_SAMPLE_TAGS: list[set[str]] = [
{"fusion", "star-fusion"},
{"fusion", "arriba"},
{"cram"},
Expand All @@ -117,7 +123,7 @@
{"salmon-quant"},
]

MICROSALT_ANALYSIS_CASE_TAGS = [
MICROSALT_ANALYSIS_CASE_TAGS: list[set[str]] = [
{"microsalt-qc"},
{"microsalt-type"},
{"assembly"},
Expand All @@ -126,24 +132,24 @@
{"reference-alignment-deduplicated"},
]

MICROSALT_ANALYSIS_SAMPLE_TAGS = []
MICROSALT_ANALYSIS_SAMPLE_TAGS: list[set[str]] = []

FASTQ_ANALYSIS_CASE_TAGS = []
FASTQ_ANALYSIS_CASE_TAGS: list[set[str]] = []

FASTQ_ANALYSIS_SAMPLE_TAGS = [
FASTQ_ANALYSIS_SAMPLE_TAGS: list[set[str]] = [
{"fastq"},
]

SARSCOV2_ANALYSIS_CASE_TAGS = [
SARSCOV2_ANALYSIS_CASE_TAGS: list[set[str]] = [
{"pangolin"},
{"ks-delivery"},
]

SARSCOV2_ANALYSIS_SAMPLE_TAGS = [
SARSCOV2_ANALYSIS_SAMPLE_TAGS: list[set[str]] = [
{"fastq"},
]

RNAFUSION_ANALYSIS_CASE_TAGS = [
RNAFUSION_ANALYSIS_CASE_TAGS: list[set[str]] = [
{"fusion", "arriba"},
{"fusion", "star-fusion"},
{"fusion", "fusioncatcher"},
Expand All @@ -160,10 +166,10 @@
{"delivery-report"},
]

RNAFUSION_ANALYSIS_SAMPLE_TAGS = []
RNAFUSION_ANALYSIS_SAMPLE_TAGS: list[set[str]] = []


PIPELINE_ANALYSIS_TAG_MAP = {
PIPELINE_ANALYSIS_TAG_MAP: dict[Pipeline, dict] = {
Pipeline.BALSAMIC: {
"case_tags": BALSAMIC_ANALYSIS_CASE_TAGS,
"sample_tags": BALSAMIC_ANALYSIS_SAMPLE_TAGS,
Expand Down Expand Up @@ -204,5 +210,5 @@

PIPELINE_ANALYSIS_OPTIONS = PIPELINE_ANALYSIS_TAG_MAP.keys()

INBOX_NAME = "inbox"
OUTBOX_NAME = "outbox"
INBOX_NAME: str = "inbox"
OUTBOX_NAME: str = "outbox"
79 changes: 41 additions & 38 deletions cg/constants/report.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
# Delivery report constants

"""Delivery report constants."""
from cg.constants import DataDelivery
from cg.constants.constants import Pipeline

BALSAMIC_REPORT_ACCREDITED_PANELS = ["gmsmyeloid"]
BALSAMIC_REPORT_ACCREDITED_PANELS: list[str] = ["gmsmyeloid"]

REPORT_SUPPORTED_PIPELINES = (
REPORT_SUPPORTED_PIPELINES: tuple[Pipeline, ...] = (
Pipeline.BALSAMIC,
Pipeline.BALSAMIC_UMI,
Pipeline.BALSAMIC_QC,
Pipeline.MIP_DNA,
Pipeline.RNAFUSION,
)

REPORT_SUPPORTED_DATA_DELIVERY = (
REPORT_SUPPORTED_DATA_DELIVERY: tuple[DataDelivery, ...] = (
DataDelivery.ANALYSIS_FILES,
DataDelivery.ANALYSIS_SCOUT,
DataDelivery.FASTQ_ANALYSIS,
Expand All @@ -22,41 +22,41 @@
DataDelivery.SCOUT,
)

NA_FIELD = "N/A"
YES_FIELD = "Ja"
NO_FIELD = "Nej"
PRECISION = 2
NA_FIELD: str = "N/A"
YES_FIELD: str = "Ja"
NO_FIELD: str = "Nej"
PRECISION: int = 2

REPORT_GENDER = {
REPORT_GENDER: dict[str, str] = {
"unknown": "Okänd",
"female": "Kvinna",
"male": "Man",
}

BALSAMIC_ANALYSIS_TYPE = {
BALSAMIC_ANALYSIS_TYPE: dict[str, str] = {
"tumor_wgs": "Tumör-endast (helgenomsekvensering)",
"tumor_normal_wgs": "Tumör/normal (helgenomsekvensering)",
"tumor_panel": "Tumör-endast (panelsekvensering)",
"tumor_normal_panel": "Tumör/normal (panelsekvensering)",
}

# Report required fields (OPTIONAL: "version")
REQUIRED_REPORT_FIELDS = [
REQUIRED_REPORT_FIELDS: list[str] = [
"customer",
"date",
"case",
"accredited",
]

# Customer required fields (OPTIONAL: "id")
REQUIRED_CUSTOMER_FIELDS = [
REQUIRED_CUSTOMER_FIELDS: list[str] = [
"name",
"invoice_address",
"scout_access",
]

# Case required fields
REQUIRED_CASE_FIELDS = [
REQUIRED_CASE_FIELDS: list[str] = [
"name",
"id",
"samples",
Expand All @@ -65,32 +65,32 @@
]

# Application required fields (OPTIONAL: "version", "prep_category", "description", "limitations", "external")
REQUIRED_APPLICATION_FIELDS = [
REQUIRED_APPLICATION_FIELDS: list[str] = [
"tag",
"accredited",
]

# Data analysis required fields
_REQUIRED_DATA_ANALYSIS_FIELDS = [
REQUIRED_DATA_ANALYSIS_FIELDS: list[str] = [
"customer_pipeline",
"pipeline",
"pipeline_version",
"genome_build",
]

REQUIRED_DATA_ANALYSIS_MIP_DNA_FIELDS = _REQUIRED_DATA_ANALYSIS_FIELDS + [
REQUIRED_DATA_ANALYSIS_MIP_DNA_FIELDS: list[str] = REQUIRED_DATA_ANALYSIS_FIELDS + [
"panels",
]

REQUIRED_DATA_ANALYSIS_BALSAMIC_FIELDS = _REQUIRED_DATA_ANALYSIS_FIELDS + [
REQUIRED_DATA_ANALYSIS_BALSAMIC_FIELDS: list[str] = REQUIRED_DATA_ANALYSIS_FIELDS + [
"type",
"variant_callers",
]

REQUIRED_DATA_ANALYSIS_RNAFUSION_FIELDS = _REQUIRED_DATA_ANALYSIS_FIELDS
REQUIRED_DATA_ANALYSIS_RNAFUSION_FIELDS: list[str] = REQUIRED_DATA_ANALYSIS_FIELDS

# Sample required fields
_REQUIRED_SAMPLE_FIELDS = [
_REQUIRED_SAMPLE_FIELDS: list[str] = [
"name",
"id",
"ticket",
Expand All @@ -102,48 +102,50 @@
"timestamps",
]

REQUIRED_SAMPLE_MIP_DNA_FIELDS = _REQUIRED_SAMPLE_FIELDS + [
REQUIRED_SAMPLE_MIP_DNA_FIELDS: list[str] = _REQUIRED_SAMPLE_FIELDS + [
"status",
]

REQUIRED_SAMPLE_BALSAMIC_FIELDS = _REQUIRED_SAMPLE_FIELDS + [
REQUIRED_SAMPLE_BALSAMIC_FIELDS: list[str] = _REQUIRED_SAMPLE_FIELDS + [
"tumour",
]

REQUIRED_SAMPLE_RNAFUSION_FIELDS = REQUIRED_SAMPLE_BALSAMIC_FIELDS
REQUIRED_SAMPLE_RNAFUSION_FIELDS: list[str] = REQUIRED_SAMPLE_BALSAMIC_FIELDS

# Methods required fields (OPTIONAL: "library_prep", "sequencing")
REQUIRED_SAMPLE_METHODS_FIELDS = []
REQUIRED_SAMPLE_METHODS_FIELDS: list[str] = []

# Timestamp required fields (OPTIONAL: "prepared_at", "reads_updated_at")
REQUIRED_SAMPLE_TIMESTAMP_FIELDS = [
REQUIRED_SAMPLE_TIMESTAMP_FIELDS: list[str] = [
"ordered_at",
"received_at", # Optional for external samples
]

# Metadata required fields
_REQUIRED_SAMPLE_METADATA_FIELDS = [
_REQUIRED_SAMPLE_METADATA_FIELDS: list[str] = [
"million_read_pairs",
"duplicates",
]

REQUIRED_SAMPLE_METADATA_MIP_DNA_WGS_FIELDS = _REQUIRED_SAMPLE_METADATA_FIELDS + [
REQUIRED_SAMPLE_METADATA_MIP_DNA_WGS_FIELDS: list[str] = _REQUIRED_SAMPLE_METADATA_FIELDS + [
"gender",
"mapped_reads",
"mean_target_coverage",
"pct_10x",
]

REQUIRED_SAMPLE_METADATA_MIP_DNA_FIELDS = REQUIRED_SAMPLE_METADATA_MIP_DNA_WGS_FIELDS + [
REQUIRED_SAMPLE_METADATA_MIP_DNA_FIELDS: list[str] = REQUIRED_SAMPLE_METADATA_MIP_DNA_WGS_FIELDS + [
"bait_set",
]

_REQUIRED_SAMPLE_METADATA_BALSAMIC_FIELDS = _REQUIRED_SAMPLE_METADATA_FIELDS + [
_REQUIRED_SAMPLE_METADATA_BALSAMIC_FIELDS: list[str] = _REQUIRED_SAMPLE_METADATA_FIELDS + [
"mean_insert_size",
"fold_80",
]

REQUIRED_SAMPLE_METADATA_BALSAMIC_TARGETED_FIELDS = _REQUIRED_SAMPLE_METADATA_BALSAMIC_FIELDS + [
REQUIRED_SAMPLE_METADATA_BALSAMIC_TARGETED_FIELDS: list[
str
] = _REQUIRED_SAMPLE_METADATA_BALSAMIC_FIELDS + [
"bait_set",
"bait_set_version",
"median_target_coverage",
Expand All @@ -152,20 +154,21 @@
"gc_dropout",
]

REQUIRED_SAMPLE_METADATA_BALSAMIC_TO_WGS_FIELDS = _REQUIRED_SAMPLE_METADATA_BALSAMIC_FIELDS + [
REQUIRED_SAMPLE_METADATA_BALSAMIC_TO_WGS_FIELDS: list[
str
] = _REQUIRED_SAMPLE_METADATA_BALSAMIC_FIELDS + [
"median_coverage",
"pct_60x",
"pct_reads_improper_pairs",
]

REQUIRED_SAMPLE_METADATA_BALSAMIC_TN_WGS_FIELDS = (
REQUIRED_SAMPLE_METADATA_BALSAMIC_TO_WGS_FIELDS
+ [
"pct_15x",
]
)
REQUIRED_SAMPLE_METADATA_BALSAMIC_TN_WGS_FIELDS: list[
str
] = REQUIRED_SAMPLE_METADATA_BALSAMIC_TO_WGS_FIELDS + [
"pct_15x",
]

REQUIRED_SAMPLE_METADATA_RNAFUSION_FIELDS = _REQUIRED_SAMPLE_METADATA_FIELDS + [
REQUIRED_SAMPLE_METADATA_RNAFUSION_FIELDS: list[str] = _REQUIRED_SAMPLE_METADATA_FIELDS + [
"bias_5_3",
"gc_content",
"input_amount",
Expand Down
Loading

0 comments on commit aa5e12e

Please sign in to comment.