See
- The implementation simpathogen.cpp
- The description Pathogens
<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>