Ignore:
Timestamp:
08/07/16 15:05:16 (8 years ago)
Author:
oriona
Message:

Chamber growth visualization added, [OFFSPRING] message added, refactoring.

File:
1 edited

Legend:

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

    r561 r567  
    1717                        size=size*(1.35-0.35*lastchambergrowth); //last iteration: 'size' is only used for shifting (dx). The last chamber emerges at the surface of the previous one
    1818                }
    19                 str+="p:sh=1,sx=%g,sy=%g,sz=%g,vr=%s\n" % effectivesize % effectivesize % effectivesize % rgbstring;
     19                str += "p:sh=1,sx=%g,sy=%g,sz=%g,rz=3.14159265358979,vr=%s\n" % effectivesize % effectivesize % effectivesize % rgbstring;
    2020                if (i>0)
    21                         str+="j:%d,%d,sh=1,dx=%g,ry=%g\n" % (i-1) % i % (size*shift) % (angle_delta+i*angle_delta_delta);
     21                        str+="j:%d,%d,sh=1,dx=%g,rz=%g\n" % (i-1) % i % (size*shift) % (angle_delta+i*angle_delta_delta);
    2222                size*=growing;
    2323        }
    2424        return str;
    25 }
    26 
    27 function init_chambers()
    28 {
    29         colors = ["1.0,1.0,0.0","1.0,0.5,0.0"];
    30         retColors = ["1.0,1.0,1.0", "1.0,1.0,0.0"];
    31         chambers = [ ["p:sh=1, sx=0.2, sy=0.2, sz=0.2, rz=3.14159265358979,",
    32 "p:0.18421219587326, 0.13, sh=1, sx=0.21, sy=0.21, sz=0.21,",
    33 "p:0.323935478925705, 0.195192575454712, -0.0246672090142965, sh=1, sx=0.2205, sy=0.2205, sz=0.2205,",
    34 "p:0.467822402715683, 0.258204102516174, -0.0246672090142965, sh=1, sx=0.231525, sy=0.231525, sz=0.231525,",
    35 "p:0.664101362228394, 0.309014827013016, -0.0246672090142965, sh=1, sx=0.24310125, sy=0.24310125, sz=0.24310125,",
    36 "p:0.860512733459473, 0.274790525436401, -0.0246672090142965, sh=1, sx=0.2552563125, sy=0.2552563125, sz=0.2552563125,",
    37 "p:1.0273220539093, 0.1655353307724, -0.0246672090142965, sh=1, sx=0.268019128125, sy=0.268019128125, sz=0.268019128125,",
    38 "p:1.13825333118439, -0.000509921927005053, -0.0246672090142965, sh=1, sx=0.28142008453125, sy=0.28142008453125, sz=0.28142008453125,",
    39 "p:1.17569863796234, -0.196833491325378, -0.0246672090142965, sh=1, sx=0.295491088757813, sy=0.295491088757813, sz=0.295491088757813,",
    40 "p:1.13369226455688, -0.392314255237579, -0.0246672090142965, sh=1, sx=0.310265643195703, sy=0.310265643195703, sz=0.310265643195703,"],
    41         ["p:sh=1, sx=0.1, sy=0.1, sz=0.1, rz=3.14159265358979,",
    42 "p:0.110527315735817, -0.0167302016913891, sh=1, sx=0.105, sy=0.105, sz=0.105, rx=3.63519277003091e-33,",
    43 "p:0.207026958465576, -0.080698736011982, 1.17627548103266e-17, sh=1, sx=0.11025, sy=0.11025, sz=0.11025,",
    44 "p:0.271191358566284, -0.169948443770409, 1.17627548103266e-17, sh=1, sx=0.1157625, sy=0.1157625, sz=0.1157625,",
    45 "p:0.291628688573837, -0.286643952131271, 1.17627548103266e-17, sh=1, sx=0.121550625, sy=0.121550625, sz=0.121550625,",
    46 "p:0.264833927154541, -0.403534322977066, 1.17627548103266e-17, sh=1, sx=0.12762815625, sy=0.12762815625, sz=0.12762815625,",
    47 "p:0.194418027997017, -0.500668346881866, 1.17627548103266e-17, sh=1, sx=0.1340095640625, sy=0.1340095640625, sz=0.1340095640625,",
    48 "p:0.091719962656498, -0.562735974788666, 1.17627548103266e-17, sh=1, sx=0.140710042265625, sy=0.140710042265625, sz=0.140710042265625,",
    49 "p:-0.0270438715815544, -0.57991486787796, 1.17627548103266e-17, sh=1, sx=0.147745544378906, sy=0.147745544378906, sz=0.147745544378906,",
    50 "p:-0.143122747540474, -0.549489378929138, 1.17627548103266e-17, sh=1, sx=0.155132821597852, sy=0.155132821597852, sz=0.155132821597852,"]];
    51 }
    52 
    53 function createForamMorphology(morphotype, gen, chamber_num)
    54 {
    55         var geno = "//0\nm:Vstyle=foram\n" + chambers[morphotype][0] + "vr=" + colors[gen];
    56 
    57         chamber_num = Math.min(chamber_num, chambers[morphotype].size - 1);
    58 
    59         for (var i = 0; i < chamber_num; i++)
    60         {
    61                 geno += "\n" + chambers[morphotype][i+1]  + "vr=" +  colors[gen];
    62         }
    63 
    64         for (var i = 0; i < chamber_num; i++)
    65         {
    66                 geno += "\n" +  "j:"+ i +", "+ (i+1) +", sh=1";
    67         }
    68 
    69         return geno;
    7025}
    7126
     
    8035        else if (mode->opt == "birth")
    8136        {
     37                foram_uid += 1;
     38                var new_id = "c"+string(foram_uid);
    8239                mode->cr.data->genes = String.deserialize(String.serialize(mode->genes));
    83                 mode->cr.data->lifeparams = {"max_energy_level" : mode->energy0, "gen" : mode->gen,  "hibernated" : 0, "species" : mode->species, "reproduce" : 0, "dir" : randomDir(), "dir_counter" : Math.random(int(secToSimSteps(ExpProperties.dir_change_sec))), "chamber_growth" : -1, "division_time" : -1};                   
    84 
    85         }
     40                mode->cr.data->lifeparams = {"max_energy_level" : mode->energy0, "gen" : mode->gen,  "hibernated" : 0, "species" : mode->species, "reproduce" : 0, "dir" : randomDir(), "dir_counter" : Math.random(int(secToSimSteps(ExpProperties.dir_change_sec))), "chamber_growth" : -1, "division_time" : -1, "uid" : new_id};   
     41
     42                var oper = "cloning";
     43                if (mode->parentsuids.size > 1)
     44                {       
     45                        oper = "cross-over";
     46                }
     47               
     48                var dict={"Time":Simulator.stepNumber,"FromIDs":mode->parentsuids,"ID":new_id, "Inherited":[1.0], "Operation": oper, "Kind" : mode->gen};
     49                Simulator.print("[OFFSPRING] " + String.serialize(dict));               
     50        }
     51}
     52
     53function getEnergy0(radius)
     54{
     55        return energyFromVolume(micronsToFrams(radius),1);
    8656}
    8757
     
    9363        {
    9464                result = (result-ExpProperties.divisionCost)/2;
    95                 number *= 2; 
     65                number *= 2;
    9666        }
    9767        //Simulator.print("parent: " + parent_energy + " result: " + result + " number " + number);
    9868        return {"energy" : result, "number" : number};
    99 }
    100 
    101 function getEnergy0(radius)
    102 {
    103         return energyFromVolume(micronsToFrams(radius),1);
    10469}
    10570
     
    135100        }
    136101
    137         Simulator.print("haploid number of offspring: " + number + " energ0: " + energy0);
     102        //Simulator.print("haploid number of offspring: " + number + " energ0: " + energy0);
    138103
    139104        for (var j = 0; j < number; j++)
    140105        {
    141                 createOffspring(createForamMorphology(gen, gen, 0), energy0, new_genes, parent.data->lifeparams);
     106                createOffspring(create_genotype(ExpProperties.chamber_proculus_diplo, 1, colors[1], 1), energy0, new_genes, parent.data->lifeparams, [parent.data->lifeparams->uid, parent2.data->lifeparams->uid]);
    142107        }
    143108}
     
    156121                }       
    157122
    158         Simulator.print("diploid number of offspring: " + number+ " energ0: " + energy0);
     123        //Simulator.print("diploid number of offspring: " + number+ " energ0: " + energy0);
    159124
    160125        for (var j = 0; j < number / 2; j++)
     
    170135                for (var k = 0; k < 2; k++)
    171136                {
    172                         createOffspring(createForamMorphology(1 - parent.data->lifeparams->gen, 1 - parent.data->lifeparams->gen, 0), energy0, parent.data->genes[0], parent.data->lifeparams);
     137                        createOffspring(create_genotype(ExpProperties.chamber_proculus_haplo, 1, colors[0], 1), energy0, parent.data->genes[0], parent.data->lifeparams, [parent.data->lifeparams->uid]);
    173138                }
    174139
     
    220185                                        {
    221186                                                reproduce_haploid(parent1, parent2, 0);
    222                                                 print_repro_info(parent1);
    223                                                 print_repro_info(parent2);
     187                                                //print_repro_info(parent1);
     188                                                //print_repro_info(parent2);
    224189                                                pop.kill(parent1);
    225190                                                pop.kill(parent2);
     
    235200{
    236201        var reproduced = 1;
    237        
    238        
     202
    239203        if (cr.data->lifeparams->gen == 1)
    240204        {
     
    260224        if (reproduced == 1)
    261225        {
    262                 print_repro_info(cr);
     226                //print_repro_info(cr);
    263227                Populations[0].kill(cr);
    264228        }
     
    267231}
    268232
    269 function print_repro_info(cr)
    270 {
    271         Simulator.print("Reproduced " + cr.data->lifeparams->gen + " of species " + cr.data->lifeparams->species + " energy: " + cr.energy);
    272 }
    273 
    274233function foramReproduce(cr)
    275234{
    276         var properEnergy = cr.energy >= energyFromVolume(max_chamber_volume[cr.data->lifeparams->gen][getGene(cr, "min_repro_energies",0)[cr.data->lifeparams->gen]],0);
     235        var properEnergy = cr.energy >= getGene(cr, "min_repro_energies",0)[cr.data->lifeparams->gen];
    277236        var reproduced = 0;     
    278237
     
    309268}
    310269
    311 function createOffspring(geno, energy, parent_genes, parent_lifeparams)
     270function createOffspring(geno, energy, parent_genes, parent_lifeparams, parentsuids)
    312271{
    313272        curColor = retColors[1-parent_lifeparams->gen];
     
    315274        cr.energy0 = energy;
    316275        cr.energy = cr.energy0;
    317         setGenotype({"opt" : "birth", "cr" : cr, "gen" : 1 - parent_lifeparams->gen, "species" : parent_lifeparams->species, "energy0" : cr.energy0, "genes" : parent_genes});
     276        setGenotype({"opt" : "birth", "cr" : cr, "gen" : 1 - parent_lifeparams->gen, "species" : parent_lifeparams->species, "energy0" : cr.energy0, "genes" : parent_genes, "parentsuids" : parentsuids});
    318277        placeRandomlyNotColliding(cr);
    319278}
     279
     280function print_repro_info(cr)
     281{
     282        Simulator.print("Reproduced " + cr.data->lifeparams->gen + " of species " + cr.data->lifeparams->species + " energy: " + cr.energy);
     283}
Note: See TracChangeset for help on using the changeset viewer.