def add_scenario_specific_smc(cb, age_range="default"):
    # Both years get 2 years of 90% coverage SMC
    for year in [0, 1]:
        dtk_start_days = year * 365 + smc_days_in_year

        if age_range in ["default", "u10", "u15"]:
            add_smc(cb,
                    u5_coverage=0.9,
                    start_days=dtk_start_days,
                    age_range=age_range)
        elif age_range == "u10_with_DP":
            add_drug_campaign(cb,
                              campaign_type="MDA",
                              drug_code="DP",
                              start_days=list(dtk_start_days),
                              coverage=0.9,
                              target_group={
                                  'agemin': 0.25,
                                  'agemax': 10
                              },
                              receiving_drugs_event_name="Received_SMC")
        elif age_range == "u15_with_DP":
            add_drug_campaign(cb,
                              campaign_type="MDA",
                              drug_code="DP",
                              start_days=list(dtk_start_days),
                              coverage=0.9,
                              target_group={
                                  'agemin': 0.25,
                                  'agemax': 15
                              },
                              receiving_drugs_event_name="Received_SMC")
Example #2
0
    def add_rcd(self):
        rcd_events = pd.read_csv(self.rcd_filename)
        rcd_events['simday'] = [convert_to_day(x, self.sim_start_date, "%Y-%m-%d") for x in rcd_events.fulldate]
        rcd_events = rcd_events[np.in1d(rcd_events['grid_cell'], self.demo_cells)]
        rcd_events.reset_index(inplace=True, drop=True)
        rcd_events = rcd_events[['grid_cell','event','fulldate','simday','coverage','trigger_coverage','interval']]

        [binned_and_grouped, grouped_by_fields] = self.try_campaign_compression(rcd_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:
                nodeIDs = []
            else:
                nodeIDs = node_list

            coverage = float(table['coverage'])
            if coverage > 0:
                add_drug_campaign(self.cb,
                                  campaign_type='rfMSAT',
                                  drug_code='AL',
                                  start_days=[float(table['simday'])],
                                  coverage=float(table['coverage']),
                                  trigger_coverage=float(table['trigger_coverage']),
                                  interval=float(table['interval']),
                                  nodes=nodeIDs)
Example #3
0
def add_smc_group(cb,
                  coverage=1.0,
                  start_days=[60],
                  agemax=10,
                  drug='DP',
                  target_property_name='ReceivedIntervention',
                  target_property_value='NoDrugs'):

    add_drug_campaign(cb,
                      'SMC',
                      drug,
                      start_days=start_days,
                      repetitions=4,
                      tsteps_btwn_repetitions=30,
                      coverage=coverage,
                      target_group={
                          'agemin': 0,
                          'agemax': agemax
                      })
    # ind_property_restrictions=[{target_property_name: target_property_value}])

    return {
        'Coverage': coverage,
        'Start': start_days[0],
        'Intervention_type': 'SMC%i' % agemax
    }
def add_ipt_for_timing_sweep(cb, scenario_number, archetype, num_years=1):
    if archetype == "Southern":
        timings_df = pd.read_csv("southern_term_sweep_scenarios.csv")
    elif archetype == "Sahel":
        timings_df = pd.read_csv("sahel_term_sweep_scenarios.csv")
    elif archetype == "Central":
        timings_df = pd.read_csv("central_term_sweep_scenarios.csv")
    else:
        raise NotImplementedError

    scenario_dict = dict(
        timings_df[timings_df["scenario_number"] ==
                   scenario_number].reset_index(drop=True).iloc[0])

    for y in range(num_years):
        campaign_days = np.array([
            scenario_dict["term1_day"] + y * 365,
            scenario_dict["term2_day"] + y * 365,
            scenario_dict["term3_day"] + y * 365
        ])

        add_drug_campaign(cb,
                          campaign_type="MDA",
                          drug_code="DP",
                          start_days=list(campaign_days),
                          coverage=1,
                          ind_property_restrictions=[{
                              "SchoolStatus":
                              "AttendsSchool"
                          }])

    return {"scenario_number": scenario_number}
Example #5
0
    def add_mda(self):
        mda_events = pd.read_csv(self.mda_filename)
        mda_events['simday'] = [convert_to_day(x, self.sim_start_date, "%Y-%m-%d") for x in mda_events.fulldate]
        mda_events = mda_events[np.in1d(mda_events['grid_cell'], self.demo_cells)]
        mda_events.reset_index(inplace=True, drop=True)
        mda_events = mda_events[['grid_cell','event','fulldate','simday','cov_all']]

        [binned_and_grouped, grouped_by_fields] = self.try_campaign_compression(mda_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:
                nodeIDs = []
            else:
                nodeIDs = node_list

            cov_all = float(table['cov_all'])
            if cov_all > 0:
                add_drug_campaign(self.cb,
                                  campaign_type='MDA',
                                  drug_code='DP',
                                  start_days=[float(table['simday'])],
                                  coverage=float(table['cov_all']),
                                  repetitions=1,
                                  interval=60,
                                  nodes=nodeIDs)
def add_smc_group(cb,
                  coverage=1.0,
                  start_days=[60, 60 + 365],
                  agemax=10,
                  drug='DP'):
    '''
    This function sets up an SMC campaign for children under a certain age. Drug parameters can be changed to include or exclude gametocyte killing.
    :param cb: config builder
    :param coverage: coverage for SMC
    :param start_days: campaign start day
    :param agemax: children under this age will receive SMC drugs
    :param drug: type of drug to be used in SMC campaign
    :return: tags for SMC campaign
    '''

    add_drug_campaign(cb,
                      'SMC',
                      drug,
                      start_days=start_days,
                      repetitions=3,
                      interval=30,
                      coverage=coverage,
                      target_group={
                          'agemin': 0,
                          'agemax': agemax
                      })

    return {
        'Coverage': coverage,
        'Start': start_days[0],
        'Intervention_type': 'SMC%i' % agemax
    }
def add_primaquine(cb):
    add_drug_campaign(cb,
                      'MDA',
                      drug_code="PMQ",
                      start_days=[1],
                      trigger_condition_list=[
                          'Received_Campaign_Drugs', 'Received_RCD_Drugs'
                      ],
                      receiving_drugs_event_name='Received_Primaquine')
def rcd_followthrough(cb, coverage=1, delivery_method="MTAT"):
    # Listen for Diagnostic_Survey_0 and implement a diagnostic survey, then broadcast TestedPositive or TestedNegative.
    # Then, if TestedPositive, then administer drugs and broadcast Received_RCD_Drugs

    # Drug setup
    drug_code = 'AL'
    drug_configs = drug_configs_from_code(cb, drug_code=drug_code)

    # set up events to broadcast when receiving reactive campaign drug
    receiving_drugs_event = {
        "class": "BroadcastEvent",
        "Broadcast_Event": "Received_RCD_Drugs"
    }

    event_config = drug_configs + [receiving_drugs_event]


    if delivery_method == "MTAT":
        add_diagnostic_survey(cb,
                              coverage=coverage,
                              start_day=1,
                              diagnostic_type='BLOOD_SMEAR_PARASITES',
                              diagnostic_threshold=0,
                              trigger_condition_list=['Diagnostic_Survey_0'],
                              event_name='Reactive MSAT level 0',
                              positive_diagnosis_configs=event_config,
                              listening_duration=-1)

    elif delivery_method == "MDA":
        add_drug_campaign(cb,
                          coverage=coverage,
                          drug_code=drug_code,
                          start_days=[1],
                          campaign_type="MDA",
                          trigger_condition_list=["Diagnostic_Survey_0"],
                          listening_duration=-1
                          )
        # def add_drug_campaign(cb, campaign_type: str = 'MDA', drug_code: str = None, start_days: list = None,
        #                       coverage: float = 1.0,
        #                       repetitions: int = 1, tsteps_btwn_repetitions: int = 60,
        #                       diagnostic_type: str = 'BLOOD_SMEAR',
        #                       diagnostic_threshold: float = 40, fmda_radius: int = 0,
        #                       node_selection_type: str = 'DISTANCE_ONLY',
        #                       trigger_coverage: float = 1.0, snowballs: int = 0, treatment_delay: int = 0,
        #                       triggered_campaign_delay: int = 0, nodeIDs: list = None, target_group: any = 'Everyone',
        #                       drug_ineligibility_duration: int = 0,
        #                       node_property_restrictions: list = None, ind_property_restrictions: list = None,
        #                       disqualifying_properties: list = None, trigger_condition_list: list = None,
        #                       listening_duration: int = -1, adherent_drug_configs: list = None,
        #                       target_residents_only: int = 1,
        #                       check_eligibility_at_trigger: bool = False):

        return {"delivery_method": delivery_method,
                "coverage": coverage}
Example #9
0
def add_mda(cb, events_df):
    mda_field_list = ["cov_all"]
    binned_intervene_events, binned_and_grouped, data_fields = try_campaign_compression(events_df, mda_field_list)

    for table, group in binned_and_grouped:
        table_dict = dict(zip((data_fields), table))
        node_list = sorted(group['grid_cell'])

        add_drug_campaign(cb,
                          campaign_type='MDA',
                          drug_code='DP',
                          start_days=[float(table_dict['simday'])],
                          coverage=table_dict['cov_all'],
                          repetitions=1,
                          interval=60,
                          nodes=node_list)
def add_smc(cb, u5_coverage, start_days, age_range="default"):
    # Copied from HBHI setup
    default_adherence = 0.8
    default_sp_resist_day1_multiply = 0.87
    adherent_drug_configs = smc_adherent_configuration(
        cb=cb,
        adherence=default_adherence,
        sp_resist_day1_multiply=default_sp_resist_day1_multiply)

    if age_range == "default":
        add_drug_campaign(cb,
                          'SMC',
                          start_days=start_days,
                          coverage=u5_coverage,
                          target_group={
                              'agemin': 0.25,
                              'agemax': 5
                          },
                          adherent_drug_configs=[adherent_drug_configs],
                          receiving_drugs_event_name='Received_SMC')

        o5_coverage = (0.2 / 0.9) * u5_coverage
        add_drug_campaign(cb,
                          'SMC',
                          start_days=start_days,
                          coverage=o5_coverage,
                          target_group={
                              'agemin': 5,
                              'agemax': 10
                          },
                          adherent_drug_configs=[adherent_drug_configs],
                          receiving_drugs_event_name='Received_SMC')

    elif age_range == "u10":
        add_drug_campaign(cb,
                          'SMC',
                          start_days=start_days,
                          coverage=u5_coverage,
                          target_group={
                              'agemin': 0.25,
                              'agemax': 10
                          },
                          adherent_drug_configs=[adherent_drug_configs],
                          receiving_drugs_event_name='Received_SMC')

    elif age_range == "u15":
        add_drug_campaign(cb,
                          'SMC',
                          start_days=start_days,
                          coverage=u5_coverage,
                          target_group={
                              'agemin': 0.25,
                              'agemax': 15
                          },
                          adherent_drug_configs=[adherent_drug_configs],
                          receiving_drugs_event_name='Received_SMC')
Example #11
0
def add_smc_group(cb, coverage=1.0, start_days=[60, 60+365], agemax=10, drug='DP', dp_gam_kill_on=1):

    add_drug_campaign(cb, 'SMC', drug, start_days=start_days, repetitions=3, interval=30,
    coverage=coverage,
    target_group={'agemin': 0, 'agemax': agemax})

    if not dp_gam_kill_on:
        malaria_drug_params = update_drugs(['DHA', 'Drug_Gametocyte02_Killrate'], 0.0)
        malaria_drug_params = update_drugs(['DHA', 'Drug_Gametocyte34_Killrate'], 0.0,
                                           malaria_drug_params=malaria_drug_params)
        malaria_drug_params = update_drugs(['DHA', 'Drug_GametocyteM_Killrate'], 0.0,
                                           malaria_drug_params=malaria_drug_params)
        malaria_drug_params = update_drugs(['Piperaquine', 'Drug_Gametocyte02_Killrate'], 0.0,
                                           malaria_drug_params=malaria_drug_params)

        cb.update_params({"Malaria_Drug_Params": malaria_drug_params})

    return {'Coverage': coverage, 'Start': start_days[0], 'Intervention_type': 'SMC_GK%i_' %dp_gam_kill_on+str(agemax)+drug}
 def __call__(self, cb):
     from malaria.interventions.malaria_drug_campaigns import add_drug_campaign
     return add_drug_campaign(cb, self.campaign_type, self.drug_code, start_days=self.start_days,
                              coverage=self.coverage, repetitions=self.repetitions, interval=self.interval,
                              diagnostic_threshold=self.diagnostic_threshold,
                              diagnostic_type=self.diagnostic_type,
                              drug_ineligibility_duration=self.drug_ineligibility_duration,
                              snowballs=self.snowballs, treatment_delay=self.delay, nodes=self.nodes,
                              target_group=self.target_group, node_property_restrictions=self.NP_restrictions)
    def add_rcd(self, cb, filename=None):
        if not filename:
            # filename = self.dropbox_base + "inputs/grid_csv/grid_all_react_events.csv"
            filename = self.dropbox_base + "inputs/grid_csv/grid_all_react_events_SIMPLE.csv"
            print(
                "WARNING: using simplified RCD file-- grid_all_react_events_SIMPLE.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
        ]

        rcd_field_list = ["coverage", "trigger_coverage", "interval"]
        binned_intervene_events, binned_and_grouped, data_fields = self.try_campaign_compression_v2(
            intervene_events, rcd_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):
                nodeIDs = []
            else:
                nodeIDs = node_list

            for i in range(len(intervene_events)):
                add_drug_campaign(cb,
                                  campaign_type='rfMSAT',
                                  drug_code='AL',
                                  diagnostic_type='BLOOD_SMEAR_PARASITES',
                                  diagnostic_threshold=0,
                                  start_days=[float(table_dict['simday'])],
                                  coverage=float(table_dict['coverage']),
                                  trigger_coverage=float(
                                      table_dict['trigger_coverage']),
                                  interval=float(table_dict['interval']),
                                  nodes=nodeIDs)
Example #14
0
def add_rcd(cb, events_df):
    rcd_field_list = ["coverage", "trigger_coverage", "interval"]
    binned_intervene_events, binned_and_grouped, data_fields = try_campaign_compression(
        events_df, rcd_field_list)

    for table, group in binned_and_grouped:
        table_dict = dict(zip((data_fields), table))
        node_list = sorted(group['grid_cell'])

        add_drug_campaign(cb,
                          campaign_type='rfMSAT',
                          drug_code='AL',
                          diagnostic_type='BLOOD_SMEAR_PARASITES',
                          diagnostic_threshold=0,
                          start_days=[float(table_dict['simday'])],
                          coverage=float(table_dict['coverage']),
                          trigger_coverage=float(
                              table_dict['trigger_coverage']),
                          nodeIDs=node_list)
def add_scenario_specific_ipt(
        cb,
        scenario_dict,
        archetype,
        receiving_drugs_event_name="Received_Campaign_Drugs"):
    # scenario dict has drug_type,screen_type,interval,school_coverage
    if scenario_dict["screen_type"] == "IPT":
        dtk_campaign_type = "MDA"
    elif scenario_dict["screen_type"] == "IST":
        dtk_campaign_type = "MSAT"
    else:
        raise NotImplementedError

    drug_code = scenario_dict["drug_type"]
    if drug_code == "SPAQ":
        drug_code = "SPA"
    if drug_code == "ASAQ":
        drug_code = "ASA"

    # timing:
    timings_df = pd.read_csv("ipt_schedule.csv")
    timings_df = timings_df[np.logical_and(
        timings_df["archetype"] == archetype,
        timings_df["interval"] == scenario_dict["interval"])].reset_index(
            drop=True)
    campaign_days = np.array(timings_df["day"])

    # Assuming that we do the same thing for 2 years:
    campaign_days = np.append(campaign_days, campaign_days + 365)

    add_drug_campaign(cb,
                      campaign_type=dtk_campaign_type,
                      drug_code=drug_code,
                      start_days=list(campaign_days),
                      coverage=scenario_dict["within_school_coverage"],
                      ind_property_restrictions=[{
                          "SchoolStatus":
                          "AttendsSchool"
                      }],
                      diagnostic_type='BLOOD_SMEAR_PARASITES',
                      diagnostic_threshold=0,
                      receiving_drugs_event_name=receiving_drugs_event_name)
def sample_point_fn(cb, sample_dimension_values):

    # require multinode to read in burn-in
    cb.update_params({'Simulation_Duration': sample_dimension_values['Serialization'],
                      'Spatial_Output_Channels': ['New_Diagnostic_Prevalence', 'Population', 'Prevalence'],
                      'Serialization_Time_Steps': [sample_dimension_values['Serialization']],
                      'New_Diagnostic_Sensitivity': 50
                      })

    # also need to pick up serialization path to load serialized file for each iteration.
    if sample_dimension_values['NodeIDs'] :

        # adjust the start date of VMW campaigns
        for event in cb.campaign['Events']:
            if event['Start_Day'] < sample_dimension_values['Serialization']:
                event['Start_Day'] = sample_dimension_values['Serialization']

        add_drug_campaign(cb, 'MDA', 'DP', [sample_dimension_values['Serialization']],
                          coverage=0.5, nodes=sample_dimension_values['NodeIDs'], interval=30)

        # for the second round, we want to set the start time equal to the last day of the old sim.
        # We also want duration to be equal to the new duration value, and for it to serialize at the
        # proper point.
        cb.update_params({'Start_Time': sample_dimension_values['Serialization'],
                          'Simulation_Duration': sample_dimension_values['New_Duration'],
                          'Serialization_Time_Steps': [sample_dimension_values['Serialization']+
                                                       sample_dimension_values['New_Duration']]})
        
    if 'Serialized_Population_Path' in sample_dimension_values:
        cb.set_param('Serialized_Population_Path',sample_dimension_values['Serialized_Population_Path'])
        
    if 'Serialized_Population_Filenames' in sample_dimension_values:
        cb.set_param('Serialized_Population_Filenames',sample_dimension_values['Serialized_Population_Filenames'])

    tags = {'Prevalence_date':sample_dimension_values['Prevalence_date'],
            'Prevalence_threshold': sample_dimension_values['Prevalence_threshold'],
            'Serialization': sample_dimension_values['New_Duration'] if sample_dimension_values['NodeIDs'] else
            sample_dimension_values['Serialization']}

    tags.update(cb.set_param('Run_Number', sample_dimension_values['Run_Number']))

    return tags
def add_long_term_ipt(cb, ipt_on):
    if ipt_on:
        term_days = [15, 165, 254]

        for y in range(num_years):
            for t in [1, 2, 3]:
                dtk_day = y * 365 + term_days[t - 1]

                add_drug_campaign(
                    cb,
                    campaign_type="MDA",
                    drug_code="DP",
                    start_days=[dtk_day],
                    coverage=0.9,
                    ind_property_restrictions=[{
                        "SchoolStatus": "AttendsSchool"
                    }],
                    receiving_drugs_event_name="Received_Campaign_Drugs")
    else:
        pass

    return {"ipt_on": ipt_on}
Example #18
0
def add_smc_variant(cb, scenario_num):
    '''

    :param cb:
    :param scenario_num:
    0 = no intervention.
    1 = regular SMC.
    2 = SMC + iver.
    3 = SMC + prim
    4 = SMC + iver + prim
    :return:
    '''
    if scenario_num == 0:
        pass
    else:
        add_scenario_specific_smc(cb, age_range="default")

    if scenario_num == 2 or scenario_num == 4:
        add_ivermectin(
            cb,
            box_duration="WEEK",
            start_days=[
                1
            ],  #Listening for drug delivery in other methods, then give this drug
            trigger_condition_list=['Received_SMC'])

    if scenario_num == 3 or scenario_num == 4:
        add_drug_campaign(cb,
                          'MDA',
                          drug_code="PMQ",
                          start_days=[1],
                          trigger_condition_list=['Received_SMC'],
                          receiving_drugs_event_name='Received_Primaquine')

    return {
        "scenario_num": scenario_num,
        "scenario_description": scenario_descriptions[scenario_num]
    }
    def add_msat(self, cb, filename=None):
        if not filename:
            filename = self.dropbox_base + "inputs/grid_csv/grid_all_msat_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
        ]

        msat_field_list = ["cov_all"]
        binned_intervene_events, binned_and_grouped, data_fields = self.try_campaign_compression_v2(
            intervene_events, msat_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):
                nodeIDs = []
            else:
                nodeIDs = node_list

            add_drug_campaign(cb,
                              campaign_type='MSAT',
                              drug_code='AL',
                              diagnostic_type='BLOOD_SMEAR_PARASITES',
                              diagnostic_threshold=0,
                              start_days=[float(table_dict['simday'])],
                              coverage=table_dict['cov_all'],
                              repetitions=1,
                              interval=60,
                              nodes=nodeIDs)
def add_ipt_with_iver_skipping_one_term(cb, term_to_skip):
    term_days = [15, 165, 254]

    for y in [0, 1]:
        for t in [1, 2, 3]:
            dtk_day = y * 365 + term_days[t - 1]

            add_drug_campaign(
                cb,
                campaign_type="MDA",
                drug_code="DP",
                start_days=[dtk_day],
                coverage=scenario_dict["within_school_coverage"],
                ind_property_restrictions=[{
                    "SchoolStatus": "AttendsSchool"
                }],
                diagnostic_type='BLOOD_SMEAR_PARASITES',
                diagnostic_threshold=0,
                receiving_drugs_event_name="Received_Campaign_Drugs_Term_{}".
                format(t))

    terms_with_iver = [1, 2, 3]
    terms_with_iver.remove(term_to_skip)
    iver_trigger_list = [
        "Received_Campaign_Drugs_Term_{}".format(t) for t in terms_with_iver
    ]

    add_ivermectin(
        cb,
        box_duration="WEEK",
        start_days=[
            1
        ],  #Listening for drug delivery in other methods, then give this drug
        trigger_condition_list=iver_trigger_list)

    return {"term_skipped": term_to_skip}
def add_intervention(cb, intervention, coverage, target, ivm_duration) :

    IPR = [{'HomeVillage' : 'Village1'}] if target == 'vill1' else None

    if intervention == 'ivermectin_to_forest' :
        add_ivermectin(cb, box_duration=ivm_duration, coverage=coverage, start_days=[365],
                       trigger_condition_list=['Immigrating'],
                       nodeIDs=forest_nodes,
                       target_group={'agemin': 5, 'agemax': 200, 'gender': 'Male'},
                       target_residents_only=False,
                       ind_property_restrictions=IPR
                       )
    elif intervention == 'drug_to_forest' :
        add_drug_campaign(cb, 'MDA', 'DP', coverage=coverage, start_days=[365],
                          repetitions=1,
                          trigger_condition_list=['Immigrating'],
                          nodeIDs=forest_nodes,
                          target_residents_only=False,
                          ind_property_restrictions=IPR
                          )
    elif intervention == 'drug_MDA' :
        add_drug_campaign(cb, 'MDA', 'DP', coverage=coverage, start_days=[365 + 152],
                          repetitions=3, tsteps_btwn_repetitions=30,
                          nodeIDs=village_nodes,
                          target_residents_only=False,
                          ind_property_restrictions=IPR
                          )
    elif intervention == 'drug_ivermectin_MDA' :
        add_drug_campaign(cb, 'MDA', 'DP', coverage=coverage, start_days=[365 + 152],
                          repetitions=3, tsteps_btwn_repetitions=30,
                          nodeIDs=village_nodes,
                          target_residents_only=False,
                          ind_property_restrictions=IPR
                          )
        add_ivermectin(cb, box_duration=ivm_duration, coverage=1, start_days=[365],
                       trigger_condition_list=['Received_Campaign_Drugs'],
                       target_group={'agemin': 5, 'agemax': 200, 'gender': 'Male'},
                       nodeIDs=village_nodes,
                       target_residents_only=False
                       )
        add_ivermectin(cb, box_duration=ivm_duration, coverage=1, start_days=[365],
                       trigger_condition_list=['Received_Campaign_Drugs'],
                       target_group={'agemin': 51, 'agemax': 200, 'gender': 'Female'},
                       nodeIDs=village_nodes,
                       target_residents_only=False
                       )
        add_ivermectin(cb, box_duration=ivm_duration, coverage=1, start_days=[365],
                       trigger_condition_list=['Received_Campaign_Drugs'],
                       target_group={'agemin': 5, 'agemax': 12, 'gender': 'Female'},
                       nodeIDs=village_nodes,
                       target_residents_only=False
                       )
    elif intervention == 'ivermectin_MDA' :
        add_ivermectin(cb, box_duration=ivm_duration, coverage=coverage,
                       start_days=[365 + 152 + 30 * x for x in range(3)],
                       nodeIDs=village_nodes,
                       target_group={'agemin': 5, 'agemax': 200, 'gender': 'Male'},
                       target_residents_only=False,
                       ind_property_restrictions=IPR
                       )
        add_ivermectin(cb, box_duration=ivm_duration, coverage=coverage,
                       start_days=[365 + 152 + 30 * x for x in range(3)],
                       nodeIDs=village_nodes,
                       target_group={'agemin': 51, 'agemax': 200, 'gender': 'Female'},
                       target_residents_only=False,
                       ind_property_restrictions=IPR
                       )
        add_ivermectin(cb, box_duration=ivm_duration, coverage=coverage,
                       start_days=[365 + 152 + 30 * x for x in range(3)],
                       nodeIDs=village_nodes,
                       target_group={'agemin': 5, 'agemax': 12, 'gender': 'Female'},
                       target_residents_only=False,
                       ind_property_restrictions=IPR
                       )

    forest_HS_coverage = coverage if intervention == 'forest_HS' else 0.4
    add_health_seeking(cb, start_day=0,
                       drug=['Artemether', 'Lumefantrine'],
                       nodes=village_nodes,
                       targets=[
                           {'trigger': 'NewClinicalCase', 'coverage': forest_HS_coverage, 'seek': 1, 'rate': 0.2}],
                       ind_property_restrictions=[{'ForestGoing': 'LovesForest'}]
                       )

    event_trigger_list=['Received_Treatment']
    if 'ivermectin' in intervention :
        event_trigger_list.append('Received_Ivermectin')
    if 'drug' in intervention :
        event_trigger_list.append('Received_Campaign_Drugs')
    add_event_counter_report(cb, event_trigger_list=event_trigger_list)

    return { 'intervention' : intervention,
             'coverage' : coverage,
             'target' : target,
             'IVM duration' : ivm_duration}