- Timestamp:
- 03/25/16 00:28:50 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
experiments/frams/foraminifera/data/scripts/foraminifera.inc
r476 r479 55 55 if (mode->opt == 0) //initial 56 56 { 57 mode->cr.data->genes = {"min_repro_energies" : [ max_chamber_energ[0][getProperty(0, "min_repro_energ")], max_chamber_energ[1][getProperty(1, "min_repro_energ")]], "hibernation" : mode->species};58 mode->cr.data->lifeparams = {"max_energy_level" : getProperty(0,"energies0"), "gen" : 0, "hibernated" : 0, "species" : mode->species, "reproduce" : 0, "dir" : randomDir() };57 mode->cr.data->genes = {"min_repro_energies" : [energyFromVolume(max_chamber_volume[0][getProperty(0, "min_repro_energ")],0), energyFromVolume(max_chamber_volume[1][getProperty(1, "min_repro_energ")],0)], "hibernation" : mode->species}; 58 mode->cr.data->lifeparams = {"max_energy_level" : getProperty(0,"energies0"), "gen" : 0, "hibernated" : 0, "species" : mode->species, "reproduce" : 0, "dir" : randomDir(), "chamber_growth" : -1, "division_time" : -1}; 59 59 } 60 60 else if (mode->opt == 1) //child 61 61 { 62 mode->cr.data->lifeparams = {"max_energy_level" : getProperty(1 - mode->parent_lifeparams->gen,"energies0"), "gen" : 1 - mode->parent_lifeparams->gen, "hibernated" : 0, "species" : mode->parent_lifeparams->species, "reproduce" : 0, "dir" : randomDir() };62 mode->cr.data->lifeparams = {"max_energy_level" : getProperty(1 - mode->parent_lifeparams->gen,"energies0"), "gen" : 1 - mode->parent_lifeparams->gen, "hibernated" : 0, "species" : mode->parent_lifeparams->species, "reproduce" : 0, "dir" : randomDir(), "chamber_growth" : -1, "division_time" : -1}; 63 63 mode->cr.data->genes = mode->parent_genes; 64 64 } … … 68 68 mode->cr.data->lifeparams = mode->parent_lifeparams; 69 69 } 70 } 71 72 function gametsDivision(parent_energy, energy0) 73 { 74 var number = 1; 75 var result = parent_energy; 76 while ((result-ExpParams.divisionCost) >= energy0) 77 { 78 result = (result-ExpParams.divisionCost)/2; 79 number *= 2; 80 } 81 //Simulator.print("parent: " + parent_energy + " result: " + result + " number " + number); 82 return {"energy" : result, "number" : number}; 70 83 } 71 84 … … 75 88 if (clone == 1) 76 89 { 77 energy0 = getProperty(0,"energies0"); 78 number = (( 1 - getProperty(1, "e_repro_cost")) * parent.energy) / energy0; 90 var offspring = gametsDivision(parent.energy,getProperty(0,"energies0")); 91 energy0 = offspring->energy; 92 number = offspring->number; 79 93 new_genes = parent.data->genes; 80 94 parent.data->lifeparams->gen = 1 - parent.data->lifeparams->gen; //because of reversal of "gen" in createOffspring function … … 83 97 else 84 98 { 85 energy0 = getProperty(1,"energies0"); 86 number = (((1 - getProperty(parent.data->lifeparams->gen, "e_repro_cost")) * parent.energy) + ((1 -(getProperty(parent.data->lifeparams->gen, "e_repro_cost"))) * parent2.energy)) / energy0; 99 var offspring1 = gametsDivision(parent.energy,getProperty(1,"energies0")); 100 var offspring2 = gametsDivision(parent2.energy,getProperty(1,"energies0")); 101 energy0 = (offspring1->energy+offspring2->energy); 102 number = ExpParams.gametSuccessRate*(offspring1->number+offspring2->number)/2; 87 103 new_genes = [parent.data->genes, parent2.data->genes]; 88 104 gen = 1 - parent.data->lifeparams->gen; … … 152 168 if (parent1 != null && parent2 != null) 153 169 { 154 reproduce_haploid(parent1, parent2, 0); 155 print_repro_info(parent1); 156 print_repro_info(parent2); 157 pop.kill(parent1); 158 pop.kill(parent2); 159 parent1 = null; 160 parent2 = null; 170 //when parents are ready for reproduction start gametogenesis 171 if (parent1.data->lifeparams->division_time == -1 && parent2.data->lifeparams->division_time == -1) 172 { 173 var time = int(ExpParams.gametoPeriod/ExpParams.secPerStep); 174 parent1.data->lifeparams->division_time = time; 175 parent2.data->lifeparams->division_time = time; 176 parent1.idleen = 0; 177 parent2.idleen = 0; 178 //Simulator.print("parents "+parent1.uid + " " + parent2.uid + " ready to repro: "+Simulator.stepNumber); 179 } 180 //when gametogenesis is finished fuse gamets 181 else if (parent1.data->lifeparams->division_time == 0 && parent2.data->lifeparams->division_time == 0) 182 { 183 reproduce_haploid(parent1, parent2, 0); 184 print_repro_info(parent1); 185 print_repro_info(parent2); 186 //Simulator.print("parents "+parent1.uid + " " + parent2.uid + " reproduced: "+Simulator.stepNumber); 187 pop.kill(parent1); 188 pop.kill(parent2); 189 parent1 = null; 190 parent2 = null; 191 192 } 161 193 } 162 194 }
Note: See TracChangeset
for help on using the changeset viewer.