class_hems

  1from utils import Utils
  2import pandas as pd
  3from class_ambulance import Ambulance
  4
  5class HEMS(Ambulance):
  6    """
  7        # The HEMS class
  8
  9        This class defines a HEMS resource
 10
 11
 12    """
 13
 14    def __init__(
 15            self,
 16            callsign: str,
 17            callsign_group: str,
 18            vehicle_type: str,
 19            category: str,
 20            registration: str,
 21            summer_start: str,
 22            winter_start: str,
 23            summer_end: str,
 24            winter_end: str,
 25            servicing_schedule: pd.DataFrame,
 26            resource_id: str = None,
 27            summer_season: list[int] = None
 28        ):
 29        # Inherit all parent class functions
 30        super().__init__(ambulance_type = "HEMS")
 31
 32        self.utilityClass = Utils()
 33
 34        self.callsign = callsign
 35        self.callsign_group = callsign_group
 36        self.available = 1
 37        self.being_serviced = False
 38        self.flying_time = 0
 39        self.vehicle_type = vehicle_type
 40        self.category = category
 41        self.registration = registration
 42        self.summer_start = summer_start
 43        self.winter_start = winter_start
 44        self.summer_end = summer_end
 45        self.winter_end = winter_end
 46
 47        # Read in the summer months from a file
 48        summer_months = pd.read_csv("actual_data/rota_start_end_months.csv")
 49        summer_start_month = int(summer_months[summer_months["what"]=="summer_start_month"]["month"].values[0])
 50        summer_end_month = int(summer_months[summer_months["what"]=="summer_end_month"]["month"].values[0])
 51
 52        self.summer_season = [x for x in range(summer_start_month, summer_end_month+1)]
 53
 54        # Pre-determine the servicing schedule when the resource is created
 55        self.servicing_schedule = servicing_schedule
 56
 57        self.in_use = False
 58        self.resource_id = resource_id
 59
 60    def service_check(self, current_dt: pd.Timestamp, GDAAS_service: bool) -> bool:
 61
 62        if self.registration == 'g-daan':
 63
 64            if GDAAS_service:
 65                self.callsign_group = 70
 66                self.callsign = 'H70'
 67
 68            else:
 69                self.callsign_group = 71
 70                self.callsign = 'H71'
 71                self.in_use = False # We might need to re-think this in 24/7 scenarios although
 72                # presumably the callsign will not change during an incident, only after.
 73
 74            # GDASS being serviced
 75
 76            #print(f"reg {self.registration} now has callsign {self.callsign}")
 77
 78        return self.unavailable_due_to_service(current_dt)
 79
 80
 81    def unavailable_due_to_service(self, current_dt: pd.Timestamp) -> bool:
 82        """
 83            Returns logical value denoting whether the HEMS resource is currently
 84            unavailable due to being serviced
 85
 86        """
 87
 88        for index, row in self.servicing_schedule.iterrows():
 89            #print(row)
 90            if row['service_start_date'] <= current_dt <= row['service_end_date']:
 91                self.being_serviced = True
 92                return True
 93
 94        self.being_serviced = False
 95        return False
 96
 97    def hems_resource_on_shift(self, hour: int, month: int) -> bool:
 98
 99        """
100            Function to determine whether the HEMS resource is within
101            its operational hours
102        """
103
104        # Assuming summer hours are quarters 2 and 3 i.e. April-September
105        # Can be modified if required.
106        # SR NOTE: If changing these, please also modify in
107        # write_run_params() function in des_parallel_process
108        start = self.summer_start if month in self.summer_season else self.winter_start
109        end = self.summer_end if month in self.summer_season else self.winter_end
110
111        return self.utilityClass.is_time_in_range(int(hour), int(start), int(end))
class HEMS(class_ambulance.Ambulance):
  7class HEMS(Ambulance):
  8    """
  9        # The HEMS class
 10
 11        This class defines a HEMS resource
 12
 13
 14    """
 15
 16    def __init__(
 17            self,
 18            callsign: str,
 19            callsign_group: str,
 20            vehicle_type: str,
 21            category: str,
 22            registration: str,
 23            summer_start: str,
 24            winter_start: str,
 25            summer_end: str,
 26            winter_end: str,
 27            servicing_schedule: pd.DataFrame,
 28            resource_id: str = None,
 29            summer_season: list[int] = None
 30        ):
 31        # Inherit all parent class functions
 32        super().__init__(ambulance_type = "HEMS")
 33
 34        self.utilityClass = Utils()
 35
 36        self.callsign = callsign
 37        self.callsign_group = callsign_group
 38        self.available = 1
 39        self.being_serviced = False
 40        self.flying_time = 0
 41        self.vehicle_type = vehicle_type
 42        self.category = category
 43        self.registration = registration
 44        self.summer_start = summer_start
 45        self.winter_start = winter_start
 46        self.summer_end = summer_end
 47        self.winter_end = winter_end
 48
 49        # Read in the summer months from a file
 50        summer_months = pd.read_csv("actual_data/rota_start_end_months.csv")
 51        summer_start_month = int(summer_months[summer_months["what"]=="summer_start_month"]["month"].values[0])
 52        summer_end_month = int(summer_months[summer_months["what"]=="summer_end_month"]["month"].values[0])
 53
 54        self.summer_season = [x for x in range(summer_start_month, summer_end_month+1)]
 55
 56        # Pre-determine the servicing schedule when the resource is created
 57        self.servicing_schedule = servicing_schedule
 58
 59        self.in_use = False
 60        self.resource_id = resource_id
 61
 62    def service_check(self, current_dt: pd.Timestamp, GDAAS_service: bool) -> bool:
 63
 64        if self.registration == 'g-daan':
 65
 66            if GDAAS_service:
 67                self.callsign_group = 70
 68                self.callsign = 'H70'
 69
 70            else:
 71                self.callsign_group = 71
 72                self.callsign = 'H71'
 73                self.in_use = False # We might need to re-think this in 24/7 scenarios although
 74                # presumably the callsign will not change during an incident, only after.
 75
 76            # GDASS being serviced
 77
 78            #print(f"reg {self.registration} now has callsign {self.callsign}")
 79
 80        return self.unavailable_due_to_service(current_dt)
 81
 82
 83    def unavailable_due_to_service(self, current_dt: pd.Timestamp) -> bool:
 84        """
 85            Returns logical value denoting whether the HEMS resource is currently
 86            unavailable due to being serviced
 87
 88        """
 89
 90        for index, row in self.servicing_schedule.iterrows():
 91            #print(row)
 92            if row['service_start_date'] <= current_dt <= row['service_end_date']:
 93                self.being_serviced = True
 94                return True
 95
 96        self.being_serviced = False
 97        return False
 98
 99    def hems_resource_on_shift(self, hour: int, month: int) -> bool:
