From 058673f8b9f17c46fcb88be3afb3af4867de9877 Mon Sep 17 00:00:00 2001 From: jaamarks Date: Wed, 14 Aug 2024 17:12:50 -0400 Subject: [PATCH 1/2] Add data dictionary file to reporting dir --- .../reporting/QC_Report_Data_Dictionary.xlsx | Bin 0 -> 17886 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/cgr_gwas_qc/reporting/QC_Report_Data_Dictionary.xlsx diff --git a/src/cgr_gwas_qc/reporting/QC_Report_Data_Dictionary.xlsx b/src/cgr_gwas_qc/reporting/QC_Report_Data_Dictionary.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f8e654bb05917f0b784ab8c1e6c57f0f2b9ebfb0 GIT binary patch literal 17886 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

3iyXVn^RI7X;JR%jN4C-&Wa+ACcM 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 JP6B@%{Xc&Hde8s> literal 0 HcmV?d00001 From c640417432048bb5064d73073b105a64ad7fbe18 Mon Sep 17 00:00:00 2001 From: jaamarks Date: Wed, 14 Aug 2024 17:21:23 -0400 Subject: [PATCH 2/2] Add function to retrieve full path of Data Dictionary in config.py - Created a function in config.py to get the full path of the Data Dictionary in the reporting directory. - Updated delivery.smk to use this function, adding a new rule for copying the Data Dictionary to the final `delivery/` directory. - Applied formatting fixes based on pre-commit hooks. --- src/cgr_gwas_qc/config.py | 8 ++++ .../workflow/sub_workflows/delivery.smk | 43 ++++++++++++++----- 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/src/cgr_gwas_qc/config.py b/src/cgr_gwas_qc/config.py index fb291465..1cdb63e1 100644 --- a/src/cgr_gwas_qc/config.py +++ b/src/cgr_gwas_qc/config.py @@ -48,6 +48,9 @@ class ConfigMgr: #: The absolute path to the ``reporting/templates``. TEMPLATE_DIR: Path = SRC_DIR / "reporting/templates" + #: The absolute path to the ``reporting/QC_Report_Data_Dictionary.xlsx``. + DD_DIR: Path = SRC_DIR / "reporting/QC_Report_Data_Dictionary.xlsx" + __instance = None ################################################################################ @@ -186,6 +189,11 @@ def docx_template(self) -> str: """Return the path to the docx template.""" return (self.TEMPLATE_DIR / "cgr_reference.docx").as_posix() + @property + def data_dictionary(self) -> str: + """Return the path to the qc report data dictioanry.""" + return (self.DD_DIR).as_posix() + ################################################################################ # Helper functions for Set-up diff --git a/src/cgr_gwas_qc/workflow/sub_workflows/delivery.smk b/src/cgr_gwas_qc/workflow/sub_workflows/delivery.smk index 95fe70ae..683b42e6 100644 --- a/src/cgr_gwas_qc/workflow/sub_workflows/delivery.smk +++ b/src/cgr_gwas_qc/workflow/sub_workflows/delivery.smk @@ -1,20 +1,24 @@ from cgr_gwas_qc import load_config import re import os + cfg = load_config() output_pattern = cfg.config.user_files.output_pattern manifest_file = cfg.config.sample_sheet lims_dir = cfg.config.workflow_params.lims_output_dir -if (len(os.path.basename(manifest_file)[:-4].split('_AnalysisManifest_'))==2): - (outName,sampSheetDate)=os.path.basename(manifest_file)[:-4].split('_AnalysisManifest_') - lims_file_name = "{deliver_prefix}"+outName+"_LimsUpload_"+sampSheetDate+"{deliver_suffix}.csv" - file_type_lims= outName + "_LimsUpload_"+ sampSheetDate +if len(os.path.basename(manifest_file)[:-4].split("_AnalysisManifest_")) == 2: + (outName, sampSheetDate) = os.path.basename(manifest_file)[:-4].split("_AnalysisManifest_") + lims_file_name = ( + "{deliver_prefix}" + outName + "_LimsUpload_" + sampSheetDate + "{deliver_suffix}.csv" + ) + file_type_lims = outName + "_LimsUpload_" + sampSheetDate else: timestr = cfg.config.workflow_params.time_start - file_type_lims="LimsUpload_"+ timestr - lims_file_name = "{deliver_prefix}LimsUpload_"+timestr+"{deliver_suffix}.csv" + file_type_lims = "LimsUpload_" + timestr + lims_file_name = "{deliver_prefix}LimsUpload_" + timestr + "{deliver_suffix}.csv" + localrules: all_delivery, @@ -31,6 +35,7 @@ localrules: qc_report, qc_report_docx, qc_report_xlsx, + deliver_data_dictionary, wildcard_constraints: @@ -50,6 +55,7 @@ targets = [ "delivery/subjects.bim", "delivery/subjects.fam", "delivery/HWP.zip", + "delivery/QC_Report_Data_Dictionary.xlsx", output_pattern.format(prefix="files_for_lab", file_type="all_sample_qc", ext="csv"), output_pattern.format(prefix="files_for_lab", file_type=file_type_lims, ext="csv"), output_pattern.format(prefix="files_for_lab", file_type="Identifiler", ext="csv"), @@ -64,7 +70,12 @@ if cfg.config.workflow_params.lims_upload: # The CGEMs/CCAD cluster has a cron job running that looks for this file in # the root run directory. If it is there then it will automatically upload # to the LIMs system. This is only useful on CGEMs/CCAD. - targets.append(output_pattern.format(prefix=cfg.config.workflow_params.lims_output_dir, file_type=file_type_lims, ext="csv")) + targets.append( + output_pattern.format( + prefix=cfg.config.workflow_params.lims_output_dir, file_type=file_type_lims, ext="csv" + ) + ) + rule all_delivery: input: @@ -85,12 +96,13 @@ rule lab_sample_level_qc_report: shell: "cp {input[0]} {output[0]}" + rule lab_lims_upload: input: sample_sheet_csv="cgr_sample_sheet.csv", sample_qc_csv="sample_level/sample_qc.csv", output: - "files_for_lab/"+lims_file_name, + "files_for_lab/" + lims_file_name, script: "../scripts/lab_lims_upload.py" @@ -103,7 +115,7 @@ if cfg.config.workflow_params.lims_upload: input: rules.lab_lims_upload.output[0], output: - lims_dir+"/"+lims_file_name, + lims_dir + "/" + lims_file_name, shell: "cp {input[0]} {output[0]}" @@ -142,7 +154,7 @@ rule lab_unknown_replicates: rule deliver_manifest: input: cfg.sample_sheet_file.as_posix(), - manifest = manifest_file, + manifest=manifest_file, output: "delivery/{deliver_prefix}AnalysisManifest{deliver_suffix}.csv", shell: @@ -151,7 +163,6 @@ rule deliver_manifest: file=$(echo {input[1]} | rev | cut -d"/" -f -1 | rev) cp {input[1]} delivery/$file """ - rule deliver_hwp: @@ -263,6 +274,7 @@ rule qc_report_docx: shell: "pandoc --reference-doc {params.template} --toc -s {input} -o {output[0]}" + rule qc_report_xlsx: input: sample_sheet_csv="cgr_sample_sheet.csv", @@ -276,3 +288,12 @@ rule qc_report_xlsx: "delivery/{deliver_prefix}QC_Report{deliver_suffix}.xlsx", script: "../scripts/qc_report_table.py" + + +rule deliver_data_dictionary: + input: + cfg.data_dictionary, + output: + "delivery/QC_Report_Data_Dictionary.xlsx", + shell: + "cp {input} {output}"