Program Listing for File EfficientWorld.h¶
↰ Return to documentation for file (source/efficient_mode/EfficientWorld.h
)
#ifndef EFFWORLD_H
#define EFFWORLD_H
#include "../default_mode/SymWorld.h"
#include "../default_mode/DataNodes.h"
class EfficientWorld : public SymWorld {
private:
emp::Ptr<emp::DataMonitor<double>> data_node_efficiency;
public:
using SymWorld::SymWorld;
~EfficientWorld(){
if (data_node_efficiency) data_node_efficiency.Delete();
}
void Setup();
void SetupHosts(long unsigned int* POP_SIZE);
void SetupSymbionts(long unsigned int* total_syms);
void CreateDataFiles(){
std::string file_ending = "_SEED"+std::to_string(my_config->SEED())+".data";
SymWorld::CreateDataFiles();
SetupEfficiencyFile(my_config->FILE_PATH()+"Efficiency"+my_config->FILE_NAME()+file_ending).SetTimingRepeat(my_config->DATA_INT());
}
emp::DataFile & SetupEfficiencyFile(const std::string & filename) {
auto & file = SetupFile(filename);
auto & node = GetEfficiencyDataNode();
file.AddVar(update, "update", "Update");
file.AddMean(node, "mean_efficiency", "Average efficiency", true);
file.PrintHeaderKeys();
return file;
}
emp::DataMonitor<double>& GetEfficiencyDataNode() {
if (!data_node_efficiency) {
data_node_efficiency.New();
OnUpdate([this](size_t){
data_node_efficiency->Reset();
for (size_t i = 0; i< pop.size(); i++) {
if (IsOccupied(i)) {
emp::vector<emp::Ptr<Organism>>& syms = pop[i]->GetSymbionts();
size_t sym_size = syms.size();
for(size_t j=0; j< sym_size; j++){
data_node_efficiency->AddDatum(syms[j]->GetEfficiency());
}//close for
}//close if
if(sym_pop[i]) {
data_node_efficiency->AddDatum(sym_pop[i]->GetEfficiency());
}//close if
}//close for
});
}
return *data_node_efficiency;
}
}; //end of EfficientWorld class
#endif