From 574e039254a4ddd42e699f1501f95b5475f8daab Mon Sep 17 00:00:00 2001
From: Dave Casper <dcasper@uci.edu>
Date: Thu, 12 May 2022 06:31:43 -0700
Subject: [PATCH] Trench, vetonu and FaserNu support

---
 .../CalypsoConfiguration/python/DetectorConfigFlags.py    | 2 +-
 .../GeoModel/FaserGeoModel/python/GeoModelInit.py         | 5 +++++
 .../TrenchGeoModel/src/TrenchDetectorFactory.cxx          | 8 +++++++-
 .../TrenchGeoModel/src/TrenchDetectorFactory.h            | 2 +-
 .../G4Faser/G4FaserTools/python/G4GeometryToolConfig.py   | 2 +-
 graphics/VTI12/VTI12Algs/share/vti12.py                   | 3 ++-
 .../VTI12GeometrySystems/VP1GeoFlags.h                    | 1 +
 .../VTI12GeometrySystems/src/GeoSysController.cxx         | 3 +++
 .../VTI12GeometrySystems/src/VP1GeometrySystem.cxx        | 8 ++++++++
 .../VTI12GeometrySystems/src/VolumeTreeModel.cxx          | 5 ++++-
 graphics/VTI12/VTI12Utils/VTI12Utils/VP1JobConfigInfo.h   | 2 ++
 graphics/VTI12/VTI12Utils/src/VP1JobConfigInfo.cxx        | 4 ++++
 12 files changed, 39 insertions(+), 6 deletions(-)

diff --git a/Control/CalypsoConfiguration/python/DetectorConfigFlags.py b/Control/CalypsoConfiguration/python/DetectorConfigFlags.py
index 8ffa4ccd..b2588ba8 100644
--- a/Control/CalypsoConfiguration/python/DetectorConfigFlags.py
+++ b/Control/CalypsoConfiguration/python/DetectorConfigFlags.py
@@ -46,7 +46,7 @@ def createDetectorConfigFlags():
 
     # Trench (disabled by default)
     dcf.addFlag('Detector.GeometryTrench',False)
-    dcf.addFlag('Detector.GeometryCavern',          lambda prevFlags : (prevFlags.Detector.GeometryTrench ))
+    dcf.addFlag('Detector.GeometryFaserCavern',     lambda prevFlags : (prevFlags.Detector.GeometryTrench ))
 
     # dcf.addFlag('Detector.GeometryFaser',           lambda prevFlags : (prevFlags.Detector.GeometryDecayVolume or
     #                                                                     prevFlags.Detector.GeometryScintillator or
diff --git a/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py b/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py
index 5e47a915..af1ed16d 100644
--- a/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py
+++ b/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py
@@ -122,6 +122,11 @@ def _setupGeoModel():
 
     geoModelSvc.DetectorTools += [ ecalDetectorTool ]
 
+    if "FASERNU-03" in DDversion:
+        from TrenchGeoModel.TrenchGeoModelConf import TrenchDetectorTool
+        trenchDetectorTool = TrenchDetectorTool( )
+
+        geoModelSvc.DetectorTools += [ trenchDetectorTool ]
 
 
     pass
diff --git a/FaserGeometryCommon/TrenchGeoModel/src/TrenchDetectorFactory.cxx b/FaserGeometryCommon/TrenchGeoModel/src/TrenchDetectorFactory.cxx
index 668af4a0..3862cc8c 100644
--- a/FaserGeometryCommon/TrenchGeoModel/src/TrenchDetectorFactory.cxx
+++ b/FaserGeometryCommon/TrenchGeoModel/src/TrenchDetectorFactory.cxx
@@ -60,13 +60,19 @@ void TrenchDetectorFactory::create(GeoPhysVol *world)
     }
 
     std::string resolvedFile = PathResolver::find_file(gdmlFile, "XMLPATH", PathResolver::RecursiveSearch);
+
+    XMLHandlerStore::GetHandlerStore()->clear();
+
+    GDMLController controller {"TrenchGDMLController"};
+
     std::cout << "creating parser" << std::endl;
     XercesParser xercesParser;
+
     std::cout << "parsing " << resolvedFile << std::endl;
     xercesParser.ParseFileAndNavigate(resolvedFile);
     std::cout << "done parsing " << resolvedFile << std::endl;
 
-    const GeoLogVol* trenchLog  = m_controller.retrieveLogicalVolume("Trench").first;
+    const GeoLogVol* trenchLog  = controller.retrieveLogicalVolume("Trench").first;
     GeoPhysVol*      trenchPhys = new GeoPhysVol(trenchLog);
     GeoNameTag *tag = new GeoNameTag("Trench");
     world->add(tag);
diff --git a/FaserGeometryCommon/TrenchGeoModel/src/TrenchDetectorFactory.h b/FaserGeometryCommon/TrenchGeoModel/src/TrenchDetectorFactory.h
index 07dcad5c..14cdbaa1 100644
--- a/FaserGeometryCommon/TrenchGeoModel/src/TrenchDetectorFactory.h
+++ b/FaserGeometryCommon/TrenchGeoModel/src/TrenchDetectorFactory.h
@@ -49,7 +49,7 @@ class TrenchDetectorFactory : public GeoVDetectorFactory
   std::string              m_versionTag;
   std::string              m_versionNode;
 
