Repository for my lab immersion on spatially structured populations with partial updates.
Using the formalism from "Bridging Wright–Fisher and Moran models".
slurm_jobs contains scripts for SCITAS clusters.
utils contains the more elementary scripts:
-
graph_generation.py: creates the migration matrices based on the specified type and parameters -
graph_simulation.py: launches graph-based simulations -
misc.py: miscellaneous, among which a failed attempt to compute the theoretical mean extinction time (from equation S32 of the paper) -
wm_mat.py: computing the fixation probability using the transition (well-mixed case) -
wm_sim.py: launches simulations in the well-mixed case
run_single.py and slurm_main.py are used to generate and store simulation data (see part below on how to use them).
visualization.py is used to produce plots.
run.ipynb is a notebook using all the functions to launch simulations and produce plots (the last part is not functional).
Runs multiple simulations / computations of the specified type, sweeping the fitness in np.logspace(log_s_min, log_s_max, num) and writes a .JSON file in the specified results directory.
You can run it as a script (which you must modify to specify prefix, results_dir, num; useful when you want to run them on SCITAS clusters) or as a function (see examples in run.ipynb).
Make sure the results directory is created before running
It is not possible to store the fixation/extinction times. (use
run_single.pyinstead)
Arguments:
-
prefix: str, beginning of the filename, e.g. 'simA' -
results_dir: str, path where the results should be written, e.g. 'results/simA/' (must end with a '/') -
num: int, number of fitness values in the logspace array -
type: str, ['wm_sim', 'wm_mat', 'clique', 'cycle', 'line', 'star'] -
job_array_nb: int, identifier (useful for running array jobs with slurm too), will be added in the filename -
N: int, number of individuals per deme -
M: int, number of updated individuals per deme -
log_s_min: int, -
log_s_max: int, -
(optional)
nb_trajectories: int = 100, number of simulation runs -
(optional)
migration_rate: float = 0.001, -
(optional)
nb_demes: int = 1, number of demes, -
(optional)
alpha: float = 1., migration assymetry (if type is 'cycle', 'line' or 'star') -
(optional)
initial_node: int = 0, node where the first mutant spawns (between 0 and nb_demes - 1), or makes an average if initial_node = 'avg' (for line and star graphs)
Returns nothing, writes {prefix}_{type}_{job_array_nb}_{parameters}.json in the results directory
Template:
py slurm_main.py [type] [job_array_nb] [N] [M] [log_s_min] [log_s_max] [nb_trajectories] (migration_rate) (nb_demes) (alpha) (initial node)
The arguments in parentheses depend on the chosen type:
-
For clique graphs:
py slurm_main.py clique [job_array_nb] [N] [M] [log_s_min] [log_s_max] [nb_trajectories] (migration_rate) (nb_demes) -
For cycle graphs:
py slurm_main.py cycle [job_array_nb] [N] [M] [log_s_min] [log_s_max] [nb_trajectories] (migration_rate) (nb_demes) (alpha) -
For star graphs:
py slurm_main.py star [job_array_nb] [N] [M] [log_s_min] [log_s_max] [nb_trajectories] (migration_rate) (nb_demes) (alpha) (initial node) -
For line graphs:
py slurm_main.py line [job_array_nb] [N] [M] [log_s_min] [log_s_max] [nb_trajectories] (migration_rate) (nb_demes) (alpha) (initial node)
You can choose to have the averaged fixation probability over the possible initial nodes if
initial node = 'avg'(for line and star graphs).
-
For well-mixed simulations:
py slurm_main.py wm_sim [job_array_nb] [N] [M] [log_s_min] [log_s_max] [nb_trajectories] -
For well-mixed matrix computations:
py slurm_main.py wm_mat [job_array_nb] [N] [M] [log_s_min] [log_s_max]
Runs multiple simulations / computations of the specified type, using a single fitness value and writes a .JSON file in the specified results directory
You can run it as a script (which you must modify to specify prefix or results_dir; useful when you want to run them on SCITAS clusters) or as a function (see examples in run.ipynb)
Make sure the results directory is created before running
Here, it is possible to store the fixation/extinction times.
Runs multiple simulations / computations of the specified type, sweeping the fitness in np.logspace(log_s_min, log_s_max, num) and writes a .JSON file in the specified results directory
Make sure the results directory is created before running
Arguments:
-
prefix: str, beginning of the filename, e.g. 'simA' -
results_dir: str, path where the results should be written, e.g. 'results/simA/' (must end with a '/') -
type: str, ['wm_sim', 'wm_mat', 'clique', 'cycle', 'line', 'star'] -
job_array_nb: int, identifier (useful for running array jobs with slurm too), will be added in the filename -
N: int, number of individuals per deme -
M: int, number of updated individuals per deme -
s: float, relative fitness -
(optional)
nb_trajectories: int = 100, number of simulation runs -
(optional)
migration_rate: float = 0. -
(optional)
nb_demes: int = 1, number of demes, -
(optional)
alpha: float = 1., migration assymetry (if type is 'cycle', 'line' or 'star') -
(optional)
initial_node: int = 0, node where the first mutant spawns (between 0 and nb_demes - 1), or makes an average if initial_node = 'avg' (for line and star graphs)
Returns nothing, writes {prefix}_single_{type}_{job_array_nb}_{parameters}.json in the results directory
Template:
py run_single.py [type] [job_array_nb] [N] [M] [s] [nb_trajectories] (migration_rate) (nb_demes) (alpha) (initial node)
The arguments in parentheses depend on the chosen type:
-
For clique graphs:
py run_single.py clique [job_array_nb] [N] [M] [s] [nb_trajectories] (migration_rate) (nb_demes) -
For cycle graphs:
py run_single.py cycle [job_array_nb] [N] [M] [s] [nb_trajectories] (migration_rate) (nb_demes) (alpha) -
For star graphs:
py run_single.py star [job_array_nb] [N] [M] [s] [nb_trajectories] (migration_rate) (nb_demes) (alpha) (initial node) -
For line graphs:
py run_single.py line [job_array_nb] [N] [M] [s] [nb_trajectories] (migration_rate) (nb_demes) (alpha) (initial node) -
For well-mixed simulations:
py run_single.py wm_sim [job_array_nb] [N] [M] [s] [nb_trajectories] -
For well-mixed matrix computations:
py run_single.py wm_mat [job_array_nb] [N] [M] [s]