diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 08123f1c5f27e9362da40dec72a7c169abb9a5ef..4f8501b0d66c8d86c752c8097d71ebe3dde71e90 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -168,7 +168,7 @@ tracking_geometry_debug: needs: - ["common:detector"] script: - - root -b -q "scripts/test_ACTS.cxx+(\"${DETECTOR_PATH}/athena.xml\")" || true | tee geo/tracking_geometry_debug.out + - root -b -q "scripts/test_ACTS.cxx+(\"${DETECTOR_PATH}/athena.xml\")" | tee geo/tracking_geometry_debug.out detector:config_testing: stage: test diff --git a/athena.xml b/athena.xml index fc0a1cddb37e1b558d54d404bb516c2ecbe07754..4f871f52cc55e637da82448db0056d06d4982174 100644 --- a/athena.xml +++ b/athena.xml @@ -111,10 +111,76 @@ <include ref="ip6/forward_ion_beamline.xml"/> <include ref="ip6/beampipe.xml"/> + <detectors> + <detector id="VertexBarrelSubAssembly_ID" + name="VertexBarrelSubAssembly" + type="DD4hep_SubdetectorAssembly" + vis="TrackerSubAssemblyVis"> + <composite name="VertexBarrel" /> + </detector> + <detector id="VertexEndcapSubAssembly_ID" + name="VertexEndcapSubAssembly" + type="DD4hep_SubdetectorAssembly" + vis="TrackerSubAssemblyVis"> + <composite name="VertexEndcapN" /> + <composite name="VertexEndcapP" /> + </detector> + + <detector id="TrackerEndcapSubAssembly_Inner_ID" + name="TrackerSubAssembly_Inner" + type="DD4hep_SubdetectorAssembly" + vis="TrackerSubAssemblyVis"> + <composite name="TrackerEndcapN_Inner"/> + <composite name="TrackerBarrel_Inner"/> + <composite name="TrackerEndcapP_Inner"/> + </detector> + <detector id="TrackerBarrelSubAssembly_Outer_ID" + name="TrackerSubAssembly_Outer" + type="DD4hep_SubdetectorAssembly" + vis="TrackerSubAssemblyVis"> + <composite name="TrackerBarrel_Outer"/> + <composite name="TrackerEndcapP_Outer"/> + <composite name="TrackerEndcapN_Outer"/> + </detector> + <!-- + <detector id="TrackerBarrelSubAssembly_Inner_ID" + name="TrackerBarrelSubAssembly_Inner" + type="DD4hep_SubdetectorAssembly" + vis="TrackerSubAssemblyVis"> + <composite name="TrackerBarrel_Inner"/> + </detector> + <detector id="TrackerEndcapSubAssembly_Inner_ID" + name="TrackerEndcapSubAssembly_Inner" + type="DD4hep_SubdetectorAssembly" + vis="TrackerSubAssemblyVis"> + <composite name="TrackerEndcapN_Inner"/> + <composite name="TrackerBarrel_Inner"/> + <composite name="TrackerEndcapP_Inner"/> + </detector> + <detector id="TrackerBarrelSubAssembly_Outer_ID" + name="TrackerBarrelSubAssembly_Outer" + type="DD4hep_SubdetectorAssembly" + vis="TrackerSubAssemblyVis"> + <composite name="TrackerBarrel_Outer"/> + </detector> + <detector id="TrackerEndcapSubAssembly_Outer_ID" + name="TrackerEndcapSubAssembly_Outer" + type="DD4hep_SubdetectorAssembly" + vis="TrackerSubAssemblyVis"> + <composite name="TrackerEndcapP_Outer"/> + <composite name="TrackerEndcapN_Outer"/> + </detector> + --> + </detectors> + <include ref="compact/vertex_tracker.xml"/> + <include ref="compact/central_tracker.xml"/> + + <!-- <include ref="compact/rwell_tracker_barrel.xml"/> <include ref="compact/cb_DIRC.xml"/> + --> <include ref="compact/solenoid.xml"/> <include ref="compact/ecal.xml"/> @@ -137,8 +203,6 @@ --> - <detectors> - </detectors> <readouts> </readouts> diff --git a/compact/central_tracker.xml b/compact/central_tracker.xml index a96b634a9fde6e3c246b642fbc2f75a643d5e196..791e13ab7a1d254372ac68e788838b61f16073c9 100644 --- a/compact/central_tracker.xml +++ b/compact/central_tracker.xml @@ -17,8 +17,8 @@ <define> - <constant name="TrackerBarrelSpaceFrame_width" value="42.0*mm"/> - <constant name="TrackerBarrelSpaceFrame_height" value="sqrt(3.0)*42.0*mm/2.0"/> + <constant name="TrackerBarrelSpaceFrame_width" value="40.0*mm"/> + <constant name="TrackerBarrelSpaceFrame_height" value="sqrt(3.0)*32.0*mm/2.0"/> <constant name="TrackerSensor_thickness" value="0.03*mm"/> <constant name="TrackerBarrel_thickness" value="0.55/100*9.37*cm"/> <constant name="TrackerBarrelService_thickness" value="TrackerBarrel_thickness-TrackerSensor_thickness"/> @@ -64,17 +64,51 @@ <constant name="TrackerEndcapInner_rmin1" value="Beampipe_rmax+1.0*cm"/> <constant name="TrackerEndcapInner_rmin2" value="Beampipe_rmax+1.0*cm"/> + <constant name="TrackerEndcapOuter_rmin" value="3.18*cm"/> + <constant name="TrackerEndcapOuter_rmin1" value="3.18*cm"/> <constant name="TrackerEndcapInner_rmax1" value="18.5*cm"/> <constant name="TrackerEndcapInner_rmax2" value="18.5*cm + TrackerBarrelInner_thickness"/> - <constant name="TrackerEndcapOuter_rmax" value="43.23*cm"/> + <constant name="TrackerEndcapOuter_rmax" value="43.23*cm"/> + <constant name="TrackerEndcapOuter_rmax1" value="43.23*cm"/> <comment> TODO: These should be computed </comment> <constant name="TrackerBarrelInner_NModules" value="30"/> <constant name="TrackerBarrelOuter_NModules" value="56"/> + <constant name="TrackerEndcapInnerModOpeningAngle" value="30.0*degree"/> + <constant name="TrackerEndcapInnerMod1_x1" value="2.0*TrackerEndcapInner_rmin1*sin(TrackerEndcapInnerModOpeningAngle/2.0)"/> + <constant name="TrackerEndcapInnerMod1_x2" value="2.0*TrackerEndcapInner_rmax1*sin(TrackerEndcapInnerModOpeningAngle/2.0)"/> + <constant name="TrackerEndcapInnerMod1_y" value="TrackerEndcapInner_rmax1*cos(TrackerEndcapInnerModOpeningAngle/2.0) - TrackerEndcapInner_rmin1"/> + + <constant name="TrackerEndcapOuterModOpeningAngle" value="30.0*degree"/> + <constant name="TrackerEndcapOuterMod1_x1" value="2.0*TrackerEndcapOuter_rmin1*sin(TrackerEndcapOuterModOpeningAngle/2.0)"/> + <constant name="TrackerEndcapOuterMod1_x2" value="2.0*TrackerEndcapOuter_rmax1*sin(TrackerEndcapOuterModOpeningAngle/2.0)"/> + <constant name="TrackerEndcapOuterMod1_y" value="TrackerEndcapOuter_rmax1*cos(TrackerEndcapOuterModOpeningAngle/2.0) - TrackerEndcapOuter_rmin1"/> + + + <!-- + <constant name="GEMTrackerEndcap_zmin" value="BarrelTracking_length/2.0"/> + <constant name="GEMTrackerEndcap_NLayers" value="1"/> + <constant name="GEMTrackerEndcapFoilOpeningAngle" value="30.1*degree"/> + <constant name="GEMTrackerEndcapFoilX1" value="43.0 * mm"/> + + <constant name="GEMTrackerEndcapLayer_thickness" value="ForwardTrackingGEMLength/GEMTrackerEndcap_NLayers"/> + <constant name="GEMTrackerEndcapFoil_rmin" value="GEMTrackerEndcapFoilX1/(tan(GEMTrackerEndcapFoilOpeningAngle/2.0)*2.0)"/> + <constant name="GEMTrackerEndcapFoilY" value="BarrelTracking_rmax- GEMTrackerEndcapFoil_rmin- 1.0*cm"/> + <constant name="GEMTrackerEndcapFoilX2" value="2*GEMTrackerEndcapFoilY*tan(GEMTrackerEndcapFoilOpeningAngle/2.0) + GEMTrackerEndcapFoilX1"/> + <constant name="GEMTrackerEndcapFoil_rmax" value="(GEMTrackerEndcapFoilY+GEMTrackerEndcapFoil_rmin)/(cos(GEMTrackerEndcapFoilOpeningAngle/2.0))"/> + + + // Frame parameters accoring to Kondo's sbsCrossSection.pdf file), + <constant name="GEMTrackerEndcapFrame_thickness" value="18.0 * mm"/> + <constant name="GEMTrackerEndcapFrameBotEdge_width" value="30.0 * mm"/> + <constant name="GEMTrackerEndcapFrameTopEdge_width" value="30.0 * mm"/> + <constant name="GEMTrackerEndcapFrameSideEdge_width" value=" 8.0 * mm"/> + --> + </define> <display> @@ -82,6 +116,35 @@ <detectors> + + <!-- + <detector id="TrackerBarrelSubAssembly_Inner_ID" + name="TrackerBarrelSubAssembly_Inner" + type="DD4hep_SubdetectorAssembly" + vis="TrackerSubAssemblyVis"> + <composite name="TrackerBarrel_Inner"/> + </detector> + <detector id="TrackerEndcapSubAssembly_Inner_ID" + name="TrackerEndcapSubAssembly_Inner" + type="DD4hep_SubdetectorAssembly" + vis="TrackerSubAssemblyVis"> + <composite name="TrackerEndcapN_Inner"/> + <composite name="TrackerEndcapP_Inner"/> + </detector> + <detector id="TrackerBarrelSubAssembly_Outer_ID" + name="TrackerBarrelSubAssembly_Outer" + type="DD4hep_SubdetectorAssembly" + vis="TrackerSubAssemblyVis"> + <composite name="TrackerBarrel_Outer"/> + </detector> + <detector id="TrackerEndcapSubAssembly_Outer_ID" + name="TrackerEndcapSubAssembly_Outer" + type="DD4hep_SubdetectorAssembly" + vis="TrackerSubAssemblyVis"> + <composite name="TrackerEndcapP_Outer"/> + <composite name="TrackerEndcapN_Outer"/> + </detector> + --> <comment> ----------------------------------- Inner Tracker Subassembly (group 1) @@ -89,18 +152,10 @@ Note: Endcap trackers are using SimpleDiskTracker construction. This should be changed to something more detailed in the future. </comment> - <detector id="TrackerSubAssemblyLayer1_ID" - name="TrackerSubAssemblyLayer1" - type="DD4hep_SubdetectorAssembly" - vis="TrackerSubAssemblyVis"> - <composite name="TrackerEndcapN_Layer1"/> - <composite name="TrackerEndcapP_Layer1"/> - <composite name="TrackerBarrel_Layer1"/> - </detector> <detector - id="TrackerBarrel_Layer1_ID" - name="TrackerBarrel_Layer1" + id="TrackerBarrel_Inner_ID" + name="TrackerBarrel_Inner" type="athena_TrackerBarrel" readout="TrackerBarrelHits" insideTrackingVolume="true"> @@ -112,16 +167,20 @@ Tracker Barrel Modules </comment> <module name="TrackerBarrelInner_Module1" vis="PurpleVis"> - <frame + <frame material="CarbonFiber_25percent" vis="BlueGreenVis" width="TrackerBarrelSpaceFrame_width" height="TrackerBarrelSpaceFrame_height" length="TrackerBarrelInner_length1" - thickness="0.1*mm" material="CarbonFiber_25percent" vis="BlueGreenVis" /> + thickness="0.1*mm" /> + <module_component name="peek1" material="PEEK" sensitive="false" + width="TrackerBarrelSpaceFrame_width" length="TrackerBarrelInner_length1-4*mm" thickness="2.0*mm" /> <module_component name="silicon" width="TrackerBarrelSpaceFrame_width" - length="TrackerBarrelInner_length1-0.1*mm" thickness="0.05*mm" material="Silicon" sensitive="true"> - <position z="-0.025*mm" y="0*mm"/> + length="TrackerBarrelInner_length1-5*mm" thickness="0.05*mm" material="Silicon" sensitive="true"> + <!--position z="-0.025*mm" y="0*mm"/--> </module_component> + <module_component name="peek1" material="PEEK" sensitive="false" + width="TrackerBarrelSpaceFrame_width" length="TrackerBarrelInner_length1-6*mm" thickness="2.0*mm" /> </module> <comment> Tracker Barrel Inner Layers @@ -129,7 +188,7 @@ <layer module="TrackerBarrelInner_Module1" id="1" vis="VertexVis"> <barrel_envelope inner_r="TrackerBarrelInner_rmin1-TrackerBarrelLayer_rOffset" - outer_r="TrackerBarrelInner_rmin1-TrackerBarrelLayer_rOffset + TrackerBarrelInner_thickness" + outer_r="TrackerBarrelInner_rmin1-TrackerBarrelLayer_rOffset + TrackerBarrelInner_thickness-1.0*mm" z_length="TrackerBarrelInner_length1"/> <rphi_layout phi_tilt="10.0*degree" nphi="TrackerBarrelInner_NModules" phi0="0.0" rc="TrackerBarrelInner_rmin1" dr="0.0 * mm"/> <z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/> @@ -144,64 +203,117 @@ </layer> </detector> - <detector id="TrackerEndcapP_Layer1_ID" - name="TrackerEndcapP_Layer1" + <detector + id="TrackerEndcapP_Inner_ID" + name="TrackerEndcapP_Inner" + type="refdet_TrapEndcapTracker" + readout="TrackerEndcapHits" + vis="AnlRed" + reflect="false"> + <module name="Module1" vis="AnlProcess_Blue"> + <trd x1="TrackerEndcapInnerMod1_x1/2.0" x2="TrackerEndcapInnerMod1_x2/2.0" z="TrackerEndcapInnerMod1_y/2"/> + <module_component thickness="1.0*mm" material="PEEK"/> + <module_component thickness="500.0*um" material="Silicon" sensitive="true"/> + <module_component thickness="1.0*mm" material="PEEK"/> + </module> + <layer id="1"> + <envelope vis="AnlRed" + rmin="TrackerEndcapInner_rmin1" + rmax="TrackerEndcapInner_rmax2" + length="TrackerEndcapInnerLayer_dz" + zstart="TrackerEndcapInner_zmin" /> + <ring vis="AnlRed" + r="TrackerEndcapInner_rmin1+TrackerEndcapInnerMod1_y/2.0" + zstart="5.0*mm" + nmodules="12" dz="5 * mm" module="Module1" /> + </layer> + </detector> + + <detector + id="TrackerEndcapN_Inner_ID" + name="TrackerEndcapN_Inner" + type="refdet_TrapEndcapTracker" + readout="TrackerEndcapHits" + vis="AnlRed" + reflect="true"> + <module name="Module1" vis="AnlProcess_Blue"> + <trd x1="TrackerEndcapInnerMod1_x1/2.0" x2="TrackerEndcapInnerMod1_x2/2.0" z="TrackerEndcapInnerMod1_y/2"/> + <module_component thickness="1.0*mm" material="PEEK"/> + <module_component thickness="500.0*um" material="Silicon" sensitive="true"/> + <module_component thickness="1.0*mm" material="PEEK"/> + </module> + <layer id="1"> + <envelope vis="AnlRed" + rmin="TrackerEndcapInner_rmin1" + rmax="TrackerEndcapInner_rmax2" + length="TrackerEndcapInnerLayer_dz" + zstart="TrackerEndcapInner_zmin" /> + <ring vis="AnlRed" + r="TrackerEndcapInner_rmin1+TrackerEndcapInnerMod1_y/2.0" zstart="5.0*mm" + nmodules="12" dz="5 * mm" module="Module1" /> + </layer> + </detector> + + <!-- + <detector id="TrackerEndcapP_Inner_ID" + name="TrackerEndcapP_Inner" type="athena_SimpleDiskTracker" readout="TrackerEndcapHits" insideTrackingVolume="true" reflect="false" vis="AnlRed"> <position x="0" y="0" z="0"/> <layer id="1" vis="AnlOrange" - inner_z="TrackerEndcapInner_zmin + 0*TrackerEndcapInnerLayer_dz" + inner_z="TrackerEndcapInner_zmin + 0.5*TrackerEndcapInnerLayer_dz" inner_r="TrackerEndcapInner_rmin1" outer_r="TrackerEndcapInner_rmax1"> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> <slice material="Silicon" thickness="0.5*mm" vis="AnlOrange" sensitive="true" /> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> </layer> <layer id="2" vis="AnlOrange" - inner_z="TrackerEndcapInner_zmin + 1*TrackerEndcapInnerLayer_dz" + inner_z="TrackerEndcapInner_zmin + 1.5*TrackerEndcapInnerLayer_dz" inner_r="TrackerEndcapInner_rmin2" outer_r="TrackerEndcapInner_rmax2"> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> <slice material="Silicon" thickness="0.5*mm" vis="AnlOrange" sensitive="true" /> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> </layer> </detector> - <detector id="TrackerEndcapN_Layer1_ID" - name="TrackerEndcapN_Layer1" + <detector id="TrackerEndcapN_Inner_ID" + name="TrackerEndcapN_Inner" type="athena_SimpleDiskTracker" readout="TrackerEndcapHits" insideTrackingVolume="true" reflect="true" vis="AnlRed"> <position x="0" y="0" z="-1.0e-6*mm"/> <layer id="1" vis="AnlOrange" - inner_z="TrackerEndcapInner_zmin + 0*TrackerEndcapInnerLayer_dz" + inner_z="TrackerEndcapInner_zmin + 0.5*TrackerEndcapInnerLayer_dz" inner_r="TrackerEndcapInner_rmin1" outer_r="TrackerEndcapInner_rmax1"> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> <slice material="Silicon" thickness="0.5*mm" vis="AnlOrange" sensitive="true" /> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> </layer> <layer id="2" vis="AnlOrange" - inner_z="TrackerEndcapInner_zmin + 1*TrackerEndcapInnerLayer_dz" + inner_z="TrackerEndcapInner_zmin + 1.5*TrackerEndcapInnerLayer_dz" inner_r="TrackerEndcapInner_rmin2" outer_r="TrackerEndcapInner_rmax2"> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> <slice material="Silicon" thickness="0.5*mm" vis="AnlOrange" sensitive="true" /> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> </layer> </detector> + --> <comment> ----------------------------------- Outer Tracker Subassembly (group 2) ----------------------------------- </comment> - <detector id="TrackerSubAssemblyLayer2_ID" - name="TrackerSubAssemblyLayer2" - type="DD4hep_SubdetectorAssembly" - vis="TrackerSubAssemblyVis"> - <composite name="TrackerEndcapN_Layer2"/> - <composite name="TrackerEndcapP_Layer2"/> - <composite name="TrackerBarrel_Layer2"/> - </detector> <detector - id="TrackerBarrel_Layer2_ID" - name="TrackerBarrel_Layer2" + id="TrackerBarrel_Outer_ID" + name="TrackerBarrel_Outer" type="athena_TrackerBarrel" readout="TrackerBarrelHits" insideTrackingVolume="true"> @@ -213,17 +325,20 @@ Tracker Barrel Modules </comment> <module name="TrackerBarrelOuter_Module1" vis="PurpleVis"> - <frame + <frame material="CarbonFiber_25percent" vis="BlueGreenVis" width="TrackerBarrelSpaceFrame_width" height="TrackerBarrelSpaceFrame_height" length="TrackerBarrelOuter_length1" - thickness="0.1*mm" material="CarbonFiber_25percent" vis="BlueGreenVis" /> + thickness="0.1*mm" /> + <module_component name="peek1" material="PEEK" sensitive="false" + width="TrackerBarrelSpaceFrame_width" length="TrackerBarrelOuter_length1-0.1*mm" thickness="2.0*mm" /> <module_component name="silicon" width="TrackerBarrelSpaceFrame_width" length="TrackerBarrelOuter_length1-0.1*mm" thickness="0.05*mm" material="Silicon" sensitive="true"> - <position z="-0.025*mm" y="0*mm"/> </module_component> + <module_component name="peek2" material="PEEK" sensitive="false" + width="TrackerBarrelSpaceFrame_width" length="TrackerBarrelOuter_length1-0.1*mm" thickness="2.0*mm" /> </module> <comment> Tracker Barrel Inner Layers @@ -231,7 +346,7 @@ <layer module="TrackerBarrelOuter_Module1" id="1" vis="VertexVis"> <barrel_envelope inner_r="TrackerBarrelOuter_rmin1-TrackerBarrelLayer_rOffset" - outer_r="TrackerBarrelOuter_rmin1-TrackerBarrelLayer_rOffset + TrackerBarrelOuter_thickness" + outer_r="TrackerBarrelOuter_rmin1-TrackerBarrelLayer_rOffset + TrackerBarrelOuter_thickness-1.0*mm" z_length="TrackerBarrelOuter_length"/> <rphi_layout phi_tilt="10.0*degree" nphi="TrackerBarrelOuter_NModules" phi0="0.0" rc="TrackerBarrelOuter_rmin1" dr="0.0 * mm"/> <z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/> @@ -246,59 +361,124 @@ </layer> </detector> - <detector id="TrackerEndcapP_Layer2_ID" - name="TrackerEndcapP_Layer2" + <detector + id="TrackerEndcapP_Outer_ID" + name="TrackerEndcapP_Outer" + type="refdet_TrapEndcapTracker" + readout="TrackerEndcapHits" + vis="AnlRed" + reflect="false"> + <module name="Module1" vis="AnlProcess_Blue"> + <trd x1="TrackerEndcapOuterMod1_x1/2.0" x2="TrackerEndcapOuterMod1_x2/2.0" z="TrackerEndcapOuterMod1_y/2"/> + <module_component thickness="1.0*mm" material="PEEK"/> + <module_component thickness="500.0*um" material="Silicon" sensitive="true"/> + <module_component thickness="1.0*mm" material="PEEK"/> + </module> + <layer id="1"> + <envelope vis="AnlRed" + rmin="TrackerEndcapOuter_rmin1" + rmax="TrackerEndcapOuter_rmax" + length="TrackerEndcapOuterLayer_dz" + zstart="TrackerEndcapOuter_zmin" /> + <ring vis="AnlRed" + r="TrackerEndcapOuter_rmin1+TrackerEndcapOuterMod1_y/2.0" + zstart="5.0*mm" + nmodules="12" dz="5 * mm" module="Module1" /> + </layer> + </detector> + + <detector + id="TrackerEndcapN_Outer_ID" + name="TrackerEndcapN_Outer" + type="refdet_TrapEndcapTracker" + readout="TrackerEndcapHits" + vis="AnlRed" + reflect="true"> + <module name="Module1" vis="AnlProcess_Blue"> + <trd x1="TrackerEndcapOuterMod1_x1/2.0" x2="TrackerEndcapOuterMod1_x2/2.0" z="TrackerEndcapOuterMod1_y/2"/> + <module_component thickness="1.0*mm" material="PEEK"/> + <module_component thickness="500.0*um" material="Silicon" sensitive="true"/> + <module_component thickness="1.0*mm" material="PEEK"/> + </module> + <layer id="1"> + <envelope vis="AnlRed" + rmin="TrackerEndcapOuter_rmin1" + rmax="TrackerEndcapOuter_rmax" + length="TrackerEndcapOuterLayer_dz" + zstart="TrackerEndcapOuter_zmin" /> + <ring vis="AnlRed" + r="TrackerEndcapOuter_rmin1+TrackerEndcapOuterMod1_y/2.0" + zstart="5.0*mm" + nmodules="12" dz="5 * mm" module="Module1" /> + </layer> + </detector> + <!-- + <detector id="TrackerEndcapP_Outer_ID" + name="TrackerEndcapP_Outer" type="athena_SimpleDiskTracker" insideTrackingVolume="true" readout="TrackerEndcapHits" reflect="false" vis="AnlRed"> <position x="0" y="0" z="0"/> <layer id="1" vis="AnlOrange" - inner_z="TrackerEndcapOuter_zmin + 0*TrackerEndcapOuterLayer_dz" + inner_z="TrackerEndcapOuter_zmin + 0.5*TrackerEndcapOuterLayer_dz" inner_r="TrackerEndcapOuter_rmin" outer_r="TrackerEndcapOuter_rmax"> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> <slice material="Silicon" thickness="0.5*mm" vis="AnlOrange" sensitive="true" /> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> </layer> <layer id="2" vis="AnlOrange" - inner_z="TrackerEndcapOuter_zmin + 1*TrackerEndcapOuterLayer_dz" + inner_z="TrackerEndcapOuter_zmin + 1.5*TrackerEndcapOuterLayer_dz" inner_r="TrackerEndcapOuter_rmin" outer_r="TrackerEndcapOuter_rmax"> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> <slice material="Silicon" thickness="0.5*mm" vis="AnlOrange" sensitive="true" /> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> </layer> <layer id="3" vis="AnlOrange" - inner_z="TrackerEndcapOuter_zmin + 2*TrackerEndcapOuterLayer_dz" + inner_z="TrackerEndcapOuter_zmin + 2.5*TrackerEndcapOuterLayer_dz" inner_r="TrackerEndcapOuter_rmin" outer_r="TrackerEndcapOuter_rmax"> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> <slice material="Silicon" thickness="0.5*mm" vis="AnlOrange" sensitive="true" /> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> </layer> </detector> - <detector id="TrackerEndcapN_Layer2_ID" - name="TrackerEndcapN_Layer2" + <detector id="TrackerEndcapN_Outer_ID" + name="TrackerEndcapN_Outer" type="athena_SimpleDiskTracker" insideTrackingVolume="true" readout="TrackerEndcapHits" reflect="true" vis="AnlRed"> <position x="0" y="0" z="-1.0e-6*mm"/> <layer id="1" vis="AnlOrange" - inner_z="TrackerEndcapOuter_zmin + 0*TrackerEndcapOuterLayer_dz" + inner_z="TrackerEndcapOuter_zmin + 0.5*TrackerEndcapOuterLayer_dz" inner_r="TrackerEndcapOuter_rmin" outer_r="TrackerEndcapOuter_rmax"> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> <slice material="Silicon" thickness="0.5*mm" vis="AnlOrange" sensitive="true" /> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> </layer> <layer id="2" vis="AnlOrange" - inner_z="TrackerEndcapOuter_zmin + 1*TrackerEndcapOuterLayer_dz" + inner_z="TrackerEndcapOuter_zmin + 1.5*TrackerEndcapOuterLayer_dz" inner_r="TrackerEndcapOuter_rmin" outer_r="TrackerEndcapOuter_rmax"> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> <slice material="Silicon" thickness="0.5*mm" vis="AnlOrange" sensitive="true" /> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> </layer> <layer id="3" vis="AnlOrange" - inner_z="TrackerEndcapOuter_zmin + 2*TrackerEndcapOuterLayer_dz" + inner_z="TrackerEndcapOuter_zmin + 2.5*TrackerEndcapOuterLayer_dz" inner_r="TrackerEndcapOuter_rmin" outer_r="TrackerEndcapOuter_rmax"> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> <slice material="Silicon" thickness="0.5*mm" vis="AnlOrange" sensitive="true" /> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> </layer> </detector> + --> </detectors> @@ -309,7 +489,7 @@ </readout> <readout name="TrackerEndcapHits"> <segmentation type="CartesianGridXY" grid_size_x="0.20*mm" grid_size_y="0.20*mm" /> - <id>system:8,barrel:2,layer:8,slice:10,sensor:2,x:32:-16,y:-16</id> + <id>system:8,barrel:2,layer:4,module:12,sensor:2,x:32:-16,y:-16</id> </readout> </readouts> diff --git a/compact/definitions.xml b/compact/definitions.xml index c1afa33368c12c25877477c2347102f3ec5963d4..01b81b0a4ad64ca7bd42533f4668597b757db286 100644 --- a/compact/definitions.xml +++ b/compact/definitions.xml @@ -69,7 +69,8 @@ Layer 5 subassembly ID: 30 </comment> <constant name="VertexBarrel_ID" value="25"/> - <constant name="VertexSubAssembly_ID" value="26"/> + <constant name="VertexBarrelSubAssembly_ID" value="26"/> + <constant name="VertexEndcapSubAssembly_ID" value="27"/> <constant name="VertexEndcapP_ID" value="30"/> <constant name="VertexEndcapN_ID" value="40"/> @@ -100,20 +101,22 @@ </comment> - <constant name="TrackerSubAssembly_ID" value="50"/> - <constant name="TrackerSubAssemblyLayer1_ID" value="51"/> - <constant name="TrackerSubAssemblyLayer2_ID" value="52"/> - <constant name="TrackerSubAssemblyLayer3_ID" value="53"/> - <constant name="TrackerSubAssemblyLayer4_ID" value="54"/> - <constant name="TrackerSubAssemblyLayer5_ID" value="55"/> + <constant name="TrackerBarrelSubAssembly_Inner_ID" value="50"/> + <constant name="TrackerEndcapSubAssembly_Inner_ID" value="51"/> - <constant name="TrackerBarrel_Layer1_ID" value="56"/> - <constant name="TrackerEndcapP_Layer1_ID" value="57"/> - <constant name="TrackerEndcapN_Layer1_ID" value="58"/> + <constant name="TrackerBarrelSubAssembly_Outer_ID" value="52"/> + <constant name="TrackerEndcapSubAssembly_Outer_ID" value="53"/> - <constant name="TrackerBarrel_Layer2_ID" value="59"/> - <constant name="TrackerEndcapP_Layer2_ID" value="60"/> - <constant name="TrackerEndcapN_Layer2_ID" value="61"/> + <!--constant name="TrackerSubAssemblyLayer4_ID" value="54"/--> + <!--constant name="TrackerSubAssemblyLayer5_ID" value="55"/--> + + <constant name="TrackerBarrel_Inner_ID" value="56"/> + <constant name="TrackerEndcapP_Inner_ID" value="57"/> + <constant name="TrackerEndcapN_Inner_ID" value="58"/> + + <constant name="TrackerBarrel_Outer_ID" value="59"/> + <constant name="TrackerEndcapP_Outer_ID" value="60"/> + <constant name="TrackerEndcapN_Outer_ID" value="61"/> <constant name="TrackerBarrel_Layer3_ID" value="62"/> <constant name="TrackerEndcapP_Layer3_ID" value="63"/> @@ -378,8 +381,10 @@ <constant name="VertexTrackerEndcapP_rmax" value="VertexTrackerBarrel_rmax"/> <constant name="VertexTrackerEndcapN_rmax" value="VertexTrackerBarrel_rmax"/> - <constant name="VertexTrackerEndcapP_rmin" value="VertexTrackerBarrel_rmin"/> - <constant name="VertexTrackerEndcapN_rmin" value="VertexTrackerBarrel_rmin"/> + + <constant name="VertexTrackerEndcapP_rmin" value="Beampipe_rmax+5.0*mm"/> + <constant name="VertexTrackerEndcapN_rmin" value="Beampipe_rmax+5.0*mm"/> + <constant name="VertexTrackerEndcapP_zmax" value="500.0*mm/2.0"/> <constant name="VertexTrackerEndcapN_zmax" value="500.0*mm/2.0"/> diff --git a/compact/vertex_tracker.xml b/compact/vertex_tracker.xml index 6a9c3f4cb81d06caee7460ff5b01ebe393eaf9b2..b32f9166962059ae17b2d24aa8474c8095be710f 100644 --- a/compact/vertex_tracker.xml +++ b/compact/vertex_tracker.xml @@ -18,7 +18,6 @@ <constant name="VertexBarrel_NModules2" value="24"/> <!-- - <constant name="VertexTrackerEndcapP_rmin" value="VertexTrackerInnerRadius"/> <constant name="VertexTrackerEndcapP_rmax" value="VertexTrackerOuterRadius"/> <constant name="VertexTrackerEndcapP_zmin" value="VertexTrackerBarrel_length + 5*mm"/> @@ -32,8 +31,13 @@ <constant name="VertexEndcap_NLayers" value="2"/> <constant name="VertexTrackerEndcap_delta" value="(VertexTrackerEndcapP_zmax - VertexTrackerEndcapP_zmin)/VertexEndcap_NLayers"/> + <constant name="VertexEndcapLayer_dz" value="(VertexTrackerEndcapP_zmax - VertexTrackerEndcapP_zmin)/VertexEndcap_NLayers"/> + + <constant name="VertexEndcapModOpeningAngle" value="30.0*degree"/> + <constant name="VertexEndcapMod1_x1" value="2.0*VertexTrackerEndcapP_rmin*sin(VertexEndcapModOpeningAngle/2.0)"/> + <constant name="VertexEndcapMod1_x2" value="2.0*VertexTrackerEndcapP_rmax*sin(VertexEndcapModOpeningAngle/2.0)"/> + <constant name="VertexEndcapMod1_y" value="VertexTrackerEndcapP_rmax*cos(VertexEndcapModOpeningAngle/2.0) - VertexTrackerEndcapP_rmin"/> - </define> @@ -43,54 +47,75 @@ <detectors> - <detector id="VertexSubAssembly_ID" - name="VertexSubAssembly" + <!-- + <detector id="VertexBarrelSubAssembly_ID" + name="VertexBarrelSubAssembly" type="DD4hep_SubdetectorAssembly" vis="TrackerSubAssemblyVis"> - <composite name="VertexEndcapN"/> - <composite name="VertexEndcapP"/> - <composite name="VertexBarrel"/> + <composite name="VertexBarrel" /> </detector> + <detector id="VertexEndcapSubAssembly_ID" + name="VertexEndcapSubAssembly" + type="DD4hep_SubdetectorAssembly" + vis="TrackerSubAssemblyVis"> + <composite name="VertexEndcapN" /> + <composite name="VertexEndcapP" /> + </detector> + --> - - <detector + <detector id="VertexBarrel_ID" name="VertexBarrel" type="athena_VertexBarrel" readout="VertexBarrelHits" insideTrackingVolume="true"> - <dimensions - rmin="VertexBarrel_rmin-VertexBarrelLayer_rOffset" - rmax="VertexBarrel_rmax-VertexBarrelLayer_rOffset" + <dimensions + rmin="VertexBarrel_rmin-VertexBarrelLayer_rOffset" + rmax="VertexBarrel_rmax-VertexBarrelLayer_rOffset" length="VertexBarrel_length"/> - <comment> Define available modules </comment> + <comment>Barrel Modules</comment> <module name="Module1" vis="PurpleVis"> - <frame width="15*mm" height="10.0*mm" - length="VertexBarrel_length" thickness="0.1 * mm" material="CarbonFiber_25percent" vis="BlueGreenVis" /> - <module_component name="silicon" - width="14.0*mm" length="VertexBarrel_length-0.1*mm" thickness="0.05*mm" material="Silicon" sensitive="true"> - <position z="-0.025*mm" y="0*mm"/> + <frame material="CarbonFiber_25percent" vis="BlueGreenVis" + width="15*mm" + height="10.0*mm" + length="VertexBarrel_length-1.0*mm" + thickness="0.1 * mm"/> + <module_component name="peek1" material="PEEK" sensitive="false" + width="14.0*mm" length="VertexBarrel_length-0.1*mm" thickness="2.0*mm" /> + <module_component name="silicon" material="Silicon" sensitive="true" + width="14.0*mm" length="VertexBarrel_length-0.1*mm" thickness="1.0*mm"> + <!--position x="0" y="0*mm" z="-0.025*mm" --> /> </module_component> + <module_component name="peek2" material="PEEK" sensitive="false" + width="14.0*mm" length="VertexBarrel_length-0.1*mm" thickness="2.0*mm" /> </module> <module name="Module2"> - <frame width="15*mm" height="10.0*mm" length="VertexBarrel_length" thickness="0.1 * mm" material="CarbonFiber_25percent" vis="BlueGreenVis" /> - <module_component name="silicon" - width="14.0*mm" length="VertexBarrel_length-0.1*mm" thickness="0.05*mm" material="Silicon" sensitive="true"> - <position z="-0.025*mm" y="0*mm"/> + <frame material="CarbonFiber_25percent" vis="BlueGreenVis" + width="15*mm" + height="10.0*mm" + length="VertexBarrel_length-1.0*mm" + thickness="0.1 * mm"/> + <module_component name="peek1" material="PEEK" sensitive="false" + width="14.0*mm" length="VertexBarrel_length-0.1*mm" thickness="2.0*mm" /> + <module_component name="silicon" material="Silicon" sensitive="true" + width="14.0*mm" length="VertexBarrel_length-0.1*mm" thickness="1.0*mm"> + <!--position x="0" y="0*mm" z="-0.025*mm"/--> </module_component> + <module_component name="peek2" material="PEEK" sensitive="false" + width="14.0*mm" length="VertexBarrel_length-0.1*mm" thickness="2.0*mm" /> </module> <comment> Layers composed of many arrayed modules </comment> <layer module="Module1" id="1" vis="VertexVis"> - <barrel_envelope - inner_r="VertexBarrel_rmin1-VertexBarrelLayer_rOffset" - outer_r="VertexBarrel_rmin2-VertexBarrelLayer_rOffset" + <barrel_envelope + inner_r="VertexBarrel_rmin1-VertexBarrelLayer_rOffset" + outer_r="VertexBarrel_rmin2-VertexBarrelLayer_rOffset-1.0*mm" z_length="VertexBarrel_length"/> <rphi_layout phi_tilt="10.0*degree" nphi="VertexBarrel_NModules1" phi0="0.0" rc="VertexBarrel_rmin1" dr="0.0 * mm"/> <z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/> </layer> <layer module="Module2" id="2" vis="VertexVis"> - <barrel_envelope - inner_r="VertexBarrel_rmin2-VertexBarrelLayer_rOffset" + <barrel_envelope + inner_r="VertexBarrel_rmin2-VertexBarrelLayer_rOffset" outer_r="VertexBarrel_rmax-VertexBarrelLayer_rOffset" z_length="VertexBarrel_length"/> <rphi_layout phi_tilt="10.0*degree" nphi="VertexBarrel_NModules2" phi0="0.0" rc="VertexBarrel_rmin2" dr="0.0 * mm"/> @@ -98,45 +123,111 @@ </layer> </detector> + <detector + id="VertexEndcapP_ID" + name="VertexEndcapP" + type="refdet_TrapEndcapTracker" + readout="VertexEndcapHits" + vis="AnlRed" + reflect="false"> + <module name="Module1" vis="AnlProcess_Blue"> + <trd x1="VertexEndcapMod1_x1/2.0" x2="VertexEndcapMod1_x2/2.0" z="VertexEndcapMod1_y/2"/> + <module_component thickness="1.0*mm" material="PEEK"/> + <module_component thickness="500.0*um" material="Silicon" sensitive="true"/> + <module_component thickness="1.0*mm" material="PEEK"/> + </module> + <layer id="1"> + <envelope vis="AnlRed" + rmin="VertexTrackerEndcapP_rmin" + rmax="VertexTrackerEndcapP_rmax" + length="VertexEndcapLayer_dz" + zstart="VertexTrackerEndcapP_zmin" /> + <ring vis="AnlRed" + r="VertexTrackerEndcapP_rmin+VertexEndcapMod1_y/2.0" + zstart="5.0*mm" + nmodules="12" dz="5 * mm" module="Module1" /> + </layer> + </detector> + + + <detector + id="VertexEndcapN_ID" + name="VertexEndcapN" + type="refdet_TrapEndcapTracker" + readout="VertexEndcapHits" + vis="AnlRed" + reflect="true"> + <module name="Module1" vis="AnlProcess_Blue"> + <trd x1="VertexEndcapMod1_x1/2.0" x2="VertexEndcapMod1_x2/2.0" z="VertexEndcapMod1_y/2"/> + <module_component thickness="1.0*mm" material="PEEK"/> + <module_component thickness="500.0*um" material="Silicon" sensitive="true"/> + <module_component thickness="1.0*mm" material="PEEK"/> + </module> + <layer id="1"> + <envelope vis="AnlRed" + rmin="VertexTrackerEndcapN_rmin" + rmax="VertexTrackerEndcapN_rmax" + length="VertexEndcapLayer_dz" + zstart="VertexTrackerEndcapN_zmin" /> + <ring vis="AnlRed" + r="VertexTrackerEndcapN_rmin+VertexEndcapMod1_y/2.0" + zstart="5.0*mm" + nmodules="12" dz="5 * mm" module="Module1" /> + </layer> + </detector> + + + <!-- <detector id="VertexEndcapP_ID" name="VertexEndcapP" type="athena_SimpleDiskTracker" + readout="VertexEndcapHits" insideTrackingVolume="true" reflect="false" vis="AnlRed"> - <position x="0" y="0" z="0"/> + <position x="0" y="0" z="0.0*mm"/> <layer id="1" vis="AnlOrange" - inner_z="VertexTrackerEndcapP_zmin + 0*VertexTrackerEndcap_delta" - inner_r="VertexTrackerEndcapP_rmin" + inner_z="VertexTrackerEndcapP_zmin + 0.5*VertexTrackerEndcap_delta" + inner_r="VertexTrackerEndcapP_rmin-3*mm" outer_r="VertexTrackerEndcapP_rmax"> <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> + <slice material="Silicon" thickness="1.0*mm" vis="AnlOrange" sensitive="true"/> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> </layer> <layer id="2" vis="AnlOrange" - inner_z="VertexTrackerEndcapP_zmin + 1*VertexTrackerEndcap_delta" + inner_z="VertexTrackerEndcapP_zmin + 1.5*VertexTrackerEndcap_delta" inner_r="VertexTrackerEndcapP_rmin" outer_r="VertexTrackerEndcapP_rmax"> <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> + <slice material="Silicon" thickness="1.0*mm" vis="AnlOrange" sensitive="true"/> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> </layer> </detector> <detector id="VertexEndcapN_ID" name="VertexEndcapN" - type="ref_DiskTracker" - insideTrackingVolume="true" reflect="true" vis="AnlRed"> - <position x="0" y="0" z="-1.0e-6*mm"/> + type="athena_SimpleDiskTracker" + readout="VertexEndcapHits" + insideTrackingVolume="true" + reflect="true" vis="AnlRed"> + <position x="0" y="0" z="-0.0*mm-1.0e-9*mm"/> <layer id="1" vis="AnlOrange" - inner_z="VertexTrackerEndcapN_zmin + 0*VertexTrackerEndcap_delta" + inner_z="VertexTrackerEndcapN_zmin + 0.5*VertexTrackerEndcap_delta" inner_r="VertexTrackerEndcapN_rmin" outer_r="VertexTrackerEndcapN_rmax"> <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> + <slice material="Silicon" thickness="1.0*mm" vis="AnlOrange" sensitive="true"/> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> </layer> <layer id="2" vis="AnlOrange" - inner_z="VertexTrackerEndcapN_zmin + 1*VertexTrackerEndcap_delta" + inner_z="VertexTrackerEndcapN_zmin + 1.5*VertexTrackerEndcap_delta" inner_r="VertexTrackerEndcapN_rmin" outer_r="VertexTrackerEndcapN_rmax"> <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> + <slice material="Silicon" thickness="1.0*mm" vis="AnlOrange" sensitive="true"/> + <slice material="Air" thickness="1.0*mm" vis="AnlOrange" /> </layer> </detector> - + --> </detectors> <readouts> diff --git a/scripts/test_ACTS.cxx b/scripts/test_ACTS.cxx index cbb6bc6c1e067c68bda2e38ce44d1cf1e0eac5c9..4fffb8be95ff108f1aec82b39e6823e1059c73dd 100644 --- a/scripts/test_ACTS.cxx +++ b/scripts/test_ACTS.cxx @@ -35,14 +35,17 @@ void test_ACTS(const char* compact = "athena.xml"){ //std::unique_ptr<const Acts::TrackingGeometry> auto acts_tracking_geometry = Acts::convertDD4hepDetector (detector.world(),Acts::Logging::Level::VERBOSE); + //acts_tracking_geometry = Acts::convertDD4hepDetector (detector.world(),Acts::Logging::Level::INFO); if(acts_tracking_geometry) { - if(acts_tracking_geometry->highestTrackingVolume()) { - std::cout << " volume name \n "; - std::cout << acts_tracking_geometry->highestTrackingVolume()->volumeName() << std::endl; - } else { - std::cout << "derp\n"; - } + std::cout << "success?\n"; } + // if(acts_tracking_geometry->highestTrackingVolume()) { + // std::cout << " volume name \n "; + // std::cout << acts_tracking_geometry->highestTrackingVolume()->volumeName() << std::endl; + // } else { + // std::cout << "derp\n"; + // } + //} } diff --git a/src/BarrelTrackerWithFrame_geo.cpp b/src/BarrelTrackerWithFrame_geo.cpp index 0b298451ff347f7bb2d85c7e8e1fbf9613d7d401..3dce897b451fd6fa166a95f7722412bab1013db2 100644 --- a/src/BarrelTrackerWithFrame_geo.cpp +++ b/src/BarrelTrackerWithFrame_geo.cpp @@ -102,10 +102,6 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s Volume v_module(m_nam+"_vol", moduleframe, description.material(m_env.materialStr())); v_module.setVisAttributes(description, m_env.visStr()); - // module assembly - Assembly m_vol( m_nam ); - m_vol.placeVolume(v_module, Position(0.0,0.0,frame_height/2)); - int ncomponents = 0; int sensor_number = 1; @@ -113,69 +109,86 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s printout(ERROR, "SiTrackerBarrel", "Logics error in building modules."); throw runtime_error("Logics error in building modules."); } + double total_thickness = 0; + xml_coll_t ci(x_mod, _U(module_component)); + for (ci.reset(), total_thickness = 0.0; ci; ++ci) { + total_thickness += xml_comp_t(ci).thickness(); + } + // module assembly + Assembly m_vol( m_nam ); + m_vol.placeVolume(v_module, Position(0.0,0.0,frame_height/2+total_thickness/2.0)); volumes[m_nam] = m_vol; m_vol.setVisAttributes(description.visAttributes(x_mod.visStr())); + double thickness_sum = -total_thickness/2.0; for (xml_coll_t ci(x_mod, _U(module_component)); ci; ++ci, ++ncomponents) { xml_comp_t x_comp = ci; - xml_comp_t x_pos = x_comp.position(false); - xml_comp_t x_rot = x_comp.rotation(false); - string c_nam = _toString(ncomponents, "component%d"); - Box c_box(x_comp.width() / 2, x_comp.length() / 2, x_comp.thickness() / 2); - Volume c_vol(c_nam, c_box, description.material(x_comp.materialStr())); + xml_comp_t x_pos = x_comp.position(false); + xml_comp_t x_rot = x_comp.rotation(false); + string c_nam = _toString(ncomponents, "component%d"); + Box c_box(x_comp.width() / 2, x_comp.length() / 2, x_comp.thickness() / 2); + Volume c_vol(c_nam, c_box, description.material(x_comp.materialStr())); if (x_pos && x_rot) { Position c_pos(x_pos.x(0), x_pos.y(0), x_pos.z(0)); RotationZYX c_rot(x_rot.z(0), x_rot.y(0), x_rot.x(0)); pv = m_vol.placeVolume(c_vol, Transform3D(c_rot, c_pos)); } else if (x_rot) { - pv = m_vol.placeVolume(c_vol, RotationZYX(x_rot.z(0), x_rot.y(0), x_rot.x(0))); + Position c_pos(0, 0, thickness_sum + x_comp.thickness() / 2.0); + pv = m_vol.placeVolume(c_vol, Transform3D(RotationZYX(x_rot.z(0), x_rot.y(0), x_rot.x(0)),c_pos)); } else if (x_pos) { pv = m_vol.placeVolume(c_vol, Position(x_pos.x(0), x_pos.y(0), x_pos.z(0))); } else { - pv = m_vol.placeVolume(c_vol); + pv = m_vol.placeVolume(c_vol, Position(0,0,thickness_sum+x_comp.thickness()/2.0)); } c_vol.setRegion(description, x_comp.regionStr()); c_vol.setLimitSet(description, x_comp.limitsStr()); c_vol.setVisAttributes(description, x_comp.visStr()); if (x_comp.isSensitive()) { - pv.addPhysVolID(_U(sensor), sensor_number++); + pv.addPhysVolID("sensor", sensor_number++); c_vol.setSensitiveDetector(sens); sensitives[m_nam].push_back(pv); } + thickness_sum += x_comp.thickness(); } } // now build the layers for (xml_coll_t li(x_det, _U(layer)); li; ++li) { - xml_comp_t x_layer = li; + xml_comp_t x_layer = li; xml_comp_t x_barrel = x_layer.child(_U(barrel_envelope)); xml_comp_t x_layout = x_layer.child(_U(rphi_layout)); - xml_comp_t z_layout = x_layer.child(_U(z_layout)); // Get the <z_layout> element. - int lay_id = x_layer.id(); - string m_nam = x_layer.moduleStr(); - string lay_nam = _toString(x_layer.id(), "layer%d"); - Tube lay_tub(x_barrel.inner_r(), x_barrel.outer_r(), x_barrel.z_length()/2.0 ); - Volume lay_vol(lay_nam, lay_tub, air); // Create the layer envelope volume. + xml_comp_t z_layout = x_layer.child(_U(z_layout)); // Get the <z_layout> element. + int lay_id = x_layer.id(); + string m_nam = x_layer.moduleStr(); + string lay_nam = _toString(x_layer.id(), "layer%d"); + Tube lay_tub(x_barrel.inner_r(), x_barrel.outer_r(), x_barrel.z_length() / 2.0); + Volume lay_vol(lay_nam, lay_tub, air); // Create the layer envelope volume. lay_vol.setVisAttributes(description.visAttributes(x_layer.visStr())); - double phi0 = x_layout.phi0(); // Starting phi of first module. - double phi_tilt = x_layout.phi_tilt(); // Phi tilt of a module. - double rc = x_layout.rc(); // Radius of the module center. - int nphi = x_layout.nphi(); // Number of modules in phi. - double rphi_dr = x_layout.dr(); // The delta radius of every other module. - double phi_incr = (M_PI * 2) / nphi; // Phi increment for one module. - double phic = phi0; // Phi of the module center. - double z0 = z_layout.z0(); // Z position of first module in phi. - double nz = z_layout.nz(); // Number of modules to place in z. - double z_dr = z_layout.dr(); // Radial displacement parameter, of every other module. - Volume module_env = volumes[m_nam]; - DetElement lay_elt(sdet, _toString(x_layer.id(), "layer%d"), lay_id); + + double phi0 = x_layout.phi0(); // Starting phi of first module. + double phi_tilt = x_layout.phi_tilt(); // Phi tilt of a module. + double rc = x_layout.rc(); // Radius of the module center. + int nphi = x_layout.nphi(); // Number of modules in phi. + double rphi_dr = x_layout.dr(); // The delta radius of every other module. + double phi_incr = (M_PI * 2) / nphi; // Phi increment for one module. + double phic = phi0; // Phi of the module center. + double z0 = z_layout.z0(); // Z position of first module in phi. + double nz = z_layout.nz(); // Number of modules to place in z. + double z_dr = z_layout.dr(); // Radial displacement parameter, of every other module. + + Volume module_env = volumes[m_nam]; + DetElement lay_elt(sdet, _toString(x_layer.id(), "layer%d"), lay_id); Placements& sensVols = sensitives[m_nam]; // the local coordinate systems of modules in dd4hep and acts differ // see http://acts.web.cern.ch/ACTS/latest/doc/group__DD4hepPlugins.html Acts::ActsExtension* layerExtension = new Acts::ActsExtension(); layerExtension->addType("sensitive cylinder", "layer"); + //layerExtension->addValue(0, "r_min", "envelope"); + //layerExtension->addValue(0, "r_max", "envelope"); + //layerExtension->addValue(0, "z_min", "envelope"); + //layerExtension->addValue(0, "z_max", "envelope"); //layerExtension->addType("axes", "definitions", "XzY"); lay_elt.addExtension<Acts::ActsExtension>(layerExtension); @@ -209,10 +222,11 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s PlacedVolume sens_pv = sensVols[ic]; DetElement comp_de(mod_elt, std::string("de_") + sens_pv.volume().name(), module); comp_de.setPlacement(sens_pv); - Acts::ActsExtension* moduleExtension = new Acts::ActsExtension(); - comp_de.addExtension<Acts::ActsExtension>(moduleExtension); - comp_de.setAttributes(description, sens_pv.volume(), x_layer.regionStr(), x_layer.limitsStr(), - xml_det_t(xmleles[m_nam]).visStr()); + Acts::ActsExtension* sensorExtension = new Acts::ActsExtension(); + //sensorExtension->addType("sensor", "detector"); + comp_de.addExtension<Acts::ActsExtension>(sensorExtension); + //comp_de.setAttributes(description, sens_pv.volume(), x_layer.regionStr(), x_layer.limitsStr(), + // xml_det_t(xmleles[m_nam]).visStr()); } /// Increase counters etc. diff --git a/src/SimpleDiskTracker_geo.cpp b/src/SimpleDiskTracker_geo.cpp index 54a9ea93d190250ee01d62a5b76941c4cd132369..484276e33548da44b242246d878b412e44571d15 100644 --- a/src/SimpleDiskTracker_geo.cpp +++ b/src/SimpleDiskTracker_geo.cpp @@ -56,27 +56,40 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s Volume l_vol(l_nam, l_tub, air); l_vol.setVisAttributes(description, x_layer.visStr()); DetElement layer; + PlacedVolume layer_pv; if (!reflect) { layer = DetElement(sdet, l_nam + "_pos", l_num); - pv = assembly.placeVolume(l_vol, Position(0, 0, zmin + layerWidth / 2.)); - pv.addPhysVolID("layer", l_num); - pv.addPhysVolID("barrel", 3); - layer.setPlacement(pv); + layer_pv = assembly.placeVolume(l_vol, Position(0, 0, zmin + layerWidth / 2.)); + layer_pv.addPhysVolID("barrel", 3).addPhysVolID("layer", l_num); + layer.setPlacement(layer_pv); + Acts::ActsExtension* layerExtension = new Acts::ActsExtension(); + layerExtension->addType("sensitive disk", "layer"); + //layerExtension->addType("axes", "definitions", "XzY"); + // need all four of these or else it is ignored. + //layerExtension->addValue(0, "r_min", "envelope"); + //layerExtension->addValue(0, "r_max", "envelope"); + //layerExtension->addValue(0, "z_min", "envelope"); + //layerExtension->addValue(0, "z_max", "envelope"); + // layerExtension->addType("axes", "definitions", "XZY"); + + layer.addExtension<Acts::ActsExtension>(layerExtension); } else { layer = DetElement(sdet, l_nam + "_neg", l_num); - (sdet, l_nam + "_pos", l_num); - pv = assembly.placeVolume(l_vol, Transform3D(RotationY(M_PI), Position(0, 0, -zmin - layerWidth / 2))); - pv.addPhysVolID("layer", l_num); - pv.addPhysVolID("barrel", 2); - layer.setPlacement(pv); + layer_pv = assembly.placeVolume(l_vol, Transform3D(RotationY(M_PI), Position(0, 0, -zmin - layerWidth / 2))); + layer_pv.addPhysVolID("barrel", 2).addPhysVolID("layer", l_num); + layer.setPlacement(layer_pv); // DetElement layerR = layer.clone(l_nam+"_neg"); // sdet.add(layerR.setPlacement(pv)); + Acts::ActsExtension* layerExtension = new Acts::ActsExtension(); + layerExtension->addType("sensitive disk", "layer"); + //layerExtension->addValue(0, "r_min", "envelope"); + //layerExtension->addValue(0, "r_max", "envelope"); + //layerExtension->addValue(0, "z_min", "envelope"); + //layerExtension->addValue(0, "z_max", "envelope"); + layer.addExtension<Acts::ActsExtension>(layerExtension); } - Acts::ActsExtension* layerExtension = new Acts::ActsExtension(); - layerExtension->addType("layer", "layer"); - //layerExtension->addType("axes", "definitions", "XZY"); - layer.addExtension<Acts::ActsExtension>(layerExtension); + double tot_thickness = -layerWidth / 2.0; for (xml_coll_t j(x_layer, _U(slice)); j; ++j, ++s_num) { xml_comp_t x_slice = j; double thick = x_slice.thickness(); @@ -92,13 +105,15 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s if (x_slice.isSensitive()) { sens.setType("tracker"); s_vol.setSensitiveDetector(sens); - Acts::ActsExtension* moduleExtension = new Acts::ActsExtension("XZY"); - slice_de.addExtension<Acts::ActsExtension>(moduleExtension); + Acts::ActsExtension* sensorExtension = new Acts::ActsExtension(); + //sensorExtension->addType("sensor", "detector"); + slice_de.addExtension<Acts::ActsExtension>(sensorExtension); } s_vol.setAttributes(description, x_slice.regionStr(), x_slice.limitsStr(), x_slice.visStr()); - pv = l_vol.placeVolume(s_vol, Position(0, 0, z - zmin - layerWidth / 2 + thick / 2)); + pv = l_vol.placeVolume(s_vol, Position(0, 0, tot_thickness + thick / 2)); pv.addPhysVolID("slice", s_num); slice_de.setPlacement(pv); + tot_thickness = tot_thickness + thick; } } diff --git a/src/TrapEndcapTracker_geo.cpp b/src/TrapEndcapTracker_geo.cpp index dafc0c2e6ecabc59bdf089890dbf50db0e661b62..58ec274627b070ea79cddb06eb560968bfa35f36 100644 --- a/src/TrapEndcapTracker_geo.cpp +++ b/src/TrapEndcapTracker_geo.cpp @@ -33,6 +33,9 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s bool reflect = x_det.reflect(false); DetElement sdet(det_name, det_id); Assembly assembly(det_name); + + + Material air = description.material("Air"); // Volume assembly (det_name,Box(10000,10000,10000),vacuum); Volume motherVol = description.pickMotherVolume(sdet); int m_id = 0, c_id = 0, n_sensor = 0; @@ -134,30 +137,32 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s int l_id = x_layer.id(); int mod_num = 1; - //xml_comp_t l_env = x_layer.child(_U(envelope)); + xml_comp_t l_env = x_layer.child(_U(envelope)); string layer_name = det_name + std::string("_layer") + std::to_string(l_id); - //std::string layer_vis = l_env.attr<std::string>(_Unicode(vis)); - //double layer_rmin = l_env.attr<double>(_Unicode(rmin)); - //double layer_rmax = l_env.attr<double>(_Unicode(rmax)); - //double layer_length = l_env.attr<double>(_Unicode(length)); - //double layer_zstart = l_env.attr<double>(_Unicode(zstart)); + std::string layer_vis = l_env.attr<std::string>(_Unicode(vis)); + double layer_rmin = l_env.attr<double>(_Unicode(rmin)); + double layer_rmax = l_env.attr<double>(_Unicode(rmax)); + double layer_length = l_env.attr<double>(_Unicode(length)); + double layer_zstart = l_env.attr<double>(_Unicode(zstart)); + double layer_center_z = layer_zstart + layer_length/2.0; //printout(INFO,"ROOTGDMLParse","+++ Read geometry from GDML file file:%s",input.c_str()); //std::cout << "SiTracker Endcap layer " << l_id << " zstart = " << layer_zstart/dd4hep::mm << "mm ( " << layer_length/dd4hep::mm << " mm thick )\n"; - Assembly layer_assembly(layer_name); + //Assembly layer_assembly(layer_name); //assembly.placeVolume(layer_assembly); - //Tube layer_tub(layer_rmin, layer_rmax, layer_length / 2); - //Volume layer_vol(layer_name, layer_tub, air); // Create the layer envelope volume. - //layer_assembly.setVisAttributes(description.visAttributes(layer_vis)); + Tube layer_tub(layer_rmin, layer_rmax, layer_length / 2); + Volume layer_vol(layer_name, layer_tub, air); // Create the layer envelope volume. + layer_vol.setVisAttributes(description.visAttributes(layer_vis)); PlacedVolume layer_pv; if (reflect) { - layer_pv = assembly.placeVolume(layer_assembly, Position(0,0,-1.0e-9));//-layer_zstart-layer_length/2)); + layer_pv = + assembly.placeVolume(layer_vol, Transform3D(RotationZYX(0.0, -M_PI, 0.0), Position(0, 0, -layer_center_z))); layer_pv.addPhysVolID("barrel", 3).addPhysVolID("layer", l_id); layer_name += "_N"; } else { - layer_pv = assembly.placeVolume(layer_assembly);//, Position(0, 0, +layer_zstart + layer_length / 2)); + layer_pv = assembly.placeVolume(layer_vol, Position(0, 0, layer_center_z)); layer_pv.addPhysVolID("barrel", 2).addPhysVolID("layer", l_id); layer_name += "_P"; } @@ -185,20 +190,23 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s string m_base = _toString(l_id, "layer%d") + _toString(mod_num, "_module%d"); double x = -r * std::cos(phi); double y = -r * std::sin(phi); - DetElement module(sdet, m_base + "_pos", det_id); - pv = assembly.placeVolume(m_vol, - Transform3D(RotationZYX(0, -M_PI / 2 - phi, -M_PI / 2), Position(x, y, zstart + dz))); - pv.addPhysVolID("barrel", 1).addPhysVolID("layer", l_id).addPhysVolID("module", mod_num); - module.setPlacement(pv); - for (size_t ic = 0; ic < sensVols.size(); ++ic) { - PlacedVolume sens_pv = sensVols[ic]; - DetElement comp_elt(module, sens_pv.volume().name(), mod_num); - comp_elt.setPlacement(sens_pv); - } - if (reflect) { - pv = assembly.placeVolume( - m_vol, Transform3D(RotationZYX(M_PI, -M_PI / 2 - phi, -M_PI / 2), Position(x, y, -zstart - dz))); + if (!reflect) { + DetElement module(sdet, m_base + "_pos", det_id); + pv = layer_vol.placeVolume( + m_vol, Transform3D(RotationZYX(0, -M_PI / 2 - phi, -M_PI / 2), Position(x, y, zstart + dz))); + pv.addPhysVolID("barrel", 1).addPhysVolID("layer", l_id).addPhysVolID("module", mod_num); + module.setPlacement(pv); + for (size_t ic = 0; ic < sensVols.size(); ++ic) { + PlacedVolume sens_pv = sensVols[ic]; + DetElement comp_elt(module, sens_pv.volume().name(), mod_num); + comp_elt.setPlacement(sens_pv); + Acts::ActsExtension* moduleExtension = new Acts::ActsExtension(); + comp_elt.addExtension<Acts::ActsExtension>(moduleExtension); + } + } else { + pv = layer_vol.placeVolume( + m_vol, Transform3D(RotationZYX(0, -M_PI / 2 - phi, -M_PI / 2), Position(x, y, -zstart - dz))); pv.addPhysVolID("barrel", 2).addPhysVolID("layer", l_id).addPhysVolID("module", mod_num); DetElement r_module(sdet, m_base + "_neg", det_id); r_module.setPlacement(pv); @@ -206,7 +214,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s PlacedVolume sens_pv = sensVols[ic]; DetElement comp_elt(r_module, sens_pv.volume().name(), mod_num); comp_elt.setPlacement(sens_pv); - Acts::ActsExtension* moduleExtension = new Acts::ActsExtension("XZY"); + Acts::ActsExtension* moduleExtension = new Acts::ActsExtension(); comp_elt.addExtension<Acts::ActsExtension>(moduleExtension); } } @@ -216,7 +224,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s } } } - pv = motherVol.placeVolume(assembly); + pv = motherVol.placeVolume(assembly,Position(0,0,(reflect?-1.0e-9:1.0e-9)) ); pv.addPhysVolID("system", det_id); sdet.setPlacement(pv); return sdet;