From ffff3de3585e79e0d7be82be021a9d9eb047a178 Mon Sep 17 00:00:00 2001 From: "sukanya.denni" <sukanya.denni@inrae.fr> Date: Thu, 10 Aug 2023 14:26:39 +0200 Subject: [PATCH 1/5] added path helper --- workflow/Snakefile | 17 +++++++---- workflow/pre-job_snakefiles/Snakefile1.smk | 16 +++++++--- workflow/pre-job_snakefiles/Snakefile2.smk | 32 ++++++++++++-------- workflow/pre-job_snakefiles/Snakefile3.smk | 19 ++++++++---- workflow/rules/00_runtime.smk | 6 +--- workflow/rules/01_qc.smk | 2 +- workflow/rules/02_asm.smk | 34 +++++++++++----------- workflow/rules/03_asm_qc.smk | 2 +- workflow/rules/07_report.smk | 2 +- workflow/scripts/path_helper.py | 13 +++++++++ 10 files changed, 91 insertions(+), 52 deletions(-) create mode 100644 workflow/scripts/path_helper.py diff --git a/workflow/Snakefile b/workflow/Snakefile index 538fbba..6bc7660 100644 --- a/workflow/Snakefile +++ b/workflow/Snakefile @@ -1,13 +1,21 @@ configfile: ".config/masterconfig.yaml" -res_path=config["root"] + "/" + config["resdir"] - ###### Include all scripts & rules necessary to run the workflow ###### ### Scripts # get parameters from masterconfig include: "scripts/from_config/hifiasm_mode.py" include: "scripts/from_config/parameters.py" include: "scripts/from_config/target_list.py" +include: "scripts/path_helper.py" + +### paths +if config["root"].startswith("."): + abs_root_path = get_abs_root_path() + res_path = get_res_path() +else: + abs_root_path = config["root"] + res_path = abs_root_path + "/" + config["resdir"] + ### Rules ## PRE ASSEMBLY QC @@ -16,11 +24,11 @@ include: "rules/01_qc.smk" include: "rules/02_asm.smk" # Statistics include: "rules/03_asm_qc.smk" -include: "rules/03.5_A_qc_merqury.smk" +include: "rules/03.5_asm_qc_merqury.smk" # Purging include: "rules/04_purge_dups.smk" include: "rules/05_purged_asm_qc.smk" -include: "rules/05.5_PA_qc_merqury.smk" +include: "rules/05.5_purged_asm_qc_merqury.smk" #Â Link final assembly include: "rules/06_sym_link_hap.smk" ## AUTOMATIC REPORT @@ -39,7 +47,6 @@ BID_RUN = run_BFid(bamIDS) FID_RUN = run_BFid(fastqIDS) ###### results path ###### -res_path=config["root"] + "/" + config["resdir"] ###### Target files ###### ## raw data stats diff --git a/workflow/pre-job_snakefiles/Snakefile1.smk b/workflow/pre-job_snakefiles/Snakefile1.smk index 3314ac7..da27514 100644 --- a/workflow/pre-job_snakefiles/Snakefile1.smk +++ b/workflow/pre-job_snakefiles/Snakefile1.smk @@ -29,6 +29,15 @@ def data_ext(dir, id): return(str(config["data"] + "/{id}.tar.gz")) ######################## Snakemake ######################## + +### paths +if config["root"].startswith("."): + abs_root_path = get_abs_root_path() + res_path = get_res_path() +else: + abs_root_path = config["root"] + res_path = abs_root_path + "/" + config["resdir"] + ### get filenames for workflow if config["get_all_tar_filename"]: IDS=get_tar_name(config["data"]) @@ -36,7 +45,6 @@ else: IDS=config["tarIDS"] ###### results path ###### -res_path=config["root"] + "/" + config["resdir"] ### target files rule all: @@ -60,9 +68,9 @@ rule extract_targz_data: # move bam and fasta + fastq files rule move_files: params: - root=config["root"], - bam_path=config["root"] + "/" + config["resdir"] + "/" + config["bamdir"], - fastx_path=config["root"] + "/" + config["resdir"] + "/" + config["fastxdir"], + root=abs_root_path, + bam_path=abs_root_path + "/" + config["resdir"] + "/" + config["bamdir"], + fastx_path=abs_root_path + "/" + config["resdir"] + "/" + config["fastxdir"], shell: "cd {params.root} && " "mkdir -p {params.bam_path} {params.fastx_path} && " diff --git a/workflow/pre-job_snakefiles/Snakefile2.smk b/workflow/pre-job_snakefiles/Snakefile2.smk index b55585c..1dfcd0d 100644 --- a/workflow/pre-job_snakefiles/Snakefile2.smk +++ b/workflow/pre-job_snakefiles/Snakefile2.smk @@ -14,26 +14,34 @@ def get_bams_name(dirpath): return(IDS) ######################## Snakemake ######################## + +### root path +if config["root"].startswith("."): + abs_root_path = get_abs_root_path() + res_path = get_res_path() +else: + abs_root_path = config["root"] + res_path = abs_root_path + "/" + config["resdir"] + ###### results path ###### -res_path=config["root"] + "/" + config["resdir"] ### get filenames -IDS=get_bams_name(config["root"] + "/" + config["resdir"] + "/" + config["bamdir"]) +IDS=get_bams_name(abs_root_path + "/" + config["resdir"] + "/" + config["bamdir"]) ### target files rule all: input: - expand(config["root"] + "/" + config["resdir"] + "/" + config["fastxdir"] + "/{id}.fastq.gz", id=IDS), - expand(config["root"] + "/" + config["resdir"] + "/" + config["fastxdir"] + "/{id}.fasta.gz", id=IDS) + expand(abs_root_path + "/" + config["resdir"] + "/" + config["fastxdir"] + "/{id}.fastq.gz", id=IDS), + expand(abs_root_path + "/" + config["resdir"] + "/" + config["fastxdir"] + "/{id}.fasta.gz", id=IDS) ### rules ## PacBio .bam conversion with smrtlink # .bam.pbi needed for bam_to_ conversion rules rule smrtlink_index: input: - config["root"] + "/" + config["resdir"] + "/" + config["bamdir"] + "/{id}.bam" + abs_root_path + "/" + config["resdir"] + "/" + config["bamdir"] + "/{id}.bam" output: - config["root"] + "/" + config["resdir"] + "/" + config["bamdir"] + "/{id}.bam.pbi" + abs_root_path + "/" + config["resdir"] + "/" + config["bamdir"] + "/{id}.bam.pbi" container: "docker://registry.forgemia.inra.fr/asm4pg/genomasm4pg/smrtlink9.0" shell: @@ -42,12 +50,12 @@ rule smrtlink_index: # convert .bam to .fastq.gz rule smrtlink_bam_to_fastq: input: - bam = config["root"] + "/" + config["resdir"] + "/" + config["bamdir"] + "/{id}.bam", + bam = abs_root_path + "/" + config["resdir"] + "/" + config["bamdir"] + "/{id}.bam", bam_pbi = rules.smrtlink_index.output output: - config["root"] + "/" + config["resdir"] + "/" + config["fastxdir"] + "/{id}.fastq.gz" + abs_root_path + "/" + config["resdir"] + "/" + config["fastxdir"] + "/{id}.fastq.gz" params: - prefix=config["root"] + "/" + config["resdir"] + "/" + config["fastxdir"] + "/{id}" + prefix=abs_root_path + "/" + config["resdir"] + "/" + config["fastxdir"] + "/{id}" priority: 2 container: "docker://registry.forgemia.inra.fr/asm4pg/genomasm4pg/smrtlink9.0" @@ -57,12 +65,12 @@ rule smrtlink_bam_to_fastq: # convert .bam to .fasta.gz rule smrtlink_bam_to_fasta: input: - bam = config["root"] + "/" + config["resdir"] + "/" + config["bamdir"] + "/{id}.bam", + bam = abs_root_path + "/" + config["resdir"] + "/" + config["bamdir"] + "/{id}.bam", bam_pbi = rules.smrtlink_index.output output: - config["root"] + "/" + config["resdir"] + "/" + config["fastxdir"] + "/{id}.fasta.gz" + abs_root_path + "/" + config["resdir"] + "/" + config["fastxdir"] + "/{id}.fasta.gz" params: - prefix=config["root"] + "/" + config["resdir"] + "/" + config["fastxdir"] + "/{id}" + prefix=abs_root_path + "/" + config["resdir"] + "/" + config["fastxdir"] + "/{id}" priority: 2 container: "docker://registry.forgemia.inra.fr/asm4pg/genomasm4pg/smrtlink9.0" diff --git a/workflow/pre-job_snakefiles/Snakefile3.smk b/workflow/pre-job_snakefiles/Snakefile3.smk index d0ab492..757ab6b 100644 --- a/workflow/pre-job_snakefiles/Snakefile3.smk +++ b/workflow/pre-job_snakefiles/Snakefile3.smk @@ -17,26 +17,33 @@ def get_fastq_name(dirpath): return(IDS) ######################## Snakemake ######################## +### root path +if config["root"].startswith("."): + abs_root_path = get_abs_root_path() + res_path = get_res_path() +else: + abs_root_path = config["root"] + res_path = abs_root_path + "/" + config["resdir"] + ###### results path ###### -res_path=config["root"] + "/" + config["resdir"] ### get filenames -IDS = get_fastq_name(config["root"] + "/" + config["resdir"] + "/" + config["fastxdir"]) +IDS = get_fastq_name(abs_root_path + "/" + config["resdir"] + "/" + config["fastxdir"]) ### target files rule all: input: - expand(config["root"] + "/" + config["resdir"] + "/" + config["fastxdir"] + "/{id}.fasta.gz", id=IDS) + expand(abs_root_path + "/" + config["resdir"] + "/" + config["fastxdir"] + "/{id}.fasta.gz", id=IDS) ### rules # if only fastq : convert to fasta with seqtk + zip rule convert_to_fasta: input: - config["root"] + "/" + config["resdir"] + "/" + config["fastxdir"] + "/{id}.fastq.gz" + abs_root_path + "/" + config["resdir"] + "/" + config["fastxdir"] + "/{id}.fastq.gz" output: - config["root"] + "/" + config["resdir"] + "/" + config["fastxdir"] + "/{id}.fasta.gz" + abs_root_path + "/" + config["resdir"] + "/" + config["fastxdir"] + "/{id}.fasta.gz" params: - path=config["root"] + "/" + config["resdir"] + "/" + config["fastxdir"] + path=abs_root_path + "/" + config["resdir"] + "/" + config["fastxdir"] threads: 10 container: "docker://registry.forgemia.inra.fr/asm4pg/genomasm4pg/seqtk1.3" diff --git a/workflow/rules/00_runtime.smk b/workflow/rules/00_runtime.smk index f53da68..2c408ba 100644 --- a/workflow/rules/00_runtime.smk +++ b/workflow/rules/00_runtime.smk @@ -28,8 +28,6 @@ rule elasped_time: with open(output[0], "w") as out: out.write("Runtime (hh:mm:ss): " + str(td)) - # os.remove(input[0]) - rule elasped_time_trio: input: @@ -49,6 +47,4 @@ rule elasped_time_trio: td = timedelta(seconds=elapsed_time) with open(output[0], "w") as out: - out.write("Runtime (hh:mm:ss): " + str(td)) - - # os.remove(input[0]) \ No newline at end of file + out.write("Runtime (hh:mm:ss): " + str(td)) \ No newline at end of file diff --git a/workflow/rules/01_qc.smk b/workflow/rules/01_qc.smk index 8493080..bf963a2 100644 --- a/workflow/rules/01_qc.smk +++ b/workflow/rules/01_qc.smk @@ -1,7 +1,7 @@ ### QC on .bam files with LongQC rule longqc: input: - config["root"] + "/" + config["resdir"] + "/" + config["bamdir"] + "/{Bid}.bam" + abs_root_path + "/" + config["resdir"] + "/" + config["bamdir"] + "/{Bid}.bam" output: directory(res_path + "/{Bid}/{run}/01_raw_data_QC/02_longQC") benchmark: diff --git a/workflow/rules/02_asm.smk b/workflow/rules/02_asm.smk index 83c9b24..ee20083 100644 --- a/workflow/rules/02_asm.smk +++ b/workflow/rules/02_asm.smk @@ -5,12 +5,12 @@ rule hifiasm: input: get_fasta output: - hap1 = config["root"] + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}.bp.hap1.p_ctg.gfa", - hap2 = config["root"] + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}.bp.hap2.p_ctg.gfa" + hap1 = abs_root_path + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}.bp.hap1.p_ctg.gfa", + hap2 = abs_root_path + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}.bp.hap2.p_ctg.gfa" params: - prefix = config["root"] + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}" + prefix = abs_root_path + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}" benchmark: - config["root"] + "/" + config["resdir"] + "/{runid}/benchmark/{id}_hifiasm_benchmark.txt" + abs_root_path + "/" + config["resdir"] + "/{runid}/benchmark/{id}_hifiasm_benchmark.txt" threads: 20 resources: mem_mb=250000 @@ -28,12 +28,12 @@ rule hifiasm_hic: # hifi reads hifi = get_fasta output: - hap1 = config["root"] + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}.hic.hap1.p_ctg.gfa", - hap2 = config["root"] + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}.hic.hap2.p_ctg.gfa" + hap1 = abs_root_path + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}.hic.hap1.p_ctg.gfa", + hap2 = abs_root_path + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}.hic.hap2.p_ctg.gfa" params: - prefix= config["root"] + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}" + prefix= abs_root_path + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}" benchmark: - config["root"] + "/" + config["resdir"] + "/{runid}/benchmark/{id}_hifiasm_hic_benchmark.txt" + abs_root_path + "/" + config["resdir"] + "/{runid}/benchmark/{id}_hifiasm_hic_benchmark.txt" threads: 20 resources: mem_mb=250000 @@ -48,10 +48,10 @@ rule yak: p1 = get_p1, p2 = get_p2 output: - p1 = config["root"] + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/yak/{id}_parent1.yak", - p2 = config["root"] + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/yak/{id}_parent2.yak" + p1 = abs_root_path + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/yak/{id}_parent1.yak", + p2 = abs_root_path + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/yak/{id}_parent2.yak" benchmark: - config["root"] + "/" + config["resdir"] + "/{runid}/benchmark/{id}_yak_benchmark.txt" + abs_root_path + "/" + config["resdir"] + "/{runid}/benchmark/{id}_yak_benchmark.txt" container: "docker://registry.forgemia.inra.fr/asm4pg/genomasm4pg/hifiasm0.16.1" shell: @@ -65,12 +65,12 @@ rule hifiasm_trio: p2 = rules.yak.output.p2, child = get_fasta output: - hap1 = config["root"] + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}.dip.hap1.p_ctg.gfa", - hap2 = config["root"] + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}.dip.hap2.p_ctg.gfa" + hap1 = abs_root_path + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}.dip.hap1.p_ctg.gfa", + hap2 = abs_root_path + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}.dip.hap2.p_ctg.gfa" params: - prefix = config["root"] + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}" + prefix = abs_root_path + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}" benchmark: - config["root"] + "/" + config["resdir"] + "/{runid}/benchmark/{id}_hifiasm_trio_benchmark.txt" + abs_root_path + "/" + config["resdir"] + "/{runid}/benchmark/{id}_hifiasm_trio_benchmark.txt" threads: 20 resources: mem_mb=250000 @@ -88,8 +88,8 @@ rule hap_gfa_to_fasta: hap1 = get_mode_hap1, hap2 = get_mode_hap2 output: - hap1_fa = config["root"] + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}_hap1.fa.gz", - hap2_fa = config["root"] + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}_hap2.fa.gz" + hap1_fa = abs_root_path + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}_hap1.fa.gz", + hap2_fa = abs_root_path + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}_hap2.fa.gz" params: pigz_p = config["pigz_threads"] threads: config["pigz_threads"] diff --git a/workflow/rules/03_asm_qc.smk b/workflow/rules/03_asm_qc.smk index c3ea246..f32a480 100644 --- a/workflow/rules/03_asm_qc.smk +++ b/workflow/rules/03_asm_qc.smk @@ -1,5 +1,5 @@ # input haplotypes -HAP_FA_GZ = config["root"] + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}_hap{n}.fa.gz" +HAP_FA_GZ = abs_root_path + "/" + config["resdir"] + "/{runid}/02_genome_assembly/01_raw_assembly/00_assembly/{id}_hap{n}.fa.gz" # unzip fasta rule unzip_hap_fasta: diff --git a/workflow/rules/07_report.smk b/workflow/rules/07_report.smk index a232165..e84bc94 100644 --- a/workflow/rules/07_report.smk +++ b/workflow/rules/07_report.smk @@ -1,6 +1,6 @@ ### create report at the end of the workflow + # path variables -res_path=config["root"] + "/" + config["resdir"] RAW_QC = res_path + "/{runid}/01_raw_data_QC" ASM_QC = res_path + "/{runid}/02_genome_assembly/01_raw_assembly/01_assembly_QC" P_ASM_QC = res_path + "/{runid}/02_genome_assembly/02_after_purge_dups_assembly/01_assembly_QC" diff --git a/workflow/scripts/path_helper.py b/workflow/scripts/path_helper.py new file mode 100644 index 0000000..1aa7e2e --- /dev/null +++ b/workflow/scripts/path_helper.py @@ -0,0 +1,13 @@ +import os + +###### root path ###### +def get_abs_root_path(): + abs_root_path = os.path.abspath(config["root"]) + return(abs_root_path) + + +###### results path ###### +def get_res_path(): + abs_root_path = os.path.abspath(config["root"]) + res_path= abs_root_path + "/" + config["resdir"] + return(res_path) \ No newline at end of file -- GitLab From bb766507e110b3704df34933d6d33cccd7c55ef5 Mon Sep 17 00:00:00 2001 From: "sukanya.denni" <sukanya.denni@inrae.fr> Date: Fri, 11 Aug 2023 09:08:52 +0200 Subject: [PATCH 2/5] update config root --- .config/masterconfig.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/masterconfig.yaml b/.config/masterconfig.yaml index 827b73d..6f0f25a 100644 --- a/.config/masterconfig.yaml +++ b/.config/masterconfig.yaml @@ -1,5 +1,5 @@ # absolute path to your desired output path -root: /output/path +root: . ####################### optional prejob - data preparation ####################### # path to tar data -- GitLab From dd738a355cc0f235e1accdd232cbfdaa76b4ef55 Mon Sep 17 00:00:00 2001 From: "sukanya.denni" <sukanya.denni@inrae.fr> Date: Fri, 11 Aug 2023 09:09:11 +0200 Subject: [PATCH 3/5] update pages link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7edeb14..823d889 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ This workflow uses [Snakemake](https://snakemake.readthedocs.io/en/stable/) to q A first script (```prejob.sh```) prepares the data until *fasta.gz* files are obtained. A second script (```job.sh```) runs the genome assembly and stats. -doc: [Gitlab pages](https://asm4pg.pages.mia.inra.fr/genomasm4pg) +doc: [Gitlab pages](https://asm4pg.pages.mia.inra.fr/GenomAsm4pg/)  -- GitLab From 8073359bf0dcf945ab16cc30adbcc8419e4d684a Mon Sep 17 00:00:00 2001 From: "sukanya.denni" <sukanya.denni@inrae.fr> Date: Fri, 11 Aug 2023 09:13:57 +0200 Subject: [PATCH 4/5] track slurm_logs directory --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index bef9246..24af5b9 100644 --- a/.gitignore +++ b/.gitignore @@ -51,6 +51,8 @@ !Snakefile !*.smk !*.svg +!slurm_logs/ + # 3) add a pattern to track the file patterns of section2 even if they are in # subdirectories -- GitLab From 9119964d5456a23b3afb1948874d4d597e43f1ab Mon Sep 17 00:00:00 2001 From: "sukanya.denni" <sukanya.denni@inrae.fr> Date: Fri, 11 Aug 2023 13:24:58 +0200 Subject: [PATCH 5/5] added bind function --- job.sh | 15 ++++++++++++--- prejob.sh | 15 ++++++++++++++- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/job.sh b/job.sh index 88686b0..1a5b57e 100644 --- a/job.sh +++ b/job.sh @@ -35,12 +35,23 @@ echo 'scontrol show job:' scontrol show job $SLURM_JOB_ID echo '########################################' +## get SNG_BIND abs path using python +function SNG_BIND_ABS_PATH { + SNG_BIND="$(python3 - <<END +import os + +abs_path = os.getcwd() +print(abs_path) + +END +)" +} +SNG_BIND_ABS_PATH ### variables CLUSTER_CONFIG=".config/snakemake_profile/slurm/cluster_config.yml" MAX_CORES=10 PROFILE=".config/snakemake_profile/slurm" -SNG_BIND="/gpfs/scratch/sdenni/wf/GenomAsm4pg" ### Module Loading: module purge @@ -48,8 +59,6 @@ module load snakemake/6.5.1 echo 'Starting Snakemake workflow' -### create a log directory for slurm output files -mkdir -p slurm_logs ### Snakemake commands diff --git a/prejob.sh b/prejob.sh index d65a60e..ec05113 100644 --- a/prejob.sh +++ b/prejob.sh @@ -35,12 +35,25 @@ echo 'scontrol show job:' scontrol show job $SLURM_JOB_ID echo '########################################' + +## get SNG_BIND abs path using python +function SNG_BIND_ABS_PATH { + SNG_BIND="$(python3 - <<END +import os + +abs_path = os.getcwd() +print(abs_path) + +END +)" +} +SNG_BIND_ABS_PATH + ### variables CLUSTER_CONFIG=".config/snakemake_profile/slurm/cluster_config.yml" MAX_CORES=4 PROFILE=".config/snakemake_profile/slurm" SMK_PATH="workflow/pre-job_snakefiles" -SNG_BIND="/gpfs/scratch/sdenni/wf/GenomAsm4pg" ### Module Loading: module purge -- GitLab