From c4e6424dca767780ac12449448c147b32048632f Mon Sep 17 00:00:00 2001
From: FU Chengdong <fucd@ihep.ac.cn>
Date: Thu, 18 Jul 2024 09:29:05 +0000
Subject: [PATCH] Geom: add limits option

---
 .../DetCEPCv4/src/tracker/FTD_Simple_Staggered_geo.cpp   | 6 +++++-
 Detector/DetCEPCv4/src/tracker/FTD_cepc_geo.cpp          | 6 +++++-
 Detector/DetCEPCv4/src/tracker/SET_Simple_Planar_geo.cpp | 2 +-
 Detector/DetCEPCv4/src/tracker/SIT_Simple_Pixel_geo.cpp  | 2 +-
 Detector/DetCEPCv4/src/tracker/SIT_Simple_Planar_geo.cpp | 2 +-
 Detector/DetCEPCv4/src/tracker/TPC10_geo.cpp             | 9 +++++++--
 Detector/DetCEPCv4/src/tracker/VXD04_geo.cpp             | 2 +-
 .../DetCRD/src/Tracker/SiTrackerSkewRing_v01_geo.cpp     | 1 +
 .../src/Tracker/SiTrackerStaggeredLadder_v01_geo.cpp     | 2 +-
 Detector/DetCRD/src/Tracker/TPC_ModularEndcap_o1_v01.cpp | 4 ++++
 Detector/DetCRD/src/Tracker/TPC_Simple_o1_v01.cpp        | 4 ++++
 11 files changed, 31 insertions(+), 9 deletions(-)

