From efbdfd71b90bdfa0c818a5ab5400a22ed3a15be8 Mon Sep 17 00:00:00 2001 From: Michael Walsh Date: Tue, 9 Sep 2025 11:06:42 -0400 Subject: [PATCH 1/3] add pv key migration to indexEntry migration script --- .../migration/util_migrate_state_indexes.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/tests/cis_tests/util/migration/util_migrate_state_indexes.py b/tests/cis_tests/util/migration/util_migrate_state_indexes.py index be5eb506a..f69d320ab 100644 --- a/tests/cis_tests/util/migration/util_migrate_state_indexes.py +++ b/tests/cis_tests/util/migration/util_migrate_state_indexes.py @@ -53,7 +53,19 @@ def findIndexDirs(root: Path) -> list[Path]: if confirm != 'y': print("Exiting without making any changes.") exit(0) + + +def migrateCalcluationParameters(jDict: dict, indexEntry: IndexEntry): + jDict["indexEntry"] = indexEntry.model_dump() + jDict["instrumentState"]["instrumentConfig"]["indexEntry"] = indexEntry.model_dump() + # migrate detectorState + if "detectorState" in jDict["instrumentState"]: + _, detectorState = lds.generateStateId(indexEntry.runNumber) + if detectorState.stateId is None: + raise ValueError(f"Detector state id missing for {indexEntry.runNumber}") + jDict["instrumentState"]["detectorState"] = detectorState.model_dump() + return jDict def stageMigrationIndexDir(indexDir: Path): @@ -93,10 +105,9 @@ def stageMigrationIndexDir(indexDir: Path): # if the file is a "record" we also need to update its "calculationParameters" to match the version of the indexEntry if "calculationParameters" in jDict: - jDict["calculationParameters"]["indexEntry"] = entry.model_dump() - jDict["calculationParameters"]["instrumentState"]["instrumentConfig"]["indexEntry"] = instParamIndexer.latestApplicableEntry(jDict["runNumber"]).model_dump() + jDict["calculationParameters"] = migrateCalcluationParameters(jDict["calculationParameters"], entry) if "instrumentState" in jDict: - jDict["instrumentState"]["instrumentConfig"]["indexEntry"] = instParamIndexer.latestApplicableEntry(jDict["seedRun"]).model_dump() + jDict = migrateCalcluationParameters(jDict, entry) # write the dict back to the json file # find common root of stageDir and jsonFile From e0bcb909e7e853d569eb0cf9a1c6c0904b6378a7 Mon Sep 17 00:00:00 2001 From: Michael Walsh Date: Tue, 9 Sep 2025 11:34:52 -0400 Subject: [PATCH 2/3] misunderstood my own code! revert to write the correct snapinstprm --- .../migration/util_migrate_state_indexes.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/tests/cis_tests/util/migration/util_migrate_state_indexes.py b/tests/cis_tests/util/migration/util_migrate_state_indexes.py index f69d320ab..5e74e0284 100644 --- a/tests/cis_tests/util/migration/util_migrate_state_indexes.py +++ b/tests/cis_tests/util/migration/util_migrate_state_indexes.py @@ -55,14 +55,13 @@ def findIndexDirs(root: Path) -> list[Path]: exit(0) -def migrateCalcluationParameters(jDict: dict, indexEntry: IndexEntry): - jDict["indexEntry"] = indexEntry.model_dump() +def migrateInstrumentState(jDict: dict, indexEntry: IndexEntry, runNumber): jDict["instrumentState"]["instrumentConfig"]["indexEntry"] = indexEntry.model_dump() # migrate detectorState if "detectorState" in jDict["instrumentState"]: - _, detectorState = lds.generateStateId(indexEntry.runNumber) + _, detectorState = lds.generateStateId(runNumber) if detectorState.stateId is None: - raise ValueError(f"Detector state id missing for {indexEntry.runNumber}") + raise ValueError(f"Detector state id missing for {runNumber}") jDict["instrumentState"]["detectorState"] = detectorState.model_dump() return jDict @@ -103,12 +102,18 @@ def stageMigrationIndexDir(indexDir: Path): # add the indexEntry to the dict jDict["indexEntry"] = entry.model_dump() + # Update NESTED indexedObjects # if the file is a "record" we also need to update its "calculationParameters" to match the version of the indexEntry if "calculationParameters" in jDict: - jDict["calculationParameters"] = migrateCalcluationParameters(jDict["calculationParameters"], entry) + # this is the historic snapinstprm for a given run, which is included in the calibration parameters + # as "instrumentState" + snapInstPrmEntry = instParamIndexer.latestApplicableEntry(jDict["runNumber"]) + jDict["calculationParameters"]["indexEntry"] = entry.model_dump() + jDict["calculationParameters"] = migrateInstrumentState(jDict["calculationParameters"], snapInstPrmEntry, jDict["runNumber"]) if "instrumentState" in jDict: - jDict = migrateCalcluationParameters(jDict, entry) - + snapInstPrmEntry = instParamIndexer.latestApplicableEntry(jDict["seedRun"]) + jDict = migrateInstrumentState(jDict, snapInstPrmEntry, jDict["seedRun"]) + # write the dict back to the json file # find common root of stageDir and jsonFile stagedJsonFile = stageDir / jsonFile.relative_to(calibrationRoot) From 1e6d2c93831e7664e9ba9a5edfbccfec3bce2ffc Mon Sep 17 00:00:00 2001 From: Michael Walsh Date: Tue, 9 Sep 2025 11:38:24 -0400 Subject: [PATCH 3/3] remove unnecessary validation --- tests/cis_tests/util/migration/util_migrate_state_indexes.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/cis_tests/util/migration/util_migrate_state_indexes.py b/tests/cis_tests/util/migration/util_migrate_state_indexes.py index 5e74e0284..3b72090f3 100644 --- a/tests/cis_tests/util/migration/util_migrate_state_indexes.py +++ b/tests/cis_tests/util/migration/util_migrate_state_indexes.py @@ -60,8 +60,6 @@ def migrateInstrumentState(jDict: dict, indexEntry: IndexEntry, runNumber): # migrate detectorState if "detectorState" in jDict["instrumentState"]: _, detectorState = lds.generateStateId(runNumber) - if detectorState.stateId is None: - raise ValueError(f"Detector state id missing for {runNumber}") jDict["instrumentState"]["detectorState"] = detectorState.model_dump() return jDict