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.inc

    r486 r487  
    2828}
    2929
    30 function createForamGenotype(gen, species, chamber_num)
     30function createForamMorphology(morphotype, gen, chamber_num)
    3131{
    3232        var rad = getProperty(gen, "chamber_proculus");
    33         var geno = "//0\np:" + chambers[species][0] + "sh=1,sx=" + rad + ",sy=" + rad + ",sz=" + rad + ", rz=3.14159265358979,vr=" + colors[gen];
    34 
    35         chamber_num = Math.min(chamber_num, chambers[species].size - 1);
     33        var geno = "//0\np:" + chambers[morphotype][0] + "sh=1,sx=" + rad + ",sy=" + rad + ",sz=" + rad + ", rz=3.14159265358979,vr=" + colors[gen];
     34
     35        chamber_num = Math.min(chamber_num, chambers[morphotype].size - 1);
    3636
    3737        for (var i = 0; i < chamber_num; i++)
    3838        {
    3939                rad = getProperty(gen, "chamber_proculus") + getProperty(gen, "chamber_difference") * (i + 1);
    40                 geno += "\n" + "p:" + chambers[species][i+1] + "sh=1,sx=" + rad + ",sy=" + rad + ",sz=" + rad + ",vr=" + colors[gen];
     40                geno += "\n" + "p:" + chambers[morphotype][i+1] + "sh=1,sx=" + rad + ",sy=" + rad + ",sz=" + rad + ",vr=" + colors[gen];
    4141        }
    4242
     
    4646        }
    4747
    48         if (species == 0) geno += "\nn:p=0,d=\"S\"";
     48        if (morphotype == 0) geno += "\nn:p=0,d=\"S\"";
    4949
    5050        return geno;
     
    5555        if (mode->opt == 0) //initial
    5656        {
    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};
     57                mode->cr.data->genes = String.deserialize(String.serialize(mode->genes));
     58                mode->cr.data->lifeparams = {"max_energy_level" : mode->energy0, "gen" : 0,  "hibernated" : 0, "species" : mode->species, "reproduce" : 0, "dir" : randomDir(), "chamber_growth" : -1, "division_time" : -1};
    5959        }
    6060        else if (mode->opt  == 1) //child
    6161        {
    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                 mode->cr.data->genes = mode->parent_genes;
     62                mode->cr.data->lifeparams = {"max_energy_level" : mode->energy0, "gen" : 1 - mode->parent_lifeparams->gen,  "hibernated" : 0, "species" : mode->parent_lifeparams->species, "reproduce" : 0, "dir" : randomDir(), "chamber_growth" : -1, "division_time" : -1};
     63                mode->cr.data->genes = String.deserialize(String.serialize(mode->parent_genes));
    6464        }
    6565        else //grow
     
    8181        //Simulator.print("parent: " + parent_energy + " result: " + result + " number " + number);
    8282        return {"energy" : result, "number" : number};
     83}
     84
     85function getEnergy0(radius)
     86{
     87        return energyFromVolume(micronsToFrams(radius),1);
    8388}
    8489
     
    8893        if (clone == 1)
    8994        {
    90                 var offspring = gametsDivision(parent.energy,getProperty(0,"energies0"));
     95                var offspring = gametsDivision(parent.energy,getEnergy0(getGene(parent,"energies0",0)[0]));
    9196                energy0 = offspring->energy;
    9297                number = offspring->number;
     
    97102        else
    98103        {
    99                 var offspring1 = gametsDivision(parent.energy,getProperty(1,"energies0"));
    100                 var offspring2 = gametsDivision(parent2.energy,getProperty(1,"energies0"));
     104                var offspring1 = gametsDivision(parent.energy,getEnergy0(getGene(parent,"energies0", 0)[1]));
     105                var offspring2 = gametsDivision(parent2.energy,getEnergy0(getGene(parent2,"energies0", 0)[1]));
    101106                energy0 = (offspring1->energy+offspring2->energy);
    102107                number = ExpProperties.gametSuccessRate*(offspring1->number+offspring2->number)/2;
     
    109114        for (var j = 0; j < number; j++)
    110115        {
    111                 createOffspring(createForamGenotype(gen, parent.data->lifeparams->species, 0), energy0, new_genes, parent.data->lifeparams);
     116                createOffspring(createForamMorphology(getGene(parent, "morphotype", 0), gen, 0), energy0, new_genes, parent.data->lifeparams);
    112117        }
    113118}
     
    115120function reproduce_diploid(parent)
    116121{
    117         var energy0 = getProperty(0,"energies0");
     122        var energy0 =getEnergy0( getGene(parent,"energies0", 0)[0]);
    118123        var number = ((1 - (getProperty(parent.data->lifeparams->gen, "e_repro_cost"))) * parent.energy) / energy0;
    119124
     
    132137                for (var k = 0; k < 2; k++)
    133138                {
    134                         createOffspring(createForamGenotype(1 - parent.data->lifeparams->gen, parent.data->lifeparams->species, 0), energy0, parent.data->genes[0], parent.data->lifeparams);
     139                        createOffspring(createForamMorphology(getGene(parent, "morphotype", 0), 1 - parent.data->lifeparams->gen, 0), energy0, parent.data->genes[0], parent.data->lifeparams);
    135140                }
    136141
     
    236241}
    237242
    238 
    239 
    240243function foramReproduce(cr)
    241244{
    242         var properEnergy = 0;
    243         var reproduced = 0;
    244 
    245         if (cr.data->lifeparams->gen == 0)
    246         {
    247                 properEnergy = ( cr.energy >= cr.data->genes->min_repro_energies[cr.data->lifeparams->gen] );
    248         }
    249         else
    250         {
    251                 properEnergy = ( cr.energy >= cr.data->genes[0]->min_repro_energies[cr.data->lifeparams->gen] ); //TODO gene selection
    252         }
     245        var properEnergy = cr.energy >= energyFromVolume(max_chamber_volume[0][getGene(cr, "min_repro_energies",0)[cr.data->lifeparams->gen]],0);
     246        var reproduced = 0;     
    253247
    254248        //if creature has proper energy
     
    289283        cr.energy0 = energy;
    290284        cr.energy = cr.energy0;
    291         setGenotype({"cr" : cr, "parent_genes" : parent_genes, "parent_lifeparams" : parent_lifeparams, "opt" : 1});
     285        setGenotype({"cr" : cr, "parent_genes" : parent_genes, "parent_lifeparams" : parent_lifeparams, "opt" : 1, "energy0" : cr.energy0});
    292286        placeRandomlyNotColliding(cr);
    293287}
Note: See TracChangeset for help on using the changeset viewer.