From 5997dac2e8b518e31b2400f269e45e7b033f4dc7 Mon Sep 17 00:00:00 2001 From: Whitney Armstrong <warmstrong@anl.gov> Date: Mon, 16 Aug 2021 20:54:15 +0000 Subject: [PATCH] Resolve "Add services to tracker" --- compact/central_tracker.xml | 108 ++++++++++++++++++---------------- src/TrapEndcapTracker_geo.cpp | 35 ++++++++--- 2 files changed, 85 insertions(+), 58 deletions(-) diff --git a/compact/central_tracker.xml b/compact/central_tracker.xml index e238601f..ecbe9efa 100644 --- a/compact/central_tracker.xml +++ b/compact/central_tracker.xml @@ -1,34 +1,30 @@ <?xml version="1.0" encoding="UTF-8"?> <lccdd> - <comment> - --------------- - Silicon Tracker - --------------- - - Some references: - With some added info on ITS3 chip from - https://indico.bnl.gov/event/10677/contributions/45591/attachments/33204/53254/20210318-IR2%40EIC-SVT.pdf - To be used as standin until we get more detailed specs from the working group on the tracker. - - Note: initial implementation with hard-coded values, - TODO: add parametrization - - ---- - Aug 04, 2021, Shujie Li - - udpated stave and disck material budget for the baseline design. - see https://eicweb.phy.anl.gov/EIC/detectors/athena/-/issues/63 - -ITS3 sensor thickness: 40um, pixel size: 10um (segmentation) - total X0 0.55% per barrel layer: - 0.35 mm aluminum ~ 0.4% X0. - 2 x carbonfiber (RL ~ 28) 0.12 mm (!!! material scan shows ~0.17mm, need to check later) to match Si (RL~9) of 0.04mm ~ 0.04% - - total X0 0.24% per disk layer (4 sectors per disk): - 0.15 mm aluminum ~ 0.16% X0. - 1 x carbonfiber (RL ~ 28) 0.12 mm to match Si (RL~9) of 0.04mm ~ 0.04% - - </comment> + <documentation> + ### Silicon Tracker + +#### Some references: + +- With some added info on ITS3 chip from https://indico.bnl.gov/event/10677/contributions/45591/attachments/33204/53254/20210318-IR2%40EIC-SVT.pdf +To be used as standin until we get more detailed specs from the working group on the tracker. +- https://wiki.bnl.gov/athena/index.php/Tracking + +Note: initial implementation with hard-coded values, +TODO: add parametrization + +#### ITS3 sensors + +ITS3 sensor thickness: +- 40um, pixel size: 10um (segmentation) +- total X0 0.55% per barrel layer: +- 0.35 mm aluminum ~ 0.4% X0. +- 2 x carbonfiber (RL ~ 28) 0.12 mm (!!! material scan shows ~0.17mm, need to check later) to match Si (RL~9) of 0.04mm ~ 0.04% + +total X0 0.24% per disk layer (4 sectors per disk): + - 0.15 mm aluminum ~ 0.16% X0. + - 1 x carbonfiber (RL ~ 28) 0.12 mm to match Si (RL~9) of 0.04mm ~ 0.04% + + </documentation> <define> <comment> @@ -64,15 +60,12 @@ ITS3 sensor thickness: 40um, pixel size: 10um (segmentation) <constant name="TrackerEndcapInner_nLayers" value="1"/> <constant name="TrackerEndcapOuter_nLayers" value="3"/> <constant name="TrackerEndcapLayer_dz" value="2*cm"/> - <constant name="TrackerEndcapLayerModule_dz" value="2.5*mm"/> + <constant name="TrackerEndcapModule_dz" value="2.5*mm"/> <constant name="TrackerEndcapInner_zmin" value="49*cm"/> - <!-- <constant name="TrackerEndcapInnerLayer_dz" value="TrackerEndcapLayer_dz"/> --> <constant name="TrackerEndcapInner_zmax" value="TrackerEndcapInner_zmin+TrackerEndcapLayer_dz"/> <constant name="TrackerEndcapInner_length" value="TrackerEndcapLayer_dz"/> - <constant name="TrackerEndcapInnerLayer_thickness" value="min(5.0*cm,TrackerEndcapLayer_dz - 0.5*cm)"/> - <comment> Note, the -1.0*cm is so the layers do not touch surfaces. - This is a limitation of ACTS geometry which will likely go away in the future.</comment> + <constant name="TrackerEndcapInnerLayer_thickness" value="min(3.0*cm,TrackerEndcapLayer_dz - 0.5*cm)"/> <constant name="TrackerEndcapOuter_zmin1" value="73*cm"/> <constant name="TrackerEndcapOuter_zmin2" value="97*cm"/> @@ -80,6 +73,7 @@ ITS3 sensor thickness: 40um, pixel size: 10um (segmentation) <constant name="TrackerEndcapOuter_zmin" value="TrackerEndcapOuter_zmin1"/> <constant name="TrackerEndcapOuter_zmax" value="TrackerEndcapOuter_zmin3 + TrackerEndcapLayer_dz"/> <constant name="TrackerEndcapOuterLayer_thickness" value="min(5.0*cm,TrackerEndcapLayer_dz - 1.0*cm)"/> + <comment> Note, the -1.0*cm is so the layers do not touch surfaces. This is a limitation of ACTS geometry which will likely go away in the future.</comment> @@ -101,8 +95,6 @@ ITS3 sensor thickness: 40um, pixel size: 10um (segmentation) <constant name="TrackerEndcapOuterShell_zmin" value="TrackerEndcapOuter_rmax1 * TrackerEndcapInner_zmin/TrackerEndcapInner_rmax1+1*cm"/> <constant name="TrackerEndcapOuterShell_length" value="TrackerEndcapOuter_zmax- TrackerEndcapOuterShell_zmin"/> - - <constant name="TrackerEndcap_NModules" value="12"/> <comment> nmodules = np.pi/np.arcsin(frame_width*np.cos(tilt_angle)/2.0/R) </comment> @@ -138,9 +130,7 @@ ITS3 sensor thickness: 40um, pixel size: 10um (segmentation) <comment> - ----------------------------------- - Inner Tracker Subassembly (group 1) - ----------------------------------- + #### Inner Tracker Subassembly </comment> <detector @@ -212,6 +202,12 @@ ITS3 sensor thickness: 40um, pixel size: 10um (segmentation) readout="TrackerEndcapHits" vis="AnlRed" reflect="false"> + <support material="CarbonFiber" name="sup_cylinder" vis="TrackerSupportVis"> + <shape type="Cone" + rmin1="TrackerEndcapInner_rmax1-14.0*cm" rmax1="TrackerEndcapInner_rmax1-14.0*cm+0.2*mm" + rmin2="TrackerEndcapInner_rmax1" rmax2="TrackerEndcapInner_rmax1+0.2*mm" z="8*cm"/> + <position x="0*cm" y="0*cm" z="TrackerEndcapInner_zmin-10.0*cm"/> + </support> <module name="Module1" vis="AnlProcess_Blue"> <trd x1="TrackerEndcapInnerMod1_x1/2.0" x2="TrackerEndcapInnerMod1_x2/2.0" z="TrackerEndcapInnerMod1_y/2"/> <module_component thickness="ITS3Thickness" material="Silicon" sensitive="true"/> @@ -227,7 +223,7 @@ ITS3 sensor thickness: 40um, pixel size: 10um (segmentation) <ring vis="AnlRed" r="TrackerEndcapInner_rmin1+TrackerEndcapInnerMod1_y/2.0" zstart="0.0" - nmodules="TrackerEndcap_NModules" dz="TrackerEndcapLayerModule_dz" module="Module1" /> + nmodules="TrackerEndcap_NModules" dz="TrackerEndcapModule_dz" module="Module1" /> </layer> </detector> @@ -238,10 +234,16 @@ ITS3 sensor thickness: 40um, pixel size: 10um (segmentation) readout="TrackerEndcapHits" vis="AnlRed" reflect="true"> + <support material="CarbonFiber" name="sup_cylinder" vis="TrackerSupportVis"> + <shape type="Cone" + rmin2="TrackerEndcapInner_rmax1-14.0*cm" rmax2="TrackerEndcapInner_rmax1-14.0*cm+0.2*mm" + rmin1="TrackerEndcapInner_rmax1-1.0*cm" rmax1="TrackerEndcapInner_rmax1-1.0*cm+0.2*mm" z="8*cm"/> + <position x="0*cm" y="0*cm" z="-1.0*(TrackerEndcapInner_zmin-10.0*cm)"/> + </support> <module name="Module1" vis="AnlProcess_Blue"> <trd x1="TrackerEndcapInnerMod1_x1/2.0" x2="TrackerEndcapInnerMod1_x2/2.0" z="TrackerEndcapInnerMod1_y/2"/> <module_component thickness="ITS3Thickness" material="Silicon" sensitive="true"/> - <module_component thickness="TrackerEndcapAluminum_thickness" material="Aluminum"/> + <module_component thickness="TrackerEndcapAluminum_thickness" material="Aluminum"/> <module_component thickness="TrackerCarbon_thickness" material="CarbonFiber"/> </module> <layer id="1"> @@ -253,7 +255,7 @@ ITS3 sensor thickness: 40um, pixel size: 10um (segmentation) <ring vis="AnlRed" r="TrackerEndcapInner_rmin1+TrackerEndcapInnerMod1_y/2.0" zstart="0" - nmodules="TrackerEndcap_NModules" dz="TrackerEndcapLayerModule_dz" module="Module1" /> + nmodules="TrackerEndcap_NModules" dz="TrackerEndcapModule_dz" module="Module1" /> </layer> </detector> @@ -361,7 +363,7 @@ ITS3 sensor thickness: 40um, pixel size: 10um (segmentation) <ring vis="AnlRed" r="TrackerEndcapOuter_rmin1+TrackerEndcapOuterMod1_y/2.0" zstart="0.0*mm" - nmodules="TrackerEndcap_NModules" dz="TrackerEndcapLayerModule_dz" module="Module1" /> + nmodules="TrackerEndcap_NModules" dz="TrackerEndcapModule_dz" module="Module1" /> </layer> <layer id="2"> <envelope vis="AnlRed" @@ -372,7 +374,7 @@ ITS3 sensor thickness: 40um, pixel size: 10um (segmentation) <ring vis="AnlRed" r="TrackerEndcapOuter_rmin2+TrackerEndcapOuterMod2_y/2.0" zstart="0.0*mm" - nmodules="TrackerEndcap_NModules" dz="TrackerEndcapLayerModule_dz" module="Module2" /> + nmodules="TrackerEndcap_NModules" dz="TrackerEndcapModule_dz" module="Module2" /> </layer> <layer id="3"> <envelope vis="AnlRed" @@ -383,7 +385,7 @@ ITS3 sensor thickness: 40um, pixel size: 10um (segmentation) <ring vis="AnlRed" r="TrackerEndcapOuter_rmin3+TrackerEndcapOuterMod3_y/2.0" zstart="0.0*mm" - nmodules="TrackerEndcap_NModules" dz="TrackerEndcapLayerModule_dz" module="Module3" /> + nmodules="TrackerEndcap_NModules" dz="TrackerEndcapModule_dz" module="Module3" /> </layer> </detector> @@ -394,9 +396,13 @@ ITS3 sensor thickness: 40um, pixel size: 10um (segmentation) readout="TrackerEndcapHits" vis="AnlRed" reflect="true"> - <support vis="TrackerSupportVis" material="CarbonFiber" + <support material="CarbonFiber" name="sup_cylinder" vis="TrackerSupportVis" rmin="TrackerEndcapOuter_rmax3+1.0*mm" - thickness="2.0*mm" length="TrackerEndcapOuterShell_length" zstart="TrackerEndcapOuterShell_zmin" /> + thickness="2.0*mm" + length="TrackerEndcapOuterShell_length" + zstart="TrackerEndcapOuterShell_zmin"/> + + <module name="Module1" vis="AnlProcess_Blue"> <trd x1="TrackerEndcapOuterMod1_x1/2.0" x2="TrackerEndcapOuterMod1_x2/2.0" z="TrackerEndcapOuterMod1_y/2"/> <module_component thickness="ITS3Thickness" material="Silicon" sensitive="true"/> @@ -424,7 +430,7 @@ ITS3 sensor thickness: 40um, pixel size: 10um (segmentation) <ring vis="AnlRed" r="TrackerEndcapOuter_rmin1+TrackerEndcapOuterMod1_y/2.0" zstart="0.0*mm" - nmodules="TrackerEndcap_NModules" dz="TrackerEndcapLayerModule_dz" module="Module1" /> + nmodules="TrackerEndcap_NModules" dz="TrackerEndcapModule_dz" module="Module1" /> </layer> <layer id="2"> <envelope vis="AnlRed" @@ -435,7 +441,7 @@ ITS3 sensor thickness: 40um, pixel size: 10um (segmentation) <ring vis="AnlRed" r="TrackerEndcapOuter_rmin2+TrackerEndcapOuterMod2_y/2.0" zstart="0.0*mm" - nmodules="TrackerEndcap_NModules" dz="TrackerEndcapLayerModule_dz" module="Module2" /> + nmodules="TrackerEndcap_NModules" dz="TrackerEndcapModule_dz" module="Module2" /> </layer> <layer id="3"> <envelope vis="AnlRed" @@ -446,7 +452,7 @@ ITS3 sensor thickness: 40um, pixel size: 10um (segmentation) <ring vis="AnlRed" r="TrackerEndcapOuter_rmin3+TrackerEndcapOuterMod3_y/2.0" zstart="0.0*mm" - nmodules="TrackerEndcap_NModules" dz="TrackerEndcapLayerModule_dz" module="Module3" /> + nmodules="TrackerEndcap_NModules" dz="TrackerEndcapModule_dz" module="Module3" /> </layer> </detector> @@ -466,4 +472,4 @@ ITS3 sensor thickness: 40um, pixel size: 10um (segmentation) </readouts> -</lccdd> \ No newline at end of file +</lccdd> diff --git a/src/TrapEndcapTracker_geo.cpp b/src/TrapEndcapTracker_geo.cpp index cde820c6..56fe7d11 100644 --- a/src/TrapEndcapTracker_geo.cpp +++ b/src/TrapEndcapTracker_geo.cpp @@ -2,6 +2,7 @@ #include "DD4hep/DetFactoryHelper.h" #include "Acts/Plugins/DD4hep/ActsExtension.hpp" #include "Acts/Definitions/Units.hpp" +#include "XML/Utilities.h" using namespace std; using namespace dd4hep; @@ -46,16 +47,36 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s double support_length = getAttrOrDefault(x_support, _U(length), 2.0 * mm); double support_rmin = getAttrOrDefault(x_support, _U(rmin), 2.0 * mm); double support_zstart = getAttrOrDefault(x_support, _U(zstart), 2.0 * mm); + std::string support_name = getAttrOrDefault<std::string>(x_support, _Unicode(name), "support_tube"); std::string support_vis = getAttrOrDefault<std::string>(x_support, _Unicode(vis), "AnlRed"); - Material support_mat = description.material(x_support.materialStr()); - Tube support_tub(support_rmin, support_rmin + support_thickness, support_length / 2); - Volume support_vol("support_tube", support_tub, support_mat); // Create the layer envelope volume. - support_vol.setVisAttributes(description.visAttributes(support_vis)); - if(reflect) { - pv = assembly.placeVolume(support_vol, Position(0, 0, -1.0 * (support_zstart + support_length / 2))); + xml_dim_t pos (x_support.child(_U(position), false)); + xml_dim_t rot (x_support.child(_U(rotation), false)); + Solid support_solid; + if(x_support.hasChild("shape")){ + xml_comp_t shape(x_support.child(_U(shape))); + string shape_type = shape.typeStr(); + support_solid = xml::createShape(description, shape_type, shape); } else { - pv = assembly.placeVolume(support_vol, Position(0, 0, support_zstart + support_length / 2)); + support_solid = Tube(support_rmin, support_rmin + support_thickness, support_length / 2); + } + Transform3D tr = Transform3D(Rotation3D(),Position(0,0,(reflect?-1.0:1.0) * (support_zstart + support_length / 2))); + if ( pos.ptr() && rot.ptr() ) { + Rotation3D rot3D(RotationZYX(rot.z(0),rot.y(0),rot.x(0))); + Position pos3D(pos.x(0),pos.y(0),pos.z(0)); + tr = Transform3D(rot3D, pos3D); + } + else if ( pos.ptr() ) { + tr = Transform3D(Rotation3D(),Position(pos.x(0),pos.y(0),pos.z(0))); } + else if ( rot.ptr() ) { + Rotation3D rot3D(RotationZYX(rot.z(0),rot.y(0),rot.x(0))); + tr = Transform3D(rot3D,Position()); + } + Material support_mat = description.material(x_support.materialStr()); + Volume support_vol(support_name, support_solid, support_mat); + support_vol.setVisAttributes(description.visAttributes(support_vis)); + pv = assembly.placeVolume(support_vol, tr); + // pv = assembly.placeVolume(support_vol, Position(0, 0, support_zstart + support_length / 2)); } for (xml_coll_t mi(x_det, _U(module)); mi; ++mi, ++m_id) { -- GitLab