From 2c9a2e3fe6f41c3a20c9d625cf7234c8034d5692 Mon Sep 17 00:00:00 2001 From: Whitney Armstrong <warmstrong@anl.gov> Date: Tue, 6 Apr 2021 22:02:32 -0500 Subject: [PATCH] modified: compact/cb_Solenoid.xml modified: compact/definitions.xml modified: compact/ecal.xml modified: compact/forward_rich.xml modified: compact/solenoid.xml modified: reference_detector.xml modified: src/PolyhedraEndcapCalorimeter2_geo.cpp deleted: src/TestDetector.cpp deleted: src/cb_Solenoid.cpp --- compact/cb_Solenoid.xml | 2 +- compact/definitions.xml | 115 +++++++++++++----------- compact/ecal.xml | 31 +++---- compact/forward_rich.xml | 6 +- compact/solenoid.xml | 2 +- reference_detector.xml | 14 ++- src/PolyhedraEndcapCalorimeter2_geo.cpp | 95 +++++++++++--------- src/TestDetector.cpp | 36 -------- src/cb_Solenoid.cpp | 35 -------- 9 files changed, 144 insertions(+), 192 deletions(-) delete mode 100644 src/TestDetector.cpp delete mode 100644 src/cb_Solenoid.cpp diff --git a/compact/cb_Solenoid.xml b/compact/cb_Solenoid.xml index 2083a62..efca08b 100644 --- a/compact/cb_Solenoid.xml +++ b/compact/cb_Solenoid.xml @@ -21,7 +21,7 @@ </comment> <detector id="Solenoid_ID" name="cb_Solenoid" type="cb_Solenoid" insideTrackingVolume="false" vis="cb_SolenoidVis"> <material name="Vacuum"/> <!-- G4_Galactic --> - <dimensions rmin="cb_Solenoid_rmin" rmax="cb_Solenoid_rmax" z="cb_Solenoid_z" delta="cb_Solenoid_shift"/> + <dimensions rmin="Solenoid_rmin" rmax="Solenoid_rmax" z="b_Solenoid_z" delta="cb_Solenoid_shift"/> </detector> </detectors> diff --git a/compact/definitions.xml b/compact/definitions.xml index f371c0a..83e02e2 100644 --- a/compact/definitions.xml +++ b/compact/definitions.xml @@ -1,15 +1,16 @@ <define> - <comment>Although not explicit in the design study, the eRHIC crossing angle is not symmetric.</comment> + <constant name="world_side" value="30*m"/> + <constant name="world_x" value="world_side"/> + <constant name="world_y" value="world_side"/> + <constant name="world_z" value="100*m"/> + + <comment>Although not explicit in the EIC design study, the crossing angle is not symmetric.</comment> <constant name="CrossingAngle" value="0.025"/> <constant name="ionCrossingAngle" value="0.0166667"/> <constant name="electronCrossingAngle" value="0.00833333"/> <constant name="CrossingSlope" value="0.0166682"/> <constant name="Pi" value="3.14159265359"/> - <constant name="world_side" value="30*m"/> - <constant name="world_x" value="world_side"/> - <constant name="world_y" value="world_side"/> - <constant name="world_z" value="100*m"/> <constant name="mil" value="0.0254*mm"/> @@ -252,31 +253,32 @@ <constant name="cb_Solenoid_z" value="400.0 * cm"/> <comment> Central Barrel Solenoid Size in Z direction </comment> <constant name="cb_Solenoid_shift" value="0.0 * cm"/> + <constant name="Solenoid_length" value="7000.0*mm"/> + <constant name="Solenoid_rmin" value="3000.0*mm"/> <constant name="Solenoid_thickness" value="400*mm"/> - <constant name="Solenoid_rmin" value="2000.0*mm"/> <constant name="Solenoid_rmax" value="Solenoid_rmin + Solenoid_thickness"/> - <constant name="SolenoidLength" value="6000.0*mm"/> + <comment>Solenoid Barrel Parameters</comment> <constant name="SolenoidBarrelCryostatThickness" value=" 1.0 * cm"/> <constant name="SolenoidBarrelGapThickness" value=" 3.3 * cm"/> <constant name="SolenoidBarrelAlConductorThickness" value="12.0 * cm"/> <constant name="SolenoidBarrelQuenchbackThickness" value=" 1.5 * cm"/> <constant name="SolenoidBarrelOuterGapThickness" value=" 5.6 * cm"/> <constant name="SolenoidBarrelOuterCryostatThickness" value=" 1.2 * cm"/> - <constant name="SolenoidEndPlateGapThickness" value=" 5.7 * cm"/> <constant name="SolenoidEndPlateCryostatThickness" value=" 1.5 * cm"/> + <comment> Solenoid Yoke Endcap </comment> + <constant name="SolenoidYokeEndcap_thickness" value="0.2 * m"/> + <constant name="SolenoidBarrel_rmin" value="Solenoid_rmin"/> - <constant name="SolenoidBarrelLenth" value="SolenoidLength"/> - <constant name="SolenoidBarrel_zmax" value="SolenoidBarrelLenth/2.0"/> + <constant name="SolenoidBarrel_length" value="Solenoid_length"/> + <constant name="SolenoidBarrel_zmax" value="Solenoid_length/2.0"/> + + <constant name="SolenoidCoilConductor_rmin" value="SolenoidBarrel_rmin + SolenoidBarrelCryostatThickness + SolenoidBarrelGapThickness"/> + <constant name="SolenoidCoilConductor_rmax" value="SolenoidCoilConductor_rmin + SolenoidBarrelAlConductorThickness + SolenoidBarrelQuenchbackThickness"/> - <constant name="SolenoidCoilConductor_rmin" - value="SolenoidBarrel_rmin + SolenoidBarrelCryostatThickness + SolenoidBarrelGapThickness"/> - <constant name="SolenoidCoilConductor_rmax" - value="SolenoidCoilConductor_rmin + SolenoidBarrelAlConductorThickness + SolenoidBarrelQuenchbackThickness"/> - <constant name="SolenoidBarrel_rmax" - value="SolenoidCoilConductor_rmax + SolenoidBarrelOuterGapThickness + SolenoidBarrelOuterCryostatThickness"/> + <constant name="SolenoidBarrel_rmax" value="SolenoidCoilConductor_rmax + SolenoidBarrelOuterGapThickness + SolenoidBarrelOuterCryostatThickness"/> <constant name="SolenoidCoil_zmax" value="SolenoidBarrel_zmax - SolenoidEndPlateCryostatThickness - SolenoidEndPlateGapThickness"/> @@ -284,15 +286,12 @@ <constant name="SolenoidalFieldRadius" value="SolenoidCoilConductor_rmin + SolenoidBarrelAlConductorThickness / 2.0"/> - <constant name="SolenoidCoilLength" value="SolenoidCoil_zmax*2.0"/> + <constant name="SolenoidCoil_length" value="SolenoidCoil_zmax*2.0"/> - <constant name="SolenoidThickness" value="Solenoid_rmax - Solenoid_rmin"/> - - <constant name="SolenoidYokeEndcapP_rmin" value="800*mm"/> - <constant name="SolenoidYokeEndcapN_rmin" value="800*mm"/> - <constant name="SolenoidYokeEndcapThickness" value="0.2 * m"/> - <constant name="SolenoidYokeEndcap_zmin" value="SolenoidBarrel_zmax"/> - <constant name="SolenoidYokeEndcap_zmax" value="SolenoidYokeEndcap_zmin + SolenoidYokeEndcapThickness"/> + <constant name="SolenoidYokeEndcapP_rmin" value="SolenoidBarrel_rmin"/> + <constant name="SolenoidYokeEndcapN_rmin" value="SolenoidBarrel_rmin"/> + <constant name="SolenoidYokeEndcap_zmin" value="SolenoidCoil_zmax"/> + <constant name="SolenoidYokeEndcap_zmax" value="SolenoidYokeEndcap_zmin + SolenoidYokeEndcap_thickness"/> <constant name="SolenoidYokeChamferAngle" value="0.2"/> @@ -303,8 +302,8 @@ -------------------------------- These are needed here to compute the dependent parameters. </comment> - <constant name="RICHLength" value="1.5*m"/> - <constant name="TRDLength" value="40.0*cm"/> + <constant name="RICHLength" value="1.3*m"/> + <constant name="TRDLength" value="30.0*cm"/> <constant name="ForwardTOFLength" value="10.0*cm"/> <constant name="ForwardPIDLength" value="RICHLength + TRDLength + ForwardTOFLength"/> @@ -320,7 +319,7 @@ ============================ </comment> <constant name="tracker_region_rmax" value="Solenoid_rmax/2.0"/> - <constant name="tracker_region_zmax" value="SolenoidLength/2.0"/> + <constant name="tracker_region_zmax" value="Solenoid_length/2.0"/> <comment> ------------------------- @@ -338,9 +337,10 @@ -------------------------- </comment> <constant name="SiliconTrackerInnerRadius" value="95.0*mm"/> - <constant name="SiliconTrackerInnerBarrelLength" value="500.0*mm"/> - <constant name="SiliconTrackerOuterRadius" value="Solenoid_rmax/2.0"/> - <constant name="SiliconTrackerOuterBarrelLength" value="SolenoidLength/3.0"/> + <constant name="SiliconTrackerInnerBarrelLength" value="300.0*mm"/> + <constant name="SiliconTrackerOuterRadius" value="Solenoid_rmax/3.0"/> + <constant name="SiliconTrackerOuterBarrelLength" value="Solenoid_length/4.0"/> + <constant name="SiliconTrackerOuterBarrel_zmax" value="SiliconTrackerOuterBarrelLength/2.0"/> <comment> ------------------------------- @@ -372,6 +372,9 @@ ====================== </comment> + <comment> + Ecal and Hcal Barrel + </comment> <constant name="EcalBarrel_rmin" value="SiliconTrackerOuterRadius + BarrelPIDThickness + 3.0 * cm"/> <constant name="HcalBarrel_rmax" value="Solenoid_rmin - 5.0 *cm "/> <constant name="Barrel_TotalCalThickness" value="HcalBarrel_rmax - EcalBarrel_rmin"/> @@ -382,6 +385,7 @@ <constant name="EcalBarrelLength" value="SiliconTrackerOuterBarrelLength + ForwardPIDLength + BackwardPIDLength"/> <constant name="EcalEndcapP_zmin" value="SiliconTrackerOuterBarrelLength/2.0 + ForwardPIDLength"/> <constant name="EcalEndcapN_zmin" value="SiliconTrackerOuterBarrelLength/2.0 + BackwardPIDLength"/> + <constant name="EcalBarrel_offset" value="(EcalEndcapP_zmin-EcalEndcapN_zmin)/2.0"/> <constant name="EndcapP_TotalCalThickness" value="(SolenoidYokeEndcap_zmin - 10.0 * mm) - (EcalEndcapP_zmin + 10.0 * mm)"/> <constant name="EndcapN_TotalCalThickness" value="(SolenoidYokeEndcap_zmin - 10.0 * mm) - (EcalEndcapN_zmin + 10.0 * mm)"/> @@ -418,48 +422,51 @@ <constant name="CaloSides" value="12"/> <comment>Material Thickness</comment> - <constant name="EcalSiliconThickness" value="9.00 * mm"/> - <constant name="EcalCopperThickness" value="0.05 * mm"/> - <constant name="EcalKaptonThickness" value="0.30 * mm"/> - <constant name="EcalAir1Thickness" value="0.33 * mm"/> - <constant name="EcalAir2Thickness" value="0.25 * mm"/> - <constant name="EcalThinTungstenThickness" value="2.50 * mm"/> - <constant name="EcalThickTungstenThickness" value="5.00 * mm"/> + <constant name="EcalSiliconThickness" value="9.00 * mm" /> + <constant name="EcalCopperThickness" value="0.05 * mm" /> + <constant name="EcalKaptonThickness" value="0.30 * mm" /> + <constant name="EcalAir1Thickness" value="0.33 * mm" /> + <constant name="EcalAir2Thickness" value="0.25 * mm" /> + <constant name="EcalThinTungstenThickness" value="2.50 * mm" /> + <constant name="EcalThickTungstenThickness" value="5.00 * mm" /> <comment> Layer Thickness </comment> - <constant name="EcalFirstLayerThickness" + <constant name="EcalLayer1_thickness" value="EcalSiliconThickness + EcalCopperThickness + EcalKaptonThickness + EcalAir1Thickness"/> - <constant name="EcalThinOneLayerThickness" + <constant name="EcalLayer2_thickness" value="EcalThinTungstenThickness + EcalAir2Thickness + EcalSiliconThickness + EcalCopperThickness + EcalKaptonThickness + EcalAir1Thickness"/> - <constant name="EcalThickOneLayerThickness" + <constant name="EcalLayer3_thickness" value="EcalThickTungstenThickness + EcalAir2Thickness + EcalSiliconThickness + EcalCopperThickness + EcalKaptonThickness + EcalAir1Thickness"/> <comment> EM Barrel N Layer; same number of layers for EcalThin and EcalThick</comment> <constant name="EcalBarrelLayers" - value="floor((EcalBarrel_TotalThickness - EcalFirstLayerThickness) / (EcalThinOneLayerThickness + EcalThickOneLayerThickness))"/> - <constant name="EcalBarrelThinLayers" value="EcalBarrelLayers"/> - <constant name="EcalBarrelThickLayers" value="EcalBarrelLayers"/> + value="floor((EcalBarrel_TotalThickness - EcalLayer1_thickness) / (EcalLayer2_thickness + EcalLayer3_thickness))"/> + <constant name="EcalBarrelLayer1_NRepeat" value="1"/> + <constant name="EcalBarrelLayer2_NRepeat" value="EcalBarrelLayers"/> + <constant name="EcalBarrelLayer3_NRepeat" value="EcalBarrelLayers"/> <comment> EM Barrel Thickness </comment> <constant name="EcalBarrelThickness" - value="EcalFirstLayerThickness + (EcalBarrelThinLayers * EcalThinOneLayerThickness) + (EcalBarrelThickLayers * EcalThickOneLayerThickness)"/> + value="EcalBarrelLayer1_NRepeat*EcalLayer1_thickness + EcalBarrelLayer2_NRepeat * EcalLayer2_thickness + EcalBarrelLayer3_NRepeat * EcalLayer3_thickness"/> <constant name="EcalBarrel_rmax" value="EcalBarrel_rmin + EcalBarrelThickness"/> <comment> EM Endcap N Layer; same number of layers for EcalThin and EcalThick </comment> <constant name="EcalEndcapPLayers" - value="floor((EcalEndcapP_TotalThickness - EcalFirstLayerThickness) / (EcalThinOneLayerThickness + EcalThickOneLayerThickness))"/> + value="floor((EcalEndcapP_TotalThickness - EcalLayer1_thickness) / (EcalLayer2_thickness + EcalLayer3_thickness))"/> <constant name="EcalEndcapNLayers" - value="floor((EcalEndcapN_TotalThickness - EcalFirstLayerThickness) / (EcalThinOneLayerThickness + EcalThickOneLayerThickness))"/> - <constant name="EcalEndcapP_NThinLayers" value="EcalEndcapPLayers"/> - <constant name="EcalEndcapP_NThickLayers" value="EcalEndcapPLayers"/> - <constant name="EcalEndcapN_NThinLayers" value="EcalEndcapNLayers"/> - <constant name="EcalEndcapN_NThickLayers" value="EcalEndcapNLayers"/> + value="floor((EcalEndcapN_TotalThickness - EcalLayer1_thickness) / (EcalLayer2_thickness + EcalLayer3_thickness))"/> + <constant name="EcalEndcapPLayer1_NRepeat" value="1"/> + <constant name="EcalEndcapNLayer1_NRepeat" value="1"/> + <constant name="EcalEndcapPLayer2_NRepeat" value="EcalEndcapPLayers"/> + <constant name="EcalEndcapPLayer3_NRepeat" value="EcalEndcapPLayers"/> + <constant name="EcalEndcapNLayer2_NRepeat" value="EcalEndcapNLayers"/> + <constant name="EcalEndcapNLayer3_NRepeat" value="EcalEndcapNLayers"/> <comment> EM Endcap Thickness </comment> <constant name="EcalEndcapPThickness" - value="EcalFirstLayerThickness + (EcalEndcapP_NThinLayers * EcalThinOneLayerThickness) + (EcalEndcapP_NThickLayers * EcalThickOneLayerThickness)"/> + value="EcalEndcapPLayer1_NRepeat*EcalLayer1_thickness + EcalEndcapPLayer2_NRepeat*EcalLayer2_thickness + EcalEndcapPLayer3_NRepeat*EcalLayer3_thickness "/> <constant name="EcalEndcapNThickness" - value="EcalFirstLayerThickness + (EcalEndcapN_NThinLayers * EcalThinOneLayerThickness) + (EcalEndcapN_NThickLayers * EcalThickOneLayerThickness)"/> + value="EcalEndcapNLayer1_NRepeat*EcalLayer1_thickness + EcalEndcapNLayer2_NRepeat*EcalLayer2_thickness + EcalEndcapNLayer3_NRepeat*EcalLayer3_thickness"/> <comment> @@ -540,7 +547,9 @@ </comment> <constant name="RICHZMin" value="SiliconTrackerOuterBarrelLength/2.0 + 1 * cm"/> <constant name="RICHRMin" value="15 * cm"/> - <constant name="RICHRMax" value="60 * cm"/> + <constant name="RICH_rmax0" value="SiliconTrackerOuterBarrel_zmin"/> + <constant name="RICH_rmax1" value="EcalBarrel_rmin"/> + <constant name="RICH_rmax2" value="SolenoidBarrel_rmin-2*cm"/> <constant name="RICHDepth" value="1.0*m"/> diff --git a/compact/ecal.xml b/compact/ecal.xml index a58ad10..30cb801 100644 --- a/compact/ecal.xml +++ b/compact/ecal.xml @@ -36,21 +36,23 @@ <detector id="ECalBarrel_ID" name="EcalBarrel" - type="DD4hep_EcalBarrel" + type="refdet_EcalBarrel" readout="EcalBarrelHits" - calorimeterType="EM_BARREL"> + calorimeterType="EM_BARREL" + offset="EcalBarrel_offset" + > <dimensions numsides="CaloSides" rmin="EcalBarrel_rmin" z="EcalBarrelLength"/> <staves vis="EcalBarrelVis"/> - <layer repeat="1"> + <layer repeat="EcalBarrelLayer1_NRepeat"> <slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/> <slice material="Copper" thickness="EcalCopperThickness"/> <slice material="Kapton" thickness="EcalKaptonThickness"/> <slice material="Air" thickness="EcalAir1Thickness"/> </layer> - <layer repeat="EcalBarrelThinLayers"> + <layer repeat="EcalBarrelLayer2_NRepeat"> <slice material="TungstenDens24" thickness="EcalThinTungstenThickness"/> <slice material="Air" thickness="EcalAir2Thickness"/> <slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/> @@ -58,7 +60,7 @@ <slice material="Kapton" thickness="EcalKaptonThickness"/> <slice material="Air" thickness="EcalAir1Thickness"/> </layer> - <layer repeat="EcalBarrelThickLayers"> + <layer repeat="EcalBarrelLayer3_NRepeat"> <slice material="TungstenDens24" thickness="EcalThickTungstenThickness"/> <slice material="Air" thickness="EcalAir2Thickness"/> <slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/> @@ -74,7 +76,6 @@ ------------------------------------------ A layered EM calorimeter with tungsten and silicon (or scintillator) strips </comment> - <!-- <detector id="ECalEndcapP_ID" name="EcalEndcapP" reflect="false" @@ -87,13 +88,13 @@ zmin="EcalEndcapP_zmin" rmin="EcalEndcapP_rmin" rmax="EcalBarrel_rmax " /> - <layer repeat="1"> + <layer repeat="EcalEndcapPLayer1_NRepeat"> <slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/> <slice material="Copper" thickness="EcalCopperThickness"/> <slice material="Kapton" thickness="EcalKaptonThickness"/> <slice material="Air" thickness="EcalAir1Thickness"/> </layer> - <layer repeat="EcalEndcapP_NThinLayers"> + <layer repeat="EcalEndcapPLayer2_NRepeat"> <slice material="TungstenDens24" thickness="EcalThinTungstenThickness"/> <slice material="Air" thickness="EcalAir2Thickness"/> <slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/> @@ -101,7 +102,7 @@ <slice material="Kapton" thickness="EcalKaptonThickness"/> <slice material="Air" thickness="EcalAir1Thickness"/> </layer> - <layer repeat="EcalEndcapP_NThickLayers"> + <layer repeat="EcalEndcapPLayer3_NRepeat"> <slice material="TungstenDens24" thickness="EcalThickTungstenThickness"/> <slice material="Air" thickness="EcalAir2Thickness"/> <slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/> @@ -111,15 +112,12 @@ </layer> </detector> ---> - <comment> ------------------------------- Backwards Endcap EM Calorimeter ------------------------------- A layered EM calorimeter with tungsten and silicon (or scintillator) strips </comment> - <!-- <detector id="ECalEndcapN_ID" name="EcalEndcapN" type="refdet_PolyhedraEndcapCalorimeter2" @@ -132,13 +130,13 @@ zmin="EcalEndcapN_zmin" rmin="EcalEndcapN_rmin" rmax="EcalBarrel_rmax " /> - <layer repeat="1"> + <layer repeat="EcalEndcapPLayer1_NRepeat"> <slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/> <slice material="Copper" thickness="EcalCopperThickness"/> <slice material="Kapton" thickness="EcalKaptonThickness"/> <slice material="Air" thickness="EcalAir1Thickness"/> </layer> - <layer repeat="EcalEndcapN_NThinLayers"> + <layer repeat="EcalEndcapPLayer2_NRepeat"> <slice material="TungstenDens24" thickness="EcalThinTungstenThickness"/> <slice material="Air" thickness="EcalAir2Thickness"/> <slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/> @@ -146,7 +144,7 @@ <slice material="Kapton" thickness="EcalKaptonThickness"/> <slice material="Air" thickness="EcalAir1Thickness"/> </layer> - <layer repeat="EcalEndcapN_NThickLayers"> + <layer repeat="EcalEndcapPLayer3_NRepeat"> <slice material="TungstenDens24" thickness="EcalThickTungstenThickness"/> <slice material="Air" thickness="EcalAir2Thickness"/> <slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/> @@ -155,7 +153,6 @@ <slice material="Air" thickness="EcalAir1Thickness"/> </layer> </detector> - --> </detectors> <!-- Definition of the readout segmentation/definition --> @@ -183,6 +180,4 @@ <plugins> </plugins> -<fields> -</fields> </lccdd> diff --git a/compact/forward_rich.xml b/compact/forward_rich.xml index d94e9e1..791a34b 100644 --- a/compact/forward_rich.xml +++ b/compact/forward_rich.xml @@ -5,9 +5,11 @@ <detectors> <detector id="ForwardRICH_ID" name="ForwardRICH" type="refdet_ForwardRICH" readout="ForwardRICHHits" vis="BlueVis"> - <dimensions z0="RICHZMin" length="RICHDepth+20*cm" rmin="RICHRMin" rmax1="RICHRMax*cm" rmax2="RICHRMin+80*cm"/> + <dimensions z0="RICHZMin" length="RICHLength" + rmin="RICHRMin" + rmax1="RICH_rmax1" rmax2="RICH_rmax2"/> <radiator material="N2cherenkov" /> - <mcppmt zdiff="15.0*cm" rmin="SolenoidYokeEndcapP_rmin - 10*cm" rmax="SolenoidYokeEndcapP_rmin + 80*cm" rtol="1.0*cm" vis="BlueVis" + <mcppmt zdiff="15.0*cm" rmin="SolenoidYokeEndcapP_rmin - 10*cm" rmax="SolenoidYokeEndcapP_rmin" rtol="1.0*cm" vis="BlueVis" module_size="10*cm" module_gap="0.2*cm" thickness="1.0*cm" material="Quartz" /> <tank zdiff="5.0*cm" length="RICHDepth" gas="N2cherenkov" vis="GreenVis" rmin="RICHRMin" rmax1="RICHRMin+40*cm" rmax2="RICHRMin+80*cm" /> diff --git a/compact/solenoid.xml b/compact/solenoid.xml index 42ec292..1a7ddd8 100644 --- a/compact/solenoid.xml +++ b/compact/solenoid.xml @@ -79,7 +79,7 @@ inner_z="SolenoidBarrel_zmax + SolenoidEndPlateGapThickness" inner_r="SolenoidYokeEndcapP_rmin" outer_r="SolenoidBarrel_rmax"> - <slice material="Steel235" thickness="SolenoidYokeEndcapThickness/2.0" vis="SolenoidYokeVis" /> + <slice material="Steel235" thickness="SolenoidYokeEndcap_thickness/2.0" vis="SolenoidYokeVis" /> </layer> </detector> <!-- diff --git a/reference_detector.xml b/reference_detector.xml index c65d5a7..0b60d02 100644 --- a/reference_detector.xml +++ b/reference_detector.xml @@ -13,9 +13,9 @@ <define> <include ref="compact/definitions.xml" /> - <include ref="eic/eic_defs.xml" /> <include ref="ip6/ip6_defs.xml" /> <!-- + <include ref="eic/eic_defs.xml" /> --> </define> @@ -113,17 +113,25 @@ <!-- <include ref="reference_detector/vertex_tracker.xml"/> <include ref="compact/silicon_tracker.xml"/> +<<<<<<< HEAD --> <include ref="compact/cb_CTD_Si.xml"/> <include ref="ip6/beampipe.xml"/> <include ref="compact/ffi_ZDC.xml"/> +======= + <include ref="ip6/beampipe.xml"/> + --> +>>>>>>> 913736c ( modified: compact/cb_Solenoid.xml) <include ref="compact/solenoid.xml"/> - <include ref="compact/ecal.xml"/> - <include ref="compact/hcal.xml"/> <include ref="compact/forward_rich.xml"/> +<<<<<<< HEAD <include ref="compact/ce_mrich.xml"/> <include ref="compact/ce_GEM.xml"/> +======= + <include ref="compact/ecal.xml"/> +>>>>>>> 913736c ( modified: compact/cb_Solenoid.xml) <!-- + <include ref="compact/hcal.xml"/> <include ref="compact/roman_pots.xml"/> --> <include ref="eic/forward_ion_beamline.xml"/> diff --git a/src/PolyhedraEndcapCalorimeter2_geo.cpp b/src/PolyhedraEndcapCalorimeter2_geo.cpp index 3469a1c..304961c 100644 --- a/src/PolyhedraEndcapCalorimeter2_geo.cpp +++ b/src/PolyhedraEndcapCalorimeter2_geo.cpp @@ -37,6 +37,11 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s Volume endcapVol("endcap", PolyhedraRegular(numsides, rmin, rmax, totalThickness), air); DetElement endcap("endcap", det_id); + std::cout << "totalThickness = " << totalThickness << "\n"; + std::cout << "zmin = " << zmin << "\n"; + std::cout << "rmin = " << rmin << "\n"; + std::cout << "rmax = " << rmax << "\n"; + std::cout << "nlayers = " << std::size(layering.layers()) << "\n"; int l_num = 1; int layerType = 0; double layerZ = -totalThickness / 2; @@ -44,55 +49,59 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s endcapVol.setAttributes(description, x_det.regionStr(), x_det.limitsStr(), x_det.visStr()); for (xml_coll_t xc(x_det, _U(layer)); xc; ++xc) { - xml_comp_t x_layer = xc; - double l_thick = layering.layer(l_num - 1)->thickness(); - string l_name = _toString(layerType, "layer%d"); - int l_repeat = x_layer.repeat(); - Volume l_vol(l_name, PolyhedraRegular(numsides, rmin, rmax, l_thick), air); - vector<PlacedVolume> sensitives; + std::cout << "l_num = " << l_num << "\n"; + std::cout << "xc = " << xc << "\n"; + xml_comp_t x_layer = xc; + double l_thick = layering.layer(l_num - 1)->thickness(); + std::cout << "xc = " << xc << "\n"; + string l_name = _toString(layerType, "layer%d"); + int l_repeat = x_layer.repeat(); + Volume l_vol(l_name, PolyhedraRegular(numsides, rmin, rmax, l_thick), air); + vector<PlacedVolume> sensitives; - int s_num = 1; - double sliceZ = -l_thick / 2; - for (xml_coll_t xs(x_layer, _U(slice)); xs; ++xs) { - xml_comp_t x_slice = xs; - string s_name = _toString(s_num, "slice%d"); - double s_thick = x_slice.thickness(); - Material s_mat = description.material(x_slice.materialStr()); - Volume s_vol(s_name, PolyhedraRegular(numsides, rmin, rmax, s_thick), s_mat); + int s_num = 1; + double sliceZ = -l_thick / 2; + for (xml_coll_t xs(x_layer, _U(slice)); xs; ++xs) { + xml_comp_t x_slice = xs; + string s_name = _toString(s_num, "slice%d"); + double s_thick = x_slice.thickness(); + Material s_mat = description.material(x_slice.materialStr()); + Volume s_vol(s_name, PolyhedraRegular(numsides, rmin, rmax, s_thick), s_mat); - s_vol.setVisAttributes(description.visAttributes(x_slice.visStr())); - sliceZ += s_thick / 2; - PlacedVolume s_phv = l_vol.placeVolume(s_vol, Position(0, 0, sliceZ)); - s_phv.addPhysVolID("slice", s_num); - if (x_slice.isSensitive()) { - sens.setType("calorimeter"); - s_vol.setSensitiveDetector(sens); - sensitives.push_back(s_phv); - } - sliceZ += s_thick / 2; - s_num++; + s_vol.setVisAttributes(description.visAttributes(x_slice.visStr())); + sliceZ += s_thick / 2; + PlacedVolume s_phv = l_vol.placeVolume(s_vol, Position(0, 0, sliceZ)); + s_phv.addPhysVolID("slice", s_num); + if (x_slice.isSensitive()) { + sens.setType("calorimeter"); + s_vol.setSensitiveDetector(sens); + sensitives.push_back(s_phv); } - l_vol.setVisAttributes(description.visAttributes(x_layer.visStr())); - if (l_repeat <= 0) throw std::runtime_error(x_det.nameStr() + "> Invalid repeat value"); - for (int j = 0; j < l_repeat; ++j) { - string phys_lay = _toString(l_num, "layer%d"); - layerZ += l_thick / 2; - DetElement layer_elt(endcap, phys_lay, l_num); - PlacedVolume pv = endcapVol.placeVolume(l_vol, Position(0, 0, layerZ)); - pv.addPhysVolID("layer", l_num); - layer_elt.setPlacement(pv); - for (size_t ic = 0; ic < sensitives.size(); ++ic) { - PlacedVolume sens_pv = sensitives[ic]; - DetElement comp_elt(layer_elt, sens_pv.volume().name(), l_num); - comp_elt.setPlacement(sens_pv); - } - layerZ += l_thick / 2; - ++l_num; + sliceZ += s_thick / 2; + s_num++; + } + l_vol.setVisAttributes(description.visAttributes(x_layer.visStr())); + if (l_repeat <= 0) + throw std::runtime_error(x_det.nameStr() + "> Invalid repeat value"); + for (int j = 0; j < l_repeat; ++j) { + string phys_lay = _toString(l_num, "layer%d"); + layerZ += l_thick / 2; + DetElement layer_elt(endcap, phys_lay, l_num); + PlacedVolume pv = endcapVol.placeVolume(l_vol, Position(0, 0, layerZ)); + pv.addPhysVolID("layer", l_num); + layer_elt.setPlacement(pv); + for (size_t ic = 0; ic < sensitives.size(); ++ic) { + PlacedVolume sens_pv = sensitives[ic]; + DetElement comp_elt(layer_elt, sens_pv.volume().name(), l_num); + comp_elt.setPlacement(sens_pv); } - ++layerType; + layerZ += l_thick / 2; + ++l_num; + } + ++layerType; } - double z_pos = zmin + totalThickness / 2; + double z_pos = zmin + totalThickness / 2; PlacedVolume pv; // Reflect it. Assembly assembly(det_name); diff --git a/src/TestDetector.cpp b/src/TestDetector.cpp deleted file mode 100644 index 5669184..0000000 --- a/src/TestDetector.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include <XML/Helper.h> - -using namespace dd4hep; - -static Ref_t createDetector(Detector& desc, xml_h handle, SensitiveDetector sens) { - xml::DetElement detElem = handle; - std::string detName = detElem.nameStr(); - int detID = detElem.id(); - - xml::Component dims = detElem.dimensions(); - double rInner = dims.inner_radius(); - double rMin = dims.rmin(); - double thickness = dims.thickness(); - double innerZ = dims.inner_z(); - double angle = dims.angle(); - - Material mat = desc.material(detElem.materialStr()); - - Tube outerTubeShape(rMin, rInner + thickness, innerZ + thickness); - Tube innerTubeShape(0, rInner, innerZ); - SubtractionSolid unchamferedShape(outerTubeShape, innerTubeShape); - Cone chamferShape(thickness, 0, rMin, 0, rMin + 2 * tan(angle) * thickness); - SubtractionSolid detShape(unchamferedShape, chamferShape, Position(0, 0, innerZ + thickness)); - Volume detVol(detName, detShape, mat); - - detVol.setVisAttributes(desc.visAttributes(detElem.visStr())); - - DetElement det(detName, detID); - Volume motherVol = desc.pickMotherVolume(det); - PlacedVolume detPV = motherVol.placeVolume(detVol); - det.setPlacement(detPV); - return det; -} - -// clang-format off -DECLARE_DETELEMENT(TestDetector, createDetector) diff --git a/src/cb_Solenoid.cpp b/src/cb_Solenoid.cpp deleted file mode 100644 index 623c520..0000000 --- a/src/cb_Solenoid.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include <XML/Helper.h> -/////////////////////////// -// Central Barrel Solenoid -/////////////////////////// - -using namespace dd4hep; - -static Ref_t createDetector(Detector& desc, xml_h handle, SensitiveDetector sens) -{ - xml::DetElement detElem = handle; - std::string detName = detElem.nameStr(); - int detID = detElem.id(); - - xml::Component dims = detElem.dimensions(); - double SizeZ = dims.z(); // Size in Z direction - double ROut = dims.rmax(); // Outer diameter - double RIn = dims.rmin(); // Inner diameter - double ShiftZ = dims.delta(); - Material mat = desc.material(detElem.materialStr()); - - Tube cb_Solenoid_GVol_Solid(RIn, ROut, SizeZ / 2., 0., 360 * deg); - Volume detVol("cb_Solenoid_GVol_Logic", cb_Solenoid_GVol_Solid, mat); - - detVol.setVisAttributes(desc.visAttributes(detElem.visStr())); - - DetElement det(detName, detID); - Volume motherVol = desc.pickMotherVolume(det); - Transform3D tr(RotationZYX(0., 0., 0.), Position(0., 0., ShiftZ)); - PlacedVolume detPV = motherVol.placeVolume(detVol, tr); - det.setPlacement(detPV); - return det; -} - -// clang-format off -DECLARE_DETELEMENT(cb_Solenoid, createDetector) -- GitLab