From d0b0be247548d37ab84aeb430a644b02a9b1e57d Mon Sep 17 00:00:00 2001 From: Whitney Armstrong <warmstrong@anl.gov> Date: Wed, 21 Apr 2021 23:09:04 -0500 Subject: [PATCH] Added other detectors --- compact/definitions.xml | 38 +++++++++------- compact/ecal.xml | 6 ++- compact/forward_rich.xml | 12 +++-- compact/forward_trd.xml | 8 ++-- compact/hcal.xml | 5 +-- reference_detector.xml | 12 +++-- src/ForwardRICH_geo.cpp | 4 +- src/ref_DiskTracker_geo.cpp | 90 +++++++++++++++++++------------------ 8 files changed, 95 insertions(+), 80 deletions(-) diff --git a/compact/definitions.xml b/compact/definitions.xml index bc78451..ee5fc40 100644 --- a/compact/definitions.xml +++ b/compact/definitions.xml @@ -322,7 +322,7 @@ <constant name="ForwardRICH_length" value="1.1*m"/> <constant name="ForwardTRD_length" value="10.0*cm"/> - <constant name="ForwardTOF_length" value="1.0*mm"/> + <constant name="ForwardTOF_length" value="10.0*mm"/> <constant name="BackwardCherenkovLength" value="15.0*cm"/> <constant name="BackwardTOFLength" value="10.0*cm"/> @@ -331,11 +331,18 @@ <constant name="ForwardPIDLength" value="ForwardRICH_length + ForwardTRD_length + ForwardTOF_length"/> <constant name="BackwardPIDLength" value="BackwardCherenkovLength + BackwardTOFLength"/> + <comment> For detectors adjacent to beam pipe.</comment> + <constant name="ForwardPID_rmin" value="Beampipe_rmax + 10*mm"/> + <constant name="ForwardPID_rmin1" value="Beampipe_rmax + 80*mm"/> + <comment> Barrel PID thicknesses</comment> <constant name="BarrelExtraPIDThickness" value="25.0 * cm"/> <constant name="BarrelTRDThickness" value="1.0 * cm"/> <constant name="BarrelTOFThickness" value="1.0 * cm"/> + + + <comment> ============================ Tracking Detector Parameters @@ -351,7 +358,7 @@ ------------------------- </comment> <constant name="ForwardTrackingGEMLength" value="ForwardTrackingLength"/> - <constant name="ForwardTrackingGEMLength" value="BackwardTrackingLength"/> + <constant name="BackwardTrackingGEMLength" value="BackwardTrackingLength"/> <comment> ------------------------- @@ -427,8 +434,8 @@ <constant name="SolenoidYokeEndcapN_zmin" value="Solenoid_length/2.0 - Solenoid_offset + HcalEndcapNExtra_length"/> <constant name="EcalBarrel_rmin" value="SiliconTrackerOuterRadius + BarrelExtraPIDThickness + 5.0 * mm"/> - <constant name="HcalBarrel_rmax" value="Solenoid_rmin - 10.0 *cm "/> - <constant name="Barrel_TotalCalThickness" value="HcalBarrel_rmax - EcalBarrel_rmin"/> + <constant name="Barrel_rmax" value="Solenoid_rmin - 10.0 *cm "/> + <constant name="Barrel_TotalCalThickness" value="Barrel_rmax - EcalBarrel_rmin"/> <constant name="CalBarrelDivider" value="0.8"/> <comment> Leave room for TRD </comment> @@ -458,8 +465,6 @@ <constant name="EcalEndcapP_length" value="EndcapPTotalCal_length * EndcapP_CalDivide"/> <constant name="EcalEndcapN_length" value="EndcapNTotalCal_length * EndcapN_CalDivide"/> - <constant name="HcalEndcapP_length" value="EndcapPTotalCal_length * (1.0 - EndcapP_CalDivide)"/> - <constant name="HcalEndcapN_length" value="EndcapNTotalCal_length * (1.0 - EndcapN_CalDivide)"/> <comment> These need to be set in sync with the forward and backward detectors </comment> <constant name="EcalEndcapP_rmin" value="200.0*mm"/> @@ -536,12 +541,19 @@ Hadronic Calorimeter Parameters ------------------------------- </comment> - <constant name="HcalBarrel_rmin" value="EcalBarrel_rmax"/> - <constant name="HcalBarrelAvailThickness" value="HcalBarrel_rmax - HcalBarrel_rmin"/> - <constant name="HcalBarrelLength" value="Solenoid_length + HcalEndcapPExtra_length + HcalEndcapNExtra_length- HcalEndcapP_length- HcalEndcapN_length - 10*cm"/> - + + <constant name="HcalEndcapP_length" value="50.0*cm"/> + <constant name="HcalEndcapN_length" value="50.0*cm"/> + <constant name="HcalBarrel_thickness" value="50.0*cm "/> + + <constant name="HcalBarrel_rmin" value="Solenoid_rmax"/> + <constant name="HcalBarrel_rmax" value="HcalBarrel_rmin + HcalBarrel_thickness"/> + + <constant name="HcalBarrelAvailThickness" value="HcalBarrel_thickness"/> + <constant name="HcalEndcapP_zmin" value="EcalEndcapP_zmin + EcalEndcapP_length "/> <constant name="HcalEndcapN_zmin" value="EcalEndcapN_zmin + EcalEndcapN_length "/> + <constant name="HcalBarrelLength" value="HcalEndcapP_zmin + HcalEndcapN_zmin "/> <comment> Material Thickness </comment> <constant name="HcalSteelThickness" value="1.89 * cm"/> @@ -610,12 +622,6 @@ Gaseous RICH Parameters ----------------------- </comment> - <constant name="ForwardRICH_zmin" value="BarrelTracking_length/2.0 + ForwardTrackingLength + 1 * mm"/> - <constant name="ForwardRICH_rmin" value="15 * cm"/> - <constant name="ForwardRICH_rmax0" value="SiliconTrackerOuterRadius"/> - <constant name="ForwardRICH_rmax1" value="EcalBarrel_rmin"/> - <constant name="ForwardRICH_rmax2" value="SolenoidBarrel_rmin-2*cm"/> - <constant name="ForwardRICHDepth" value="0.9*m"/> <comment> diff --git a/compact/ecal.xml b/compact/ecal.xml index 1f44ac9..42fd2fb 100644 --- a/compact/ecal.xml +++ b/compact/ecal.xml @@ -10,6 +10,10 @@ <constant name="CrystalEndcap_x_pos" value="0.0*m"/> <constant name="CrystalEndcap_y_pos" value="0.0*m"/> <constant name="CrystalEndcap_z_pos" value="-EcalEndcapN_zmin"/> + + + + <constant name="EcalEndcapP_rmax" value="Solenoid_rmax "/> </define> @@ -88,7 +92,7 @@ numsides="CaloSides" zmin="EcalEndcapP_zmin" rmin="EcalEndcapP_rmin" - rmax="EcalBarrel_rmax " /> + rmax="EcalEndcapP_rmax " /> <layer repeat="EcalEndcapPLayer1_NRepeat"> <slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/> <slice material="Copper" thickness="EcalCopperThickness"/> diff --git a/compact/forward_rich.xml b/compact/forward_rich.xml index 8350f59..e35fe98 100644 --- a/compact/forward_rich.xml +++ b/compact/forward_rich.xml @@ -1,10 +1,16 @@ <?xml version="1.0" encoding="UTF-8"?> <lccdd> <define> + <constant name="ForwardRICH_zmin" value="BarrelTracking_length/2.0 + ForwardTrackingLength "/> + <constant name="ForwardRICH_rmin" value="ForwardPID_rmin1"/> + <constant name="ForwardRICH_rmax0" value="SiliconTrackerOuterRadius"/> + <constant name="ForwardRICH_rmax1" value="EcalBarrel_rmin"/> + <constant name="ForwardRICH_rmax2" value="Solenoid_rmin-6*cm"/> + <constant name="ForwardRICHDepth" value="0.9*m"/> </define> <detectors> - <detector id="ForwardRICH_ID" name="ForwardRICH" type="refdet_ForwardRICH" readout="ForwardRICHHits" vis="BlueVis"> + <detector id="ForwardRICH_ID" name="ForwardRICH" type="refdet_ForwardRICH" readout="ForwardRICHHits" vis="RICHVis"> <dimensions z0="ForwardRICH_zmin" snout_length="ForwardRICH_length - ForwardRICHDepth" @@ -22,8 +28,8 @@ rmax1="ForwardRICH_rmax1" rmax2="ForwardRICH_rmax2" /> <comment> What are the following MCP-PMT parameters?</comment> - <mcppmt - z0="-20.0*cm" + <mcppmt + z0="0.0*cm" rmin="ForwardRICH_rmax1" rmax="ForwardRICH_rmax2" rtol="1.0*cm" diff --git a/compact/forward_trd.xml b/compact/forward_trd.xml index 693f533..680bbdc 100644 --- a/compact/forward_trd.xml +++ b/compact/forward_trd.xml @@ -6,9 +6,9 @@ Forward TRD Parameters -------------------------- </comment> - <constant name="ForwardTRD_zmin" value="ForwardRICH_zmin + ForwardRICH_length+ 1*cm"/> - <constant name="ForwardTRD_rmin" value="ForwardRICH_rmin"/> - <constant name="ForwardTRD_rmax" value="EcalBarrel_rmax - 5*cm"/> + <constant name="ForwardTRD_zmin" value="BarrelTracking_length/2.0 + ForwardTrackingLength + ForwardRICH_length"/> + <constant name="ForwardTRD_rmin" value="ForwardPID_rmin1"/> + <constant name="ForwardTRD_rmax" value="Solenoid_rmin"/> </define> <detectors> @@ -19,7 +19,7 @@ insideTrackingVolume="true" reflect="false" vis="Argonne_Red"> - <position x="0" y="0" z="0"/> + <position x="0" y="0" z="0.0"/> <layer id="1" vis="Argonne_Blue" inner_z="ForwardTRD_zmin" diff --git a/compact/hcal.xml b/compact/hcal.xml index f9af3d5..ad16a15 100644 --- a/compact/hcal.xml +++ b/compact/hcal.xml @@ -1,6 +1,7 @@ <lccdd> <define> + <constant name="HcalBarrel_offset" value="(HcalEndcapP_zmin-HcalEndcapN_zmin)/2.0" /> </define> <limits> @@ -15,14 +16,13 @@ <!-- Define detector --> <detectors> - <!-- <detector id="HCalBarrel_ID" name="HcalBarrel" type="refdet_EcalBarrel" readout="HcalBarrelHits" calorimeterType="HAD_BARREL" - offset="Barrel_offset" + offset="HcalBarrel_offset" gap="0.*cm" material="Steel235"> <dimensions @@ -39,7 +39,6 @@ <slice material="Air" thickness="HcalAirThickness"/> </layer> </detector> - --> <detector id="HCalEndcapP_ID" diff --git a/reference_detector.xml b/reference_detector.xml index 9608080..c04c3e6 100644 --- a/reference_detector.xml +++ b/reference_detector.xml @@ -12,8 +12,8 @@ </info> <define> + <include ref="ip6/ip6_defs.xml" /> <comment> IP definitions should be first</comment> <include ref="compact/definitions.xml" /> - <include ref="ip6/ip6_defs.xml" /> <!-- <include ref="eic/eic_defs.xml" /> --> @@ -110,11 +110,9 @@ <include ref="compact/display.xml" /> </display> - <!-- - <include ref="reference_detector/vertex_tracker.xml"/> - <include ref="compact/silicon_tracker.xml"/> - --> + <comment> Include the IP components first </comment> <include ref="ip6/beampipe.xml"/> + <include ref="compact/solenoid.xml"/> <include ref="compact/ecal.xml"/> <include ref="compact/ce_mrich.xml"/> @@ -129,14 +127,14 @@ <include ref="compact/forward_romanpot.xml"/> <include ref="compact/far_forward_detectors.xml"/> <include ref="eic/forward_ion_beamline.xml"/> - <include ref="compact/hcal.xml"/> + <include ref="compact/forward_rich.xml"/> + <!-- <include ref="compact/ci_GEM.xml"/> <include ref="compact/cb_CTD_Si.xml"/> <include ref="compact/cb_VTX_Barrel.xml"/> <include ref="compact/ci_HCAL.xml"/> - <include ref="compact/forward_rich.xml"/> <include ref="compact/roman_pots.xml"/> --> diff --git a/src/ForwardRICH_geo.cpp b/src/ForwardRICH_geo.cpp index b88bcd7..d715662 100644 --- a/src/ForwardRICH_geo.cpp +++ b/src/ForwardRICH_geo.cpp @@ -118,7 +118,7 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec double mTheta1 = std::asin(mRmin/curve); double mTheta2 = std::asin(mRmax/curve); double rotY = -std::asin(focus/curve); - mirVol.setSolid(Sphere(curve, curve + mThick, mTheta1, mTheta2, 0., wphi)); + mirVol.setSolid(Sphere(curve, curve + mThick, mTheta1*1.01, mTheta2*0.99, 0., wphi)); // action is in a reverse order Transform3D tr = Translation3D(0., 0., mirZ - front_offset) // move for z position * RotationZ(rotZ) // rotate phi angle @@ -179,7 +179,7 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec pdPV.addPhysVolID("layer", ilayer).addPhysVolID("piece", ipd + 1); } Volume motherVol = desc.pickMotherVolume(det); - PlacedVolume envPV = motherVol.placeVolume(envVol, Position(0, 0, z0 + halfLength)); + PlacedVolume envPV = motherVol.placeVolume(envVol, Position(0, 0, z0 + front_offset)); envPV.addPhysVolID("system", detID); det.setPlacement(envPV); diff --git a/src/ref_DiskTracker_geo.cpp b/src/ref_DiskTracker_geo.cpp index 8f60a3a..4431e88 100644 --- a/src/ref_DiskTracker_geo.cpp +++ b/src/ref_DiskTracker_geo.cpp @@ -1,5 +1,5 @@ //========================================================================== -// AIDA Detector description implementation +// AIDA Detector description implementation //-------------------------------------------------------------------------- // Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) // All rights reserved. @@ -12,7 +12,7 @@ //========================================================================== // // Specialized generic detector constructor -// +// //========================================================================== #include "DD4hep/DetFactoryHelper.h" @@ -20,47 +20,49 @@ using namespace std; using namespace dd4hep; using namespace dd4hep::detail; -static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector sens) { - xml_det_t x_det = e; - Material air = description.air(); - string det_name = x_det.nameStr(); - bool reflect = x_det.reflect(); - DetElement sdet(det_name,x_det.id()); - Assembly assembly(det_name); - PlacedVolume pv; - int l_num = 0; - xml::Component pos = x_det.position(); +static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector sens) +{ + xml_det_t x_det = e; + Material air = description.air(); + string det_name = x_det.nameStr(); + bool reflect = x_det.reflect(); + DetElement sdet(det_name, x_det.id()); + Assembly assembly(det_name); + PlacedVolume pv; + int l_num = 0; + xml::Component pos = x_det.position(); + + for (xml_coll_t i(x_det, _U(layer)); i; ++i, ++l_num) { + xml_comp_t x_layer = i; + string l_nam = det_name + _toString(l_num, "_layer%d"); + double zmin = x_layer.inner_z(); + double rmin = x_layer.inner_r(); + double rmax = x_layer.outer_r(); + double z = zmin; + double layerWidth = 0.; + int s_num = 0; - for(xml_coll_t i(x_det,_U(layer)); i; ++i, ++l_num) { - xml_comp_t x_layer = i; - string l_nam = det_name+_toString(l_num,"_layer%d"); - double zmin = x_layer.inner_z(); - double rmin = x_layer.inner_r(); - double rmax = x_layer.outer_r(); - double z = zmin, layerWidth = 0.; - int s_num = 0; - - for(xml_coll_t j(x_layer,_U(slice)); j; ++j) { + for (xml_coll_t j(x_layer, _U(slice)); j; ++j) { double thickness = xml_comp_t(j).thickness(); layerWidth += thickness; } - Tube l_tub(rmin,rmax,layerWidth,2*M_PI); - Volume l_vol(l_nam,l_tub,air); - l_vol.setVisAttributes(description,x_layer.visStr()); - for(xml_coll_t j(x_layer,_U(slice)); j; ++j, ++s_num) { + Tube l_tub(rmin, rmax, layerWidth/2.0, 2 * M_PI); + Volume l_vol(l_nam, l_tub, air); + l_vol.setVisAttributes(description, x_layer.visStr()); + for (xml_coll_t j(x_layer, _U(slice)); j; ++j, ++s_num) { xml_comp_t x_slice = j; - double thick = x_slice.thickness(); - Material mat = description.material(x_slice.materialStr()); - string s_nam = l_nam+_toString(s_num,"_slice%d"); - Volume s_vol(s_nam, Tube(rmin,rmax,thick), mat); - - if ( x_slice.isSensitive() ) { + double thick = x_slice.thickness(); + Material mat = description.material(x_slice.materialStr()); + string s_nam = l_nam + _toString(s_num, "_slice%d"); + Volume s_vol(s_nam, Tube(rmin, rmax, thick/2.0), mat); + + if (x_slice.isSensitive()) { sens.setType("tracker"); s_vol.setSensitiveDetector(sens); } - 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.addPhysVolID("slice",s_num); + 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.addPhysVolID("slice", s_num); } if (!reflect) { @@ -71,22 +73,22 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s layer.setPlacement(pv); } else { DetElement layer(sdet, l_nam + "_neg", 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",1); + pv = assembly.placeVolume(l_vol, Transform3D(RotationY(M_PI), Position(0, 0, -zmin - layerWidth / 2))); + pv.addPhysVolID("layer", l_num); + pv.addPhysVolID("barrel", 1); layer.setPlacement(pv); // DetElement layerR = layer.clone(l_nam+"_neg"); // sdet.add(layerR.setPlacement(pv)); } } - if ( x_det.hasAttr(_U(combineHits)) ) { - sdet.setCombineHits(x_det.attr<bool>(_U(combineHits)),sens); + if (x_det.hasAttr(_U(combineHits))) { + sdet.setCombineHits(x_det.attr<bool>(_U(combineHits)), sens); } - pv = description.pickMotherVolume(sdet).placeVolume(assembly,Position(pos.x(),pos.y(),pos.z())); - pv.addPhysVolID("system", x_det.id()); // Set the subdetector system ID. + pv = description.pickMotherVolume(sdet).placeVolume(assembly, Position(pos.x(), pos.y(), pos.z())); + pv.addPhysVolID("system", x_det.id()); // Set the subdetector system ID. sdet.setPlacement(pv); return sdet; } -DECLARE_DETELEMENT(ref_DiskTracker,create_detector) -DECLARE_DETELEMENT(ref_SolenoidEndcap,create_detector) +DECLARE_DETELEMENT(ref_DiskTracker, create_detector) +DECLARE_DETELEMENT(ref_SolenoidEndcap, create_detector) -- GitLab