1 /*
2 * cStats.h
3 * Avida
4 *
5 * Called "stats.hh" prior to 12/5/05.
6 * Copyright 1999-2011 Michigan State University. All rights reserved.
7 * Copyright 1993-2002 California Institute of Technology.
8 *
9 *
10 * This file is part of Avida.
11 *
12 * Avida is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License
13 * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
14 *
15 * Avida is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public License along with Avida.
19 * If not, see <http://www.gnu.org/licenses/>.
20 *
21 */
22
23 #ifndef cStats_h
24 #define cStats_h
25
26 #include "avida/Avida.h"
27
28 #include "AvidaTools.h"
29
30 #include "avida/core/Sequence.h"
31 #include "avida/data/Provider.h"
32
33 #include "cBioGroupListener.h"
34 #include "cBirthEntry.h"
35 #include "cDoubleSum.h"
36 #include "cGenomeUtil.h"
37 #include "cIntSum.h"
38 #include "cOrganism.h"
39 #include "cRunningAverage.h"
40 #include "cRunningStats.h"
41 #include "nGeometry.h"
42 #include "tArray.h"
43 #include "tArrayMap.h"
44 #include "tDataManager.h"
45 #include "tMatrix.h"
46
47 #include <cassert>
48 #include <fstream>
49 #include <iostream>
50 #include <vector>
51 #include <map>
52 #include <set>
53 #include <utility>
54
55 class cWorld;
56 class cOrganism;
57 class cOrgMessage;
58 class cOrgMessagePredicate;
59 class cOrgMovementPredicate;
60 class cDeme;
61 class cGermline;
62
63 using namespace Avida;
64
65
66 struct flow_rate_tuple {
67 cIntSum orgCount;
68 cIntSum eventsKilled;
69 cIntSum attemptsToKillEvents;
70 cDoubleSum AvgEnergyUsageRatio;
71 cIntSum totalBirths;
72 cIntSum currentSleeping;
73 };
74
75 struct s_inst_circumstances {
76 int update;
77 int inst;
78 int gr_id;
79 int gr_size;
80 double res_level;
81 double odds_immigrants;
82 double odds_offspring_own;
83 double odds_offspring_others;
84 int tol_immigrants;
85 int tol_own;
86 int tol_others;
87 int tol_max;
88 }; // @JJB
89
90 struct sDonateSpecificCircumstances {
91 int update;
92 int org_id;
93 int cell_id;
94 int recipient_id;
95 int recipient_cell_id;
96 int relatedness;
97 bool recip_is_beggar;
98 int num_donates;
99 };
100
101 class cStats : public cBioGroupListener, public Data::Provider
102 {
103 private:
104 cWorld* m_world;
105
106 tDataManager<cStats> m_data_manager;
107
108
109 // -------- Data Provider Support ---------
110 struct ProvidedData
111 {
112 Apto::String description;
113 Apto::Functor<Data::PackagePtr, Apto::NullType> GetData;
114
ProvidedDataProvidedData115 ProvidedData() { ; }
ProvidedDataProvidedData116 ProvidedData(const Apto::String& desc, Apto::Functor<Data::PackagePtr, Apto::NullType> func)
117 : description(desc), GetData(func) { ; }
118 };
119 Apto::Map<Apto::String, ProvidedData> m_provided_data;
120 mutable Data::ConstDataSetPtr m_provides;
121
122
123 // -------- Time scales ---------
124 int m_update;
125 double avida_time;
126
127
128
129 // -------- Organism Sums --------- (Cleared and resummed by population each update)
130 cDoubleSum sum_merit;
131 cDoubleSum sum_mem_size;
132 cDoubleSum sum_creature_age;
133 cDoubleSum sum_generation;
134
135 cDoubleSum sum_neutral_metric;
136 cDoubleSum sum_lineage_label;
137
138 cRunningStats sum_copy_mut_rate;
139 cRunningStats sum_log_copy_mut_rate;
140
141 cRunningStats sum_div_mut_rate;
142 cRunningStats sum_log_div_mut_rate;
143
144
145 // -------- Genotype Sums --------- (Cleared and resummed by population each update)
146 cDoubleSum sum_gestation;
147 cDoubleSum sum_fitness;
148 cDoubleSum sum_repro_rate;
149
150 // calculates a running average over the actual replication rate
151 // given by the number of births per update
152 cRunningAverage rave_true_replication_rate;
153
154 cDoubleSum sum_size;
155 cDoubleSum sum_copy_size;
156 cDoubleSum sum_exe_size;
157
158 cDoubleSum sum_genotype_age;
159
160 cDoubleSum sum_abundance;
161 cDoubleSum sum_genotype_depth;
162
163 cDoubleSum sum_threshold_age;
164
165
166 // -------- Instruction Counts ---------
167 tArrayMap<cString, tArray<cString> > m_is_inst_names_map;
168 tArrayMap<cString, tArray<cIntSum> > m_is_exe_inst_map;
169 tArray<pair<int,int> > m_is_tolerance_exe_counts;
170 tSmartArray<s_inst_circumstances> m_is_tolerance_exe_insts;
171 tSmartArray<sDonateSpecificCircumstances> m_donate_specific;
172 tArrayMap<cString, tArray<cIntSum> > m_is_prey_exe_inst_map;
173 tArrayMap<cString, tArray<cIntSum> > m_is_pred_exe_inst_map;
174 tArrayMap<cString, tArray<cIntSum> > m_is_male_exe_inst_map;
175 tArrayMap<cString, tArray<cIntSum> > m_is_female_exe_inst_map;
176
177 // -------- Calculated Stats ---------
178 double entropy;
179 double species_entropy;
180 double energy;
181 double dom_fidelity;
182 double ave_fidelity;
183
184 // For tracking of advantageous mutations
185 double max_viable_fitness;
186
187 // -------- Dominant Genotype ---------
188 double dom_merit;
189 double dom_gestation;
190 double dom_repro_rate;
191 double dom_fitness;
192 int dom_size;
193 double dom_copied_size;
194 double dom_exe_size;
195 double max_fitness;
196 double max_merit;
197 int max_gestation_time;
198 int max_genome_length;
199 double min_fitness;
200 double min_merit;
201 int min_gestation_time;
202 int min_genome_length;
203 int dom_genotype_id;
204 cString dom_name;
205 int dom_births;
206 int dom_breed_true;
207 int dom_breed_in;
208 int dom_breed_out;
209 int dom_abundance;
210 int dom_gene_depth;
211 cString dom_sequence;
212
213 int dom_last_birth_cell;
214 int dom_last_forager_type;
215 int dom_last_group_id;
216
217 int coal_depth;
218
219 // -------- Population Stats ---------
220 int num_births;
221 int num_deaths;
222 int num_breed_in;
223 int num_breed_true;
224 int num_breed_true_creatures;
225 int num_creatures;
226 int num_genotypes;
227 int num_genotypes_historic;
228 int num_threshold;
229 int num_lineages;
230 int num_executed;
231 int num_parasites;
232 int num_no_birth_creatures;
233 int num_single_thread_creatures;
234 int num_multi_thread_creatures;
235 int m_num_threads;
236 int num_modified;
237
238 int num_genotypes_last;
239
240 int tot_organisms;
241 int tot_genotypes;
242 int tot_threshold;
243 int tot_lineages;
244 int tot_executed;
245
246 // -------- Parasite Task Stats ---------
247 tArray<int> tasks_host_current;
248 tArray<int> tasks_host_last;
249 tArray<int> tasks_parasite_current;
250 tArray<int> tasks_parasite_last;
251
252 // ------- Kaboom Stats --------------------
253 int num_kabooms;
254 int num_kaboom_kills;
255 tArray<int> hd_list;
256 // ------- Division of Labor Stats ---------
257 //TODO: Right place for this?
258 int juv_killed;
259
260
261 // -------- Organism Task Stats ---------
262 tArray<int> task_cur_count;
263 tArray<int> task_last_count;
264 tArray<double> task_cur_quality;
265 tArray<double> task_last_quality;
266 tArray<double> task_cur_max_quality;
267 tArray<double> task_last_max_quality;
268 tArray<int> task_exe_count;
269 tArray<int> new_task_count;
270 tArray<int> prev_task_count;
271 tArray<int> cur_task_count;
272 tArray<int> new_reaction_count;
273
274 tArray<int> task_internal_cur_count;
275 tArray<int> task_internal_last_count;
276 tArray<double> task_internal_cur_quality;
277 tArray<double> task_internal_last_quality;
278 tArray<double> task_internal_cur_max_quality;
279 tArray<double> task_internal_last_max_quality;
280
281 tArray<int> m_reaction_cur_count;
282 tArray<int> m_reaction_last_count;
283 tArray<double> m_reaction_cur_add_reward;
284 tArray<double> m_reaction_last_add_reward;
285 tArray<int> m_reaction_exe_count;
286
287 tArray<double> resource_count;
288 tArray<int> resource_geometry;
289 tArray< tArray<double> > spatial_res_count;
290
291 tArray<cString> task_names;
292 tArray<cString> reaction_names;
293 tArray<cString> resource_names;
294
295 // -------- Resampling Stats ---------
296 int num_resamplings;
297 int num_failedResamplings;
298
299
300 // -------- State Variables ---------
301 int last_update;
302
303
304 // -------- Market Stats ---------
305 int num_bought;
306 int num_sold;
307 int num_used;
308 int num_own_used;
309
310
311 // -------- Sense Instruction Stats ---------
312 int sense_size;
313 tArray<int> sense_last_count;
314 tArray<int> sense_last_exe_count;
315 tArray<cString> sense_names;
316
317
318 // -------- Competition Stats ---------
319 tArray<double> avg_trial_fitnesses;
320 double avg_competition_fitness;
321 double min_competition_fitness;
322 double max_competition_fitness;
323 double avg_competition_copied_fitness;
324 double min_competition_copied_fitness;
325 double max_competition_copied_fitness;
326 int num_orgs_replicated;
327
328
329 // -------- Deme Stats ---------
330 cIntSum sum_deme_age;
331 cIntSum sum_deme_birth_count;
332 cIntSum sum_deme_last_birth_count;
333 cIntSum sum_deme_org_count;
334 cIntSum sum_deme_last_org_count;
335 cIntSum sum_deme_generation;
336 cIntSum sum_deme_gestation_time;
337 cDoubleSum sum_deme_normalized_time_used;
338 cDoubleSum sum_deme_merit;
339 cDoubleSum sum_deme_generations_per_lifetime;
340 int m_num_occupied_demes;
341
342 cIntSum sum_deme_events_killed;
343 cIntSum sum_deme_events_kill_attempts;
344
345 cDoubleSum EnergyTestamentToFutureDeme;
346 cDoubleSum EnergyTestamentToNeighborOrganisms;
347 cDoubleSum EnergyTestamentToDemeOrganisms;
348 cDoubleSum EnergyTestamentAcceptedByOrganisms;
349 cDoubleSum EnergyTestamentAcceptedByDeme;
350
351 //(event flow rate, (deme pop size, events killed))
352 std::map<int, flow_rate_tuple > flow_rate_tuples;
353
354
355 // -------- Deme Predicate Stats ---------
356 tMatrix<int> relative_pos_event_count;
357 tMatrix<int> relative_pos_pred_sat;
358 std::map<cString, int> demeResourceThresholdPredicateMap;
359
360
361 // -------- Speculative Execution Stats ---------
362 int m_spec_total;
363 int m_spec_num;
364 int m_spec_waste;
365
366
367 // -------- Organism Kill Stats ---------
368 cIntSum sum_orgs_killed;
369 cIntSum sum_unoccupied_cell_kill_attempts;
370 cIntSum sum_cells_scanned_at_kill;
371
372
373 // -------- Migration Stats ---------
374 int num_migrations;
375
376
377 cStats(); // @not_implemented
378 cStats(const cStats&); // @not_implemented
379 cStats& operator=(const cStats&); // @not_implemented
380
381 // -------- Sexual Selection Stats ---------
382 tArray<cBirthEntry> m_successful_mates;
383 tArray<cBirthEntry> m_choosers;
384 int m_num_successful_mates;
385
386 // -------- Pred-prey Stats ---------
387 cDoubleSum sum_prey_fitness;
388 cDoubleSum sum_prey_gestation;
389 cDoubleSum sum_prey_merit;
390 cDoubleSum sum_prey_creature_age;
391 cDoubleSum sum_prey_generation;
392 cDoubleSum sum_prey_size;
393
394 cDoubleSum sum_pred_fitness;
395 cDoubleSum sum_pred_gestation;
396 cDoubleSum sum_pred_merit;
397 cDoubleSum sum_pred_creature_age;
398 cDoubleSum sum_pred_generation;
399 cDoubleSum sum_pred_size;
400
401 double prey_entropy;
402 double pred_entropy;
403
404 // -------- Mating type (male/female) Stats ---------
405 cDoubleSum sum_male_fitness;
406 cDoubleSum sum_male_gestation;
407 cDoubleSum sum_male_merit;
408 cDoubleSum sum_male_creature_age;
409 cDoubleSum sum_male_generation;
410 cDoubleSum sum_male_size;
411
412 cDoubleSum sum_female_fitness;
413 cDoubleSum sum_female_gestation;
414 cDoubleSum sum_female_merit;
415 cDoubleSum sum_female_creature_age;
416 cDoubleSum sum_female_generation;
417 cDoubleSum sum_female_size;
418
419 // -------- TopNavTrace Stats ---------
420 tArray<char> toptrace;
421 tArray<int> topnavtraceupdate;
422 tArray<int> topnavtraceloc;
423 tArray<int> topnavtracefacing;
424 tArray<int> topreactions;
425 tArray<int> topreactioncycles;
426 tArray<int> topreactionexecs;
427 int topreac;
428 int topcycle;
429 int topid;
430 int topgenid;
431
432
433
434 public:
435 cStats(cWorld* world);
~cStats()436 ~cStats() { ; }
437
438 // cBioGroupListener
439 void NotifyBGEvent(cBioGroup* bg, eBGEventType type, cBioUnit* bu);
440
441
442 // Data::Provider
443 Data::ConstDataSetPtr Provides() const;
444 void UpdateProvidedValues(Update current_update);
445 Data::PackagePtr GetProvidedValue(const Apto::String& data_id) const;
446 Apto::String DescribeProvidedValue(const Apto::String& data_id) const;
447
448 // cStats
449 void ProcessUpdate();
450
SetCurrentUpdate(int new_update)451 inline void SetCurrentUpdate(int new_update) { m_update = new_update; }
IncCurrentUpdate()452 inline void IncCurrentUpdate() { m_update++; }
453
454 // Accessors...
GetUpdate()455 int GetUpdate() const { return m_update; }
GetGeneration()456 double GetGeneration() const { return SumGeneration().Average(); }
457
GetDomMerit()458 double GetDomMerit() const { return dom_merit; }
GetDomGestation()459 double GetDomGestation() const { return dom_gestation; }
GetDomReproRate()460 double GetDomReproRate() const { return dom_repro_rate; }
GetDomFitness()461 double GetDomFitness() const { return dom_fitness; }
GetDomCopySize()462 double GetDomCopySize() const { return dom_copied_size; }
GetDomExeSize()463 double GetDomExeSize() const { return dom_exe_size; }
464
GetDomSize()465 int GetDomSize() const { return dom_size; }
GetDomID()466 int GetDomID() const { return dom_genotype_id; }
GetDomName()467 const cString & GetDomName() const { return dom_name; }
GetDomBirths()468 int GetDomBirths() const { return dom_births; }
GetDomBreedTrue()469 int GetDomBreedTrue() const { return dom_breed_true; }
GetDomBreedIn()470 int GetDomBreedIn() const { return dom_breed_in; }
GetDomBreedOut()471 int GetDomBreedOut() const { return dom_breed_out; }
GetDomAbundance()472 int GetDomAbundance() const { return dom_abundance; }
GetDomGeneDepth()473 int GetDomGeneDepth() const { return dom_gene_depth; }
GetDomSequence()474 const cString& GetDomSequence() const { return dom_sequence; }
475
GetDomLastBirthCell()476 int GetDomLastBirthCell() const { return dom_last_birth_cell; }
GetDomLastGroup()477 int GetDomLastGroup() const { return dom_last_group_id; }
GetDomLastForagerType()478 int GetDomLastForagerType() const { return dom_last_forager_type; }
479
GetSenseSize()480 int GetSenseSize() const { return sense_size; }
481
482 // Settings...
SetDomMerit(double in_merit)483 void SetDomMerit(double in_merit) { dom_merit = in_merit; }
SetDomGestation(double in_gest)484 void SetDomGestation(double in_gest) { dom_gestation = in_gest; }
SetDomReproRate(double in_rate)485 void SetDomReproRate(double in_rate) { dom_repro_rate = in_rate; }
SetDomFitness(double in_fit)486 void SetDomFitness(double in_fit) { dom_fitness = in_fit; }
SetDomCopiedSize(double in_size)487 void SetDomCopiedSize(double in_size) { dom_copied_size = in_size; }
SetDomExeSize(double in_size)488 void SetDomExeSize(double in_size) { dom_exe_size = in_size; }
489
SetDomSize(int in_size)490 void SetDomSize(int in_size) { dom_size = in_size; }
SetDomID(int in_id)491 void SetDomID(int in_id) { dom_genotype_id = in_id; }
SetDomName(const cString & in_name)492 void SetDomName(const cString & in_name) { dom_name = in_name; }
SetDomBirths(int in_births)493 void SetDomBirths(int in_births) { dom_births = in_births; }
SetDomBreedTrue(int in_bt)494 void SetDomBreedTrue(int in_bt) { dom_breed_true = in_bt; }
SetDomBreedIn(int in_bi)495 void SetDomBreedIn(int in_bi) { dom_breed_in = in_bi; }
SetDomBreedOut(int in_bo)496 void SetDomBreedOut(int in_bo) { dom_breed_out = in_bo; }
SetDomAbundance(int in_abund)497 void SetDomAbundance(int in_abund) { dom_abundance = in_abund; }
SetDomGeneDepth(int in_depth)498 void SetDomGeneDepth(int in_depth) { dom_gene_depth = in_depth; }
SetDomSequence(const cString & in_seq)499 void SetDomSequence(const cString & in_seq) { dom_sequence = in_seq; }
500
SetDomLastBirthCell(int in_lbc)501 void SetDomLastBirthCell(int in_lbc) { dom_last_birth_cell = in_lbc; }
SetDomLastGroup(int in_lg)502 void SetDomLastGroup(int in_lg) { dom_last_group_id = in_lg; }
SetDomLastForagerType(int in_lfg)503 void SetDomLastForagerType(int in_lfg) { dom_last_forager_type = in_lfg; }
504
SetCoalescentGenotypeDepth(int in_depth)505 void SetCoalescentGenotypeDepth(int in_depth) {coal_depth = in_depth;}
506
507 inline void SetNumGenotypes(int new_genotypes, int num_historic);
SetNumCreatures(int new_creatures)508 inline void SetNumCreatures(int new_creatures) { num_creatures = new_creatures; }
509 inline void SetBreedTrueCreatures(int in_num_breed_true_creatures);
510 inline void SetNumParasites(int in_num_parasites);
511 inline void SetNumNoBirthCreatures(int in_num_no_birth_creatures);
512 inline void SetNumSingleThreadCreatures(int in_num_single_thread_creatures);
513 inline void SetNumMultiThreadCreatures(int in_num_multi_thread_creatures);
SetNumThreads(int in_num_threads)514 inline void SetNumThreads(int in_num_threads) { m_num_threads = in_num_threads; }
515 inline void SetNumModified(int in_num_modified);
516
SetMaxFitness(double in_max_fitness)517 void SetMaxFitness(double in_max_fitness) { max_fitness = in_max_fitness; }
SetMaxMerit(double in_max_merit)518 void SetMaxMerit(double in_max_merit) { max_merit = in_max_merit; }
SetMaxGestationTime(int in_max_gestation_time)519 void SetMaxGestationTime(int in_max_gestation_time) { max_gestation_time = in_max_gestation_time; }
SetMaxGenomeLength(int in_max_genome_length)520 void SetMaxGenomeLength(int in_max_genome_length) { max_genome_length = in_max_genome_length; }
521
SetMinFitness(double in_min_fitness)522 void SetMinFitness(double in_min_fitness) { min_fitness = in_min_fitness; }
SetMinMerit(double in_min_merit)523 void SetMinMerit(double in_min_merit) { min_merit = in_min_merit; }
SetMinGestationTime(int in_min_gestation_time)524 void SetMinGestationTime(int in_min_gestation_time) { min_gestation_time = in_min_gestation_time; }
SetMinGenomeLength(int in_min_genome_length)525 void SetMinGenomeLength(int in_min_genome_length) { min_genome_length = in_min_genome_length; }
526
SetEntropy(double in_entropy)527 void SetEntropy(double in_entropy) { entropy = in_entropy; }
SetPreyEntropy(double in_prey_entropy)528 void SetPreyEntropy(double in_prey_entropy) { prey_entropy = in_prey_entropy; }
SetPredEntropy(double in_pred_entropy)529 void SetPredEntropy(double in_pred_entropy) { pred_entropy = in_pred_entropy; }
530
SetSpeciesEntropy(double in_ent)531 void SetSpeciesEntropy(double in_ent) { species_entropy = in_ent; }
532
SumFitness()533 cDoubleSum& SumFitness() { return sum_fitness; }
SumGestation()534 cDoubleSum& SumGestation() { return sum_gestation; }
SumMerit()535 cDoubleSum& SumMerit() { return sum_merit; }
SumReproRate()536 cDoubleSum& SumReproRate() { return sum_repro_rate; }
537
SumCreatureAge()538 cDoubleSum& SumCreatureAge() { return sum_creature_age; }
SumGenotypeAge()539 cDoubleSum& SumGenotypeAge() { return sum_genotype_age; }
SumGeneration()540 cDoubleSum& SumGeneration() { return sum_generation; }
SumAbundance()541 cDoubleSum& SumAbundance() { return sum_abundance; }
SumGenotypeDepth()542 cDoubleSum& SumGenotypeDepth() { return sum_genotype_depth; }
SumThresholdAge()543 cDoubleSum& SumThresholdAge() { return sum_threshold_age; }
544
SumNeutralMetric()545 cDoubleSum& SumNeutralMetric() { return sum_neutral_metric; }
SumLineageLabel()546 cDoubleSum& SumLineageLabel() { return sum_lineage_label; }
SumCopyMutRate()547 cRunningStats& SumCopyMutRate() { return sum_copy_mut_rate; }
SumLogCopyMutRate()548 cRunningStats& SumLogCopyMutRate() { return sum_log_copy_mut_rate; }
SumDivMutRate()549 cRunningStats& SumDivMutRate() { return sum_div_mut_rate; }
SumLogDivMutRate()550 cRunningStats& SumLogDivMutRate() { return sum_log_div_mut_rate; }
551
SumSize()552 cDoubleSum& SumSize() { return sum_size; }
SumCopySize()553 cDoubleSum& SumCopySize() { return sum_copy_size; }
SumExeSize()554 cDoubleSum& SumExeSize() { return sum_exe_size; }
SumMemSize()555 cDoubleSum& SumMemSize() { return sum_mem_size; }
556
557 //deme
SumDemeAge()558 cIntSum& SumDemeAge() { return sum_deme_age; }
SumDemeBirthCount()559 cIntSum& SumDemeBirthCount() { return sum_deme_birth_count; }
SumDemeLastBirthCount()560 cIntSum& SumDemeLastBirthCount() { return sum_deme_last_birth_count; }
SumDemeOrgCount()561 cIntSum& SumDemeOrgCount() { return sum_deme_org_count; }
SumDemeLastOrgCount()562 cIntSum& SumDemeLastOrgCount() { return sum_deme_last_org_count; }
SumDemeGeneration()563 cIntSum& SumDemeGeneration() { return sum_deme_generation; }
SumDemeGestationTime()564 cIntSum& SumDemeGestationTime() { return sum_deme_gestation_time; }
SumDemeNormalizedTimeUsed()565 cDoubleSum& SumDemeNormalizedTimeUsed() { return sum_deme_normalized_time_used; }
SumDemeMerit()566 cDoubleSum& SumDemeMerit() { return sum_deme_merit; }
SumDemeGenerationsPerLifetime()567 cDoubleSum& SumDemeGenerationsPerLifetime() { return sum_deme_generations_per_lifetime; }
568
SumDemeEventsKilled()569 cIntSum& SumDemeEventsKilled() { return sum_deme_events_killed; }
SumDemeAttemptsToKillEvents()570 cIntSum& SumDemeAttemptsToKillEvents() { return sum_deme_events_kill_attempts; }
571
SumEnergyTestamentToFutureDeme()572 cDoubleSum& SumEnergyTestamentToFutureDeme() { return EnergyTestamentToFutureDeme;}
SumEnergyTestamentToNeighborOrganisms()573 cDoubleSum& SumEnergyTestamentToNeighborOrganisms() { return EnergyTestamentToNeighborOrganisms; }
SumEnergyTestamentToDemeOrganisms()574 cDoubleSum& SumEnergyTestamentToDemeOrganisms() { return EnergyTestamentToDemeOrganisms; }
SumEnergyTestamentAcceptedByOrganisms()575 cDoubleSum& SumEnergyTestamentAcceptedByOrganisms() { return EnergyTestamentAcceptedByOrganisms; }
SumEnergyTestamentAcceptedByDeme()576 cDoubleSum& SumEnergyTestamentAcceptedByDeme() { return EnergyTestamentAcceptedByDeme; }
577
578 //pred-prey
SumPreyFitness()579 cDoubleSum& SumPreyFitness() { return sum_prey_fitness; }
SumPreyGestation()580 cDoubleSum& SumPreyGestation() { return sum_prey_gestation; }
SumPreyMerit()581 cDoubleSum& SumPreyMerit() { return sum_prey_merit; }
SumPreyCreatureAge()582 cDoubleSum& SumPreyCreatureAge() { return sum_prey_creature_age; }
SumPreyGeneration()583 cDoubleSum& SumPreyGeneration() { return sum_prey_generation; }
SumPreySize()584 cDoubleSum& SumPreySize() { return sum_prey_size; }
InstPreyExeCountsForInstSet(const cString & inst_set)585 tArray<cIntSum>& InstPreyExeCountsForInstSet(const cString& inst_set) { return m_is_prey_exe_inst_map[inst_set]; }
586
SumPredFitness()587 cDoubleSum& SumPredFitness() { return sum_pred_fitness; }
SumPredGestation()588 cDoubleSum& SumPredGestation() { return sum_pred_gestation; }
SumPredMerit()589 cDoubleSum& SumPredMerit() { return sum_pred_merit; }
SumPredCreatureAge()590 cDoubleSum& SumPredCreatureAge() { return sum_pred_creature_age; }
SumPredGeneration()591 cDoubleSum& SumPredGeneration() { return sum_pred_generation; }
SumPredSize()592 cDoubleSum& SumPredSize() { return sum_pred_size; }
InstPredExeCountsForInstSet(const cString & inst_set)593 tArray<cIntSum>& InstPredExeCountsForInstSet(const cString& inst_set) { return m_is_pred_exe_inst_map[inst_set]; }
594 void ZeroFTInst();
595
596 //mating type/male-female accessors
SumMaleFitness()597 cDoubleSum& SumMaleFitness() { return sum_male_fitness; }
SumMaleGestation()598 cDoubleSum& SumMaleGestation() { return sum_male_gestation; }
SumMaleMerit()599 cDoubleSum& SumMaleMerit() { return sum_male_merit; }
SumMaleCreatureAge()600 cDoubleSum& SumMaleCreatureAge() { return sum_male_creature_age; }
SumMaleGeneration()601 cDoubleSum& SumMaleGeneration() { return sum_male_generation; }
SumMaleSize()602 cDoubleSum& SumMaleSize() { return sum_male_size; }
InstMaleExeCountsForInstSet(const cString & inst_set)603 tArray<cIntSum>& InstMaleExeCountsForInstSet(const cString& inst_set) { return m_is_male_exe_inst_map[inst_set]; }
604
SumFemaleFitness()605 cDoubleSum& SumFemaleFitness() { return sum_female_fitness; }
SumFemaleGestation()606 cDoubleSum& SumFemaleGestation() { return sum_female_gestation; }
SumFemaleMerit()607 cDoubleSum& SumFemaleMerit() { return sum_female_merit; }
SumFemaleCreatureAge()608 cDoubleSum& SumFemaleCreatureAge() { return sum_female_creature_age; }
SumFemaleGeneration()609 cDoubleSum& SumFemaleGeneration() { return sum_female_generation; }
SumFemaleSize()610 cDoubleSum& SumFemaleSize() { return sum_female_size; }
InstFemaleExeCountsForInstSet(const cString & inst_set)611 tArray<cIntSum>& InstFemaleExeCountsForInstSet(const cString& inst_set) { return m_is_female_exe_inst_map[inst_set]; }
612 void ZeroMTInst();
613
FlowRateTuples()614 std::map<int, flow_rate_tuple >& FlowRateTuples() { return flow_rate_tuples; }
615
616 void ZeroInst();
InstExeCountsForInstSet(const cString & inst_set)617 tArray<cIntSum>& InstExeCountsForInstSet(const cString& inst_set) { return m_is_exe_inst_map[inst_set]; }
618
619 // And constant versions of the above...
SumFitness()620 const cDoubleSum& SumFitness() const { return sum_fitness; }
SumGestation()621 const cDoubleSum& SumGestation() const { return sum_gestation; }
SumMerit()622 const cDoubleSum& SumMerit() const { return sum_merit; }
SumReproRate()623 const cDoubleSum& SumReproRate() const { return sum_repro_rate; }
624
SumCreatureAge()625 const cDoubleSum& SumCreatureAge() const { return sum_creature_age; }
SumGenotypeAge()626 const cDoubleSum& SumGenotypeAge() const { return sum_genotype_age; }
SumGeneration()627 const cDoubleSum& SumGeneration() const { return sum_generation; }
SumAbundance()628 const cDoubleSum& SumAbundance() const { return sum_abundance; }
SumGenotypeDepth()629 const cDoubleSum& SumGenotypeDepth() const { return sum_genotype_depth; }
SumThresholdAge()630 const cDoubleSum& SumThresholdAge() const { return sum_threshold_age; }
631
SumNeutralMetric()632 const cDoubleSum& SumNeutralMetric() const { return sum_neutral_metric; }
SumLineageLabel()633 const cDoubleSum& SumLineageLabel() const { return sum_lineage_label; }
SumCopyMutRate()634 const cRunningStats& SumCopyMutRate() const { return sum_copy_mut_rate; }
SumLogCopyMutRate()635 const cRunningStats& SumLogCopyMutRate() const{ return sum_log_copy_mut_rate; }
SumDivMutRate()636 const cRunningStats& SumDivMutRate() const { return sum_div_mut_rate; }
SumLogDivMutRate()637 const cRunningStats& SumLogDivMutRate() const{ return sum_log_div_mut_rate; }
638
SumSize()639 const cDoubleSum& SumSize() const { return sum_size; }
SumCopySize()640 const cDoubleSum& SumCopySize() const { return sum_copy_size; }
SumExeSize()641 const cDoubleSum& SumExeSize() const { return sum_exe_size; }
SumMemSize()642 const cDoubleSum& SumMemSize() const { return sum_mem_size; }
643
644 //deme
SumDemeAge()645 const cIntSum& SumDemeAge() const { return sum_deme_age; }
SumDemeBirthCount()646 const cIntSum& SumDemeBirthCount() const { return sum_deme_birth_count; }
SumDemeLastBirthCount()647 const cIntSum& SumDemeLastBirthCount() const { return sum_deme_last_birth_count; }
SumDemeOrgCount()648 const cIntSum& SumDemeOrgCount() const { return sum_deme_org_count; }
SumDemeLastOrgCount()649 const cIntSum& SumDemeLastOrgCount() const { return sum_deme_last_org_count; }
SumDemeGeneration()650 const cIntSum& SumDemeGeneration() const { return sum_deme_generation; }
SumDemeGestationTime()651 const cIntSum& SumDemeGestationTime() const { return sum_deme_generation; }
SumDemeNormalizedTimeUsed()652 const cDoubleSum& SumDemeNormalizedTimeUsed() const { return sum_deme_normalized_time_used; }
SumDemeMerit()653 const cDoubleSum& SumDemeMerit() const { return sum_deme_merit; }
SumDemeGenerationsPerLifetime()654 const cDoubleSum& SumDemeGenerationsPerLifetime() const { return sum_deme_generations_per_lifetime; }
655
SumDemeEventsKilled()656 const cIntSum& SumDemeEventsKilled() const { return sum_deme_events_killed; }
SumDemeAttemptsToKillEvents()657 const cIntSum& SumDemeAttemptsToKillEvents() const { return sum_deme_events_kill_attempts; }
658
SumEnergyTestamentToFutureDeme()659 const cDoubleSum& SumEnergyTestamentToFutureDeme() const { return EnergyTestamentToFutureDeme;}
SumEnergyTestamentToNeighborOrganisms()660 const cDoubleSum& SumEnergyTestamentToNeighborOrganisms() const { return EnergyTestamentToNeighborOrganisms; }
SumEnergyTestamentToDemeOrganisms()661 const cDoubleSum& SumEnergyTestamentToDemeOrganisms() const { return EnergyTestamentToDemeOrganisms; }
SumEnergyTestamentAcceptedByOrganisms()662 const cDoubleSum& SumEnergyTestamentAcceptedByOrganisms() const { return EnergyTestamentAcceptedByOrganisms; }
SumEnergyTestamentAcceptedByDeme()663 const cDoubleSum& SumEnergyTestamentAcceptedByDeme() const { return EnergyTestamentAcceptedByDeme; }
664
665 //pred-prey
SumPreyFitness()666 const cDoubleSum& SumPreyFitness() const { return sum_prey_fitness; }
SumPreyGestation()667 const cDoubleSum& SumPreyGestation() const { return sum_prey_gestation; }
SumPreyMerit()668 const cDoubleSum& SumPreyMerit() const { return sum_prey_merit; }
SumPreyCreatureAge()669 const cDoubleSum& SumPreyCreatureAge() const { return sum_prey_creature_age; }
SumPreyGeneration()670 const cDoubleSum& SumPreyGeneration() const { return sum_prey_generation; }
SumPreySize()671 const cDoubleSum& SumPreySize() const { return sum_prey_size; }
672
SumPredFitness()673 const cDoubleSum& SumPredFitness() const { return sum_pred_fitness; }
SumPredGestation()674 const cDoubleSum& SumPredGestation() const { return sum_pred_gestation; }
SumPredMerit()675 const cDoubleSum& SumPredMerit() const { return sum_pred_merit; }
SumPredCreatureAge()676 const cDoubleSum& SumPredCreatureAge() const { return sum_pred_creature_age; }
SumPredGeneration()677 const cDoubleSum& SumPredGeneration() const { return sum_pred_generation; }
SumPredSize()678 const cDoubleSum& SumPredSize() const { return sum_pred_size; }
679
FlowRateTuples()680 const std::map<int, flow_rate_tuple >& FlowRateTuples() const { return flow_rate_tuples; }
681
IncResamplings()682 void IncResamplings() { ++num_resamplings; }
IncFailedResamplings()683 void IncFailedResamplings() { ++num_failedResamplings; }
684
685 void CalcEnergy();
686 void CalcFidelity();
687
688 void RecordBirth(bool breed_true);
RecordDeath()689 void RecordDeath() { num_deaths++; }
AddGenotype()690 void AddGenotype() { tot_genotypes++; }
691 void RemoveGenotype(int id_num, int parent_id, int parent_distance, int depth, int max_abundance,
692 int parasite_abundance, int age, int length);
AddLineage()693 void AddLineage() { tot_lineages++; num_lineages++; }
694 void RemoveLineage(int id_num, int parent_id, int update_born, double generation_born, int total_CPUs,
695 int total_genotypes, double fitness, double lineage_stat1, double lineage_stat2 );
696
IncExecuted()697 void IncExecuted() { num_executed++; }
698
AddNumOrgsKilled(long num)699 void AddNumOrgsKilled(long num) { sum_orgs_killed.Add(num); }
AddNumUnoccupiedCellAttemptedToKill(long num)700 void AddNumUnoccupiedCellAttemptedToKill(long num) { sum_unoccupied_cell_kill_attempts.Add(num); }
AddNumCellsScannedAtKill(long num)701 void AddNumCellsScannedAtKill(long num) { sum_cells_scanned_at_kill.Add(num); }
IncNumMigrations()702 void IncNumMigrations() { num_migrations++; }
703
AddCurTask(int task_num)704 void AddCurTask(int task_num) { task_cur_count[task_num]++; }
AddCurHostTask(int task_num)705 void AddCurHostTask(int task_num) { tasks_host_current[task_num]++; }
AddCurParasiteTask(int task_num)706 void AddCurParasiteTask(int task_num) { tasks_parasite_current[task_num]++; }
707
AddCurTaskQuality(int task_num,double quality)708 void AddCurTaskQuality(int task_num, double quality)
709 {
710 task_cur_quality[task_num] += quality;
711 if (quality > task_cur_max_quality[task_num]) task_cur_max_quality[task_num] = quality;
712 }
AddLastTask(int task_num)713 void AddLastTask(int task_num) { task_last_count[task_num]++; }
AddLastHostTask(int task_num)714 void AddLastHostTask(int task_num) { tasks_host_last[task_num]++; }
AddLastParasiteTask(int task_num)715 void AddLastParasiteTask(int task_num) { tasks_parasite_last[task_num]++; }
716
AddLastTaskQuality(int task_num,double quality)717 void AddLastTaskQuality(int task_num, double quality)
718 {
719 task_last_quality[task_num] += quality;
720 if (quality > task_last_max_quality[task_num]) task_last_max_quality[task_num] = quality;
721 }
AddNewTaskCount(int task_num)722 void AddNewTaskCount(int task_num) {new_task_count[task_num]++; }
AddOtherTaskCounts(int task_num,int prev_tasks,int cur_tasks)723 void AddOtherTaskCounts(int task_num, int prev_tasks, int cur_tasks) {
724 prev_task_count[task_num] += prev_tasks;
725 cur_task_count[task_num] += cur_tasks;
726 }
AddNewReactionCount(int reaction_num)727 void AddNewReactionCount(int reaction_num) {new_reaction_count[reaction_num]++; }
IncTaskExeCount(int task_num,int task_count)728 void IncTaskExeCount(int task_num, int task_count) { task_exe_count[task_num] += task_count; }
729 void ZeroTasks();
730
AddLastSense(int res_comb_index)731 void AddLastSense(int res_comb_index) { /*sense_last_count[res_comb_index]++;*/ }
IncLastSenseExeCount(int res_comb_index,int count)732 void IncLastSenseExeCount(int res_comb_index, int count) { /*sense_last_exe_count[res_comb_index]+= count;*/ }
733
734 // internal resource bins and use of internal resources
AddCurInternalTask(int task_num)735 void AddCurInternalTask(int task_num) { task_internal_cur_count[task_num]++; }
AddCurInternalTaskQuality(int task_num,double quality)736 void AddCurInternalTaskQuality(int task_num, double quality)
737 {
738 task_internal_cur_quality[task_num] += quality;
739 if(quality > task_internal_cur_max_quality[task_num]) task_internal_cur_max_quality[task_num] = quality;
740 }
AddLastInternalTask(int task_num)741 void AddLastInternalTask(int task_num) { task_internal_last_count[task_num]++; }
AddLastInternalTaskQuality(int task_num,double quality)742 void AddLastInternalTaskQuality(int task_num, double quality)
743 {
744 task_internal_last_quality[task_num] += quality;
745 if(quality > task_internal_last_max_quality[task_num]) task_internal_last_max_quality[task_num] = quality;
746 }
747
AddCurReaction(int reaction)748 void AddCurReaction(int reaction) { m_reaction_cur_count[reaction]++; }
AddLastReaction(int reaction)749 void AddLastReaction(int reaction) { m_reaction_last_count[reaction]++; }
AddCurReactionAddReward(int reaction,double reward)750 void AddCurReactionAddReward(int reaction, double reward) { m_reaction_cur_add_reward[reaction] += reward; }
AddLastReactionAddReward(int reaction,double reward)751 void AddLastReactionAddReward(int reaction, double reward) { m_reaction_last_add_reward[reaction] += reward; }
IncReactionExeCount(int reaction,int count)752 void IncReactionExeCount(int reaction, int count) { m_reaction_exe_count[reaction] += count; }
753 void ZeroReactions();
754
SetResources(const tArray<double> & _in)755 void SetResources(const tArray<double> &_in) { resource_count = _in; }
SetResourcesGeometry(const tArray<int> & _in)756 void SetResourcesGeometry(const tArray<int> &_in) { resource_geometry = _in;}
SetSpatialRes(const tArray<tArray<double>> & _in)757 void SetSpatialRes(const tArray< tArray<double> > &_in) { spatial_res_count = _in; }
758
SetInstNames(const cString & inst_set,const tArray<cString> & names)759 void SetInstNames(const cString& inst_set, const tArray<cString>& names) { m_is_inst_names_map[inst_set] = names; }
SetReactionName(int id,const cString & name)760 void SetReactionName(int id, const cString & name) { reaction_names[id] = name; }
SetResourceName(int id,const cString & name)761 void SetResourceName(int id, const cString & name) { resource_names[id] = name; }
762
SetCompetitionTrialFitnesses(tArray<double> _in)763 void SetCompetitionTrialFitnesses(tArray<double> _in) { avg_trial_fitnesses = _in; }
SetCompetitionFitnesses(double _in_avg,double _in_min,double _in_max,double _in_cp_avg,double _in_cp_min,double _in_cp_max)764 void SetCompetitionFitnesses(double _in_avg, double _in_min, double _in_max, double _in_cp_avg, double _in_cp_min, double _in_cp_max)
765 { avg_competition_fitness = _in_avg; min_competition_fitness = _in_min; max_competition_fitness = _in_max;
766 avg_competition_copied_fitness = _in_cp_avg; min_competition_copied_fitness = _in_cp_min; max_competition_copied_fitness = _in_cp_max; }
SetCompetitionOrgsReplicated(int _in)767 void SetCompetitionOrgsReplicated(int _in) { num_orgs_replicated = _in; }
768
769 //market info
AddMarketItemBought()770 void AddMarketItemBought() { num_bought++;}
AddMarketItemSold()771 void AddMarketItemSold() { num_sold++; }
AddMarketItemUsed()772 void AddMarketItemUsed() { num_used++; }
AddMarketOwnItemUsed()773 void AddMarketOwnItemUsed() { num_own_used++; }
774
775
AddSpeculative(int spec)776 void AddSpeculative(int spec) { m_spec_total += spec; m_spec_num++; }
AddSpeculativeWaste(int waste)777 void AddSpeculativeWaste(int waste) { m_spec_waste += waste; }
778
779 // Sexual selection recording
780 void RecordSuccessfulMate(cBirthEntry& successful_mate, cBirthEntry& chooser);
781
782 // Information retrieval section...
783
GetNumBirths()784 int GetNumBirths() const { return num_births; }
GetNumDeaths()785 int GetNumDeaths() const { return num_deaths; }
GetBreedIn()786 int GetBreedIn() const { return num_breed_in; }
GetBreedTrue()787 int GetBreedTrue() const { return num_breed_true; }
GetBreedTrueCreatures()788 int GetBreedTrueCreatures() const { return num_breed_true_creatures; }
GetNumCreatures()789 int GetNumCreatures() const { return num_creatures; }
GetNumGenotypes()790 int GetNumGenotypes() const { return num_genotypes; }
GetNumGenotypesHistoric()791 int GetNumGenotypesHistoric() const { return num_genotypes_historic; }
GetNumThreshold()792 int GetNumThreshold() const { return num_threshold; }
GetNumLineages()793 int GetNumLineages() const { return num_lineages; }
GetNumParasites()794 int GetNumParasites() const { return num_parasites; }
GetNumNoBirthCreatures()795 int GetNumNoBirthCreatures() const{ return num_no_birth_creatures; }
GetNumSingleThreadCreatures()796 int GetNumSingleThreadCreatures() const { return num_single_thread_creatures; }
GetNumMultiThreadCreatures()797 int GetNumMultiThreadCreatures() const { return num_multi_thread_creatures; }
GetNumThreads()798 int GetNumThreads() const { return m_num_threads; }
GetNumModified()799 int GetNumModified() const { return num_modified;}
800
GetTotCreatures()801 int GetTotCreatures() const { return tot_organisms; }
GetTotGenotypes()802 int GetTotGenotypes() const { return tot_genotypes; }
GetTotThreshold()803 int GetTotThreshold() const { return tot_threshold; }
GetTotLineages()804 int GetTotLineages() const { return tot_lineages; }
805
GetTaskCurCount(int task_num)806 int GetTaskCurCount(int task_num) const { return task_cur_count[task_num]; }
GetTaskHostCurCount(int task_num)807 int GetTaskHostCurCount(int task_num) const { return tasks_host_current[task_num]; }
GetTaskParasiteCurCount(int task_num)808 int GetTaskParasiteCurCount(int task_num) const { return tasks_parasite_current[task_num]; }
GetTaskCurQuality(int task_num)809 double GetTaskCurQuality(int task_num) const { return task_cur_quality[task_num]/(double)task_cur_count[task_num]; }
810
GetTaskLastCount(int task_num)811 int GetTaskLastCount(int task_num) const {return task_last_count[task_num];}
GetTaskLastHostCount(int task_num)812 int GetTaskLastHostCount(int task_num) const {return tasks_host_last[task_num];}
GetTaskLastParasiteCount(int task_num)813 int GetTaskLastParasiteCount(int task_num) const {return tasks_parasite_last[task_num];}
GetTaskLastQuality(int task_num)814 double GetTaskLastQuality(int task_num) const {return task_last_quality[task_num]/(double)task_last_count[task_num];}
815
GetTaskMaxCurQuality(int task_num)816 double GetTaskMaxCurQuality(int task_num) const { return task_cur_max_quality[task_num];}
GetTaskMaxLastQuality(int task_num)817 double GetTaskMaxLastQuality(int task_num) const { return task_last_max_quality[task_num];}
GetTaskExeCount(int task_num)818 int GetTaskExeCount(int task_num) const { return task_exe_count[task_num]; }
819
820 // internal resource bins and use of internal resources
GetInternalTaskCurCount(int task_num)821 int GetInternalTaskCurCount(int task_num) const { return task_internal_cur_count[task_num]; }
GetInternalTaskCurQuality(int task_num)822 double GetInternalTaskCurQuality(int task_num) const { return task_internal_cur_quality[task_num]/(double)task_internal_cur_count[task_num]; }
GetInternalTaskMaxCurQuality(int task_num)823 double GetInternalTaskMaxCurQuality(int task_num) const { return task_internal_cur_max_quality[task_num]; }
GetInternalTaskLastCount(int task_num)824 int GetInternalTaskLastCount(int task_num) const { return task_internal_last_count[task_num]; }
GetInternalTaskLastQuality(int task_num)825 double GetInternalTaskLastQuality(int task_num) const { return task_internal_last_quality[task_num]/(double)task_internal_last_count[task_num]; }
GetInternalTaskMaxLastQuality(int task_num)826 double GetInternalTaskMaxLastQuality(int task_num) const { return task_internal_last_max_quality[task_num]; }
827
GetReactions()828 const tArray<int>& GetReactions() const { return m_reaction_last_count; }
GetResources()829 const tArray<double> & GetResources() const { return resource_count; }
830
831 // market info
GetMarketNumBought()832 int GetMarketNumBought() const { return num_bought; }
GetMarketNumSold()833 int GetMarketNumSold() const { return num_sold; }
GetMarketNumUsed()834 int GetMarketNumUsed() const { return num_used; }
GetMarketNumOwnUsed()835 int GetMarketNumOwnUsed() const { return num_own_used; }
836
GetAveReproRate()837 double GetAveReproRate() const { return sum_repro_rate.Average(); }
838
GetAveMerit()839 double GetAveMerit() const { return sum_merit.Average(); }
GetAveCreatureAge()840 double GetAveCreatureAge() const{ return sum_creature_age.Average(); }
GetAveMemSize()841 double GetAveMemSize() const { return sum_mem_size.Average(); }
842
GetAveNeutralMetric()843 double GetAveNeutralMetric() const { return sum_neutral_metric.Average(); }
GetAveLineageLabel()844 double GetAveLineageLabel() const { return sum_lineage_label.Average(); }
GetAveCopyMutRate()845 double GetAveCopyMutRate() const { return sum_copy_mut_rate.Mean(); }
GetAveLogCopyMutRate()846 double GetAveLogCopyMutRate() const{ return sum_log_copy_mut_rate.Mean();}
GetAveDivMutRate()847 double GetAveDivMutRate() const { return sum_div_mut_rate.Mean(); }
GetAveLogDivMutRate()848 double GetAveLogDivMutRate() const{ return sum_log_div_mut_rate.Mean();}
849
GetAveGestation()850 double GetAveGestation() const { return sum_gestation.Average(); }
GetAveFitness()851 double GetAveFitness() const { return sum_fitness.Average(); }
852
GetAveGenotypeAge()853 double GetAveGenotypeAge() const { return sum_genotype_age.Average();}
854
GetAveSize()855 double GetAveSize() const { return sum_size.Average(); }
GetAveCopySize()856 double GetAveCopySize() const { return sum_copy_size.Average(); }
GetAveExeSize()857 double GetAveExeSize() const { return sum_exe_size.Average(); }
858
GetEntropy()859 double GetEntropy() const { return entropy; }
GetSpeciesEntropy()860 double GetSpeciesEntropy() const { return species_entropy; }
GetEnergy()861 double GetEnergy() const { return energy; }
GetEvenness()862 double GetEvenness() const { return entropy / AvidaTools::Log(num_genotypes); }
GetCoalescentDepth()863 int GetCoalescentDepth() const { return coal_depth; }
864
GetAveThresholdAge()865 double GetAveThresholdAge() const { return sum_threshold_age.Average(); }
866
GetMaxFitness()867 double GetMaxFitness() const { return max_fitness; }
GetMaxMerit()868 double GetMaxMerit() const { return max_merit; }
GetMaxGestationTime()869 int GetMaxGestationTime() const { return max_gestation_time; }
GetMaxGenomeLength()870 int GetMaxGenomeLength() const { return max_genome_length; }
871
GetMinFitness()872 double GetMinFitness() const { return min_fitness; }
GetMinMerit()873 double GetMinMerit() const { return min_merit; }
GetMinGestationTime()874 int GetMinGestationTime() const { return min_gestation_time; }
GetMinGenomeLength()875 int GetMinGenomeLength() const { return min_genome_length; }
876
GetResamplings()877 int GetResamplings() const { return num_resamplings;} //AWC 06/29/06
GetFailedResamplings()878 int GetFailedResamplings() const { return num_failedResamplings;} //AWC 06/29/06
879
880 int GetNumSenseSlots();
881
GetAveSpeculative()882 double GetAveSpeculative() const { return (m_spec_num) ? ((double)m_spec_total / (double)m_spec_num) : 0.0; }
GetSpeculativeWaste()883 int GetSpeculativeWaste() const { return m_spec_waste; }
884
GetAvgNumOrgsKilled()885 double GetAvgNumOrgsKilled() const { return sum_orgs_killed.Average(); }
GetAvgNumCellsScannedAtKill()886 double GetAvgNumCellsScannedAtKill() const { return sum_cells_scanned_at_kill.Average(); }
GetNumMigrations()887 int GetNumMigrations() const { return num_migrations; }
888
889 // Pred-Prey
890 int GetNumPreyCreatures() const;
891 int GetNumPredCreatures() const;
892
893 // this value gets recorded when a creature with the particular
894 // fitness value gets born. It will never change to a smaller value,
895 // i.e., when the maximum fitness in the population drops, this value will
896 // still stay up.
GetMaxViableFitness()897 double GetMaxViableFitness() const { return max_viable_fitness; }
898
899 // User-defined datafile...
900 void PrintDataFile(const cString& filename, const cString& format, char sep=' ');
901
902 // Public calls to output data files (for events)
903 void PrintAverageData(const cString& filename);
904 void PrintDemeAverageData(const cString& filename);
905 void PrintFlowRateTuples(const cString& filename);
906 void PrintErrorData(const cString& filename);
907 void PrintVarianceData(const cString& filename);
908 void PrintDominantData(const cString& filename);
909 void PrintParasiteData(const cString& filename);
910 void PrintPreyAverageData(const cString& filename);
911 void PrintPredatorAverageData(const cString& filename);
912 void PrintPreyErrorData(const cString& filename);
913 void PrintPredatorErrorData(const cString& filename);
914 void PrintPreyVarianceData(const cString& filename);
915 void PrintPredatorVarianceData(const cString& filename);
916 void PrintMinPreyFailedAttacks(const cString& filename);
917 void PrintPreyInstructionData(const cString& filename, const cString& inst_set);
918 void PrintPredatorInstructionData(const cString& filename, const cString& inst_set);
919 void PrintStatsData(const cString& filename);
920 void PrintCountData(const cString& filename);
921 void PrintThreadsData(const cString& filename);
922 void PrintMessageData(const cString& filename);
923 void PrintInterruptData(const cString& filename);
924 void PrintTotalsData(const cString& filename);
925 void PrintTasksData(const cString& filename);
926 void PrintHostTasksData(const cString& filename);
927 void PrintParasiteTasksData(const cString& filename);
928 void PrintTasksExeData(const cString& filename);
929 void PrintTasksQualData(const cString& filename);
930 void PrintDynamicMaxMinData(const cString& filename);
931 void PrintNewTasksData(const cString& filename);
932 void PrintNewReactionData(const cString& filename);
933 void PrintNewTasksDataPlus(const cString& filename);
934 void PrintReactionData(const cString& filename);
935 void PrintReactionExeData(const cString& filename);
936 void PrintCurrentReactionData(const cString& filename);
937 void PrintReactionRewardData(const cString& filename);
938 void PrintCurrentReactionRewardData(const cString& filename);
939 void PrintResourceData(const cString& filename);
940 void PrintResourceLocData(const cString& filename, cAvidaContext& ctx);
941 void PrintResWallLocData(const cString& filename, cAvidaContext& ctx);
942 void PrintSpatialResData(const cString& filename, int i);
943 void PrintTimeData(const cString& filename);
944 void PrintDivideMutData(const cString& filename);
945 void PrintMutationRateData(const cString& filename);
946 void PrintInstructionData(const cString& filename, const cString& inst_set);
947 void PrintMarketData(const cString& filename);
948 void PrintSenseData(const cString& filename);
949 void PrintSenseExeData(const cString& filename);
950 void PrintInternalTasksData(const cString& filename);
951 void PrintInternalTasksQualData(const cString& filename);
952 void PrintSleepData(const cString& filename);
953 void PrintCompetitionData(const cString& filename);
954 void PrintCellVisitsData(const cString& filename);
955 void PrintExtendedTimeData(const cString& filename);
956 void PrintNumOrgsKilledData(const cString& filename);
957 void PrintMigrationData(const cString& filename);
958 void PrintGroupsFormedData(const cString& filename);
959 void PrintGroupIds(const cString& filename);
960 void PrintTargets(const cString& filename);
961 void PrintGroupTolerance(const cString& filename);
962 void PrintGroupMTTolerance(const cString& filename);
963 void PrintToleranceInstructionData(const cString& filename);
964 void PrintToleranceData(const cString& filename);
965 void PrintDonateSpecificData(const cString& filename);
966 void PrintMaleAverageData(const cString& filename);
967 void PrintFemaleAverageData(const cString& filename);
968 void PrintMaleErrorData(const cString& filename);
969 void PrintFemaleErrorData(const cString& filename);
970 void PrintMaleVarianceData(const cString& filename);
971 void PrintFemaleVarianceData(const cString& filename);
972 void PrintMaleInstructionData(const cString& filename, const cString& inst_set);
973 void PrintFemaleInstructionData(const cString& filename, const cString& inst_set);
974
975 void PrintMiniTraceReactions(cOrganism* org);
976 void PrintMicroTraces(tSmartArray<char>& exec_trace, int birth_update, int org_id, int ft, int gen_id);
977 void UpdateTopNavTrace(cOrganism* org);
978 void PrintTopNavTrace();
979 void PrintReproData(cOrganism* org);
980
981 // Kaboom stats
IncKaboom()982 void IncKaboom() { num_kabooms++; }
IncKaboomKills()983 void IncKaboomKills() {num_kaboom_kills++;}
AddHamDistance(int distance)984 void AddHamDistance(int distance) { hd_list.Push(distance); }
985 void PrintKaboom(const cString& filename);
986
987 // Division of Labor Stats
IncJuvKilled()988 void IncJuvKilled() { juv_killed++; }
989
990
991 // deme predicate stats
992 void IncEventCount(int x, int y);
993 void IncPredSat(int cell_id);
994 void PrintPredSatFracDump(const cString& filename);
995
996 void AddDemeResourceThresholdPredicate(cString& name);
997 void IncDemeResourceThresholdPredicate(cString& name);
998 void PrintDemeResourceThresholdPredicate(const cString& filename);
999
1000 void addOrgLocations(std::vector<std::pair<int, int> >);
1001 void PrintDemeRepOrgLocation(const cString& filename);
1002
1003 // ----------- Sexual selection output -----------
1004 public:
1005 void PrintSuccessfulMates(cString& filename);
1006 // ----------- End sexual selection output -----------
1007
1008 // -------- Messaging support --------
1009 public:
1010 //! Type for a list of pointers to message predicates.
1011 typedef std::vector<cOrgMessagePredicate*> message_pred_ptr_list;
1012
1013 //! Called for every message successfully sent anywhere in the population.
1014 void SentMessage(const cOrgMessage& msg);
1015 //! Adds a predicate that will be evaluated for each message.
1016 void AddMessagePredicate(cOrgMessagePredicate* predicate);
1017 //! Removes a predicate.
1018 void RemoveMessagePredicate(cOrgMessagePredicate* predicate);
1019 //! Prints information regarding messages that "passed" their predicate.
1020 void PrintPredicatedMessages(const cString& filename);
1021 //! Log a message.
1022 void LogMessage(const cOrgMessage& msg, bool dropped, bool lost);
1023 //! Prints logged messages.
1024 void PrintMessageLog(const cString& filename);
1025
1026 protected:
1027 /*! List of all active message predicates. The idea here is that the predicates,
1028 rather than cStats / cOrgMessage / etc., do the tracking of particular messages
1029 of interest. */
1030 message_pred_ptr_list m_message_predicates;
1031 //! Type to store logged messages.
1032 struct message_log_entry_t {
message_log_entry_tmessage_log_entry_t1033 message_log_entry_t(int u, int de, int s, int d, int t, unsigned int md, unsigned int ml, bool dr, bool l)
1034 : update(u), deme(de), src_cell(s), dst_cell(d), transmit_cell(t), msg_data(md), msg_label(ml), dropped(dr), lost(l) {
1035 }
1036 int update, deme, src_cell, dst_cell, transmit_cell;
1037 unsigned int msg_data, msg_label;
1038 bool dropped, lost;
1039 };
1040 typedef std::vector<message_log_entry_t> message_log_t; //!< Type for message log.
1041 message_log_t m_message_log; //!< Log for messages.
1042
1043 // -------- End messaging support --------
1044
1045
1046 // -------- Movement support -------------
1047 public:
1048 //! Type for a list of pointers to movement predicates.
1049 typedef std::vector<cOrgMovementPredicate*> movement_pred_ptr_list;
1050 void Move(cOrganism& org);
1051 void AddMovementPredicate(cOrgMovementPredicate* predicate);
1052 protected:
1053 movement_pred_ptr_list m_movement_predicates;
1054 // -------- End movement support --------
1055
1056 //--------- Donate Specific support---------
1057 public:
1058 void PushDonateSpecificInstExe(int org_id, int cell_id, int recipient_id, int recipient_cell_id, int relatedness, int recip_is_beggar, int num_donates);
1059 void ZeroDonateSpceificInst();
1060
1061 // -------- Tolerance support --------
1062 public:
1063 void PushToleranceInstExe(int tol_inst);
1064 void PushToleranceInstExe(int tol_inst, int group_id, int group_size, double resource_level, double odds_immi,
1065 double odds_own, double odds_others, int tol_immi, int tol_own, int tol_others, int tol_max);
1066 void ZeroToleranceInst();
1067
1068
1069 // -------- Deme replication support --------
1070 public:
1071 //! Called immediately prior to deme replacement.
1072 void DemePreReplication(cDeme& source_deme, cDeme& target_deme);
1073 //! Called immediately after deme replacement.
1074 void DemePostReplication(cDeme& source_deme, cDeme& target_deme);
1075 //! Called immediately prior to germline replacement.
1076 void GermlineReplication(cGermline& source_germline, cGermline& target_germline);
1077 //! Print statistics about deme replication.
1078 void PrintDemeReplicationData(const cString& filename);
1079 //! Print statistics regarding germline sequestration
1080 void PrintDemeGermlineSequestration(const cString& filename);
1081 //! Print germline sequestration for every individual in every deme
1082 void PrintDemeOrgGermlineSequestration(const cString& filename);
1083 //! Print genotype IDs and genotypes for GLS deme founders
1084 void PrintDemeGLSFounders(const cString& filename);
1085 //! Track GLS Deme Founder Data
1086 typedef std::map<std::pair<int, int>, std::vector<std::pair<int, std::string> > > t_gls_founder_map;
1087 void TrackDemeGLSReplication(int source_deme_id, int target_deme_id, std::vector<std::pair<int, std::string> > founders);
1088
1089
1090 void PrintDemeTreatableReplicationData(const cString& filename);
1091 void PrintDemeUntreatableReplicationData(const cString& filename);
1092 void PrintDemeTreatableCount(const cString& filename);
1093
1094 //! Print statistics about germlines.
1095 void PrintGermlineData(const cString& filename);
1096 //! Accessor for average "generation" of germlines.
GetAveGermlineGeneration()1097 double GetAveGermlineGeneration() const { return m_germline_generation.Average(); }
1098 /*! Typedef of a data structure to track deme founders.
1099 * Map of deme id -> {founder genotype id_0, id_1,... id_{deme propagule size}} */
1100 typedef std::map<int, std::vector<int> > t_founder_map;
1101 //! Print the genotype IDs for the founders of demes that have recently been "born."
1102 void PrintDemeFoundersData(const cString& filename);
1103
1104 void PrintPerDemeTasksData(const cString& filename);
1105 void PrintPerDemeTasksExeData(const cString& filename);
1106 void PrintAvgDemeTasksExeData(const cString& filename);
1107 void PrintAvgTreatableDemeTasksExeData(const cString& filename);
1108 void PrintAvgUntreatableDemeTasksExeData(const cString& filename);
1109 void PrintPerDemeReactionData(const cString& filename);
1110 void PrintDemeTasksData(const cString& filename);
1111 void PrintDemeTasksExeData(const cString& filename);
1112 void PrintDemeReactionData(const cString& filename);
1113 void PrintDemeOrgTasksData(const cString& filename);
1114 void PrintDemeOrgTasksExeData(const cString& filename);
1115 void PrintDemeOrgReactionData(const cString& filename);
1116 void PrintDemeCurrentTaskExeData(const cString& filename);
1117 void PrintCurrentTaskCounts(const cString& filename);
1118 void PrintPerDemeGenPerFounderData(const cString& filename);
1119 void PrintDemeMigrationSuicidePoints(const cString& filename);
1120 void PrintDemeReactionDiversityReplicationData(const cString& filename);
1121 void PrintWinningDeme(const cString& filename);
1122 void PrintDemeGermResourcesData(const cString& filename);
1123
1124 void PrintDemesTasksData(const cString& filename); //@JJB**
1125 void PrintDemesReactionsData(const cString& filename); //@JJB**
1126 void PrintDemesFitnessData(const cString& filename); //@JJB**
1127
IncNumOccupiedDemes()1128 void IncNumOccupiedDemes() { m_num_occupied_demes++; }
ClearNumOccupiedDemes()1129 void ClearNumOccupiedDemes() { m_num_occupied_demes = 0; }
GetNumOccupiedDemes()1130 int GetNumOccupiedDemes() { return m_num_occupied_demes; }
1131
1132
1133
1134 protected:
1135 int m_deme_num_repls; //!< Number of deme replications since last PrintDemeReplicationData.
1136 int m_total_deme_num_repls; //!< Total number of deme replications ever.
1137 cDoubleSum m_deme_gestation_time; //!< Gestation time for demes - mean age at deme replication.
1138 cDoubleSum m_deme_births; //!< Mean number of births in replicated demes.
1139 cDoubleSum m_deme_merit; //!< Mean merit of replicated demes.
1140 cDoubleSum m_deme_generation; //!< Mean generation of replicated demes.
1141 cDoubleSum m_deme_density; //!< Mean density of replicated demes.
1142 cDoubleSum m_germline_generation; //!< Mean germline generation of replicated germlines
1143 std::deque<double> m_ave_germ_mut; //!< Mean number of mutations that occurred as a result of damage related to performing metabolic work (does not include mutations that occur as part of replication).
1144 std::deque<double> m_var_germ_mut;
1145 std::deque<double> m_ave_soma_mut;
1146 std::deque<double> m_var_soma_mut;
1147 std::deque<double> m_ave_germ_size;
1148 std::deque<double> m_ave_germ_percent;
1149 std::deque<double> m_ave_soma_work;
1150 std::deque<double> m_var_soma_work;
1151 std::deque<double> m_ave_germ_work;
1152 std::deque<double> m_var_germ_work;
1153
1154 t_gls_founder_map m_gls_deme_founders; //! Data structure to track the founders of gls demes.
1155
1156
1157 int m_deme_num_repls_treatable; //!< Number of deme replications in treatable demes since last PrintDemeReplicationData.
1158 cDoubleSum m_deme_gestation_time_treatable; //!< Gestation time for treatable demes - mean age at deme replication.
1159 cDoubleSum m_deme_births_treatable; //!< Mean number of births in replicated treatable demes.
1160 cDoubleSum m_deme_merit_treatable; //!< Mean merit of replicated treatable demes.
1161 cDoubleSum m_deme_generation_treatable; //!< Mean generation of replicated treatable demes.
1162 cDoubleSum m_deme_density_treatable; //!< Mean density of replicated treatable demes.
1163
1164 int m_deme_num_repls_untreatable; //!< Number of deme replications in untreatable demes since last PrintDemeReplicationData.
1165 cDoubleSum m_deme_gestation_time_untreatable; //!< Gestation time for untreatable demes - mean age at deme replication.
1166 cDoubleSum m_deme_births_untreatable; //!< Mean number of births in replicated untreatable demes.
1167 cDoubleSum m_deme_merit_untreatable; //!< Mean merit of replicated untreatable demes.
1168 cDoubleSum m_deme_generation_untreatable; //!< Mean generation of replicated untreatable demes.
1169 cDoubleSum m_deme_density_untreatable; //!< Mean density of replicated untreatable demes.
1170
1171 t_founder_map m_deme_founders; //!< Data structure to track the founders of demes.
1172
1173
1174 // -------- Deme competition support --------
1175 public:
1176 //! Called immediately prior to deme competition.
1177 void CompeteDemes(const std::vector<double>& fitness);
1178 //! Print data regarding deme competition.
1179 void PrintDemeCompetitionData(const cString& filename);
1180
1181 private:
1182 std::vector<double> m_deme_fitness; //!< Fitness of each deme during last deme competition.
1183
1184 // -------- Cell data support --------
1185 public:
1186 //! Prints the cell data from every cell in the population.
1187 void PrintCellData(const cString& filename);
1188
1189 // -------- Opinion support --------
1190 public:
1191 //! Prints the current opinions of all organisms in the population.
1192 void PrintCurrentOpinions(const cString& filename);
1193 //! Prints the average number of organism with set opinions
1194 void PrintOpinionsSetPerDeme(const cString& filename);
1195
1196 // -------- Synchronization support --------
1197 public:
1198 typedef std::vector<int> CellFlashes; //!< Typedef for a list of cell IDs.
1199 typedef std::map<int, CellFlashes> DemeFlashes; //!< Typedef for cell IDs (in this deme) -> list of cell IDs.
1200 typedef std::map<int, DemeFlashes> PopulationFlashes; //!< Typedef for deme IDs -> flashes in that deme.
1201 //! Called immediately after an organism has issued a "flash" to its neighbors.
1202 void SentFlash(cOrganism& organism);
1203 //! Retrieve the cell ID -> flash time map.
GetFlashTimes()1204 const PopulationFlashes& GetFlashTimes() { return m_flash_times; }
1205 //! Print statistics about synchronization flashes.
1206 void PrintSynchronizationData(const cString& filename);
1207 //! Print detailed information regarding synchronization flashes.
1208 void PrintDetailedSynchronizationData(const cString& filename);
1209 protected:
1210 int m_flash_count; //!< Number of flashes that have occured since last PrintSynchronizationData.
1211 PopulationFlashes m_flash_times; //!< For tracking flashes that have occurred throughout this population.
1212
1213 // -------- Consensus support --------
1214 public:
1215 struct ConsensusRecord {
ConsensusRecordConsensusRecord1216 ConsensusRecord(int u, int d, cOrganism::Opinion c, int cell) : update(u), deme_id(d), consensus(c), cell_id(cell) {
1217 }
1218 int update;
1219 int deme_id;
1220 cOrganism::Opinion consensus;
1221 int cell_id;
1222 };
1223
1224 typedef std::vector<ConsensusRecord> Consensi; //!< Typedef for a map of update -> Consensus records.
1225 //! Called when a deme reaches consensus.
1226 void ConsensusReached(const cDeme& deme, cOrganism::Opinion consensus, int cellid);
1227 //! Print information about demes that have reached consensus.
1228 void PrintConsensusData(const cString& filename);
1229 //! Print "simple" (summary) consensus information.
1230 void PrintSimpleConsensusData(const cString& filename);
1231 protected:
1232 Consensi m_consensi; //!< Tracks when demes have reached consensus.
1233
1234 // ----------Division of Labor support --------
1235 protected:
1236 typedef std::deque<double> dblq;
1237 dblq m_switching;
1238 dblq m_deme_diversity;
1239 dblq m_shannon_div;
1240 dblq m_shannon_div_norm;
1241 dblq m_num_orgs_perf_reaction;
1242 dblq m_percent_reproductives;
1243 int m_resource_print_thresh;
1244
1245 public:
IncDemeReactionDiversityReplicationData(double deme_div,double switch_pen,double shannon_div,double num_orgs_perf_reaction,double per_repro)1246 void IncDemeReactionDiversityReplicationData(double deme_div, double switch_pen, \
1247 double shannon_div, double num_orgs_perf_reaction, double per_repro) {
1248 m_switching.push_back(switch_pen); m_deme_diversity.push_back(deme_div);
1249 m_shannon_div.push_back(shannon_div);
1250 m_num_orgs_perf_reaction.push_back(num_orgs_perf_reaction);
1251 double norm_shan = shannon_div / (log((double)num_orgs_perf_reaction));
1252 m_shannon_div_norm.push_back(norm_shan);
1253 m_percent_reproductives.push_back(per_repro);
1254
1255 }
1256 void PrintIntrinsicTaskSwitchingCostData(const cString& filename);
1257 void PrintAgePolyethismData(const cString& filename);
1258 void AgeTaskEvent(int org_id, int task_id, int org_age);
1259 //! Get number of deme replications
GetNumDemeReplications()1260 int GetNumDemeReplications() { return m_total_deme_num_repls; }
1261 //! Add a task time tracking event
1262 void AddTaskSwitchTime(int t1, int t2, int time);
1263
1264 //! Figure out how many juveniles and guards there are in the den
1265 void PrintDenData(const cString& filename);
1266
1267
1268
1269
1270 protected:
1271 std::map<int, cDoubleSum> reaction_age_map;
1272 std::map<std::pair<int,int>, cDoubleSum> intrinsic_task_switch_time;
1273
1274
1275 // -------- Reputation support ---------
1276 public:
1277 // Print statistics about reputation
1278 void PrintReputationData(const cString& filename);
1279 void PrintDirectReciprocityData(const cString& filename);
IncDonateToDonor()1280 void IncDonateToDonor() { m_donate_to_donor++; }
IncDonateToFacing()1281 void IncDonateToFacing() { m_donate_to_facing++; }
1282 void PrintStringMatchData(const cString& filename);
AddStringBitsMatchedValue(cString name,int value)1283 void AddStringBitsMatchedValue(cString name, int value) { m_string_bits_matched[name].Add(value); }
AddTag(int tag,int value)1284 void AddTag(int tag, int value) { m_tags[tag] = m_tags[tag] + value; }
IncPerfectMatch(int amount)1285 void IncPerfectMatch(int amount) { m_perfect_match.Add(amount); }
IncPerfectMatchOrg()1286 void IncPerfectMatchOrg() { m_perfect_match_org.Add(1); }
1287 void PrintShadedAltruists(const cString& filename);
1288
1289 protected:
1290 int m_donate_to_donor;
1291 int m_donate_to_facing;
1292 std::map <cString, cDoubleSum> m_string_bits_matched;
1293 cDoubleSum m_perfect_match;
1294 cDoubleSum m_perfect_match_org;
1295 std::map <int, int> m_tags;
1296
1297 // -------- Deme network support --------
1298 public:
1299 typedef std::map<std::string, double> network_stats_t; //!< Structure to hold statistics for one network.
1300 typedef std::map<std::string, cDoubleSum> avg_network_stats_t; //!< Structure to hold average statistics for many networks.
1301
1302 //! Track named network stats.
1303 void NetworkTopology(const network_stats_t& ns);
1304
1305 //! Print network statistics.
1306 void PrintDemeNetworkData(const cString& filename);
1307
1308 //! Print the topologies of all demes.
1309 void PrintDemeNetworkTopology(const cString& filename);
1310
1311 protected:
1312 avg_network_stats_t m_network_stats; //!< Network statistics.
1313
1314 // -------- HGT support --------
1315 private:
1316 cDoubleSum m_hgt_metabolized; //!< Total length of metabolized genome fragments.
1317 cDoubleSum m_hgt_inserted; //!< Total length of inserted genome fragments.
1318 public:
1319 //! Called when an organism metabolizes a genome fragment.
1320 void GenomeFragmentMetabolized(cOrganism* organism, const Sequence& fragment);
1321 //! Called when an organism inserts a genome fragment.
1322 void GenomeFragmentInserted(cOrganism* organism, const Sequence& fragment, const cGenomeUtil::substring_match& location);
1323 //! Print HGT statistics.
1324 void PrintHGTData(const cString& filename);
1325
1326 // -------- Multiprocess support --------
1327 private:
1328 cDoubleSum m_outgoing; //!< Number of outgoing migration events.
1329 cDoubleSum m_incoming; //!< Number of incoming migration events.
1330
1331 public:
1332 typedef std::map<std::string, double> profiling_stats_t; //!< Structure to hold average profiling statistics.
1333 typedef std::map<std::string, cDoubleSum> avg_profiling_stats_t; //!< Structure to hold statistics for one network.
1334
1335 //! Record information about an organism migrating from this population.
1336 void OutgoingMigrant(const cOrganism* org);
1337
1338 //! Record information about an organism migrating into this population.
1339 void IncomingMigrant(const cOrganism* org);
1340
1341 //! Print multiprocess data.
1342 void PrintMultiProcessData(const cString& filename);
1343
1344 //! Track profiling data.
1345 void ProfilingData(const profiling_stats_t& pf);
1346
1347 //! Print profiling data.
1348 void PrintProfilingData(const cString& filename);
1349
1350 protected:
1351 avg_profiling_stats_t m_profiling; //!< Profiling statistics.
1352
1353 // -------- Support for organism locations --------
1354 public:
1355 //! Print organism locations.
1356 void PrintOrganismLocation(const cString& filename);
1357
1358 private:
1359 // Initialization
1360 void setupProvidedData();
1361
1362 // Helper Methods
1363 template <class T> Data::PackagePtr packageData(T (cStats::*)() const) const;
1364 };
1365
1366
SetNumGenotypes(int new_genotypes,int num_historic)1367 inline void cStats::SetNumGenotypes(int new_genotypes, int num_historic)
1368 {
1369 num_genotypes_last = num_genotypes;
1370 num_genotypes = new_genotypes;
1371 num_genotypes_historic = num_historic;
1372 }
1373
SetBreedTrueCreatures(int in_num_breed_true_creatures)1374 inline void cStats::SetBreedTrueCreatures(int in_num_breed_true_creatures)
1375 {
1376 num_breed_true_creatures = in_num_breed_true_creatures;
1377 }
1378
SetNumParasites(int in_num_parasites)1379 inline void cStats::SetNumParasites(int in_num_parasites)
1380 {
1381 num_parasites = in_num_parasites;
1382 }
1383
SetNumNoBirthCreatures(int in_num_no_birth_creatures)1384 inline void cStats::SetNumNoBirthCreatures(int in_num_no_birth_creatures)
1385 {
1386 num_no_birth_creatures = in_num_no_birth_creatures;
1387 }
1388
SetNumSingleThreadCreatures(int in_num_single_thread_creatures)1389 inline void cStats::SetNumSingleThreadCreatures(int in_num_single_thread_creatures)
1390 {
1391 num_single_thread_creatures = in_num_single_thread_creatures;
1392 }
1393
SetNumMultiThreadCreatures(int in_num_multi_thread_creatures)1394 inline void cStats::SetNumMultiThreadCreatures(int in_num_multi_thread_creatures)
1395 {
1396 num_multi_thread_creatures = in_num_multi_thread_creatures;
1397 }
1398
SetNumModified(int in_num_modified)1399 inline void cStats::SetNumModified(int in_num_modified)
1400 {
1401 num_modified = in_num_modified;
1402 }
1403
1404 #endif
1405