44 class Person :
public cProcess
57 static void resetPopulation ();
61 virtual void handleMessage(
const cMessage* msg);
67 popSize = nCancer = nLocalisedCancer = nLocallyAdvancedCancer = nMetastaticCancer = 0;
70 Means Person::personTime = Means();
71 int Person::popSize = 0;
72 int Person::nCancer = 0;
73 int Person::nLocalisedCancer = 0;
74 int Person::nLocallyAdvancedCancer = 0;
75 int Person::nMetastaticCancer = 0;
92 (gleason==
gleason7 ? 1.3874 : 1.4027 * 1.3874);
99 if (R::runif(0.0,1.0)<0.2241)
100 scheduleAt(R::rweibull(exp(2.3525),64.0218),
"Localised");
101 scheduleAt(R::rexp(80.0),
"Death");
109 double dwellTime, pDx;
111 if (msg->name ==
"Death") {
112 personTime += msg->timestamp;
114 Sim::stop_simulation();
117 else if (msg->name ==
"PCDeath") {
119 personTime += msg->timestamp;
121 Sim::stop_simulation();
124 else if (msg->name ==
"Localised") {
126 gleason = (R::runif(0.0,1.0)<0.6812) ?
gleasonLt7 :
132 pDx = 1.1308/(2.1308);
133 if (R::runif(0.0,1.0)<pDx) {
134 scheduleAt(dwellTime,
"DxLocalised");
137 scheduleAt(dwellTime,
"LocallyAdvanced");
141 else if (msg->name ==
"LocallyAdvanced") {
143 nLocallyAdvancedCancer += 1;
148 pDx = 0.5900/(1.0+0.5900);
149 if (R::runif(0.0,1.0)<pDx) {
150 scheduleAt(dwellTime,
"DxLocallyAdvanced");
153 scheduleAt(dwellTime,
"Metastatic");
157 else if (msg->name ==
"Metastatic") {
163 pDx = 1.3147/(1.0+1.3147);
164 if (R::runif(0.0,1.0)<pDx) {
165 scheduleAt(dwellTime,
"DxMetastatic");
168 scheduleAt(dwellTime,
"PCDeath");
172 else if (msg->name ==
"DxLocalised") {
174 nLocalisedCancer += 1;
178 else if (msg->name ==
"DxLocallyAdvanced") {
180 nLocallyAdvancedCancer += 1;
184 else if (msg->name ==
"DxMetastatic") {
186 nMetastaticCancer += 1;
197 unsigned long seed[6];
198 for (
int i=0; i<6; i++) {
199 seed[i]=(
unsigned long)inseed[i];
202 RngStream_SetPackageSeed(seed);
203 Rng * rng =
new Rng();
205 Person::resetPopulation();
206 for (
int i = 0; i < *nin; i++) {
207 rng->nextSubstream();
209 Sim::create_process(&person);
210 Sim::run_simulation();
214 out[0] = Person::personTime.mean();
215 out[1] = Person::personTime.sd();
223 unsigned long seed[6];
224 for (
int i=0; i<6; i++) {
225 seed[i]=(
unsigned long)inseed[i];
228 RngStream_SetPackageSeed(seed);
229 Rng * rng =
new Rng();
232 out[0] = R::rnorm(0.0, 1.0);
233 out[1] = R::rnorm(0.0, 1.0);