def add_nets(cb, coverage=0.6, number=0, num_nodes=0, start_day=180):

    # # ITN
    add_ITN_age_season(
        cb,
        180,
        demographic_coverage=coverage,
        discard_times={
            "Expiration_Distribution_Type": "EXPONENTIAL_DURATION",
            "Expiration_Period": 639
        },
        blocking_config=WaningEffectExponential(Decay_Time_Constant=730,
                                                Initial_Effect=0.6),
        killing_config=WaningEffectExponential(Decay_Time_Constant=1460,
                                               Initial_Effect=0.7))
    add_ITN_age_season(
        cb,
        180 + 3 * 365,
        demographic_coverage=coverage,
        discard_times={
            "Expiration_Distribution_Type": "EXPONENTIAL_DURATION",
            "Expiration_Period": 639
        },
        blocking_config=WaningEffectExponential(Decay_Time_Constant=730,
                                                Initial_Effect=0.6),
        killing_config=WaningEffectExponential(Decay_Time_Constant=1460,
                                               Initial_Effect=0.7))

    return {
        'ITN_Coverage': coverage,
        'Release_Number': number,
        'Num_Nodes': num_nodes,
        'Start_Day': start_day
    }
 def fn(self, cb):
     add_ITN_age_season(cb, start=self.start,
                        age_dep=self.age_dep,
                        coverage_all=self.coverage,
                        as_birth=False,
                        seasonal_dep=self.seasonal_dep,
                        discard=self.discard)
def add_bednets_for_population_and_births(
        cb,
        coverage,
        start_day=1,
        seasonal_dependence=None,
        discard_config_type="default",
        age_dependence=default_bednet_age_usage,
        killing_config=None,
        blocking_config=None):
    if seasonal_dependence is None:
        seasonal_dependence = {}

    # regular_bednet_distribution
    add_ITN_age_season(cb,
                       birth_triggered=False,
                       start=start_day,
                       age_dependence=age_dependence,
                       demographic_coverage=coverage,
                       seasonal_dependence=seasonal_dependence,
                       discard_times=discard_config[discard_config_type],
                       blocking_config=blocking_config,
                       killing_config=killing_config)

    # birth_triggered_bednet_distribution
    add_ITN_age_season(cb,
                       birth_triggered=True,
                       start=start_day,
                       age_dependence=age_dependence,
                       demographic_coverage=coverage,
                       seasonal_dependence=seasonal_dependence,
                       discard_times=discard_config[discard_config_type],
                       blocking_config=blocking_config,
                       killing_config=killing_config)
Exemplo n.º 4
0
def add_itn(cb, events_df):
    itn_field_list = ["age_cov", "cov_all", "min_season_cov", "fast_fraction"]
    binned_intervene_events, binned_and_grouped, data_fields = try_campaign_compression(events_df, itn_field_list)

    birthnet_df = events_df.copy(deep=True)
    birthnet_df.sort_values(by='simday', inplace=True)
    birthnet_df['duration'] = birthnet_df.groupby('grid_cell')['simday'].shift(-1).sub(birthnet_df['simday'])
    birthnet_df['duration'].fillna(-1, inplace=True)
    birthnet_field_list = itn_field_list + ["duration"]
    BIRTH_binned_intervene_events, BIRTH_binned_and_grouped, BIRTH_data_fields = try_campaign_compression(birthnet_df, birthnet_field_list)

    for table, group in binned_and_grouped:
        table_dict = dict(zip((data_fields), table))
        node_list = sorted(list(set(group['grid_cell']))) # fixme Needed to add this because sometimes there are duplicate nodes in the list, and this breaks things

        start = float(table_dict['simday'])
        if start >= 0:
            # Regular bednet distribution
            add_ITN_age_season(cb,
                               start=float(table_dict['simday']),
                               age_dep={'youth_cov': float(table_dict['age_cov']),
                                        'youth_min_age': 5,
                                        'youth_max_age': 20},
                               coverage_all=float(table_dict['cov_all']),
                               as_birth=False,
                               seasonal_dep={'min_cov': float(table_dict['min_season_cov']),
                                             'max_day': 60},
                               discard={'halflife1': 260,
                                        'halflife2': 2106,
                                        'fraction1': float(table_dict['fast_fraction'])},
                               nodeIDs=node_list)

    # Birthnet distribution
    for table, group in BIRTH_binned_and_grouped:
        table_dict = dict(zip((BIRTH_data_fields), table))
        node_list = sorted(group['grid_cell'])

        start = float(table_dict['simday'])
        if start >= 0:
            add_ITN_age_season(cb,
                               as_birth=True,
                               duration=table_dict['duration'],
                               start=float(table_dict['simday']),
                               age_dep={'youth_cov': float(table_dict['age_cov']),
                                        'youth_min_age': 5,
                                        'youth_max_age': 20},
                               coverage_all=float(table_dict['cov_all']),
                               seasonal_dep={'min_cov': float(table_dict['min_season_cov']),
                                             'max_day': 60},
                               discard={'halflife1': 260,
                                        'halflife2': 2106,
                                        'fraction1': float(table_dict['fast_fraction'])},
                               nodeIDs=node_list)