-  GDMLController m_controller {"TrenchGDMLController"};
+//   GDMLController m_controller {"TrenchGDMLController"};
 
 };
 
diff --git a/Simulation/G4Faser/G4FaserTools/python/G4GeometryToolConfig.py b/Simulation/G4Faser/G4FaserTools/python/G4GeometryToolConfig.py
index 8e9bb2aa..4e6f5949 100644
--- a/Simulation/G4Faser/G4FaserTools/python/G4GeometryToolConfig.py
+++ b/Simulation/G4Faser/G4FaserTools/python/G4GeometryToolConfig.py
@@ -228,7 +228,7 @@ def getFASER_RegionCreatorList(ConfigFlags):
     if ConfigFlags.Detector.GeometryFaserCalo:
         regionCreatorList += [EcalPhysicsRegionToolCfg(ConfigFlags)]
     
-    if ConfigFlags.Detector.GeometryCavern:
+    if ConfigFlags.Detector.GeometryFaserCavern:
         regionCreatorList += [CavernPhysicsRegionToolCfg(ConfigFlags)]
 
     return regionCreatorList
diff --git a/graphics/VTI12/VTI12Algs/share/vti12.py b/graphics/VTI12/VTI12Algs/share/vti12.py
index 3878899d..07a3a97a 100644
--- a/graphics/VTI12/VTI12Algs/share/vti12.py
+++ b/graphics/VTI12/VTI12Algs/share/vti12.py
@@ -32,7 +32,8 @@ if not 'vp1NoSortDBReplicas' in dir(): vp1NoSortDBReplicas=False
 if not 'vp1FilterEvents' in dir(): vp1FilterEvents=""
 if not 'vp1NoGui' in dir(): vp1NoGui=False
 if not 'vp1SpacePoints' in dir(): vp1SpacePoints=False
-if not 'vp1Cavern' in dir(): vp1Cavern=False
+# if not 'vp1Cavern' in dir(): vp1Cavern=False
+vp1Cavern=True
 if not 'vp1NoAutoConf' in dir(): vp1NoAutoConf=False
 if not 'vp1Trig' in dir(): vp1Trig=False
 if not 'vp1NSW' in dir(): vp1NSW=False
diff --git a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/VTI12GeometrySystems/VP1GeoFlags.h b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/VTI12GeometrySystems/VP1GeoFlags.h
index 0ec7c0ef..8aefd8e4 100644
--- a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/VTI12GeometrySystems/VP1GeoFlags.h
+++ b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/VTI12GeometrySystems/VP1GeoFlags.h
@@ -36,6 +36,7 @@ public:
     Dipole                  = 0x00000040,
 
     Ecal                    = 0x00000080,
+    CavernInfra             = 0x00000100,
     // Pixel                   = 0x00000001, // bit 0
     // SCT                     = 0x00000002, // 1
     // TRT                     = 0x00000004, // 2
diff --git a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/GeoSysController.cxx b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/GeoSysController.cxx
index dd4c44c1..fbb27a25 100644
--- a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/GeoSysController.cxx
+++ b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/GeoSysController.cxx
@@ -162,6 +162,9 @@ GeoSysController::GeoSysController(IVP1System * sys)
   // Calorimeter
   m_d->subSysCheckBoxMap[VP1GeoFlags::Ecal] = m_d->ui.checkBox_Ecal;
 
+  // Cavern
+  m_d->subSysCheckBoxMap[VP1GeoFlags::CavernInfra] = m_d->ui.checkBox_CavernInfra;
+
   // MISCELLANEOUS
   // OTHER
   m_d->subSysCheckBoxMap[VP1GeoFlags::AllUnrecognisedVolumes] = m_d->ui.checkBox_other;
diff --git a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VP1GeometrySystem.cxx b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VP1GeometrySystem.cxx
index dfcff299..e5c0eed5 100644
--- a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VP1GeometrySystem.cxx
+++ b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VP1GeometrySystem.cxx
@@ -336,6 +336,7 @@ QWidget * VP1GeometrySystem::buildController()
     m_d->addSubSystem( VP1GeoFlags::SCT,      "SCT");
     m_d->addSubSystem( VP1GeoFlags::Dipole,   "Dipole");
     m_d->addSubSystem( VP1GeoFlags::Ecal,     "Ecal");
+    m_d->addSubSystem( VP1GeoFlags::CavernInfra, "Cavern");
 
 
 
@@ -1146,6 +1147,13 @@ void VP1GeometrySystem::Imp::createPathExtras(const VolumeHandle* volhandle, QSt
       entries.push("Ecal::Ecal");
       return;
     }
