From 9e2bb79d39e3e5b2ab6b6d7e991bd1549e8e6754 Mon Sep 17 00:00:00 2001 From: Mariia Var Date: Wed, 13 May 2026 12:12:17 +0100 Subject: [PATCH] Revert "Revert "Validate startYear against MIN/MAX bounds"" --- src/main/java/simpaths/data/Parameters.java | 13 +++++++++++- .../simpaths/experiment/SimPathsMultiRun.java | 2 ++ .../simpaths/experiment/SimPathsStart.java | 4 ++++ .../00_master_simulation_validation_PL.do | 20 +++++++++++++++++-- .../do_files/01_prepare_simulated_data.do | 2 -- 5 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/main/java/simpaths/data/Parameters.java b/src/main/java/simpaths/data/Parameters.java index aa74194..4edee05 100644 --- a/src/main/java/simpaths/data/Parameters.java +++ b/src/main/java/simpaths/data/Parameters.java @@ -301,7 +301,7 @@ public static final double childrenNumDiscrepancyConstraint(double numberOfChild //public static int MAX_AGE_IN_EDUCATION;// = MAX_AGE;//30; // Max age a person can stay in education //Cannot set here, as MAX_AGE is not known yet. Now set to MAX_AGE in buildObjects in Model class. //public static int MAX_AGE_MARRIAGE;// = MAX_AGE;//75; // Max age a person can marry //Cannot set here, as MAX_AGE is not known yet. Now set to MAX_AGE in buildObjects in Model class. private static int MIN_START_YEAR = 2011; //Minimum allowed starting point. Should correspond to the oldest initial population. - private static int MAX_START_YEAR = 2020; //Maximum allowed starting point. Should correspond to the most recent initial population. + private static int MAX_START_YEAR = 2023; //Maximum allowed starting point. Should correspond to the most recent initial population. public static int startYear; public static int endYear; private static int MIN_START_YEAR_TRAINING = 2011; @@ -1752,6 +1752,17 @@ public static int getMinStartYear() { return (trainingFlag) ? MIN_START_YEAR_TRAINING : MIN_START_YEAR; } + public static void validateStartYear(int year) { + int min = getMinStartYear(); + int max = getMaxStartYear(); + if (year < min || year > max) { + String mode = trainingFlag ? "training data" : "real data"; + throw new IllegalArgumentException( + "Start year " + year + " is outside the allowed range [" + min + ", " + max + "] for " + mode + ". " + + "Choose a value within the supported initial-population years (or toggle the -t/--training flag if appropriate)."); + } + } + public static String getEuromodOutputDirectory(Country country) { //return (trainingFlag) ? EUROMOD_TRAINING_DIRECTORY : EUROMOD_OUTPUT_DIRECTORY; return (trainingFlag) ? INPUT_DIRECTORY + country + File.separator + "EUROMODoutput" + File.separator + "training" + File.separator : INPUT_DIRECTORY + country + File.separator + "EUROMODoutput" + File.separator; diff --git a/src/main/java/simpaths/experiment/SimPathsMultiRun.java b/src/main/java/simpaths/experiment/SimPathsMultiRun.java index ed6b3cb..ccae4cd 100644 --- a/src/main/java/simpaths/experiment/SimPathsMultiRun.java +++ b/src/main/java/simpaths/experiment/SimPathsMultiRun.java @@ -120,6 +120,8 @@ public static void main(String[] args) { // without this call the DBSetup branch crashes with "No PSA rules for country=". Parameters.defineCountryString(country); + Parameters.validateStartYear(startYear); + /*comment these lines if input folder needs to be saved in output*/ // Disable copying input folders into output ExperimentManager.getInstance().copyInputFolderStructure = false; diff --git a/src/main/java/simpaths/experiment/SimPathsStart.java b/src/main/java/simpaths/experiment/SimPathsStart.java index a175192..25a6fe6 100644 --- a/src/main/java/simpaths/experiment/SimPathsStart.java +++ b/src/main/java/simpaths/experiment/SimPathsStart.java @@ -340,6 +340,8 @@ private static void resetCommandLineState() { @Override public void buildExperiment(SimulationEngine engine) { + Parameters.validateStartYear(startYear); + // instantiate simulation processes SimPathsModel model = new SimPathsModel(country, startYear); model.setEndYear(endYear); @@ -369,6 +371,8 @@ private static void runGUIlessSetup(int option) throws FileNotFoundException { } } + Parameters.validateStartYear(startYear); + writeSelectedCountryAndYear(); if (reuseExistingDatabase) { diff --git a/validation/02_simulation_validation/do_files/00_master_simulation_validation_PL.do b/validation/02_simulation_validation/do_files/00_master_simulation_validation_PL.do index 317ef75..71e5fa4 100644 --- a/validation/02_simulation_validation/do_files/00_master_simulation_validation_PL.do +++ b/validation/02_simulation_validation/do_files/00_master_simulation_validation_PL.do @@ -23,6 +23,20 @@ *******************************************************************************/ clear all +/******************************************************************************* +* Ensure required user-written packages are installed +*******************************************************************************/ +local ssc_pkgs "ineqdeco fre unique grc1leg2" +foreach pkg of local ssc_pkgs { + capture which `pkg' + if _rc ssc install `pkg', replace +} + +* grc1leg lives on Vince Wiggins' site, not SSC +capture which grc1leg +if _rc net install grc1leg, from("http://www.stata.com/users/vwiggins/") +/*******************************************************************************/ + set logtype smcl set more off set mem 200m @@ -80,6 +94,8 @@ global max_age 65 * Observations up to and including this simulated year will be kept in the sample global min_year 2011 global max_year 2023 +global min_sim_year ${min_year} +global max_sim_year ${max_year} * Define age to become responsible as defined in the simulation global age_become_responsible 16 @@ -105,9 +121,9 @@ do "${dir_do_files}/03_create_EU_SILC_validation_targets.do" *******************************************************************************/ * List of SimPath Set ups to loop through -local alignments "output_refactored_runs3_popsize30000" +global alignments "alignment_00_populationOFF alignment_01_population alignment_02a_population_fertility alignment_02b_population_cohabitation alignment_02c_population_disability alignment_02d_population_inschool alignment_02e_population_retirement alignment_03_population_fertility_cohabitation alignment_04_population_fertility_cohabitation_employment" -foreach align in `alignments' { +foreach align in $alignments { /******************************************************************************* diff --git a/validation/02_simulation_validation/do_files/01_prepare_simulated_data.do b/validation/02_simulation_validation/do_files/01_prepare_simulated_data.do index 1fd1448..ced8ff8 100644 --- a/validation/02_simulation_validation/do_files/01_prepare_simulated_data.do +++ b/validation/02_simulation_validation/do_files/01_prepare_simulated_data.do @@ -9,9 +9,7 @@ * NOTES: ******************************************************************************** -local align "output_refactored_runs3_popsize30000" -global dir_simulated_data "$path/simulated_data/`align'/csv" * Import required variables from household file