Exemplo n.º 5
0
def add_annual_itns(cb, year_count=1, coverage=0.8, start_day=0, initial_killing=0.3, discard_time=270, IP=[]):

    for year in range(year_count):
        add_ITN_age_season(cb,
                           coverage_all=coverage,
                           discard={"halflife": discard_time},
                           waning={'kill_initial': initial_killing},
                           start=(365 * year) + start_day,
                           ind_property_restrictions=IP)

    return {"ITN_Coverage": coverage,
            "ITN_Start": start_day,
            "ITN_killing" : initial_killing,
            'ITN_discard' : discard_time}
def add_ITNs(cb,
             start=0,
             coverage=0.8,
             insecticide='',
             label='No_nets',
             killing=0.9):

    add_ITN_age_season(
        cb,
        start=start,
        demographic_coverage=coverage,
        insecticide=insecticide,
        discard_times={
            "Expiration_Distribution_Type": "EXPONENTIAL_DISTRIBUTION",
            "Expiration_Period_Exponential": 660
        },
        blocking_config=WaningEffectExponential(Initial_Effect=0.9,
                                                Decay_Time_Constant=730),
        killing_config=WaningEffectExponential(Initial_Effect=killing,
                                               Decay_Time_Constant=1460))

    cb.update_params({
        "Report_Event_Recorder":
        1,
        "Report_Event_Recorder_Events":
        ["Bednet_Got_New_One", "Bednet_Discarded"],
        "Report_Event_Recorder_Ignore_Events_In_List":
        0,
        "Report_Event_Recorder_Individual_Properties": []
    })

    return {
        'Insecticide': insecticide,
        'Coverage': coverage,
        'Start': start,
        'Label': label
    }
    def add_itn(self, cb, filename=None):
        if not filename:
            filename = self.dropbox_base + "inputs/grid_csv/grid_all_itn_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
        ]

        itn_field_list = [
            "age_cov", "cov_all", "min_season_cov", "fast_fraction"
        ]
        binned_intervene_events, binned_and_grouped, data_fields = self.try_campaign_compression_v2(
            intervene_events, itn_field_list)

        birthnet_df = intervene_events.copy(deep=True)
        birthnet_df['duration'] = birthnet_df.groupby(
            'grid_cell')['simday'].shift(-1).sub(birthnet_df['simday'])
        birthnet_df['duration'].fillna(-1, inplace=True)
        birthnet_field_list = itn_field_list + ["duration"]
        BIRTH_binned_intervene_events, BIRTH_binned_and_grouped, BIRTH_data_fields = self.try_campaign_compression_v2(
            birthnet_df, birthnet_field_list)

        for table, group in binned_and_grouped:
            table_dict = dict(zip((data_fields), table))
            node_list = sorted(
                list(set(group['grid_cell']))
            )  #fixme Needed to add this because sometimes there are duplicate nodes in the list, and this breaks things
            if node_list == sorted(self.catch_cells):
                nodeIDs = []
            else:
                nodeIDs = node_list

            start = float(table_dict['simday'])
            if start >= 0:
                # Regular bednet distribution
                add_ITN_age_season(cb,
                                   start=float(table_dict['simday']),
                                   age_dep={
                                       'youth_cov':
                                       float(table_dict['age_cov']),
                                       'youth_min_age': 5,
                                       'youth_max_age': 20
                                   },
                                   coverage_all=float(table_dict['cov_all']),
                                   as_birth=False,
                                   seasonal_dep={
                                       'min_cov':
                                       float(table_dict['min_season_cov']),
                                       'max_day':
                                       60
                                   },
                                   discard={
                                       'halflife1':
                                       260,
                                       'halflife2':
                                       2106,
                                       'fraction1':
                                       float(table_dict['fast_fraction'])
                                   },
                                   nodeIDs=nodeIDs)

        # Birthnet distribution
        for table, group in BIRTH_binned_and_grouped:
            table_dict = dict(zip((BIRTH_data_fields), table))
            node_list = sorted(group['grid_cell'])
            if node_list == sorted(self.catch_cells):
                nodeIDs = []
            else:
                nodeIDs = node_list

            start = float(table_dict['simday'])
            if start >= 0:
                add_ITN_age_season(cb,
                                   as_birth=True,
                                   duration=table_dict['duration'],
                                   start=float(table_dict['simday']),
                                   age_dep={
                                       'youth_cov':
                                       float(table_dict['age_cov']),
                                       'youth_min_age': 5,
                                       'youth_max_age': 20
                                   },
                                   coverage_all=float(table_dict['cov_all']),
                                   seasonal_dep={
                                       'min_cov':
                                       float(table_dict['min_season_cov']),
                                       'max_day':
                                       60
                                   },
                                   discard={
                                       'halflife1':
                                       260,
                                       'halflife2':
                                       2106,
                                       'fraction1':
                                       float(table_dict['fast_fraction'])
                                   },
                                   nodeIDs=nodeIDs)
