Changeset 847 for experiments


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

Code formatting

Location:
experiments/frams/foraminifera/data/scripts
Files:
3 edited

Legend:

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

    r638 r847  
    6060        pop.othermask = 0;
    6161        //pop.selfmask = 0x20002; pop.othermask = 0x10002;
    62         pop.perfperiod = 25; 
     62        pop.perfperiod = 25;
    6363        pop.bodysim = 0;
    6464
     
    8686        World.wrldwat = 200;
    8787        World.wrldsiz = micronsToFrams(100000);
    88         wrldsizSquareMeters = Math.pow(framsToMicrons(World.wrldsiz)*0.000001,2);
     88        wrldsizSquareMeters = Math.pow(framsToMicrons(World.wrldsiz) * 0.000001, 2);
    8989        World.wrldbnd = 1;
    9090
    9191        //ExpProperties.visualize = 1; //uncomment to visualize reticulopodia and indicate nutrients positions
    9292
    93         //ExpProperties.logging = 1; //uncomment to enable logging simulation parameters to log files   
     93        //ExpProperties.logging = 1; //uncomment to enable logging simulation parameters to log files
    9494        ExpProperties.logPref = "";
    9595
     
    9999        ExpProperties.chamber_proculus_haplo = micronsToFrams(20);
    100100        ExpProperties.chamber_proculus_diplo = micronsToFrams(10);
    101         colors = ["1.0,1.0,0.3","1.0,0.7,0.0"]; //yellow and orange
     101        colors = ["1.0,1.0,0.3", "1.0,0.7,0.0"]; //yellow and orange
    102102        curColor = colors[0];
    103103        curRadius = ExpProperties.zone1_range;
     
    105105        //nutrients
    106106        ExpProperties.nutrientradius = micronsToFrams(10);
    107         ExpProperties.energy_nut = 200 * energyFromVolume(ExpProperties.nutrientradius,1);
     107        ExpProperties.energy_nut = 200 * energyFromVolume(ExpProperties.nutrientradius, 1);
    108108        nutrientSqrCm = 10;
    109         ExpProperties.nutrient_pop = Math.pow(framsToMicrons(World.wrldsiz)*0.0001,2)/nutrientSqrCm;
     109        ExpProperties.nutrient_pop = Math.pow(framsToMicrons(World.wrldsiz) * 0.0001, 2) / nutrientSqrCm;
    110110
    111111        ExpState.totaltestedcr = 0;
     
    116116        //addSpecies({"min_repro_energies" : [4,6]});
    117117        //addSpecies({"min_repro_energies" : [4,8]});
    118        
     118
    119119        //Simulator.print(create_genotype(0.2, 30, "1.0,1.0,0.0", 0.6)); //sample call
    120120        //Simulator.print(create_genotype(0.1, 40, "1.0,0.5,0.0", 0.1)); //sample call
     
    135135        if (ExpProperties.max_chamber_num_haplo == max_chambers_def && ExpProperties.max_chamber_num_diplo == max_chambers_def)
    136136        {
    137                 max_chamber_volume = [[30403.5869594578,52812.2546633948,79578.5148482541,113588.815134453,154620.677376218,205094.322220826,262572.712174265,326078.453295303,402342.518962956,498133.985678766,615066.864740109,759500.497626816,937064.025544282,1155915.25563075,1429139.14079748,1762487.92940157,2176286.62046069,2685795.63187845,3316190.12127043,4096436.04462706,5051343.25226193,6231980.1061213,7687880.79524734,9485307.02904958,11716968.9852569,14459866.4934433,17836388.9853663,22004935.7247348,27138607.2546045,33482425.1582986,41336775.1280297,50997910.7842793,62888631.7871037,77563060.9243464,95659468.591964]
    138 , [3430.07716920763,6159.93090353532,9322.94192815286,13462.9896597283,18399.8550832969,24558.9218126892,31468.8148639192,39189.4977865513,48404.4292075836,60185.8639086061,74490.6048472854,92117.8178412275,113852.779747083,140714.366929552,174450.937643841,215250.242147183,266323.295274072,328858.042352538,406552.379957238,503526.321155323,621060.781025019,767240.824049468,947210.683224091,1169506.19906112,1447211.61255879,1787155.29073739,2205627.64766244,2723413.2837305,3360233.53738709,4147771.02835393,5126445.06973928,6328060.3331703,7805693.278958,9631924.72156452,11884287.1596814]];
     137                max_chamber_volume = [[30403.5869594578, 52812.2546633948, 79578.5148482541, 113588.815134453, 154620.677376218, 205094.322220826, 262572.712174265, 326078.453295303, 402342.518962956, 498133.985678766, 615066.864740109, 759500.497626816, 937064.025544282, 1155915.25563075, 1429139.14079748, 1762487.92940157, 2176286.62046069, 2685795.63187845, 3316190.12127043, 4096436.04462706, 5051343.25226193, 6231980.1061213, 7687880.79524734, 9485307.02904958, 11716968.9852569, 14459866.4934433, 17836388.9853663, 22004935.7247348, 27138607.2546045, 33482425.1582986, 41336775.1280297, 50997910.7842793, 62888631.7871037, 77563060.9243464, 95659468.591964]
     138                                      , [3430.07716920763, 6159.93090353532, 9322.94192815286, 13462.9896597283, 18399.8550832969, 24558.9218126892, 31468.8148639192, 39189.4977865513, 48404.4292075836, 60185.8639086061, 74490.6048472854, 92117.8178412275, 113852.779747083, 140714.366929552, 174450.937643841, 215250.242147183, 266323.295274072, 328858.042352538, 406552.379957238, 503526.321155323, 621060.781025019, 767240.824049468, 947210.683224091, 1169506.19906112, 1447211.61255879, 1787155.29073739, 2205627.64766244, 2723413.2837305, 3360233.53738709, 4147771.02835393, 5126445.06973928, 6328060.3331703, 7805693.278958, 9631924.72156452, 11884287.1596814]];
    139139        }
    140140
     
    143143                max_chamber_volume = [Vector.new(), Vector.new()];
    144144                var density = 100;
    145                 for (var ploid = 0; ploid < 2; ploid++) 
     145                for (var ploid = 0; ploid < 2; ploid++)
    146146                {
    147147                        var rad = getPloidRadius(ploid);
    148                         for (var cham_num = 0; cham_num < getProperty(ploid,"max_chamber_num"); cham_num++)
     148                        for (var cham_num = 0; cham_num < getProperty(ploid, "max_chamber_num"); cham_num++)
    149149                        {
    150                                 max_chamber_volume[ploid].add(volumeFromGeno(ploid, rad, cham_num+1, density));
    151                         }                                 
     150                                max_chamber_volume[ploid].add(volumeFromGeno(ploid, rad, cham_num + 1, density));
     151                        }
    152152                }
    153153        }
     
    162162                for (var i = 0; i < ExpProperties.foramPop; i++)
    163163                {
    164                         addInitialForam(spec, i);       
     164                        addInitialForam(spec, i);
    165165                }
    166166        }
     
    239239{
    240240        var geno = create_genotype(rad, chamber_num, colors[morphotype], 1);
    241         var m=Model.newFromString(geno);
    242         var mg=ModelGeometry.forModel(m);
    243         mg.geom_density=density;
     241        var m = Model.newFromString(geno);
     242        var mg = ModelGeometry.forModel(m);
     243        mg.geom_density = density;
    244244        var volumeInFrams = mg.volume();
    245245
    246         return volumeInFrams/Math.pow(ExpProperties.scalingFactor,3);
    247 }
    248 
    249 function secToSimSteps(value_in_sec){
    250         return value_in_sec/ExpProperties.secPerStep;
     246        return volumeInFrams / Math.pow(ExpProperties.scalingFactor, 3);
     247}
     248
     249function secToSimSteps(value_in_sec)
     250{
     251        return value_in_sec / ExpProperties.secPerStep;
    251252}
    252253
    253254function volumeInMicrons(radiusInFrams)
    254255{
    255         return 4.0/3.0*Math.pi*Math.pow(framsToMicrons(radiusInFrams),3);
     256        return 4.0 / 3.0 * Math.pi * Math.pow(framsToMicrons(radiusInFrams), 3);
    256257}
    257258
     
    260261        if (isRadiusInFrams == 1) //radius in frams
    261262        {
    262                 return ExpProperties.picoCarbonPerMikro*volumeInMicrons(base);
     263                return ExpProperties.picoCarbonPerMikro * volumeInMicrons(base);
    263264        }
    264265        else //volume in microns
     
    270271function getMovePerStep()
    271272{
    272         return micronsToFrams((ExpProperties.foramSpeedMmPerMin/60)*1000)*ExpProperties.secPerStep;
     273        return micronsToFrams((ExpProperties.foramSpeedMmPerMin / 60) * 1000) * ExpProperties.secPerStep;
    273274}
    274275
    275276function micronsToFrams(micrometers)
    276277{
    277         return micrometers*ExpProperties.scalingFactor;
     278        return micrometers * ExpProperties.scalingFactor;
    278279}
    279280
    280281function framsToMicrons(framsworldunits)
    281282{
    282         return framsworldunits/ExpProperties.scalingFactor;
     283        return framsworldunits / ExpProperties.scalingFactor;
    283284}
    284285
     
    292293function getGene(cr, gen_id, gen_set)
    293294{
    294         if (cr.data->lifeparams->gen == 0) 
     295        if (cr.data->lifeparams->gen == 0)
    295296                return cr.data->genes[gen_id];
    296         else 
     297        else
    297298                return cr.data->genes[gen_set][gen_id];
    298299}
     
    301302{
    302303        var radius = ExpProperties.chamber_proculus_haplo;
    303                 if (ploid == 1)
    304                 {
    305                         radius = ExpProperties.chamber_proculus_diplo;
    306                 }
     304        if (ploid == 1)
     305        {
     306                radius = ExpProperties.chamber_proculus_diplo;
     307        }
    307308        return radius;
    308309}
     
    313314        for (var i = 0; i < chamber_num; i++)
    314315        {
    315                 if (energy < energyFromVolume(max_chamber_volume[ploid][i],0))
    316                 {
    317                         chamber_num = i+1;
     316                if (energy < energyFromVolume(max_chamber_volume[ploid][i], 0))
     317                {
     318                        chamber_num = i + 1;
    318319                        break;
    319                 }       
    320         }                                 
    321        
     320                }
     321        }
     322
    322323        return chamber_num;
    323324}
     
    326327{
    327328        var cr = Populations[pop_num].add(geno);
    328         cr.rotate(0,0,Math.rndUni(rotate_min, rotate_max));
    329         return cr;     
     329        cr.rotate(0, 0, Math.rndUni(rotate_min, rotate_max));
     330        return cr;
    330331}
    331332
     
    337338        var geno = create_genotype(radius, chambernum, colors[ploid], 1);
    338339        curColor = colors[ploid];
    339         var cr = createAndRotate(geno, 0, 2*Math.pi, 0);
     340        var cr = createAndRotate(geno, 0, 2 * Math.pi, 0);
    340341        cr.name = "Initial creature" + species + "_" + iter;
    341342        placeRandomlyNotColliding(cr);
     
    355356        {
    356357                ploid = 1;
    357         }       
     358        }
    358359        //add new foram with random energy bewtween starting energy and reproduction threshold
    359360        var repro_thr = species_genes[species]->min_repro_energies[ploid];
    360         var start_energy = Math.rndUni(energyFromVolume(getPloidRadius(ploid),1),repro_thr-0.25*repro_thr);
    361         addForam(species, iter, start_energy,ploid);
     361        var start_energy = Math.rndUni(energyFromVolume(getPloidRadius(ploid), 1), repro_thr - 0.25 * repro_thr);
     362        addForam(species, iter, start_energy, ploid);
    362363}
    363364
     
    365366function addSpecies(new_genes)
    366367{
    367         species_genes.add({"min_repro_energies" : [ExpProperties.min_repro_energ_haplo,ExpProperties.min_repro_energ_diplo], "energies0" : [ExpProperties.energies0_haplo, ExpProperties.energies0_diplo], "hibernation" : 0, "morphotype" : 0});
     368        species_genes.add({"min_repro_energies" : [ExpProperties.min_repro_energ_haplo, ExpProperties.min_repro_energ_diplo], "energies0" : [ExpProperties.energies0_haplo, ExpProperties.energies0_diplo], "hibernation" : 0, "morphotype" : 0});
    368369        for (var i = 0; i < new_genes.size; i++)
    369370        {
    370371                var key = new_genes.getKey(i);
    371                 species_genes[species_genes.size-1][key] = new_genes[key];
    372         } 
     372                species_genes[species_genes.size - 1][key] = new_genes[key];
     373        }
    373374}
    374375
     
    378379{
    379380        //percent of current energy
    380         cr.idleen = (ExpProperties.e_meta * cr.energy)*ExpProperties.secPerStep;
     381        cr.idleen = (ExpProperties.e_meta * cr.energy) * ExpProperties.secPerStep;
    381382}
    382383
     
    388389function getZoneRange(cr, zone_num)
    389390{
    390         return ExpProperties.["zone"+zone_num+"_range"];
     391        return ExpProperties.["zone" + zone_num + "_range"];
    391392}
    392393
    393394function addReticulopodia(cr, radius)
    394395{
    395                 if (reticulopodiaExists(cr))
    396                 {
    397                         Populations[2].delete(cr.data->reticulopodiacreature);
    398                 }
    399                 var ret = Populations[2].add("//0\nm:Vstyle=reticulopodia\np:sh=1,sx=0.001,sy=0.001,sz=0.001\np:sh=3,sx=0.01,sy="+radius+",sz="+radius+",ry=1.57079633,vr="+curColor+"\nj:0, 1, sh=1");
    400                 cr.data->reticulopodiacreature = ret;
    401                 ret.getMechPart(0).orient.set(cr.getMechPart(0).orient);
    402                 ret.locationSetBboxLow(cr.bboxCenter.x-radius, cr.bboxCenter.y-radius, cr.bboxCenter.z-radius);
     396        if (reticulopodiaExists(cr))
     397        {
     398                Populations[2].delete(cr.data->reticulopodiacreature);
     399        }
     400        var ret = Populations[2].add("//0\nm:Vstyle=reticulopodia\np:sh=1,sx=0.001,sy=0.001,sz=0.001\np:sh=3,sx=0.01,sy=" + radius + ",sz=" + radius + ",ry=1.57079633,vr=" + curColor + "\nj:0, 1, sh=1");
     401        cr.data->reticulopodiacreature = ret;
     402        ret.getMechPart(0).orient.set(cr.getMechPart(0).orient);
     403        ret.locationSetBboxLow(cr.bboxCenter.x - radius, cr.bboxCenter.y - radius, cr.bboxCenter.z - radius);
    403404}
    404405
     
    421422                if (!cr.boundingBoxCollisions(0))
    422423                {
    423                         cr.locationSetBboxLow(cr.bboxLow.x, cr.bboxLow.y, -cr.getPart(cr.numparts-1).sx); //place slightly under the bottom surface ("z" value depends on the size of the last=largest chamber)
     424                        cr.locationSetBboxLow(cr.bboxLow.x, cr.bboxLow.y, -cr.getPart(cr.numparts - 1).sx); //place slightly under the bottom surface ("z" value depends on the size of the last=largest chamber)
    424425                        return cr;
    425426                }
     
    451452function foramGrow(cr, chamber_num, lastchambergrowth)
    452453{
    453         if ((chamber_num+1) <= max_chamber_volume[cr.data->lifeparams->gen].size)
     454        if ((chamber_num + 1) <= max_chamber_volume[cr.data->lifeparams->gen].size)
    454455        {
    455456                curColor = colors[cr.data->lifeparams->gen];
    456457                var ploid = cr.data->lifeparams->gen;
    457                 var geno = create_genotype(getPloidRadius(ploid), chamber_num+1, colors[ploid], lastchambergrowth);
     458                var geno = create_genotype(getPloidRadius(ploid), chamber_num + 1, colors[ploid], lastchambergrowth);
    458459                var cr2 = createAndRotate(geno, 0, 0, 0);
    459460
     
    463464
    464465                setGenotype({"cr" : cr2, "parent_genes" : cr.data->genes, "parent_lifeparams" : cr.data->lifeparams, "opt" : "growth", "energy0" : cr.energy0});
    465                 cr2.locationSetBboxLow(cr.bboxLow.x, cr.bboxLow.y,cr.bboxLow.z);
     466                cr2.locationSetBboxLow(cr.bboxLow.x, cr.bboxLow.y, cr.bboxLow.z);
    466467                setForamMeta(cr2);
    467468
     
    479480{
    480481        var total_time = secToSimSteps(ExpProperties.chamberGrowthSec);
    481         var ret_unit = total_time/chamber_vis_denominator;
    482         var chamber_unit = total_time-ret_unit;
     482        var ret_unit = total_time / chamber_vis_denominator;
     483        var chamber_unit = total_time - ret_unit;
    483484
    484485        if (chamber_time < ret_unit || chamber_time >= chamber_unit)
    485486        {
    486                 var new_rad = Math.min(Math.max((chamber_time%ret_unit)/ret_unit*getZoneRange(cr,1),0.01),getZoneRange(cr,1));
     487                var new_rad = Math.min(Math.max((chamber_time % ret_unit) / ret_unit * getZoneRange(cr, 1), 0.01), getZoneRange(cr, 1));
    487488
    488489                if(chamber_time < ret_unit)
    489490                {
    490                         new_rad = getZoneRange(cr,1)-new_rad;
     491                        new_rad = getZoneRange(cr, 1) - new_rad;
    491492                }
    492493
    493494                curColor = colors[cr.data->lifeparams->gen];
    494                 addReticulopodia(cr,new_rad);
     495                addReticulopodia(cr, new_rad);
    495496
    496497                if (chamber_time == 0)//checking for end of chamber growth process
    497498                {
    498                         cr.data->lifeparams->chamber_growth = -1;       
     499                        cr.data->lifeparams->chamber_growth = -1;
    499500                }
    500501        }
    501502        else
    502503        {
    503                 var new_rad = 1 - Math.min(Math.max((chamber_time-ret_unit)/chamber_unit,0.01),1);
     504                var new_rad = 1 - Math.min(Math.max((chamber_time - ret_unit) / chamber_unit, 0.01), 1);
    504505                curRadius = cr.data->reticulopodiacreature.getPart(1).sy;
    505                                
     506
    506507                if (chamber_time == ret_unit)
    507508                {
     
    509510                }
    510511
    511                 var new_cr = foramGrow(cr, chamberNumFromEnergy(cr.data->lifeparams->max_energy_level, cr.data->lifeparams->gen)-1, new_rad);
    512                 curRadius = getZoneRange(new_cr,1);
     512                var new_cr = foramGrow(cr, chamberNumFromEnergy(cr.data->lifeparams->max_energy_level, cr.data->lifeparams->gen) - 1, new_rad);
     513                curRadius = getZoneRange(new_cr, 1);
    513514        }
    514515}
     
    517518{
    518519        var p = XYZ.new(cr.bboxCenter.x, cr.bboxCenter.y, cr.bboxCenter.z);
    519         var n = cr.signals.receiveSet("nutrient", getZoneRange(cr,2));
     520        var n = cr.signals.receiveSet("nutrient", getZoneRange(cr, 2));
    520521
    521522        //if signals are received find the source of the nearest
     
    536537                        distvec.sub(p);
    537538                        dist = distvec.length;
    538                         if (dist < getZoneRange(cr,1))
     539                        if (dist < getZoneRange(cr, 1))
    539540                        {
    540541                                if (n[i].value != null)
     
    562563                return 1;
    563564        }
    564        
     565
    565566        else
    566567        {
     
    574575        {
    575576                //percent of maximal energy
    576                 cr.energy -= (ExpProperties.energy_move * cr.data->lifeparams->max_energy_level)*ExpProperties.secPerStep;
     577                cr.energy -= (ExpProperties.energy_move * cr.data->lifeparams->max_energy_level) * ExpProperties.secPerStep;
    577578        }
    578579}
     
    580581function fence(center, zone)
    581582{
    582         return Math.min(Math.max(0+zone,center),World.wrldsiz-zone); //add and subtract zone from the world size to prevent reticulopodia from crossing the fence
     583        return Math.min(Math.max(0 + zone, center), World.wrldsiz - zone); //add and subtract zone from the world size to prevent reticulopodia from crossing the fence
    583584}
    584585
     
    588589        {
    589590                var moved = stepToNearest(cr); //TODO weighted sum of distance and energy
    590                 if (moved==1)
    591                 { 
     591                if (moved == 1)
     592                {
    592593                        moveReticulopodia(cr);
    593594                        return;
     
    595596        }
    596597
    597         //Prevents forams from crossing the world border. In the case of touching the border with the reticulopodia direction of the movement should be changed. 
     598        //Prevents forams from crossing the world border. In the case of touching the border with the reticulopodia direction of the movement should be changed.
    598599        var change_direction = 0;
    599600        var new_x = fence(cr.bboxCenter.x, getZoneRange(cr, 1));
     
    603604        {
    604605                change_direction = 1;
    605                 cr.locationSetBboxLow(new_x-cr.bboxSize.x/2, new_y-cr.bboxSize.y/2, -cr.getPart(cr.numparts-1).sx);//place slightly under the bottom surface ("z" value depends on the size of the last=largest chamber)
     606                cr.locationSetBboxLow(new_x - cr.bboxSize.x / 2, new_y - cr.bboxSize.y / 2, -cr.getPart(cr.numparts - 1).sx); //place slightly under the bottom surface ("z" value depends on the size of the last=largest chamber)
    606607        }
    607608
    608609        //no nutrients in zone 2
    609         if (getGene(cr, "hibernation",0) == 1)
     610        if (getGene(cr, "hibernation", 0) == 1)
    610611        {
    611612                reverseHib(cr);
    612                 cr.drive = XYZ.new(0,0,0);
     613                cr.drive = XYZ.new(0, 0, 0);
    613614        }
    614615        //random move
     
    631632        if (visualization(cr))
    632633        {
    633                 cr.data->reticulopodiacreature.locationSetBboxLow(cr.bboxCenter.x-getZoneRange(cr,1), cr.bboxCenter.y-getZoneRange(cr,1), cr.bboxCenter.z-getZoneRange(cr,1));
     634                cr.data->reticulopodiacreature.locationSetBboxLow(cr.bboxCenter.x - getZoneRange(cr, 1), cr.bboxCenter.y - getZoneRange(cr, 1), cr.bboxCenter.z - getZoneRange(cr, 1));
    634635                cr.data->reticulopodiacreature.drive = cr.drive;
    635636        }
     
    638639function randomDir()
    639640{
    640         var dir = (Math.rndUni(-ExpProperties.zone2_range, ExpProperties.zone2_range), Math.rndUni(-ExpProperties.zone2_range, ExpProperties.zone2_range), 0); 
     641        var dir = (Math.rndUni(-ExpProperties.zone2_range, ExpProperties.zone2_range), Math.rndUni(-ExpProperties.zone2_range, ExpProperties.zone2_range), 0);
    641642        dir.normalize();
    642         dir.scale(-1*movePerStep);
     643        dir.scale(-1 * movePerStep);
    643644        return dir;
    644645}
     
    646647function energyTransfer(cr1, cr2)
    647648{
    648         cr1.drive = XYZ.new(0,0,0);
    649         var e =  ExpProperties.feedtrans*cr1.energy*ExpProperties.secPerStep; //TODO efficiency dependent on age
     649        cr1.drive = XYZ.new(0, 0, 0);
     650        var e =  ExpProperties.feedtrans * cr1.energy * ExpProperties.secPerStep; //TODO efficiency dependent on age
    650651        //Simulator.print("transferring "+e +"("+e*ExpProperties.ingestion+")"+" to "+cr1.name +" ("+ cr1.energy+") " +" from "+cr2.uid+" ("+cr2.energy+") "+ e/ExpProperties.secPerStep+ " per sec");
    651652        var transferred = cr2.transferEnergyTo(cr1, e);
    652         cr1.energy -= transferred*(1-ExpProperties.ingestion);
     653        cr1.energy -= transferred * (1 - ExpProperties.ingestion);
    653654        if (cr1.data->lifeparams->hibernated == 1)
    654655        {
     
    662663        {
    663664                setForamMeta(cr); //unhibernate
    664         } 
     665        }
    665666        else
    666667        {
    667                 cr.idleen = (ExpProperties.energy_hib * cr.energy)*ExpProperties.secPerStep; //hibernate
     668                cr.idleen = (ExpProperties.energy_hib * cr.energy) * ExpProperties.secPerStep; //hibernate
    668669        }
    669670        cr.data->lifeparams->hibernated = 1 - cr.data->lifeparams->hibernated;
     
    675676        if (cr.data->lifeparams->division_time > 0)
    676677        {
    677                 cr.data->lifeparams->division_time = Math.max(cr.data->lifeparams->division_time-1,0);
     678                cr.data->lifeparams->division_time = Math.max(cr.data->lifeparams->division_time - 1, 0);
    678679        }
    679680        //checking for end of gametogenesis
     
    685686        else if (cr.data->lifeparams->chamber_growth > 0)
    686687        {
    687                 var chamber_time = Math.max(cr.data->lifeparams->chamber_growth-1,0);
     688                var chamber_time = Math.max(cr.data->lifeparams->chamber_growth - 1, 0);
    688689                cr.data->lifeparams->chamber_growth = chamber_time;
    689690                cr.energy -= ExpProperties.chamberCostPerSec * cr.energy * ExpProperties.secPerStep;
     
    695696        }
    696697        //checking for end of the chamber growth process
    697         else if (cr.data->lifeparams->chamber_growth == 0 && visualization(cr)==0)
    698         {       
    699                 foramGrow(cr, lastChamberNum(cr), 1); 
     698        else if (cr.data->lifeparams->chamber_growth == 0 && visualization(cr) == 0)
     699        {
     700                foramGrow(cr, lastChamberNum(cr), 1);
    700701                cr.data->lifeparams->chamber_growth = -1;
    701702                //Simulator.print("chamber "+ (lastChamberNum(cr) + 1) +" complete");
     
    713714                        if (ExpProperties.logging == 1)
    714715                        {
    715                                 log(createLogVector(cr, cr.data->lifeparams->max_energy_level),ExpProperties.logPref+"fossil_log.txt");
    716                                 log(createLogVector(cr, cr.lifespan),ExpProperties.logPref+"lifespan_log.txt");
    717                         }                       
     716                                log(createLogVector(cr, cr.data->lifeparams->max_energy_level), ExpProperties.logPref + "fossil_log.txt");
     717                                log(createLogVector(cr, cr.lifespan), ExpProperties.logPref + "lifespan_log.txt");
     718                        }
    718719                        Populations[0].kill(cr);
    719720                        return;
     
    736737                if  (lastChamberNum(cr) < max_chamber_volume[cr.data->lifeparams->gen].size)
    737738                {
    738                         if ((cr.data->lifeparams->max_energy_level >= energyFromVolume(max_chamber_volume[cr.data->lifeparams->gen][lastChamberNum(cr)-1],0))) 
     739                        if ((cr.data->lifeparams->max_energy_level >= energyFromVolume(max_chamber_volume[cr.data->lifeparams->gen][lastChamberNum(cr) - 1], 0)))
    739740                        {
    740741                                cr.data->lifeparams->chamber_growth = int(secToSimSteps(ExpProperties.chamberGrowthSec));
    741                         }       
    742                 }
    743         }       
     742                        }
     743                }
     744        }
    744745}
    745746
    746747function deathConditions(cr)
    747748{
    748         if ((cr.energy <= getProperty(cr.data->lifeparams->gen,"e_death_level")*cr.data->lifeparams->max_energy_level) || (Math.rnd01 < ExpProperties.hunted_prob))
     749        if ((cr.energy <= getProperty(cr.data->lifeparams->gen, "e_death_level")*cr.data->lifeparams->max_energy_level) || (Math.rnd01 < ExpProperties.hunted_prob))
    749750        {
    750751                return 1;
     
    774775function createNutrientGenotype(nutrientradius)
    775776{
    776         return "//0\nm:Vstyle=nutrient\np:sh=3,sx="+nutrientradius+",sy="+nutrientradius+",sz="+nutrientradius+",ry=1.57,vr=0.0,1.0,0.0";
     777        return "//0\nm:Vstyle=nutrient\np:sh=3,sx=" + nutrientradius + ",sy=" + nutrientradius + ",sz=" + nutrientradius + ",ry=1.57,vr=0.0,1.0,0.0";
    777778}
    778779
     
    797798        if (ExpProperties.visualize == 1)
    798799        {
    799                 var nutsize = ExpProperties.nutrientradius*10;
    800                 var nut = Populations[2].add("//0\nm:Vstyle=nutrient_visual\np:sh=2,sx="+nutsize+",sy="+nutsize+",sz="+nutsize+",ry=1.5,vr=0.0,1.0,0.0");
     800                var nutsize = ExpProperties.nutrientradius * 10;
     801                var nut = Populations[2].add("//0\nm:Vstyle=nutrient_visual\np:sh=2,sx=" + nutsize + ",sy=" + nutsize + ",sz=" + nutsize + ",ry=1.5,vr=0.0,1.0,0.0");
    801802                cr.data->reticulopodiacreature = nut;
    802                 nut.locationSetBboxLow( cr.bboxLow.x+cr.bboxSize.x/2-nut.bboxSize.x/2,  cr.bboxLow.y+cr.bboxSize.y/2-nut.bboxSize.y/2, -nutsize);
     803                nut.locationSetBboxLow( cr.bboxLow.x + cr.bboxSize.x / 2 - nut.bboxSize.x / 2,  cr.bboxLow.y + cr.bboxSize.y / 2 - nut.bboxSize.y / 2, -nutsize);
    803804        }
    804805}
     
    815816{
    816817        counter += increase;
    817         var unitcount = int(counter/unitsize);
    818         counter -= unitcount*unitsize;
     818        var unitcount = int(counter / unitsize);
     819        counter -= unitcount * unitsize;
    819820        return {"counter" : counter, "number" : unitcount};
    820821}
     
    824825        if (ExpProperties.foodfluxChange > 0)
    825826        {
    826                         changePeriod += 1;
    827                         if (phase=="low" && changePeriod >= secToSimSteps(23328000)) //9 months
    828                         {
    829                                 ExpProperties.foodflux = ExpProperties.foodflux/ExpProperties.foodfluxChange;
    830                                 phase = "high";
    831                                 changePeriod = 0;
    832                         }
    833                
    834                         else if (phase == "high" && changePeriod >= secToSimSteps(7776000)) //3 months
    835                         {
    836                                 ExpProperties.foodflux = ExpProperties.foodflux*ExpProperties.foodfluxChange;
    837                                 phase = "low";
    838                                 changePeriod = 0;
    839                         }
    840         }
    841 
    842         var nutrientNum = getNumberCounter(nutrient_num_counter, ExpProperties.foodflux*wrldsizSquareMeters*ExpProperties.secPerStep,ExpProperties.energy_nut*0.000000000001);
     827                changePeriod += 1;
     828                if (phase == "low" && changePeriod >= secToSimSteps(23328000)) //9 months
     829                {
     830                        ExpProperties.foodflux = ExpProperties.foodflux / ExpProperties.foodfluxChange;
     831                        phase = "high";
     832                        changePeriod = 0;
     833                }
     834
     835                else if (phase == "high" && changePeriod >= secToSimSteps(7776000)) //3 months
     836                {
     837                        ExpProperties.foodflux = ExpProperties.foodflux * ExpProperties.foodfluxChange;
     838                        phase = "low";
     839                        changePeriod = 0;
     840                }
     841        }
     842
     843        var nutrientNum = getNumberCounter(nutrient_num_counter, ExpProperties.foodflux * wrldsizSquareMeters * ExpProperties.secPerStep, ExpProperties.energy_nut * 0.000000000001);
    843844
    844845        nutrient_num_counter = nutrientNum["counter"];
    845846
    846847        for (var i = 0; i < nutrientNum["number"]; i++)
    847         {   
     848        {
    848849                addNutrient();
    849850        }
     
    851852        if (ExpProperties.logging == 1 && nutrientNum["number"] > 0)
    852853        {
    853                 log([nutrientNum["number"]],ExpProperties.logPref+"nutrients_log.txt");
     854                log([nutrientNum["number"]], ExpProperties.logPref + "nutrients_log.txt");
    854855        }
    855856
     
    878879                        reproduce_parents(s);
    879880                }
    880                
     881
    881882        }
    882883
     
    903904
    904905function createStatistics()
    905 {       
     906{
    906907        var number = [];
    907908        var e_inc = [];
     
    910911        for (var s = 0; s < species_genes.size; s++)
    911912        {
    912                 number.add([0,0]);// [haplo][diplo]
    913                 e_inc.add([0,0]);
     913                number.add([0, 0]); // [haplo][diplo]
     914                e_inc.add([0, 0]);
    914915        }
    915916
     
    920921                var species = cr.data->lifeparams->species;
    921922
    922                 number[species][gen] = number[species][gen] + 1; 
     923                number[species][gen] = number[species][gen] + 1;
    923924                e_inc[species][gen] = e_inc[species][gen] + cr.energy;
    924925        }
     
    941942                }
    942943        }
    943        
     944
    944945        log_numbers.add(Populations[1].size);
    945946        log_energies.add(e_nut);
    946947
    947         log(log_numbers, ExpProperties.logPref+"forams_log.txt");
    948     log(log_energies,  ExpProperties.logPref+"energies_log.txt");
     948        log(log_numbers, ExpProperties.logPref + "forams_log.txt");
     949        log(log_energies,  ExpProperties.logPref + "energies_log.txt");
    949950}
    950951
    951952function log(tolog, fname)
    952953{
    953         var f = File.appendDirect(fname, "forams data"); 
     954        var f = File.appendDirect(fname, "forams data");
    954955        f.writeString("" + Simulator.stepNumber);
    955956        for (var  i = 0; i < tolog.size; i++)
     
    972973                if (cr.data->lifeparams->species == i)
    973974                {
    974                         vec[i*2+cr.data->lifeparams->gen] = value;             
     975                        vec[i * 2 + cr.data->lifeparams->gen] = value;
    975976                }
    976977        }
  • 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;
  • experiments/frams/foraminifera/data/scripts/foraminifera.show

    r590 r847  
    1919{
    2020        var nutrient_multiple = 200;
    21         Params = { "foodflux" : [0.0000000037815,0.0000000075631,0.000000015126], "feedtrans" : [0.0005,0.001,0.002],"energy_nut" :[nutrient_multiple*144.54,nutrient_multiple*544.54,nutrient_multiple*944.54], "stress" : [0,1], "visualize" : [0,1]};
    22         ShowProperties.visualize=1;
    23         ExpProperties.secPerStep=50;
     21        Params = { "foodflux" : [0.0000000037815, 0.0000000075631, 0.000000015126], "feedtrans" : [0.0005, 0.001, 0.002], "energy_nut" : [nutrient_multiple * 144.54, nutrient_multiple * 544.54, nutrient_multiple * 944.54], "stress" : [0, 1], "visualize" : [0, 1]};
     22        ShowProperties.visualize = 1;
     23        ExpProperties.secPerStep = 50;
    2424        Simulator.init();
    25         last_simspeed=0;
     25        last_simspeed = 0;
    2626        GLDisplay.desiredsimspeed = 50;
    2727        GLDisplay.minfps = 10;
    2828        TrackingCam.cam_h = 15; //more side view
    29        
     29
    3030        //useful for screenshots:
    3131        //GLDisplay.world_visibility=2+4; //show only environment and creatures (no background)
     
    3636{
    3737        //just a draft, this function and all constants in expdef need serious review
    38         var localDriveMicronsPerStep=framsToMicrons(getMovePerStep());
    39         var foramSpeedMmPerSec=ExpProperties.foramSpeedMmPerMin/60;
    40         var localDriveMmPerStep=localDriveMicronsPerStep/1000;
    41         var localDriveMmPerSec=localDriveMmPerStep*Simulator.simspeed;
    42         return localDriveMmPerSec/foramSpeedMmPerSec;
     38        var localDriveMicronsPerStep = framsToMicrons(getMovePerStep());
     39        var foramSpeedMmPerSec = ExpProperties.foramSpeedMmPerMin / 60;
     40        var localDriveMmPerStep = localDriveMicronsPerStep / 1000;
     41        var localDriveMmPerSec = localDriveMmPerStep * Simulator.simspeed;
     42        return localDriveMmPerSec / foramSpeedMmPerSec;
    4343}
    4444
    4545function updateBanner()
    4646{
    47         GLDisplay.banner="World size is %g mm." % (framsToMicrons(World.wrldsiz)/1000);
    48         GLDisplay.banner+="\nShowing real-time x %g." % timeScale();
     47        GLDisplay.banner = "World size is %g mm." % (framsToMicrons(World.wrldsiz) / 1000);
     48        GLDisplay.banner += "\nShowing real-time x %g." % timeScale();
    4949}
    5050
    5151function onShowStep()
    5252{
    53         if (Simulator.simspeed<last_simspeed*0.9 || Simulator.simspeed>last_simspeed*1.1) //significant change
     53        if (Simulator.simspeed < last_simspeed * 0.9 || Simulator.simspeed > last_simspeed * 1.1) //significant change
    5454        {
    5555                updateBanner();
    56                 last_simspeed=Simulator.simspeed;
     56                last_simspeed = Simulator.simspeed;
    5757        }
    5858}
Note: See TracChangeset for help on using the changeset viewer.