11// Keywords: migration, dispersal, QTL, quantitative trait loci
22
33initialize() {
4- initializeMutationRate(1e-6);
5-
64 // neutral mutations in non-coding regions
75 initializeMutationType("m1", 0.5, "f", 0.0);
86 initializeGenomicElementType("g1", m1, 1.0);
@@ -15,30 +13,20 @@ initialize() {
1513 m2.mutationStackPolicy = "l";
1614
1715 // set up our chromosome: 10 QTLs, surrounded by neutral regions
18- defineConstant("C", 10); // number of QTLs
16+ defineConstant("C", 10); // number of QTLs / chromosomes
1917 defineConstant("W", 1000); // size of neutral buffer on each side
20- pos = 0;
21- q = NULL;
2218
2319 for (i in 1:C)
2420 {
25- initializeGenomicElement(g1, pos, pos + W-1);
26- pos = pos + W;
21+ initializeChromosome(i, 0, W*2 + 1);
2722
28- initializeGenomicElement(g2, pos, pos );
29- q = c(q, pos );
30- pos = pos + 1 ;
23+ initializeGenomicElement(g1, 0, W-1 );
24+ initializeGenomicElement(g2, W, W );
25+ initializeGenomicElement(g1, W+1, W+1 + W-1) ;
3126
32- initializeGenomicElement(g1, pos, pos + W-1 );
33- pos = pos + W ;
27+ initializeMutationRate(1e-6 );
28+ initializeRecombinationRate(1e-8) ;
3429 }
35-
36- defineConstant("Q", q); // remember our QTL positions
37-
38- // we want the QTLs to be unlinked; build a recombination map for that
39- rates = c(rep(c(1e-8, 0.5), C-1), 1e-8);
40- ends = (repEach(Q + W, 2) + rep(c(0,1), C))[0:(C*2 - 2)];
41- initializeRecombinationRate(rates, ends);
4230}
43311 late() {
4432 sim.addSubpop("p1", 500);
@@ -48,17 +36,15 @@ initialize() {
4836 p1.setMigrationRates(p2, 0.01);
4937 p2.setMigrationRates(p1, 0.01);
5038
51- // replicate the s1 event to output in tick 2 also
52- community.registerEarlyEvent("s2", s1.source, 2, 2);
53-
5439 // optional: give m2 mutations to everyone, as standing variation
55- g = sim.subpopulations.haplosomes ;
40+ individuals = sim.subpopulations.individuals ;
5641
57- for (q in Q )
42+ for (i in 1:C )
5843 {
44+ g = sim.subpopulations.individuals.haplosomesForChromosomes(i);
5945 isPlus = asLogical(rbinom(size(g), 1, 0.5));
60- g[isPlus].addNewMutation(m2, 1.0, q );
61- g[!isPlus].addNewMutation(m2, -1.0, q );
46+ g[isPlus].addNewMutation(m2, 1.0, W );
47+ g[!isPlus].addNewMutation(m2, -1.0, W );
6248 }
6349}
6450mutationEffect(m2) { return 1.0; }
@@ -78,7 +64,7 @@ mateChoice() {
7864 others = sourceSubpop.individuals.tagF;
7965 return weights * dnorm(others, phenotype, 5.0);
8066}
81- s1 2001 early() {
67+ c(2, 2001) early() {
8268 cat("-------------------------------\n");
8369 cat("Output for end of cycle " + (sim.cycle - 1) + ":\n\n");
8470
@@ -96,18 +82,18 @@ s1 2001 early() {
9682 minus = muts[muts.selectionCoeff == -1.0];
9783
9884 cat("\nOverall frequencies:\n\n");
99- for (q in Q )
85+ for (i in 1:C )
10086 {
101- qPlus = plus[plus.position == q ];
102- qMinus = minus[minus.position == q ];
103- pf = sum(sim.mutationFrequencies(NULL, qPlus ));
104- mf = sum(sim.mutationFrequencies(NULL, qMinus ));
105- pf1 = sum(sim.mutationFrequencies(p1, qPlus ));
106- mf1 = sum(sim.mutationFrequencies(p1, qMinus ));
107- pf2 = sum(sim.mutationFrequencies(p2, qPlus ));
108- mf2 = sum(sim.mutationFrequencies(p2, qMinus ));
87+ iPlus = plus[plus.chromosome.id == i ];
88+ iMinus = minus[minus.chromosome.id == i ];
89+ pf = sum(sim.mutationFrequencies(NULL, iPlus ));
90+ mf = sum(sim.mutationFrequencies(NULL, iMinus ));
91+ pf1 = sum(sim.mutationFrequencies(p1, iPlus ));
92+ mf1 = sum(sim.mutationFrequencies(p1, iMinus ));
93+ pf2 = sum(sim.mutationFrequencies(p2, iPlus ));
94+ mf2 = sum(sim.mutationFrequencies(p2, iMinus ));
10995
110- cat(" QTL " + q + ": f(+) == " + pf + ", f(-) == " + mf + "\n");
96+ cat(" QTL " + i + ": f(+) == " + pf + ", f(-) == " + mf + "\n");
11197 cat(" in p1: f(+) == " + pf1 + ", f(-) == " + mf1 + "\n");
11298 cat(" in p2: f(+) == " + pf2 + ", f(-) == " + mf2 + "\n\n");
11399 }
0 commit comments