Ignore:
Timestamp:
01/31/19 03:43:35 (5 years ago)
Author:
Maciej Komosinski
Message:

Code formatting

File:
1 edited

Legend:

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

    r595 r847  
    22function create_genotype(proculus_size, number_of_chambers, rgbstring, lastchambergrowth) //lastchambergrowth is 0..1
    33{
    4         const shift=0.7;
    5         const angle_delta=0.8;
    6         const angle_delta_delta=-0.01;
    7         const growing=1.07; //7% growth
    8        
    9         var str="//0\nm:Vstyle=foram\n";
    10         var size=proculus_size;
    11         for(var i=0;i<number_of_chambers;i++)
    12         {
    13                 var effectivesize=size; //'effectivesize' is introduced only to consider the last chamber
    14                 if (i==number_of_chambers-1) //last chamber
    15                 {
    16                         effectivesize*=lastchambergrowth;
    17                         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
    18                         if (lastchambergrowth<1)
    19                                 rgbstring="0.9,0.9,0.9,i=\"growing=%g\"" % lastchambergrowth; //when the last chamber is growing, make it bright gray and add extra information in its "i" field
     4        const shift = 0.7;
     5        const angle_delta = 0.8;
     6        const angle_delta_delta = -0.01;
     7        const growing = 1.07; //7% growth
     8
     9        var str = "//0\nm:Vstyle=foram\n";
     10        var size = proculus_size;
     11        for(var i = 0; i < number_of_chambers; i++)
     12        {
     13                var effectivesize = size; //'effectivesize' is introduced only to consider the last chamber
     14                if (i == number_of_chambers - 1) //last chamber
     15                {
     16                        effectivesize *= lastchambergrowth;
     17                        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
     18                        if (lastchambergrowth < 1)
     19                                rgbstring = "0.9,0.9,0.9,i=\"growing=%g\"" % lastchambergrowth; //when the last chamber is growing, make it bright gray and add extra information in its "i" field
    2020                }
    2121                str += "p:sh=1,sx=%g,sy=%g,sz=%g,rz=3.14159265358979,vr=%s\n" % effectivesize % effectivesize % effectivesize % rgbstring;
    22                 if (i>0)
    23                         str+="j:%d,%d,sh=1,dx=%g,rz=%g\n" % (i-1) % i % (size*shift) % (angle_delta+i*angle_delta_delta);
    24                 size*=growing;
     22                if (i > 0)
     23                        str += "j:%d,%d,sh=1,dx=%g,rz=%g\n" % (i - 1) % i % (size * shift) % (angle_delta + i * angle_delta_delta);
     24                size *= growing;
    2525        }
    2626        return str;
     
    3838        {
    3939                foram_uid += 1;
    40                 var new_id = "c"+string(foram_uid);
     40                var new_id = "c" + string(foram_uid);
    4141                mode->cr.data->genes = String.deserialize(String.serialize(mode->genes));
    42                 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};   
     42                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};
    4343
    4444                var oper = "cloning";
    4545                var inherit = [1.0];
    4646                if (mode->parentsuids.size > 1)
    47                 {       
     47                {
    4848                        oper = "cross-over";
    4949                        inherit = [0.5, 0.5];
    5050                }
    51                
    52                 var dict={"Time":Simulator.stepNumber,"FromIDs":mode->parentsuids,"ID":new_id, "Inherited":inherit, "Operation": oper, "Kind" : mode->gen};
    53                 Simulator.print("[OFFSPRING] " + String.serialize(dict));               
     51
     52                var dict = {"Time": Simulator.stepNumber, "FromIDs": mode->parentsuids, "ID": new_id, "Inherited": inherit, "Operation": oper, "Kind" : mode->gen};
     53                Simulator.print("[OFFSPRING] " + String.serialize(dict));
    5454        }
    5555}
     
    5757function getEnergy0(radius)
    5858{
    59         return energyFromVolume(micronsToFrams(radius),1);
     59        return energyFromVolume(micronsToFrams(radius), 1);
    6060}
    6161
     
    6464        var number = 1;
    6565        var result = parent_energy;
    66         while ((result-ExpProperties.divisionCost) >= energy0)
    67         {
    68                 result = (result-ExpProperties.divisionCost)/2;
     66        while ((result - ExpProperties.divisionCost) >= energy0)
     67        {
     68                result = (result - ExpProperties.divisionCost) / 2;
    6969                number *= 2;
    7070        }
     
    7474
    7575function reproduce_haploid(parent, parent2, clone)
    76 {       
     76{
    7777        var number, energy0, new_genes, gen;
    7878        if (clone == 1)
    7979        {
    80                 var offspring = gametsDivision(parent.energy,getEnergy0(getGene(parent,"energies0",0)[0]));
     80                var offspring = gametsDivision(parent.energy, getEnergy0(getGene(parent, "energies0", 0)[0]));
    8181                energy0 = offspring->energy;
    8282                number = offspring->number;
     
    8787        else
    8888        {
    89                 var offspring1 = gametsDivision(parent.energy,getEnergy0(getGene(parent,"energies0", 0)[1]));
    90                 var offspring2 = gametsDivision(parent2.energy,getEnergy0(getGene(parent2,"energies0", 0)[1]));
    91                 energy0 = (offspring1->energy+offspring2->energy);
    92                 number = ExpProperties.gametSuccessRate*(offspring1->number+offspring2->number)/2;
     89                var offspring1 = gametsDivision(parent.energy, getEnergy0(getGene(parent, "energies0", 0)[1]));
     90                var offspring2 = gametsDivision(parent2.energy, getEnergy0(getGene(parent2, "energies0", 0)[1]));
     91                energy0 = (offspring1->energy + offspring2->energy);
     92                number = ExpProperties.gametSuccessRate * (offspring1->number + offspring2->number) / 2;
    9393                new_genes = [parent.data->genes, parent2.data->genes];
    9494                gen = 1 - parent.data->lifeparams->gen;
     
    9696                if (ExpProperties.logging == 1)
    9797                {
    98                                 log(createLogVector(parent, parent.energy),ExpProperties.logPref+"repro_energies_log.txt");
    99                                 log(createLogVector(parent2, parent2.energy),ExpProperties.logPref+"repro_energies_log.txt");
    100                                 log(createLogVector(parent, number),ExpProperties.logPref+"repro_num_log.txt");
    101                                 log(createLogVector(parent, parent.lifespan),ExpProperties.logPref+"lifespan_log.txt");
    102                                 log(createLogVector(parent2, parent2.lifespan),ExpProperties.logPref+"lifespan_log.txt");
    103                 }       
     98                        log(createLogVector(parent, parent.energy), ExpProperties.logPref + "repro_energies_log.txt");
     99                        log(createLogVector(parent2, parent2.energy), ExpProperties.logPref + "repro_energies_log.txt");
     100                        log(createLogVector(parent, number), ExpProperties.logPref + "repro_num_log.txt");
     101                        log(createLogVector(parent, parent.lifespan), ExpProperties.logPref + "lifespan_log.txt");
     102                        log(createLogVector(parent2, parent2.lifespan), ExpProperties.logPref + "lifespan_log.txt");
     103                }
    104104        }
    105105
     
    114114function reproduce_diploid(parent)
    115115{
    116         var offspring = gametsDivision(parent.energy,getEnergy0(getGene(parent,"energies0", 0)[0]));
    117         var energy0 = offspring->energy; 
     116        var offspring = gametsDivision(parent.energy, getEnergy0(getGene(parent, "energies0", 0)[0]));
     117        var energy0 = offspring->energy;
    118118        var number = offspring->number;
    119119
    120                 if (ExpProperties.logging == 1)
    121                 {
    122                         log(createLogVector(parent, parent.energy),ExpProperties.logPref+"repro_energies_log.txt");
    123                         log(createLogVector(parent, number),ExpProperties.logPref+"repro_num_log.txt");
    124                         log(createLogVector(parent, parent.lifespan),ExpProperties.logPref+"lifespan_log.txt");
    125                 }       
     120        if (ExpProperties.logging == 1)
     121        {
     122                log(createLogVector(parent, parent.energy), ExpProperties.logPref + "repro_energies_log.txt");
     123                log(createLogVector(parent, number), ExpProperties.logPref + "repro_num_log.txt");
     124                log(createLogVector(parent, parent.lifespan), ExpProperties.logPref + "lifespan_log.txt");
     125        }
    126126
    127127        //Simulator.print("diploid number of offspring: " + number+ " energ0: " + energy0);
     
    139139                for (var k = 0; k < 2; k++)
    140140                {
    141                         createOffspring(create_genotype(ExpProperties.chamber_proculus_haplo, 1, colors[0], 1), energy0, parent.data->genes[0], parent.data->lifeparams, [parent.data->lifeparams->uid]); 
     141                        createOffspring(create_genotype(ExpProperties.chamber_proculus_haplo, 1, colors[0], 1), energy0, parent.data->genes[0], parent.data->lifeparams, [parent.data->lifeparams->uid]);
    142142                }
    143143
     
    148148                        crossed = 0;
    149149                }
    150                        
     150
    151151        }
    152152}
     
    154154function reproduce_parents(species)
    155155{
    156                 var parent1 = null;
    157                 var parent2 = null;
    158                 var pop = Populations[0];
    159                 for (var i = pop.size-1; i >= 0; i--)
    160                 {
    161                         if (pop[i].data->lifeparams->reproduce == 1 && pop[i].data->lifeparams->species == species)
    162                         {
    163                                 if ((pop[i].data->lifeparams->gen==1) || ((pop[i].data->lifeparams->gen==0) && ExpProperties.stress == 0))
     156        var parent1 = null;
     157        var parent2 = null;
     158        var pop = Populations[0];
     159        for (var i = pop.size - 1; i >= 0; i--)
     160        {
     161                if (pop[i].data->lifeparams->reproduce == 1 && pop[i].data->lifeparams->species == species)
     162                {
     163                        if ((pop[i].data->lifeparams->gen == 1) || ((pop[i].data->lifeparams->gen == 0) && ExpProperties.stress == 0))
     164                        {
     165                                continue;
     166                        }
     167                        else if (parent1 == null)
     168                        {
     169                                parent1 = pop[i];
     170                        }
     171                        else if (parent2 == null)
     172                        {
     173                                parent2 = pop[i];
     174                        }
     175                        if (parent1 != null && parent2 != null)
     176                        {
     177                                //when parents are ready for reproduction start gametogenesis
     178                                if (parent1.data->lifeparams->division_time == -1 && parent2.data->lifeparams->division_time == -1)
    164179                                {
    165                                         continue;
     180                                        var time = int(secToSimSteps(ExpProperties.gametoPeriodSec));
     181                                        parent1.data->lifeparams->division_time = time;
     182                                        parent2.data->lifeparams->division_time = time;
     183                                        parent1.idleen = 0;
     184                                        parent2.idleen = 0;
     185                                        //Simulator.print("parents "+parent1.uid + " " + parent2.uid + " ready to repro: "+Simulator.stepNumber);
    166186                                }
    167                                 else if (parent1 == null)
     187                                //when gametogenesis is finished fuse gamets
     188                                else if (parent1.data->lifeparams->division_time == 0 && parent2.data->lifeparams->division_time == 0)
    168189                                {
    169                                         parent1 = pop[i];
     190                                        reproduce_haploid(parent1, parent2, 0);
     191                                        //print_repro_info(parent1);
     192                                        //print_repro_info(parent2);
     193                                        pop.kill(parent1);
     194                                        pop.kill(parent2);
     195                                        parent1 = null;
     196                                        parent2 = null;
    170197                                }
    171                                 else if (parent2 == null)
    172                                 {
    173                                         parent2 = pop[i];
    174                                 } 
    175                                 if (parent1 != null && parent2 != null)
    176                                 {
    177                                         //when parents are ready for reproduction start gametogenesis
    178                                         if (parent1.data->lifeparams->division_time == -1 && parent2.data->lifeparams->division_time == -1)
    179                                         {
    180                                                 var time = int(secToSimSteps(ExpProperties.gametoPeriodSec));
    181                                                 parent1.data->lifeparams->division_time = time;
    182                                                 parent2.data->lifeparams->division_time = time;
    183                                                 parent1.idleen = 0;
    184                                                 parent2.idleen = 0;
    185                                                 //Simulator.print("parents "+parent1.uid + " " + parent2.uid + " ready to repro: "+Simulator.stepNumber);
    186                                         }
    187                                         //when gametogenesis is finished fuse gamets
    188                                         else if (parent1.data->lifeparams->division_time == 0 && parent2.data->lifeparams->division_time == 0)
    189                                         {
    190                                                 reproduce_haploid(parent1, parent2, 0);
    191                                                 //print_repro_info(parent1);
    192                                                 //print_repro_info(parent2);
    193                                                 pop.kill(parent1);
    194                                                 pop.kill(parent2);
    195                                                 parent1 = null;
    196                                                 parent2 = null;
    197                                         }
    198                                 }       
    199                         }
    200                 }
     198                        }
     199                }
     200        }
    201201}
    202202
     
    219219                if (cr.signals.size == 0)
    220220                {
    221                         cr.signals.add("repro"+cr.data->lifeparams->species);
     221                        cr.signals.add("repro" + cr.data->lifeparams->species);
    222222                        cr.signals[0].power = 1;
    223223                }
     
    237237function foramReproduce(cr)
    238238{
    239         var properEnergy = cr.energy >= getGene(cr, "min_repro_energies",0)[cr.data->lifeparams->gen];
    240         var reproduced = 0;     
     239        var properEnergy = cr.energy >= getGene(cr, "min_repro_energies", 0)[cr.data->lifeparams->gen];
     240        var reproduced = 0;
    241241
    242242        //if creature has proper energy
     
    248248                        reproduced = readyToRepro(cr);
    249249                }
    250                 else if (cr.signals.receive("repro"+cr.data->lifeparams->species) > 0)
     250                else if (cr.signals.receive("repro" + cr.data->lifeparams->species) > 0)
    251251                {
    252252                        reproduced = readyToRepro(cr);
    253253                }
    254254                if (reproduced == 1)
    255                                 return 1;
     255                        return 1;
    256256        }
    257257
     
    259259        {
    260260                cr.signals.clear();
    261                 cr.data->lifeparams->reproduce = 0; 
     261                cr.data->lifeparams->reproduce = 0;
    262262        }
    263263
     
    274274function createOffspring(geno, energy, parent_genes, parent_lifeparams, parentsuids)
    275275{
    276         curColor = colors[1-parent_lifeparams->gen];
    277         var cr = createAndRotate(geno, 0, 2*Math.pi, 0);
     276        curColor = colors[1 - parent_lifeparams->gen];
     277        var cr = createAndRotate(geno, 0, 2 * Math.pi, 0);
    278278        cr.energy0 = energy;
    279279        cr.energy = cr.energy0;
Note: See TracChangeset for help on using the changeset viewer.