From cc2070a3661d7246c5ed7dfb3ce49682c55aa282 Mon Sep 17 00:00:00 2001
From: Chengdong Fu <fucd@ihep.ac.cn>
Date: Fri, 18 Feb 2022 10:29:42 +0800
Subject: [PATCH] add surface for sensitive

---
 .../src/Tracker/SiTrackerSkewRing_v01_geo.cpp | 37 +++++++++++++++----
 1 file changed, 30 insertions(+), 7 deletions(-)

diff --git a/Detector/DetCRD/src/Tracker/SiTrackerSkewRing_v01_geo.cpp b/Detector/DetCRD/src/Tracker/SiTrackerSkewRing_v01_geo.cpp
index 4f768ac8..2b16111e 100644
--- a/Detector/DetCRD/src/Tracker/SiTrackerSkewRing_v01_geo.cpp
+++ b/Detector/DetCRD/src/Tracker/SiTrackerSkewRing_v01_geo.cpp
@@ -69,6 +69,12 @@ static dd4hep::Ref_t create_detector(Detector& description, xml_h e, SensitiveDe
   sens.setType("tracker");
   std::cout << " ** building SiTrackerEndcapRing_v01 ..." << std::endl ;
 
+  dd4hep::xml::Component recPar = x_det.child(_Unicode(reconstruction));
+  const double strip_width  = recPar.attr< double >(_Unicode(strip_width));
+  const double strip_length = recPar.attr< double >(_Unicode(strip_length));
+  const double strip_pitch  = recPar.attr< double >(_Unicode(strip_pitch));
+  const double strip_angle  = recPar.attr< double >(_Unicode(strip_angle));
+
   dd4hep::rec::ZDiskPetalsData*  zDiskPetalsData = new dd4hep::rec::ZDiskPetalsData;
 
   PlacedVolume pv;
@@ -120,6 +126,7 @@ static dd4hep::Ref_t create_detector(Detector& description, xml_h e, SensitiveDe
     moduleVol.setVisAttributes(description.visAttributes(x_layer.visStr()));
     
     Placements sensitives;
+    vector<dd4hep::rec::VolPlane> planes;
     int    sensor_id = 1;
     int    c_id      = 0;
     double c_pos     = -half_thickness;
@@ -137,7 +144,27 @@ static dd4hep::Ref_t create_detector(Detector& description, xml_h e, SensitiveDe
         pv.addPhysVolID("sensor", sensor_id);
         c_vol.setSensitiveDetector(sens);
 	sensitives.push_back(pv);
-        ++sensor_id;
+
+	dd4hep::rec::Vector3D u(-1., 0.,  0.);
+	dd4hep::rec::Vector3D v( 0., 1.,  0.);
+	dd4hep::rec::Vector3D n( 0., 0., -1.);
+	dd4hep::rec::SurfaceType surfType(dd4hep::rec::SurfaceType::Sensitive);
+	double front_thickness = c_thickness/2;
+	double back_thickness  = (sensor_id==1) ? c_thickness/2+support_thickness : c_thickness/2;
+	if(!is_pixel){
+	  surfType.setProperty(dd4hep::rec::SurfaceType::Measurement1D, true) ;
+	  if(sensor_id==1){
+	    u.fill(-cos(strip_angle), sin(strip_angle), 0.);
+	    v.fill( sin(strip_angle), cos(strip_angle), 0.);
+	  }
+	  else{
+	    u.fill(-cos(strip_angle), -sin(strip_angle), 0.);
+	    v.fill(-sin(strip_angle),  cos(strip_angle), 0.);
+	  }
+	}
+	dd4hep::rec::VolPlane surf(c_vol, surfType , front_thickness, back_thickness, u,v,n);
+	planes.push_back(surf);
+	++sensor_id;
       }
       c_pos += c_thickness;
     }
@@ -160,6 +187,7 @@ static dd4hep::Ref_t create_detector(Detector& description, xml_h e, SensitiveDe
 	PlacedVolume sens_pv = sensitives[ic];
 	DetElement comp_elt(module, sens_pv.volume().name(), module_id);
 	comp_elt.setPlacement(sens_pv);
+	dd4hep::rec::volSurfaceList(comp_elt)->push_back(planes[ic]);
       }
 
       if(reflect){
@@ -172,6 +200,7 @@ static dd4hep::Ref_t create_detector(Detector& description, xml_h e, SensitiveDe
 	  PlacedVolume sens_pv = sensitives[ic];
 	  DetElement comp_elt(r_module, sens_pv.volume().name(), module_id);
 	  comp_elt.setPlacement(sens_pv);
+	  dd4hep::rec::volSurfaceList(comp_elt)->push_back(planes[ic]);
 	}
       }
       zshift_support = -zshift_support;
@@ -203,12 +232,6 @@ static dd4hep::Ref_t create_detector(Detector& description, xml_h e, SensitiveDe
     zDiskPetalsData->layers.push_back(thisLayer);
   }
 
-  dd4hep::xml::Component recPar = x_det.child(_Unicode(reconstruction));
-  const double strip_width  = recPar.attr< double >(_Unicode(strip_width));
-  const double strip_length = recPar.attr< double >(_Unicode(strip_length));
-  const double strip_pitch  = recPar.attr< double >(_Unicode(strip_pitch));
-  const double strip_angle  = recPar.attr< double >(_Unicode(strip_angle));
-
   zDiskPetalsData->widthStrip  = strip_width;
   zDiskPetalsData->lengthStrip = strip_length;
   zDiskPetalsData->pitchStrip  = strip_pitch;
-- 
GitLab