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))
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
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
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