def fn(self, cb): with open(self.reffname) as fin : cov = json.loads(fin.read()) for hscov in cov['hscov']: ad_cov = hscov['coverage'] kid_cov = min([1, hscov['coverage']*1.5]) sev_cov = 0.8 for start_month in range(len(self.scale_by_month)) : start_day = self.start+np.cumsum(self.days_in_month)[start_month] duration = self.days_in_month[start_month+1] scale = self.scale_by_month[start_month] targets = [ {'trigger': 'NewClinicalCase', 'coverage': 1, 'agemin': 15, 'agemax': 200, 'seek': min([1, ad_cov*scale]), 'rate': 0.3}, {'trigger': 'NewClinicalCase', 'coverage': 1, 'agemin': 0, 'agemax': 15, 'seek': min([1, kid_cov*scale]), 'rate': 0.3}, {'trigger': 'NewSevereCase', 'coverage': 1, 'seek': min([1, max([sev_cov*scale, kid_cov*scale])]), 'rate': 0.5}] add_health_seeking(cb, start_day=start_day, targets=targets, duration=duration, repetitions=-1, drug_ineligibility_duration=14, nodes={'Node_List': hscov['nodes'], "class": "NodeSetNodeList"})
def seasonal_health_seeking(self, cb): with open(self.fname) as fin: cov = json.loads(fin.read()) for i, hscov in enumerate(cov[self.channel]): code = 'group%d' % i ad_cov = hscov['coverage'] kid_cov = min([1, hscov['coverage'] * 1.5]) sev_cov = 0.8 for start_month in range(len(self.scale_by_month)): start_day = int(self.date + np.cumsum(self.days_in_month)[start_month]) duration = self.days_in_month[start_month + 1] scale = self.scale_by_month[start_month] targets = [ {'trigger': 'NewClinicalCase', 'coverage': 1, 'agemin': 15, 'agemax': 200, 'seek': min([1, ad_cov * scale]), 'rate': 0.3}, {'trigger': 'NewClinicalCase', 'coverage': 1, 'agemin': 0, 'agemax': 15, 'seek': min([1, kid_cov * scale]), 'rate': 0.3}, {'trigger': 'NewSevereCase', 'coverage': 1, 'seek': min([1, max([sev_cov * scale, kid_cov * scale])]), 'rate': 0.5}] add_health_seeking(cb, start_day=start_day, targets=targets, duration=duration, repetitions=self.duration_years + 1, drug_ineligibility_duration=14, node_property_restrictions=[{self.prop_name: code}])
def fn(self, cb): with open(self.reffname) as fin: cov = json.loads(fin.read()) for hscov in cov['hscov']: targets = [{ 'trigger': 'NewClinicalCase', 'coverage': 1, 'agemin': 15, 'agemax': 200, 'seek': hscov['coverage'], 'rate': 0.3 }, { 'trigger': 'NewClinicalCase', 'coverage': 1, 'agemin': 0, 'agemax': 15, 'seek': min([1, hscov['coverage'] * 1.5]), 'rate': 0.3 }, { 'trigger': 'NewSevereCase', 'coverage': 1, 'seek': 0.8, 'rate': 0.5 }] add_health_seeking(cb, start_day=self.start, targets=targets, nodes={ 'Node_List': hscov['nodes'], "class": "NodeSetNodeList" })
def fn(self, cb): add_health_seeking( cb, start_day=self.start, drug=self.drug, targets=self.targets, nodes=self.nodes, node_property_restrictions=self.node_property_restrictions) cb.update_params({'PKPD_Model': 'CONCENTRATION_VERSUS_TIME'})
def add_healthseeking(self): # Implement basic health-seeking behavior for all individuals in simulation # Event information files healthseek_events = pd.read_csv(self.healthseek_filename) healthseek_events['simday'] = [convert_to_day(x, self.sim_start_date, "%Y-%m-%d") for x in healthseek_events.fulldate] healthseek_events = healthseek_events[np.in1d(healthseek_events['grid_cell'], self.demo_cells)] healthseek_events.reset_index(inplace=True, drop=True) [binned_and_grouped, grouped_by_fields] = self.try_campaign_compression(healthseek_events) for tup, group in binned_and_grouped: table = self.convert_group_tuple_to_dict(tup, grouped_by_fields) node_list = list(group['grid_cell']) if sorted(node_list) == self.demo_cells: node_dict = {"class": "NodeSetAll"} else: node_dict = {"class": "NodeSetNodeList", "Node_List": node_list} add_health_seeking(self.cb, start_day=float(table['simday']), targets=[{'trigger': 'NewClinicalCase', 'coverage': float(table['cov_newclin_youth']), 'agemin': 0, 'agemax': 5, 'seek': 1, 'rate': 0.3}, {'trigger': 'NewClinicalCase', 'coverage': float(table['cov_newclin_adult']), 'agemin': 5, 'agemax': 100, 'seek': 1, 'rate': 0.3}, {'trigger': 'NewSevereCase', 'coverage': float(table['cov_severe_youth']), 'agemin': 0, 'agemax': 5, 'seek': 1, 'rate': 0.5}, {'trigger': 'NewSevereCase', 'coverage': float(table['cov_severe_adult']), 'agemin': 5, 'agemax': 100, 'seek': 1, 'rate': 0.5}], drug=['Artemether', 'Lumefantrine'], dosing='FullTreatmentNewDetectionTech', nodes=node_dict, duration=float(table['duration']))
def add_hs(cb, events_df): hs_field_list = ["cov_newclin_youth", "cov_newclin_adult", "cov_severe_youth", "cov_severe_adult", "duration"] binned_intervene_events, binned_and_grouped, data_fields = try_campaign_compression(events_df, hs_field_list) for table, group in binned_and_grouped: table_dict = dict(zip((data_fields), table)) node_list = sorted(group['grid_cell']) node_dict = {"class": "NodeSetNodeList", "Node_List": node_list} add_health_seeking(cb, start_day=float(table_dict['simday']), targets=[{'trigger': 'NewClinicalCase', 'coverage': float(table_dict['cov_newclin_youth']), 'agemin': 0, 'agemax': 5, 'seek': 1, 'rate': 0.3}, {'trigger': 'NewClinicalCase', 'coverage': float(table_dict['cov_newclin_adult']), 'agemin': 5, 'agemax': 100, 'seek': 1, 'rate': 0.3}, {'trigger': 'NewSevereCase', 'coverage': float(table_dict['cov_severe_youth']), 'agemin': 0, 'agemax': 5, 'seek': 1, 'rate': 0.5}, {'trigger': 'NewSevereCase', 'coverage': float(table_dict['cov_severe_adult']), 'agemin': 5, 'agemax': 100, 'seek': 1, 'rate': 0.5}], drug=['Artemether', 'Lumefantrine'], dosing='FullTreatmentNewDetectionTech', nodes=node_dict, duration=float(table_dict['duration']))
def add_hs(self, cb, filename=None): if not filename: filename = self.dropbox_base + "inputs/grid_csv/grid_all_healthseek_events.csv" intervene_events = pd.read_csv(filename) # Restrict to catchment of interest intervene_events = intervene_events[np.in1d( intervene_events['grid_cell'], self.catch_cells)] intervene_events.reset_index(inplace=True) # Compute simulation days relative to start date or use default in file intervene_events['simday'] = [ convert_to_day_365(x, self.start_date, "%Y-%m-%d") for x in intervene_events.fulldate ] hs_field_list = [ "cov_newclin_youth", "cov_newclin_adult", "cov_severe_youth", "cov_severe_adult", "duration" ] binned_intervene_events, binned_and_grouped, data_fields = self.try_campaign_compression_v2( intervene_events, hs_field_list) for table, group in binned_and_grouped: table_dict = dict(zip((data_fields), table)) node_list = sorted(group['grid_cell']) if node_list == sorted(self.catch_cells): node_dict = {"class": "NodeSetAll"} else: node_dict = { "class": "NodeSetNodeList", "Node_List": node_list } add_health_seeking(cb, start_day=float(table_dict['simday']), targets=[{ 'trigger': 'NewClinicalCase', 'coverage': float(table_dict['cov_newclin_youth']), 'agemin': 0, 'agemax': 5, 'seek': 1, 'rate': 0.3 }, { 'trigger': 'NewClinicalCase', 'coverage': float(table_dict['cov_newclin_adult']), 'agemin': 5, 'agemax': 100, 'seek': 1, 'rate': 0.3 }, { 'trigger': 'NewSevereCase', 'coverage': float(table_dict['cov_severe_youth']), 'agemin': 0, 'agemax': 5, 'seek': 1, 'rate': 0.5 }, { 'trigger': 'NewSevereCase', 'coverage': float(table_dict['cov_severe_adult']), 'agemin': 5, 'agemax': 100, 'seek': 1, 'rate': 0.5 }], drug=['Artemether', 'Lumefantrine'], dosing='FullTreatmentNewDetectionTech', nodes=node_dict, duration=float(table_dict['duration']))
#add_summary_report(cb) #add_patient_report(cb) # add_health_seeking(cb, start_day=0, drug=['Lumefantrine', 'Artemether'], # targets=[{'trigger': 'NewClinicalCase', 'coverage': .33, 'agemin': 0, 'agemax': 5, 'seek': 1, # 'rate': 0.3}, {'trigger': 'NewClinicalCase', 'coverage': .33, 'agemin': 5, 'agemax': 200, 'seek': 1, # 'rate': 0.3}]) add_health_seeking(cb, start_day=0, drug=['Lumefantrine', 'Artemether'], targets=[{ 'trigger': 'NewClinicalCase', 'coverage': .3, 'agemin': 0, 'agemax': 5, 'seek': 1., 'rate': 0. }, { 'trigger': 'NewClinicalCase', 'coverage': 1., 'agemin': 5, 'agemax': 200, 'seek': 1., 'rate': 0. }]) #add_drug_campaign(cb, "SMC", "SPA", start_days=[230 + 365*x for x in range(5)], repetitions=4, interval=30, coverage=1., target_group={'agemin' : 0, 'agemax' : 5}) add_summary_report(cb, interval=365 / 12., description='Monthly', age_bins=[5, 15, 200])
# Add case management -------------------------------------------------------------------------------------------- add_health_seeking(cb, start_day=0, drug=['Artemether', 'Lumefantrine'], nodes={ "class": "NodeSetNodeList", "Node_List": village_nodes }, targets=[{ 'trigger': 'NewClinicalCase', 'coverage': 0.4, 'agemin': 0, 'agemax': 5, 'seek': 1, 'rate': 0.3 }, { 'trigger': 'NewClinicalCase', 'coverage': 0.2, 'agemin': 5, 'agemax': 100, 'seek': 1, 'rate': 0.3 }, { 'trigger': 'NewSevereCase', 'coverage': 0.5, 'agemin': 0, 'agemax': 100, 'seek': 1, 'rate': 0.3 }])
def perfect_health_seeking(cb): add_health_seeking(cb, start_day=survey_day, targets=[dict(trigger='NewClinicalCase', coverage=1.0, seek=1.0, rate=0.3)]) return cb.set_param('Config_Name', 'perfect_health_seeking')
#[ModFn(heg_release, num_released, d) for (num_released, d) in release_combs], [ModFn(set_habs_scale, habs) for habs in habitat_scales], # set habitat scales [ModFn(DTKConfigBuilder.set_param, 'Run_Number', r) for r in range(1)]) cb = DTKConfigBuilder.from_defaults('MALARIA_SIM') for year in range(0, nyears, 3): add_ITN_age_season(cb, start=(365 * (baseline_year + year)) + 1, coverage_all=0.95, seasonal_dep={ 'times': [0, 365], 'values': [0.65, 0.65] }) ''' for year in range(nyears): add_IRS(cb, start=(365 * (baseline_year + year)) + 1, coverage_by_ages=[{'min': 0, 'max': 100, 'coverage': 0.95}]) add_health_seeking(cb, start_day=(365 * baseline_year) + 1, targets=[{'trigger': 'NewClinicalCase', 'coverage': 0.95, 'agemin': 0, 'agemax': 100, 'seek': 1, 'rate': 0.3}]) ''' cb.update_params({ 'Num_Cores': 1, 'Simulation_Duration': (nyears + baseline_year) * 365, # 'Simulation_Duration' : 500, 'Enable_Demographics_Reporting': 1, 'New_Diagnostic_Sensitivity': 0.05, # 20/uL #'Listed_Events': ['Bednet_Using', 'Bednet_Got_New_One', 'Bednet_Discarded', 'Received_Treatment', 'Received_IRS'] })