See

<project-file type=“source”/> <content> #ifndef SIMPATHOGEN_H #define SIMPATHOGEN_H

#include <simutil.h> #include <simdistribution.h> #include <vector>

class SimProcess; class SimInfectionStage; class SimStageLink; class SimPathogen {

  public:
/* constructor */
SimPathogen(SimID id, float mutationrate = 0);
/* destructor */
virtual ~SimPathogen();

SimID id() const { return ID; }
/* add a stage */
void addStage(SimInfectionStage *);
/** specify that a stage is a initial stage, with a given 
    probability entering that stage initially */
void setInitialStage(SimInfectionStage *stage, float prob);
int initialStages() const { return InitialStages.size(); }
const SimInfectionStage *initialStage(int i) const { 
    return InitialStages[i]; 
}
const float initialStageProbability(int i) const {
    return InitialStageProbabilities[i]; 
}
/* mutate mutates to a new pathogen */
virtual SimPathogen * mutate(float time) const;
float mutationRate() const { return MutationRate; }
virtual void enterProcess(SimProcess *);
virtual void leaveProcess(SimProcess *);
  protected:
SimID ID;
/** the initial stages */
std::vector<SimInfectionStage*> InitialStages;
/** the probability entering which initial stage */
std::vector<float> InitialStageProbabilities;
/** the stages */
std::vector<SimInfectionStage*> Stages;
/** MutationRate is the per individual mutation rate */
float MutationRate;

};

class SimInfectionStage {

  public:
/** constructor */
SimInfectionStage(SimID id, float infectivity, float fatality, SimDistribution *excessdeath);
/** destructor */
~SimInfectionStage();
SimID id() const { return ID; }
float infectivity() const { return Infectivity; }
float fatality() const { return Fatality; }
float deathTime(float CurrentTime) const;
const SimStageLink* link(int i) const { return Links[i]; }
int links() const { return Links.size(); }
/** add a link */
void jumpTo(SimInfectionStage *, float probability, SimDistribution *);
  private:
SimID ID;
/** the excess death probability */
float Fatality;
/** the infectivity in this stage */
float Infectivity;
/** the links junmping to other stages */
std::vector<SimStageLink*> Links;
/** the excess death period distribution */
SimDistribution* ExcessDeath;  

};

class SimStageLink {

  public:
/* constructor and distructor */
SimStageLink(SimInfectionStage*, float prob, SimDistribution *);
~SimStageLink();
/* jumpTo returns the stage */
const SimInfectionStage* stage() const { return Stage; }
/* timeInterval returns the time interval */
float duration() const;

float probability() const { return Probability; }

  protected:
SimInfectionStage* Stage;
SimDistribution *TimeInterval;

float Probability; };

#endif

</content>