Ignore:
Timestamp:
06/30/15 23:02:42 (9 years ago)
Author:
oriona
Message:

removed unused part of code, refactorization

File:
1 edited

Legend:

Unmodified
Added
Removed
  • experiments/frams/foraminifera/data/scripts/forams_repro.inc

    r403 r404  
    44// -------------------------------- step begin --------------------------------
    55
    6 function reproduce_haploid(repro_list, number)
     6function reproduce_haploid(repro_list)
    77{
    88        var len = repro_list.size;
     
    1414                var parent2 = Populations[0].get(repro_list[i + 1]);
    1515
    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
    1718                for (var j = 0; j < number; j++)
    1819                {
    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
     26function reproduce_diploid(repro_list)
    6127{
    6228        for (var i = 0; i < repro_list.size; i++)
     
    6430                var parent = Populations[0].get(repro_list[i]);
    6531
     32                if (parent.user2["gen"] != 1)
     33                {
     34                        Simulator.print("gen: " + parent.user2["gen"]);
     35                }
     36
    6637                if (parent.user2["gen"] == 1)
    6738                {
    68 
    6939                        var number = parent.user2["Va"] / ExpParams.ofnumh;
    70 
    71 
    7240                        for (var j = 0; j < number / 2; j++)
    7341                        {
     
    7644                                if (Math.rnd01 < ExpParams.crossprob)
    7745                                {
    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");
    8147                                        crossed = 1;
    8248                                }
     
    8450                                for (var k = 0; k < 2; k++)
    8551                                {
    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});
    11453                                }
    11554
     
    11756                                if (crossed == 1)
    11857                                {
    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");
    12259                                        crossed = 0;
    12360                                }
    124 
    12561                        }
    12662                }
    12763        }
     64        killParents(repro_list);
     65}
     66
     67function 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
     74function killParents(repro_list)
     75{
    12876        for (var j = 0; j < repro_list.size; j++)
    12977        {
     
    13280}
    13381
     82function 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}
    13490
    13591function onStep()
     
    152108                        haploids += 1;
    153109                        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
    155111                        vmin_h += cr.user1["vamin"];
    156112                }
     
    159115                        diploids += 1;
    160116                        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
    162118                        vmin_d += cr.user1[0]["vamin"];
    163119                }
     
    219175                                        to_repro_h.add(i);
    220176                                }
    221                                 else if (cr.user2["gen"] == 1)
     177                                if (cr.user2["gen"] == 1)
    222178                                {
    223179                                        to_repro_d.add(i);
     
    227183                if (to_repro_h.size > 1)
    228184                {
    229                         reproduce_haploid(to_repro_h, ExpParams.ofnumh);
     185                        reproduce_haploid(to_repro_h);
    230186                }
    231187                if (to_repro_d.size > 0)
    232188                {
    233                         reproduce_diploid(to_repro_d, ExpParams.ofnumd);
     189                        reproduce_diploid(to_repro_d);
    234190                }
    235191        }
Note: See TracChangeset for help on using the changeset viewer.