- Timestamp:
- 06/30/15 23:02:42 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
experiments/frams/foraminifera/data/scripts/forams_repro.inc
r403 r404 4 4 // -------------------------------- step begin -------------------------------- 5 5 6 function reproduce_haploid(repro_list , number)6 function reproduce_haploid(repro_list) 7 7 { 8 8 var len = repro_list.size; … … 14 14 var parent2 = Populations[0].get(repro_list[i + 1]); 15 15 16 number = parent.user2["Va"] / ExpParams.ofnumd + parent2.user2["Va"] / ExpParams.ofnumd; 16 var number = parent.user2["Va"] / ExpParams.ofnumd + parent2.user2["Va"] / ExpParams.ofnumd; 17 17 18 for (var j = 0; j < number; j++) 18 19 { 19 //size 20 var rsize = (parent.user1["delta_d"] + ExpParams.diplo_rad); 21 if (Math.rnd01 < 0.5) 22 { 23 rsize = parent2.user1["delta_d"] + ExpParams.diplo_rad; 24 } 25 26 var deltas = parent.user1["delta_d"]; 27 //mutation 28 if (Math.rnd01 < ExpParams.mutationprob) 29 { 30 var diff = delta_change * deltas; 31 if (Math.rnd01 < 0.5) 32 { 33 deltas -= diff; 34 } 35 else 36 { 37 deltas += diff; 38 } 39 rsize = ExpParams.diplo_rad + deltas; 40 } 41 42 var geno = "//0\np:sh=1,sx=" + rsize + ",sy=" + rsize + ",sz=" + rsize + ", rz=3.14159265358979"; 43 geno += "\nn:p=0,d=\"S\""; //TODO is this the only difference with haploid code? TODO why initial genotypes are not used as defined in ExpParams? 44 var cr = Populations[0].add(geno); 45 cr.energ0 = ExpParams.ofnumd; 46 cr.energy = cr.energ0; 47 var dsize = ExpParams.diplo_rad * ExpParams.delta_rate + ExpParams.diplo_rad; 48 cr.user1 = [ {"vamin" : (rsize / dsize) * ExpParams.v_min_d, "amin": parent.user1["amin"], "delta_h" : parent.user1["delta_h"], "delta_d" : deltas }, {"vamin" : (rsize / dsize) * ExpParams.v_min_d, "amin": parent2.user1["amin"], "delta_h" : parent2.user1["delta_h"], "delta_d" : deltas }]; 49 cr.user2 = { "Va" : cr.energ0, "gen" : 1 , "growth_step" : ExpParams.growth_step, "rsize": rsize, "vinit": cr.energ0}; 50 placeRandomlyNotColliding(cr); 51 } 52 } 53 54 for (var j = 0; j < repro_list.size; j++) 55 { 56 Populations[0].kill(repro_list[j]); 57 } 58 } 59 60 function reproduce_diploid(repro_list, number) 20 createOffspring(ExpParams.gend, ExpParams.ofnumd, [parent.user1, parent2.user1], {"Va" : ExpParams.ofnumd, "gen" : 1 , "growth_step" : ExpParams.growth_step, "rsize": ExpParams.rads[1], "vinit": ExpParams.ofnumd}); //TODO genes from both generations in user1 21 } 22 } 23 killParents(repro_list); 24 } 25 26 function reproduce_diploid(repro_list) 61 27 { 62 28 for (var i = 0; i < repro_list.size; i++) … … 64 30 var parent = Populations[0].get(repro_list[i]); 65 31 32 if (parent.user2["gen"] != 1) 33 { 34 Simulator.print("gen: " + parent.user2["gen"]); 35 } 36 66 37 if (parent.user2["gen"] == 1) 67 38 { 68 69 39 var number = parent.user2["Va"] / ExpParams.ofnumh; 70 71 72 40 for (var j = 0; j < number / 2; j++) 73 41 { … … 76 44 if (Math.rnd01 < ExpParams.crossprob) 77 45 { 78 var tmp = parent.user1[0]["vamin"]; 79 parent.user1[0]["vamin"] = parent.user1[1]["vamin"]; 80 parent.user1[1]["vamin"] = tmp; 46 crossover(parent, "vamin"); 81 47 crossed = 1; 82 48 } … … 84 50 for (var k = 0; k < 2; k++) 85 51 { 86 var rsize = parent.user1[k]["delta_h"] + ExpParams.haplo_rad; 87 var vamin = parent.user1[k]["vamin"]; 88 var deltas = parent.user1[k]["delta_h"]; 89 90 91 if (Math.rnd01 < ExpParams.mutationprob) 92 { 93 var diff = delta_change * deltas; 94 if (Math.rnd01 < 0.5) 95 { 96 deltas -= diff; 97 } 98 else 99 { 100 deltas += diff; 101 } 102 rsize = ExpParams.diplo_rad + deltas; 103 } 104 105 var geno = "//0\np:sh=1,sx=" + rsize + ",sy=" + rsize + ",sz=" + rsize + ", rz=3.14159265358979"; 106 var cr = Populations[0].add(geno); 107 cr.energ0 = ExpParams.ofnumh; 108 cr.energy = cr.energ0; 109 //vamin depends on rsize 110 var hsize = ExpParams.haplo_rad * ExpParams.delta_rate + ExpParams.haplo_rad; 111 cr.user1 = {"vamin" : (rsize / hsize) * ExpParams.v_min_h, "amin": ExpParams.age_min_d, "delta_h" : deltas, "delta_d" : parent.user1[0]["delta_d"]}; 112 cr.user2 = { "Va" : cr.energ0, "gen" : 0 , "growth_step" : ExpParams.growth_step, "rsize" : rsize, "vinit": cr.energ0}; 113 placeRandomlyNotColliding(cr); 52 createOffspring(ExpParams.genh, ExpParams.ofnumh, {"vamin" : ExpParams.v_min_h, "amin": ExpParams.age_min_h}, {"Va" : ExpParams.ofnumh, "gen" : 0 , "growth_step" : ExpParams.growth_step, "rsize" : ExpParams.rads[0], "vinit": ExpParams.ofnumh}); 114 53 } 115 54 … … 117 56 if (crossed == 1) 118 57 { 119 var tmp = parent.user1[0]["vamin"]; 120 parent.user1[0]["vamin"] = parent.user1[1]["vamin"]; 121 parent.user1[1]["vamin"] = tmp; 58 crossover(parent, "vamin"); 122 59 crossed = 0; 123 60 } 124 125 61 } 126 62 } 127 63 } 64 killParents(repro_list); 65 } 66 67 function crossover(parent, gene) 68 { 69 var tmp = parent.user1[0][gene]; 70 parent.user1[0][gene] = parent.user1[1][gene]; 71 parent.user1[1][gene] = tmp; 72 } 73 74 function killParents(repro_list) 75 { 128 76 for (var j = 0; j < repro_list.size; j++) 129 77 { … … 132 80 } 133 81 82 function createOffspring(geno, energy, new_user1, new_user2) 83 { 84 var cr = Populations[0].add(geno); 85 cr.energ0 = energy; 86 cr.energy = cr.energ0; 87 setGenotype(cr, new_user1, new_user2); 88 placeRandomlyNotColliding(cr); 89 } 134 90 135 91 function onStep() … … 152 108 haploids += 1; 153 109 e_inc_h += cr.energy; 154 size_h += cr.user1["delta_h"] + ExpParams.haplo_rad;110 size_h += ExpParams.rads[0]; //TODO change of size dependant on gene 155 111 vmin_h += cr.user1["vamin"]; 156 112 } … … 159 115 diploids += 1; 160 116 e_inc_d += cr.energy; 161 size_d += cr.user1[0]["delta_d"] + ExpParams.diplo_rad;117 size_d += ExpParams.rads[1]; //TODO change of size dependant on gene 162 118 vmin_d += cr.user1[0]["vamin"]; 163 119 } … … 219 175 to_repro_h.add(i); 220 176 } 221 elseif (cr.user2["gen"] == 1)177 if (cr.user2["gen"] == 1) 222 178 { 223 179 to_repro_d.add(i); … … 227 183 if (to_repro_h.size > 1) 228 184 { 229 reproduce_haploid(to_repro_h , ExpParams.ofnumh);185 reproduce_haploid(to_repro_h); 230 186 } 231 187 if (to_repro_d.size > 0) 232 188 { 233 reproduce_diploid(to_repro_d , ExpParams.ofnumd);189 reproduce_diploid(to_repro_d); 234 190 } 235 191 }
Note: See TracChangeset
for help on using the changeset viewer.