From 8069afab24fb2af600784e73e229560b3b06d34a Mon Sep 17 00:00:00 2001 From: "jihee.kim" <jihee.kim@anl.gov> Date: Thu, 15 Apr 2021 16:23:06 -0500 Subject: [PATCH] Added endcaps --- compact/cb_VTX_Endcaps.xml | 43 ++++++++++++ compact/definitions.xml | 23 ++++++- compact/display.xml | 1 + reference_detector.xml | 7 +- src/cb_VTX_EndcapN.cpp | 134 +++++++++++++++++++++++++++++++++++++ src/cb_VTX_EndcapP.cpp | 134 +++++++++++++++++++++++++++++++++++++ 6 files changed, 337 insertions(+), 5 deletions(-) create mode 100644 compact/cb_VTX_Endcaps.xml create mode 100644 src/cb_VTX_EndcapN.cpp create mode 100644 src/cb_VTX_EndcapP.cpp diff --git a/compact/cb_VTX_Endcaps.xml b/compact/cb_VTX_Endcaps.xml new file mode 100644 index 0000000..21b8804 --- /dev/null +++ b/compact/cb_VTX_Endcaps.xml @@ -0,0 +1,43 @@ +<lccdd> + + <comment> Central Vertex Endcaps Detector </comment> + + <define> + </define> + + <limits> + </limits> + + <regions> + </regions> + + <display> + </display> + + <detectors> + <detector id="cb_VTX_EndcapP_ID" name="cb_VTX_EndcapP" type="cb_VTX_EndcapP" readout="cb_VTX_Endcaps_Hits" vis="cb_VTX_EndcapsVis" reflect="false" insideTrackingVloume="true"> + <dimensions rmin="cb_VTX_EndcapP_rmin" rmax="cb_VTX_EndcapP_rmax" length="cb_VTX_EndcapP_length"/> + <position x="cb_VTX_EndcapP_x_pos" y="cb_VTX_EndcapP_y_pos" z="cb_VTX_EndcapP_z_pos"/> + <material name="Si"/> + </detector> + + <detector id="cb_VTX_EndcapN_ID" name="cb_VTX_EndcapN" type="cb_VTX_EndcapN" readout="cb_VTX_Endcaps_Hits" vis="cb_VTX_EndcapsVis" reflect="true" insideTrackingVloume="true"> + <dimensions rmin="cb_VTX_EndcapN_rmin" rmax="cb_VTX_EndcapN_rmax" length="cb_VTX_EndcapN_length"/> + <position x="cb_VTX_EndcapN_x_pos" y="cb_VTX_EndcapN_y_pos" z="cb_VTX_EndcapN_z_pos"/> + <material name="Si"/> + </detector> + </detectors> + + <readouts> + <readout name="cb_VTX_Endcaps_Hits"> + <segmentation type="CartesianGridXY" grid_size_x="1.0*mm" grid_size_y="1.0*mm" /> + <id>system:8,barrel:4,layer:4,module:8,x:32:-16,y:-16</id> + </readout> + </readouts> + + <plugins> + </plugins> + + <fields> + </fields> +</lccdd> diff --git a/compact/definitions.xml b/compact/definitions.xml index 5b7f725..ce3ab4a 100644 --- a/compact/definitions.xml +++ b/compact/definitions.xml @@ -68,7 +68,9 @@ Layer 4 subassembly ID: 29 Layer 5 subassembly ID: 30 </comment> - <constant name="cb_VTX_Barrel_ID" value="25"/> + <constant name="cb_VTX_Barrel_ID" value="31"/> + <constant name="cb_VTX_EndcapP_ID" value="32"/> + <constant name="cb_VTX_EndcapN_ID" value="33"/> <comment> Unused values reserved for vertex: constant name="SiVertexSubAssemblyLayer1_ID" value="121" @@ -78,6 +80,7 @@ constant name="SiVertexSubAssemblyLayer5_ID" value="125" </comment> + <comment> =============================== (50-74) Silicon Tracker System @@ -340,13 +343,29 @@ <constant name="cb_VTX_Barrel_rmin" value="33.0*mm"/> <constant name="cb_VTX_Barrel_rmax" value="165.0*mm"/> - <constant name="cb_VTX_Barrel_length" value="740.0*mm"/> + <constant name="cb_VTX_Barrel_length" value="500.0*mm"/> <constant name="cb_VTX_Barrel_x_pos" value="0.0*mm"/> <constant name="cb_VTX_Barrel_y_pos" value="0.0*mm"/> <constant name="cb_VTX_Barrel_z_pos" value="0.0*mm"/> <constant name="cb_VTX_Barrel_layer" value="6"/> + + <constant name="cb_VTX_EndcapP_rmin" value="33.0*mm"/> + <constant name="cb_VTX_EndcapP_rmax" value="165.0*mm"/> + <constant name="cb_VTX_EndcapP_length" value="250.0*mm"/> + + <constant name="cb_VTX_EndcapP_x_pos" value="0.0*mm"/> + <constant name="cb_VTX_EndcapP_y_pos" value="0.0*mm"/> + <constant name="cb_VTX_EndcapP_z_pos" value="25.0*mm"/> + + <constant name="cb_VTX_EndcapN_rmin" value="33.0*mm"/> + <constant name="cb_VTX_EndcapN_rmax" value="165.0*mm"/> + <constant name="cb_VTX_EndcapN_length" value="250.0*mm"/> + + <constant name="cb_VTX_EndcapN_x_pos" value="0.0*mm"/> + <constant name="cb_VTX_EndcapN_y_pos" value="0.0*mm"/> + <constant name="cb_VTX_EndcapN_z_pos" value="-25.0*mm"/> <comment> -------------------------- Silicon Tracker Parameters diff --git a/compact/display.xml b/compact/display.xml index a51b769..bcc5336 100644 --- a/compact/display.xml +++ b/compact/display.xml @@ -57,6 +57,7 @@ <vis name="cb_GEM_layerVis" alpha="0.8" r= "0.8" g="0.4" b="0.3" showDaughters="true" visible="true"/> <vis name="cb_VTX_BarrelVis" alpha="0.1" r= "0.1" g="0.0" b="1.0" showDaughters="true" visible="true"/> <vis name="cb_VTX_Barrel_layerVis" alpha="2.0" r= "0.0" g="0.2" b="0.8" showDaughters="true" visible="true"/> + <vis name="cb_VTX_EndcapsVis" alpha="0.1" r= "0.1" g="0.0" b="1.0" showDaughters="true" visible="true"/> <vis name="ci_GEMVis" r= "0.8" g="0.4" b="0.3" alpha="0.8" showDaughters="true" visible="true"/> <vis name="ci_HCALVis" r= "0.6" g="0" b="0.6" alpha="1.0" showDaughters="true" visible="true"/> diff --git a/reference_detector.xml b/reference_detector.xml index 518c5ff..3a5e89c 100644 --- a/reference_detector.xml +++ b/reference_detector.xml @@ -114,7 +114,7 @@ <include ref="reference_detector/vertex_tracker.xml"/> <include ref="compact/silicon_tracker.xml"/> --> - <include ref="ip6/beampipe.xml"/> + <!--<include ref="ip6/beampipe.xml"/> <include ref="compact/solenoid.xml"/> <include ref="compact/ecal.xml"/> <include ref="compact/cb_CTD_Si.xml"/> @@ -124,14 +124,15 @@ <include ref="compact/ci_GEM.xml"/> <include ref="compact/hcal.xml"/> <include ref="compact/forward_trd.xml"/> - <include ref="compact/B0_tracker.xml"/> + <include ref="compact/B0_tracker.xml"/>--> <include ref="compact/cb_VTX_Barrel.xml"/> + <include ref="compact/cb_VTX_Endcaps.xml"/> <!-- <include ref="compact/ci_HCAL.xml"/> <include ref="compact/forward_rich.xml"/> <include ref="compact/roman_pots.xml"/> --> - <include ref="eic/forward_ion_beamline.xml"/> + <!--<include ref="eic/forward_ion_beamline.xml"/>--> <detectors> diff --git a/src/cb_VTX_EndcapN.cpp b/src/cb_VTX_EndcapN.cpp new file mode 100644 index 0000000..80fdf07 --- /dev/null +++ b/src/cb_VTX_EndcapN.cpp @@ -0,0 +1,134 @@ +#include <XML/Helper.h> +#include "DDRec/Surface.h" +#include "DDRec/DetectorData.h" +#include "DD4hep/OpticalSurfaces.h" +#include "DD4hep/DetFactoryHelper.h" +#include "DD4hep/Printout.h" +////////////////////////////////// +// Central Vertex Endcap Detector +////////////////////////////////// + +using namespace std; +using namespace dd4hep; + +static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens) +{ + xml_det_t x_det = e; + string detName = x_det.nameStr(); + int detID = x_det.id(); + + xml_dim_t dim = x_det.dimensions(); + double RIn = dim.rmin(); + double ROut = dim.rmax(); + double SizeZ = dim.length(); + + xml_dim_t pos = x_det.position(); + + Material Vacuum = desc.material("Vacuum"); + + // Create Global Volume + Tube cb_VTX_EndcapN_GVol_Solid(RIn, ROut, SizeZ / 2.0, 0., 360.0 * deg); + Volume detVol("cb_VTX_EndcapN_GVol_Logic", cb_VTX_EndcapN_GVol_Solid, Vacuum); + detVol.setVisAttributes(desc.visAttributes(x_det.visStr())); + Material mat = desc.material(x_det.materialStr()); + + ////////////////// + // Endcaps Ladder + ////////////////// + double x = 0.0 * cm; + double y = 0.0 * cm; + double z = 0.0 * cm; + double phi = 0.0; + int i_layer = 0; + int i_module = 0; + 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 = -45.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), mat); + for (int ia = 0; ia < NUMF; ia++) { + phi = ia * Fdeltaphi; + x = -RxF[lay] * cos(phi); + y = -RyF[lay] * sin(phi); + 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); + } + } + + DetElement det(detName, detID); + Volume motherVol = desc.pickMotherVolume(det); + Transform3D tr(RotationZYX(0.0, 0.0, 0.0), Position(pos.x(), pos.y(), pos.z())); + PlacedVolume detPV = motherVol.placeVolume(detVol, tr); + detPV.addPhysVolID("system", detID); + detPV.addPhysVolID("barrel", 1); + det.setPlacement(detPV); + return det; +} + +DECLARE_DETELEMENT(cb_VTX_EndcapN, createDetector) diff --git a/src/cb_VTX_EndcapP.cpp b/src/cb_VTX_EndcapP.cpp new file mode 100644 index 0000000..5f61c55 --- /dev/null +++ b/src/cb_VTX_EndcapP.cpp @@ -0,0 +1,134 @@ +#include <XML/Helper.h> +#include "DDRec/Surface.h" +#include "DDRec/DetectorData.h" +#include "DD4hep/OpticalSurfaces.h" +#include "DD4hep/DetFactoryHelper.h" +#include "DD4hep/Printout.h" +////////////////////////////////// +// Central Vertex Endcap Detector +////////////////////////////////// + +using namespace std; +using namespace dd4hep; + +static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens) +{ + xml_det_t x_det = e; + string detName = x_det.nameStr(); + int detID = x_det.id(); + + xml_dim_t dim = x_det.dimensions(); + double RIn = dim.rmin(); + double ROut = dim.rmax(); + double SizeZ = dim.length(); + + xml_dim_t pos = x_det.position(); + + Material Vacuum = desc.material("Vacuum"); + + // Create Global Volume + Tube cb_VTX_EndcapP_GVol_Solid(RIn, ROut, SizeZ / 2.0, 0., 360.0 * deg); + Volume detVol("cb_VTX_EndcapP_GVol_Logic", cb_VTX_EndcapP_GVol_Solid, Vacuum); + detVol.setVisAttributes(desc.visAttributes(x_det.visStr())); + Material mat = desc.material(x_det.materialStr()); + + ////////////////// + // Endcaps Ladder + ////////////////// + double x = 0.0 * cm; + double y = 0.0 * cm; + double z = 0.0 * cm; + double phi = 0.0; + int i_layer = 0; + int i_module = 0; + 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 = -45.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++; + // 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), mat); + for (int ia = 0; ia < NUMF; ia++) { + phi = ia * Fdeltaphi; + x = -RxF2[lay] * cos(phi); + y = -RyF2[lay] * sin(phi); + 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); + } + } + + DetElement det(detName, detID); + Volume motherVol = desc.pickMotherVolume(det); + Transform3D tr(RotationZYX(0.0, 0.0, 0.0), Position(pos.x(), pos.y(), pos.z())); + PlacedVolume detPV = motherVol.placeVolume(detVol, tr); + detPV.addPhysVolID("system", detID); + detPV.addPhysVolID("barrel", 1); + det.setPlacement(detPV); + return det; +} + +DECLARE_DETELEMENT(cb_VTX_EndcapP, createDetector) -- GitLab