Skip to content

Commit c9fb4f8

Browse files
committed
update: dfe plot
1 parent 05e00fc commit c9fb4f8

4 files changed

Lines changed: 98 additions & 25 deletions

File tree

workflow/Snakefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ rule all:
136136
**DELTA_TAJIMAD_KW, type=["outlier.genes", "gowinda.enrichment"],
137137
),
138138
# dfe confidence intervals
139-
"results/plots/dfe/combined.dfe_params.svg",
139+
expand("results/plots/dfe/{dataset}/{dataset}.dfe_params.svg", dataset=dataset_configs.keys()),
140140
# circos plots (only for datasets with chr_bed + cytoband configured)
141141
expand_1pop_circos(
142142
"results/plots/circos/{species}/{dataset}/{ppl}/{ppl}_positive_selection_circos_scores.png",

workflow/rules/7_plot_results.smk

Lines changed: 59 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,15 @@
2020

2121
rule merge_dfe_confidence_intervals:
2222
input:
23-
bestfit_files=expand_1pop(
24-
"results/dadi/{species}/{dataset}/dfe/{ppl}/InferDFE/{ppl}.{ref_genome}.{demog}.{dfe}.InferDFE.bestfits",
25-
**DADI_1D_KW, dfe=dadi_config["dfe_1d"],
26-
),
27-
ci_files=expand_1pop(
28-
"results/dadi/{species}/{dataset}/dfe/{ppl}/StatDFE/{ppl}.{ref_genome}.{demog}.{dfe}.godambe.ci",
29-
**DADI_1D_KW, dfe=dadi_config["dfe_1d"],
30-
),
23+
bestfit_files=get_dfe_bestfit_files,
24+
ci_files=get_dfe_ci_files,
3125
output:
32-
merged="results/plots/dfe/combined.dfe_params.tsv",
26+
merged="results/plots/dfe/{dataset}/{dataset}.dfe_params.tsv",
3327
params:
34-
populations=expand_1pop("{ppl}"),
35-
datasets=expand_1pop("{dataset}"),
28+
populations=get_dfe_populations,
29+
datasets=get_dfe_datasets,
3630
log:
37-
"logs/deleterious_dfe/merge_dfe_confidence_intervals.log",
31+
"logs/deleterious_dfe/merge_dfe_confidence_intervals.{dataset}.log",
3832
conda:
3933
"../envs/selscape-env.yaml"
4034
script:
@@ -46,18 +40,18 @@ rule plot_dfe_confidence_intervals:
4640
data=rules.merge_dfe_confidence_intervals.output.merged,
4741
output:
4842
plot=report(
49-
"results/plots/dfe/combined.dfe_params.svg",
43+
"results/plots/dfe/{dataset}/{dataset}.dfe_params.svg",
5044
category="Distribution of Fitness Effects",
5145
subcategory="DFE Parameters",
52-
labels={"Type": "DFE Confidence Intervals"},
46+
labels={"Dataset": "{dataset}", "Type": "DFE Confidence Intervals"},
5347
),
5448
params:
55-
populations=expand_1pop("{ppl}"),
49+
populations=get_dfe_populations,
5650
population_groups=lambda _: main_config.get("population_groups", {}),
5751
mu_ylim=None,
5852
sigma_ylim=None,
5953
log:
60-
"logs/deleterious_dfe/plot_dfe_confidence_intervals.log",
54+
"logs/deleterious_dfe/plot_dfe_confidence_intervals.{dataset}.log",
6155
conda:
6256
"../envs/selscape-env.yaml"
6357
script:
@@ -87,10 +81,34 @@ rule make_positive_selection_circos:
8781
population="{ppl}",
8882
ref_genome=get_ref_genome,
8983
tracks=[
90-
{"name": "iHS", "file": "ihs_scores", "score_col": "normalized_ihs", "r_range": [65, 75], "color": "#1f77b4"},
91-
{"name": "nSL", "file": "nsl_scores", "score_col": "normalized_nsl", "r_range": [50, 60], "color": "#ff7f0e"},
92-
{"name": "mtjd", "file": "mtjd_scores", "score_col": "tajima_d", "r_range": [35, 45], "color": "#2ca02c"},
93-
{"name": "wtjd", "file": "wtjd_scores", "score_col": "tajima_d", "r_range": [20, 30], "color": "#d62728"},
84+
{
85+
"name": "iHS",
86+
"file": "ihs_scores",
87+
"score_col": "normalized_ihs",
88+
"r_range": [65, 75],
89+
"color": "#1f77b4",
90+
},
91+
{
92+
"name": "nSL",
93+
"file": "nsl_scores",
94+
"score_col": "normalized_nsl",
95+
"r_range": [50, 60],
96+
"color": "#ff7f0e",
97+
},
98+
{
99+
"name": "mtjd",
100+
"file": "mtjd_scores",
101+
"score_col": "tajima_d",
102+
"r_range": [35, 45],
103+
"color": "#2ca02c",
104+
},
105+
{
106+
"name": "wtjd",
107+
"file": "wtjd_scores",
108+
"score_col": "tajima_d",
109+
"r_range": [20, 30],
110+
"color": "#d62728",
111+
},
94112
],
95113
resources:
96114
mem_mb=32000,
@@ -124,9 +142,27 @@ rule make_balancing_selection_circos:
124142
population="{ppl}",
125143
ref_genome=get_ref_genome,
126144
tracks=[
127-
{"name": "B1", "file": "b1_scores", "score_col": "B1", "r_range": [60, 75], "color": "#1f77b4"},
128-
{"name": "mtjd", "file": "mtjd_bal_scores", "score_col": "tajima_d", "r_range": [40, 55], "color": "#2ca02c"},
129-
{"name": "wtjd", "file": "wtjd_bal_scores", "score_col": "tajima_d", "r_range": [20, 35], "color": "#d62728"},
145+
{
146+
"name": "B1",
147+
"file": "b1_scores",
148+
"score_col": "B1",
149+
"r_range": [60, 75],
150+
"color": "#1f77b4",
151+
},
152+
{
153+
"name": "mtjd",
154+
"file": "mtjd_bal_scores",
155+
"score_col": "tajima_d",
156+
"r_range": [40, 55],
157+
"color": "#2ca02c",
158+
},
159+
{
160+
"name": "wtjd",
161+
"file": "wtjd_bal_scores",
162+
"score_col": "tajima_d",
163+
"r_range": [20, 35],
164+
"color": "#d62728",
165+
},
130166
],
131167
resources:
132168
mem_mb=32000,

workflow/rules/common.smk

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,43 @@ def get_dadi_param(key, wildcards):
488488
value = " ".join(value.split()[:-1])
489489
return value
490490

491+
def get_dfe_bestfit_files(wildcards):
492+
"""Bestfit files for all populations in wildcards.dataset."""
493+
return [
494+
f
495+
for ds, sp, pop, rg in DATASET_1POP
496+
if ds == wildcards.dataset
497+
for f in expand(
498+
"results/dadi/{species}/{dataset}/dfe/{ppl}/InferDFE/{ppl}.{ref_genome}.{demog}.{dfe}.InferDFE.bestfits",
499+
dataset=ds, species=sp, ppl=pop, ref_genome=rg,
500+
**DADI_1D_KW, dfe=dadi_config["dfe_1d"],
501+
)
502+
]
503+
504+
505+
def get_dfe_ci_files(wildcards):
506+
"""Godambe CI files for all populations in wildcards.dataset."""
507+
return [
508+
f
509+
for ds, sp, pop, rg in DATASET_1POP
510+
if ds == wildcards.dataset
511+
for f in expand(
512+
"results/dadi/{species}/{dataset}/dfe/{ppl}/StatDFE/{ppl}.{ref_genome}.{demog}.{dfe}.godambe.ci",
513+
dataset=ds, species=sp, ppl=pop, ref_genome=rg,
514+
**DADI_1D_KW, dfe=dadi_config["dfe_1d"],
515+
)
516+
]
517+
518+
519+
def get_dfe_populations(wildcards):
520+
"""Population list for wildcards.dataset, in DATASET_1POP order."""
521+
return [pop for ds, sp, pop, rg in DATASET_1POP if ds == wildcards.dataset]
522+
523+
524+
def get_dfe_datasets(wildcards):
525+
"""Dataset column values, same length as get_dfe_populations."""
526+
return [wildcards.dataset] * len(get_dfe_populations(wildcards))
527+
491528

492529
def expand_1pop_circos(pattern, anc_only=False):
493530
source = DATASET_1POP_ANC if anc_only else DATASET_1POP

workflow/scripts/visualization/plot_dfe_params.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
), f"Population order mismatch: TSV has {list(df['Pop'])}, expected {populations}"
7272

7373
x = list(range(len(populations)))
74-
x_tick_labels = [f"{dataset}_{pop}" for pop, dataset in zip(df["Pop"], df["Dataset"])]
74+
x_tick_labels = list(df["Pop"])
7575

7676
fig, axs = plt.subplots(
7777
nrows=2, ncols=2, constrained_layout=True, figsize=(10, 4), dpi=350

0 commit comments

Comments
 (0)