Ignore:
Timestamp:
03/27/16 00:12:20 (8 years ago)
Author:
oriona
Message:

Method for definig new species added.

File:
1 edited

Legend:

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

    r486 r487  
    3333global changePeriod;
    3434global phase;
     35global species_genes;
    3536
    3637@include "foraminifera.inc"
     
    5253        pop.death = 1;
    5354        pop.energy = 1;
    54         pop.selfmask = 0x10001;
    55         pop.othermask = 0x20001;
     55        pop.selfmask = 0;
     56        pop.othermask = 0;
    5657        //pop.selfmask = 0x20002; pop.othermask = 0x10002;
    5758        pop.perfperiod = 25;
     59        pop.bodysim = 0;
    5860
    5961        pop = Populations.addGroup("Nutrients");
     
    6264        pop.death = 1;
    6365        pop.energy = 1;
    64         pop.selfmask = 0x20002;
    65         pop.othermask = 0x10000;
     66        pop.selfmask = 0;
     67        pop.othermask = 0;
    6668        //pop.othermask = 0x10002;
     69        pop.bodysim = 0;
    6770
    6871        pop = Populations.addGroup("ReticulopodiaNutrients");
     
    7174        pop.death = 0;
    7275        pop.energy = 0;
    73         pop.selfmask = 0x20002;
    74         pop.othermask = 0x10000;
     76        pop.selfmask = 0;
     77        pop.othermask = 0;
     78        pop.bodysim = 0;
    7579
    7680        //world
     
    9094        //ExpProperties.visualize = 1; //uncomment to visualize reticulopodia and indicate nutrients positions
    9195
    92         //ExpProperties.logging = 1; //uncomment to enable logging simulation parameters to log files
     96        //ExpProperties.logging = 1; //uncomment to enable logging simulation parameters to log files   
    9397
    9498        //reproduction
     
    100104        ExpProperties.divisionCost = 15.6;
    101105        reprocounter = 0;
     106
     107        species_genes = [];
    102108
    103109        init_chambers();
     
    143149        changePeriod = 0;
    144150        phase = "high";
    145         ExpProperties.foodperiod = 21600;
     151        ExpProperties.foodperiod = 3600;
    146152        ExpProperties.foodPeriodChange = 0;
    147153        ExpProperties.nutrientradius = micronsToFrams(10);
     
    195201}
    196202
     203function getGene(cr, gen_id, gen_set)
     204{
     205        if (cr.data->lifeparams->gen == 0)
     206                return cr.data->genes[gen_id];
     207        else
     208                return cr.data->genes[gen_set][gen_id];
     209}
     210
    197211function addForam(species, iter, chambernum, ploid)
    198212{
    199         var geno = createForamGenotype(ploid, species, chambernum);
     213        var geno = createForamMorphology(species_genes[species]->morphotype, ploid, chambernum);
    200214        var cr = Populations[0].add(geno);
    201215        cr.name = "Initial creature" + species + "_" + iter;
     
    203217        cr.energy0 = energyFromVolume(max_chamber_volume[ploid][chambernum],0);
    204218        cr.energy = cr.energy0;
    205         setGenotype({"opt" : 0, "cr" : cr, "species" : species});
     219        setGenotype({"opt" : 0, "cr" : cr, "species" : species, "energy0" : cr.energy0, "genes" : species_genes[species]});
    206220        if (ploid == 1)
    207221        {
     
    219233        }       
    220234        //add new foram with random energy bewtween starting energy and reproduction treshold
    221         addForam(species, iter, Math.rndUni(0,getProperty(ploid, "min_repro_energ")),ploid);
     235        addForam(species, iter, Math.rndUni(0,species_genes[species]->min_repro_energies[ploid]),ploid);
     236}
     237
     238//new species can be added as a dictionary with parameter values that are different than default values
     239function addSpecies(new_genes)
     240{
     241        species_genes.add({"min_repro_energies" : [4,6], "energies0" : [20, 1.25], "hibernation" : 0, "morphotype" : 0});
     242        for (var i = 0; i < new_genes.size; i++)
     243        {
     244                var key = new_genes.getKey(i);
     245                species_genes[species_genes.size-1][key] = new_genes[key];
     246        }
    222247}
    223248
     
    228253        Populations[2].clear(); //reticulopodia and nutrients
    229254
    230         for (var i = 0; i < ExpProperties.foramPop; i++)
    231         {
    232                 addInitialForam(0, i); 
    233                 //addInitialForam(1, i);
     255        if (species_genes.size == 0)
     256        {
     257                addSpecies({}); //default
     258        }
     259
     260        for (var spec = 0; spec < species_genes.size; spec++)
     261        {
     262                for (var i = 0; i < ExpProperties.foramPop; i++)
     263                {
     264                        addInitialForam(spec, i);       
     265                }
    234266        }
    235267        o = Populations[0][0].getMechPart(0).orient.clone();
    236268        ExpState.totaltestedcr = 0;
    237         nutrientenergywaiting = ExpProperties.energy_nut;
    238269}
    239270
     
    361392        if ((chamber_num+1) < chambers[cr.data->lifeparams->species].size)
    362393        {
    363                 var geno = createForamGenotype(cr.data->lifeparams->gen, cr.data->lifeparams->species, chamber_num+1);
     394                var geno = createForamMorphology(getGene(cr, "morphotype", 0), cr.data->lifeparams->gen, chamber_num+1);
    364395                var cr2 = Populations[0].add(geno);
    365396
     
    367398                cr2.energy = cr2.energy0;
    368399
    369                 setGenotype({"cr" : cr2, "parent_genes" : cr.data->genes, "parent_lifeparams" : cr.data->lifeparams, "opt" : 2});
     400                setGenotype({"cr" : cr2, "parent_genes" : cr.data->genes, "parent_lifeparams" : cr.data->lifeparams, "opt" : 2, "energy0" : cr.energy0});
    370401                cr2.moveAbs(cr.center_x - cr2.size_x / 2, cr.center_y - cr2.size_y / 2, cr.pos_z);
    371402                setForamMeta(cr2);
     
    442473}
    443474
     475function fence(pos)
     476{
     477        return Math.min(Math.max(0,pos),World.wrldsiz);
     478}
     479
    444480function foramMove(cr)
    445481{
     
    447483
    448484        //adjustment in z axis
    449         cr.moveAbs(cr.pos_x, cr.pos_y, 0);
     485        cr.moveAbs(fence(cr.pos_x), fence(cr.pos_y), 0);
    450486
    451487        //are there any nutrients in zone 1 or 2?
     
    459495
    460496        //no nutrients in zone 2
    461         var hibernation = 0;
    462         if (cr.data->lifeparams->gen == 0) hibernation =  cr.data->genes->hibernation;
    463         else hibernation =  cr.data->genes[0]->hibernation;
    464         //hibernation
    465         if (hibernation == 1)
     497        if (getGene(cr, "hibernation",0) == 1)
    466498        {
    467499                reverseHib(cr);
     
    469501        }
    470502        //random move
    471         else if (cr.lifespan%int(dir_change/ExpProperties.secPerStep) == 0)
     503        else if (Simulator.stepNumber%int(dir_change/ExpProperties.secPerStep) == 0)
    472504        {
    473505                cr.data->lifeparams->dir = randomDir();
     
    732764function createStatistics()
    733765{       
    734         var number = [[0, 0],[0,0]]; // [species][gen]
    735         var e_inc = [[0, 0],[0,0]];
     766        var number = [];
     767        var e_inc = [];
    736768        var e_nut = 0.0;
     769
     770        for (var s = 0; s < species_genes.size; s++)
     771        {
     772                number.add([0,0]);// [haplo][diplo]
     773                e_inc.add([0,0]);
     774        }
    737775
    738776        for (var i = 0; i < Populations[0].size; i++)
     
    752790        }
    753791
    754         var log_numbers = [number[1][0], number[1][1], number[0][0], number[0][1], Populations[1].size];
    755         var log_energies = [e_inc[1][0], e_inc[1][1], e_inc[0][0], e_inc[0][1], e_nut];
     792        var log_numbers = [];
     793        var log_energies = [];
     794
     795        for (var s = 0; s < species_genes.size; s++)
     796        {
     797                for (var p = 0; p < 2; p++)
     798                {
     799                        log_numbers.add(number[s][p]);
     800                        log_energies.add(e_inc[s][p]);
     801                }
     802        }
     803       
     804        log_numbers.add(Populations[1].size);
     805        log_energies.add(e_nut);
    756806
    757807        log(log_numbers, "forams_log.txt");
Note: See TracChangeset for help on using the changeset viewer.