FRED
|
00001 /* 00002 Copyright 2009 by the University of Pittsburgh 00003 Licensed under the Academic Free License version 3.0 00004 See the file "LICENSE" for more information 00005 */ 00006 00007 // 00008 // 00009 // File: Person.h 00010 // 00011 00012 #ifndef _FRED_PERSON_H 00013 #define _FRED_PERSON_H 00014 00015 #include "Global.h" 00016 #include <stdio.h> 00017 #include <stdlib.h> 00018 #include <vector> 00019 using namespace std; 00020 00021 class Population; 00022 class Place; 00023 class Disease; 00024 class Infection; 00025 class Population; 00026 class Transmission; 00027 00028 #include "Demographics.h" 00029 #include "Health.h" 00030 #include "Behavior.h" 00031 #include "Activities.h" 00032 00033 00034 class Person { 00035 public: 00036 00040 Person(); 00041 00055 Person(int index, int age, char sex, int marital, int rel, int occ, Place *house, 00056 Place *school, Place *work, int day, bool today_is_birthday); 00057 00058 ~Person(); 00059 00064 void become_unsusceptible(Disease *disease){health->become_unsusceptible(disease);} 00065 00071 void become_exposed(Disease *disease, Transmission *transmission) { 00072 health->become_exposed(disease, transmission); 00073 } 00074 00079 void become_immune(Disease *disease); 00080 00087 void print(FILE *fp, int disease) const; 00088 00094 int add_infectee(int disease); 00095 00101 int is_new_case(int day, int disease) const { 00102 return (health->get_exposure_date(disease) == day); 00103 } 00104 00105 int addInfected(int disease, vector<int> strains); 00106 00107 void infect(Person *infectee, int disease, Transmission *transmission); 00108 void addIncidence(int disease, vector<int> strains); 00109 void addPrevalence(int disease, vector<int> strains); 00110 00114 void set_changed(); 00115 00120 void update_demographics(int day) { demographics->update(day); } 00121 00126 void update_health(int day) { health->update(day); } 00127 00132 void update_behavior(int day) { behavior->update(day); } 00133 00137 void prepare_activities() { activities->prepare(); } 00138 00142 void update_activity_profile() { activities->update_profile(); } 00143 00147 void update_household_mobility() { activities->update_household_mobility(); } 00148 00153 void become_susceptible(Disease * disease) { health->become_susceptible(disease); } 00154 00159 void become_infectious(Disease * disease) { health->become_infectious(disease); } 00160 00165 void become_symptomatic(Disease *disease) { health->become_symptomatic(disease); } 00166 00171 void recover(Disease * disease) { health->recover(disease); } 00172 00177 Person * give_birth(int day); 00178 00183 void assign_classroom() { activities->assign_classroom(); } 00184 00189 void assign_office() { activities->assign_office(); } 00190 00197 string to_string(); 00198 00199 // access functions: 00204 int get_id() const { return id; } 00205 00209 Demographics * get_demographics() const { return demographics; } 00210 00215 int get_age() const { return demographics->get_age(); } 00216 00221 int get_init_age() const { return demographics->get_init_age(); } 00222 00227 int get_init_profession() const { return demographics->get_init_profession(); } 00228 00233 int get_init_marital_status() const { return demographics->get_init_marital_status(); } 00234 00239 double get_real_age(int day) const { return demographics->get_real_age(day); } 00240 00244 char get_sex() const { return demographics->get_sex(); } 00245 00249 int get_marital_status() const { return demographics->get_marital_status(); } 00250 00251 int get_relationship() { return demographics->get_relationship(); } 00252 00253 void set_relationship(int rel) { demographics->set_relationship(rel); } 00254 00258 int get_profession() const { return demographics->get_profession(); } 00259 00263 bool is_deceased() { return demographics->is_deceased(); } 00264 00268 bool is_adult() { return demographics->get_age() >= Global::ADULT_AGE; } 00269 bool is_child() { return demographics->get_age() < Global::ADULT_AGE; } 00270 00274 Health * get_health() const { return health; } 00275 00280 int is_symptomatic() { return health->is_symptomatic(); } 00281 00287 bool is_susceptible(int dis) { return health->is_susceptible(dis); } 00288 00294 bool is_infectious(int dis) { return health->is_infectious(dis); } 00295 00301 double get_susceptibility(int disease) const { return health->get_susceptibility(disease); } 00302 00308 double get_infectivity(int disease, int day) const { return health->get_infectivity(disease, day); } 00309 00314 int get_exposure_date(int disease) const { return health->get_exposure_date(disease); } 00315 00320 int get_infectious_date(int disease) const { return health->get_infectious_date(disease); } 00321 00326 int get_recovered_date(int disease) const { return health->get_recovered_date(disease); } 00327 00332 int get_infector(int disease) const { return health->get_infector(disease); } 00333 00338 int get_infected_place(int disease) const { return health->get_infected_place(disease); } 00339 00344 char * get_infected_place_label(int disease) const { return health->get_infected_place_label(disease); } 00345 00350 char get_infected_place_type(int disease) const { return health->get_infected_place_type(disease); } 00351 00357 int get_infectees(int disease) const { return health->get_infectees(disease); } 00358 00362 Activities * get_activities() const { return activities; } 00363 00367 Place * get_neighborhood() const { return activities->get_neighborhood(); } 00368 00373 Place * get_household() { return activities->get_household(); } 00374 bool is_householder() { return demographics->is_householder(); } 00375 00380 Place * get_neighborhood() { return activities->get_neighborhood(); } 00381 00386 Place * get_school() { return activities->get_school(); } 00387 00392 Place * get_classroom() { return activities->get_classroom(); } 00393 00398 Place * get_workplace() { return activities->get_workplace(); } 00399 00404 Place * get_office() { return activities->get_office(); } 00405 00410 int get_degree() { return activities->get_degree(); } 00411 00412 int get_household_size(){ return activities->get_group_size(HOUSEHOLD_INDEX); } 00413 int get_neighborhood_size(){ return activities->get_group_size(NEIGHBORHOOD_INDEX); } 00414 int get_school_size(){ return activities->get_group_size(SCHOOL_INDEX); } 00415 int get_classroom_size(){ return activities->get_group_size(CLASSROOM_INDEX); } 00416 int get_workplace_size(){ return activities->get_group_size(WORKPLACE_INDEX); } 00417 int get_office_size(){ return activities->get_group_size(OFFICE_INDEX); } 00418 00424 void start_traveling(Person *visited){ activities->start_traveling(visited); } 00425 00430 void stop_traveling(){ activities->stop_traveling(); } 00431 00436 bool get_travel_status(){ return activities->get_travel_status(); } 00437 00441 Behavior * get_behavior() const { return behavior; } 00442 00443 void select_adult_decision_maker(Person * old_adult){ behavior->select_adult_decision_maker(old_adult); } 00444 Person * get_adult_decision_maker() { return behavior->get_adult_decision_maker(); } 00445 bool adult_is_staying_home(int day) { return behavior->adult_is_staying_home(day); } 00446 bool child_is_staying_home(int day) { return behavior->child_is_staying_home(day); } 00447 bool acceptance_of_vaccine() { return behavior->acceptance_of_vaccine(); } 00448 bool acceptance_of_another_vaccine_dose() { return behavior->acceptance_of_another_vaccine_dose(); } 00449 void become_an_adult_decision_maker() { behavior->initialize_adult_behavior(this); } 00450 bool is_sick_leave_available() { return activities->is_sick_leave_available(); } 00451 00452 void terminate(); 00453 00454 private: 00455 int id; // person id 00456 Demographics *demographics; 00457 Health *health; 00458 Activities *activities; 00459 Behavior *behavior; 00460 }; 00461 00462 #endif // _FRED_PERSON_H