initialize() {
initializeMutationRate(2.5e-6);//
initializeMutationType("m1", 1, "f", 0.0);//manual section 10.5
initializeMutationType("m2", 1, "f", -0.023);
c(m1,m2).convertToSubstitution = F; // manual section 24.10.1
m1.mutationStackPolicy = "f"; //prevents stacking by keeping only the first mutation of type m1 at a given site
initializeGenomicElementType("g1", m1, 1); //epistatic locus
initializeGenomicElementType("g2", m2, 1);
initializeGenomicElement(g2, 0, 500);
initializeGenomicElement(g1, 501, 502);
initializeGenomicElement(g2, 503, 1000);
initializeRecombinationRate(0);
}
1 { sim.addSubpop("p1", 500);
p1.setCloningRate(1.0);
defineConstant("simID", getSeed());
}
{
meanFitness = mean(p1.cachedFitness(NULL));
newSize = asInteger(500 * meanFitness);
p1.setSubpopulationSize(newSize);
if (newSize == 0) {
line = paste(simID, sim.generation);
writeFile("./extinction.txt", line, append=F);
// remove any new mutations added to the disabled diploid genomes
sim.subpopulations.individuals.genome2.removeMutations();
// remove mutations in the haploid genomes that have fixed
muts1 = sim.mutationsOfType(m1);
freqs1 = sim.mutationFrequencies(NULL, muts1);
if (any(freqs1 == 0.5))
sim.subpopulations.genomes.removeMutations(muts1[freqs1 == 0.5], T);
muts2 = sim.mutationsOfType(m2);
freqs2 = sim.mutationFrequencies(NULL, muts2);
if (any(freqs2 == 0.5))
sim.subpopulations.genomes.removeMutations(muts2[freqs2 == 0.5], T);
sim.simulationFinished();
}
}
1:5000{
counts = p1.genomes.countOfMutationsOfType(m1);
for (individual in counts)
{
m2.setDistribution("f", -2.3e-05);
}
}
5000 late() {
//check on selection coefficient values
m2muts = sim.mutationsOfType(m2);
freqs = sim.mutationFrequencies(NULL, m2muts);
effects = m2muts.selectionCoeff;
catn();
print(cbind(freqs, effects));
// remove any new mutations added to the disabled diploid genomes
sim.subpopulations.individuals.genome2.removeMutations();
// remove mutations in the haploid genomes that have fixed
muts1 = sim.mutationsOfType(m1);
freqs1 = sim.mutationFrequencies(NULL, muts1);
if (any(freqs1 == 0.5))
sim.subpopulations.genomes.removeMutations(muts1[freqs1 == 0.5], T);
muts2 = sim.mutationsOfType(m2);
freqs2 = sim.mutationFrequencies(NULL, muts2);
if (any(freqs2 == 0.5))
sim.subpopulations.genomes.removeMutations(muts2[freqs2 == 0.5], T);
sim.outputFixedMutations();
sim.simulationFinished();
}