From 35c768e489f6382edea40e1b7ef5b38940f6fd8f Mon Sep 17 00:00:00 2001 From: kedhammar Date: Wed, 4 Dec 2024 11:40:19 +0100 Subject: [PATCH 1/9] first draft --- taca/analysis/analysis_nanopore.py | 10 +++ taca/nanopore/ONT_run_classes.py | 110 +++++++++++++++++++++++++++++ 2 files changed, 120 insertions(+) diff --git a/taca/analysis/analysis_nanopore.py b/taca/analysis/analysis_nanopore.py index 1c8a2929..816a2125 100644 --- a/taca/analysis/analysis_nanopore.py +++ b/taca/analysis/analysis_nanopore.py @@ -97,6 +97,12 @@ def process_user_run(ont_user_run: ONT_user_run): logger.info(f"{ont_user_run.run_name}: Putting HTML report on GenStat...") ont_user_run.copy_html_report() + # Generate and publish TouliggQC report + logger.info( + f"{ont_user_run.run_name}: Generating and publishing ToulligQC report..." + ) + ont_user_run.touliggqc_report() + # Copy metadata logger.info(f"{ont_user_run.run_name}: Copying metadata...") ont_user_run.copy_metadata() @@ -166,6 +172,10 @@ def process_qc_run(ont_qc_run: ONT_qc_run): logger.info(f"{ont_qc_run.run_name}: Putting HTML report on GenStat...") ont_qc_run.copy_html_report() + # Generate and publish TouliggQC report + logger.info(f"{ont_qc_run.run_name}: Generating and publishing ToulligQC report...") + ont_qc_run.touliggqc_report() + # Look at seq data if not ont_qc_run.has_raw_seq_output(): logger.info(f"{ont_qc_run.run_name}: Run has no sequencing output, continuing") diff --git a/taca/nanopore/ONT_run_classes.py b/taca/nanopore/ONT_run_classes.py index fa55d013..38fc1939 100644 --- a/taca/nanopore/ONT_run_classes.py +++ b/taca/nanopore/ONT_run_classes.py @@ -61,6 +61,9 @@ def __init__(self, run_abspath: str): # Get attributes from config self.minknow_reports_dir = CONFIG["nanopore_analysis"]["minknow_reports_dir"] + self.toulligqc_reports_dir = CONFIG["nanopore_analysis"][ + "toulligqc_reports_dir" + ] # TODO self.analysis_server = CONFIG["nanopore_analysis"].get("analysis_server", None) self.rsync_options = CONFIG["nanopore_analysis"]["rsync_options"] for k, v in self.rsync_options.items(): @@ -338,6 +341,113 @@ def copy_html_report(self): logger.error(msg) raise RsyncError(msg) + def touliggqc_report(self): + """Generate a QC report for the run using ToulligQC and publish it to GenStat.""" + + # Get sequencing summary file + glob_summary = glob.glob(f"{self.run_abspath}/sequencing_summary*.txt") + assert len(glob_summary) == 1, f"Found {len(glob_summary)} summary files" + summary = glob_summary[0] + + # Determine the format of the raw sequencing data, sorted by preference + raw_data_dir_options = [ + "pod5_passed", + "pod5", + "fast5_pass", + "fast5", + ] + raw_data_dir = None + for raw_data_dir_option in raw_data_dir_options: + if os.path.exists(f"{self.run_abspath}/{raw_data_dir_option}"): + raw_data_dir = raw_data_dir_option + break + if raw_data_dir is None: + raise AssertionError(f"No seq data found in {self.run_abspath}") + raw_data_format = "pod5" if "pod5" in raw_data_dir else "fast5" + + # Load samplesheet, if any + ss_glob = glob.glob(f"{self.run_abspath}/sample_sheet*.csv") + if len(ss_glob) == 0: + samplesheet = None + elif len(ss_glob) > 1: + # If multiple samplesheet, use latest one + samplesheet = ss_glob.sort()[-1] + else: + samplesheet = ss_glob[0] + + # Run has barcode subdirs + if len(glob.glob(f"{self.run_abspath}/fastq_pass/barcode*")) > 0: + barcode_dirs = True + else: + barcode_dirs = False + + # Determine barcodes + if samplesheet: + ss_df = pd.read_csv(samplesheet) + if "barcode" in ss_df.columns: + ss_barcodes = list(ss_df["barcode"].unique()) + ss_barcodes.sort() + barcode_nums = [int(bc[-2:]) for bc in ss_barcodes] + # If barcodes are numbered sequentially, write arg as range + if barcode_nums == list(range(1, len(barcode_nums) + 1)): + barcodes_arg = f"{ss_barcodes[0]}:{ss_barcodes[-1]}" + else: + barcodes_arg = ":".join(ss_barcodes) + else: + ss_barcodes = None + + command_args = { + "--sequencing-summary-source": summary, + f"--{raw_data_format}-source": f"{self.run_abspath}/{raw_data_dir}", + "--output-directory": self.run_abspath, + "--report-name": "toulligqc_report", + } + if barcode_dirs: + command_args["--barcoding"] = "" + if ss_barcodes: + command_args["--samplesheet"] = samplesheet + command_args["--barcodes"] = barcodes_arg + + # Build command list + command_list = ["toulligqc"] + for k, v in command_args.items(): + command_list.append(k) + if v: + command_list.append(v) + + # Run the command + # Small enough to wait for, should be done in 1-5 minutes + process = subprocess.run(command_list) + + # Check if the command was successful + if process.returncode == 0: + logging.info(f"{self.run_name}: ToulligQC report generated successfully.") + else: + raise subprocess.CalledProcessError(process.returncode, command_list) + + # Copy the report to GenStat + + logger.info( + f"{self.run_name}: Transferring ToulligQC report to ngi-internal..." + ) + # Transfer the ToulligQC .html report file to ngi-internal, renaming it to the full run ID. Requires password-free SSH access. + report_src_path = self.get_file("toulligqc_report/report*.html") + report_dest_path = os.path.join( + self.toulligqc_reports_dir, + f"ToulligQC_{self.run_name}.html", + ) + transfer_object = RsyncAgent( + src_path=report_src_path, + dest_path=report_dest_path, + validate=False, + ) + try: + transfer_object.transfer() + except RsyncError: + msg = f"{self.run_name}: An error occurred while attempting to transfer the report {report_src_path} to {report_dest_path}." + logger.error(msg) + raise RsyncError(msg) + # Transfer run def transfer_run(self): From 9f109a5f83cd55bb9e01fc60eae3849159116452 Mon Sep 17 00:00:00 2001 From: kedhammar Date: Wed, 4 Dec 2024 11:43:20 +0100 Subject: [PATCH 2/9] bump vlog and reqs --- VERSIONLOG.md | 4 ++++ requirements.txt | 1 + 2 files changed, 5 insertions(+) diff --git a/VERSIONLOG.md b/VERSIONLOG.md index 1bdb3fee..9d385b6b 100644 --- a/VERSIONLOG.md +++ b/VERSIONLOG.md @@ -1,5 +1,9 @@ # TACA Version Log +## 20241204.1 + +Add automated QC reports with ToulligQC for ONT. + ## 20241128.1 Add automated cleanup to ONT transfer script. diff --git a/requirements.txt b/requirements.txt index 36b52625..940ddf4e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,3 +6,4 @@ pandas python_crontab python_dateutil setuptools +toulligqc @ git+https://github.com/GenomiqueENS/toulligQC From 75217791e8526130f7e55db4e1fe08ab68cacb1f Mon Sep 17 00:00:00 2001 From: kedhammar Date: Wed, 4 Dec 2024 13:40:27 +0100 Subject: [PATCH 3/9] update tests --- taca/nanopore/ONT_run_classes.py | 16 ++++-- tests/analysis/test_analysis_nanopore.py | 67 +++++++++++++++--------- tests/conftest.py | 9 +++- tests/nanopore/test_ONT_run_classes.py | 13 +++-- 4 files changed, 69 insertions(+), 36 deletions(-) diff --git a/taca/nanopore/ONT_run_classes.py b/taca/nanopore/ONT_run_classes.py index 38fc1939..6b0db174 100644 --- a/taca/nanopore/ONT_run_classes.py +++ b/taca/nanopore/ONT_run_classes.py @@ -109,6 +109,14 @@ def assert_contents(self): assert self.has_file("/.sync_finished") assert self.has_file("/final_summary*.txt") + # Raw seq files + assert any( + [ + dir in os.listdir(self.run_abspath) + for dir in ["pod5", "pod5_pass", "fast5", "fast5_pass"] + ] + ) + # NGI files from instrument assert self.has_file("/pore_count_history.csv") assert self.has_file("/run_path.txt") @@ -351,7 +359,7 @@ def touliggqc_report(self): # Determine the format of the raw sequencing data, sorted by preference raw_data_dir_options = [ - "pod5_passed", + "pod5_pass", "pod5", "fast5_pass", "fast5", @@ -404,7 +412,7 @@ def touliggqc_report(self): } if barcode_dirs: command_args["--barcoding"] = "" - if ss_barcodes: + if samplesheet and ss_barcodes: command_args["--samplesheet"] = samplesheet command_args["--barcodes"] = barcodes_arg @@ -431,7 +439,7 @@ def touliggqc_report(self): f"{self.run_name}: Transferring ToulligQC report to ngi-internal..." ) # Transfer the ToulligQC .html report file to ngi-internal, renaming it to the full run ID. Requires password-free SSH access. - report_src_path = self.get_file("toulligqc_report/report*.html") + report_src_path = self.get_file("/toulligqc_report/report.html") report_dest_path = os.path.join( self.toulligqc_reports_dir, f"ToulligQC_{self.run_name}.html", @@ -609,7 +617,7 @@ def has_fastq_output(self) -> bool: def has_raw_seq_output(self) -> bool: """Check whether run has sequencing data output.""" - raw_seq_dirs = ["pod5", "fast5_pass"] + raw_seq_dirs = ["pod5", "pod5_pass", "fast5", "fast5_pass"] for dir in raw_seq_dirs: if os.path.exists(os.path.join(self.run_abspath, dir)): diff --git a/tests/analysis/test_analysis_nanopore.py b/tests/analysis/test_analysis_nanopore.py index 30a7105a..565c919d 100644 --- a/tests/analysis/test_analysis_nanopore.py +++ b/tests/analysis/test_analysis_nanopore.py @@ -1,5 +1,6 @@ import importlib import logging +import os import subprocess from io import StringIO from unittest.mock import patch @@ -21,28 +22,25 @@ def parametrize_testruns(): """ parameter_string_table = """ - desc instrument qc run_finished sync_finished raw_dirs fastq_dirs barcode_dirs anglerfish_samplesheets anglerfish_ongoing anglerfish_exit - prom_ongoing promethion False False False False False False False False NA - prom_done promethion False True False False False False False False NA - prom_synced promethion False True True False False False False False NA - prom_reads promethion False True True True False False False False NA - prom_fastq promethion False True True True True False False False NA - prom_bcs promethion False True True True True True False False NA - min_ongoing minion False False False False False False False False NA - min_done minion False True False False False False False False NA - min_synced minion False True True False False False False False NA - min_reads minion False True True True False False False False NA - min_fastq minion False True True True True False False False NA - min_bcs minion False True True True True True False False NA - min_qc_ongoing minion True False False False False False False False NA - min_qc_done minion True True False False False False False False NA - min_qc_synced minion True True True False False False False False NA - min_qc_reads minion True True True True False False False False NA - min_qc_fastq minion True True True True True False False False NA - min_qc_bcs minion True True True True True True False False NA - min_qc_ang_ss minion True True True True True True True False NA - min_qc_ang_run minion True True True True True True True True NA - min_qc_ang_done minion True True True True True True True False 0 + desc instrument qc run_finished sync_finished fastq_dirs barcode_dirs anglerfish_samplesheets anglerfish_ongoing anglerfish_exit + prom_ongoing promethion False False False False False False False NA + prom_done promethion False True False False False False False NA + prom_synced promethion False True True False False False False NA + prom_fastq promethion False True True True False False False NA + prom_bcs promethion False True True True True False False NA + min_ongoing minion False False False False False False False NA + min_done minion False True False False False False False NA + min_synced minion False True True False False False False NA + min_fastq minion False True True True False False False NA + min_bcs minion False True True True True False False NA + min_qc_ongoing minion True False False False False False False NA + min_qc_done minion True True False False False False False NA + min_qc_synced minion True True True False False False False NA + min_qc_fastq minion True True True True False False False NA + min_qc_bcs minion True True True True True False False NA + min_qc_ang_ss minion True True True True True True False NA + min_qc_ang_run minion True True True True True True True NA + min_qc_ang_done minion True True True True True True False 0 """ # Turn string table to datastream @@ -51,6 +49,9 @@ def parametrize_testruns(): # Read data, trimming whitespace df = pd.read_csv(data, sep=r"\s+") + # Fix data types + df.anglerfish_exit = df.anglerfish_exit[df.anglerfish_exit.notna()].astype("Int64") + # Replace nan(s) with None(s) df = df.replace(np.nan, None) @@ -100,17 +101,34 @@ def test_ont_transfer(create_dirs, run_properties, caplog): # Mock subprocess.Popen ONLY for Anglerfish original_popen = subprocess.Popen - def side_effect(*args, **kwargs): + def mock_Popen_side_effect(*args, **kwargs): if "anglerfish" in args[0]: return mock_Popen else: return original_popen(*args, **kwargs) mock_Popen = patch( - "taca.nanopore.ONT_run_classes.subprocess.Popen", side_effect=side_effect + "taca.nanopore.ONT_run_classes.subprocess.Popen", + side_effect=mock_Popen_side_effect, ).start() mock_Popen.pid = 1337 # Nice + # Mock subprocess.run ONLY for ToulligQC + original_run = subprocess.run + + def mock_run_side_effect(*args, **kwargs): + if "toulligqc" in args[0]: + os.mkdir(f"{args[0][6]}/toulligqc_report") + open(f"{args[0][6]}/toulligqc_report/report.html", "w").close() + return mock_run + else: + return original_run(*args, **kwargs) + + mock_run = patch( + "taca.nanopore.ONT_run_classes.subprocess.run", side_effect=mock_run_side_effect + ).start() + mock_run.returncode = 0 + # Reload module to implement mocks importlib.reload(analysis_nanopore) @@ -122,7 +140,6 @@ def side_effect(*args, **kwargs): script_files=True, run_finished=run_properties.pop("run_finished"), sync_finished=run_properties.pop("sync_finished"), - raw_dirs=run_properties.pop("raw_dirs"), fastq_dirs=run_properties.pop("fastq_dirs"), barcode_dirs=run_properties.pop("barcode_dirs"), anglerfish_samplesheets=run_properties.pop("anglerfish_samplesheets"), diff --git a/tests/conftest.py b/tests/conftest.py index 8b53b4e3..0fbf40f2 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -25,7 +25,9 @@ def create_dirs(): │ ├── minion │ │ └── qc │ └── promethion - ├── minknow_reports + ├── ngi-internal + │ ├── minknow_reports + │ └── toulligqc_reports ├── ngi-nas-ns │ ├── Aviti_data │ ├── NextSeq_data @@ -91,8 +93,11 @@ def create_dirs(): os.makedirs(f"{tmp.name}/ngi-nas-ns/samplesheets/NovaSeqXPlus") os.makedirs(f"{tmp.name}/ngi-nas-ns/samplesheets/Aviti") + # GenStat + os.makedirs(f"{tmp.name}/ngi-internal/minknow_reports") + os.makedirs(f"{tmp.name}/ngi-internal/toulligqc_reports") + # Misc. ONT dirs/files - os.makedirs(f"{tmp.name}/minknow_reports") os.makedirs(f"{tmp.name}/log") open(f"{tmp.name}/log/transfer_promethion.tsv", "w").close() open(f"{tmp.name}/log/transfer_minion.tsv", "w").close() diff --git a/tests/nanopore/test_ONT_run_classes.py b/tests/nanopore/test_ONT_run_classes.py index 99cd558f..16cce1a9 100644 --- a/tests/nanopore/test_ONT_run_classes.py +++ b/tests/nanopore/test_ONT_run_classes.py @@ -49,7 +49,8 @@ def make_ONT_test_config(tmp: tempfile.TemporaryDirectory) -> dict: anglerfish: anglerfish_samplesheets_dir: {tmp.name}/ngi-nas-ns/samplesheets/anglerfish anglerfish_path: mock - minknow_reports_dir: {tmp.name}/minknow_reports/ + minknow_reports_dir: {tmp.name}/ngi-internal/minknow_reports/ + toulligqc_reports_dir: {tmp.name}/ngi-internal/toulligqc_reports/ rsync_options: '-Lav': None '-r': None @@ -90,7 +91,6 @@ def create_ONT_run_dir( script_files: bool = False, run_finished: bool = False, sync_finished: bool = False, - raw_dirs: bool = False, fastq_dirs: bool = False, barcode_dirs: bool = False, anglerfish_samplesheets: bool = False, @@ -132,9 +132,15 @@ def create_ONT_run_dir( write_pore_count_history(run_path, flowcell_id, instrument_position) if run_finished: + # Raw seq data + os.mkdir(f"{run_path}/pod5_pass") + # Run summary .txt open(f"{run_path}/final_summary_{run_name}.txt", "w").close() + # Sequencing summary .txt + open(f"{run_path}/sequencing_summary_{run_name}.txt", "w").close() + # Run report .html open(f"{run_path}/report_{run_name}.html", "w").close() @@ -188,9 +194,6 @@ def create_ONT_run_dir( with open(f"{run_path}/.anglerfish_done", "w") as f: f.write(str(anglerfish_exit)) - if raw_dirs: - os.mkdir(f"{run_path}/pod5_pass") - if fastq_dirs: os.mkdir(f"{run_path}/fastq_pass") From a26f6901520bb3570899383fcaa8fc5c923da83f Mon Sep 17 00:00:00 2001 From: kedhammar Date: Wed, 4 Dec 2024 15:29:21 +0100 Subject: [PATCH 4/9] typo --- taca/analysis/analysis_nanopore.py | 4 ++-- taca/nanopore/ONT_run_classes.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/taca/analysis/analysis_nanopore.py b/taca/analysis/analysis_nanopore.py index 816a2125..740bafee 100644 --- a/taca/analysis/analysis_nanopore.py +++ b/taca/analysis/analysis_nanopore.py @@ -101,7 +101,7 @@ def process_user_run(ont_user_run: ONT_user_run): logger.info( f"{ont_user_run.run_name}: Generating and publishing ToulligQC report..." ) - ont_user_run.touliggqc_report() + ont_user_run.toulligqc_report() # Copy metadata logger.info(f"{ont_user_run.run_name}: Copying metadata...") @@ -174,7 +174,7 @@ def process_qc_run(ont_qc_run: ONT_qc_run): # Generate and publish TouliggQC report logger.info(f"{ont_qc_run.run_name}: Generating and publishing ToulligQC report...") - ont_qc_run.touliggqc_report() + ont_qc_run.toulligqc_report() # Look at seq data if not ont_qc_run.has_raw_seq_output(): diff --git a/taca/nanopore/ONT_run_classes.py b/taca/nanopore/ONT_run_classes.py index 6b0db174..804725c8 100644 --- a/taca/nanopore/ONT_run_classes.py +++ b/taca/nanopore/ONT_run_classes.py @@ -349,7 +349,7 @@ def copy_html_report(self): logger.error(msg) raise RsyncError(msg) - def touliggqc_report(self): + def toulligqc_report(self): """Generate a QC report for the run using ToulligQC and publish it to GenStat.""" # Get sequencing summary file From 5c46bcfb3946f9b9c67b629fc1c6ba0b3062ee8c Mon Sep 17 00:00:00 2001 From: kedhammar Date: Wed, 4 Dec 2024 16:17:34 +0100 Subject: [PATCH 5/9] remove toulligqc from requirements, use external executable supplied in config --- requirements.txt | 1 - taca/nanopore/ONT_run_classes.py | 5 +++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index 940ddf4e..36b52625 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,4 +6,3 @@ pandas python_crontab python_dateutil setuptools -toulligqc @ git+https://github.com/GenomiqueENS/toulligQC diff --git a/taca/nanopore/ONT_run_classes.py b/taca/nanopore/ONT_run_classes.py index 804725c8..f3156316 100644 --- a/taca/nanopore/ONT_run_classes.py +++ b/taca/nanopore/ONT_run_classes.py @@ -63,7 +63,8 @@ def __init__(self, run_abspath: str): self.minknow_reports_dir = CONFIG["nanopore_analysis"]["minknow_reports_dir"] self.toulligqc_reports_dir = CONFIG["nanopore_analysis"][ "toulligqc_reports_dir" - ] # TODO + ] + self.toulligqc_executable = CONFIG["nanopore_analysis"]["toulligqc_executable"] self.analysis_server = CONFIG["nanopore_analysis"].get("analysis_server", None) self.rsync_options = CONFIG["nanopore_analysis"]["rsync_options"] for k, v in self.rsync_options.items(): @@ -417,7 +418,7 @@ def toulligqc_report(self): command_args["--barcodes"] = barcodes_arg # Build command list - command_list = ["toulligqc"] + command_list = [self.toulligqc_executable] for k, v in command_args.items(): command_list.append(k) if v: From 9eaeeaee104a009e25fffec7ceb875e1073b7d04 Mon Sep 17 00:00:00 2001 From: kedhammar Date: Wed, 4 Dec 2024 16:22:28 +0100 Subject: [PATCH 6/9] update tests --- tests/nanopore/test_ONT_run_classes.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/nanopore/test_ONT_run_classes.py b/tests/nanopore/test_ONT_run_classes.py index 16cce1a9..8d5f2c78 100644 --- a/tests/nanopore/test_ONT_run_classes.py +++ b/tests/nanopore/test_ONT_run_classes.py @@ -51,6 +51,7 @@ def make_ONT_test_config(tmp: tempfile.TemporaryDirectory) -> dict: anglerfish_path: mock minknow_reports_dir: {tmp.name}/ngi-internal/minknow_reports/ toulligqc_reports_dir: {tmp.name}/ngi-internal/toulligqc_reports/ + toulligqc_executable: toulligqc rsync_options: '-Lav': None '-r': None From 7dff61ecb9e02a0968cfa456cead119ebec7a12c Mon Sep 17 00:00:00 2001 From: kedhammar Date: Mon, 9 Dec 2024 17:16:45 +0100 Subject: [PATCH 7/9] bugfix: update report dest name and accommodate barcode subdirs in raw data dir --- taca/nanopore/ONT_run_classes.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/taca/nanopore/ONT_run_classes.py b/taca/nanopore/ONT_run_classes.py index f3156316..789bcfd3 100644 --- a/taca/nanopore/ONT_run_classes.py +++ b/taca/nanopore/ONT_run_classes.py @@ -385,10 +385,13 @@ def toulligqc_report(self): samplesheet = ss_glob[0] # Run has barcode subdirs - if len(glob.glob(f"{self.run_abspath}/fastq_pass/barcode*")) > 0: + barcode_dirs_glob = glob.glob(f"{self.run_abspath}/{raw_data_dir}/barcode*") + if len(barcode_dirs_glob) > 0: barcode_dirs = True + raw_data_path = barcode_dirs_glob[0] else: barcode_dirs = False + raw_data_path = f"{self.run_abspath}/{raw_data_dir}" # Determine barcodes if samplesheet: @@ -407,7 +410,7 @@ def toulligqc_report(self): command_args = { "--sequencing-summary-source": summary, - f"--{raw_data_format}-source": f"{self.run_abspath}/{raw_data_dir}", + f"--{raw_data_format}-source": raw_data_path, "--output-directory": self.run_abspath, "--report-name": "toulligqc_report", } @@ -443,7 +446,7 @@ def toulligqc_report(self): report_src_path = self.get_file("/toulligqc_report/report.html") report_dest_path = os.path.join( self.toulligqc_reports_dir, - f"ToulligQC_{self.run_name}.html", + f"report_{self.run_name}.html", ) transfer_object = RsyncAgent( src_path=report_src_path, From 7fdc1c2bae842947ce133cd34d8f86ed2903daa0 Mon Sep 17 00:00:00 2001 From: kedhammar Date: Tue, 10 Dec 2024 09:50:49 +0100 Subject: [PATCH 8/9] update tests to reflect dirs --- tests/conftest.py | 5 +++-- tests/nanopore/test_ONT_run_classes.py | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 0fbf40f2..eeafd79b 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -27,7 +27,8 @@ def create_dirs(): │ └── promethion ├── ngi-internal │ ├── minknow_reports - │ └── toulligqc_reports + │ └── other_reports + │ └── toulligqc_reports ├── ngi-nas-ns │ ├── Aviti_data │ ├── NextSeq_data @@ -95,7 +96,7 @@ def create_dirs(): # GenStat os.makedirs(f"{tmp.name}/ngi-internal/minknow_reports") - os.makedirs(f"{tmp.name}/ngi-internal/toulligqc_reports") + os.makedirs(f"{tmp.name}/ngi-internal/other_reports/toulligqc_reports") # Misc. ONT dirs/files os.makedirs(f"{tmp.name}/log") diff --git a/tests/nanopore/test_ONT_run_classes.py b/tests/nanopore/test_ONT_run_classes.py index 8d5f2c78..6e9d1d84 100644 --- a/tests/nanopore/test_ONT_run_classes.py +++ b/tests/nanopore/test_ONT_run_classes.py @@ -50,7 +50,7 @@ def make_ONT_test_config(tmp: tempfile.TemporaryDirectory) -> dict: anglerfish_samplesheets_dir: {tmp.name}/ngi-nas-ns/samplesheets/anglerfish anglerfish_path: mock minknow_reports_dir: {tmp.name}/ngi-internal/minknow_reports/ - toulligqc_reports_dir: {tmp.name}/ngi-internal/toulligqc_reports/ + toulligqc_reports_dir: {tmp.name}/ngi-internal/other_reports/toulligqc_reports/ toulligqc_executable: toulligqc rsync_options: '-Lav': None From ce63a6dbeff432829e3ee2aa6f83c716e5a720cb Mon Sep 17 00:00:00 2001 From: kedhammar Date: Tue, 10 Dec 2024 10:07:27 +0100 Subject: [PATCH 9/9] bump vlog --- VERSIONLOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/VERSIONLOG.md b/VERSIONLOG.md index 4d5aa2b2..08becf97 100644 --- a/VERSIONLOG.md +++ b/VERSIONLOG.md @@ -1,5 +1,9 @@ # TACA Version Log +## 20241210.1 + +Tweaks and bugfixes for ToulligQC. + ## 20241204.2 Add automated QC reports with ToulligQC for ONT.