void EndClinicalDueToDrugResistanceEvent::execute() {
    Person* person = (Person*) dispatcher();
    if (person->all_clonal_parasite_populations()->size() == 0) {
        person->change_state_when_no_parasite_in_blood();

    } else {
        //still have parasite in blood
        person->immune_system()->set_increase(true);
        person->set_host_state(Person::ASYMPTOMATIC);
        
        if (person->all_clonal_parasite_populations()->contain(clinical_caused_parasite_)) {
            clinical_caused_parasite_->set_last_update_log10_parasite_density(Model::CONFIG->log_parasite_density_level().log_parasite_density_asymptomatic);

            person->determine_relapse_or_not(clinical_caused_parasite_);

        }
        
        //        person->determine_relapse_or_not(clinical_caused_parasite_);
        //        person->determine_clinical_or_not(clinical_caused_parasite_);

        //        if (clinical_caused_parasite_->last_update_log10_parasite_density() < Model::CONFIG->log_parasite_density_level().log_parasite_density_asymptomatic) {
        //            std::cout << clinical_caused_parasite_->last_update_log10_parasite_density()<< std::endl;
        //            assert(false);
        //        }
        //        clinical_caused_parasite_->set_last_update_log10_parasite_density(Model::CONFIG->log_parasite_density_level().log_parasite_density_asymptomatic);
        //        clinical_caused_parasite_->set_update_function(Model::MODEL->immunity_clearance_update_function());
        //        //        std::cout << "hello" << std::endl;
    }

}
void MatureGametocyteEvent::execute() {
    Person* person = (Person*) dispatcher();
    if (person->all_clonal_parasite_populations()->contain(blood_parasite_)) {
        if (person->drugs_in_blood()->is_drug_in_blood(1) && !blood_parasite_->resist_to(Model::CONFIG->drug_db()->drug_db()[1])) {
            blood_parasite_->set_gametocyte_level(Model::CONFIG->gametocyte_level_under_artemisinin_action());
        } else {
            blood_parasite_->set_gametocyte_level(0.2);
        }
    }


}
void EndClinicalEvent::execute() {
    Person* person = (Person*) dispatcher();

    if (person->all_clonal_parasite_populations()->size() == 0) {
        person->change_state_when_no_parasite_in_blood();

    } else {
        //still have parasite in blood
        person->immune_system()->set_increase(true);
        person->set_host_state(Person::ASYMPTOMATIC);

        person->determine_relapse_or_not(clinical_caused_parasite_);

    }
}