Raw File
Vaccine_Manager.h
/*
  This file is part of the FRED system.

  Copyright (c) 2010-2015, University of Pittsburgh, John Grefenstette,
  Shawn Brown, Roni Rosenfield, Alona Fyshe, David Galloway, Nathan
  Stone, Jay DePasse, Anuroop Sriram, and Donald Burke.

  Licensed under the BSD 3-Clause license.  See the file "LICENSE" for
  more information.
*/

//
//
// File: Vaccine_Manager.h
//

#ifndef _FRED_VACCINE_MANAGER_H
#define _FRED_VACCINE_MANAGER_H

#define VACC_NO_PRIORITY  0
#define VACC_AGE_PRIORITY 1
#define VACC_ACIP_PRIORITY 2

#define VACC_DOSE_NO_PRIORITY 0
#define VACC_DOSE_FIRST_PRIORITY 1
#define VACC_DOSE_RAND_PRIORITY 2
#define VACC_DOSE_LAST_PRIORITY 3

#include <list>
#include <vector>
#include <string>
#include "Manager.h"

using namespace std;

class Manager;
class Population;
class Vaccines;
class Person;
class Policy;
class Timestep_Map;

class Vaccine_Manager: public Manager {
  //Vaccine_Manager handles a stock of vaccines
public:
  // Construction and Destruction
  Vaccine_Manager();
  Vaccine_Manager(Population * _pop);
  ~Vaccine_Manager();
  
  //Parameters Access
  bool do_vaccination() const {
    return this->do_vacc;
  }

  Vaccines * get_vaccines() const {
    return this->vaccine_package;
  }

  list<Person*> get_priority_queue() const {
    return this->priority_queue;
  }

  list<Person*> get_queue() const {
    return this->queue;}
  int get_number_in_priority_queue() const {
    return this->priority_queue.size();
  }

  int get_number_in_reg_queue() const {
    return this->queue.size();
  }

  int get_current_vaccine_capacity() const {
    return this->current_vaccine_capacity;
  }
  
  // Vaccination Specific Procedures
  void fill_queues();
  void vaccinate(int day);
  void add_to_queue(Person * person);                 //Adds person to queue based on current policies
  void remove_from_queue(Person * person);            //Remove person from the vaccine queue
  void add_to_priority_queue_random(Person * person); //Adds person to the priority queue in a random spot
  void add_to_regular_queue_random(Person * person);  //Adds person to the regular queue in a random spot
  void add_to_priority_queue_begin(Person * person);  //Adds person to the beginning of the priority queue
  void add_to_priority_queue_end(Person * person);    //Adds person to the end of the priority queue

  //Paramters Access Members
  int get_vaccine_priority_age_low() const {
    return vaccine_priority_age_low;
  }

  int get_vaccine_priority_age_high() const {
    return this->vaccine_priority_age_high;
  }

  int get_vaccine_dose_priority() const {
    return this->vaccine_dose_priority;
  }

  string get_vaccine_dose_priority_string() const;
  
  // Utility Members
  void update(int day);
  void reset();
  void print();
  
private:
  Vaccines* vaccine_package;             //Pointer to the vaccines that this manager oversees
  list<Person *> priority_queue;         //Queue for the priority agents
  list<Person *> queue;                  //Queue for everyone else
  
  //Parameters from Input 
  bool do_vacc;                           //Is Vaccination being performed
  bool vaccine_priority_only;             //True - Vaccinate only the priority
  bool vaccinate_symptomatics;            //True - Include people that have had symptoms in the vaccination
  bool refresh_vaccine_queues_daily;      //True - people queue up in random order each day
  
  int vaccine_priority_age_low;           //Age specific priority
  int vaccine_priority_age_high;
  int vaccine_dose_priority;              //Defines where people getting multiple doses fit in the queue
                                          // See defines above for values
  
  Timestep_Map * vaccination_capacity_map; // How many people can be vaccinated now,
  // gets its value from the capacity change list
  int current_vaccine_capacity;           // variable to keep track of how many persons this 
                                          // can vaccinate each timestep.
};


#endif


back to top