Program Listing for File Bacterium.h¶
↰ Return to documentation for file (source/lysis_mode/Bacterium.h
)
#ifndef BACTERIUM_H
#define BACTERIUM_H
#include "../default_mode/Host.h"
#include "LysisWorld.h"
class Bacterium : public Host {
protected:
double host_incorporation_val = 0;
emp::Ptr<LysisWorld> my_world = NULL;
public:
Bacterium(emp::Ptr<emp::Random> _random, emp::Ptr<LysisWorld> _world, emp::Ptr<SymConfigBase> _config,
double _intval =0.0, emp::vector<emp::Ptr<Organism>> _syms = {},
emp::vector<emp::Ptr<Organism>> _repro_syms = {},
double _points = 0.0) : Host(_random, _world, _config, _intval,_syms, _repro_syms, _points) {
host_incorporation_val = my_config->HOST_INC_VAL();
if(host_incorporation_val == -1){
host_incorporation_val = random->GetDouble(0.0, 1.0);
}
my_world = _world;
}
Bacterium(const Bacterium &) = default;
Bacterium(Bacterium &&) = default;
Bacterium() = default;
std::string const GetName() {
return "Bacterium";
}
double GetIncVal() {return host_incorporation_val;}
void SetIncVal(double _in) {host_incorporation_val = _in;}
emp::Ptr<Organism> MakeNew(){
emp::Ptr<Bacterium> host_baby = emp::NewPtr<Bacterium>(random, my_world, my_config, GetIntVal());
host_baby->SetIncVal(GetIncVal());
return host_baby;
}
void Mutate() {
Host::Mutate();
if(random->GetDouble(0.0, 1.0) <= my_config->MUTATION_RATE()){
//mutate host genome if enabled
if(my_config->MUTATE_INC_VAL()){
host_incorporation_val += random->GetRandNormal(0.0, my_config->MUTATION_SIZE());
if(host_incorporation_val < 0) host_incorporation_val = 0;
else if(host_incorporation_val > 1) host_incorporation_val = 1;
}
}
}
double ProcessLysogenResources(double phage_inc_val){
double incorporation_success = 1 - abs(GetIncVal() - phage_inc_val);
double processed_resources = GetResInProcess() * incorporation_success * my_config->SYNERGY();
SetResInProcess(0);
return processed_resources;
}
};//Bacterium
#endif