From e72c52ecacb3cb1b6a859ddcca44f8baaef72628 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81lvarez=20Herrera?= Date: Thu, 5 Mar 2026 18:30:47 +0100 Subject: [PATCH 1/9] fix: mask sites before dN and dS calculation --- workflow/envs/bedtools.yaml | 5 +++ workflow/rules/evolution.smk | 15 +++++++++ workflow/scripts/calculate_dnds.R | 16 ++++++++++ workflow/scripts/n_s_sites_from_fasta.py | 40 ++++++++++++++++++++++-- 4 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 workflow/envs/bedtools.yaml diff --git a/workflow/envs/bedtools.yaml b/workflow/envs/bedtools.yaml new file mode 100644 index 0000000..a76cc14 --- /dev/null +++ b/workflow/envs/bedtools.yaml @@ -0,0 +1,5 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bedtools==2.31.1 diff --git a/workflow/rules/evolution.smk b/workflow/rules/evolution.smk index 0380940..ec53196 100644 --- a/workflow/rules/evolution.smk +++ b/workflow/rules/evolution.smk @@ -14,6 +14,19 @@ rule filter_genbank_features: "../scripts/filter_genbank_features.py" +rule build_problematic_bed: + conda: + "../envs/bedtools.yaml" + input: + vcf = lambda wildcards: select_problematic_vcf(), + output: + bed = temp(OUTDIR / "sites_masked.bed"), + log: + LOGDIR / "build_problematic_bed" / "log.txt", + shell: + "bedtools merge -i {input.vcf} >{output.bed} 2>{log}" + + rule n_s_sites: threads: 1 conda: "../envs/biopython.yaml" @@ -21,6 +34,7 @@ rule n_s_sites: gb_qualifier_display = "gene", input: fasta = OUTDIR/f"{OUTPUT_NAME}.ancestor.fasta", + masked = OUTDIR / "sites_masked.bed", gb = OUTDIR/"reference.cds.gb", genetic_code = Path(config["GENETIC_CODE_JSON"]).resolve(), output: @@ -35,6 +49,7 @@ rule calculate_dnds: conda: "../envs/renv.yaml" input: n_s_sites = OUTDIR/f"{OUTPUT_NAME}.ancestor.n_s.sites.csv", + masked = OUTDIR / "sites_masked.bed", variants = OUTDIR/f"{OUTPUT_NAME}.variants.tsv", metadata = config["METADATA"] output: diff --git a/workflow/scripts/calculate_dnds.R b/workflow/scripts/calculate_dnds.R index 4c34688..d600936 100644 --- a/workflow/scripts/calculate_dnds.R +++ b/workflow/scripts/calculate_dnds.R @@ -8,6 +8,7 @@ sink(log, type = "output") library(dplyr) library(readr) library(tidyr) +library(purrr) library(logger) log_threshold(INFO) @@ -37,6 +38,21 @@ metadata <- read_delim(snakemake@input[["metadata"]]) %>% select(ID, interval) %>% rename(SAMPLE = ID) +log_info("Reading masked sites BED") +masked <- read_tsv( + snakemake@input$masked, + col_names = c("chrom", "start", "end"), + col_types = "cii", + comment = "#" +) %>% + mutate(POS = map2(start + 1, end, seq.int)) %>% + unnest(POS) %>% + pull(POS) + +log_info("Filtering variants on masked sites") +variants <- variants %>% + filter(!POS %in% masked, !is.na(SYNONYMOUS)) + log_debug("Adding metadata to variants table") variants <- left_join(variants, metadata) diff --git a/workflow/scripts/n_s_sites_from_fasta.py b/workflow/scripts/n_s_sites_from_fasta.py index cb7fa6f..c0e37be 100644 --- a/workflow/scripts/n_s_sites_from_fasta.py +++ b/workflow/scripts/n_s_sites_from_fasta.py @@ -7,19 +7,50 @@ import pandas as pd from Bio import SeqIO -from Bio.SeqRecord import SeqRecord +from Bio.SeqRecord import SeqRecord, SeqFeature from Bio.Seq import Seq NTS = ("A", "C", "G", "T") +MASK_CHR = "N" def read_monofasta(path: str) -> SeqRecord: return SeqIO.read(path, format="fasta") +def read_masked_positions(bed_path: str) -> set: + masked = set() + with open(bed_path) as fh: + for line in fh: + if line.startswith("#") or not line.strip(): + continue + parts = line.strip().split("\t") + start, end = int(parts[1]), int(parts[2]) + masked.update(range(start, end)) + return masked + + +def mask_feature(feature: SeqFeature, record: SeqRecord, masked_positions: set) -> SeqRecord: + extracted = feature.extract(record) + seq_chars = list(str(extracted.seq).upper()) + # Handle reverse strand and compound locations + genomic_positions = [] + for part in feature.location.parts: + positions = list(range(int(part.start), int(part.end))) + if part.strand == -1: + positions.reverse() + genomic_positions.extend(positions) + # Mask sites on sequence + for i, pos in enumerate(genomic_positions): + if seq_chars[i] not in NTS or pos in masked_positions: + seq_chars[i] = MASK_CHR + extracted.seq = Seq("".join(seq_chars)) + return extracted + + def split_into_codons(seq: Seq) -> list: - """Split the complete CDS feature in to a list of codons""" + """Split the complete CDS feature in to a list of codons (if ACGT only)""" return [ seq[i:i + 3] for i in range(0, len(seq)-2, 3) if all(char in NTS for char in seq[i:i + 3]) ] @@ -79,6 +110,9 @@ def main(): with open(snakemake.input.genetic_code) as f: genetic_code = json.load(f) + logging.info("Reading masked sites BED") + masked = read_masked_positions(snakemake.input.masked) + logging.info("Reading GenBank file") gb = SeqIO.read(snakemake.input.gb, format="gb") @@ -95,7 +129,7 @@ def main(): logging.warning(f"Identifier '{identifier}' is already among coding records and will not be replaced by feature at {feature.location}") else: logging.debug(f"Adding feature") - coding_records[identifier] = feature.extract(record) + coding_records[identifier] = mask_feature(feature, record, masked) logging.info(f"Splitting {len(coding_records)} records into codons") codons = get_feature_codons(coding_records) From f16ffa9d27d28e8d0789f714f1d94bbb302d93f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81lvarez=20Herrera?= Date: Thu, 5 Mar 2026 18:49:15 +0100 Subject: [PATCH 2/9] fix import --- workflow/scripts/n_s_sites_from_fasta.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/workflow/scripts/n_s_sites_from_fasta.py b/workflow/scripts/n_s_sites_from_fasta.py index c0e37be..62cf6ed 100644 --- a/workflow/scripts/n_s_sites_from_fasta.py +++ b/workflow/scripts/n_s_sites_from_fasta.py @@ -7,7 +7,8 @@ import pandas as pd from Bio import SeqIO -from Bio.SeqRecord import SeqRecord, SeqFeature +from Bio.SeqRecord import SeqRecord +from Bio.SeqFeature import SeqFeature from Bio.Seq import Seq From 40024594ada3eca1291e2cc1c6b750a2daeded74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81lvarez=20Herrera?= Date: Thu, 5 Mar 2026 19:04:32 +0100 Subject: [PATCH 3/9] move and rename rule --- workflow/rules/evolution.smk | 13 ------------- workflow/rules/sites.smk | 13 +++++++++++++ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/workflow/rules/evolution.smk b/workflow/rules/evolution.smk index ec53196..ef1895c 100644 --- a/workflow/rules/evolution.smk +++ b/workflow/rules/evolution.smk @@ -14,19 +14,6 @@ rule filter_genbank_features: "../scripts/filter_genbank_features.py" -rule build_problematic_bed: - conda: - "../envs/bedtools.yaml" - input: - vcf = lambda wildcards: select_problematic_vcf(), - output: - bed = temp(OUTDIR / "sites_masked.bed"), - log: - LOGDIR / "build_problematic_bed" / "log.txt", - shell: - "bedtools merge -i {input.vcf} >{output.bed} 2>{log}" - - rule n_s_sites: threads: 1 conda: "../envs/biopython.yaml" diff --git a/workflow/rules/sites.smk b/workflow/rules/sites.smk index 9ff7739..8cd74bc 100644 --- a/workflow/rules/sites.smk +++ b/workflow/rules/sites.smk @@ -1,3 +1,16 @@ +rule problematic_vcf_to_bed: + conda: + "../envs/bedtools.yaml" + input: + vcf = lambda wildcards: select_problematic_vcf(), + output: + bed = temp(OUTDIR / "sites_masked.bed"), + log: + LOGDIR / "build_problematic_bed" / "log.txt", + shell: + "bedtools merge -i {input.vcf} >{output.bed} 2>{log}" + + rule bcftools_mpileup_all_sites: threads: 1 conda: "../envs/var_calling.yaml" From a7a91f80508b44168eefdf08a1a5d27cc17e1bb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81lvarez=20Herrera?= Date: Thu, 5 Mar 2026 19:19:23 +0100 Subject: [PATCH 4/9] update Dockerfile with bedtools environment --- Dockerfile | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6c2556e..673a873 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM condaforge/miniforge3:latest LABEL io.github.snakemake.containerized="true" -LABEL io.github.snakemake.conda_env_hash="ed26b44bdff1bc9f7a99d3830ae812bf262f78427b95a45fa1ac1ce255c5f054" +LABEL io.github.snakemake.conda_env_hash="dac62e7daa260f58e83880b4ad266bb819917087f9c7baee7cbb1337b1603244" # Step 2: Retrieve conda environments @@ -15,6 +15,17 @@ LABEL io.github.snakemake.conda_env_hash="ed26b44bdff1bc9f7a99d3830ae812bf262f78 RUN mkdir -p /conda-envs/9c24a867826615972cc288081976e7fc COPY workflow/envs/afwdist.yaml /conda-envs/9c24a867826615972cc288081976e7fc/environment.yaml +# Conda environment: +# source: workflow/envs/bedtools.yaml +# prefix: /conda-envs/cef13cdc1c388b3087761b0222ec0613 +# channels: +# - conda-forge +# - bioconda +# dependencies: +# - bedtools==2.31.1 +RUN mkdir -p /conda-envs/cef13cdc1c388b3087761b0222ec0613 +COPY workflow/envs/bedtools.yaml /conda-envs/cef13cdc1c388b3087761b0222ec0613/environment.yaml + # Conda environment: # source: workflow/envs/biopython.yaml # prefix: /conda-envs/162796cecea22d99c8702138f0c48e2f @@ -165,6 +176,7 @@ COPY workflow/envs/var_calling.yaml /conda-envs/81e46c677a6cc0618c93963d57d17d3f # Step 3: Generate conda environments RUN conda env create --prefix /conda-envs/9c24a867826615972cc288081976e7fc --file /conda-envs/9c24a867826615972cc288081976e7fc/environment.yaml && \ + conda env create --prefix /conda-envs/cef13cdc1c388b3087761b0222ec0613 --file /conda-envs/cef13cdc1c388b3087761b0222ec0613/environment.yaml && \ conda env create --prefix /conda-envs/162796cecea22d99c8702138f0c48e2f --file /conda-envs/162796cecea22d99c8702138f0c48e2f/environment.yaml && \ conda env create --prefix /conda-envs/9439457f932a4fbca3665c9ea1ac2f0a --file /conda-envs/9439457f932a4fbca3665c9ea1ac2f0a/environment.yaml && \ conda env create --prefix /conda-envs/bb4c5f3a509433cc08861582fab4a705 --file /conda-envs/bb4c5f3a509433cc08861582fab4a705/environment.yaml && \ From a3b474226cb1051ba88ba75a9699651f2bd41079 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81lvarez=20Herrera?= Date: Fri, 6 Mar 2026 09:41:14 +0100 Subject: [PATCH 5/9] filter problematic sites --- workflow/rules/sites.smk | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/workflow/rules/sites.smk b/workflow/rules/sites.smk index 8cd74bc..7b17d2c 100644 --- a/workflow/rules/sites.smk +++ b/workflow/rules/sites.smk @@ -1,8 +1,24 @@ +rule problematic_vcf_filter: + conda: + "../envs/bcftools.yaml" + params: + filters = ["mask"], + input: + vcf = lambda wildcards: select_problematic_vcf(), + output: + vcf = temp(OUTDIR / "sites_masked.vcf"), + log: + LOGDIR / "problematic_vcf_filter" / "log.txt" + shell: + """FILTER_STR=$(echo "{params.filters}" | tr ' ' ',') && """ + """bcftools view -f "$FILTER_STR" {input.vcf} >{output.vcf} 2>{log}""" + + rule problematic_vcf_to_bed: conda: "../envs/bedtools.yaml" input: - vcf = lambda wildcards: select_problematic_vcf(), + vcf = OUTDIR / "sites_masked.vcf", output: bed = temp(OUTDIR / "sites_masked.bed"), log: From 8c9cb629d2ea97b04d81eedc4d3a021a4991bf65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81lvarez=20Herrera?= Date: Fri, 6 Mar 2026 10:04:04 +0100 Subject: [PATCH 6/9] merge rules to build BED --- workflow/envs/tools.yaml | 6 ++++++ workflow/rules/sites.smk | 23 ++++++----------------- 2 files changed, 12 insertions(+), 17 deletions(-) create mode 100644 workflow/envs/tools.yaml diff --git a/workflow/envs/tools.yaml b/workflow/envs/tools.yaml new file mode 100644 index 0000000..cc5ada1 --- /dev/null +++ b/workflow/envs/tools.yaml @@ -0,0 +1,6 @@ +channels: + - conda-forge + - bioconda +dependencies: + - bedtools==2.31.1 + - bcftools==1.23 diff --git a/workflow/rules/sites.smk b/workflow/rules/sites.smk index 7b17d2c..9bbbd41 100644 --- a/workflow/rules/sites.smk +++ b/workflow/rules/sites.smk @@ -1,30 +1,19 @@ -rule problematic_vcf_filter: +rule problematic_vcf_to_bed: conda: - "../envs/bcftools.yaml" + "../envs/tools.yaml" params: filters = ["mask"], input: vcf = lambda wildcards: select_problematic_vcf(), output: vcf = temp(OUTDIR / "sites_masked.vcf"), - log: - LOGDIR / "problematic_vcf_filter" / "log.txt" - shell: - """FILTER_STR=$(echo "{params.filters}" | tr ' ' ',') && """ - """bcftools view -f "$FILTER_STR" {input.vcf} >{output.vcf} 2>{log}""" - - -rule problematic_vcf_to_bed: - conda: - "../envs/bedtools.yaml" - input: - vcf = OUTDIR / "sites_masked.vcf", - output: bed = temp(OUTDIR / "sites_masked.bed"), log: - LOGDIR / "build_problematic_bed" / "log.txt", + LOGDIR / "problematic_vcf_to_bed" / "log.txt", shell: - "bedtools merge -i {input.vcf} >{output.bed} 2>{log}" + "FILTER_STR=$(echo \"{params.filters}\" | tr ' ' ',') && " + "bcftools view -f \"$FILTER_STR\" {input.vcf} >{output.vcf} 2>{log} && " + "bedtools merge -i {output.vcf} >{output.bed} 2>{log}" rule bcftools_mpileup_all_sites: From b4fa480f01dcc64f0b4de85d54d14ffb8959c9a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81lvarez=20Herrera?= Date: Fri, 6 Mar 2026 10:05:40 +0100 Subject: [PATCH 7/9] update Dockerfile --- Dockerfile | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/Dockerfile b/Dockerfile index 673a873..188459d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM condaforge/miniforge3:latest LABEL io.github.snakemake.containerized="true" -LABEL io.github.snakemake.conda_env_hash="dac62e7daa260f58e83880b4ad266bb819917087f9c7baee7cbb1337b1603244" +LABEL io.github.snakemake.conda_env_hash="966286962ebc1e35e9809cc85e2904bfefb462e6a14ee09730b81ab69eb4d441" # Step 2: Retrieve conda environments @@ -15,17 +15,6 @@ LABEL io.github.snakemake.conda_env_hash="dac62e7daa260f58e83880b4ad266bb8199170 RUN mkdir -p /conda-envs/9c24a867826615972cc288081976e7fc COPY workflow/envs/afwdist.yaml /conda-envs/9c24a867826615972cc288081976e7fc/environment.yaml -# Conda environment: -# source: workflow/envs/bedtools.yaml -# prefix: /conda-envs/cef13cdc1c388b3087761b0222ec0613 -# channels: -# - conda-forge -# - bioconda -# dependencies: -# - bedtools==2.31.1 -RUN mkdir -p /conda-envs/cef13cdc1c388b3087761b0222ec0613 -COPY workflow/envs/bedtools.yaml /conda-envs/cef13cdc1c388b3087761b0222ec0613/environment.yaml - # Conda environment: # source: workflow/envs/biopython.yaml # prefix: /conda-envs/162796cecea22d99c8702138f0c48e2f @@ -160,6 +149,18 @@ COPY workflow/envs/renv.yaml /conda-envs/8ad6cdcf265d30289788da99d5bf9fff/enviro RUN mkdir -p /conda-envs/0adafb79cb1bec58ef4c77bf4cca4f95 COPY workflow/envs/snpeff.yaml /conda-envs/0adafb79cb1bec58ef4c77bf4cca4f95/environment.yaml +# Conda environment: +# source: workflow/envs/tools.yaml +# prefix: /conda-envs/1f283441022c3c9d97669994a3c5e8bb +# channels: +# - conda-forge +# - bioconda +# dependencies: +# - bedtools==2.31.1 +# - bcftools==1.23 +RUN mkdir -p /conda-envs/1f283441022c3c9d97669994a3c5e8bb +COPY workflow/envs/tools.yaml /conda-envs/1f283441022c3c9d97669994a3c5e8bb/environment.yaml + # Conda environment: # source: workflow/envs/var_calling.yaml # prefix: /conda-envs/81e46c677a6cc0618c93963d57d17d3f @@ -176,7 +177,6 @@ COPY workflow/envs/var_calling.yaml /conda-envs/81e46c677a6cc0618c93963d57d17d3f # Step 3: Generate conda environments RUN conda env create --prefix /conda-envs/9c24a867826615972cc288081976e7fc --file /conda-envs/9c24a867826615972cc288081976e7fc/environment.yaml && \ - conda env create --prefix /conda-envs/cef13cdc1c388b3087761b0222ec0613 --file /conda-envs/cef13cdc1c388b3087761b0222ec0613/environment.yaml && \ conda env create --prefix /conda-envs/162796cecea22d99c8702138f0c48e2f --file /conda-envs/162796cecea22d99c8702138f0c48e2f/environment.yaml && \ conda env create --prefix /conda-envs/9439457f932a4fbca3665c9ea1ac2f0a --file /conda-envs/9439457f932a4fbca3665c9ea1ac2f0a/environment.yaml && \ conda env create --prefix /conda-envs/bb4c5f3a509433cc08861582fab4a705 --file /conda-envs/bb4c5f3a509433cc08861582fab4a705/environment.yaml && \ @@ -187,6 +187,7 @@ RUN conda env create --prefix /conda-envs/9c24a867826615972cc288081976e7fc --fil conda env create --prefix /conda-envs/96f3c1cec4b3ce5d72f708992272e9c1 --file /conda-envs/96f3c1cec4b3ce5d72f708992272e9c1/environment.yaml && \ conda env create --prefix /conda-envs/8ad6cdcf265d30289788da99d5bf9fff --file /conda-envs/8ad6cdcf265d30289788da99d5bf9fff/environment.yaml && \ conda env create --prefix /conda-envs/0adafb79cb1bec58ef4c77bf4cca4f95 --file /conda-envs/0adafb79cb1bec58ef4c77bf4cca4f95/environment.yaml && \ + conda env create --prefix /conda-envs/1f283441022c3c9d97669994a3c5e8bb --file /conda-envs/1f283441022c3c9d97669994a3c5e8bb/environment.yaml && \ conda env create --prefix /conda-envs/81e46c677a6cc0618c93963d57d17d3f --file /conda-envs/81e46c677a6cc0618c93963d57d17d3f/environment.yaml && \ conda clean --all -y From a996935f9563b5caff3ab5d4feda3502b82857f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81lvarez=20Herrera?= Date: Fri, 6 Mar 2026 13:12:10 +0100 Subject: [PATCH 8/9] update showtext dpi equals the value in individual plots --- config/design_plots.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/design_plots.R b/config/design_plots.R index 74e87d8..69f3540 100644 --- a/config/design_plots.R +++ b/config/design_plots.R @@ -5,7 +5,7 @@ library(showtext) # Ajustes #### showtext_auto(enable = FALSE) -showtext_opts(dpi = 200) +showtext_opts(dpi = 250) # Tema font_add_google("Noto Sans", "Noto Sans") From eeb7d3c167945fd424d6eb5be23b3090c833c924 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81lvarez=20Herrera?= Date: Fri, 6 Mar 2026 14:35:24 +0100 Subject: [PATCH 9/9] avoid showtext dependency ggplot falls back to the default font if Noto Sans is unavailable. showtext started causing a cryptic segfault --- Dockerfile | 13 ++++++------- config/design_plots.R | 20 ++++---------------- workflow/envs/renv.yaml | 3 +-- 3 files changed, 11 insertions(+), 25 deletions(-) diff --git a/Dockerfile b/Dockerfile index 188459d..fbc2b93 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM condaforge/miniforge3:latest LABEL io.github.snakemake.containerized="true" -LABEL io.github.snakemake.conda_env_hash="966286962ebc1e35e9809cc85e2904bfefb462e6a14ee09730b81ab69eb4d441" +LABEL io.github.snakemake.conda_env_hash="fb2a04b98efa75d8b830a16722a8717eb91a3c66659e3c78b90b0cee3a50db69" # Step 2: Retrieve conda environments @@ -117,12 +117,12 @@ COPY workflow/envs/quarto_render.yaml /conda-envs/96f3c1cec4b3ce5d72f708992272e9 # Conda environment: # source: workflow/envs/renv.yaml -# prefix: /conda-envs/8ad6cdcf265d30289788da99d5bf9fff +# prefix: /conda-envs/fe892aca096e6b2883923c8755f9ac77 # channels: # - conda-forge # - bioconda # dependencies: -# - r-base=4.3.2 +# - r-base=4.3.3 # - r-tidyverse==2.0.0 # - r-ggrepel==0.9.3 # - r-ggpubr==0.6.0 @@ -133,10 +133,9 @@ COPY workflow/envs/quarto_render.yaml /conda-envs/96f3c1cec4b3ce5d72f708992272e9 # - r-data.table==1.14.8 # - r-future.apply==1.11.0 # - r-scales==1.3.0 -# - r-showtext==0.9_6 # - r-logger==0.2.2 -RUN mkdir -p /conda-envs/8ad6cdcf265d30289788da99d5bf9fff -COPY workflow/envs/renv.yaml /conda-envs/8ad6cdcf265d30289788da99d5bf9fff/environment.yaml +RUN mkdir -p /conda-envs/fe892aca096e6b2883923c8755f9ac77 +COPY workflow/envs/renv.yaml /conda-envs/fe892aca096e6b2883923c8755f9ac77/environment.yaml # Conda environment: # source: workflow/envs/snpeff.yaml @@ -185,7 +184,7 @@ RUN conda env create --prefix /conda-envs/9c24a867826615972cc288081976e7fc --fil conda env create --prefix /conda-envs/04a3347f94ddf7e21c34bc49e5246076 --file /conda-envs/04a3347f94ddf7e21c34bc49e5246076/environment.yaml && \ conda env create --prefix /conda-envs/fb978640cd765c8a63bbcdc01f3a206b --file /conda-envs/fb978640cd765c8a63bbcdc01f3a206b/environment.yaml && \ conda env create --prefix /conda-envs/96f3c1cec4b3ce5d72f708992272e9c1 --file /conda-envs/96f3c1cec4b3ce5d72f708992272e9c1/environment.yaml && \ - conda env create --prefix /conda-envs/8ad6cdcf265d30289788da99d5bf9fff --file /conda-envs/8ad6cdcf265d30289788da99d5bf9fff/environment.yaml && \ + conda env create --prefix /conda-envs/fe892aca096e6b2883923c8755f9ac77 --file /conda-envs/fe892aca096e6b2883923c8755f9ac77/environment.yaml && \ conda env create --prefix /conda-envs/0adafb79cb1bec58ef4c77bf4cca4f95 --file /conda-envs/0adafb79cb1bec58ef4c77bf4cca4f95/environment.yaml && \ conda env create --prefix /conda-envs/1f283441022c3c9d97669994a3c5e8bb --file /conda-envs/1f283441022c3c9d97669994a3c5e8bb/environment.yaml && \ conda env create --prefix /conda-envs/81e46c677a6cc0618c93963d57d17d3f --file /conda-envs/81e46c677a6cc0618c93963d57d17d3f/environment.yaml && \ diff --git a/config/design_plots.R b/config/design_plots.R index 69f3540..8952379 100644 --- a/config/design_plots.R +++ b/config/design_plots.R @@ -1,26 +1,14 @@ -# Jordi Sevilla - library(ggplot2) -library(showtext) - -# Ajustes #### -showtext_auto(enable = FALSE) -showtext_opts(dpi = 250) - -# Tema -font_add_google("Noto Sans", "Noto Sans") -showtext_auto() +# Theme theme_set(theme_minimal()) - theme_update( - text = element_text(size = 16, family = "Noto Sans"), - axis.title = element_text(size = 16), + text = element_text(size = 10, family = "Noto Sans"), + axis.title = element_text(size = 12), axis.line = element_line( linewidth = 0.5, colour = "grey40", - linetype = 1, - arrow = arrow(length = unit(3, "mm")) + linetype = 1 ), panel.grid = element_line(linewidth = 0.17, color = "lightgray") ) diff --git a/workflow/envs/renv.yaml b/workflow/envs/renv.yaml index ceb6a99..9256d78 100644 --- a/workflow/envs/renv.yaml +++ b/workflow/envs/renv.yaml @@ -2,7 +2,7 @@ channels: - conda-forge - bioconda dependencies: - - r-base=4.3.2 + - r-base=4.3.3 - r-tidyverse==2.0.0 - r-ggrepel==0.9.3 - r-ggpubr==0.6.0 @@ -13,5 +13,4 @@ dependencies: - r-data.table==1.14.8 - r-future.apply==1.11.0 - r-scales==1.3.0 - - r-showtext==0.9_6 - r-logger==0.2.2