diff --git a/Detector/DetCEPCv4/src/tracker/FTD_Simple_Staggered_geo.cpp b/Detector/DetCEPCv4/src/tracker/FTD_Simple_Staggered_geo.cpp
index b1cf2fe6..186668df 100644
--- a/Detector/DetCEPCv4/src/tracker/FTD_Simple_Staggered_geo.cpp
+++ b/Detector/DetCEPCv4/src/tracker/FTD_Simple_Staggered_geo.cpp
@@ -1022,7 +1022,11 @@ static Ref_t create_element(Detector& theDetector, xml_h e, SensitiveDetector se
     petalSupport(theDetector, ftd, valuesDict, FTDPetalAirLogical ) ; 
 
     VolVec volV = petalSensor( theDetector, ftd, sens, valuesDict, FTDPetalAirLogical );
-
+    if (x_det.hasAttr(_U(limits))) {
+      for (auto vol : volV) {
+        vol.first.setLimitSet(theDetector, x_det.limitsStr());
+      }
+    }
 
     //---- meassurement surface vectors 
 
diff --git a/Detector/DetCEPCv4/src/tracker/FTD_cepc_geo.cpp b/Detector/DetCEPCv4/src/tracker/FTD_cepc_geo.cpp
index cdc5294c..18e822a7 100644
--- a/Detector/DetCEPCv4/src/tracker/FTD_cepc_geo.cpp
+++ b/Detector/DetCEPCv4/src/tracker/FTD_cepc_geo.cpp
@@ -1024,7 +1024,11 @@ static Ref_t create_element(Detector& theDetector, xml_h e, SensitiveDetector se
     petalSupport(theDetector, ftd, valuesDict, FTDPetalAirLogical ) ; 
 
     VolVec volV = petalSensor( theDetector, ftd, sens, valuesDict, FTDPetalAirLogical );
-
+    if (x_det.hasAttr(_U(limits))) {
+      for (auto vol : volV) {
+	vol.first.setLimitSet(theDetector, x_det.limitsStr());
+      }
+    }
 
     //---- meassurement surface vectors 
 
diff --git a/Detector/DetCEPCv4/src/tracker/SET_Simple_Planar_geo.cpp b/Detector/DetCEPCv4/src/tracker/SET_Simple_Planar_geo.cpp
index 154f6653..151a54f7 100644
--- a/Detector/DetCEPCv4/src/tracker/SET_Simple_Planar_geo.cpp
+++ b/Detector/DetCEPCv4/src/tracker/SET_Simple_Planar_geo.cpp
@@ -301,7 +301,7 @@ static dd4hep::Ref_t create_element(dd4hep::Detector& theDetector, xml_h e, dd4h
     dd4hep::Volume setSenLogical( dd4hep:: _toString( layer_id,"SET_SenLogical_%02d"), setSenSolid,sensitiveMat ) ; 
     
     setSenLogical.setSensitiveDetector(sens);
-    
+    if (x_det.hasAttr(_U(limits))) setSenLogical.setLimitSet(theDetector, x_det.limitsStr());
     
     
     //====== create the meassurement surface ===================
diff --git a/Detector/DetCEPCv4/src/tracker/SIT_Simple_Pixel_geo.cpp b/Detector/DetCEPCv4/src/tracker/SIT_Simple_Pixel_geo.cpp
index 347b391b..7199f4c4 100644
--- a/Detector/DetCEPCv4/src/tracker/SIT_Simple_Pixel_geo.cpp
+++ b/Detector/DetCEPCv4/src/tracker/SIT_Simple_Pixel_geo.cpp
@@ -315,7 +315,7 @@ static dd4hep::Ref_t create_element(dd4hep::Detector& theDetector, xml_h e, dd4h
     dd4hep::Volume sitSenLogical( name + dd4hep::_toString( layer_id,"_SenLogical_%02d"), sitSenSolid,sensitiveMat ) ; 
     
     sitSenLogical.setSensitiveDetector(sens);
-
+    if (x_det.hasAttr(_U(limits))) sitSenLogical.setLimitSet(theDetector, x_det.limitsStr());
 
     //====== create the meassurement surface ===================
     dd4hep::rec::Vector3D u,v,n ;
diff --git a/Detector/DetCEPCv4/src/tracker/SIT_Simple_Planar_geo.cpp b/Detector/DetCEPCv4/src/tracker/SIT_Simple_Planar_geo.cpp
index 94045185..f2861eaf 100644
--- a/Detector/DetCEPCv4/src/tracker/SIT_Simple_Planar_geo.cpp
+++ b/Detector/DetCEPCv4/src/tracker/SIT_Simple_Planar_geo.cpp
@@ -311,7 +311,7 @@ static dd4hep::Ref_t create_element(dd4hep::Detector& theDetector, xml_h e, dd4h
     dd4hep::Volume sitSenLogical( dd4hep::_toString( layer_id,"SIT_SenLogical_%02d"), sitSenSolid,sensitiveMat ) ; 
     
     sitSenLogical.setSensitiveDetector(sens);
-
+    if (x_det.hasAttr(_U(limits))) sitSenLogical.setLimitSet(theDetector, x_det.limitsStr());
 
     //====== create the meassurement surface ===================
     dd4hep::rec::Vector3D u,v,n ;
diff --git a/Detector/DetCEPCv4/src/tracker/TPC10_geo.cpp b/Detector/DetCEPCv4/src/tracker/TPC10_geo.cpp
index 4e5ee8a9..4d7c6b03 100644
--- a/Detector/DetCEPCv4/src/tracker/TPC10_geo.cpp
+++ b/Detector/DetCEPCv4/src/tracker/TPC10_geo.cpp
@@ -482,7 +482,10 @@ Material endplate_MaterialMix = theDetector.material( "TPC_endplate_mix" ) ;
 
     lowerlayerLog.setSensitiveDetector(sens);
     upperlayerLog.setSensitiveDetector(sens);
-
+    if (x_det.hasAttr(_U(limits))) {
+      lowerlayerLog.setLimitSet(theDetector, x_det.limitsStr());
+      upperlayerLog.setLimitSet(theDetector, x_det.limitsStr());
+    }
 #else
     // create just one volume per pad ring
     
@@ -512,7 +515,9 @@ Material endplate_MaterialMix = theDetector.material( "TPC_endplate_mix" ) ;
     layerDEbwd.setPlacement( pv ) ;
 
     layerLog.setSensitiveDetector(sens);
-
+    if (x_det.hasAttr(_U(limits))) {
+      layerLog.setLimitSet(theDetector, x_det.limitsStr());
+    }
 #endif
   }
 
diff --git a/Detector/DetCEPCv4/src/tracker/VXD04_geo.cpp b/Detector/DetCEPCv4/src/tracker/VXD04_geo.cpp
index 929822dd..1b9c30b7 100644
--- a/Detector/DetCEPCv4/src/tracker/VXD04_geo.cpp
+++ b/Detector/DetCEPCv4/src/tracker/VXD04_geo.cpp
@@ -1077,7 +1077,7 @@ static Ref_t create_element(Detector& theDetector, xml_h e, SensitiveDetector se
     vxd.setVisAttributes(theDetector,  "BlueVis" , SiActiveLayerLogical ) ;
 
     SiActiveLayerLogical.setSensitiveDetector(sens);
-   
+    if (x_det.hasAttr(_U(limits))) SiActiveLayerLogical.setLimitSet(theDetector, x_det.limitsStr());
 
     //====== create the meassurement surface ===================
     Vector3D u( 1. , 0. , 0. ) ;
diff --git a/Detector/DetCRD/src/Tracker/SiTrackerSkewRing_v01_geo.cpp b/Detector/DetCRD/src/Tracker/SiTrackerSkewRing_v01_geo.cpp
index 2cbd8bce..a88fa756 100644
--- a/Detector/DetCRD/src/Tracker/SiTrackerSkewRing_v01_geo.cpp
+++ b/Detector/DetCRD/src/Tracker/SiTrackerSkewRing_v01_geo.cpp
@@ -149,6 +149,7 @@ static dd4hep::Ref_t create_detector(Detector& description, xml_h e, SensitiveDe
         tracker.check(sensor_id > 2," fromCompact: "+c_name+" Max of 2 modules allowed!");
         pv.addPhysVolID("sensor", sensor_id);
         c_vol.setSensitiveDetector(sens);
+	if (x_det.hasAttr(_U(limits))) c_vol.setLimitSet(description, x_det.limitsStr());
 	sensitives.push_back(pv);
 
 	dd4hep::rec::Vector3D u(-1., 0.,  0.);
diff --git a/Detector/DetCRD/src/Tracker/SiTrackerStaggeredLadder_v01_geo.cpp b/Detector/DetCRD/src/Tracker/SiTrackerStaggeredLadder_v01_geo.cpp
index b47bfc93..b8245d66 100644
--- a/Detector/DetCRD/src/Tracker/SiTrackerStaggeredLadder_v01_geo.cpp
+++ b/Detector/DetCRD/src/Tracker/SiTrackerStaggeredLadder_v01_geo.cpp
@@ -266,7 +266,7 @@ static dd4hep::Ref_t create_element(dd4hep::Detector& theDetector, xml_h e, dd4h
   Box SensorSolid(sensor_thickness / 2.0, sensor_active_width / 2.0, sensor_active_len / 2.0);
   Volume SensorLogical(name + dd4hep::_toString( layer_id, "_SensorLogical_%02d"), SensorSolid, sensor_mat);
   SensorLogical.setSensitiveDetector(sens);
-  //vxd.setVisAttributes(theDetector, deadsensVis, SensorDeadLogical);
+  if (x_det.hasAttr(_U(limits))) SensorLogical.setLimitSet(theDetector, x_det.limitsStr());
   SensorLogical.setVisAttributes(theDetector.visAttributes(sensVis));
 
   //create dead sensor logical volume
diff --git a/Detector/DetCRD/src/Tracker/TPC_ModularEndcap_o1_v01.cpp b/Detector/DetCRD/src/Tracker/TPC_ModularEndcap_o1_v01.cpp
index d6fc4283..edd4bddb 100644
--- a/Detector/DetCRD/src/Tracker/TPC_ModularEndcap_o1_v01.cpp
+++ b/Detector/DetCRD/src/Tracker/TPC_ModularEndcap_o1_v01.cpp
@@ -307,6 +307,10 @@ static Ref_t create_element(Detector& theDetector, xml_h e, SensitiveDetector se
 
                 lowerlayerLog.setSensitiveDetector(sens);
                 upperlayerLog.setSensitiveDetector(sens);
+		if (x_det.hasAttr(_U(limits))) {
+		  lowerlayerLog.setLimitSet(theDetector, x_det.limitsStr());
+		  upperlayerLog.setLimitSet(theDetector, x_det.limitsStr());
+		}
             }
 
         }
diff --git a/Detector/DetCRD/src/Tracker/TPC_Simple_o1_v01.cpp b/Detector/DetCRD/src/Tracker/TPC_Simple_o1_v01.cpp
index 4a9b7619..a137e03d 100644
--- a/Detector/DetCRD/src/Tracker/TPC_Simple_o1_v01.cpp
+++ b/Detector/DetCRD/src/Tracker/TPC_Simple_o1_v01.cpp
@@ -308,6 +308,10 @@ static Ref_t create_element(Detector& theDetector, xml_h e, SensitiveDetector se
 
                 lowerlayerLog.setSensitiveDetector(sens);
                 upperlayerLog.setSensitiveDetector(sens);
+		if (x_det.hasAttr(_U(limits))) {
+		  lowerlayerLog.setLimitSet(theDetector, x_det.limitsStr());
+		  upperlayerLog.setLimitSet(theDetector, x_det.limitsStr());
+		}
             }
 
         }
-- 
GitLab