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