Exemplo n.º 8
0
    def add_itns(self):
        # Add ITN events:
        itn_events_list = ["Bednet_Got_New_One","Bednet_Using","Bednet_Discarded"]
        self.cb.update_params({
            "Report_Event_Recorder_Ignore_Events_In_List": 0,
            "Listed_Events": itn_events_list,
            "Report_Event_Recorder_Events": [],
            "Report_Event_Recorder": 1
        })

        itn_events = pd.read_csv(self.itn_filename)
        itn_events['simday'] = [convert_to_day(x, self.sim_start_date, "%Y-%m-%d") for x in itn_events.fulldate]
        itn_events = itn_events[np.in1d(itn_events['grid_cell'], self.demo_cells)]
        itn_events.reset_index(inplace=True, drop=True)
        itn_events = itn_events[['event','fulldate','cov_all','age_cov','min_season_cov','fast_fraction','grid_cell','simday']]

        birthnet_events = generate_birthnets_df_from_itn_event_file(itn_events)
        birthnet_events = birthnet_events[['event','fulldate','cov_all','age_cov','min_season_cov','fast_fraction','grid_cell','simday','duration']]

        [binned_and_grouped, grouped_by_fields] = self.try_campaign_compression(itn_events[itn_events['simday'] >= 0])

        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:
                nodeIDs = []
            else:
                nodeIDs = node_list

            # Regular bednet distribution
            cov_all = float(table['cov_all'])
            if cov_all > 0:
                add_ITN_age_season(self.cb,
                                   start=float(table['simday']),
                                   age_dep={'youth_cov': float(table['age_cov']),
                                            'youth_min_age': 5,
                                            'youth_max_age': 20},
                                   coverage_all=float(table['cov_all']),
                                   as_birth=False,
                                   seasonal_dep={'min_cov': float(table['min_season_cov']),
                                                 'max_day': 1},
                                   discard={'halflife1': 260,
                                            'halflife2': 2106,
                                            'fraction1': float(table['fast_fraction'])},
                                   nodeIDs=nodeIDs)

        # Separately handle birth nets:
        [binned_and_grouped, grouped_by_fields] = self.try_campaign_compression(birthnet_events[birthnet_events['simday'] >= 0])
        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:
                nodeIDs = []
            else:
                nodeIDs = node_list

            cov_all = float(table['cov_all'])
            if cov_all > 0:
                add_ITN_age_season(self.cb,
                                   start=float(table['simday']),
                                   age_dep={'youth_cov': float(table['age_cov']), 'youth_min_age': 5,
                                            'youth_max_age': 20},
                                   coverage_all=float(table['cov_all']),
                                   seasonal_dep={'min_cov': float(table['min_season_cov']), 'max_day': 60},
                                   discard={'halflife1': 260,
                                            'halflife2': 2106,
                                            'fraction1': float(table['fast_fraction'])},
                                   nodeIDs=nodeIDs,
                                   as_birth=True,
                                   duration=table['duration'])
builder = ModBuilder.from_combos(
    #[ModFn(DTKConfigBuilder.set_param, 'HEG_Infection_Modification', im) for im in [1.0]],
    #[ModFn(DTKConfigBuilder.set_param, 'HEG_Fecundity_Limiting', fl) for fl in [0.05, 0.1, 0.15]],
    #[ModFn(DTKConfigBuilder.set_param, 'HEG_Homing_Rate', hr) for hr in [0.9, 0.95, 1.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,