+    case VP1GeoFlags::CavernInfra:{
+      prefix = QString("Cavern::");
+      entries.push("CAVERN::CAVERN");
+      entries.push("Trench::Trench");
+      return;
+    }
+
   case VP1GeoFlags::None:
   case VP1GeoFlags::AllUnrecognisedVolumes:
   default:{
diff --git a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VolumeTreeModel.cxx b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VolumeTreeModel.cxx
index eae1d4d8..ea681cdd 100644
--- a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VolumeTreeModel.cxx
+++ b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VolumeTreeModel.cxx
@@ -31,7 +31,7 @@
 class VolumeTreeModel::Imp {
 public:
   //Static definitions of sections and which subsystems goes in which sections:
-  enum SECTION { UNKNOWN, NEUTRINO, SCINT, TRACKER, CALO, MISC };
+  enum SECTION { UNKNOWN, NEUTRINO, SCINT, TRACKER, CALO, MISC, CAVERN };
   static std::map<SECTION,QString> section2string;
   static std::map<VP1GeoFlags::SubSystemFlag,SECTION> subsysflag2section;
   static std::map<VP1GeoFlags::SubSystemFlag,QString> subsysflag2string;
@@ -108,6 +108,7 @@ VolumeTreeModel::VolumeTreeModel( QObject * parent )
     Imp::section2string[Imp::SCINT] = "Scintillators";
     Imp::section2string[Imp::TRACKER] = "Tracker";
     Imp::section2string[Imp::CALO] = "Calorimeter";
+    Imp::section2string[Imp::CAVERN] = "Cavern";
     Imp::section2string[Imp::MISC] = "Miscellaneous";
   }
   if (Imp::subsysflag2section.empty()) {
@@ -124,6 +125,8 @@ VolumeTreeModel::VolumeTreeModel( QObject * parent )
     Imp::defineSubSystem(VP1GeoFlags::Dipole,    "Dipole",    Imp::TRACKER);
     // Calorimeter
     Imp::defineSubSystem(VP1GeoFlags::Ecal,      "Ecal",      Imp::CALO);
+    // Cavern
+    Imp::defineSubSystem(VP1GeoFlags::CavernInfra, "Cavern",  Imp::CAVERN);
   }
 }
 
diff --git a/graphics/VTI12/VTI12Utils/VTI12Utils/VP1JobConfigInfo.h b/graphics/VTI12/VTI12Utils/VTI12Utils/VP1JobConfigInfo.h
index 97ae89cc..96c80ac4 100644
--- a/graphics/VTI12/VTI12Utils/VTI12Utils/VP1JobConfigInfo.h
+++ b/graphics/VTI12/VTI12Utils/VTI12Utils/VP1JobConfigInfo.h
@@ -43,6 +43,8 @@ public:
   
   static bool hasEcalGeometry();
 
+  static bool hasCavernInfraGeometry();
+
   //Top geomodel volume link (not strictly "JobConfig", but here it is):
   static const GeoPVConstLink * geoModelWorld();//might return 0
 
diff --git a/graphics/VTI12/VTI12Utils/src/VP1JobConfigInfo.cxx b/graphics/VTI12/VTI12Utils/src/VP1JobConfigInfo.cxx
index f5723561..bd325e0d 100644
--- a/graphics/VTI12/VTI12Utils/src/VP1JobConfigInfo.cxx
+++ b/graphics/VTI12/VTI12Utils/src/VP1JobConfigInfo.cxx
@@ -99,6 +99,8 @@ void VP1JobConfigInfo::Imp::ensureInit()
     VP1Msg::messageVerbose("VTI12JobConfigInfo => hasSCTGeometry = "+QString(hasSCTGeometry?"On":"Off"));
 
     VP1Msg::messageVerbose("VTI12JobConfigInfo => hasEcalGeometry = "+QString(hasEcalGeometry?"On":"Off"));
+    VP1Msg::messageVerbose("VTI12JobConfigInfo => hasCavernInfraGeometry = "+QString(hasCavernInfraGeometry?"On":"Off"));
+
   }
 
 }
@@ -114,6 +116,7 @@ bool VP1JobConfigInfo::hasPreshowerGeometry() { if (!Imp::initialised) Imp::ensu
 bool VP1JobConfigInfo::hasSCTGeometry() { if (!Imp::initialised) Imp::ensureInit(); return Imp::hasSCTGeometry; }
 
 bool VP1JobConfigInfo::hasEcalGeometry() { if (!Imp::initialised) Imp::ensureInit(); return Imp::hasEcalGeometry; }
+bool VP1JobConfigInfo::hasCavernInfraGeometry() { if (!Imp::initialised) Imp::ensureInit(); return Imp::hasCavernInfraGeometry; }
 
 //____________________________________________________________________
 bool VP1JobConfigInfo::Imp::actualInit( StoreGateSvc* detStore )
@@ -169,6 +172,7 @@ bool VP1JobConfigInfo::Imp::actualInit( StoreGateSvc* detStore )
     if ( !hasPreshowerGeometry && name=="Preshower") hasPreshowerGeometry = true;
     if ( !hasSCTGeometry && name=="SCT") hasSCTGeometry = true;
     if ( !hasEcalGeometry && name=="Ecal") hasEcalGeometry = true;
+    if ( !hasCavernInfraGeometry && name == "Trench") hasCavernInfraGeometry = true;
 
     //FIXME: Look for CavernInfra as well!!!
 
-- 
GitLab