diff --git a/.gitignore b/.gitignore index 0b50f890..a20ec1c1 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ ste_notes.txt assets/HDP_files* scratch/ scratchhhh/ +tests/test_data/all_samples.somatic.mutations.maf +tests/test_data/all_samples_indv.depths.tsv.gz diff --git a/bin/annotate_omega_failing.py b/bin/annotate_omega_failing.py index 9d860ed6..af6f6ae6 100755 --- a/bin/annotate_omega_failing.py +++ b/bin/annotate_omega_failing.py @@ -271,8 +271,26 @@ def main(omegas_file: str, compiled_flagged_files: str, output: str) -> None: lines = [ln.strip() for ln in fh if ln.strip()] flagged_paths = [Path(l) for l in lines] + # Read omegas with resilience to missing header lines + # Some aggregation steps may drop the header; if so, re-read with explicit names + def _read_omegas(path: Path) -> pd.DataFrame: + try: + df = pd.read_csv(path, sep="\t", header=0, dtype=str, skip_blank_lines=True) + except pd.errors.EmptyDataError: + return pd.DataFrame(columns=["gene","sample","impact","mutations","dnds","pvalue","lower","upper"]) # empty + # If expected columns are missing (e.g., header was dropped), re-read with names + expected = {"gene","sample","impact","mutations","dnds","pvalue","lower","upper"} + if not expected.issubset(set(map(str, df.columns))): + df = pd.read_csv(path, + sep="\t", + header=None, + names=["gene","sample","impact","mutations","dnds","pvalue","lower","upper"], + dtype=str, + skip_blank_lines=True) + return df.fillna("") + # Read omegas - omegas = pd.read_csv(omegas_path, sep="\t", header=0, dtype=str).fillna("") + omegas = _read_omegas(omegas_path) syn_flagged_sample, syn_flagged_gene, npa_flagged_sample, npa_flagged_gene = load_flagged_tables(flagged_paths) diff --git a/bin/create_consensus_panel.py b/bin/create_consensus_panel.py index 7b910af4..ea928abf 100755 --- a/bin/create_consensus_panel.py +++ b/bin/create_consensus_panel.py @@ -53,6 +53,9 @@ def create_consensus_panel(compact_annot_panel_path, depths_path, version, conse ##### # Filter failing columns only for rows that pass the compliance threshold compliance_df_passing = compliance_df.filter(passing_rows) + + print(f"DEBUG: Total positions passing compliance threshold: {compliance_df_passing.height}") + print(f"DEBUG: Number of samples: {compliance_df_passing.width}") # Invert all boolean values (True → False, False → True) failing_mask = pl.DataFrame([ @@ -70,6 +73,7 @@ def create_consensus_panel(compact_annot_panel_path, depths_path, version, conse "Failed": True }) + print(f"DEBUG: Total failing entries found: {len(failing_columns_counts)}") if failing_columns_counts: failing_columns_counts_df = pl.DataFrame(failing_columns_counts) @@ -79,6 +83,7 @@ def create_consensus_panel(compact_annot_panel_path, depths_path, version, conse .rename({"count": "FAILING_COUNT"}) ) failure_counts_filtered.write_csv(f"failing_consensus.{version}.tsv", separator="\t") + print(f"DEBUG: Created failing_consensus.{version}.tsv with {failure_counts_filtered.height} samples") @click.command() diff --git a/bin/create_panel_versions.py b/bin/create_panel_versions.py index 655d0762..32da041e 100755 --- a/bin/create_panel_versions.py +++ b/bin/create_panel_versions.py @@ -1,14 +1,20 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 +""" +create_panel_versions.py -import click -import pandas as pd -import os +Generates multiple VEP annotation panel subsets based on the 'IMPACT' column +using the high-performance Polars library. + +Usage: + python create_panel_versions.py --compact-annot-panel-path --output +""" -# TODO: check pandas version 2.0.3 -# -- Auxiliary functions -- # +import polars as pl +import click +import sys -panel_impact_dict = { +PANEL_IMPACT_DICT = { "protein_affecting": ["nonsense", "missense", "essential_splice", @@ -68,25 +74,33 @@ } -# -- Main function -- # -def create_panel_versions(compact_annot_panel_path, output_path): +def create_panel_versions(input_path: str, output_prefix: str) -> None: + """ + Generates panel subsets from a VEP-annotated file using Polars. + + \b + INPUT_PATH: Path to the annotated TSV file. + OUTPUT_PREFIX: Prefix for the output files (e.g., 'output/panel'). + """ + try: + df = pl.read_csv(input_path, separator="\t") + except Exception as e: + click.echo(f"Error reading input file: {e}", err=True) + sys.exit(1) - # Load VEP annotated panel, already compacted to have one variant per site - ## requires column named IMPACT with consequence type - compact_annot_panel_df = pd.read_csv(compact_annot_panel_path, sep = "\t") + if "IMPACT" not in df.columns: + click.echo("ERROR: 'IMPACT' column not found in input file.", err=True) + sys.exit(1) - # Create panel versions - for version in panel_impact_dict: + for version_name, impact_values in PANEL_IMPACT_DICT.items(): + filtered = df.filter(pl.col("IMPACT").is_in(impact_values)) + filtered.write_csv(f"{output_prefix}.{version_name}.tsv", separator="\t") - panel_version = compact_annot_panel_df.loc[compact_annot_panel_df["IMPACT"].isin(panel_impact_dict[version])] - panel_version.to_csv(f"{output_path}.{version}.tsv", - sep = "\t", index = False) + # Write the full file as a version + df.write_csv(f"{output_prefix}.all.tsv", separator="\t") - # Store complete panel (better change this way of using this version in nextflow) - version = "all" - compact_annot_panel_df.to_csv(f"{output_path}.{version}.tsv", - sep = "\t", index = False) + click.echo("Panel versions generated successfully.") @click.command() diff --git a/bin/panel_custom_processing.py b/bin/panel_custom_processing.py index 1c6cb5c8..5eee4b37 100755 --- a/bin/panel_custom_processing.py +++ b/bin/panel_custom_processing.py @@ -3,10 +3,9 @@ import click -import pandas as pd -import numpy as np +import polars as pl -from read_utils import custom_na_values +from read_utils import custom_na_values_list muttype_conversion_map = { 'G/A': 'C/T', 'G/C': 'C/G', @@ -21,100 +20,173 @@ def customize_panel_regions(VEP_output_file, custom_regions_file, customized_out simple = True ): """ - # TODO - explain what this function does + Modifies annotations in a VEP output file based on custom genomic regions. + + - For each region in the custom regions file, identifies the corresponding slice + in the VEP output. + - Updates gene names and impact values for the region. + - Saves both the modified annotation file and a record of added regions. + + Args: + VEP_output_file (str): Path to the full VEP output file (TSV). + custom_regions_file (str): Custom region definitions (tab-delimited). + customized_output_annotation_file (str): Output file for updated annotations. + simple (bool): If True, outputs simplified annotations; else adds more fields. """ + # simple = ['CHROM', 'POS', 'REF', 'ALT', 'MUT_ID' , 'GENE', 'IMPACT' , 'CONTEXT_MUT', 'CONTEXT'] # rich = ['CHROM', 'POS', 'REF', 'ALT', 'MUT_ID', 'STRAND', 'GENE', 'IMPACT', 'Feature', 'Protein_position', 'Amino_acids', 'CONTEXT_MUT', 'CONTEXT'] - all_possible_sites = pd.read_csv(VEP_output_file, sep = "\t", - na_values = custom_na_values) + + # Read entire file once, partition by chromosome + all_possible_sites = pl.read_csv(VEP_output_file, separator="\t", + null_values=custom_na_values_list, + schema_overrides={"CHROM": pl.Utf8, "Protein_position": pl.Utf8} + ).with_row_index("__idx") print("all possible sites loaded") - custom_regions_df = pd.read_table(custom_regions_file) - - added_regions_df = pd.DataFrame() - - current_chr = "" - for ind, row in custom_regions_df.iterrows(): - try: - if row["CHROM"] != current_chr: - current_chr = row["CHROM"] - chr_data = all_possible_sites[all_possible_sites["CHROM"] == current_chr] - print("Updating chromosome to:", current_chr) - - # Get start and end indices - ind_start = np.where(chr_data["POS"] == row["START"])[0][0] - ind_end = np.where(chr_data.iloc[ind_start:,:]["POS"] == row["END"])[0][-1] - # gene = chr_data.iloc[ind_start]["GENE"] - - ind_end += ind_start - - upd_start = ind_start - upd_end = ind_end - - # Extract hotspot data and modify gene names - hotspot_data = chr_data.iloc[upd_start: upd_end + 1, :].copy().drop("IMPACT", axis = 'columns') - hotspot_data["index_col"] = hotspot_data.index - original_df_start = hotspot_data.index[0] - original_df_end = hotspot_data.index[-1] - hotspot_data["GENE"] = row["NAME"] - - # Split the string into individual entries - entries = row["IMPACTFUL"].split(',') - - # Create a DataFrame - impactful_df = pd.DataFrame(entries, columns = ["MUT_ID_pyr"]) - impactful_df["IMPACT"] = row["IMPACT"] - - all_pos_len = hotspot_data.shape[0] - - # convert MUT_ID to C>N and T>N only - hotspot_data["MUT_ID_pyr"] = hotspot_data["MUT_ID"].replace(muttype_conversion_map, regex = True) - hotspot_data = hotspot_data.merge(impactful_df, - on = ["MUT_ID_pyr"], - how = 'outer' - ) - all_pos_len_after = hotspot_data.shape[0] - - # TODO add an error raise - if all_pos_len != all_pos_len_after: - print("Some of the mutations provided are not in the desired region") - print(hotspot_data[hotspot_data["POS"].isna()]["MUT_ID_pyr"]) - hotspot_data = hotspot_data[~(hotspot_data["POS"].isna())].reset_index(drop = True) - hotspot_data["POS"] = hotspot_data["POS"].astype(int) - - hotspot_data["IMPACT"] = hotspot_data["IMPACT"].fillna(row["NEUTRAL"]) - hotspot_data = hotspot_data.sort_values(by='index_col').drop("index_col", axis = 'columns') - - ## Insert modified rows back into the df - if simple: - all_possible_sites.loc[original_df_start: original_df_end, ["GENE", "IMPACT"]] = hotspot_data[["GENE", "IMPACT"]].values - else: - print("Getting Feature to '-'") - hotspot_data["Feature"] = '-' - all_possible_sites.loc[original_df_start: original_df_end, ["GENE", "IMPACT", "Feature"]] = hotspot_data[["GENE", "IMPACT", "Feature"]].values - - added_regions_df = pd.concat((added_regions_df, hotspot_data)) - print("Small region added:", row["NAME"]) - - except Exception as e: - print(f"Error processing row {row}: {e}") - - all_possible_sites = all_possible_sites.drop_duplicates(subset = ['CHROM', 'POS', 'REF', 'ALT', 'MUT_ID', - 'GENE', 'CONTEXT_MUT', 'CONTEXT', 'IMPACT'], - keep = 'first') - all_possible_sites.to_csv(customized_output_annotation_file, - header = True, - index = False, - sep = "\t") - - added_regions_df = added_regions_df.drop_duplicates(subset = ['CHROM', 'POS', 'REF', 'ALT', 'MUT_ID', - 'GENE', 'CONTEXT_MUT', 'CONTEXT', 'IMPACT'], - keep = 'first') - added_regions_df.to_csv('added_regions.tsv' if simple else 'added_regions.rich.tsv', - header = True, - index = False, - sep = "\t") + # Get chromosome order before partitioning + all_chroms = all_possible_sites["CHROM"].unique(maintain_order=True).to_list() + + # Partition by chromosome and release the full dataframe + chrom_partitions = { + df["CHROM"][0]: df + for df in all_possible_sites.partition_by("CHROM", maintain_order=True) + } + del all_possible_sites + + custom_regions_df = pl.read_csv(custom_regions_file, separator="\t", + schema_overrides={"CHROM": pl.Utf8}) + + # Group custom regions by chromosome + custom_by_chrom = {} + for row in custom_regions_df.iter_rows(named=True): + custom_by_chrom.setdefault(row["CHROM"], []).append(row) + + added_regions_list = [] + write_header = True + + for chrom in all_chroms: + chr_data = chrom_partitions.pop(chrom) + print(f"Processing chromosome: {chrom} ({chr_data.height} rows)") + + chr_updates = [] + + if chrom in custom_by_chrom: + for row in custom_by_chrom[chrom]: + try: + # Find start and end indices + idx_start = chr_data.filter(pl.col("POS") == row["START"])["__idx"][0] + from_start = chr_data.filter(pl.col("__idx") >= idx_start) + idx_end = from_start.filter(pl.col("POS") == row["END"])["__idx"][-1] + + # Extract hotspot data and modify gene names + hotspot_data = chr_data.filter( + (pl.col("__idx") >= idx_start) & (pl.col("__idx") <= idx_end) + ).drop("IMPACT").with_columns( + pl.lit(row["NAME"]).alias("GENE") + ) + + # Split the string into individual entries + entries = row["IMPACTFUL"].split(',') + + # Create a DataFrame + impactful_df = pl.DataFrame({ + "MUT_ID_pyr": entries, + "IMPACT": [row["IMPACT"]] * len(entries) + }) + + all_pos_len = hotspot_data.height + + # convert MUT_ID to C>N and T>N only + pyr_expr = pl.col("MUT_ID") + for old, new in muttype_conversion_map.items(): + pyr_expr = pyr_expr.str.replace(old, new, literal=True) + hotspot_data = hotspot_data.with_columns(pyr_expr.alias("MUT_ID_pyr")) + + hotspot_data = hotspot_data.join(impactful_df, + on = "MUT_ID_pyr", + how = "full", + suffix = "_imp" + ) + # Coalesce MUT_ID_pyr from both sides of the full join + if "MUT_ID_pyr_imp" in hotspot_data.columns: + hotspot_data = hotspot_data.with_columns( + pl.coalesce(["MUT_ID_pyr", "MUT_ID_pyr_imp"]).alias("MUT_ID_pyr") + ).drop("MUT_ID_pyr_imp") + + all_pos_len_after = hotspot_data.height + + # TODO add an error raise + if all_pos_len != all_pos_len_after: + print("Some of the mutations provided are not in the desired region") + print(hotspot_data.filter(pl.col("POS").is_null())["MUT_ID_pyr"]) + hotspot_data = hotspot_data.filter(pl.col("POS").is_not_null()) + hotspot_data = hotspot_data.with_columns(pl.col("POS").cast(pl.Int64)) + + hotspot_data = hotspot_data.with_columns( + pl.col("IMPACT").fill_null(row["NEUTRAL"]) + ).sort("__idx") + + ## Collect updates for this chromosome + if simple: + chr_updates.append(hotspot_data.select(["__idx", "GENE", "IMPACT"])) + else: + print("Getting Feature to '-'") + chr_updates.append( + hotspot_data.select(["__idx", "GENE", "IMPACT"]).with_columns( + pl.lit("-").alias("Feature") + ) + ) + + added_regions_list.append(hotspot_data) + print("Small region added:", row["NAME"]) + + except Exception as e: + print(f"Error processing row {row}: {e}") + + # Apply updates for this chromosome + if chr_updates: + all_updates = pl.concat(chr_updates) + all_updates = all_updates.unique(subset=["__idx"], keep="last") + + chr_data = chr_data.join(all_updates, on="__idx", how="left", suffix="_upd") + + update_cols = [ + pl.coalesce(["GENE_upd", "GENE"]).alias("GENE"), + pl.coalesce(["IMPACT_upd", "IMPACT"]).alias("IMPACT"), + ] + drop_cols = ["GENE_upd", "IMPACT_upd"] + + if not simple and "Feature_upd" in chr_data.columns: + update_cols.append(pl.coalesce(["Feature_upd", "Feature"]).alias("Feature")) + drop_cols.append("Feature_upd") + + chr_data = chr_data.with_columns(update_cols).drop(drop_cols) + + # Deduplicate, sort, and write this chromosome + chr_data = chr_data.sort("__idx").drop("__idx").unique( + subset = ['CHROM', 'POS', 'REF', 'ALT', 'MUT_ID', + 'GENE', 'CONTEXT_MUT', 'CONTEXT', 'IMPACT'], + keep = 'first', + maintain_order = True) + + with open(customized_output_annotation_file, 'ab' if not write_header else 'wb') as f: + chr_data.write_csv(f, separator="\t", include_header=write_header) + write_header = False + + # Write added regions + if added_regions_list: + added_regions_df = pl.concat(added_regions_list, how="diagonal") + cols_to_drop = [c for c in ["__idx"] if c in added_regions_df.columns] + if cols_to_drop: + added_regions_df = added_regions_df.drop(cols_to_drop) + added_regions_df = added_regions_df.unique( + subset = ['CHROM', 'POS', 'REF', 'ALT', 'MUT_ID', + 'GENE', 'CONTEXT_MUT', 'CONTEXT', 'IMPACT'], + keep = 'first', + maintain_order = True) + added_regions_df.write_csv('added_regions.tsv' if simple else 'added_regions.rich.tsv', + separator="\t") @@ -128,4 +200,3 @@ def main(vep_output_file, custom_regions_file, customized_output_annotation_file if __name__ == '__main__': main() - diff --git a/bin/panel_postprocessing_annotation.py b/bin/panel_postprocessing_annotation.py index 9cf3f173..45925dba 100755 --- a/bin/panel_postprocessing_annotation.py +++ b/bin/panel_postprocessing_annotation.py @@ -76,6 +76,10 @@ def VEP_annotation_to_single_row(df_annotation, keep_genes = False): return returned_df +def safe_transform_context(row, chosen_assembly): + if pd.isna(row["POS"]) or pd.isna(row["CHROM"]) or pd.isna(row["REF"]) or pd.isna(row["ALT"]): + return "UNKNOWN" + return transform_context(row["CHROM"], row["POS"], f'{row["REF"]}/{row["ALT"]}', chosen_assembly) def VEP_annotation_to_single_row_only_canonical(df_annotation, keep_genes = False): @@ -126,11 +130,6 @@ def VEP_annotation_to_single_row_only_canonical(df_annotation, keep_genes = Fals # we return the dataframe with all the original columns of the VEP file return returned_df - - - - - def vep2summarizedannotation_panel(VEP_output_file, all_possible_sites_annotated_file, assembly = 'hg38', using_canonical = True @@ -138,12 +137,12 @@ def vep2summarizedannotation_panel(VEP_output_file, all_possible_sites_annotated """ Process VEP output and summarize annotations for a panel. """ + chosen_assembly = assembly_name2function[assembly] all_possible_sites = pd.read_csv(VEP_output_file, sep = "\t", header = None, na_values = custom_na_values) print("All possible sites loaded") all_possible_sites.columns = ['CHROM', 'POS', 'REF', 'ALT', 'MUT_ID', 'Feature', 'Consequence', 'Protein_position', 'Amino_acids', 'STRAND', 'SYMBOL', 'CANONICAL', 'ENSP'] - if using_canonical: annotated_variants = VEP_annotation_to_single_row_only_canonical(all_possible_sites, keep_genes= True) if annotated_variants is not None: @@ -170,12 +169,10 @@ def vep2summarizedannotation_panel(VEP_output_file, all_possible_sites_annotated # add context type to all SNVs # remove context from the other substitution types - chosen_assembly = assembly_name2function[assembly] - annotated_variants["CONTEXT_MUT"] = annotated_variants.apply(lambda x: transform_context(x["CHROM"], x["POS"], f'{x["REF"]}/{x["ALT"]}', chosen_assembly) , axis = 1) + annotated_variants["CONTEXT_MUT"] = annotated_variants.apply(lambda row: safe_transform_context(row, chosen_assembly), axis = 1) print("Context added") annotated_variants["CONTEXT"] = annotated_variants["CONTEXT_MUT"].apply(lambda x: x[:3]) - annotated_variants_reduced = annotated_variants[['CHROM', 'POS', 'REF', 'ALT', 'MUT_ID', 'STRAND', 'SYMBOL', 'Consequence_broader', 'Feature', 'Protein_position', 'Amino_acids', 'CONTEXT_MUT', 'CONTEXT']] annotated_variants_reduced.columns = ['CHROM', 'POS', 'REF', 'ALT', 'MUT_ID', 'STRAND', 'GENE', 'IMPACT', 'Feature', 'Protein_position', 'Amino_acids', 'CONTEXT_MUT', 'CONTEXT'] annotated_variants_reduced = annotated_variants_reduced.sort_values(by = ['CHROM', 'POS', 'REF', 'ALT'] ) diff --git a/bin/sites_table_from_positions.py b/bin/sites_table_from_positions.py index 892371fa..93046b1b 100755 --- a/bin/sites_table_from_positions.py +++ b/bin/sites_table_from_positions.py @@ -19,7 +19,7 @@ def get_non_ref(l, letters = {"A", "C", "G", "T"}): # -- Main function -- # -def generate_all_sites_4VEP(input_positions, genome, output_file_with_sites): +def generate_all_sites_4VEP(input_positions, genome, output_prefix, chunk_size=0): # read CHROM,POS positions file; check dtypes positions_df = pd.read_csv(input_positions, sep = "\t", header = 0, @@ -37,20 +37,30 @@ def generate_all_sites_4VEP(input_positions, genome, output_file_with_sites): positions_df["MUTATION"] = positions_df["SEQ"].astype(str) + "/" + positions_df["ALT"].astype(str) positions_df["STRAND"] = "+" - # save - positions_df[['CHROM', 'POS', 'POS', 'MUTATION', 'STRAND']].to_csv(output_file_with_sites, - header = False, - index = False, - sep = "\t") + # add chr prefix to CHROM + positions_df["CHROM"] = "chr" + positions_df["CHROM"] + + output_df = positions_df[['CHROM', 'POS', 'POS', 'MUTATION', 'STRAND']] + + # save as chunks or single file + if chunk_size > 0: + for i, start in enumerate(range(0, len(output_df), chunk_size)): + chunk = output_df.iloc[start:start + chunk_size] + chunk.to_csv(f"{output_prefix}.chunk{i}.tsv", + header=False, index=False, sep="\t") + else: + output_df.to_csv(f"{output_prefix}.chunk1.tsv", + header=False, index=False, sep="\t") @click.command() @click.option('--input-positions', required=True, type=click.Path(exists=True), help='Input positions file (TSV)') @click.option('--genome-assembly', required=True, type=click.Choice(['hg38', 'mm39']), help='Genome assembly (hg38, mm39)') -@click.option('--output-file-with-sites', required=True, type=click.Path(), help='Output file for sites (TSV)') -def main(input_positions, genome_assembly, output_file_with_sites): - generate_all_sites_4VEP(input_positions, genome_assembly, output_file_with_sites) +@click.option('--output-prefix', required=True, type=str, help='Output file prefix (produces .chunk.tsv)') +@click.option('--chunk-size', default=0, type=int, help='Number of rows per chunk (0 = no chunking)') +def main(input_positions, genome_assembly, output_prefix, chunk_size): + generate_all_sites_4VEP(input_positions, genome_assembly, output_prefix, chunk_size) if __name__ == '__main__': main() diff --git a/conf/base.config b/conf/base.config index fc7920d7..c5a2d9d8 100644 --- a/conf/base.config +++ b/conf/base.config @@ -1,27 +1,28 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - bbglab/deepCSA Nextflow base config file -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - A 'blank slate' config file, appropriate for general use on most high performance - compute environments. Assumes that all software is installed and available on - the PATH. Runs in `local` mode - all jobs will be run on the logged in environment. ----------------------------------------------------------------------------------------- -*/ - process { - - resourceLimits = [cpus: params.max_cpus, memory: params.max_memory, time: params.max_time] - - // TODO nf-core: Check the defaults for all processes - cpus = { 1 } - memory = { 6.GB * task.attempt } - time = { 15.min * task.attempt } - - - - errorStrategy = { task.exitStatus in ((130..145) + 104) ? 'retry' : 'finish' } - maxRetries = 3 - maxErrors = '-1' + // === RESOURCE LIMITS === + resourceLimits = [ + cpus: params.max_cpus, + memory: params.max_memory, + time: params.max_time + ] + + // === SENSIBLE DEFAULTS === + // Most processes use minimal resources based on usage analysis + cpus = { 1 } + memory = { 4.GB * task.attempt } + time = { 360.min * task.attempt } + + // === ERROR HANDLING === + errorStrategy = { + if (task.exitStatus in ((130..145) + 104)) { + sleep(Math.pow(2, task.attempt) * 200 as long) // Exponential backoff + return 'retry' + } else { + return 'finish' + } + } + maxRetries = 3 + maxErrors = '-1' withLabel: error_ignore { errorStrategy = 'ignore' @@ -31,90 +32,149 @@ process { maxRetries = 2 } + // === PANEL CREATION PROCESSES === + // Large memory requirements for genomic position processing + withName: 'BBGTOOLS:DEEPCSA:CREATEPANELS:SITESFROMPOSITIONS' { + memory = { 8.GB * task.attempt } + } - // Process-specific resource requirements - // NOTE - Please try and re-use the labels below as much as possible. - // These labels are used and recognised by default in DSL2 files hosted on nf-core/modules. - // If possible, it would be nice to keep the same label naming convention when - // adding in your local modules too. - withLabel: process_single { - cpus = { 1 } + // VEP annotation is CPU and memory intensive for large VCFs + withName: 'BBGTOOLS:DEEPCSA:CREATEPANELS:VCFANNOTATEPANEL:ENSEMBLVEP_VEP*' { + cpus = { 24 * task.attempt } + memory = { 6.GB * task.attempt } } - withLabel: process_low { + + withName: 'BBGTOOLS:DEEPCSA:CREATEPANELS:CUSTOMPROCESSING.*' { + memory = { 10.GB * task.attempt } + } + + withName: 'BBGTOOLS:DEEPCSA:DEPTHS.*CONS' { cpus = { 2 * task.attempt } - memory = { 12.GB * task.attempt } + memory = { 8.GB * task.attempt } } - withLabel: process_medium { - cpus = { 6 * task.attempt } - memory = { 36.GB * task.attempt } + + withName: 'BBGTOOLS:DEEPCSA:CREATEPANELS:CREATECAPTUREDPANELS*' { + memory = { 6.GB * task.attempt } } - withLabel: process_high { - cpus = { 12 * task.attempt } - memory = { 72.GB * task.attempt } - time = { 16.h * task.attempt } + + // Large consensus panels require substantial memory + withName: 'BBGTOOLS:DEEPCSA:CREATEPANELS:CREATECONSENSUSPANELS.*' { + memory = { 18.GB * task.attempt } } + // === ANALYSIS PROCESSES === + withName: 'BBGTOOLS:DEEPCSA:ANNOTATEDEPTHS*' { + memory = { 18.GB * task.attempt } + } - withLabel: process_low_memory { - memory = { 4.GB * task.attempt } + withName: '(BBGTOOLS:DEEPCSA:CREATEPANELS:DOMAINANNOTATION*)' { + cpus = { 2 * task.attempt } + memory = { 10.GB * task.attempt } } - withLabel: memory_medium { - memory = { 8.GB * task.attempt } + + withName: 'BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:SUMANNOTATION*' { + memory = { 16.GB * task.attempt } } - withLabel: process_medium_high_memory { - memory = { 36.GB * task.attempt } + + withName:'BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:PLOTMAF*' { + memory = { 12.GB * task.attempt } } - withLabel: process_high_memory { - memory = { 200.GB * task.attempt } + + withName:'BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:WRITEMAF*' { + memory = { 12.GB * task.attempt } } + withName: 'BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:SOMATICMUTATIONS*' { + cpus = { 1 * task.attempt } + memory = { 1.GB * task.attempt } + } + withName: 'BBGTOOLS:DEEPCSA:OMEGANONPROT.*:SUBSETPANEL*' { + cpus = { 2 * task.attempt } + memory = { 4.GB * task.attempt } + } - withLabel: time_minimal { - time = { 15.m * task.attempt } + withName: 'BBGTOOLS:DEEPCSA:CREATEPANELS:POSTPROCESSVEPPANEL*' { + cpus = { 2 * task.attempt } + memory = { 8.GB * task.attempt } } - withLabel: time_low { - time = { 4.h * task.attempt } + + withName: 'BBGTOOLS:DEEPCSA:MUTRATE.*:MUTRATE*' { + memory = { 8.GB * task.attempt } } - withLabel: time_medium { - time = { 8.h * task.attempt } + + withName: 'BBGTOOLS:DEEPCSA:OMEGA.*:(PREPROCESSING|ESTIMATOR).*' { + memory = { 4.GB * task.attempt } } - withLabel: process_long { - time = { 20.h * task.attempt } + + withName: 'BBGTOOLS:DEEPCSA:OMEGA.*:ESTIMATOR_DNDSCV*' { + memory = { 2.GB * task.attempt } } + withName: 'BBGTOOLS:DEEPCSA:OMEGA.*:ESTIMATOR_DRIVERMUTRATE*' { + memory = { 1.GB * task.attempt } + } + // Catch-all for other OMEGA estimators not explicitly configured + // Keep conservative settings until we have usage data + withName: 'BBGTOOLS:DEEPCSA:OMEGA.*:ESTIMATOR_(?!DNDSCV|DRIVERMUTRATE).*' { + memory = { 4.GB * task.attempt } + } - withLabel: cpu_single_fixed { - cpus = { 1 } + withName: 'BBGTOOLS:DEEPCSA:SIGNATURESNONPROT:SIGPROFILERASSIGNMENT*' { + memory = { 2.GB * task.attempt } } - withLabel: cpu_single { - cpus = { 1 * task.attempt } + + // === UTILITY PROCESSES === + withName: 'BBGTOOLS:DEEPCSA:CUSTOM_DUMPSOFTWAREVERSIONS*' { + cache = false } - withLabel: process_low_fixed_cpus { - cpus = { 2 } + + withName: 'BBGTOOLS:DEEPCSA:DEPTHANALYSIS:COMPUTEDEPTHS' { + cpus = { 4 * task.attempt } + memory = { 4.GB * task.attempt } } - withLabel: cpu_low { - cpus = { 2 * task.attempt } + + withName: 'BBGTOOLS:DEEPCSA:MUTATEDCELLSVAF:MUTATEDGENOMESFROMVAFAM' { + errorStrategy = 'ignore' + maxRetries = 1 } - withLabel: cpu_lowmed { - cpus = { 4 * task.attempt } + + withName: 'COMPARE_SIGNATURES' { + errorStrategy = 'ignore' + maxRetries = 1 } - withLabel: cpu_medium { - cpus = { 8 * task.attempt } + + withName: 'BBGTOOLS:DEEPCSA:PLOTTINGQC:PLOTMUTATIONSPECIFIC' { + memory = { 24.GB * task.attempt } } - withLabel: cpu_medium_high { - cpus = { 12 } + + withName: 'BBGTOOLS:DEEPCSA:ENRICHPANELS:DNA2PROTEINMAPPING' { + memory = { 30.GB * task.attempt } } - withLabel: cpu_high { - cpus = { 30 * task.attempt } + + withName: 'BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:FILTERNANOSEQSNP' { + memory = { 8.GB * task.attempt } } - withLabel: cpu_veryhigh { - cpus = { 50 * task.attempt } + + withName: 'BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:MERGEBATCH' { + memory = { 6.GB * task.attempt } } + withName: 'BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:FILTERBATCH' { + memory = { 13.GB * task.attempt } + } - withName: CUSTOM_DUMPSOFTWAREVERSIONS { - cache = false + withName: 'BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:CLEANMUTATIONS' { + memory = { 10.GB * task.attempt } } -} + + + + + + + + + +} \ No newline at end of file diff --git a/conf/exome.config b/conf/exome.config new file mode 100644 index 00000000..ce7dbac5 --- /dev/null +++ b/conf/exome.config @@ -0,0 +1,275 @@ +process { + // === RESOURCE LIMITS === + resourceLimits = [ + cpus: params.max_cpus ?: 196, + memory: params.max_memory ?: 968.GB, + time: params.max_time ?: 30.d + ] + + // === SENSIBLE DEFAULTS === + // Most processes use minimal resources based on usage analysis + cpus = { 1 } + memory = { 2.GB * task.attempt } + time = { 180.min * task.attempt } + + // === ERROR HANDLING === + errorStrategy = { + if (task.exitStatus in ((130..145) + 104)) { + sleep(Math.pow(2, task.attempt) * 200 as long) // Exponential backoff + return 'retry' + } else { + return 'finish' + } + } + maxRetries = 3 + maxErrors = '-1' + + withLabel:error_ignore { + errorStrategy = 'ignore' + } + withLabel:error_retry { + errorStrategy = 'retry' + maxRetries = 2 + } + + // === PANEL CREATION PROCESSES === + // Large memory requirements for genomic position processing + withName: 'BBGTOOLS:cDEEPCSA:CREATEPANELS:SITESFROMPOSITIONS' { + memory = { 128.GB * task.attempt } + } + + // VEP annotation is CPU and memory intensive for large VCFs + withName: 'BBGTOOLS:DEEPCSA:CREATEPANELS:VCFANNOTATEPANEL:ENSEMBLVEP_VEP*' { + cpus = { 24 * task.attempt } + memory = { 8.GB * task.attempt } + time = { 32.h * task.attempt } + } + + withName: 'BBGTOOLS:DEEPCSA:CREATEPANELS:CUSTOMPROCESSING.*' { + memory = { 16.GB * task.attempt } + time = { 1.h * task.attempt } + } + + withName: 'BBGTOOLS:DEEPCSA:DEPTHS.*CONS' { + cpus = { 2 * task.attempt } + memory = { 8.GB * task.attempt } + } + + withName: 'BBGTOOLS:DEEPCSA:CREATEPANELS:CREATECAPTUREDPANELS*' { + memory = { 210.GB * task.attempt } + } + + // Large consensus panels require substantial memory + withName: 'BBGTOOLS:DEEPCSA:CREATEPANELS:CREATECONSENSUSPANELS.*' { + memory = { 32.GB * task.attempt } + time = { 10.min * task.attempt } + } + + // === ANALYSIS PROCESSES === + withName: 'BBGTOOLS:DEEPCSA:ANNOTATEDEPTHS*' { + memory = { 64.GB * task.attempt } + time = { 3.h * task.attempt } + } + + withName: '(BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:SUMANNOTATION*)' { + cpus = { 2 * task.attempt } + memory = { 10.GB * task.attempt } + } + + withName:'BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:PLOTMAF' { + memory = { 32.GB * task.attempt } + time = { 3.h * task.attempt } + } + + withName:'BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:PLOTNEEDLES' { + memory = { 2.GB * task.attempt } + time = { 8.h * task.attempt } + } + + withName:'BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:PLOTSOMATICMAF' { + memory = { 32.GB * task.attempt } + time = { 8.h * task.attempt } + } + + + + withName: '(BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:SOMATICMUTATIONS*|BBGTOOLS:DEEPCSA:OMEGANONPROT.*:SUBSETPANEL*)' { + cpus = { 2 * task.attempt } + memory = { 4.GB * task.attempt } + time = { 360.min * task.attempt } + } + + withName: 'BBGTOOLS:DEEPCSA:MUTRATE.*:MUTRATE*' { + memory = { 8.GB * task.attempt } + } + + withName: '(BBGTOOLS:DEEPCSA:OMEGA.*:(PREPROCESSING|ESTIMATOR).*|BBGTOOLS:DEEPCSA:MULTIQC)' { + memory = { 4.GB * task.attempt } + } + + //withName: 'BBGTOOLS:DEEPCSA:SIGNATURESNONPROT:SIGPROFILERASSIGNMENT*' { + // memory = { 2.GB * task.attempt } + //} + + withName: '(BBGTOOLS:DEEPCSA:MUTRATE.*:SUBSETMUTRATE|BBGTOOLS:DEEPCSA:OMEGA.*:SUBSETOMEGA.*|BBGTOOLS:DEEPCSA:MUTPROFILE.*:COMPUTEMATRIX|BBGTOOLS:DEEPCSA:SIGNATURES.*:MATRIXCONCATWGS|BBGTOOLS:DEEPCSA:SYNMUTRATE|BBGTOOLS:DEEPCSA:SYNMUTREADSRATE|BBGTOOLS:DEEPCSA:SIGNATURES.*:SIGPROFILERASSIGNMENT|BBGTOOLS:DEEPCSA:OMEGA.*:GROUPGENES|BBGTOOLS:DEEPCSA:SIGNATURES.*:SIGPROBS|BBGTOOLS:DEEPCSA:MUTS2SIGS|BBGTOOLS:DEEPCSA:CUSTOM_DUMPSOFTWAREVERSIONS|BBGTOOLS:DEEPCSA:TABLE2GROUP|BBGTOOLS:DEEPCSA:INPUT_CHECK:SAMPLESHEET_CHECK|BBGTOOLS:DEEPCSA:DEPTHANALYSIS:COMPUTEDEPTHS)' { + memory = { 500.MB * task.attempt } + } + + withName: '(BBGTOOLS:DEEPCSA:MUTPROFILE.*:COMPUTEPROFILE)' { + memory = { 1.GB * task.attempt } + } + + // === UTILITY PROCESSES === + withName: 'BBGTOOLS:DEEPCSA:CUSTOM_DUMPSOFTWAREVERSIONS*' { + cache = false + } + + withName:'BBGTOOLS:DEEPCSA:CREATEPANELS:SORTPANELRICH' { + memory = { 512.MB * task.attempt } + time = { 3.h * task.attempt } + } + + withName:'BBGTOOLS:DEEPCSA:CREATEPANELS:SORTPANELCOMPACT' { + memory = { 512.MB * task.attempt } + time = { 3.h * task.attempt } + } + + withName:'BBGTOOLS:DEEPCSA:ENRICHPANELS:DNA2PROTEINMAPPING' { + memory = { 948.GB * task.attempt } + errorStrategy = 'ignore' + } + + withName:'BBGTOOLS:DEEPCSA:PLOTDEPTHSEXONSCONS:DEPTHSSUMMARY' { + memory = { 948.GB * task.attempt } + errorStrategy = 'ignore' + } + + withName:'BBGTOOLS:DEEPCSA:PLOTTINGSUMMARY:PLOTSATURATIONPROPORTIONS' { + memory = {764.GB * task.attempt } + time = { 24.h * task.attempt } + errorStrategy = 'ignore' + } + + withName:'BBGTOOLS:DEEPCSA:CREATEPANELS:CREATECONSENSUSPANELSSYNONYMOUS' { + memory = { 40.GB * task.attempt } + } + + withName:'BBGTOOLS:DEEPCSA:CREATEPANELS:DOMAINANNOTATION' { + memory = { 300.GB * task.attempt } + } + + withName:'BBGTOOLS:DEEPCSA:CREATEPANELS:CREATECONSENSUSPANELSALL' { + memory = { 256.GB * task.attempt } + cpus = { 4* task.attempt } + } + + withName:'BBGTOOLS:DEEPCSA:CREATEPANELS:CREATECONSENSUSPANELSNONPROTAFFECT' { + memory = { 200.GB * task.attempt } + time = { 1.h * task.attempt } + + } + + withName:'BBGTOOLS:DEEPCSA:CREATEPANELS:POSTPROCESSVEPPANEL' { + memory = { 52.GB * task.attempt } + } + + withName:'BBGTOOLS:DEEPCSA:CREATEPANELS:CREATECONSENSUSPANELSINTRONS' { + memory = { 200.GB * task.attempt } + time = { 1.h * task.attempt } + } + + withName:'BBGTOOLS:DEEPCSA:CREATEPANELS:COMPAREPANELPROPORTIONS' { + memory = { 64.GB * task.attempt } + time = { 1.h * task.attempt } + } + + withName:'BBGTOOLS:DEEPCSA:ONCODRIVE3D:ONCODRIVE3D_RUN' { + memory = { 8.GB * task.attempt } + time = { 3.h * task.attempt } + } + + withName:'BBGTOOLS:DEEPCSA:CREATEPANELS:CREATECONSENSUSPANELSPROTAFFECT' { + memory = { 64.GB * task.attempt } + time = { 3.h * task.attempt } + } + + withName:'BBGTOOLS:DEEPCSA:CREATEPANELS:CREATECONSENSUSPANELSEXONS' { + memory = { 96.GB * task.attempt } + time = { 3.h * task.attempt } + cpus = { 2 * task.attempt } + } + + withName: 'BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:FILTEREXONS' { + cpus = { 1* task.attempt } + memory = { 8.GB * task.attempt } + } + + withName: 'BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:FILTERPANEL' { + cpus = { 1* task.attempt } + memory = { 16.GB * task.attempt } + } + + withName: 'BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:FILTERNANOSEQSNP' { + cpus = { 1* task.attempt } + memory = { 10.GB * task.attempt } + } + + withName: 'BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:FILTERNANOSEQNOISE' { + cpus = { 1* task.attempt } + memory = { 16.GB * task.attempt } + } + + withName: 'BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:WRITEMAF' { + cpus = { 1* task.attempt } + memory = { 6.GB * task.attempt } + } + + withName: 'BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:CLEANMUTATIONS' { + cpus = { 1* task.attempt } + memory = { 6.GB * task.attempt } + } + + withName: 'BBGTOOLS:DEEPCSA:MUTPROFILE.*:COMPUTETRINUC' { + memory = { 12.GB * task.attempt } + } + + withName: 'BBGTOOLS:DEEPCSA:DNDS:PREPROCESSDEPTHS' { + memory = { 40.GB * task.attempt } + } + + withName: 'BBGTOOLS:DEEPCSA:DNDS:DNDSRUN' { + memory = { 5.GB * task.attempt } + } + + withName: 'RELATIVEMUTABILITY.*' { + memory = { 50.GB * task.attempt } + } + + withName: 'BBGTOOLS:DEEPCSA:ONCODRIVEFMLALL:ONCODRIVEFMLSNVS' { + memory = { 64.GB * task.attempt } + time = { 32.h * task.attempt } + } + + withName: 'BBGTOOLS:DEEPCSA:PLOTTINGQC:PLOTMUTATIONSPECIFIC' { + memory = { 32.GB * task.attempt } + } + + withName: 'BBGTOOLS:DEEPCSA:ONCODRIVE3D:ONCODRIVE3D_PREPROCESSING' { + memory = { 8.GB * task.attempt } + } + + withName: 'BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:MERGEBATCH' { + memory = { 4.GB * task.attempt } + } + + withName: 'BBGTOOLS:DEEPCSA:MUT_PREPROCESSING:FILTERBATCH ' { + cpus = { 1* task.attempt } + memory = { 8.GB * task.attempt } + time = { 1.h * task.attempt } + } + + + + + + } \ No newline at end of file diff --git a/conf/modules.config b/conf/modules.config index 5670d8bd..04ae8fa4 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -241,6 +241,10 @@ process { ext.withingene = params.plot_depths } + withName: PLOTMUTATIONSPECIFIC { + ext.when = params.plot_mutation_specific_qc + } + withName: '.*PLOTDEPTHSALLCONS:DEPTHSSUMMARY' { ext.prefix = { ".all_cons" } } @@ -719,6 +723,10 @@ process { withLabel : bbgregressions { container = "docker.io/rblancomi/bbgregressions:dev" } + + withName: SITESFROMPOSITIONS { + ext.chunk_size = params.panel_sites_chunk_size ?: 0 + } } includeConfig 'tools/panels.config' diff --git a/modules/local/annotatedepth/main.nf b/modules/local/annotatedepth/main.nf index 65151da3..9cb82455 100644 --- a/modules/local/annotatedepth/main.nf +++ b/modules/local/annotatedepth/main.nf @@ -1,7 +1,5 @@ process ANNOTATE_DEPTHS { tag "${meta.id}" - label 'process_low' - label 'time_low' label 'deepcsa_core' diff --git a/modules/local/bbgtools/omega/preprocess/main.nf b/modules/local/bbgtools/omega/preprocess/main.nf index 82972a56..03ab46c3 100644 --- a/modules/local/bbgtools/omega/preprocess/main.nf +++ b/modules/local/bbgtools/omega/preprocess/main.nf @@ -1,9 +1,5 @@ process OMEGA_PREPROCESS { tag "$meta.id" - label 'cpu_single_fixed' - label 'time_low' - label 'process_high_memory' - container 'docker.io/bbglab/omega:0.2.1' diff --git a/modules/local/combine_sbs/main.nf b/modules/local/combine_sbs/main.nf index 89e63a4c..0e1b8e3f 100644 --- a/modules/local/combine_sbs/main.nf +++ b/modules/local/combine_sbs/main.nf @@ -1,7 +1,6 @@ process SIGNATURES_PROBABILITIES { tag "${meta.id}" - label 'process_low' label 'deepcsa_core' diff --git a/modules/local/computedepths/main.nf b/modules/local/computedepths/main.nf index 1f4135dd..6279a636 100644 --- a/modules/local/computedepths/main.nf +++ b/modules/local/computedepths/main.nf @@ -1,6 +1,5 @@ process COMPUTEDEPTHS { tag "$meta.id" - label 'process_high' conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? diff --git a/modules/local/computemutdensity/main.nf b/modules/local/computemutdensity/main.nf index 78d1fc0d..2e13ee83 100644 --- a/modules/local/computemutdensity/main.nf +++ b/modules/local/computemutdensity/main.nf @@ -1,6 +1,5 @@ process MUTATION_DENSITY { tag "$meta.id" - label 'process_single' label 'deepcsa_core' diff --git a/modules/local/createpanels/captured/main.nf b/modules/local/createpanels/captured/main.nf index a8779227..8b0f886c 100644 --- a/modules/local/createpanels/captured/main.nf +++ b/modules/local/createpanels/captured/main.nf @@ -1,11 +1,11 @@ process CREATECAPTUREDPANELS { tag "$meta.id" - label 'process_single' - label 'process_medium_high_memory' - - container "community.wave.seqera.io/library/bedtools_pybedtools_pandas_pip_pruned:78080da05d53636d" - + conda "python=3.10.17 bioconda::pybedtools=0.12.0 conda-forge::polars=1.30.0 conda-forge::click=8.2.1 conda-forge::gcc_linux-64=15.1.0 conda-forge::gxx_linux-64=15.1.0" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'docker://bbglab/deepcsa_bed:latest' : + 'bbglab/deepcsa_bed:latest' }" + input: tuple val(meta), path(compact_captured_panel_annotation) @@ -36,7 +36,8 @@ process CREATECAPTUREDPANELS { bedtools merge \\ -i <( tail -n +2 \$captured_panel | \\ - awk -F'\\t' '{print \$1, \$2-1, \$2}' OFS='\\t' | uniq + awk -F'\\t' '{print \$1, \$2-1, \$2}' OFS='\\t' | \\ + sort -k1,1 -k2,2n | uniq ) > \${captured_panel%.tsv}.bed; done diff --git a/modules/local/createpanels/consensus/main.nf b/modules/local/createpanels/consensus/main.nf index 42d9701b..b93f1d0e 100644 --- a/modules/local/createpanels/consensus/main.nf +++ b/modules/local/createpanels/consensus/main.nf @@ -1,6 +1,5 @@ process CREATECONSENSUSPANELS { tag "$meta.id" - label 'process_single' conda "python=3.10.17 bioconda::pybedtools=0.12.0 conda-forge::polars=1.30.0 conda-forge::click=8.2.1 conda-forge::gcc_linux-64=15.1.0 conda-forge::gxx_linux-64=15.1.0" container 'docker://bbglab/deepcsa_bed:latest' diff --git a/modules/local/dna2protein/main.nf b/modules/local/dna2protein/main.nf index 12b20423..9e67d616 100644 --- a/modules/local/dna2protein/main.nf +++ b/modules/local/dna2protein/main.nf @@ -1,7 +1,5 @@ process DNA_2_PROTEIN_MAPPING { tag "$meta.id" - label 'process_single' - label 'process_medium_high_memory' label 'deepcsa_core' diff --git a/modules/local/filterbed/main.nf b/modules/local/filterbed/main.nf index d9049f4c..fed28bd6 100644 --- a/modules/local/filterbed/main.nf +++ b/modules/local/filterbed/main.nf @@ -1,7 +1,6 @@ process FILTERBED { tag "$meta.id" - label 'process_high' label 'deepcsa_core' diff --git a/modules/local/filtermaf/main.nf b/modules/local/filtermaf/main.nf index 7c0f8a98..cd97c876 100644 --- a/modules/local/filtermaf/main.nf +++ b/modules/local/filtermaf/main.nf @@ -1,9 +1,6 @@ process FILTER_BATCH { tag "$meta.id" - label 'process_high_memory' - label 'time_low' - label 'deepcsa_core' input: diff --git a/modules/local/group_genes/main.nf b/modules/local/group_genes/main.nf index 7f174f9e..cf1aee15 100644 --- a/modules/local/group_genes/main.nf +++ b/modules/local/group_genes/main.nf @@ -1,6 +1,5 @@ process GROUP_GENES { tag "groups" - label 'process_low' label 'deepcsa_core' diff --git a/modules/local/mergemafs/main.nf b/modules/local/mergemafs/main.nf index df0e1731..ad189f92 100644 --- a/modules/local/mergemafs/main.nf +++ b/modules/local/mergemafs/main.nf @@ -1,9 +1,6 @@ process MERGE_BATCH { tag "$meta.id" - label 'process_high_memory' - label 'time_low' - label 'deepcsa_core' input: diff --git a/modules/local/mutations2sbs/main.nf b/modules/local/mutations2sbs/main.nf index 5617bdd6..0ddf149d 100644 --- a/modules/local/mutations2sbs/main.nf +++ b/modules/local/mutations2sbs/main.nf @@ -1,7 +1,6 @@ process MUTATIONS_2_SIGNATURES { tag "${meta.id}" - label 'process_low' label 'deepcsa_core' diff --git a/modules/local/plot/depths_summary/main.nf b/modules/local/plot/depths_summary/main.nf index 085ea8fa..f9c475c4 100644 --- a/modules/local/plot/depths_summary/main.nf +++ b/modules/local/plot/depths_summary/main.nf @@ -1,9 +1,6 @@ process PLOT_DEPTHS { tag "$meta.id" - label 'process_single' - label 'time_low' - label 'process_high_memory' label 'deepcsa_core' diff --git a/modules/local/plot/mutations_summary/main.nf b/modules/local/plot/mutations_summary/main.nf index deeb12b7..330dd9a1 100644 --- a/modules/local/plot/mutations_summary/main.nf +++ b/modules/local/plot/mutations_summary/main.nf @@ -1,7 +1,6 @@ process PLOT_MUTATIONS { tag "$meta.id" - label 'process_low' label 'deepcsa_core' diff --git a/modules/local/plot/needles/main.nf b/modules/local/plot/needles/main.nf index a08092b6..bd0fbe90 100644 --- a/modules/local/plot/needles/main.nf +++ b/modules/local/plot/needles/main.nf @@ -1,7 +1,6 @@ process PLOT_NEEDLES { tag "$meta.id" - label 'process_low' label 'deepcsa_core' diff --git a/modules/local/plot/qc/mutation_specific/main.nf b/modules/local/plot/qc/mutation_specific/main.nf index 90c71d05..d2cf97a1 100644 --- a/modules/local/plot/qc/mutation_specific/main.nf +++ b/modules/local/plot/qc/mutation_specific/main.nf @@ -13,6 +13,9 @@ process PLOT_MUTATION_SPECIFIC { path("**.tsv") , optional : true, emit: tables path "versions.yml" , topic: versions + when: + task.ext.when == null || task.ext.when + script: def prefix = task.ext.prefix ?: "" prefix = "${meta.id}${prefix}" diff --git a/modules/local/process_annotation/domain/main.nf b/modules/local/process_annotation/domain/main.nf index 92e34593..0645dcfc 100644 --- a/modules/local/process_annotation/domain/main.nf +++ b/modules/local/process_annotation/domain/main.nf @@ -2,10 +2,6 @@ process DOMAIN_ANNOTATION { tag "${meta.id}" - label 'cpu_low' - label 'time_low' - label 'process_high_memory' - label 'deepcsa_core' input: diff --git a/modules/local/process_annotation/mutations/main.nf b/modules/local/process_annotation/mutations/main.nf index 82a1d394..d5f063d5 100644 --- a/modules/local/process_annotation/mutations/main.nf +++ b/modules/local/process_annotation/mutations/main.nf @@ -1,10 +1,6 @@ process SUMMARIZE_ANNOTATION { tag "$meta.id" - label 'cpu_low' - label 'process_high_memory' - label 'time_low' - label 'deepcsa_core' input: diff --git a/modules/local/process_annotation/mutations_custom/main.nf b/modules/local/process_annotation/mutations_custom/main.nf index 1959dbb6..1eb8127e 100644 --- a/modules/local/process_annotation/mutations_custom/main.nf +++ b/modules/local/process_annotation/mutations_custom/main.nf @@ -1,10 +1,6 @@ process CUSTOM_MUTATION_PROCESSING { tag "$meta.id" - label 'cpu_low' - label 'process_high_memory' - label 'time_low' - label 'deepcsa_core' input: diff --git a/modules/local/process_annotation/panel/main.nf b/modules/local/process_annotation/panel/main.nf index 93088f7e..29f97a06 100644 --- a/modules/local/process_annotation/panel/main.nf +++ b/modules/local/process_annotation/panel/main.nf @@ -2,10 +2,6 @@ process POSTPROCESS_VEP_ANNOTATION { tag "${meta.id}" - label 'cpu_low' - label 'time_low' - label 'process_high_memory' - label 'deepcsa_core' diff --git a/modules/local/process_annotation/panelcustom/main.nf b/modules/local/process_annotation/panelcustom/main.nf index e680ef8e..f1f81bcb 100644 --- a/modules/local/process_annotation/panelcustom/main.nf +++ b/modules/local/process_annotation/panelcustom/main.nf @@ -2,10 +2,6 @@ process CUSTOM_ANNOTATION_PROCESSING { tag "${meta.id}" - label 'cpu_low' - label 'time_low' - label 'process_high_memory' - label 'deepcsa_core' input: diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf index 6fdb517e..7cc15291 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/samplesheet_check.nf @@ -1,6 +1,5 @@ process SAMPLESHEET_CHECK { tag "$samplesheet" - label 'process_single' conda "conda-forge::python=3.8.3" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? diff --git a/modules/local/select_mutdensity/main.nf b/modules/local/select_mutdensity/main.nf index 1c155684..10abbd8d 100644 --- a/modules/local/select_mutdensity/main.nf +++ b/modules/local/select_mutdensity/main.nf @@ -1,6 +1,5 @@ process SELECT_MUTDENSITIES { tag "$meta.id" - label 'process_single' label 'deepcsa_core' diff --git a/modules/local/sig_matrix_concat/main.nf b/modules/local/sig_matrix_concat/main.nf index ba1ba8fa..df774987 100644 --- a/modules/local/sig_matrix_concat/main.nf +++ b/modules/local/sig_matrix_concat/main.nf @@ -1,6 +1,5 @@ process MATRIX_CONCAT { tag "$meta.id" - label 'process_low' label 'deepcsa_core' diff --git a/modules/local/sitesfrompositions/main.nf b/modules/local/sitesfrompositions/main.nf index 6f7b58be..693425b0 100644 --- a/modules/local/sitesfrompositions/main.nf +++ b/modules/local/sitesfrompositions/main.nf @@ -2,23 +2,19 @@ process SITESFROMPOSITIONS { tag "${meta.id}" - label 'cpu_single' - label 'time_low' - label 'process_low_memory' - label 'deepcsa_core' - input: tuple val(meta), path(depths) output: - tuple val(meta), path("*.sites4VEP.tsv") , emit: annotated_panel_reg - path "versions.yml" , topic: versions + tuple val(meta), path("*.sites4VEP.chunk*.tsv") , emit: annotated_panel_reg + path "versions.yml" , topic: versions script: def assembly = task.ext.assembly ?: "hg38" + def chunk_size = task.ext.chunk_size ?: 0 // TODO // see if there is a better way to filter out chromosomes @@ -30,11 +26,11 @@ process SITESFROMPOSITIONS { sites_table_from_positions.py \\ --input-positions captured_positions.tsv \\ --genome-assembly ${assembly} \\ - --output-file-with-sites captured_positions.sites4VEP.tmp.tsv; + --output-prefix captured_positions.sites4VEP \\ + --chunk-size ${chunk_size}; rm captured_positions.tsv - awk '{print "chr"\$0}' captured_positions.sites4VEP.tmp.tsv > captured_positions.sites4VEP.tsv cat <<-END_VERSIONS > versions.yml "${task.process}": python: \$(python --version | sed 's/Python //g') diff --git a/modules/local/sortpanel/main.nf b/modules/local/sortpanel/main.nf new file mode 100644 index 00000000..e7dc683f --- /dev/null +++ b/modules/local/sortpanel/main.nf @@ -0,0 +1,37 @@ +process SORT_MERGED_PANEL { + + tag "${meta.id}" + + container "docker.io/bbglab/deepcsa-core:0.0.2-alpha" + + input: + tuple val(meta), path(panel) + + output: + tuple val(meta), path("*.sorted.tsv") , emit: sorted + path "versions.yml" , topic: versions + + script: + // Sort by chromosome (field 1) and position (field 2). Assumes header in first line. + // Using version sort for chromosome (handles chr1 chr2 chr10) after stripping 'chr' if present. + """ + echo "[SORT_MERGED_PANEL] Sorting panel for ${meta.id}" + head -n 1 ${panel} > sorted.tmp + tail -n +2 ${panel} | awk 'BEGIN{OFS="\\t"} {sub(/^chr/,"",\$1); print}' | sort -k1,1V -k2,2n | awk 'BEGIN{OFS="\\t"} {print "chr"\$0}' >> sorted.tmp + mv sorted.tmp ${panel.getBaseName()}.sorted.tsv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bash: \$(bash --version | head -n 1 | sed 's/^.*version //; s/ .*//') + END_VERSIONS + """ + + stub: + """ + touch ${panel.getBaseName()}.sorted.tsv + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bash: \$(bash --version | head -n 1 | sed 's/^.*version //; s/ .*//') + END_VERSIONS + """ +} diff --git a/modules/local/subsetmaf/main.nf b/modules/local/subsetmaf/main.nf index 380bfa40..ed9467ef 100644 --- a/modules/local/subsetmaf/main.nf +++ b/modules/local/subsetmaf/main.nf @@ -1,7 +1,6 @@ process SUBSET_MAF { tag "$meta.id" - label 'process_low' label 'deepcsa_core' diff --git a/modules/local/table2groups/main.nf b/modules/local/table2groups/main.nf index b85aafb5..8a8159a4 100644 --- a/modules/local/table2groups/main.nf +++ b/modules/local/table2groups/main.nf @@ -1,7 +1,5 @@ process TABLE_2_GROUP { - tag "groups" - label 'process_low' label 'deepcsa_core' diff --git a/modules/local/vcf2maf/main.nf b/modules/local/vcf2maf/main.nf index 287696c9..a05f01ae 100644 --- a/modules/local/vcf2maf/main.nf +++ b/modules/local/vcf2maf/main.nf @@ -1,9 +1,6 @@ process VCF2MAF { tag "$meta.id" - label 'cpu_low' - label 'process_high_memory' - label 'deepcsa_core' input: diff --git a/modules/local/writemaf/main.nf b/modules/local/writemaf/main.nf index 3aef4415..f7f2404d 100644 --- a/modules/local/writemaf/main.nf +++ b/modules/local/writemaf/main.nf @@ -1,8 +1,7 @@ process WRITE_MAFS { tag "${meta.id}" - label 'process_high_memory' - + label 'deepcsa_core' input: diff --git a/modules/nf-core/ensemblvep/vep/main.nf b/modules/nf-core/ensemblvep/vep/main.nf index ef7a2a1a..e7da9e22 100644 --- a/modules/nf-core/ensemblvep/vep/main.nf +++ b/modules/nf-core/ensemblvep/vep/main.nf @@ -1,6 +1,5 @@ process ENSEMBLVEP_VEP { tag "$meta.id" - label 'process_high' conda params.vep_cache_version == 108 ? 'bioconda::ensembl-vep=108.2' : params.vep_cache_version == 102 ? 'bioconda::ensembl-vep=102.0' : diff --git a/modules/nf-core/ensemblvep/veppanel/main.nf b/modules/nf-core/ensemblvep/veppanel/main.nf index 6ee8b5d1..eea60f95 100644 --- a/modules/nf-core/ensemblvep/veppanel/main.nf +++ b/modules/nf-core/ensemblvep/veppanel/main.nf @@ -43,10 +43,18 @@ process ENSEMBLVEP_VEP { def reference = fasta ? "--fasta $fasta" : "" """ + + # Convert input TSV to VEP format, to make vep --fork more efficient + awk 'BEGIN { OFS="\t" } + { + split(\$4, a, "/"); + print \$1, \$2, ".", a[1], a[2]; + }' ${vcf} > ${vcf}.vep + # this is to ensure that we will be able to match the tab and vcf files afterwards # the structure of the ID is the following: vep \\ - -i ${vcf} \\ + -i ${vcf}.vep \\ -o ${prefix}.${file_extension}.gz \\ $args \\ $compress_cmd \\ @@ -79,4 +87,4 @@ process ENSEMBLVEP_VEP { ensemblvep: \$( echo \$(vep --help 2>&1) | sed 's/^.*Versions:.*ensembl-vep : //;s/ .*\$//') END_VERSIONS """ -} \ No newline at end of file +} diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 783d1027..ee0f3097 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -1,5 +1,4 @@ process MULTIQC { - label 'process_single' conda "bioconda::multiqc=1.20" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? diff --git a/modules/nf-core/tabix/bgziptabixquery/main.nf b/modules/nf-core/tabix/bgziptabixquery/main.nf index 5b58af7b..7942d322 100644 --- a/modules/nf-core/tabix/bgziptabixquery/main.nf +++ b/modules/nf-core/tabix/bgziptabixquery/main.nf @@ -3,8 +3,6 @@ process TABIX_BGZIPTABIX_QUERY { // cache false tag "$meta.id" - label 'process_high' - label 'process_high_memory' conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? diff --git a/nextflow.config b/nextflow.config index 9c503dac..c485f68b 100644 --- a/nextflow.config +++ b/nextflow.config @@ -81,6 +81,7 @@ params { confidence_level = 'med' pileup_all_duplex = false plot_depths = false + plot_mutation_specific_qc = true store_depths = false use_custom_depths = false @@ -107,6 +108,7 @@ params { min_muts_per_sample = 0 selected_genes = '' panel_with_canonical = true + panel_sites_chunk_size = 1000000 // 0 means no chunking (default), set to positive integer to enable chunking germline_threshold = 0.3 mutation_depth_threshold = 100 @@ -183,9 +185,9 @@ params { // Max resource options // Defaults only, expecting to be overwritten - max_memory = 256.GB - max_cpus = 56 - max_time = 240.h + max_memory = 950.GB + max_cpus = 196 + max_time = 30.d validate_params = true } @@ -323,6 +325,10 @@ profiles { mice { includeConfig 'conf/mice.config' } + + exome { + includeConfig 'conf/exome.config' + } } diff --git a/nextflow_schema.json b/nextflow_schema.json index a172e69d..68661011 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -310,6 +310,13 @@ "description": "Do you want to plot the depths within each gene?", "fa_icon": "fas fa-book" }, + "plot_mutation_specific_qc": { + "type": "boolean", + "description": "Do you want to generate mutation-specific QC plots (VAF vs depth)?", + "fa_icon": "fas fa-book", + "hidden": true, + "default": true + }, "oncodrivefml": { "type": "boolean", "description": "Do you want to run oncodrivefml?", @@ -527,6 +534,21 @@ } } }, + "parallel_processing_parameters": { + "title": "Parallel processing and chunking options", + "type": "object", + "fa_icon": "fas fa-tasks", + "description": "Parameters to control parallel processing, chunking, and memory management during panel creation and annotation.", + "properties": { + "panel_sites_chunk_size": { + "type": "integer", + "description": "Number of sites per chunk for parallel VEP annotation (0 = no chunking)", + "default": 1000000, + "fa_icon": "fas fa-cut", + "help_text": "When set to a positive integer, splits the sites file into chunks for parallel processing through VEP annotation. Set to 0 to disable chunking (process as single file). Recommended values: 100000-500000 for large datasets." + } + } + }, "filtering_parameters": { "title": "Profile computation options", "type": "object", @@ -1080,6 +1102,9 @@ { "$ref": "#/$defs/profile_computation_config" }, + { + "$ref": "#/$defs/parallel_processing_parameters" + }, { "$ref": "#/$defs/filtering_parameters" }, diff --git a/subworkflows/local/createpanels/main.nf b/subworkflows/local/createpanels/main.nf index c71c4d5a..0d059296 100644 --- a/subworkflows/local/createpanels/main.nf +++ b/subworkflows/local/createpanels/main.nf @@ -1,7 +1,9 @@ include { SITESFROMPOSITIONS } from '../../../modules/local/sitesfrompositions/main' include { VCF_ANNOTATE_ENSEMBLVEP as VCFANNOTATEPANEL } from '../../../subworkflows/nf-core/vcf_annotate_ensemblvep_panel/main' -include { POSTPROCESS_VEP_ANNOTATION as POSTPROCESSVEPPANEL } from '../../../modules/local/process_annotation/panel/main' +include { POSTPROCESS_VEP_ANNOTATION as POSTPROCESSVEPPANEL } from '../../../modules/local/process_annotation/panel/main' +include { SORT_MERGED_PANEL as SORTPANELCOMPACT } from '../../../modules/local/sortpanel/main' +include { SORT_MERGED_PANEL as SORTPANELRICH } from '../../../modules/local/sortpanel/main' include { CUSTOM_ANNOTATION_PROCESSING as CUSTOMPROCESSING } from '../../../modules/local/process_annotation/panelcustom/main' include { CUSTOM_ANNOTATION_PROCESSING as CUSTOMPROCESSINGRICH } from '../../../modules/local/process_annotation/panelcustom/main' @@ -38,10 +40,16 @@ workflow CREATE_PANELS { // Create all possible sites and mutations per site of the captured panel SITESFROMPOSITIONS(depths) - // Create a tuple for VEP annotation (mandatory) - SITESFROMPOSITIONS.out.annotated_panel_reg.map{ it -> [[ id : "captured_panel"], it[1]] }.set{ sites_annotation } + // Flatten chunks and create tuples for VEP annotation + SITESFROMPOSITIONS.out.annotated_panel_reg + .transpose() + .map{ _meta, chunk -> + def chunk_id = chunk.name.tokenize('.').find{ token -> token.startsWith('chunk') } + [[ id : "captured_panel_${chunk_id}"], chunk] + } + .set{ sites_annotation } - // Annotate all possible mutations in the captured panel + // Annotate all possible mutations in the captured panel (per chunk) VCFANNOTATEPANEL(sites_annotation, params.fasta, params.vep_genome, @@ -50,24 +58,44 @@ workflow CREATE_PANELS { params.vep_cache, []) - // Postprocess annotations to get one annotation per mutation + // Postprocess annotations to get one annotation per mutation (per chunk) POSTPROCESSVEPPANEL(VCFANNOTATEPANEL.out.tab) + // Collect and merge all chunks using collectFile + POSTPROCESSVEPPANEL.out.compact_panel_annotation + .map{ it -> it[1] } + .collectFile(name: 'captured_panel.vep.annotation.tsv', keepHeader: true, skip: 1) + .map{ file -> [[ id : "captured_panel"], file] } + .set{ merged_compact_unsorted } + + POSTPROCESSVEPPANEL.out.rich_panel_annotation + .map{ it -> it[1] } + .collectFile(name: 'captured_panel.vep.annotation.rich.tsv', keepHeader: true, skip: 1) + .map{ file -> [[ id : "captured_panel"], file] } + .set{ merged_rich_unsorted } + + // Sort merged panels to ensure genomic order + SORTPANELCOMPACT(merged_compact_unsorted) + SORTPANELRICH(merged_rich_unsorted) + + merged_compact = SORTPANELCOMPACT.out.sorted + merged_rich = SORTPANELRICH.out.sorted + if (params.customize_annotation) { custom_annotation_tsv = file(params.custom_annotation_tsv, checkIfExists: true) // Update specific regions based on user preferences - CUSTOMPROCESSING(POSTPROCESSVEPPANEL.out.compact_panel_annotation, custom_annotation_tsv) + CUSTOMPROCESSING(merged_compact, custom_annotation_tsv) complete_annotated_panel = CUSTOMPROCESSING.out.custom_panel_annotation - CUSTOMPROCESSINGRICH(POSTPROCESSVEPPANEL.out.rich_panel_annotation, custom_annotation_tsv) + CUSTOMPROCESSINGRICH(merged_rich, custom_annotation_tsv) rich_annotated = CUSTOMPROCESSINGRICH.out.custom_panel_annotation added_regions = CUSTOMPROCESSINGRICH.out.added_regions } else { - complete_annotated_panel = POSTPROCESSVEPPANEL.out.compact_panel_annotation - rich_annotated = POSTPROCESSVEPPANEL.out.rich_panel_annotation + complete_annotated_panel = merged_compact + rich_annotated = merged_rich added_regions = channel.empty() } @@ -147,6 +175,6 @@ workflow CREATE_PANELS { domains_panel_bed = DOMAINANNOTATION.out.domains_bed.first() domains_in_panel = DOMAINANNOTATION.out.domains_tsv.first() - postprocessed_panel = POSTPROCESSVEPPANEL.out.compact_panel_annotation.first() - postprocessed_panel_rich = POSTPROCESSVEPPANEL.out.rich_panel_annotation.first() + postprocessed_panel = merged_compact.first() + postprocessed_panel_rich = merged_rich.first() } diff --git a/tests/deepcsa.nf.test b/tests/deepcsa.nf.test index 5b54a022..6bf7c50b 100644 --- a/tests/deepcsa.nf.test +++ b/tests/deepcsa.nf.test @@ -1,132 +1,141 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - TEST SUITE: deepCSA Pipeline -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Description: Comprehensive test suite for the deepCSA pipeline - - Purpose: Validates pipeline functionality across different input configurations - and parameter combinations to ensure robust variant calling performance. - - Test Categories: - 1. BASIC FUNCTIONALITY - - Normal run: Standard single-file processing - - 2. OMEGA ANALYSIS - - Run with omega analysis enabled - - 3. MAF INPUT VALIDATION - - Validate that pipeline fails when --input_maf is provided without --use_custom_depths - - - Test Data: Located in tests/test_data/input/ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - nextflow_pipeline { name "Test DEEPCSA Pipeline" script "main.nf" config "./nextflow.config" - /* - ======================================================================================== - TEST 1: BASIC FUNCTIONALITY - Standard Processing - ======================================================================================== - Purpose: Validates core pipeline functionality with default parameters - - Input: MAF file and depth table for all samples. - Parameters: - - plot_depths = true (enables depth plotting) - - profileall = true (enables mutational profile generation) - - signatures = false (disables signature analysis, should not affect other outputs) - - Expected Behavior: - - Processes each VCF and BAM file correctly - - Generates mutational profiles and depth plots - - Does not generate outputs for features that are disabled (e.g. mutdensity, omega, oncodrivefml, oncodrive3d) - - Success Criteria: - - Pipeline completes successfully without errors - - Mutational profile output matches expected snapshot - ======================================================================================== - */ - - - test("TEST 1. Basic functionality - MAF-based processing") { + + test("Minimal features test run") { tag "normal" when { params { - // Input: Sample name metadata for the pipeline input = "${projectDir}/tests/test_data/input.csv" - outdir = "$outputDir" // nf-test built-in: unique temp dir per test run + outdir = "${projectDir}/tests_results_normal" wgs_trinuc_counts = "${projectDir}/assets/trinucleotide_counts/trinuc_counts.homo_sapiens.tsv" - // Test data fetched directly from the DeepClone_protocol repository + plot_depths = true + plot_mutation_specific_qc = false + profileall = true + signatures = false + cosmic_ref_signatures = null + indel_ref_signatures = null + } + } + + then { + assert workflow.success : "Pipeline should complete without errors" + assert path("${params.outdir}/mutational_profile").exists() + assert !path("${params.outdir}/mutdensity").exists() + assert !path("${params.outdir}/selection/omega").exists() + assert !path("${params.outdir}/oncodrivefml").exists() + assert !path("${params.outdir}/oncodrive3d").exists() + } + } + + test("MAF-based minimal features test run") { + tag "normal_maf" + + when { + params { + input = "${projectDir}/tests/test_data/input_maf.csv" + outdir = "$outputDir" + wgs_trinuc_counts = "${projectDir}/assets/trinucleotide_counts/trinuc_counts.homo_sapiens.tsv" input_maf = 'https://raw.githubusercontent.com/bbglab/DeepClone_protocol/main/test_datasets/deepCSA/testdata/maf/all_samples.somatic.mutations.maf' use_custom_depths = true custom_depths_table = 'https://raw.githubusercontent.com/bbglab/DeepClone_protocol/main/test_datasets/deepCSA/testdata/depth/all_samples_indv.depths.tsv.gz' plot_depths = true + plot_mutation_specific_qc = false profileall = true signatures = false + cosmic_ref_signatures = null + indel_ref_signatures = null } } then { assert workflow.success : "Pipeline should complete without errors" - // Check output directory structure - assert path("${outputDir}/mutational_profile").exists() - // Check that directories that should not exist in minimal features run, in fact do not exist. - assert !path("${outputDir}/mutdensity").exists() - assert !path("${outputDir}/omega").exists() - assert !path("${outputDir}/oncodrivefml").exists() - assert !path("${outputDir}/oncodrive3d").exists() - - // Snapshot of stable output + assert path("${params.outdir}/mutational_profile").exists() + assert !path("${params.outdir}/mutdensity").exists() + assert !path("${params.outdir}/selection/omega").exists() + assert !path("${params.outdir}/oncodrivefml").exists() + assert !path("${params.outdir}/oncodrive3d").exists() + assert snapshot( - path("${outputDir}/mutational_profile/all_samples.all.profile.tsv") + path("${params.outdir}/mutational_profile/all_samples.all.profile.tsv") ).match() } } - /* - ======================================================================================== - TEST 2: OMEGA ANALYSIS - Enabling Omega for driver gene analysis - ======================================================================================== - Purpose: Validates correct execution of omega analysis and output generation when enabled - - Input: Same VCF and BAM files as Test 1, but with omega analysis enabled - Parameters: - - omega = true (enables omega analysis) - - omega_plot = true (enables omega plot generation) - - plot_depths = true (enables depth plotting, should work with omega enabled) - - profileall = true (enables mutational profile generation, should work with omega enabled - - Expected Behavior: - - Executes omega analysis and generates expected output files in the omega directory - - Generates mutational profiles and depth plots as in Test 1 - - Does not generate outputs for features that are disabled (e.g. mutdensity, oncodrivefml, oncodrive3d) - - Success Criteria: - - Omega output file (all_omegas.tsv) is generated with expected structure and content - - Mutational profile output is consistent with Test 1 (snapshot match) - - ======================================================================================== - */ - test("TEST 2. Omega analysis test run") { + test("Omega analysis test run") { tag "omega" when { params { - // Input: Sample name metadata for the pipeline input = "${projectDir}/tests/test_data/input.csv" - outdir = "$outputDir" + outdir = "${projectDir}/tests_results_omega" wgs_trinuc_counts = "${projectDir}/assets/trinucleotide_counts/trinuc_counts.homo_sapiens.tsv" - // Test data fetched directly from the DeepClone_protocol repository + plot_depths = true + plot_mutation_specific_qc = false + profileall = true + signatures = false + cosmic_ref_signatures = null + indel_ref_signatures = null + omega = true + omega_plot = true + } + } + + then { + assert workflow.success : "Pipeline should complete without errors" + assert path("${params.outdir}/mutational_profile").exists() + assert path("${params.outdir}/selection/omega").exists() : "Omega directory should exist" + assert path("${params.outdir}/selection/omega/all_omegas.tsv").exists() : "Omega results file should exist" + assert !path("${params.outdir}/oncodrivefml").exists() + assert !path("${params.outdir}/oncodrive3d").exists() + + // Validate omega output structure + def omegaFile = path("${params.outdir}/selection/omega/all_omegas.tsv") + def lines = omegaFile.readLines() + + // Filter out empty lines and the header (collectFile keepHeader is non-deterministic) + def expectedHeader = "gene\tsample\timpact\tmutations\tdnds\tpvalue\tlower\tupper" + def dataLines = lines.findAll { it && it != expectedHeader } + assert dataLines.size() == 38 : "Omega output should contain 38 data rows, found ${dataLines.size()}" + + // Sort by key columns (gene, sample, impact) to avoid floating-point differences affecting order + // Round numeric columns (dnds, pvalue, lower, upper) to 2 decimals for deterministic comparison + def sortedRounded = dataLines.sort { line -> + def cols = line.split('\t') + "${cols[0]}\t${cols[1]}\t${cols[2]}" + }.collect { line -> + def cols = line.split('\t') + (4..7).each { i -> cols[i] = String.format("%.2f", cols[i] as Double) } + cols.join('\t') + } + def sortedContent = [expectedHeader] + sortedRounded + + // Snapshot both files + assert snapshot(path("${params.outdir}/mutational_profile/all_samples.all.profile.tsv")).match("mutational_profile") + assert snapshot(sortedContent.join('\n')).match("omega_results") + } + } + + test("MAF-based omega analysis test run") { + tag "omega_maf" + + when { + params { + input = "${projectDir}/tests/test_data/input_maf.csv" + outdir = "$outputDir" + wgs_trinuc_counts = "${projectDir}/assets/trinucleotide_counts/trinuc_counts.homo_sapiens.tsv" input_maf = 'https://raw.githubusercontent.com/bbglab/DeepClone_protocol/main/test_datasets/deepCSA/testdata/maf/all_samples.somatic.mutations.maf' use_custom_depths = true custom_depths_table = 'https://raw.githubusercontent.com/bbglab/DeepClone_protocol/main/test_datasets/deepCSA/testdata/depth/all_samples_indv.depths.tsv.gz' plot_depths = true + plot_mutation_specific_qc = false profileall = true signatures = false + cosmic_ref_signatures = null + indel_ref_signatures = null omega = true omega_plot = true } @@ -134,16 +143,14 @@ nextflow_pipeline { then { assert workflow.success : "Pipeline should complete without errors" - // Validate that all folders are created - assert path("${outputDir}/mutational_profile").exists() - assert path("${outputDir}/selection/omega").exists() : "Omega directory should exist" - assert path("${outputDir}/selection/omega/all_omegas.tsv").exists() : "Omega results file should exist" - assert !path("${outputDir}/selection/oncodrivefml").exists() - assert !path("${outputDir}/selection/oncodrive3d").exists() - + assert path("${params.outdir}/mutational_profile").exists() + assert path("${params.outdir}/selection/omega").exists() : "Omega directory should exist" + assert path("${params.outdir}/selection/omega/all_omegas.tsv").exists() : "Omega results file should exist" + assert !path("${params.outdir}/selection/oncodrivefml").exists() + assert !path("${params.outdir}/selection/oncodrive3d").exists() + // Validate omega output structure - def omegaFile = path("${outputDir}/selection/omega/all_omegas.tsv") - + def omegaFile = path("${params.outdir}/selection/omega/all_omegas.tsv") def lines = omegaFile.readLines() def header = lines[0].split('\t') @@ -164,42 +171,82 @@ nextflow_pipeline { def expectedSamples = ["P19_0002_BDO_01", "P19_0002_BTR_01", "P19_0003_BDO_01"].toSet() assert expectedSamples.every { it in foundSamples } : "Missing samples in omega output: ${expectedSamples - foundSamples}" - // Only snapshot the profile file - omega has non-deterministic floating point values assert snapshot( - path("${outputDir}/mutational_profile/all_samples.all.profile.tsv") + path("${params.outdir}/mutational_profile/all_samples.all.profile.tsv") ).match() + } + } + + test("Mutation density test run") { + tag "mutdensity" + + when { + params { + input = "${projectDir}/tests/test_data/input.csv" + outdir = "${projectDir}/tests_results_mutdensity" + wgs_trinuc_counts = "${projectDir}/assets/trinucleotide_counts/trinuc_counts.homo_sapiens.tsv" + plot_depths = true + plot_mutation_specific_qc = false + profileall = true + mutationdensity = true + signatures = false + cosmic_ref_signatures = null + indel_ref_signatures = null + } + } + + then { + assert workflow.success : "Pipeline should complete without errors" + + // Mutation density outputs should exist + assert path("${params.outdir}/mutdensity").exists() : "Mutation density directory should exist" + assert path("${params.outdir}/mutdensity/all_mutdensities.tsv").exists() : "Consolidated mutdensities file should exist" + + // Mutational profile should also exist (profileall=true) + assert path("${params.outdir}/mutational_profile").exists() + + // Analyses not requested should NOT exist + assert !path("${params.outdir}/selection/omega").exists() + assert !path("${params.outdir}/oncodrivefml").exists() + assert !path("${params.outdir}/oncodrive3d").exists() + + // Validate all_mutdensities.tsv structure and content + def mutdensFile = path("${params.outdir}/mutdensity/all_mutdensities.tsv") + def lines = mutdensFile.readLines() + + // Check header contains expected columns + def header = lines.first() + def expectedColumns = ["SAMPLE_ID", "GENE", "REGIONS", "MUTTYPES", "DEPTH", + "N_MUTS", "N_MUTATED", "MUTDENSITY_MB", "MUTDENSITY_MB_ADJUSTED", + "MUTREADSDENSITY_MB", "MUTREADSDENSITY_MB_ADJUSTED"] + expectedColumns.each { col -> + assert header.contains(col) : "Header should contain column ${col}" + } + + // Filter out empty lines and duplicate headers from collectFile + def dataLines = lines.findAll { it && it != header } + assert dataLines.size() > 0 : "Mutation density file should contain data rows" + + // Verify all 4 region types are present (all, protein_affecting, non_protein_affecting, synonymous) + def allContent = lines.join('\n') + def expectedRegions = ["all", "protein_affecting", "non_protein_affecting", "synonymous"] + expectedRegions.each { region -> + assert allContent.contains(region) : "Mutation density should include REGIONS=${region}" + } - //TODO Include omega output snapshot when stable + // Sort data lines for deterministic snapshot comparison + def sortedContent = [header] + dataLines.sort() + assert snapshot(sortedContent.join('\n')).match("mutdensity_results") } } - /* - ======================================================================================== - TEST 3: MAF INPUT VALIDATION - Ensuring proper validation of MAF input parameters - ======================================================================================== - Purpose: Validates correct execution when --input_maf is provided without --use_custom_depths, - which should result in a pipeline failure due to missing depth information for MAF-based analysis - - Input: Samplesheet with --input_maf parameter set but --use_custom_depths set to false - Parameters: - - input_maf = path to MAF file (e.g. test_mutations.maf) - - use_custom_depths = false (should trigger validation failure) - - Expected Behavior: - - Pipeline should fail due to missing depth information for MAF-based analysis - - Success Criteria: - - Pipeline fails with an appropriate error message - - ======================================================================================== - */ - test("TEST 3. Should fail when --input_maf is provided without --use_custom_depths") { + test("MAF input validation - fails when --input_maf is provided without --use_custom_depths") { tag "input_maf_validation" when { params { input = "${projectDir}/tests/test_data/input.csv" - outdir = "$outputDir" + outdir = "${projectDir}/tests_results_maf_validation" input_maf = "${projectDir}/tests/test_data/test_mutations.maf" use_custom_depths = false wgs_trinuc_counts = "${projectDir}/assets/trinucleotide_counts/trinuc_counts.homo_sapiens.tsv" @@ -221,7 +268,7 @@ nextflow_pipeline { // when { // params { // input = "${projectDir}/tests/test_data/input.csv" - // outdir = "${params.outdir}/tests_results_maf_input" + // outdir = "${projectDir}/tests_results_maf_input" // input_maf = "${projectDir}/tests/test_data/test_mutations.maf" // use_custom_depths = true // custom_depths_table = "${projectDir}/tests/test_data/precomputed_depths.tsv" @@ -234,7 +281,7 @@ nextflow_pipeline { // then { // assert workflow.success : "Pipeline should complete with MAF input and precomputed depths" // assert path("${params.outdir}/input_vcfs").exists() : "Per-sample VCFs should be published" - // assert path("${params.outdir}/computeprofile").exists() + // assert path("${params.outdir}/mutational_profile").exists() // } // } diff --git a/tests/deepcsa.nf.test.snap b/tests/deepcsa.nf.test.snap index 89448046..dd6941a9 100644 --- a/tests/deepcsa.nf.test.snap +++ b/tests/deepcsa.nf.test.snap @@ -1,22 +1,53 @@ { - "TEST 2. Omega analysis test run": { + "MAF-based omega analysis test run": { "content": [ "all_samples.all.profile.tsv:md5,347c786848dbab840f61f36f1e051f05" ], + "meta": { + "nf-test": "0.9.5", + "nextflow": "25.04.6" + }, + "timestamp": "2026-04-10T07:31:01.791674344" + }, + "mutdensity_results": { + "content": [ + "SAMPLE_ID\tGENE\tREGIONS\tMUTTYPES\tDEPTH\tN_MUTS\tN_MUTATED\tMUTDENSITY_MB\tMUTDENSITY_MB_ADJUSTED\tMUTREADSDENSITY_MB\tMUTREADSDENSITY_MB_ADJUSTED\nB1\tALL_GENES\tall\tDELETION-INSERTION\t11814683\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB1\tALL_GENES\tall\tDELETION-INSERTION-SNV\t11814683\t11.0\t12.0\t0.9310448701839906\t0.9310448701839906\t1.0156853129279897\t1.0156853129279897\nB1\tALL_GENES\tall\tSNV\t11814683\t11.0\t12.0\t0.9310448701839906\t0.9310448701839906\t1.0156853129279897\t1.0156853129279897\nB1\tALL_GENES\tall\tall_types\t11814683\t11.0\t12.0\t0.9310448701839906\t0.9310448701839906\t1.0156853129279897\t1.0156853129279897\nB1\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION\t7986662\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB1\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION-SNV\t7986662\t7.0\t8.0\t0.8764612800691953\t0.9366011973509708\t1.0016700343647946\t1.0704013684011096\nB1\tALL_GENES\tnon_protein_affecting\tSNV\t7986662\t7.0\t8.0\t0.8764612800691953\t0.9366011973509708\t1.0016700343647946\t1.0704013684011096\nB1\tALL_GENES\tnon_protein_affecting\tall_types\t7986662\t7.0\t8.0\t0.8764612800691953\t0.9366011973509708\t1.0016700343647946\t1.0704013684011096\nB1\tALL_GENES\tprotein_affecting\tDELETION-INSERTION\t3856684\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB1\tALL_GENES\tprotein_affecting\tDELETION-INSERTION-SNV\t3856684\t3.0\t3.0\t0.7778703155353147\t0.8426217558009126\t0.7778703155353147\t0.8426217558009126\nB1\tALL_GENES\tprotein_affecting\tSNV\t3856684\t3.0\t3.0\t0.7778703155353147\t0.8426217558009126\t0.7778703155353147\t0.8426217558009126\nB1\tALL_GENES\tprotein_affecting\tall_types\t3856684\t3.0\t3.0\t0.7778703155353147\t0.8426217558009126\t0.7778703155353147\t0.8426217558009126\nB1\tALL_GENES\tsynonymous\tDELETION-INSERTION\t1442366\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB1\tALL_GENES\tsynonymous\tDELETION-INSERTION-SNV\t1442366\t3.0\t3.0\t2.0799159159325717\t3.227416689617185\t2.0799159159325717\t3.227416689617185\nB1\tALL_GENES\tsynonymous\tSNV\t1442366\t3.0\t3.0\t2.0799159159325717\t3.227416689617185\t2.0799159159325717\t3.227416689617185\nB1\tALL_GENES\tsynonymous\tall_types\t1442366\t3.0\t3.0\t2.0799159159325717\t3.227416689617185\t2.0799159159325717\t3.227416689617185\nB1\tTP53\tall\tDELETION-INSERTION\t11814683\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB1\tTP53\tall\tDELETION-INSERTION-SNV\t11814683\t11.0\t12.0\t0.9310448701839906\t0.9310448701839906\t1.0156853129279897\t1.0156853129279897\nB1\tTP53\tall\tSNV\t11814683\t11.0\t12.0\t0.9310448701839906\t0.9310448701839906\t1.0156853129279897\t1.0156853129279897\nB1\tTP53\tall\tall_types\t11814683\t11.0\t12.0\t0.9310448701839906\t0.9310448701839906\t1.0156853129279897\t1.0156853129279897\nB1\tTP53\tnon_protein_affecting\tDELETION-INSERTION\t7986662\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB1\tTP53\tnon_protein_affecting\tDELETION-INSERTION-SNV\t7986662\t7.0\t8.0\t0.8764612800691953\t0.9366011973509707\t1.0016700343647946\t1.0704013684011093\nB1\tTP53\tnon_protein_affecting\tSNV\t7986662\t7.0\t8.0\t0.8764612800691953\t0.9366011973509707\t1.0016700343647946\t1.0704013684011093\nB1\tTP53\tnon_protein_affecting\tall_types\t7986662\t7.0\t8.0\t0.8764612800691953\t0.9366011973509707\t1.0016700343647946\t1.0704013684011093\nB1\tTP53\tprotein_affecting\tDELETION-INSERTION\t3856684\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB1\tTP53\tprotein_affecting\tDELETION-INSERTION-SNV\t3856684\t3.0\t3.0\t0.7778703155353147\t0.8426217558009125\t0.7778703155353147\t0.8426217558009125\nB1\tTP53\tprotein_affecting\tSNV\t3856684\t3.0\t3.0\t0.7778703155353147\t0.8426217558009125\t0.7778703155353147\t0.8426217558009125\nB1\tTP53\tprotein_affecting\tall_types\t3856684\t3.0\t3.0\t0.7778703155353147\t0.8426217558009125\t0.7778703155353147\t0.8426217558009125\nB1\tTP53\tsynonymous\tDELETION-INSERTION\t1442366\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB1\tTP53\tsynonymous\tDELETION-INSERTION-SNV\t1442366\t3.0\t3.0\t2.0799159159325717\t3.227416689617185\t2.0799159159325717\t3.227416689617185\nB1\tTP53\tsynonymous\tSNV\t1442366\t3.0\t3.0\t2.0799159159325717\t3.227416689617185\t2.0799159159325717\t3.227416689617185\nB1\tTP53\tsynonymous\tall_types\t1442366\t3.0\t3.0\t2.0799159159325717\t3.227416689617185\t2.0799159159325717\t3.227416689617185\nB10\tALL_GENES\tall\tDELETION-INSERTION\t12163378\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB10\tALL_GENES\tall\tDELETION-INSERTION-SNV\t12163378\t4.0\t1927.0\t0.328856013518613\t0.328856013518613\t158.4263845125918\t158.4263845125918\nB10\tALL_GENES\tall\tSNV\t12163378\t4.0\t1927.0\t0.328856013518613\t0.328856013518613\t158.4263845125918\t158.4263845125918\nB10\tALL_GENES\tall\tall_types\t12163378\t4.0\t1927.0\t0.328856013518613\t0.328856013518613\t158.4263845125918\t158.4263845125918\nB10\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION\t8642489\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB10\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION-SNV\t8642489\t3.0\t6.0\t0.34712222370199136\t0.36685879197476007\t0.6942444474039827\t0.7337175839495201\nB10\tALL_GENES\tnon_protein_affecting\tSNV\t8642489\t3.0\t6.0\t0.34712222370199136\t0.36685879197476007\t0.6942444474039827\t0.7337175839495201\nB10\tALL_GENES\tnon_protein_affecting\tall_types\t8642489\t3.0\t6.0\t0.34712222370199136\t0.36685879197476007\t0.6942444474039827\t0.7337175839495201\nB10\tALL_GENES\tprotein_affecting\tDELETION-INSERTION\t3482133\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB10\tALL_GENES\tprotein_affecting\tDELETION-INSERTION-SNV\t3482133\t1.0\t1921.0\t0.28718030012064444\t0.3109802460164727\t551.673356531758\t597.393052597644\nB10\tALL_GENES\tprotein_affecting\tSNV\t3482133\t1.0\t1921.0\t0.28718030012064444\t0.3109802460164727\t551.673356531758\t597.393052597644\nB10\tALL_GENES\tprotein_affecting\tall_types\t3482133\t1.0\t1921.0\t0.28718030012064444\t0.3109802460164727\t551.673356531758\t597.393052597644\nB10\tTP53\tall\tDELETION-INSERTION\t12163378\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB10\tTP53\tall\tDELETION-INSERTION-SNV\t12163378\t4.0\t1927.0\t0.328856013518613\t0.328856013518613\t158.4263845125918\t158.4263845125918\nB10\tTP53\tall\tSNV\t12163378\t4.0\t1927.0\t0.328856013518613\t0.328856013518613\t158.4263845125918\t158.4263845125918\nB10\tTP53\tall\tall_types\t12163378\t4.0\t1927.0\t0.328856013518613\t0.328856013518613\t158.4263845125918\t158.4263845125918\nB10\tTP53\tnon_protein_affecting\tDELETION-INSERTION\t8642489\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB10\tTP53\tnon_protein_affecting\tDELETION-INSERTION-SNV\t8642489\t3.0\t6.0\t0.34712222370199136\t0.3668587919747601\t0.6942444474039827\t0.7337175839495202\nB10\tTP53\tnon_protein_affecting\tSNV\t8642489\t3.0\t6.0\t0.34712222370199136\t0.3668587919747601\t0.6942444474039827\t0.7337175839495202\nB10\tTP53\tnon_protein_affecting\tall_types\t8642489\t3.0\t6.0\t0.34712222370199136\t0.3668587919747601\t0.6942444474039827\t0.7337175839495202\nB10\tTP53\tprotein_affecting\tDELETION-INSERTION\t3482133\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB10\tTP53\tprotein_affecting\tDELETION-INSERTION-SNV\t3482133\t1.0\t1921.0\t0.28718030012064444\t0.3109802460164726\t551.673356531758\t597.3930525976439\nB10\tTP53\tprotein_affecting\tSNV\t3482133\t1.0\t1921.0\t0.28718030012064444\t0.3109802460164726\t551.673356531758\t597.3930525976439\nB10\tTP53\tprotein_affecting\tall_types\t3482133\t1.0\t1921.0\t0.28718030012064444\t0.3109802460164726\t551.673356531758\t597.3930525976439\nB11\tALL_GENES\tall\tDELETION-INSERTION\t14195739\t1\t1\t0.07044367327407189\t0.07044367327407189\t0.07044367327407189\t0.07044367327407189\nB11\tALL_GENES\tall\tDELETION-INSERTION-SNV\t14195739\t6\t8\t0.42266203964443133\t0.42266203964443133\t0.5635493861925751\t0.5635493861925751\nB11\tALL_GENES\tall\tSNV\t14195739\t5\t7\t0.35221836637035947\t0.35221836637035947\t0.4931057129185032\t0.4931057129185032\nB11\tALL_GENES\tall\tall_types\t14195739\t6\t8\t0.42266203964443133\t0.42266203964443133\t0.5635493861925751\t0.5635493861925751\nB11\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION\t10046729\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB11\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION-SNV\t10046729\t2.0\t2.0\t0.19906976688631692\t0.21061098879682924\t0.19906976688631692\t0.21061098879682924\nB11\tALL_GENES\tnon_protein_affecting\tSNV\t10046729\t2.0\t2.0\t0.19906976688631692\t0.21061098879682924\t0.19906976688631692\t0.21061098879682924\nB11\tALL_GENES\tnon_protein_affecting\tall_types\t10046729\t2.0\t2.0\t0.19906976688631692\t0.21061098879682924\t0.19906976688631692\t0.21061098879682924\nB11\tALL_GENES\tprotein_affecting\tDELETION-INSERTION\t4130487\t1\t1\t0.2421022024763666\t0.26215631961888763\t0.2421022024763666\t0.26215631961888763\nB11\tALL_GENES\tprotein_affecting\tDELETION-INSERTION-SNV\t4130487\t4\t6\t0.9684088099054664\t1.0486252784755505\t1.4526132148581996\t1.5729379177133258\nB11\tALL_GENES\tprotein_affecting\tSNV\t4130487\t3\t5\t0.7263066074290998\t0.7864689588566629\t1.210511012381833\t1.3107815980944382\nB11\tALL_GENES\tprotein_affecting\tall_types\t4130487\t4\t6\t0.9684088099054664\t1.0486252784755505\t1.4526132148581996\t1.5729379177133258\nB11\tALL_GENES\tsynonymous\tDELETION-INSERTION\t1542423\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB11\tALL_GENES\tsynonymous\tDELETION-INSERTION-SNV\t1542423\t1.0\t1.0\t0.6483305811700162\t1.0081918952125672\t0.6483305811700162\t1.0081918952125672\nB11\tALL_GENES\tsynonymous\tSNV\t1542423\t1.0\t1.0\t0.6483305811700162\t1.0081918952125672\t0.6483305811700162\t1.0081918952125672\nB11\tALL_GENES\tsynonymous\tall_types\t1542423\t1.0\t1.0\t0.6483305811700162\t1.0081918952125672\t0.6483305811700162\t1.0081918952125672\nB11\tTP53\tall\tDELETION-INSERTION\t14195739\t1\t1\t0.07044367327407189\t0.07044367327407189\t0.07044367327407189\t0.07044367327407189\nB11\tTP53\tall\tDELETION-INSERTION-SNV\t14195739\t6\t8\t0.42266203964443133\t0.42266203964443133\t0.5635493861925751\t0.5635493861925751\nB11\tTP53\tall\tSNV\t14195739\t5\t7\t0.35221836637035947\t0.35221836637035947\t0.4931057129185032\t0.4931057129185032\nB11\tTP53\tall\tall_types\t14195739\t6\t8\t0.42266203964443133\t0.42266203964443133\t0.5635493861925751\t0.5635493861925751\nB11\tTP53\tnon_protein_affecting\tDELETION-INSERTION\t10046729\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB11\tTP53\tnon_protein_affecting\tDELETION-INSERTION-SNV\t10046729\t2.0\t2.0\t0.19906976688631692\t0.21061098879682927\t0.19906976688631692\t0.21061098879682927\nB11\tTP53\tnon_protein_affecting\tSNV\t10046729\t2.0\t2.0\t0.19906976688631692\t0.21061098879682927\t0.19906976688631692\t0.21061098879682927\nB11\tTP53\tnon_protein_affecting\tall_types\t10046729\t2.0\t2.0\t0.19906976688631692\t0.21061098879682927\t0.19906976688631692\t0.21061098879682927\nB11\tTP53\tprotein_affecting\tDELETION-INSERTION\t4130487\t1\t1\t0.2421022024763666\t0.26215631961888763\t0.2421022024763666\t0.26215631961888763\nB11\tTP53\tprotein_affecting\tDELETION-INSERTION-SNV\t4130487\t4\t6\t0.9684088099054664\t1.0486252784755505\t1.4526132148581996\t1.5729379177133258\nB11\tTP53\tprotein_affecting\tSNV\t4130487\t3\t5\t0.7263066074290998\t0.7864689588566629\t1.210511012381833\t1.3107815980944382\nB11\tTP53\tprotein_affecting\tall_types\t4130487\t4\t6\t0.9684088099054664\t1.0486252784755505\t1.4526132148581996\t1.5729379177133258\nB11\tTP53\tsynonymous\tDELETION-INSERTION\t1542423\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB11\tTP53\tsynonymous\tDELETION-INSERTION-SNV\t1542423\t1.0\t1.0\t0.6483305811700162\t1.0081918952125672\t0.6483305811700162\t1.0081918952125672\nB11\tTP53\tsynonymous\tSNV\t1542423\t1.0\t1.0\t0.6483305811700162\t1.0081918952125672\t0.6483305811700162\t1.0081918952125672\nB11\tTP53\tsynonymous\tall_types\t1542423\t1.0\t1.0\t0.6483305811700162\t1.0081918952125672\t0.6483305811700162\t1.0081918952125672\nB12\tALL_GENES\tall\tDELETION-INSERTION\t7548664\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB12\tALL_GENES\tall\tDELETION-INSERTION-SNV\t7548664\t4.0\t5.0\t0.5298950913698106\t0.5298950913698106\t0.6623688642122632\t0.6623688642122632\nB12\tALL_GENES\tall\tSNV\t7548664\t4.0\t5.0\t0.5298950913698106\t0.5298950913698106\t0.6623688642122632\t0.6623688642122632\nB12\tALL_GENES\tall\tall_types\t7548664\t4.0\t5.0\t0.5298950913698106\t0.5298950913698106\t0.6623688642122632\t0.6623688642122632\nB12\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION\t5401199\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB12\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION-SNV\t5401199\t2.0\t2.0\t0.37028815268609805\t0.39066203150506973\t0.37028815268609805\t0.39066203150506973\nB12\tALL_GENES\tnon_protein_affecting\tSNV\t5401199\t2.0\t2.0\t0.37028815268609805\t0.39066203150506973\t0.37028815268609805\t0.39066203150506973\nB12\tALL_GENES\tnon_protein_affecting\tall_types\t5401199\t2.0\t2.0\t0.37028815268609805\t0.39066203150506973\t0.37028815268609805\t0.39066203150506973\nB12\tALL_GENES\tprotein_affecting\tDELETION-INSERTION\t2118322\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB12\tALL_GENES\tprotein_affecting\tDELETION-INSERTION-SNV\t2118322\t2.0\t3.0\t0.9441435249220845\t1.023118208520017\t1.4162152873831266\t1.5346773127800255\nB12\tALL_GENES\tprotein_affecting\tSNV\t2118322\t2.0\t3.0\t0.9441435249220845\t1.023118208520017\t1.4162152873831266\t1.5346773127800255\nB12\tALL_GENES\tprotein_affecting\tall_types\t2118322\t2.0\t3.0\t0.9441435249220845\t1.023118208520017\t1.4162152873831266\t1.5346773127800255\nB12\tTP53\tall\tDELETION-INSERTION\t7548664\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB12\tTP53\tall\tDELETION-INSERTION-SNV\t7548664\t4.0\t5.0\t0.5298950913698106\t0.5298950913698106\t0.6623688642122632\t0.6623688642122632\nB12\tTP53\tall\tSNV\t7548664\t4.0\t5.0\t0.5298950913698106\t0.5298950913698106\t0.6623688642122632\t0.6623688642122632\nB12\tTP53\tall\tall_types\t7548664\t4.0\t5.0\t0.5298950913698106\t0.5298950913698106\t0.6623688642122632\t0.6623688642122632\nB12\tTP53\tnon_protein_affecting\tDELETION-INSERTION\t5401199\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB12\tTP53\tnon_protein_affecting\tDELETION-INSERTION-SNV\t5401199\t2.0\t2.0\t0.37028815268609805\t0.39066203150506973\t0.37028815268609805\t0.39066203150506973\nB12\tTP53\tnon_protein_affecting\tSNV\t5401199\t2.0\t2.0\t0.37028815268609805\t0.39066203150506973\t0.37028815268609805\t0.39066203150506973\nB12\tTP53\tnon_protein_affecting\tall_types\t5401199\t2.0\t2.0\t0.37028815268609805\t0.39066203150506973\t0.37028815268609805\t0.39066203150506973\nB12\tTP53\tprotein_affecting\tDELETION-INSERTION\t2118322\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB12\tTP53\tprotein_affecting\tDELETION-INSERTION-SNV\t2118322\t2.0\t3.0\t0.9441435249220845\t1.023118208520017\t1.4162152873831266\t1.5346773127800255\nB12\tTP53\tprotein_affecting\tSNV\t2118322\t2.0\t3.0\t0.9441435249220845\t1.023118208520017\t1.4162152873831266\t1.5346773127800255\nB12\tTP53\tprotein_affecting\tall_types\t2118322\t2.0\t3.0\t0.9441435249220845\t1.023118208520017\t1.4162152873831266\t1.5346773127800255\nB13\tALL_GENES\tall\tDELETION-INSERTION\t14574453\t1\t1\t0.06861320970330756\t0.06861320970330756\t0.06861320970330756\t0.06861320970330756\nB13\tALL_GENES\tall\tDELETION-INSERTION-SNV\t14574453\t11\t11\t0.7547453067363832\t0.7547453067363832\t0.7547453067363832\t0.7547453067363832\nB13\tALL_GENES\tall\tSNV\t14574453\t10\t10\t0.6861320970330756\t0.6861320970330756\t0.6861320970330756\t0.6861320970330756\nB13\tALL_GENES\tall\tall_types\t14574453\t11\t11\t0.7547453067363832\t0.7547453067363832\t0.7547453067363832\t0.7547453067363832\nB13\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION\t9941941\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB13\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION-SNV\t9941941\t4.0\t4.0\t0.4023359221302963\t0.42873172830227124\t0.4023359221302963\t0.42873172830227124\nB13\tALL_GENES\tnon_protein_affecting\tSNV\t9941941\t4.0\t4.0\t0.4023359221302963\t0.42873172830227124\t0.4023359221302963\t0.42873172830227124\nB13\tALL_GENES\tnon_protein_affecting\tall_types\t9941941\t4.0\t4.0\t0.4023359221302963\t0.42873172830227124\t0.4023359221302963\t0.42873172830227124\nB13\tALL_GENES\tprotein_affecting\tDELETION-INSERTION\t4624964\t1\t1\t0.21621789920959383\t0.2344135866739939\t0.21621789920959383\t0.2344135866739939\nB13\tALL_GENES\tprotein_affecting\tDELETION-INSERTION-SNV\t4624964\t7\t7\t1.513525294467157\t1.6408951067179574\t1.513525294467157\t1.6408951067179574\nB13\tALL_GENES\tprotein_affecting\tSNV\t4624964\t6\t6\t1.2973073952575631\t1.4064815200439633\t1.2973073952575631\t1.4064815200439633\nB13\tALL_GENES\tprotein_affecting\tall_types\t4624964\t7\t7\t1.513525294467157\t1.6408951067179574\t1.513525294467157\t1.6408951067179574\nB13\tALL_GENES\tsynonymous\tDELETION-INSERTION\t1705253\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB13\tALL_GENES\tsynonymous\tDELETION-INSERTION-SNV\t1705253\t2.0\t2.0\t1.1728464925732427\t1.8295655970924545\t1.1728464925732427\t1.8295655970924545\nB13\tALL_GENES\tsynonymous\tSNV\t1705253\t2.0\t2.0\t1.1728464925732427\t1.8295655970924545\t1.1728464925732427\t1.8295655970924545\nB13\tALL_GENES\tsynonymous\tall_types\t1705253\t2.0\t2.0\t1.1728464925732427\t1.8295655970924545\t1.1728464925732427\t1.8295655970924545\nB13\tTP53\tall\tDELETION-INSERTION\t14574453\t1\t1\t0.06861320970330756\t0.06861320970330756\t0.06861320970330756\t0.06861320970330756\nB13\tTP53\tall\tDELETION-INSERTION-SNV\t14574453\t11\t11\t0.7547453067363832\t0.7547453067363832\t0.7547453067363832\t0.7547453067363832\nB13\tTP53\tall\tSNV\t14574453\t10\t10\t0.6861320970330756\t0.6861320970330756\t0.6861320970330756\t0.6861320970330756\nB13\tTP53\tall\tall_types\t14574453\t11\t11\t0.7547453067363832\t0.7547453067363832\t0.7547453067363832\t0.7547453067363832\nB13\tTP53\tnon_protein_affecting\tDELETION-INSERTION\t9941941\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB13\tTP53\tnon_protein_affecting\tDELETION-INSERTION-SNV\t9941941\t4.0\t4.0\t0.4023359221302963\t0.42873172830227135\t0.4023359221302963\t0.42873172830227135\nB13\tTP53\tnon_protein_affecting\tSNV\t9941941\t4.0\t4.0\t0.4023359221302963\t0.42873172830227135\t0.4023359221302963\t0.42873172830227135\nB13\tTP53\tnon_protein_affecting\tall_types\t9941941\t4.0\t4.0\t0.4023359221302963\t0.42873172830227135\t0.4023359221302963\t0.42873172830227135\nB13\tTP53\tprotein_affecting\tDELETION-INSERTION\t4624964\t1\t1\t0.21621789920959383\t0.23441358667399395\t0.21621789920959383\t0.23441358667399395\nB13\tTP53\tprotein_affecting\tDELETION-INSERTION-SNV\t4624964\t7\t7\t1.513525294467157\t1.6408951067179576\t1.513525294467157\t1.6408951067179576\nB13\tTP53\tprotein_affecting\tSNV\t4624964\t6\t6\t1.2973073952575631\t1.4064815200439635\t1.2973073952575631\t1.4064815200439635\nB13\tTP53\tprotein_affecting\tall_types\t4624964\t7\t7\t1.513525294467157\t1.6408951067179576\t1.513525294467157\t1.6408951067179576\nB13\tTP53\tsynonymous\tDELETION-INSERTION\t1705253\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB13\tTP53\tsynonymous\tDELETION-INSERTION-SNV\t1705253\t2.0\t2.0\t1.1728464925732427\t1.829565597092454\t1.1728464925732427\t1.829565597092454\nB13\tTP53\tsynonymous\tSNV\t1705253\t2.0\t2.0\t1.1728464925732427\t1.829565597092454\t1.1728464925732427\t1.829565597092454\nB13\tTP53\tsynonymous\tall_types\t1705253\t2.0\t2.0\t1.1728464925732427\t1.829565597092454\t1.1728464925732427\t1.829565597092454\nB2a\tALL_GENES\tall\tDELETION-INSERTION\t7990332\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB2a\tALL_GENES\tall\tDELETION-INSERTION-SNV\t7990332\t2.0\t2.0\t0.25030249055984155\t0.25030249055984155\t0.25030249055984155\t0.25030249055984155\nB2a\tALL_GENES\tall\tSNV\t7990332\t2.0\t2.0\t0.25030249055984155\t0.25030249055984155\t0.25030249055984155\t0.25030249055984155\nB2a\tALL_GENES\tall\tall_types\t7990332\t2.0\t2.0\t0.25030249055984155\t0.25030249055984155\t0.25030249055984155\t0.25030249055984155\nB2a\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION\t5567351\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB2a\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION-SNV\t5567351\t1.0\t1.0\t0.17961863730165387\t0.19061431626612987\t0.17961863730165387\t0.19061431626612987\nB2a\tALL_GENES\tnon_protein_affecting\tSNV\t5567351\t1.0\t1.0\t0.17961863730165387\t0.19061431626612987\t0.17961863730165387\t0.19061431626612987\nB2a\tALL_GENES\tnon_protein_affecting\tall_types\t5567351\t1.0\t1.0\t0.17961863730165387\t0.19061431626612987\t0.17961863730165387\t0.19061431626612987\nB2a\tALL_GENES\tprotein_affecting\tDELETION-INSERTION\t2385721\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB2a\tALL_GENES\tprotein_affecting\tDELETION-INSERTION-SNV\t2385721\t1.0\t1.0\t0.4191604969734516\t0.45361053573974724\t0.4191604969734516\t0.45361053573974724\nB2a\tALL_GENES\tprotein_affecting\tSNV\t2385721\t1.0\t1.0\t0.4191604969734516\t0.45361053573974724\t0.4191604969734516\t0.45361053573974724\nB2a\tALL_GENES\tprotein_affecting\tall_types\t2385721\t1.0\t1.0\t0.4191604969734516\t0.45361053573974724\t0.4191604969734516\t0.45361053573974724\nB2a\tTP53\tall\tDELETION-INSERTION\t7990332\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB2a\tTP53\tall\tDELETION-INSERTION-SNV\t7990332\t2.0\t2.0\t0.25030249055984155\t0.25030249055984155\t0.25030249055984155\t0.25030249055984155\nB2a\tTP53\tall\tSNV\t7990332\t2.0\t2.0\t0.25030249055984155\t0.25030249055984155\t0.25030249055984155\t0.25030249055984155\nB2a\tTP53\tall\tall_types\t7990332\t2.0\t2.0\t0.25030249055984155\t0.25030249055984155\t0.25030249055984155\t0.25030249055984155\nB2a\tTP53\tnon_protein_affecting\tDELETION-INSERTION\t5567351\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB2a\tTP53\tnon_protein_affecting\tDELETION-INSERTION-SNV\t5567351\t1.0\t1.0\t0.17961863730165387\t0.19061431626612987\t0.17961863730165387\t0.19061431626612987\nB2a\tTP53\tnon_protein_affecting\tSNV\t5567351\t1.0\t1.0\t0.17961863730165387\t0.19061431626612987\t0.17961863730165387\t0.19061431626612987\nB2a\tTP53\tnon_protein_affecting\tall_types\t5567351\t1.0\t1.0\t0.17961863730165387\t0.19061431626612987\t0.17961863730165387\t0.19061431626612987\nB2a\tTP53\tprotein_affecting\tDELETION-INSERTION\t2385721\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB2a\tTP53\tprotein_affecting\tDELETION-INSERTION-SNV\t2385721\t1.0\t1.0\t0.4191604969734516\t0.45361053573974724\t0.4191604969734516\t0.45361053573974724\nB2a\tTP53\tprotein_affecting\tSNV\t2385721\t1.0\t1.0\t0.4191604969734516\t0.45361053573974724\t0.4191604969734516\t0.45361053573974724\nB2a\tTP53\tprotein_affecting\tall_types\t2385721\t1.0\t1.0\t0.4191604969734516\t0.45361053573974724\t0.4191604969734516\t0.45361053573974724\nB2b\tALL_GENES\tall\tDELETION-INSERTION\t8851176\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB2b\tALL_GENES\tall\tDELETION-INSERTION-SNV\t8851176\t3.0\t3.0\t0.3389380123048056\t0.3389380123048056\t0.3389380123048056\t0.3389380123048056\nB2b\tALL_GENES\tall\tSNV\t8851176\t3.0\t3.0\t0.3389380123048056\t0.3389380123048056\t0.3389380123048056\t0.3389380123048056\nB2b\tALL_GENES\tall\tall_types\t8851176\t3.0\t3.0\t0.3389380123048056\t0.3389380123048056\t0.3389380123048056\t0.3389380123048056\nB2b\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION\t6189606\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB2b\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION-SNV\t6189606\t1.0\t1.0\t0.16156117206814133\t0.1713572965850376\t0.16156117206814133\t0.1713572965850376\nB2b\tALL_GENES\tnon_protein_affecting\tSNV\t6189606\t1.0\t1.0\t0.16156117206814133\t0.1713572965850376\t0.16156117206814133\t0.1713572965850376\nB2b\tALL_GENES\tnon_protein_affecting\tall_types\t6189606\t1.0\t1.0\t0.16156117206814133\t0.1713572965850376\t0.16156117206814133\t0.1713572965850376\nB2b\tALL_GENES\tprotein_affecting\tDELETION-INSERTION\t2616960\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB2b\tALL_GENES\tprotein_affecting\tDELETION-INSERTION-SNV\t2616960\t2.0\t2.0\t0.7642455368060651\t0.8272451536876728\t0.7642455368060651\t0.8272451536876728\nB2b\tALL_GENES\tprotein_affecting\tSNV\t2616960\t2.0\t2.0\t0.7642455368060651\t0.8272451536876728\t0.7642455368060651\t0.8272451536876728\nB2b\tALL_GENES\tprotein_affecting\tall_types\t2616960\t2.0\t2.0\t0.7642455368060651\t0.8272451536876728\t0.7642455368060651\t0.8272451536876728\nB2b\tTP53\tall\tDELETION-INSERTION\t8851176\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB2b\tTP53\tall\tDELETION-INSERTION-SNV\t8851176\t3.0\t3.0\t0.3389380123048056\t0.3389380123048056\t0.3389380123048056\t0.3389380123048056\nB2b\tTP53\tall\tSNV\t8851176\t3.0\t3.0\t0.3389380123048056\t0.3389380123048056\t0.3389380123048056\t0.3389380123048056\nB2b\tTP53\tall\tall_types\t8851176\t3.0\t3.0\t0.3389380123048056\t0.3389380123048056\t0.3389380123048056\t0.3389380123048056\nB2b\tTP53\tnon_protein_affecting\tDELETION-INSERTION\t6189606\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB2b\tTP53\tnon_protein_affecting\tDELETION-INSERTION-SNV\t6189606\t1.0\t1.0\t0.16156117206814133\t0.17135729658503757\t0.16156117206814133\t0.17135729658503757\nB2b\tTP53\tnon_protein_affecting\tSNV\t6189606\t1.0\t1.0\t0.16156117206814133\t0.17135729658503757\t0.16156117206814133\t0.17135729658503757\nB2b\tTP53\tnon_protein_affecting\tall_types\t6189606\t1.0\t1.0\t0.16156117206814133\t0.17135729658503757\t0.16156117206814133\t0.17135729658503757\nB2b\tTP53\tprotein_affecting\tDELETION-INSERTION\t2616960\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB2b\tTP53\tprotein_affecting\tDELETION-INSERTION-SNV\t2616960\t2.0\t2.0\t0.7642455368060651\t0.8272451536876728\t0.7642455368060651\t0.8272451536876728\nB2b\tTP53\tprotein_affecting\tSNV\t2616960\t2.0\t2.0\t0.7642455368060651\t0.8272451536876728\t0.7642455368060651\t0.8272451536876728\nB2b\tTP53\tprotein_affecting\tall_types\t2616960\t2.0\t2.0\t0.7642455368060651\t0.8272451536876728\t0.7642455368060651\t0.8272451536876728\nB3\tALL_GENES\tall\tDELETION-INSERTION\t5541639\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB3\tALL_GENES\tall\tDELETION-INSERTION-SNV\t5541639\t1.0\t1.0\t0.1804520287229103\t0.1804520287229103\t0.1804520287229103\t0.1804520287229103\nB3\tALL_GENES\tall\tSNV\t5541639\t1.0\t1.0\t0.1804520287229103\t0.1804520287229103\t0.1804520287229103\t0.1804520287229103\nB3\tALL_GENES\tall\tall_types\t5541639\t1.0\t1.0\t0.1804520287229103\t0.1804520287229103\t0.1804520287229103\t0.1804520287229103\nB3\tALL_GENES\tprotein_affecting\tDELETION-INSERTION\t1484282\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB3\tALL_GENES\tprotein_affecting\tDELETION-INSERTION-SNV\t1484282\t1.0\t1.0\t0.673726421259572\t0.7304738851933673\t0.673726421259572\t0.7304738851933673\nB3\tALL_GENES\tprotein_affecting\tSNV\t1484282\t1.0\t1.0\t0.673726421259572\t0.7304738851933673\t0.673726421259572\t0.7304738851933673\nB3\tALL_GENES\tprotein_affecting\tall_types\t1484282\t1.0\t1.0\t0.673726421259572\t0.7304738851933673\t0.673726421259572\t0.7304738851933673\nB3\tTP53\tall\tDELETION-INSERTION\t5541639\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB3\tTP53\tall\tDELETION-INSERTION-SNV\t5541639\t1.0\t1.0\t0.1804520287229103\t0.1804520287229103\t0.1804520287229103\t0.1804520287229103\nB3\tTP53\tall\tSNV\t5541639\t1.0\t1.0\t0.1804520287229103\t0.1804520287229103\t0.1804520287229103\t0.1804520287229103\nB3\tTP53\tall\tall_types\t5541639\t1.0\t1.0\t0.1804520287229103\t0.1804520287229103\t0.1804520287229103\t0.1804520287229103\nB3\tTP53\tprotein_affecting\tDELETION-INSERTION\t1484282\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB3\tTP53\tprotein_affecting\tDELETION-INSERTION-SNV\t1484282\t1.0\t1.0\t0.673726421259572\t0.7304738851933674\t0.673726421259572\t0.7304738851933674\nB3\tTP53\tprotein_affecting\tSNV\t1484282\t1.0\t1.0\t0.673726421259572\t0.7304738851933674\t0.673726421259572\t0.7304738851933674\nB3\tTP53\tprotein_affecting\tall_types\t1484282\t1.0\t1.0\t0.673726421259572\t0.7304738851933674\t0.673726421259572\t0.7304738851933674\nB4a\tALL_GENES\tall\tDELETION-INSERTION\t17394799\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB4a\tALL_GENES\tall\tDELETION-INSERTION-SNV\t17394799\t14.0\t21.0\t0.8048382737851699\t0.8048382737851699\t1.207257410677755\t1.207257410677755\nB4a\tALL_GENES\tall\tSNV\t17394799\t14.0\t21.0\t0.8048382737851699\t0.8048382737851699\t1.207257410677755\t1.207257410677755\nB4a\tALL_GENES\tall\tall_types\t17394799\t14.0\t21.0\t0.8048382737851699\t0.8048382737851699\t1.207257410677755\t1.207257410677755\nB4a\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION\t12436468\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB4a\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION-SNV\t12436468\t7.0\t9.0\t0.5628607736537415\t0.5938150598624962\t0.7236781375548106\t0.7634765055374951\nB4a\tALL_GENES\tnon_protein_affecting\tSNV\t12436468\t7.0\t9.0\t0.5628607736537415\t0.5938150598624962\t0.7236781375548106\t0.7634765055374951\nB4a\tALL_GENES\tnon_protein_affecting\tall_types\t12436468\t7.0\t9.0\t0.5628607736537415\t0.5938150598624962\t0.7236781375548106\t0.7634765055374951\nB4a\tALL_GENES\tprotein_affecting\tDELETION-INSERTION\t4798780\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB4a\tALL_GENES\tprotein_affecting\tDELETION-INSERTION-SNV\t4798780\t6.0\t11.0\t1.2503177891047308\t1.3543394389964887\t2.29224928002534\t2.482955638160229\nB4a\tALL_GENES\tprotein_affecting\tSNV\t4798780\t6.0\t11.0\t1.2503177891047308\t1.3543394389964887\t2.29224928002534\t2.482955638160229\nB4a\tALL_GENES\tprotein_affecting\tall_types\t4798780\t6.0\t11.0\t1.2503177891047308\t1.3543394389964887\t2.29224928002534\t2.482955638160229\nB4a\tALL_GENES\tsynonymous\tDELETION-INSERTION\t1795117\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB4a\tALL_GENES\tsynonymous\tDELETION-INSERTION-SNV\t1795117\t1.0\t1.0\t0.5570667538661825\t0.8719680580660969\t0.5570667538661825\t0.8719680580660969\nB4a\tALL_GENES\tsynonymous\tSNV\t1795117\t1.0\t1.0\t0.5570667538661825\t0.8719680580660969\t0.5570667538661825\t0.8719680580660969\nB4a\tALL_GENES\tsynonymous\tall_types\t1795117\t1.0\t1.0\t0.5570667538661825\t0.8719680580660969\t0.5570667538661825\t0.8719680580660969\nB4a\tTP53\tall\tDELETION-INSERTION\t17394799\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB4a\tTP53\tall\tDELETION-INSERTION-SNV\t17394799\t14.0\t21.0\t0.8048382737851699\t0.8048382737851699\t1.207257410677755\t1.207257410677755\nB4a\tTP53\tall\tSNV\t17394799\t14.0\t21.0\t0.8048382737851699\t0.8048382737851699\t1.207257410677755\t1.207257410677755\nB4a\tTP53\tall\tall_types\t17394799\t14.0\t21.0\t0.8048382737851699\t0.8048382737851699\t1.207257410677755\t1.207257410677755\nB4a\tTP53\tnon_protein_affecting\tDELETION-INSERTION\t12436468\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB4a\tTP53\tnon_protein_affecting\tDELETION-INSERTION-SNV\t12436468\t7.0\t9.0\t0.5628607736537415\t0.5938150598624962\t0.7236781375548106\t0.7634765055374951\nB4a\tTP53\tnon_protein_affecting\tSNV\t12436468\t7.0\t9.0\t0.5628607736537415\t0.5938150598624962\t0.7236781375548106\t0.7634765055374951\nB4a\tTP53\tnon_protein_affecting\tall_types\t12436468\t7.0\t9.0\t0.5628607736537415\t0.5938150598624962\t0.7236781375548106\t0.7634765055374951\nB4a\tTP53\tprotein_affecting\tDELETION-INSERTION\t4798780\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB4a\tTP53\tprotein_affecting\tDELETION-INSERTION-SNV\t4798780\t6.0\t11.0\t1.2503177891047308\t1.3543394389964887\t2.29224928002534\t2.482955638160229\nB4a\tTP53\tprotein_affecting\tSNV\t4798780\t6.0\t11.0\t1.2503177891047308\t1.3543394389964887\t2.29224928002534\t2.482955638160229\nB4a\tTP53\tprotein_affecting\tall_types\t4798780\t6.0\t11.0\t1.2503177891047308\t1.3543394389964887\t2.29224928002534\t2.482955638160229\nB4a\tTP53\tsynonymous\tDELETION-INSERTION\t1795117\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB4a\tTP53\tsynonymous\tDELETION-INSERTION-SNV\t1795117\t1.0\t1.0\t0.5570667538661825\t0.8719680580660969\t0.5570667538661825\t0.8719680580660969\nB4a\tTP53\tsynonymous\tSNV\t1795117\t1.0\t1.0\t0.5570667538661825\t0.8719680580660969\t0.5570667538661825\t0.8719680580660969\nB4a\tTP53\tsynonymous\tall_types\t1795117\t1.0\t1.0\t0.5570667538661825\t0.8719680580660969\t0.5570667538661825\t0.8719680580660969\nB4b\tALL_GENES\tall\tDELETION-INSERTION\t16855873\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB4b\tALL_GENES\tall\tDELETION-INSERTION-SNV\t16855873\t13.0\t20.0\t0.7712445389212413\t0.7712445389212413\t1.1865300598788329\t1.1865300598788329\nB4b\tALL_GENES\tall\tSNV\t16855873\t13.0\t20.0\t0.7712445389212413\t0.7712445389212413\t1.1865300598788329\t1.1865300598788329\nB4b\tALL_GENES\tall\tall_types\t16855873\t13.0\t20.0\t0.7712445389212413\t0.7712445389212413\t1.1865300598788329\t1.1865300598788329\nB4b\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION\t12038035\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB4b\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION-SNV\t12038035\t5.0\t6.0\t0.4153501796597202\t0.4381439858560111\t0.4984202155916643\t0.5257727830272133\nB4b\tALL_GENES\tnon_protein_affecting\tSNV\t12038035\t5.0\t6.0\t0.4153501796597202\t0.4381439858560111\t0.4984202155916643\t0.5257727830272133\nB4b\tALL_GENES\tnon_protein_affecting\tall_types\t12038035\t5.0\t6.0\t0.4153501796597202\t0.4381439858560111\t0.4984202155916643\t0.5257727830272133\nB4b\tALL_GENES\tprotein_affecting\tDELETION-INSERTION\t4662296\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB4b\tALL_GENES\tprotein_affecting\tDELETION-INSERTION-SNV\t4662296\t7.0\t13.0\t1.5014061741253664\t1.6258951520606828\t2.7883257519471094\t3.0195195681126967\nB4b\tALL_GENES\tprotein_affecting\tSNV\t4662296\t7.0\t13.0\t1.5014061741253664\t1.6258951520606828\t2.7883257519471094\t3.0195195681126967\nB4b\tALL_GENES\tprotein_affecting\tall_types\t4662296\t7.0\t13.0\t1.5014061741253664\t1.6258951520606828\t2.7883257519471094\t3.0195195681126967\nB4b\tTP53\tall\tDELETION-INSERTION\t16855873\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB4b\tTP53\tall\tDELETION-INSERTION-SNV\t16855873\t13.0\t20.0\t0.7712445389212413\t0.7712445389212413\t1.1865300598788329\t1.1865300598788329\nB4b\tTP53\tall\tSNV\t16855873\t13.0\t20.0\t0.7712445389212413\t0.7712445389212413\t1.1865300598788329\t1.1865300598788329\nB4b\tTP53\tall\tall_types\t16855873\t13.0\t20.0\t0.7712445389212413\t0.7712445389212413\t1.1865300598788329\t1.1865300598788329\nB4b\tTP53\tnon_protein_affecting\tDELETION-INSERTION\t12038035\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB4b\tTP53\tnon_protein_affecting\tDELETION-INSERTION-SNV\t12038035\t5.0\t6.0\t0.4153501796597202\t0.4381439858560111\t0.4984202155916643\t0.5257727830272133\nB4b\tTP53\tnon_protein_affecting\tSNV\t12038035\t5.0\t6.0\t0.4153501796597202\t0.4381439858560111\t0.4984202155916643\t0.5257727830272133\nB4b\tTP53\tnon_protein_affecting\tall_types\t12038035\t5.0\t6.0\t0.4153501796597202\t0.4381439858560111\t0.4984202155916643\t0.5257727830272133\nB4b\tTP53\tprotein_affecting\tDELETION-INSERTION\t4662296\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB4b\tTP53\tprotein_affecting\tDELETION-INSERTION-SNV\t4662296\t7.0\t13.0\t1.5014061741253664\t1.6258951520606826\t2.7883257519471094\t3.0195195681126963\nB4b\tTP53\tprotein_affecting\tSNV\t4662296\t7.0\t13.0\t1.5014061741253664\t1.6258951520606826\t2.7883257519471094\t3.0195195681126963\nB4b\tTP53\tprotein_affecting\tall_types\t4662296\t7.0\t13.0\t1.5014061741253664\t1.6258951520606826\t2.7883257519471094\t3.0195195681126963\nB5\tALL_GENES\tall\tDELETION-INSERTION\t21444569\t1\t2\t0.04663185350099599\t0.04663185350099599\t0.09326370700199198\t0.09326370700199198\nB5\tALL_GENES\tall\tDELETION-INSERTION-SNV\t21444569\t5\t6\t0.23315926750497995\t0.23315926750497995\t0.2797911210059759\t0.2797911210059759\nB5\tALL_GENES\tall\tSNV\t21444569\t4\t4\t0.18652741400398395\t0.18652741400398395\t0.18652741400398395\t0.18652741400398395\nB5\tALL_GENES\tall\tall_types\t21444569\t5\t6\t0.23315926750497995\t0.23315926750497995\t0.2797911210059759\t0.2797911210059759\nB5\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION\t14716700\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB5\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION-SNV\t14716700\t2.0\t2.0\t0.1359000319365075\t0.14461519186929042\t0.1359000319365075\t0.14461519186929042\nB5\tALL_GENES\tnon_protein_affecting\tSNV\t14716700\t2.0\t2.0\t0.1359000319365075\t0.14461519186929042\t0.1359000319365075\t0.14461519186929042\nB5\tALL_GENES\tnon_protein_affecting\tall_types\t14716700\t2.0\t2.0\t0.1359000319365075\t0.14461519186929042\t0.1359000319365075\t0.14461519186929042\nB5\tALL_GENES\tprotein_affecting\tDELETION-INSERTION\t6670494\t1\t2\t0.14991393441025505\t0.16241546883904937\t0.2998278688205101\t0.32483093767809873\nB5\tALL_GENES\tprotein_affecting\tDELETION-INSERTION-SNV\t6670494\t3\t4\t0.44974180323076524\t0.48724640651714807\t0.5996557376410202\t0.6496618753561975\nB5\tALL_GENES\tprotein_affecting\tSNV\t6670494\t2\t2\t0.2998278688205101\t0.32483093767809873\t0.2998278688205101\t0.32483093767809873\nB5\tALL_GENES\tprotein_affecting\tall_types\t6670494\t3\t4\t0.44974180323076524\t0.48724640651714807\t0.5996557376410202\t0.6496618753561975\nB5\tALL_GENES\tsynonymous\tDELETION-INSERTION\t2477222\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB5\tALL_GENES\tsynonymous\tDELETION-INSERTION-SNV\t2477222\t1.0\t1.0\t0.4036779909107864\t0.6288012344625835\t0.4036779909107864\t0.6288012344625835\nB5\tALL_GENES\tsynonymous\tSNV\t2477222\t1.0\t1.0\t0.4036779909107864\t0.6288012344625835\t0.4036779909107864\t0.6288012344625835\nB5\tALL_GENES\tsynonymous\tall_types\t2477222\t1.0\t1.0\t0.4036779909107864\t0.6288012344625835\t0.4036779909107864\t0.6288012344625835\nB5\tTP53\tall\tDELETION-INSERTION\t21444569\t1\t2\t0.04663185350099599\t0.04663185350099599\t0.09326370700199198\t0.09326370700199198\nB5\tTP53\tall\tDELETION-INSERTION-SNV\t21444569\t5\t6\t0.23315926750497995\t0.23315926750497995\t0.2797911210059759\t0.2797911210059759\nB5\tTP53\tall\tSNV\t21444569\t4\t4\t0.18652741400398395\t0.18652741400398395\t0.18652741400398395\t0.18652741400398395\nB5\tTP53\tall\tall_types\t21444569\t5\t6\t0.23315926750497995\t0.23315926750497995\t0.2797911210059759\t0.2797911210059759\nB5\tTP53\tnon_protein_affecting\tDELETION-INSERTION\t14716700\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB5\tTP53\tnon_protein_affecting\tDELETION-INSERTION-SNV\t14716700\t2.0\t2.0\t0.1359000319365075\t0.14461519186929045\t0.1359000319365075\t0.14461519186929045\nB5\tTP53\tnon_protein_affecting\tSNV\t14716700\t2.0\t2.0\t0.1359000319365075\t0.14461519186929045\t0.1359000319365075\t0.14461519186929045\nB5\tTP53\tnon_protein_affecting\tall_types\t14716700\t2.0\t2.0\t0.1359000319365075\t0.14461519186929045\t0.1359000319365075\t0.14461519186929045\nB5\tTP53\tprotein_affecting\tDELETION-INSERTION\t6670494\t1\t2\t0.14991393441025505\t0.16241546883904937\t0.2998278688205101\t0.32483093767809873\nB5\tTP53\tprotein_affecting\tDELETION-INSERTION-SNV\t6670494\t3\t4\t0.44974180323076524\t0.48724640651714807\t0.5996557376410202\t0.6496618753561975\nB5\tTP53\tprotein_affecting\tSNV\t6670494\t2\t2\t0.2998278688205101\t0.32483093767809873\t0.2998278688205101\t0.32483093767809873\nB5\tTP53\tprotein_affecting\tall_types\t6670494\t3\t4\t0.44974180323076524\t0.48724640651714807\t0.5996557376410202\t0.6496618753561975\nB5\tTP53\tsynonymous\tDELETION-INSERTION\t2477222\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB5\tTP53\tsynonymous\tDELETION-INSERTION-SNV\t2477222\t1.0\t1.0\t0.4036779909107864\t0.6288012344625835\t0.4036779909107864\t0.6288012344625835\nB5\tTP53\tsynonymous\tSNV\t2477222\t1.0\t1.0\t0.4036779909107864\t0.6288012344625835\t0.4036779909107864\t0.6288012344625835\nB5\tTP53\tsynonymous\tall_types\t2477222\t1.0\t1.0\t0.4036779909107864\t0.6288012344625835\t0.4036779909107864\t0.6288012344625835\nB6\tALL_GENES\tall\tDELETION-INSERTION\t13180987\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB6\tALL_GENES\tall\tDELETION-INSERTION-SNV\t13180987\t5.0\t5.0\t0.3793342638149935\t0.3793342638149935\t0.3793342638149935\t0.3793342638149935\nB6\tALL_GENES\tall\tSNV\t13180987\t5.0\t5.0\t0.3793342638149935\t0.3793342638149935\t0.3793342638149935\t0.3793342638149935\nB6\tALL_GENES\tall\tall_types\t13180987\t5.0\t5.0\t0.3793342638149935\t0.3793342638149935\t0.3793342638149935\t0.3793342638149935\nB6\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION\t9358692\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB6\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION-SNV\t9358692\t2.0\t2.0\t0.21370507758990254\t0.22577462710121862\t0.21370507758990254\t0.22577462710121862\nB6\tALL_GENES\tnon_protein_affecting\tSNV\t9358692\t2.0\t2.0\t0.21370507758990254\t0.22577462710121862\t0.21370507758990254\t0.22577462710121862\nB6\tALL_GENES\tnon_protein_affecting\tall_types\t9358692\t2.0\t2.0\t0.21370507758990254\t0.22577462710121862\t0.21370507758990254\t0.22577462710121862\nB6\tALL_GENES\tprotein_affecting\tDELETION-INSERTION\t3742477\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB6\tALL_GENES\tprotein_affecting\tDELETION-INSERTION-SNV\t3742477\t2.0\t2.0\t0.534405421863648\t0.5789506846912026\t0.534405421863648\t0.5789506846912026\nB6\tALL_GENES\tprotein_affecting\tSNV\t3742477\t2.0\t2.0\t0.534405421863648\t0.5789506846912026\t0.534405421863648\t0.5789506846912026\nB6\tALL_GENES\tprotein_affecting\tall_types\t3742477\t2.0\t2.0\t0.534405421863648\t0.5789506846912026\t0.534405421863648\t0.5789506846912026\nB6\tTP53\tall\tDELETION-INSERTION\t13180987\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB6\tTP53\tall\tDELETION-INSERTION-SNV\t13180987\t5.0\t5.0\t0.3793342638149935\t0.3793342638149935\t0.3793342638149935\t0.3793342638149935\nB6\tTP53\tall\tSNV\t13180987\t5.0\t5.0\t0.3793342638149935\t0.3793342638149935\t0.3793342638149935\t0.3793342638149935\nB6\tTP53\tall\tall_types\t13180987\t5.0\t5.0\t0.3793342638149935\t0.3793342638149935\t0.3793342638149935\t0.3793342638149935\nB6\tTP53\tnon_protein_affecting\tDELETION-INSERTION\t9358692\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB6\tTP53\tnon_protein_affecting\tDELETION-INSERTION-SNV\t9358692\t2.0\t2.0\t0.21370507758990254\t0.22577462710121857\t0.21370507758990254\t0.22577462710121857\nB6\tTP53\tnon_protein_affecting\tSNV\t9358692\t2.0\t2.0\t0.21370507758990254\t0.22577462710121857\t0.21370507758990254\t0.22577462710121857\nB6\tTP53\tnon_protein_affecting\tall_types\t9358692\t2.0\t2.0\t0.21370507758990254\t0.22577462710121857\t0.21370507758990254\t0.22577462710121857\nB6\tTP53\tprotein_affecting\tDELETION-INSERTION\t3742477\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB6\tTP53\tprotein_affecting\tDELETION-INSERTION-SNV\t3742477\t2.0\t2.0\t0.534405421863648\t0.5789506846912027\t0.534405421863648\t0.5789506846912027\nB6\tTP53\tprotein_affecting\tSNV\t3742477\t2.0\t2.0\t0.534405421863648\t0.5789506846912027\t0.534405421863648\t0.5789506846912027\nB6\tTP53\tprotein_affecting\tall_types\t3742477\t2.0\t2.0\t0.534405421863648\t0.5789506846912027\t0.534405421863648\t0.5789506846912027\nB7\tALL_GENES\tall\tDELETION-INSERTION\t12385712\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB7\tALL_GENES\tall\tDELETION-INSERTION-SNV\t12385712\t7.0\t7.0\t0.5651673476664079\t0.5651673476664079\t0.5651673476664079\t0.5651673476664079\nB7\tALL_GENES\tall\tSNV\t12385712\t7.0\t7.0\t0.5651673476664079\t0.5651673476664079\t0.5651673476664079\t0.5651673476664079\nB7\tALL_GENES\tall\tall_types\t12385712\t7.0\t7.0\t0.5651673476664079\t0.5651673476664079\t0.5651673476664079\t0.5651673476664079\nB7\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION\t8624786\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB7\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION-SNV\t8624786\t1.0\t1.0\t0.11594490576345894\t0.12309485073723557\t0.11594490576345894\t0.12309485073723557\nB7\tALL_GENES\tnon_protein_affecting\tSNV\t8624786\t1.0\t1.0\t0.11594490576345894\t0.12309485073723557\t0.11594490576345894\t0.12309485073723557\nB7\tALL_GENES\tnon_protein_affecting\tall_types\t8624786\t1.0\t1.0\t0.11594490576345894\t0.12309485073723557\t0.11594490576345894\t0.12309485073723557\nB7\tALL_GENES\tprotein_affecting\tDELETION-INSERTION\t3750012\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB7\tALL_GENES\tprotein_affecting\tDELETION-INSERTION-SNV\t3750012\t5.0\t5.0\t1.33332906668032\t1.4442054337940609\t1.33332906668032\t1.4442054337940609\nB7\tALL_GENES\tprotein_affecting\tSNV\t3750012\t5.0\t5.0\t1.33332906668032\t1.4442054337940609\t1.33332906668032\t1.4442054337940609\nB7\tALL_GENES\tprotein_affecting\tall_types\t3750012\t5.0\t5.0\t1.33332906668032\t1.4442054337940609\t1.33332906668032\t1.4442054337940609\nB7\tTP53\tall\tDELETION-INSERTION\t12385712\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB7\tTP53\tall\tDELETION-INSERTION-SNV\t12385712\t7.0\t7.0\t0.5651673476664079\t0.5651673476664079\t0.5651673476664079\t0.5651673476664079\nB7\tTP53\tall\tSNV\t12385712\t7.0\t7.0\t0.5651673476664079\t0.5651673476664079\t0.5651673476664079\t0.5651673476664079\nB7\tTP53\tall\tall_types\t12385712\t7.0\t7.0\t0.5651673476664079\t0.5651673476664079\t0.5651673476664079\t0.5651673476664079\nB7\tTP53\tnon_protein_affecting\tDELETION-INSERTION\t8624786\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB7\tTP53\tnon_protein_affecting\tDELETION-INSERTION-SNV\t8624786\t1.0\t1.0\t0.11594490576345894\t0.12309485073723557\t0.11594490576345894\t0.12309485073723557\nB7\tTP53\tnon_protein_affecting\tSNV\t8624786\t1.0\t1.0\t0.11594490576345894\t0.12309485073723557\t0.11594490576345894\t0.12309485073723557\nB7\tTP53\tnon_protein_affecting\tall_types\t8624786\t1.0\t1.0\t0.11594490576345894\t0.12309485073723557\t0.11594490576345894\t0.12309485073723557\nB7\tTP53\tprotein_affecting\tDELETION-INSERTION\t3750012\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB7\tTP53\tprotein_affecting\tDELETION-INSERTION-SNV\t3750012\t5.0\t5.0\t1.33332906668032\t1.4442054337940606\t1.33332906668032\t1.4442054337940606\nB7\tTP53\tprotein_affecting\tSNV\t3750012\t5.0\t5.0\t1.33332906668032\t1.4442054337940606\t1.33332906668032\t1.4442054337940606\nB7\tTP53\tprotein_affecting\tall_types\t3750012\t5.0\t5.0\t1.33332906668032\t1.4442054337940606\t1.33332906668032\t1.4442054337940606\nB8\tALL_GENES\tall\tDELETION-INSERTION\t7204555\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB8\tALL_GENES\tall\tDELETION-INSERTION-SNV\t7204555\t2.0\t2.0\t0.2776021558583424\t0.27760215585834247\t0.2776021558583424\t0.27760215585834247\nB8\tALL_GENES\tall\tSNV\t7204555\t2.0\t2.0\t0.2776021558583424\t0.27760215585834247\t0.2776021558583424\t0.27760215585834247\nB8\tALL_GENES\tall\tall_types\t7204555\t2.0\t2.0\t0.2776021558583424\t0.27760215585834247\t0.2776021558583424\t0.27760215585834247\nB8\tALL_GENES\tprotein_affecting\tDELETION-INSERTION\t2014236\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB8\tALL_GENES\tprotein_affecting\tDELETION-INSERTION-SNV\t2014236\t2.0\t2.0\t0.9929323078328458\t1.0759716696659376\t0.9929323078328458\t1.0759716696659376\nB8\tALL_GENES\tprotein_affecting\tSNV\t2014236\t2.0\t2.0\t0.9929323078328458\t1.0759716696659376\t0.9929323078328458\t1.0759716696659376\nB8\tALL_GENES\tprotein_affecting\tall_types\t2014236\t2.0\t2.0\t0.9929323078328458\t1.0759716696659376\t0.9929323078328458\t1.0759716696659376\nB8\tTP53\tall\tDELETION-INSERTION\t7204555\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB8\tTP53\tall\tDELETION-INSERTION-SNV\t7204555\t2.0\t2.0\t0.2776021558583424\t0.2776021558583424\t0.2776021558583424\t0.2776021558583424\nB8\tTP53\tall\tSNV\t7204555\t2.0\t2.0\t0.2776021558583424\t0.2776021558583424\t0.2776021558583424\t0.2776021558583424\nB8\tTP53\tall\tall_types\t7204555\t2.0\t2.0\t0.2776021558583424\t0.2776021558583424\t0.2776021558583424\t0.2776021558583424\nB8\tTP53\tprotein_affecting\tDELETION-INSERTION\t2014236\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB8\tTP53\tprotein_affecting\tDELETION-INSERTION-SNV\t2014236\t2.0\t2.0\t0.9929323078328458\t1.0759716696659376\t0.9929323078328458\t1.0759716696659376\nB8\tTP53\tprotein_affecting\tSNV\t2014236\t2.0\t2.0\t0.9929323078328458\t1.0759716696659376\t0.9929323078328458\t1.0759716696659376\nB8\tTP53\tprotein_affecting\tall_types\t2014236\t2.0\t2.0\t0.9929323078328458\t1.0759716696659376\t0.9929323078328458\t1.0759716696659376\nB9\tALL_GENES\tall\tDELETION-INSERTION\t15057948\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB9\tALL_GENES\tall\tDELETION-INSERTION-SNV\t15057948\t2.0\t2.0\t0.1328202222507343\t0.1328202222507343\t0.1328202222507343\t0.1328202222507343\nB9\tALL_GENES\tall\tSNV\t15057948\t2.0\t2.0\t0.1328202222507343\t0.1328202222507343\t0.1328202222507343\t0.1328202222507343\nB9\tALL_GENES\tall\tall_types\t15057948\t2.0\t2.0\t0.1328202222507343\t0.1328202222507343\t0.1328202222507343\t0.1328202222507343\nB9\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION\t10688964\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB9\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION-SNV\t10688964\t1.0\t1.0\t0.09355443614554226\t0.09887430287848804\t0.09355443614554226\t0.09887430287848804\nB9\tALL_GENES\tnon_protein_affecting\tSNV\t10688964\t1.0\t1.0\t0.09355443614554226\t0.09887430287848804\t0.09355443614554226\t0.09887430287848804\nB9\tALL_GENES\tnon_protein_affecting\tall_types\t10688964\t1.0\t1.0\t0.09355443614554226\t0.09887430287848804\t0.09355443614554226\t0.09887430287848804\nB9\tALL_GENES\tprotein_affecting\tDELETION-INSERTION\t4328385\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB9\tALL_GENES\tprotein_affecting\tDELETION-INSERTION-SNV\t4328385\t1.0\t1.0\t0.23103305274369076\t0.2500663092496694\t0.23103305274369076\t0.2500663092496694\nB9\tALL_GENES\tprotein_affecting\tSNV\t4328385\t1.0\t1.0\t0.23103305274369076\t0.2500663092496694\t0.23103305274369076\t0.2500663092496694\nB9\tALL_GENES\tprotein_affecting\tall_types\t4328385\t1.0\t1.0\t0.23103305274369076\t0.2500663092496694\t0.23103305274369076\t0.2500663092496694\nB9\tTP53\tall\tDELETION-INSERTION\t15057948\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB9\tTP53\tall\tDELETION-INSERTION-SNV\t15057948\t2.0\t2.0\t0.1328202222507343\t0.1328202222507343\t0.1328202222507343\t0.1328202222507343\nB9\tTP53\tall\tSNV\t15057948\t2.0\t2.0\t0.1328202222507343\t0.1328202222507343\t0.1328202222507343\t0.1328202222507343\nB9\tTP53\tall\tall_types\t15057948\t2.0\t2.0\t0.1328202222507343\t0.1328202222507343\t0.1328202222507343\t0.1328202222507343\nB9\tTP53\tnon_protein_affecting\tDELETION-INSERTION\t10688964\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB9\tTP53\tnon_protein_affecting\tDELETION-INSERTION-SNV\t10688964\t1.0\t1.0\t0.09355443614554226\t0.09887430287848802\t0.09355443614554226\t0.09887430287848802\nB9\tTP53\tnon_protein_affecting\tSNV\t10688964\t1.0\t1.0\t0.09355443614554226\t0.09887430287848802\t0.09355443614554226\t0.09887430287848802\nB9\tTP53\tnon_protein_affecting\tall_types\t10688964\t1.0\t1.0\t0.09355443614554226\t0.09887430287848802\t0.09355443614554226\t0.09887430287848802\nB9\tTP53\tprotein_affecting\tDELETION-INSERTION\t4328385\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nB9\tTP53\tprotein_affecting\tDELETION-INSERTION-SNV\t4328385\t1.0\t1.0\t0.23103305274369076\t0.2500663092496694\t0.23103305274369076\t0.2500663092496694\nB9\tTP53\tprotein_affecting\tSNV\t4328385\t1.0\t1.0\t0.23103305274369076\t0.2500663092496694\t0.23103305274369076\t0.2500663092496694\nB9\tTP53\tprotein_affecting\tall_types\t4328385\t1.0\t1.0\t0.23103305274369076\t0.2500663092496694\t0.23103305274369076\t0.2500663092496694\nall_samples\tALL_GENES\tall\tDELETION-INSERTION\t186204507\t3\t4\t0.016111317864072966\t0.016111317864072966\t0.02148175715209729\t0.02148175715209729\nall_samples\tALL_GENES\tall\tDELETION-INSERTION-SNV\t186204507\t90\t2032\t0.48333953592218903\t0.48333953592218903\t10.912732633265424\t10.912732633265424\nall_samples\tALL_GENES\tall\tSNV\t186204507\t87\t2028\t0.4672282180581161\t0.4672282180581161\t10.891250876113327\t10.891250876113327\nall_samples\tALL_GENES\tall\tall_types\t186204507\t90\t2032\t0.48333953592218903\t0.48333953592218903\t10.912732633265424\t10.912732633265424\nall_samples\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION\t130752666\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nall_samples\tALL_GENES\tnon_protein_affecting\tDELETION-INSERTION-SNV\t130752666\t38.0\t45.0\t0.29062504928197797\t0.3078161669360301\t0.34416124257076336\t0.36451914505582517\nall_samples\tALL_GENES\tnon_protein_affecting\tSNV\t130752666\t38.0\t45.0\t0.29062504928197797\t0.3078161669360301\t0.34416124257076336\t0.36451914505582517\nall_samples\tALL_GENES\tnon_protein_affecting\tall_types\t130752666\t38.0\t45.0\t0.29062504928197797\t0.3078161669360301\t0.34416124257076336\t0.36451914505582517\nall_samples\tALL_GENES\tprotein_affecting\tDELETION-INSERTION\t54666233\t3\t4\t0.05487848412748689\t0.05944201542353863\t0.07317131216998252\t0.07925602056471817\nall_samples\tALL_GENES\tprotein_affecting\tDELETION-INSERTION-SNV\t54666233\t47\t1982\t0.8597629179972947\t0.9312582416354385\t36.25638518022634\t39.27135818981785\nall_samples\tALL_GENES\tprotein_affecting\tSNV\t54666233\t44\t1978\t0.8048844338698077\t0.8718162262118998\t36.183213868056356\t39.19210216925313\nall_samples\tALL_GENES\tprotein_affecting\tall_types\t54666233\t47\t1982\t0.8597629179972947\t0.9312582416354385\t36.25638518022634\t39.27135818981785\nall_samples\tALL_GENES\tsynonymous\tDELETION-INSERTION\t20382442\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nall_samples\tALL_GENES\tsynonymous\tDELETION-INSERTION-SNV\t20382442\t8.0\t8.0\t0.39249467752686357\t0.611616960811102\t0.39249467752686357\t0.611616960811102\nall_samples\tALL_GENES\tsynonymous\tSNV\t20382442\t8.0\t8.0\t0.39249467752686357\t0.611616960811102\t0.39249467752686357\t0.611616960811102\nall_samples\tALL_GENES\tsynonymous\tall_types\t20382442\t8.0\t8.0\t0.39249467752686357\t0.611616960811102\t0.39249467752686357\t0.611616960811102\nall_samples\tTP53\tall\tDELETION-INSERTION\t186204507\t3\t4\t0.016111317864072966\t0.016111317864072966\t0.02148175715209729\t0.02148175715209729\nall_samples\tTP53\tall\tDELETION-INSERTION-SNV\t186204507\t90\t2032\t0.48333953592218903\t0.48333953592218903\t10.912732633265424\t10.912732633265424\nall_samples\tTP53\tall\tSNV\t186204507\t87\t2028\t0.4672282180581161\t0.4672282180581161\t10.891250876113327\t10.891250876113327\nall_samples\tTP53\tall\tall_types\t186204507\t90\t2032\t0.48333953592218903\t0.48333953592218903\t10.912732633265424\t10.912732633265424\nall_samples\tTP53\tnon_protein_affecting\tDELETION-INSERTION\t130752666\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nall_samples\tTP53\tnon_protein_affecting\tDELETION-INSERTION-SNV\t130752666\t38.0\t45.0\t0.29062504928197797\t0.3078161669360301\t0.34416124257076336\t0.36451914505582517\nall_samples\tTP53\tnon_protein_affecting\tSNV\t130752666\t38.0\t45.0\t0.29062504928197797\t0.3078161669360301\t0.34416124257076336\t0.36451914505582517\nall_samples\tTP53\tnon_protein_affecting\tall_types\t130752666\t38.0\t45.0\t0.29062504928197797\t0.3078161669360301\t0.34416124257076336\t0.36451914505582517\nall_samples\tTP53\tprotein_affecting\tDELETION-INSERTION\t54666233\t3\t4\t0.05487848412748689\t0.05944201542353863\t0.07317131216998252\t0.07925602056471817\nall_samples\tTP53\tprotein_affecting\tDELETION-INSERTION-SNV\t54666233\t47\t1982\t0.8597629179972947\t0.9312582416354385\t36.25638518022634\t39.27135818981785\nall_samples\tTP53\tprotein_affecting\tSNV\t54666233\t44\t1978\t0.8048844338698077\t0.8718162262118998\t36.183213868056356\t39.19210216925313\nall_samples\tTP53\tprotein_affecting\tall_types\t54666233\t47\t1982\t0.8597629179972947\t0.9312582416354385\t36.25638518022634\t39.27135818981785\nall_samples\tTP53\tsynonymous\tDELETION-INSERTION\t20382442\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\nall_samples\tTP53\tsynonymous\tDELETION-INSERTION-SNV\t20382442\t8.0\t8.0\t0.39249467752686357\t0.611616960811102\t0.39249467752686357\t0.611616960811102\nall_samples\tTP53\tsynonymous\tSNV\t20382442\t8.0\t8.0\t0.39249467752686357\t0.611616960811102\t0.39249467752686357\t0.611616960811102\nall_samples\tTP53\tsynonymous\tall_types\t20382442\t8.0\t8.0\t0.39249467752686357\t0.611616960811102\t0.39249467752686357\t0.611616960811102" + ], + "meta": { + "nf-test": "0.9.5", + "nextflow": "25.04.6" + }, + "timestamp": "2026-03-19T18:37:42.110245706" + }, + "mutational_profile": { + "content": [ + "all_samples.all.profile.tsv:md5,9be4f1f6d5fdfae9a81d4aae1dd26487" + ], + "meta": { + "nf-test": "0.9.5", + "nextflow": "25.04.6" + }, + "timestamp": "2026-03-19T15:26:19.719365814" + }, + "omega_results": { + "content": [ + "gene\tsample\timpact\tmutations\tdnds\tpvalue\tlower\tupper\nALL_GENES\tB1\tmissense\t3\t0.36\t0.03\t0.09\t0.93\nALL_GENES\tB1\tnonsynonymous_splice\t3\t0.32\t0.02\t0.08\t0.84\nALL_GENES\tB11\tmissense\t3\t1.15\t0.81\t0.29\t3.00\nALL_GENES\tB11\tnonsynonymous_splice\t3\t1.02\t0.98\t0.25\t2.65\nALL_GENES\tB13\tmissense\t5\t0.69\t0.38\t0.25\t1.49\nALL_GENES\tB13\tnonsense\t1\t2.46\t0.44\t0.14\t11.00\nALL_GENES\tB13\tnonsynonymous_splice\t6\t0.75\t0.46\t0.30\t1.53\nALL_GENES\tB13\ttruncating\t1\t1.27\t0.82\t0.07\t5.66\nALL_GENES\tB4a\tmissense\t5\t1.83\t0.22\t0.65\t3.95\nALL_GENES\tB4a\tnonsense\t1\t5.94\t0.17\t0.34\t26.55\nALL_GENES\tB4a\tnonsynonymous_splice\t6\t1.94\t0.15\t0.77\t3.95\nALL_GENES\tB4a\ttruncating\t1\t2.84\t0.37\t0.16\t12.64\nALL_GENES\tB5\tmissense\t2\t0.70\t0.59\t0.12\t2.17\nALL_GENES\tB5\tnonsynonymous_splice\t2\t0.64\t0.49\t0.11\t1.98\nALL_GENES\tall_samples\tessential_splice\t2\t1.83\t0.44\t0.30\t5.75\nALL_GENES\tall_samples\tmissense\t39\t1.87\t0.00\t1.32\t2.57\nALL_GENES\tall_samples\tnonsense\t3\t2.52\t0.17\t0.62\t6.67\nALL_GENES\tall_samples\tnonsynonymous_splice\t44\t1.90\t0.00\t1.37\t2.57\nALL_GENES\tall_samples\ttruncating\t5\t2.19\t0.12\t0.78\t4.78\nTP53\tB1\tmissense\t3\t0.36\t0.03\t0.09\t0.93\nTP53\tB1\tnonsynonymous_splice\t3\t0.32\t0.02\t0.08\t0.84\nTP53\tB11\tmissense\t3\t1.15\t0.81\t0.29\t3.00\nTP53\tB11\tnonsynonymous_splice\t3\t1.02\t0.98\t0.25\t2.65\nTP53\tB13\tmissense\t5\t0.69\t0.38\t0.25\t1.49\nTP53\tB13\tnonsense\t1\t2.46\t0.44\t0.14\t11.00\nTP53\tB13\tnonsynonymous_splice\t6\t0.75\t0.46\t0.30\t1.53\nTP53\tB13\ttruncating\t1\t1.27\t0.82\t0.07\t5.66\nTP53\tB4a\tmissense\t5\t1.83\t0.22\t0.65\t3.95\nTP53\tB4a\tnonsense\t1\t5.94\t0.17\t0.34\t26.55\nTP53\tB4a\tnonsynonymous_splice\t6\t1.94\t0.15\t0.77\t3.95\nTP53\tB4a\ttruncating\t1\t2.84\t0.37\t0.16\t12.64\nTP53\tB5\tmissense\t2\t0.70\t0.59\t0.12\t2.17\nTP53\tB5\tnonsynonymous_splice\t2\t0.64\t0.49\t0.11\t1.98\nTP53\tall_samples\tessential_splice\t2\t1.83\t0.44\t0.30\t5.75\nTP53\tall_samples\tmissense\t39\t1.87\t0.00\t1.32\t2.57\nTP53\tall_samples\tnonsense\t3\t2.52\t0.17\t0.62\t6.67\nTP53\tall_samples\tnonsynonymous_splice\t44\t1.90\t0.00\t1.37\t2.57\nTP53\tall_samples\ttruncating\t5\t2.19\t0.12\t0.78\t4.78" + ], "timestamp": "2026-04-09T09:53:31.390601733", "meta": { "nf-test": "0.9.5", - "nextflow": "25.10.4" - } + "nextflow": "25.04.6" + }, + "timestamp": "2026-03-21T11:23:44.3444377" }, - "TEST 1. Basic functionality - MAF-based processing": { + "MAF-based minimal features test run": { "content": [ "all_samples.all.profile.tsv:md5,347c786848dbab840f61f36f1e051f05" ], - "timestamp": "2026-04-09T09:41:14.087331014", + "timestamp": "2026-04-10T00:56:26.329412266", "meta": { - "nf-test": "0.9.5", - "nextflow": "25.10.4" + "nf-test": "0.9.2", + "nextflow": "25.04.6" } } } \ No newline at end of file diff --git a/tests/nextflow.config b/tests/nextflow.config index af60dffd..b0e66740 100644 --- a/tests/nextflow.config +++ b/tests/nextflow.config @@ -8,14 +8,20 @@ // wgs_trinuc_counts is overridden per-test with the data in assets/ includeConfig '../conf/general_files_IRB.config' -process { - executor = 'slurm' - queue = 'bbg_cpu_zen4,irb_cpu_zen4' - errorStrategy = 'retry' - maxRetries = 2 +// config { +// testsDir = '.' +// workDir = System.getenv('NFT_WORKDIR') ?: '.nf-test' +// configFile = 'tests/nextflow.config' +// } - withLabel:process_high_memory { - memory = { 20.GB * task.attempt } +profiles { + submit_irbcluster { + process { + executor = 'slurm' + queue = 'bbg_cpu_zen4,irb_cpu_zen4' + errorStrategy = 'retry' + maxRetries = 2 + } } } @@ -30,12 +36,20 @@ singularity { runOptions = '-B /data/bbg' } -params { - config_profile_name = 'Test profile' - config_profile_description = 'Test dataset to check pipeline function' +executor { + queueSize = 600 } // Skip nf-schema file-existence validation for params that receive remote HTTP URLs in tests. validation { ignoreParams = ['input_maf', 'custom_depths_table'] -} \ No newline at end of file +} + +process { + // Override the 10m resourceLimits cap from the test profile to allow VEP to complete + resourceLimits = [ cpus: 1, memory: 10.GB, time: 60.min ] +} + +params { + panel_sites_chunk_size = 0 +} diff --git a/tests/test_data/input.csv b/tests/test_data/input.csv index 841a1c18..7f91619b 100644 --- a/tests/test_data/input.csv +++ b/tests/test_data/input.csv @@ -1,4 +1,16 @@ -sample,vcf -P19_0002_BDO_01,path/to/P19_0002_BDO_01.vcf -P19_0002_BTR_01,path/to/P19_0002_BTR_01.vcf -P19_0003_BDO_01,path/to/P19_0003_BDO_01.vcf \ No newline at end of file +sample,vcf,bam +B10,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/mutations_vcf/B10.duplex.filtered.vcf,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/sortbamduplexcons/B10.sorted.bam +B11,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/mutations_vcf/B11.duplex.filtered.vcf,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/sortbamduplexcons/B11.sorted.bam +B12,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/mutations_vcf/B12.duplex.filtered.vcf,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/sortbamduplexcons/B12.sorted.bam +B13,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/mutations_vcf/B13.duplex.filtered.vcf,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/sortbamduplexcons/B13.sorted.bam +B1,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/mutations_vcf/B1.duplex.filtered.vcf,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/sortbamduplexcons/B1.sorted.bam +B2a,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/mutations_vcf/B2a.duplex.filtered.vcf,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/sortbamduplexcons/B2a.sorted.bam +B2b,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/mutations_vcf/B2b.duplex.filtered.vcf,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/sortbamduplexcons/B2b.sorted.bam +B3,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/mutations_vcf/B3.duplex.filtered.vcf,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/sortbamduplexcons/B3.sorted.bam +B4a,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/mutations_vcf/B4a.duplex.filtered.vcf,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/sortbamduplexcons/B4a.sorted.bam +B4b,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/mutations_vcf/B4b.duplex.filtered.vcf,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/sortbamduplexcons/B4b.sorted.bam +B5,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/mutations_vcf/B5.duplex.filtered.vcf,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/sortbamduplexcons/B5.sorted.bam +B6,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/mutations_vcf/B6.duplex.filtered.vcf,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/sortbamduplexcons/B6.sorted.bam +B7,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/mutations_vcf/B7.duplex.filtered.vcf,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/sortbamduplexcons/B7.sorted.bam +B8,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/mutations_vcf/B8.duplex.filtered.vcf,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/sortbamduplexcons/B8.sorted.bam +B9,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/mutations_vcf/B9.duplex.filtered.vcf,/data/bbg/datasets/pipelines/deepCSA/test_datasets/deepUMIcaller_outputs/sortbamduplexcons/B9.sorted.bam diff --git a/tests/test_data/input_maf.csv b/tests/test_data/input_maf.csv new file mode 100644 index 00000000..7c3b2e84 --- /dev/null +++ b/tests/test_data/input_maf.csv @@ -0,0 +1,4 @@ +sample,vcf +P19_0002_BDO_01,path/to/P19_0002_BDO_01.vcf +P19_0002_BTR_01,path/to/P19_0002_BTR_01.vcf +P19_0003_BDO_01,path/to/P19_0003_BDO_01.vcf