From 970ddf223e23e43bc559f420e6f6e16a1d073c11 Mon Sep 17 00:00:00 2001
From: Chengdong Fu <fucd@ihep.ac.cn>
Date: Thu, 27 Mar 2025 16:05:45 +0800
Subject: [PATCH 1/4] gap between sensors
---
.../compact/CRD_common_v02/ITK_EndCap_v01.xml | 4 +-
.../DetCRD/src/Tracker/ITK_EndCap_v01.cpp | 138 +++++++++++-------
.../src/ild/ftd/CEPCITKEndcapKalDetector.cc | 37 +++--
3 files changed, 111 insertions(+), 68 deletions(-)
diff --git a/Detector/DetCRD/compact/CRD_common_v02/ITK_EndCap_v01.xml b/Detector/DetCRD/compact/CRD_common_v02/ITK_EndCap_v01.xml
index 9a57883b..c5b06909 100644
--- a/Detector/DetCRD/compact/CRD_common_v02/ITK_EndCap_v01.xml
+++ b/Detector/DetCRD/compact/CRD_common_v02/ITK_EndCap_v01.xml
@@ -28,7 +28,7 @@
<slice name="Carbon_fiber_back" material="CF_ITK" thickness="150*um" vis="GrayVis"/>
</support>
- <sensor>
+ <sensor size="20*mm" side="0.3*mm" dead="2.0*mm">
<slice name="GlueF" material="CER_ITK" thickness="200*um" vis="SeeThrough"/>
<slice name="Sensor" material="G4_Si" thickness="150*um" sensitive="true" vis="OrangeVis"/>
<slice name="GlueB" material="CER_ITK" thickness="100*um" vis="SeeThrough"/>
@@ -64,7 +64,7 @@
<readouts>
<readout name="ITKEndcapCollection">
- <id>system:5,side:-2,layer:9,module:8,sensor:8</id>
+ <id>system:5,side:-2,layer:9,module:8,ring:3,sensor:5</id>
</readout>
</readouts>
diff --git a/Detector/DetCRD/src/Tracker/ITK_EndCap_v01.cpp b/Detector/DetCRD/src/Tracker/ITK_EndCap_v01.cpp
index 67bff078..a8f9e8ed 100644
--- a/Detector/DetCRD/src/Tracker/ITK_EndCap_v01.cpp
+++ b/Detector/DetCRD/src/Tracker/ITK_EndCap_v01.cpp
@@ -38,6 +38,11 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
const xml::Component supports = x_det.child("support");
const xml::Component sensor = x_det.child("sensor");
+ const double sensor_size = sensor.attr<double>("size");
+ const double sensor_side = sensor.attr<double>("side");
+ const double sensor_dead = sensor.attr<double>("dead");
+ const double sensor_width = sensor_size - sensor_dead - sensor_side;
+ const double sensor_length = sensor_size - sensor_side * 2;
const xml::Component layers_xml = x_det.child("layers");
for (xml_coll_t layer(layers_xml, "layer"); layer; ++layer)
@@ -115,6 +120,11 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
const auto nmodule = ring.attr<double>("nmodule");
const auto vis = ring.attr<std::string>("vis");
+ int nrow = std::floor(module_dr/sensor_size);
+ int ncolumn = std::floor(module_dphi/sensor_size);
+ double gap_dr = (module_dr - sensor_size*nrow) / (nrow - 1);
+ double gap_dphi = (module_dphi - sensor_size*ncolumn) / (ncolumn - 1);
+
std::string ring_vol_name = layer_name + "_ring" + ring_id;
Tube ring_tube(ring_inner_r, ring_outer_r, SiliconThickness / 2.0, 0.0, 2 * M_PI);
Volume ringPosF_vol(ring_vol_name + "PF", ring_tube, air);
@@ -131,58 +141,80 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
ringNegR_vol.setVisAttributes(description.visAttributes(vis));
// populate sensor
- Box sensor_box(module_dr / 2.0, module_dphi / 2.0, SiliconThickness / 2.0);
- std::string sensor_name = ring_vol_name + "_petal";
- Volume sensor_vol(sensor_name, sensor_box, air);
- DetElement sensor_det(sensor_name, det_id);
- sensor_vol = sensor_vol.setVisAttributes(description.visAttributes(vis));
+ Box module_box(module_dr / 2.0, module_dphi / 2.0, SiliconThickness / 2.0);
+ std::string module_name = ring_vol_name + "_petal";
+ Volume module_vol(module_name, module_box, air);
+ DetElement module_det(module_name, det_id);
+ module_vol = module_vol.setVisAttributes(description.visAttributes(vis));
double sensitive_thickness = 0;
double glue_thickness = 0;
double service_thickness = 0;
//const xml::Component sensor = x_det.child("sensor");
- double sensor_z = -SiliconThickness / 2.0;
+ double module_z = -SiliconThickness / 2.0;
for (xml_coll_t sensor_layer(sensor, "slice"); sensor_layer; ++sensor_layer)
{
- const auto sensor_layer_name = sensor_layer.attr<std::string>("name");
- const auto sensor_layer_material = sensor_layer.attr<std::string>("material");
- const auto sensor_layer_thickness = sensor_layer.attr<double>("thickness");
- const auto sensor_layer_vis = sensor_layer.attr<std::string>("vis");
+ const auto module_layer_name = sensor_layer.attr<std::string>("name");
+ const auto module_layer_material = sensor_layer.attr<std::string>("material");
+ const auto module_layer_thickness = sensor_layer.attr<double>("thickness");
+ const auto module_layer_vis = sensor_layer.attr<std::string>("vis");
auto is_sensitive = sensor_layer.hasAttr(_U(sensitive));
- std::string sensor_layer_vol_name = sensor_name + "_" + sensor_layer_name;
- Box sensor_layer_box(module_dr / 2.0, module_dphi / 2.0, sensor_layer_thickness / 2.0);
- Volume sensor_layer_vol(sensor_layer_vol_name, sensor_layer_box, description.material(sensor_layer_material));
- DetElement sensor_layer_det(sensor_layer_vol_name, det_id);
- sensor_layer_vol = sensor_layer_vol.setVisAttributes(description.visAttributes(sensor_layer_vis));
+ std::string module_layer_vol_name = module_name + "_" + module_layer_name;
+ Box module_layer_box(module_dr / 2.0, module_dphi / 2.0, module_layer_thickness / 2.0);
+ Volume module_layer_vol(module_layer_vol_name, module_layer_box, description.material(module_layer_material));
+ DetElement module_layer_det(module_layer_vol_name, det_id);
+ module_layer_vol = module_layer_vol.setVisAttributes(description.visAttributes(module_layer_vis));
rec::SurfaceType surf_type;
+ rec::Vector3D u(0.,-1., 0.);
+ rec::Vector3D v(1., 0., 0.);
+ rec::Vector3D n(0., 0., 1.);
if (is_sensitive)
{
- sensor_layer_vol = sensor_layer_vol.setSensitiveDetector(sens);
- surf_type = rec::SurfaceType(rec::SurfaceType::Sensitive,rec::SurfaceType::Plane);
- sensitive_thickness += sensor_layer_thickness;
+ surf_type = rec::SurfaceType(rec::SurfaceType::Sensitive,rec::SurfaceType::Plane);
+
+ Box sensor_box(sensor_length / 2.0, sensor_width / 2.0, module_layer_thickness / 2.0);
+ Volume sensor_vol(module_layer_vol_name + "_sensor", sensor_box, description.material(module_layer_material));
+ sensor_vol = sensor_vol.setVisAttributes(description.visAttributes(module_layer_vis));
+ sensor_vol = sensor_vol.setSensitiveDetector(sens);
+ for (int irow = 0; irow < nrow; irow++) {
+ for (int icolumn = 0; icolumn < ncolumn; icolumn++) {
+ int sensor_id = icolumn*nrow + irow;
+ double xpos = -module_dr/2.0 + (irow+0.5)*sensor_size + (irow-1)*gap_dr;
+ double ypos = -module_dphi/2.0 + sensor_dead + (icolumn+0.5)*sensor_width + icolumn*(gap_dphi+sensor_side*2);
+ DetElement sensor_det(module_layer_det, module_layer_vol_name + "_sensor" + std::to_string(sensor_id), det_id);
+ auto pv = module_layer_vol.placeVolume(sensor_vol, Position(xpos, ypos, 0));
+ pv.addPhysVolID("sensor", sensor_id);
+ sensor_det.setPlacement(pv);
+
+ rec::VolPlane surf(sensor_vol, surf_type, module_layer_thickness / 2.0, module_layer_thickness / 2.0, u, v, n);
+ rec::volSurfaceList(sensor_det)->push_back(surf);
+ }
+ }
+
+ sensitive_thickness += module_layer_thickness;
}
else
{
surf_type = rec::SurfaceType(rec::SurfaceType::Helper,rec::SurfaceType::Plane);
- if (sensitive_thickness==0) glue_thickness += sensor_layer_thickness;
- else service_thickness += sensor_layer_thickness;
+ rec::VolPlane surf(module_layer_vol, surf_type, module_layer_thickness / 2.0, module_layer_thickness / 2.0, u, v, n);
+ rec::volSurfaceList(module_layer_det)->push_back(surf);
+
+ if (sensitive_thickness==0) glue_thickness += module_layer_thickness;
+ else service_thickness += module_layer_thickness;
}
- sensor_layer_det.setPlacement(
- sensor_vol.placeVolume(sensor_layer_vol, Position(0, 0, sensor_z + sensor_layer_thickness / 2.0)));
- sensor_z += sensor_layer_thickness;
+ module_layer_det.setPlacement(
+ module_vol.placeVolume(module_layer_vol, Position(0, 0, module_z + module_layer_thickness / 2.0)));
+ module_z += module_layer_thickness;
- sensor_det.add(sensor_layer_det);
- rec::Vector3D u(0.,-1., 0.);
- rec::Vector3D v(1., 0., 0.);
- rec::Vector3D n(0., 0., 1.);
- rec::VolPlane surf(sensor_layer_vol, surf_type, sensor_layer_thickness / 2.0,
- sensor_layer_thickness / 2.0, u, v,
- n);
- rec::volSurfaceList(sensor_layer_det)->push_back(surf);
+ module_det.add(module_layer_det);
+ //rec::VolPlane surf(module_layer_vol, surf_type, module_layer_thickness / 2.0,
+ // module_layer_thickness / 2.0, u, v,
+ // n);
+ //rec::volSurfaceList(module_layer_det)->push_back(surf);
}
PlacedVolume pv;
- // place all the sensors into ring
+ // place all the modules into ring
double r_offset = ring_inner_r + module_dr / 2.0;
for (int i = 0; i < nmodule; ++i)
{
@@ -191,52 +223,52 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
double rotated_y = r_offset * sin(angle);
auto transform = Transform3D(RotationZ(angle), Position(rotated_x, rotated_y, 0));
- DetElement negative_even_sensor_det = i > 0 ? sensor_det.clone(ring_vol_name + "_petalN" + std::to_string(2 * i)) : sensor_det;
- pv = ringNegF_vol.placeVolume(sensor_vol, transform).addPhysVolID("module", 2 * i);
- negative_even_sensor_det.setPlacement(pv);
- ringNegF_det.add(negative_even_sensor_det);
+ DetElement negative_even_module_det = i > 0 ? module_det.clone(ring_vol_name + "_petalN" + std::to_string(2 * i)) : module_det;
+ pv = ringNegF_vol.placeVolume(module_vol, transform).addPhysVolID("module", 2 * i);
+ negative_even_module_det.setPlacement(pv);
+ ringNegF_det.add(negative_even_module_det);
transform = Transform3D(RotationZYX(-angle, 0, M_PI), Position(rotated_x, rotated_y, 0));
- DetElement positive_even_sensor_det = sensor_det.clone(ring_vol_name + "_petalP" + std::to_string(2 * i));
- pv = ringPosF_vol.placeVolume(sensor_vol, transform).addPhysVolID("module", 2 * i);
- positive_even_sensor_det.setPlacement(pv);
- ringPosF_det.add(positive_even_sensor_det);
+ DetElement positive_even_module_det = module_det.clone(ring_vol_name + "_petalP" + std::to_string(2 * i));
+ pv = ringPosF_vol.placeVolume(module_vol, transform).addPhysVolID("module", 2 * i);
+ positive_even_module_det.setPlacement(pv);
+ ringPosF_det.add(positive_even_module_det);
angle += M_PI / nmodule;
rotated_x = r_offset * cos(angle);
rotated_y = r_offset * sin(angle);
transform = Transform3D(RotationZ(angle), Position(rotated_x, rotated_y, 0));
- DetElement positive_odd_sensor_det = sensor_det.clone(ring_vol_name + "_petalP" + std::to_string(2 * i));
- pv = ringPosR_vol.placeVolume(sensor_vol, transform).addPhysVolID("module", 2 * i + 1);
- positive_odd_sensor_det.setPlacement(pv);
- ringPosR_det.add(positive_odd_sensor_det);
+ DetElement positive_odd_module_det = module_det.clone(ring_vol_name + "_petalP" + std::to_string(2 * i));
+ pv = ringPosR_vol.placeVolume(module_vol, transform).addPhysVolID("module", 2 * i + 1);
+ positive_odd_module_det.setPlacement(pv);
+ ringPosR_det.add(positive_odd_module_det);
transform = Transform3D(RotationZYX(-angle, 0, M_PI), Position(rotated_x, rotated_y, 0));
- DetElement negative_odd_sensor_det = sensor_det.clone(ring_vol_name + "_petalN" + std::to_string(2 * i));
- pv = ringNegR_vol.placeVolume(sensor_vol, transform).addPhysVolID("module", 2 * i + 1);
- negative_odd_sensor_det.setPlacement(pv);
- ringNegR_det.add(negative_odd_sensor_det);
+ DetElement negative_odd_module_det = module_det.clone(ring_vol_name + "_petalN" + std::to_string(2 * i));
+ pv = ringNegR_vol.placeVolume(module_vol, transform).addPhysVolID("module", 2 * i + 1);
+ negative_odd_module_det.setPlacement(pv);
+ ringNegR_det.add(negative_odd_module_det);
}
// place ring into layer
pv = layer_vol.placeVolume(ringPosR_vol, Position(0, 0, +(SupportThickness + SiliconThickness) / 2.0));
- pv = pv.addPhysVolID("sensor", std::stoi(ring_id));
+ pv = pv.addPhysVolID("ring", std::stoi(ring_id));
ringPosR_det.setPlacement(pv);
layer_det.add(ringPosR_det);
pv = layer_vol.placeVolume(ringPosF_vol, Position(0, 0, -(SupportThickness + SiliconThickness) / 2.0));
- pv = pv.addPhysVolID("sensor", std::stoi(ring_id));
+ pv = pv.addPhysVolID("ring", std::stoi(ring_id));
ringPosF_det.setPlacement(pv);
layer_det.add(ringPosF_det);
pv = layerNeg_vol.placeVolume(ringNegR_vol, Position(0, 0, -(SupportThickness + SiliconThickness) / 2.0));
- pv = pv.addPhysVolID("sensor", std::stoi(ring_id));
+ pv = pv.addPhysVolID("ring", std::stoi(ring_id));
ringNegR_det.setPlacement(pv);
layerNeg_det.add(ringNegR_det);
pv = layerNeg_vol.placeVolume(ringNegF_vol, Position(0, 0, +(SupportThickness + SiliconThickness) / 2.0));
- pv = pv.addPhysVolID("sensor", std::stoi(ring_id));
+ pv = pv.addPhysVolID("ring", std::stoi(ring_id));
ringNegF_det.setPlacement(pv);
layerNeg_det.add(ringNegF_det);
// rotate and reflect ring
@@ -262,7 +294,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
*/
dd4hep::rec::MultiRingsZDiskData::Ring ringData;
ringData.petalNumber = 2 * nmodule;
- ringData.sensorsPerPetal = 1;
+ ringData.sensorsPerPetal = nrow*ncolumn;
ringData.phi0 = phi0;
ringData.phiOffsetOdd = 2 * M_PI / nmodule;
ringData.distance = ring_inner_r;
diff --git a/Utilities/KalDet/src/ild/ftd/CEPCITKEndcapKalDetector.cc b/Utilities/KalDet/src/ild/ftd/CEPCITKEndcapKalDetector.cc
index 22d54a1f..10ef634e 100644
--- a/Utilities/KalDet/src/ild/ftd/CEPCITKEndcapKalDetector.cc
+++ b/Utilities/KalDet/src/ild/ftd/CEPCITKEndcapKalDetector.cc
@@ -159,17 +159,25 @@ void CEPCITKEndcapKalDetector::create_segmented_disk_layers(int idisk, int iring
int zsign = zpos > 0 ? 1 : -1;
int start_index = even_petals ? 0 : 1;
+ int nsensor = _disksData.layers[idisk].rings[iring].sensorsPerPetal;
+ std::vector<int> module_ids;
dd4hep::DDSegmentation::BitField64 encoder("system:5,side:-2,layer:9,module:8,sensor:8");
encoder.reset();
encoder[CEPCConf::DetCellID::system] = CEPCConf::DetID::ITKEndcap;
encoder[CEPCConf::DetCellID::side] = zsign;
encoder[CEPCConf::DetCellID::layer] = idisk;
- encoder[CEPCConf::DetCellID::sensor] = iring;
-
- std::vector<int> module_ids;
for (int i = 0; i < nsegments; i++) {
encoder[CEPCConf::DetCellID::module] = even_petals ? 2*i : 2*i+1;
- module_ids.push_back(encoder.lowWord());
+ if (nsensor == 1) {
+ encoder[CEPCConf::DetCellID::sensor] = iring;
+ module_ids.push_back(encoder.lowWord());
+ }
+ else {
+ for (int isensor = 0; isensor < nsensor; isensor++) {
+ encoder[CEPCConf::DetCellID::sensor] = iring + (isensor<<3);
+ module_ids.push_back(encoder.lowWord());
+ }
+ }
}
// create segmented disk
@@ -241,6 +249,7 @@ void CEPCITKEndcapKalDetector::setupGearGeom(const gear::GearMgr& gearMgr) {
std::vector<double> tGlues = params.getDoubleVals("ThicknessGlues");
std::vector<double> tServices = params.getDoubleVals("ThicknessServices");
std::vector<std::string> petalParNames = params.getStringVals("PetalNumberNames");
+ std::vector<std::string> petalNSenParNames = params.getStringVals("PetalNSensorNames");
std::vector<std::string> phi0ParNames = params.getStringVals("PetalPhi0Names");
std::vector<std::string> distanceParNames = params.getStringVals("PetalDistanceNames");
std::vector<std::string> widthInnerParNames = params.getStringVals("PetalInnerWidthNames");
@@ -261,7 +270,8 @@ void CEPCITKEndcapKalDetector::setupGearGeom(const gear::GearMgr& gearMgr) {
//std::string widthInnerParName = widthInnerParNames[idisk];
//std::string widthOuterParName = widthOuterParNames[idisk];
//std::string lengthParName = lengthParNames[idisk];
- std::vector<int> petals = params.getIntVals(petalParNames[idisk]);
+ std::vector<int> petals = params.getIntVals(petalParNames[idisk]);
+ std::vector<int> nsensors = params.getIntVals(petalNSenParNames[idisk]);
std::vector<double> phi0s = params.getDoubleVals(phi0ParNames[idisk]);
std::vector<double> distances = params.getDoubleVals(distanceParNames[idisk]);
std::vector<double> widthInners = params.getDoubleVals(widthInnerParNames[idisk]);
@@ -270,15 +280,16 @@ void CEPCITKEndcapKalDetector::setupGearGeom(const gear::GearMgr& gearMgr) {
int nrings = petals.size();
for (int iring = 0; iring < nrings; iring++) {
dd4hep::rec::MultiRingsZDiskData::Ring ring;
- ring.petalNumber = petals[iring];
- ring.phi0 = phi0s[iring];
- ring.distance = distances[iring];
- ring.widthInner = widthInners[iring];
- ring.widthOuter = widthOuters[iring];
- ring.length = lengths[iring];
+ ring.petalNumber = petals[iring];
+ ring.sensorsPerPetal = nsensors[iring];
+ ring.phi0 = phi0s[iring];
+ ring.distance = distances[iring];
+ ring.widthInner = widthInners[iring];
+ ring.widthOuter = widthOuters[iring];
+ ring.length = lengths[iring];
ring.thicknessSensitive = tSensitives[idisk];
- ring.thicknessGlue = tGlues[idisk];
- ring.thicknessService = tServices[idisk];
+ ring.thicknessGlue = tGlues[idisk];
+ ring.thicknessService = tServices[idisk];
disk.rings.push_back(ring);
}
_disksData.layers.push_back(disk);
--
GitLab
From d66d0cbae0eea127c690ac10c673de3bacf42bfc Mon Sep 17 00:00:00 2001
From: Chengdong Fu <fucd@ihep.ac.cn>
Date: Thu, 27 Mar 2025 16:06:59 +0800
Subject: [PATCH 2/4] change position of sensor
---
.../DetCRD/src/Tracker/SiTrackerStaggeredLadder_v03_geo.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Detector/DetCRD/src/Tracker/SiTrackerStaggeredLadder_v03_geo.cpp b/Detector/DetCRD/src/Tracker/SiTrackerStaggeredLadder_v03_geo.cpp
index 9a268d29..eea42eb3 100644
--- a/Detector/DetCRD/src/Tracker/SiTrackerStaggeredLadder_v03_geo.cpp
+++ b/Detector/DetCRD/src/Tracker/SiTrackerStaggeredLadder_v03_geo.cpp
@@ -254,7 +254,7 @@ static dd4hep::Ref_t create_element(dd4hep::Detector& theDetector, xml_h e, dd4h
for (int sensor_id = 0; sensor_id < sensor_n; sensor_id++) {
int irow = std::floor(sensor_id/sensor_column_n);
int icolumn = sensor_id%sensor_column_n;
- double ypos = module_y0 - module_width/2.0 + sensor_dead + sensor_side + irow*sensor_gap + (irow + 0.5)*sensor_width;
+ double ypos = module_y0 - module_width/2.0 + sensor_dead + irow*(sensor_gap + sensor_side*2) + (irow + 0.5)*sensor_width;
double zpos = module_z0 - sensor_total_length/2.0 + sensor_side + icolumn*(sensor_gap + sensor_side*2) + (icolumn + 0.5)*sensor_length;
pv = moduleLogical.placeVolume(sensorLogical, Position(0, ypos, zpos));
pv.addPhysVolID("sensor", sensor_id);
--
GitLab
From 52d185b03350bab1f77c2cc8b84d9d2b6b461e7d Mon Sep 17 00:00:00 2001
From: Chengdong Fu <fucd@ihep.ac.cn>
Date: Thu, 27 Mar 2025 16:07:32 +0800
Subject: [PATCH 3/4] gap between sensors
---
Service/GearSvc/src/GearSvc.cpp | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/Service/GearSvc/src/GearSvc.cpp b/Service/GearSvc/src/GearSvc.cpp
index 9d0fab4c..66bc402b 100644
--- a/Service/GearSvc/src/GearSvc.cpp
+++ b/Service/GearSvc/src/GearSvc.cpp
@@ -474,7 +474,7 @@ StatusCode GearSvc::convertMultiRingsZDisk(dd4hep::DetElement& ftd) {
std::vector<double> alphaPetals, zPositions, zOffsetSupports, rminSupports, rmaxSupports, thicknessSupports;
std::vector<double> thicknessSensitives, thicknessGlues, thicknessServices;
- std::vector<std::string> petalParNames, phi0ParNames, distanceParNames, widthInnerParNames, widthOuterParNames, lengthParNames;
+ std::vector<std::string> petalParNames, petalNSensorNames, phi0ParNames, distanceParNames, widthInnerParNames, widthOuterParNames, lengthParNames;
for (int layer = 0; layer < nLayers; layer++) {
dd4hep::rec::MultiRingsZDiskData::LayerLayout& ftdlayer = ftdlayers[layer];
@@ -489,19 +489,20 @@ StatusCode GearSvc::convertMultiRingsZDisk(dd4hep::DetElement& ftd) {
auto& rings = ftdlayer.rings;
petalParNames.push_back(std::string("PetalNumber_")+std::to_string(layer));
+ petalNSensorNames.push_back(std::string("PetalNSensor_")+std::to_string(layer));
phi0ParNames.push_back(std::string("PetalPhi0_")+std::to_string(layer));
distanceParNames.push_back(std::string("PetalDistance_")+std::to_string(layer));
widthInnerParNames.push_back(std::string("PetalInnerWidth_")+std::to_string(layer));
widthOuterParNames.push_back(std::string("PetalOuterWidth_")+std::to_string(layer));
lengthParNames.push_back(std::string("PetalLength_")+std::to_string(layer));
- std::vector<int> petalNumbers;
+ std::vector<int> petalNumbers, petalNSensors;
std::vector<double> phi0s, distances, widthInners, widthOuters, lengths;
for (unsigned iring = 0; iring < rings.size(); iring++) {
auto& ring = rings[iring];
petalNumbers.push_back(ring.petalNumber);
- //int sensorsPerPetal;
+ petalNSensors.push_back(ring.sensorsPerPetal);
phi0s.push_back(ring.phi0);
//double phiOffsetOdd;
distances.push_back(ring.distance*CLHEP::cm);
@@ -516,6 +517,7 @@ StatusCode GearSvc::convertMultiRingsZDisk(dd4hep::DetElement& ftd) {
}
}
ftdParam->setIntVals(std::string("PetalNumber_")+std::to_string(layer), petalNumbers);
+ ftdParam->setIntVals(std::string("PetalNSensor_")+std::to_string(layer), petalNSensors);
ftdParam->setDoubleVals(std::string("PetalPhi0_")+std::to_string(layer), phi0s);
ftdParam->setDoubleVals(std::string("PetalDistance_")+std::to_string(layer), distances);
ftdParam->setDoubleVals(std::string("PetalInnerWidth_")+std::to_string(layer), widthInners);
@@ -554,6 +556,7 @@ StatusCode GearSvc::convertMultiRingsZDisk(dd4hep::DetElement& ftd) {
ftdParam->setDoubleVals("ThicknessGlues", thicknessGlues);
ftdParam->setDoubleVals("ThicknessServices", thicknessServices);
ftdParam->setStringVals("PetalNumberNames", petalParNames);
+ ftdParam->setStringVals("PetalNSensorNames", petalNSensorNames);
ftdParam->setStringVals("PetalPhi0Names", phi0ParNames);
ftdParam->setStringVals("PetalDistanceNames", distanceParNames);
ftdParam->setStringVals("PetalInnerWidthNames", widthInnerParNames);
--
GitLab
From 12ac6e1bd51c1e8eacc11f352e235ba6b0137bfc Mon Sep 17 00:00:00 2001
From: Chengdong Fu <fucd@ihep.ac.cn>
Date: Thu, 27 Mar 2025 16:23:14 +0800
Subject: [PATCH 4/4] modify support thickness of stitching to design
---
.../CRD_common_v02/VXD_Composite_v01_03.xml | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/Detector/DetCRD/compact/CRD_common_v02/VXD_Composite_v01_03.xml b/Detector/DetCRD/compact/CRD_common_v02/VXD_Composite_v01_03.xml
index e9279e61..94c77774 100644
--- a/Detector/DetCRD/compact/CRD_common_v02/VXD_Composite_v01_03.xml
+++ b/Detector/DetCRD/compact/CRD_common_v02/VXD_Composite_v01_03.xml
@@ -44,7 +44,7 @@
<sensor thickness="50*um" width="8.409*mm" length="3.296*mm" material="G4_Si" vis="VXDVis"/>
<flex vis="GrayVis">
<!--slice thickness="0.4*um" material="G4_Al"/-->
- <slice thickness="VXD_flex_thickness+45*um" material="CFRP_CMS"/>
+ <slice thickness="VXD_flex_thickness+57.3*um" material="CFRP_CMS"/>
</flex>
<readout thickness="50*um" width="4.155*mm" material="Kapton" vis="RedVis"/>
<driver thickness="50*um" width="1.385*mm" material="Kapton" vis="BlueVis"/>
@@ -55,7 +55,7 @@
<sensor thickness="50*um" width="8.409*mm" length="3.296*mm" material="G4_Si" vis="VXDVis"/>
<flex vis="GrayVis">
<!--slice thickness="0.4*um" material="G4_Al"/-->
- <slice thickness="VXD_flex_thickness+45*um" material="CFRP_CMS"/>
+ <slice thickness="VXD_flex_thickness+57.3*um" material="CFRP_CMS"/>
</flex>
<readout thickness="50*um" width="4.155*mm" material="Kapton" vis="RedVis"/>
<driver thickness="50*um" width="1.385*mm" material="Kapton" vis="BlueVis"/>
@@ -68,7 +68,7 @@
<sensor thickness="50*um" width="8.409*mm" length="3.296*mm" material="G4_Si" vis="VXDVis"/>
<flex vis="GrayVis">
<!--slice thickness="0.4*um" material="G4_Al"/-->
- <slice thickness="VXD_flex_thickness+32*um" material="CFRP_CMS"/>
+ <slice thickness="VXD_flex_thickness+33.7*um" material="CFRP_CMS"/>
</flex>
<readout thickness="50*um" width="4.155*mm" material="Kapton" vis="RedVis"/>
<driver thickness="50*um" width="1.385*mm" material="Kapton" vis="BlueVis"/>
@@ -79,7 +79,7 @@
<sensor thickness="50*um" width="8.409*mm" length="3.296*mm" material="G4_Si" vis="VXDVis"/>
<flex vis="GrayVis">
<!--slice thickness="0.4*um" material="G4_Al"/-->
- <slice thickness="VXD_flex_thickness+32*um" material="CFRP_CMS"/>
+ <slice thickness="VXD_flex_thickness+33.7*um" material="CFRP_CMS"/>
</flex>
<readout thickness="50*um" width="4.155*mm" material="Kapton" vis="RedVis"/>
<driver thickness="50*um" width="1.385*mm" material="Kapton" vis="BlueVis"/>
@@ -92,7 +92,7 @@
<sensor thickness="50*um" width="8.409*mm" length="3.296*mm" material="G4_Si" vis="VXDVis"/>
<flex vis="GrayVis">
<!--slice thickness="0.4*um" material="G4_Al"/-->
- <slice thickness="VXD_flex_thickness+31*um" material="CFRP_CMS"/>
+ <slice thickness="VXD_flex_thickness+31.8*um" material="CFRP_CMS"/>
</flex>
<readout thickness="50*um" width="4.155*mm" material="Kapton" vis="RedVis"/>
<driver thickness="50*um" width="4.155*mm" material="Kapton" vis="BlueVis"/>
@@ -103,7 +103,7 @@
<sensor thickness="50*um" width="8.409*mm" length="3.296*mm" material="G4_Si" vis="VXDVis"/>
<flex vis="GrayVis">
<!--slice thickness="0.4*um" material="G4_Al"/-->
- <slice thickness="VXD_flex_thickness+31*um" material="CFRP_CMS"/>
+ <slice thickness="VXD_flex_thickness+31.8*um" material="CFRP_CMS"/>
</flex>
<readout thickness="50*um" width="4.155*mm" material="Kapton" vis="RedVis"/>
<driver thickness="50*um" width="4.155*mm" material="Kapton" vis="BlueVis"/>
@@ -116,7 +116,7 @@
<sensor thickness="50*um" width="8.409*mm" length="3.296*mm" material="G4_Si" vis="VXDVis"/>
<flex vis="GrayVis">
<!--slice thickness="0.4*um" material="G4_Al"/-->
- <slice thickness="VXD_flex_thickness+29*um" material="CFRP_CMS"/>
+ <slice thickness="VXD_flex_thickness+40*um" material="CFRP_CMS"/>
</flex>
<readout thickness="50*um" width="4.155*mm" material="Kapton" vis="RedVis"/>
<driver thickness="50*um" width="4.155*mm" material="Kapton" vis="BlueVis"/>
@@ -127,7 +127,7 @@
<sensor thickness="50*um" width="8.409*mm" length="3.296*mm" material="G4_Si" vis="VXDVis"/>
<flex vis="GrayVis">
<!--slice thickness="0.4*um" material="G4_Al"/-->
- <slice thickness="VXD_flex_thickness+29*um" material="CFRP_CMS"/>
+ <slice thickness="VXD_flex_thickness+40*um" material="CFRP_CMS"/>
</flex>
<readout thickness="50*um" width="4.155*mm" material="Kapton" vis="RedVis"/>
<driver thickness="50*um" width="4.155*mm" material="Kapton" vis="BlueVis"/>
--
GitLab