From e30020f438c0e29e6e437ebbcf5a4900939e1f97 Mon Sep 17 00:00:00 2001 From: Kasper Thystrup Karstensen Date: Tue, 4 Aug 2026 13:01:29 +0200 Subject: [PATCH 1/4] Added serovar detector --- .../workflow/envs/serovar_detector.yaml | 3 +++ src/mmaseq/workflow/rules/Analysis.smk | 25 ++++++++++++++++++ src/mmaseq/workflow/rules/Paired_Reads.smk | 26 +++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 src/mmaseq/workflow/envs/serovar_detector.yaml diff --git a/src/mmaseq/workflow/envs/serovar_detector.yaml b/src/mmaseq/workflow/envs/serovar_detector.yaml new file mode 100644 index 0000000..5343a69 --- /dev/null +++ b/src/mmaseq/workflow/envs/serovar_detector.yaml @@ -0,0 +1,3 @@ +name: serovar_detector +dependencies: + - bioconda::serovar_detector diff --git a/src/mmaseq/workflow/rules/Analysis.smk b/src/mmaseq/workflow/rules/Analysis.smk index a1f3eff..881a736 100644 --- a/src/mmaseq/workflow/rules/Analysis.smk +++ b/src/mmaseq/workflow/rules/Analysis.smk @@ -449,6 +449,31 @@ rule serotypefinder: mv $OUTDIR/{params.tmp_results} {output.results} >> {log.stdout} 2>&1 """ + +rule serovar_detector: + input: + assembly = rules.assembly.output.assembly + params: + tmp_results = "serovars.tsv" + output: + results = f"{outdir}/{{sample}}/raw/serovar_detector/serovar_detector.tsv" + conda: + ENVS_DIR / "serovar_detector.yaml" + shell: + """ + INDIR = $(dirname {input.assembly}) + OUTDIR = $(dirname {output.results}) + + cmd="serovar_detector -a $INDIR -o $OUTDIR -t 1" + + echo "Executing command:\n$cmd\n" > {log.stdout} 2>&1 + eval $cmd >> {log.stdout} 2>&1 + + echo "Renaming result files" >> {log.stdout} 2>&1 + mv $OUTDIR/{params.tmp_results} {output.results} >> {log.stdout} 2>&1 + """ + + ### SNP Analysis ### # Samtools and bcftools diff --git a/src/mmaseq/workflow/rules/Paired_Reads.smk b/src/mmaseq/workflow/rules/Paired_Reads.smk index d8670d4..54c5e14 100644 --- a/src/mmaseq/workflow/rules/Paired_Reads.smk +++ b/src/mmaseq/workflow/rules/Paired_Reads.smk @@ -385,6 +385,32 @@ rule PR_serotypefinder: mv $OUTDIR/{params.tmp_results} {output.results} >> {log.stdout} 2>&1 """ + +rule PR_serovar_detector: + input: + R1 = lambda wc: samplesheet.loc[wc.sample, "read1"], + R2 = lambda wc: samplesheet.loc[wc.sample, "read2"] + params: + tmp_results = "serovars.tsv" + output: + results = f"{outdir}/{{sample}}/raw/PR/serovar_detector/serovar_detector.tsv" + conda: + ENVS_DIR / "serovar_detector.yaml" + shell: + """ + INDIR = $(dirname {input.R1}) + OUTDIR = $(dirname {output.results}) + + cmd="serovar_detector -r $INDIR -o $OUTDIR -t 1" + + echo "Executing command:\n$cmd\n" > {log.stdout} 2>&1 + eval $cmd >> {log.stdout} 2>&1 + + echo "Renaming result files" >> {log.stdout} 2>&1 + mv $OUTDIR/{params.tmp_results} {output.results} >> {log.stdout} 2>&1 + """ + + rule PR_lrefinder: input: res = rules.PR_kmeraligner.output.results, From 12c04f133f8a6c9065c4c71da842cd2e45635b78 Mon Sep 17 00:00:00 2001 From: Kasper Thystrup Karstensen Date: Wed, 5 Aug 2026 13:19:12 +0200 Subject: [PATCH 2/4] Added test sample and settings --- src/mmaseq/config/species_configs/A_pleuropneumoniae.yaml | 2 ++ src/mmaseq/data/samplesheet.tsv | 1 + 2 files changed, 3 insertions(+) create mode 100644 src/mmaseq/config/species_configs/A_pleuropneumoniae.yaml diff --git a/src/mmaseq/config/species_configs/A_pleuropneumoniae.yaml b/src/mmaseq/config/species_configs/A_pleuropneumoniae.yaml new file mode 100644 index 0000000..7b6f8bc --- /dev/null +++ b/src/mmaseq/config/species_configs/A_pleuropneumoniae.yaml @@ -0,0 +1,2 @@ +serovar_detector: + reads: True \ No newline at end of file diff --git a/src/mmaseq/data/samplesheet.tsv b/src/mmaseq/data/samplesheet.tsv index 9d872b0..9629a6d 100755 --- a/src/mmaseq/data/samplesheet.tsv +++ b/src/mmaseq/data/samplesheet.tsv @@ -6,3 +6,4 @@ SRR26205262 reads/SRR26205262_1.fastq.gz reads/SRR26205262_2.fastq.gz assemblies ERR2929615 reads/ERR2929615_1.fastq.gz reads/ERR2929615_2.fastq.gz assemblies/ERR2929615.fasta E_Faecalis.yaml ERR2929578 reads/ERR2929578_1.fastq.gz reads/ERR2929578_2.fastq.gz assemblies/ERR2929578.fasta E_Faecium.yaml ERR142064 reads/ERR142064_1.fastq.gz reads/ERR142064_2.fastq.gz assemblies/ERR142064.fasta C_difficile.yaml +ERR14229029 reads/ERR14229029_1.fastq.gz reads/ERR14229029_2.fastq.gz assemblies/ERR14229029.fasta A_pleuropneumoniae.yaml \ No newline at end of file From 83463a7b84deda1c6798d519accbfbf8fcbe8cfe Mon Sep 17 00:00:00 2001 From: Kasper Thystrup Karstensen Date: Wed, 5 Aug 2026 13:36:20 +0200 Subject: [PATCH 3/4] Add serovar_detector configuration to test.yaml --- src/mmaseq/config/species_configs/test.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/mmaseq/config/species_configs/test.yaml b/src/mmaseq/config/species_configs/test.yaml index f8bea16..ca47235 100644 --- a/src/mmaseq/config/species_configs/test.yaml +++ b/src/mmaseq/config/species_configs/test.yaml @@ -98,3 +98,6 @@ sistr: kmeraligner: database : [vancomycin, vancomycinOperon] reads: True + +serovar_detector: + reads: True From 0f3cc915c8a639f3efc5fde7049134852c38e4f2 Mon Sep 17 00:00:00 2001 From: Kasper Thystrup Karstensen Date: Mon, 10 Aug 2026 09:28:10 +0200 Subject: [PATCH 4/4] Fix: Added logs --- src/mmaseq/workflow/rules/Analysis.smk | 2 ++ src/mmaseq/workflow/rules/Paired_Reads.smk | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/mmaseq/workflow/rules/Analysis.smk b/src/mmaseq/workflow/rules/Analysis.smk index 881a736..df91318 100644 --- a/src/mmaseq/workflow/rules/Analysis.smk +++ b/src/mmaseq/workflow/rules/Analysis.smk @@ -459,6 +459,8 @@ rule serovar_detector: results = f"{outdir}/{{sample}}/raw/serovar_detector/serovar_detector.tsv" conda: ENVS_DIR / "serovar_detector.yaml" + log: + stdout = f"{logdir}/serovar_detector_{{sample}}.log" shell: """ INDIR = $(dirname {input.assembly}) diff --git a/src/mmaseq/workflow/rules/Paired_Reads.smk b/src/mmaseq/workflow/rules/Paired_Reads.smk index 54c5e14..cacb294 100644 --- a/src/mmaseq/workflow/rules/Paired_Reads.smk +++ b/src/mmaseq/workflow/rules/Paired_Reads.smk @@ -396,6 +396,8 @@ rule PR_serovar_detector: results = f"{outdir}/{{sample}}/raw/PR/serovar_detector/serovar_detector.tsv" conda: ENVS_DIR / "serovar_detector.yaml" + log: + stdout = f"{logdir}/PR/serovar_detector_{{sample}}.log" shell: """ INDIR = $(dirname {input.R1})