From 314d828b81a614286e15f2f85149e9f7cb0de902 Mon Sep 17 00:00:00 2001
From: "jihee.kim" <jihee.kim@anl.gov>
Date: Wed, 14 Apr 2021 21:19:39 -0500
Subject: [PATCH] Added endcaps ladder
---
src/cb_VTX.cpp | 110 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 108 insertions(+), 2 deletions(-)
diff --git a/src/cb_VTX.cpp b/src/cb_VTX.cpp
index 3d58b10..808641b 100644
--- a/src/cb_VTX.cpp
+++ b/src/cb_VTX.cpp
@@ -31,7 +31,9 @@ static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens)
Volume detVol("cb_VTX_GVol_Logic", cb_VTX_GVol_Solid, Vacuum);
detVol.setVisAttributes(desc.visAttributes(x_det.visStr()));
+ //////////////////
// Barrel Ladder
+ //////////////////
xml_comp_t x_layer = x_det.child(_U(layer));
const int repeat = x_layer.repeat();
@@ -57,7 +59,8 @@ static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens)
lay_Dx[4] = 0.150 * mm; lay_Dy[4] = 4.0 * cm; lay_Dz[4] = 36.0 * cm; lay_Rin[4] = 13.5 * cm;
lay_Dx[5] = 0.150 * mm; lay_Dy[5] = 4.0 * cm; lay_Dz[5] = 48.0 * cm; lay_Rin[5] = 15.5 * cm;
- int i_module = 0.0;
+ int i_layer = 0;
+ int i_module = 0;
// Loop over layers
for(int i = 0; i < repeat; i++) {
double cb_VTX_ladder_DZ = lay_Dz[i];
@@ -83,6 +86,7 @@ static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens)
ladderVol.setVisAttributes(desc,x_layer.visStr());
sens.setType("tracker");
ladderVol.setSensitiveDetector(sens);
+ i_layer++;
for (int ia = 0; ia < laddersCount; ia++) {
phi = (ia * (cb_VTX_ladder_deltaphi));
@@ -94,7 +98,109 @@ static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens)
string ladderName = detName + _toString(i, "_ladder_Phys_%d") + _toString(ia, "_%d");
PlacedVolume ladderPV = detVol.placeVolume(ladderVol, Transform3D(ladder_rot, ladder_pos));
i_module++;
- ladderPV.addPhysVolID("layer", i+1).addPhysVolID("module", i_module);
+ ladderPV.addPhysVolID("layer", i_layer).addPhysVolID("module", i_module);
+ }
+ }
+
+ // TODO: Pixels
+
+ //////////////////
+ // Endcaps Ladder
+ //////////////////
+ int lay = 0;
+ int NUMF;
+ phi = 0.0; x = 0.0; y = 0.0; z = 0.0;
+ double Fdeltaphi, Ftheta, F2theta;
+ double RxF[10], RyF[10], RzF[10], RxF2[10], RyF2[10], RzF2[10];
+ double Rzshift = 24.0 * cm;
+ double fVTX_END_EDY = 12.0 * cm;
+ double fVTX_END_EDZ = 0.05 * cm;
+ double fVTX_END_EDX1 = 6.0 * cm;
+ double fVTX_END_EDX2 = 4.0 * cm;
+
+ for (lay = 0; lay < 3; lay++) {
+ if (lay == 3) {
+ fVTX_END_EDY = 18.0 * cm;
+ NUMF = 24;
+ Fdeltaphi = 15.0 * deg;
+ Ftheta = -40.0 * deg;
+ RxF[lay] = 1.3 * cm;
+ RyF[lay] = RxF[lay];
+ RzF[lay] = -Rzshift - 5.5 * cm;
+ RxF2[lay] = 1.3 * cm;
+ RyF2[lay] = RxF2[lay];
+ RzF2[lay] = Rzshift + 5.5 * cm;
+ }
+ if (lay == 2) {
+ NUMF = 20;
+ fVTX_END_EDY = 16.0 * cm;
+ Fdeltaphi = 18.0 * deg;
+ Ftheta = -38.0 * deg;
+ RxF[lay] = 1.1 * cm;
+ RyF[lay] = RxF[lay];
+ RzF[lay] = -Rzshift - 5.5 * cm;
+ RxF2[lay] = 1.1 * cm;
+ RyF2[lay] = RxF2[lay];
+ RzF2[lay] = Rzshift + 5.5 * cm;
+ }
+ if (lay == 1) {
+ NUMF = 18;
+ fVTX_END_EDY = 14.0 * cm;
+ Fdeltaphi = 20.0 * deg;
+ Ftheta = -44.0 * deg;
+ RxF[lay] = 1.0 * cm;
+ RyF[lay] = RxF[lay];
+ RzF[lay] = -Rzshift + 1.0 * cm;
+ RxF2[lay] = 1.0 * cm;
+ RyF2[lay] = RxF2[lay];
+ RzF2[lay] = Rzshift - 1.0 * cm;
+ }
+ if (lay == 0) {
+ NUMF = 12;
+ fVTX_END_EDY = 12.0 * cm;
+ Fdeltaphi = 30.0 * deg;
+ Ftheta = -55.0 * deg;
+ RxF[lay] = 0.8 * cm;
+ RyF[lay] = RxF[lay];
+ RzF[lay] = -Rzshift + 7.0 * cm;
+ RxF2[lay] = 0.8 * cm;
+ RyF2[lay] = RxF2[lay];
+ RzF2[lay] = Rzshift - 7.0 * cm;
+ }
+
+ i_layer++;
+ // Electron going side Endcap
+ string logicladderENDEName = detName + _toString(lay, "_logic_ladder_END_E%d");
+ Volume ladderENDEVol(logicladderENDEName,Trap(fVTX_END_EDZ,fVTX_END_EDY + lay * 2.0, fVTX_END_EDX1, fVTX_END_EDX2), slice_mat);
+ for (int ia = 0; ia < NUMF; ia++) {
+ phi = ia * Fdeltaphi;
+ x = -RxF[lay] * cos(phi) * cm;
+ y = -RyF[lay] * sin(phi) * cm;
+ z = RzF[lay];
+
+ RotationZYX ladder_ENDE_rot = RotationZYX(-90.0 + (Fdeltaphi * (ia + 1)), 0.0, Ftheta);
+ Position ladder_ENDE_pos = Position(x,y,z);
+ string ladderName = detName + _toString(lay, "_ladder_END_E_Phys_%d") + _toString(ia, "_%d");
+ PlacedVolume ladderENDEPV = detVol.placeVolume(ladderENDEVol, Transform3D(ladder_ENDE_rot, ladder_ENDE_pos));
+ i_module++;
+ ladderENDEPV.addPhysVolID("layer", i_layer).addPhysVolID("module", i_module);
+ }
+
+ // Hadron going side Endcap
+ string logicladderENDHName = detName + _toString(lay, "_logic_ladder_END_H%d");
+ Volume ladderENDHVol(logicladderENDHName,Trap(fVTX_END_EDZ, fVTX_END_EDY, fVTX_END_EDX1, fVTX_END_EDX2), slice_mat);
+ for (int ia = 0; ia < NUMF; ia++) {
+ phi = ia * Fdeltaphi;
+ x = -RxF2[lay] * cos(phi) * cm;
+ y = -RyF2[lay] * sin(phi) * cm;
+ z = RzF2[lay];
+
+ RotationZYX ladder_ENDH_rot = RotationZYX(-90.0 + (Fdeltaphi * (ia + 1)), 0.0, -Ftheta);
+ Position ladder_ENDH_pos = Position(x,y,z);
+ string ladderName = detName + _toString(lay, "_ladder_END_H_Phys_%d") + _toString(ia, "_%d");
+ PlacedVolume ladderENDHPV = detVol.placeVolume(ladderENDHVol, Transform3D(ladder_ENDH_rot, ladder_ENDH_pos));
+ i_module++;
+ ladderENDHPV.addPhysVolID("layer", i_layer).addPhysVolID("module", i_module);
}
}
--
GitLab