100
101        """
102            Function to determine whether the HEMS resource is within
103            its operational hours
104        """
105
106        # Assuming summer hours are quarters 2 and 3 i.e. April-September
107        # Can be modified if required.
108        # SR NOTE: If changing these, please also modify in
109        # write_run_params() function in des_parallel_process
110        start = self.summer_start if month in self.summer_season else self.winter_start
111        end = self.summer_end if month in self.summer_season else self.winter_end
112
113        return self.utilityClass.is_time_in_range(int(hour), int(start), int(end))

The HEMS class

This class defines a HEMS resource

HEMS( callsign: str, callsign_group: str, vehicle_type: str, category: str, registration: str, summer_start: str, winter_start: str, summer_end: str, winter_end: str, servicing_schedule: pandas.core.frame.DataFrame, resource_id: str = None, summer_season: list[int] = None)
16    def __init__(
17            self,
18            callsign: str,
19            callsign_group: str,
20            vehicle_type: str,
21            category: str,
22            registration: str,
23            summer_start: str,
24            winter_start: str,
25            summer_end: str,
26            winter_end: str,
27            servicing_schedule: pd.DataFrame,
28            resource_id: str = None,
29            summer_season: list[int] = None
30        ):
31        # Inherit all parent class functions
32        super().__init__(ambulance_type = "HEMS")
33
34        self.utilityClass = Utils()
35
36        self.callsign = callsign
37        self.callsign_group = callsign_group
38        self.available = 1
39        self.being_serviced = False
40        self.flying_time = 0
41        self.vehicle_type = vehicle_type
42        self.category = category
43        self.registration = registration
44        self.summer_start = summer_start
45        self.winter_start = winter_start
46        self.summer_end = summer_end
47        self.winter_end = winter_end
48
49        # Read in the summer months from a file
50        summer_months = pd.read_csv("actual_data/rota_start_end_months.csv")
51        summer_start_month = int(summer_months[summer_months["what"]=="summer_start_month"]["month"].values[0])
52        summer_end_month = int(summer_months[summer_months["what"]=="summer_end_month"]["month"].values[0])
53
54        self.summer_season = [x for x in range(summer_start_month, summer_end_month+1)]
55
56        # Pre-determine the servicing schedule when the resource is created
57        self.servicing_schedule = servicing_schedule
58
59        self.in_use = False
60        self.resource_id = resource_id
utilityClass
callsign
callsign_group
available
being_serviced
flying_time
vehicle_type
category
registration
summer_start
winter_start
summer_end
winter_end
summer_season
servicing_schedule
in_use
resource_id
def service_check( self, current_dt: pandas._libs.tslibs.timestamps.Timestamp, GDAAS_service: bool) -> bool:
62    def service_check(self, current_dt: pd.Timestamp, GDAAS_service: bool) -> bool:
63
64        if self.registration == 'g-daan':
65
66            if GDAAS_service:
67                self.callsign_group = 70
68                self.callsign = 'H70'
69
70            else:
71                self.callsign_group = 71
72                self.callsign = 'H71'
73                self.in_use = False # We might need to re-think this in 24/7 scenarios although
74                # presumably the callsign will not change during an incident, only after.
75
76            # GDASS being serviced
77
78            #print(f"reg {self.registration} now has callsign {self.callsign}")
79
80        return self.unavailable_due_to_service(current_dt)
def unavailable_due_to_service(self, current_dt: pandas._libs.tslibs.timestamps.Timestamp) -> bool:
83    def unavailable_due_to_service(self, current_dt: pd.Timestamp) -> bool:
84        """
85            Returns logical value denoting whether the HEMS resource is currently
86            unavailable due to being serviced
87
88        """
89
90        for index, row in self.servicing_schedule.iterrows():
91            #print(row)
92            if row['service_start_date'] <= current_dt <= row['service_end_date']:
93                self.being_serviced = True
94                return True
95
96        self.being_serviced = False
97        return False

Returns logical value denoting whether the HEMS resource is currently unavailable due to being serviced

def hems_resource_on_shift(self, hour: int, month: int) -> bool:
 99    def hems_resource_on_shift(self, hour: int, month: int) -> bool:
100
101        """
102            Function to determine whether the HEMS resource is within
103            its operational hours
104        """
105
106        # Assuming summer hours are quarters 2 and 3 i.e. April-September
107        # Can be modified if required.
108        # SR NOTE: If changing these, please also modify in
109        # write_run_params() function in des_parallel_process
110        start = self.summer_start if month in self.summer_season else self.winter_start
111        end = self.summer_end if month in self.summer_season else self.winter_end
112
113        return self.utilityClass.is_time_in_range(int(hour), int(start), int(end))

Function to determine whether the HEMS resource is within its operational hours