FRED
Person.h
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
 All Classes Functions