コード例 #1
0
    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"})
コード例 #2
0
    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}])
コード例 #3
0
 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"
                            })
コード例 #4
0
 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'})
コード例 #5
0
    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']))
コード例 #6
0
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']))
コード例 #7
0
    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']))
コード例 #8
0
#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])
コード例 #9
0
# 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
                   }])
コード例 #10
0
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')
コード例 #11
0
    #[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']
})