bool ConcurrencyConfigurationByProperty::Configure( const ::Configuration *json ) { initConfig( "Extra_Relational_Flag_Type", m_ExtraRelFlag, json, MetadataDescriptor::Enum("Extra_Relational_Flag_Type", "TBD", MDD_ENUM_ARGS( ExtraRelationalFlagType ) ) ); bool ret = true; if( m_ExtraRelFlag == ExtraRelationalFlagType::Correlated ) { std::set<std::string> allowable_relationship_types = GetAllowableRelationshipTypes(); std::vector<std::string> rel_type_strings ; initConfigTypeMap( "Correlated_Relationship_Type_Order", &rel_type_strings, "TBD", nullptr, allowable_relationship_types ); ret = JsonConfigurable::Configure( json ); if( ret ) { if( rel_type_strings.size() != RelationshipType::COUNT ) { std::stringstream ss; ss << "Reading '" << m_PropretyValue << ": 'Correlated_Relationship_Type_Order' has " << rel_type_strings.size() << " types and must have " << RelationshipType::COUNT; throw InvalidInputDataException( __FILE__, __LINE__, __FUNCTION__, ss.str().c_str() ); } for( auto& rel_type_str : rel_type_strings ) { int rel_type_val = RelationshipType::pairs::lookup_value( rel_type_str.c_str() ); // I don't think I need this but just in case. if( rel_type_val == -1 ) { std::stringstream ss; ss << "Unknown relationship type = " << rel_type_str; throw InvalidInputDataException( __FILE__, __LINE__, __FUNCTION__, ss.str().c_str() ); } if( std::find( m_RelTypeOrder.begin(), m_RelTypeOrder.end(), RelationshipType::Enum(rel_type_val) ) != m_RelTypeOrder.end() ) { std::stringstream ss; ss << "Duplicate(='" << rel_type_str << "') found in 'Correlated_Relationship_Type_Order'. There must be one and only one of each RelationshipType."; throw InvalidInputDataException( __FILE__, __LINE__, __FUNCTION__, ss.str().c_str() ); } m_RelTypeOrder.push_back( RelationshipType::Enum(rel_type_val) ); } } } else { for( int i = 0 ; i < RelationshipType::pairs::count() ; ++i ) { m_RelTypeOrder.push_back( RelationshipType::Enum(RelationshipType::pairs::get_values()[i]) ); } } return ret; }
bool PairFormationParametersImpl::Configure( const Configuration* inputJson ) { initConfig( "Formation_Rate_Type", formation_rate_type, inputJson, MetadataDescriptor::Enum("Formation_Rate_Type", "TBD"/*Formation_Rate_Type_DESC_TEXT*/, MDD_ENUM_ARGS( FormationRateType ) ) ); if( formation_rate_type == FormationRateType::CONSTANT ) { initConfigTypeMap( "Formation_Rate_Constant", &formation_rate_constant, "TBD"/*Formation_Rate_DESC_TEXT*/, 0, 1, 0.001f ); } else if( formation_rate_type == FormationRateType::SIGMOID_VARIABLE_WIDTH_HEIGHT ) { initConfigTypeMap( "Formation_Rate_Sigmoid", &formation_rate_sigmoid, "TBD"/*Formation_Rate_Sigmoid_DESC_TEXT*/ ); } else if( formation_rate_type == FormationRateType::INTERPOLATED_VALUES ) { initConfigComplexType("Formation_Rate_Interpolated_Values", &formation_rate_value_map, "TBD"/*Formation_Rate_Interpolated_Values_DESC_TEXT*/ ); } else { throw BadEnumInSwitchStatementException( __FILE__, __LINE__, __FUNCTION__, "Formation_Rate_Type", formation_rate_type ); } initConfigTypeMap( "Extra_Relational_Rate_Ratio_Male", &rate_ratio[Gender::MALE ], PFA_Extra_Relational_Rate_Ratio_Male_DESC_TEXT, 1.0, FLT_MAX, 1.0f ); initConfigTypeMap( "Extra_Relational_Rate_Ratio_Female", &rate_ratio[Gender::FEMALE], PFA_Extra_Relational_Rate_Ratio_Female_DESC_TEXT, 1.0, FLT_MAX, 1.0f ); initConfigTypeMap( "Update_Period", &update_period, "TBD"/*Update_Period_DESC_TEXT*/, 0, FLT_MAX, 0 ); initConfigTypeMap( "Number_Age_Bins_Male", &male_age_bin_count, Number_Age_Bins_Male_DESC_TEXT, 1, 1000, 1 ); initConfigTypeMap( "Number_Age_Bins_Female", &female_age_bin_count, Number_Age_Bins_Female_DESC_TEXT, 1, 1000, 1 ); initConfigTypeMap( "Age_of_First_Bin_Edge_Male", &initial_male_age, Age_of_First_Bin_Edge_Male_DESC_TEXT, 0, 100, 1 ); initConfigTypeMap( "Age_of_First_Bin_Edge_Female", &initial_female_age, Age_of_First_Bin_Edge_Female_DESC_TEXT, 0, 100, 1 ); initConfigTypeMap( "Years_Between_Bin_Edges_Male", &male_age_increment, Years_Between_Bin_Edges_Male_DESC_TEXT, 0.1f, 100.0f, 1.0f ); initConfigTypeMap( "Years_Between_Bin_Edges_Female", &female_age_increment, Years_Between_Bin_Edges_Female_DESC_TEXT, 0.1f, 100.0f, 1.0f ); initConfigTypeMap( "Joint_Probabilities", &joint_probabilities, Joint_Probabilities_DESC_TEXT, 0.0, FLT_MAX, 0.0f ); bool ret = false; bool prev_use_defaults = JsonConfigurable::_useDefaults ; bool reset_track_missing = JsonConfigurable::_track_missing; JsonConfigurable::_track_missing = false; JsonConfigurable::_useDefaults = false ; try { ret = JsonConfigurable::Configure( inputJson ); JsonConfigurable::_useDefaults = prev_use_defaults ; JsonConfigurable::_track_missing = reset_track_missing; } catch( DetailedException& e ) { JsonConfigurable::_useDefaults = prev_use_defaults ; JsonConfigurable::_track_missing = reset_track_missing; std::stringstream ss ; ss << e.GetMsg() << "\n" << "Was reading values for " << RelationshipType::pairs::lookup_key( rel_type ) << "." ; throw InvalidInputDataException( __FILE__, __LINE__, __FUNCTION__, ss.str().c_str() ); } catch( json::Exception& e ) { JsonConfigurable::_useDefaults = prev_use_defaults ; JsonConfigurable::_track_missing = reset_track_missing; std::stringstream ss ; ss << e.what() << "\n" << "Was reading values for " << RelationshipType::pairs::lookup_key( rel_type ) << "." ; throw InvalidInputDataException( __FILE__, __LINE__, __FUNCTION__, ss.str().c_str() ); } if( ret ) { CheckArraySizes(); InitializeAgeBins( Gender::MALE, male_age_bin_count, initial_male_age, male_age_increment ); InitializeAgeBins( Gender::FEMALE, female_age_bin_count, initial_female_age, female_age_increment ); InitializeMarginalValues(); InitializeCumulativeProbabilities(); } return ret ; }
bool DiagnosticTreatNeg::Configure( const Configuration * inputJson ) { EventOrConfig::Enum use_event_or_config; initConfig( "Event_Or_Config", use_event_or_config, inputJson, MetadataDescriptor::Enum("EventOrConfig", Event_Or_Config_DESC_TEXT, MDD_ENUM_ARGS( EventOrConfig ) ) ); if( use_event_or_config == EventOrConfig::Event || JsonConfigurable::_dryrun ) { initConfigTypeMap( "Negative_Diagnosis_Event", &negative_diagnosis_event, DTN_Negative_Diagnosis_Config_Event_DESC_TEXT ); initConfigTypeMap( "Defaulters_Event", &defaulters_event, DTN_Defaulters_Diagnosis_Config_Event_DESC_TEXT ); } if( use_event_or_config == EventOrConfig::Config || JsonConfigurable::_dryrun ) { initConfigComplexType("Negative_Diagnosis_Config", &negative_diagnosis_config, DTN_Negative_Diagnosis_Config_DESC_TEXT, "Event_Or_Config", "Config" ); initConfigComplexType("Defaulters_Config", &defaulters_config, DTN_Defaulters_Diagnosis_Config_DESC_TEXT, "Event_Or_Config", "Config" ); } bool ret = SimpleDiagnostic::Configure( inputJson ); if( ret ) { if( use_event_or_config == EventOrConfig::Config || JsonConfigurable::_dryrun ) { InterventionValidator::ValidateIntervention( negative_diagnosis_config._json ); InterventionValidator::ValidateIntervention( defaulters_config._json ); } if( !JsonConfigurable::_dryrun && negative_diagnosis_event.IsUninitialized() && (negative_diagnosis_config._json.Type() == ElementType::NULL_ELEMENT) ) { const char* msg = "You must define either Negative_Diagnosis_Event or Negative_Diagnosis_Config"; throw GeneralConfigurationException( __FILE__, __LINE__, __FUNCTION__, msg ); } if( !JsonConfigurable::_dryrun && defaulters_event.IsUninitialized() && (defaulters_config._json.Type() == ElementType::NULL_ELEMENT) ) { const char* msg = "You must define either Defaulters_Event or Defaulters_Config"; throw GeneralConfigurationException( __FILE__, __LINE__, __FUNCTION__, msg ); } } return ret ; }
bool SimpleVaccine::Configure( const Configuration * inputJson ) { initConfigTypeMap("Vaccine_Take", &vaccine_take, SV_Vaccine_Take_DESC_TEXT, 0.0, 1.0, 1.0 ); initConfig( "Vaccine_Type", vaccine_type, inputJson, MetadataDescriptor::Enum("Vaccine_Type", SV_Vaccine_Type_DESC_TEXT, MDD_ENUM_ARGS(SimpleVaccineType))); initConfigComplexType("Waning_Config", &waning_config, IVM_Killing_Config_DESC_TEXT ); bool configured = JsonConfigurable::Configure( inputJson ); if( !JsonConfigurable::_dryrun ) { auto tmp_waning = Configuration::CopyFromElement( waning_config._json ); waning_effect = WaningEffectFactory::CreateInstance( tmp_waning ); delete tmp_waning; tmp_waning = nullptr; } //release_assert( vaccine_type ); LOG_DEBUG_F( "Vaccine configured with type %d and take %f.\n", vaccine_type, vaccine_take ); return configured; }
bool NodeLevelHealthTriggeredIVScaleUpSwitch::Configure( const Configuration * inputJson ) { initConfig("Demographic_Coverage_Time_Profile", demographic_coverage_time_profile, inputJson, MetadataDescriptor::Enum("Demographic_Coverage_Time_Profile", NodeHTI_Demographic_Coverage_Time_Profile_DESC_TEXT, MDD_ENUM_ARGS(ScaleUpProfile) ) ); if ( demographic_coverage_time_profile == ScaleUpProfile::Linear || JsonConfigurable::_dryrun ) { initConfigTypeMap("Initial_Demographic_Coverage", &initial_demographic_coverage, NodeHTI_Initial_Demographic_Coverage_DESC_TEXT, 0.0f, 1.0f, 0.0f); initConfigTypeMap("Primary_Time_Constant", &primary_time_constant, NodeHTI_Primary_Time_Constant_DESC_TEXT, 0, INFINITE_TIME); //this is actually the time to reach the final demographic coverage, input as absolute days, not number of dts } //this has to be an array rather than a single intervention json so that it can be empty if you don't want to phase anything out initConfigComplexType("Not_Covered_IndividualIntervention_Configs", ¬_covered_intervention_configs, NodeHTI_Not_Covered_IndividualIntervention_Configs_DESC_TEXT); bool ret= NodeLevelHealthTriggeredIV::Configure(inputJson); return ret; }
bool ReferenceTrackingEventCoordinatorHIV::Configure( const Configuration * inputJson ) { initConfig("Target_Disease_State", target_disease_state, inputJson, MetadataDescriptor::Enum("Target_Disease_State", RTEC_HIV_Target_Disease_State_DESC_TEXT, MDD_ENUM_ARGS(TargetDiseaseStateType))) ; auto ret = ReferenceTrackingEventCoordinator::Configure( inputJson ); return ret; }
bool SusceptibilityConfig::Configure(const Configuration* config) { // Infection derived immunity // Maximum values were revised down to 1.0 from 1000.0. Values > 1.0 imply greater than // baseline susceptibility post infection, which is almost certainly not the desired behavior. // If that IS the desired behavior, then consider a disease specific build. initConfigTypeMap( "Post_Infection_Acquisition_Multiplier", &baseacqupdate, Post_Infection_Acquisition_Multiplier_DESC_TEXT, 0.0f, 1.0f, 0.0f, "Enable_Immunity" ); initConfigTypeMap( "Post_Infection_Transmission_Multiplier", &basetranupdate, Post_Infection_Transmission_Multiplier_DESC_TEXT, 0.0f, 1.0f, 0.0f, "Enable_Immunity" ); initConfigTypeMap( "Post_Infection_Mortality_Multiplier", &basemortupdate, Post_Infection_Mortality_Multiplier_DESC_TEXT, 0.0f, 1.0f, 0.0f, "Enable_Immunity" ); // Decay of infection derived immunity // Maximum values were revised down to 1.0 from 1000.0. Values > 1.0 imply waning rate >100%/day. // If that IS the desired behavior, consider turning off immunity. initConfigTypeMap( "Enable_Immune_Decay", &enable_immune_decay, Enable_Immune_Decay_DESC_TEXT, true, "Enable_Immunity"); initConfigTypeMap( "Acquisition_Blocking_Immunity_Decay_Rate", &acqdecayrate, Acquisition_Blocking_Immunity_Decay_Rate_DESC_TEXT, 0.0f, 1.0f, 0.001f, "Enable_Immune_Decay" ); initConfigTypeMap( "Transmission_Blocking_Immunity_Decay_Rate", &trandecayrate, Transmission_Blocking_Immunity_Decay_Rate_DESC_TEXT, 0.0f, 1.0f, 0.001f, "Enable_Immune_Decay" ); initConfigTypeMap( "Mortality_Blocking_Immunity_Decay_Rate", &mortdecayrate, Mortality_Blocking_Immunity_Decay_Rate_DESC_TEXT, 0.0f, 1.0f, 0.001f, "Enable_Immune_Decay" ); initConfigTypeMap( "Acquisition_Blocking_Immunity_Duration_Before_Decay", &baseacqoffset, Acquisition_Blocking_Immunity_Duration_Before_Decay_DESC_TEXT, 0.0f, MAX_HUMAN_LIFETIME, 0.0f, "Enable_Immune_Decay" ); initConfigTypeMap( "Transmission_Blocking_Immunity_Duration_Before_Decay", &basetranoffset, Transmission_Blocking_Immunity_Duration_Before_Decay_DESC_TEXT, 0.0f, MAX_HUMAN_LIFETIME, 0.0f, "Enable_Immune_Decay" ); initConfigTypeMap( "Mortality_Blocking_Immunity_Duration_Before_Decay", &basemortoffset, Mortality_Blocking_Immunity_Duration_Before_Decay_DESC_TEXT, 0.0f, MAX_HUMAN_LIFETIME, 0.0f, "Enable_Immune_Decay" ); // Maternal protection options (does not require infection derived immunity; does not decay) initConfigTypeMap("Enable_Maternal_Protection", &maternal_protection, Enable_Maternal_Protection_DESC_TEXT, false, "Enable_Birth"); initConfig("Maternal_Protection_Type", maternal_protection_type, config, MetadataDescriptor::Enum("Maternal_Protection_Type", Maternal_Protection_Type_DESC_TEXT, MDD_ENUM_ARGS(MaternalProtectionType)),"Enable_Maternal_Protection"); initConfigTypeMap("Maternal_Linear_Slope", &matlin_slope, Maternal_Linear_Slope_DESC_TEXT, 0.0001f, 1.0f, 0.01f, "Maternal_Protection_Type", "LINEAR"); initConfigTypeMap("Maternal_Linear_SusZero", &matlin_suszero, Maternal_Linear_SusZero_DESC_TEXT, 0.0f, 1.0f, 0.2f, "Maternal_Protection_Type", "LINEAR"); initConfigTypeMap("Maternal_Sigmoid_SteepFac", &matsig_steepfac, Maternal_Sigmoid_SteepFac_DESC_TEXT, 0.1f, 1000.0f, 30.0f, "Maternal_Protection_Type", "SIGMOID"); initConfigTypeMap("Maternal_Sigmoid_HalfMaxAge", &matsig_halfmax, Maternal_Sigmoid_HalfMaxAge_DESC_TEXT, -270.0f, 3650.0f, 180.0f, "Maternal_Protection_Type", "SIGMOID"); initConfigTypeMap("Maternal_Sigmoid_SusInit", &matsig_susinit, Maternal_Sigmoid_SusInit_DESC_TEXT, 0.0f, 1.0f, 0.0f, "Maternal_Protection_Type", "SIGMOID"); // Implementation of an individual's susceptibility // Currently (May2018) implemented for maternal protection only, but other functionality is expected to follow. initConfig( "Susceptibility_Type", susceptibility_type, config, MetadataDescriptor::Enum("Susceptibility_Type", Susceptibility_Type_DESC_TEXT, MDD_ENUM_ARGS(SusceptibilityType)), "Enable_Maternal_Protection"); initConfigTypeMap( "Enable_Initial_Susceptibility_Distribution", &enable_initial_susceptibility_distribution, Enable_Initial_Susceptibility_Distribution_DESC_TEXT, false, "Enable_Immunity" ); initConfig( "Susceptibility_Initialization_Distribution_Type", susceptibility_initialization_distribution_type, config, MetadataDescriptor::Enum("Susceptibility_Initialization_Distribution_Type", Susceptibility_Initialization_Distribution_Type_DESC_TEXT, MDD_ENUM_ARGS(DistributionType)), "Enable_Initial_Susceptibility_Distribution"); bool bRet = JsonConfigurable::Configure( config ); LogConfigs(); return bRet; }
bool Action::Configure( const Configuration * inputJson ) { initConfigTypeMap( "Threshold", &m_Threshold, ICE_Action_Threshold_DESC_TEXT, 0.0, FLT_MAX, 0.0 ); initConfig("Event_Type", m_EventType, inputJson, MetadataDescriptor::Enum("Event_Type", ICE_Event_Type_DESC_TEXT, MDD_ENUM_ARGS( EventType ))); initConfigTypeMap( "Event_To_Broadcast", &m_EventToBroadcast, ICE_Action_Event_To_Broadcast_DESC_TEXT ); bool ret = JsonConfigurable::Configure( inputJson ); if( ret && !JsonConfigurable::_dryrun ) { CheckConfigurationTriggers(); } return ret; }
bool Responder::Configure( const Configuration * inputJson ) { initConfig( "Threshold_Type", m_ThresholdType, inputJson, MetadataDescriptor::Enum( "ThresholdType", ICE_Threshold_Type_DESC_TEXT, MDD_ENUM_ARGS( ThresholdType ) ) ); initConfigComplexType( "Action_List", &m_ActionList, ICE_Action_List_DESC_TEXT ); bool ret = JsonConfigurable::Configure( inputJson ); if( ret && !JsonConfigurable::_dryrun ) { CheckConfiguration( inputJson ); m_ActionList.CheckConfiguration(); } return ret; }
bool IncidenceCounterSurveillance::Configure( const Configuration * inputJson ) { initConfig( "Counter_Event_Type", m_CounterEventType, inputJson, MetadataDescriptor::Enum("Counter_Event_Type", ICS_Counter_Event_Type_DESC_TEXT, MDD_ENUM_ARGS(EventType)) ); initConfig( "Counter_Type", m_CounterType, inputJson, MetadataDescriptor::Enum("Counter_Type", ICS_Counter_Type_DESC_TEXT, MDD_ENUM_ARGS(CounterType) ) ) ; initConfigTypeMap( "Counter_Period", &m_CounterPeriod, ICS_Counter_Period_DESC_TEXT, 1.0f, 1000.0f, 1.0f ); bool retValue = IncidenceCounter::Configure( inputJson ); if( retValue && !JsonConfigurable::_dryrun ) { m_CounterPeriod_current = m_CounterPeriod; } return retValue; }
bool InputEIR::Configure( const Configuration * inputJson ) { initConfig( "Age_Dependence", age_dependence, inputJson, MetadataDescriptor::Enum("Age_Dependence", IE_Age_Dependence_DESC_TEXT, MDD_ENUM_ARGS(AgeDependentBitingRisk)) ); initConfigComplexType( "Monthly_EIR", &monthly_EIR, IE_Config_Type_DESC_TEXT); switch(age_dependence) { case AgeDependentBitingRisk::OFF: risk_function=nullptr; break; case AgeDependentBitingRisk::LINEAR: risk_function = SusceptibilityVector::LinearBitingFunction; break; case AgeDependentBitingRisk::SURFACE_AREA_DEPENDENT: risk_function = SusceptibilityVector::SurfaceAreaBitingFunction; break; default: if( !JsonConfigurable::_dryrun ) { throw BadEnumInSwitchStatementException( __FILE__, __LINE__, __FUNCTION__, "age_dependence", age_dependence, AgeDependentBitingRisk::pairs::lookup_key(age_dependence) ); } } bool configured = BaseNodeIntervention::Configure( inputJson ); if(monthly_EIR.size() != MONTHSPERYEAR && JsonConfigurable::_dryrun == false ) { throw GeneralConfigurationException( __FILE__, __LINE__, __FUNCTION__, "'Monthly_EIR' parameterizes the mean number of infectious bites experienced by an individual for each month of the year. As such, it must be an array of EXACTLY length 12." ); } return configured; }
bool GenericDrug::Configure( const Configuration * inputJson ) { initConfigTypeMap("Primary_Decay_Time_Constant", &fast_decay_time_constant, DRUG_Primary_Decay_Time_Constant_DESC_TEXT, 0, 999999); initConfigTypeMap("Remaining_Doses", &remaining_doses, DRUG_Remaining_Doses_DESC_TEXT, -1, 999999); initConfigTypeMap("Dose_Interval", &time_between_doses, DRUG_Dose_Interval_DESC_TEXT, 0.0f, 99999.0f, 1.0f); initConfigTypeMap("Cost_To_Consumer", &cost_per_unit, DRUG_Cost_To_Consumer_DESC_TEXT, 0, 99999); initConfigTypeMap("Fraction_Defaulters", &fraction_defaulters, DRUG_Fraction_Defaulters_DESC_TEXT, 0.0f, 1.0f, 0.0f); initConfig( "Durability_Profile", durability_time_profile, inputJson, MetadataDescriptor::Enum("Durability_Profile", DRUG_Durability_Profile_DESC_TEXT, MDD_ENUM_ARGS(PKPDModel)) ); if (durability_time_profile == PKPDModel::CONCENTRATION_VERSUS_TIME || JsonConfigurable::_dryrun) { initConfigTypeMap("Secondary_Decay_Time_Constant", &slow_decay_time_constant, DRUG_Secondary_Decay_Time_Constant_DESC_TEXT, 0, 999999); initConfigTypeMap("Drug_CMax", &Cmax, DRUG_Drug_CMax_DESC_TEXT, 0, 10000); initConfigTypeMap("Drug_Vd", &Vd, DRUG_Drug_Vd_DESC_TEXT, 0, 10000); initConfigTypeMap("Drug_PKPD_C50", &drug_c50, DRUG_Drug_PKPD_C50_DESC_TEXT, 0, 5000); } bool configured = BaseIntervention::Configure( inputJson ); PkPdParameterValidation(); return configured; }