From 54f5a5e7e57d996f5757dba72e9e1383398712c9 Mon Sep 17 00:00:00 2001
From: Dave Casper <dcasper@uci.edu>
Date: Sun, 8 Oct 2023 17:56:48 -0700
Subject: [PATCH] ID dictionary versioning for backward compatibility

---
 .../NeutrinoIdDictFiles/data/IdDictNeutrino.xml   |  2 +-
 .../data/IdDictNeutrino_730.xml                   |  2 +-
 .../NeutrinoIdentifier/src/EmulsionID.cxx         |  2 ++
 .../NeutrinoSimEvent/src/NeutrinoHitIdHelper.cxx  | 15 +++++++++++----
 4 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/Neutrino/NeutrinoDetDescr/NeutrinoIdDictFiles/data/IdDictNeutrino.xml b/Neutrino/NeutrinoDetDescr/NeutrinoIdDictFiles/data/IdDictNeutrino.xml
index 45ef3be3e..79b72cd8b 100644
--- a/Neutrino/NeutrinoDetDescr/NeutrinoIdDictFiles/data/IdDictNeutrino.xml
+++ b/Neutrino/NeutrinoDetDescr/NeutrinoIdDictFiles/data/IdDictNeutrino.xml
@@ -1,4 +1,4 @@
-<IdDictionary name="Neutrino">
+<IdDictionary name="Neutrino" version="FASERNU-03-770">
 
   <field name="part">
     <label name="Emulsion" value="1" />
diff --git a/Neutrino/NeutrinoDetDescr/NeutrinoIdDictFiles/data/IdDictNeutrino_730.xml b/Neutrino/NeutrinoDetDescr/NeutrinoIdDictFiles/data/IdDictNeutrino_730.xml
index 3aeca47b4..e84740160 100644
--- a/Neutrino/NeutrinoDetDescr/NeutrinoIdDictFiles/data/IdDictNeutrino_730.xml
+++ b/Neutrino/NeutrinoDetDescr/NeutrinoIdDictFiles/data/IdDictNeutrino_730.xml
@@ -1,4 +1,4 @@
-<IdDictionary name="Neutrino">
+<IdDictionary name="Neutrino" version="FASERNU-04-730">
 
   <field name="part">
     <label name="Emulsion" value="1" />
diff --git a/Neutrino/NeutrinoDetDescr/NeutrinoIdentifier/src/EmulsionID.cxx b/Neutrino/NeutrinoDetDescr/NeutrinoIdentifier/src/EmulsionID.cxx
index 396397142..5f55b759c 100644
--- a/Neutrino/NeutrinoDetDescr/NeutrinoIdentifier/src/EmulsionID.cxx
+++ b/Neutrino/NeutrinoDetDescr/NeutrinoIdentifier/src/EmulsionID.cxx
@@ -246,6 +246,8 @@ EmulsionID::initialize_from_dictionary(const IdDictMgr& dict_mgr)
                   << std::endl;
     }
     
+    FaserDetectorID::setDictVersion(dict_mgr, "Neutrino");
+
     return 0;
 }
 
diff --git a/Neutrino/NeutrinoSimEvent/src/NeutrinoHitIdHelper.cxx b/Neutrino/NeutrinoSimEvent/src/NeutrinoHitIdHelper.cxx
index 59999048b..c52c57ade 100644
--- a/Neutrino/NeutrinoSimEvent/src/NeutrinoHitIdHelper.cxx
+++ b/Neutrino/NeutrinoSimEvent/src/NeutrinoHitIdHelper.cxx
@@ -45,11 +45,18 @@ void NeutrinoHitIdHelper::Initialize() {
   const EmulsionID* pix;
   ServiceHandle<StoreGateSvc> detStore ("DetectorStore", "NeutrinoHitIdHelper");
   if (detStore.retrieve().isSuccess()) {
-    if (detStore->retrieve(pix, "EmulsionID").isFailure()) { pix = 0; }
+    if (detStore->retrieve(pix, "EmulsionID").isFailure()) { pix = nullptr; }
+  }
+  if (pix == nullptr || pix->dictionaryVersion() == "FASERNU-03-770" || pix->dictionaryVersion() == "")
+  {
+    InitializeField("Module", 0, 34);
+    InitializeField("Base", 0, 21);
+  }
+  else  // FASERNU-04-730
+  {
+    InitializeField("Module", 0, 72);
+    InitializeField("Base", 0, 9);
   }
-
-  InitializeField("Module", 0, 72);
-  InitializeField("Base", 0, 9);
   InitializeField("Film", 0, 1);
 }
 
-- 
GitLab