From 56a9cdb06a26bb74bf2f5d1aff37e9d80c1d3d92 Mon Sep 17 00:00:00 2001 From: Whitney Armstrong <warmstrong@anl.gov> Date: Thu, 17 Jun 2021 16:21:42 +0000 Subject: [PATCH] Moving far forward detectors to ip6 repository. --- athena.xml | 8 +-- compact/B0_tracker.xml | 41 ----------- compact/definitions.xml | 27 -------- compact/far_forward_ZDC_Ecal.xml | 30 --------- compact/far_forward_ZDC_Hcal.xml | 35 ---------- compact/far_forward_detectors.xml | 32 --------- compact/far_forward_offM_tracker.xml | 42 ------------ compact/far_forward_romanpots.xml | 63 ----------------- compact/ffi_offmtrk.xml | 97 --------------------------- src/ZeroDegreeCalorimeterEcal_geo.cpp | 88 ------------------------ src/ZeroDegreeCalorimeterHcal_geo.cpp | 95 -------------------------- 11 files changed, 4 insertions(+), 554 deletions(-) delete mode 100644 compact/B0_tracker.xml delete mode 100644 compact/far_forward_ZDC_Ecal.xml delete mode 100644 compact/far_forward_ZDC_Hcal.xml delete mode 100644 compact/far_forward_detectors.xml delete mode 100644 compact/far_forward_offM_tracker.xml delete mode 100644 compact/far_forward_romanpots.xml delete mode 100644 compact/ffi_offmtrk.xml delete mode 100644 src/ZeroDegreeCalorimeterEcal_geo.cpp delete mode 100644 src/ZeroDegreeCalorimeterHcal_geo.cpp diff --git a/athena.xml b/athena.xml index 59a8a4d8..128cf4c7 100644 --- a/athena.xml +++ b/athena.xml @@ -192,10 +192,10 @@ <include ref="compact/forward_trd.xml"/> <include ref="compact/forward_rich.xml"/> - <include ref="compact/B0_tracker.xml"/> - <include ref="compact/far_forward_offM_tracker.xml"/> - <include ref="compact/far_forward_romanpots.xml"/> - <include ref="compact/far_forward_detectors.xml"/> + <include ref="ip6/B0_tracker.xml"/> + <include ref="ip6/far_forward_offM_tracker.xml"/> + <include ref="ip6/far_forward_romanpots.xml"/> + <include ref="ip6/far_forward_detectors.xml"/> <!-- <include ref="compact/mm_tracker_barrel.xml"/> diff --git a/compact/B0_tracker.xml b/compact/B0_tracker.xml deleted file mode 100644 index d7f14aa3..00000000 --- a/compact/B0_tracker.xml +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<lccdd> - <define> - <comment> - --------------------------------- - Far Forward B0 Tracker Parameters - --------------------------------- - </comment> - <constant name="B0Tracker_zpos" value="B0PF_CenterPosition + B0PF_Length/2.0 + 20.0*cm"/> - </define> - - <detectors> - <detector - id="B0Tracker_ID" - name="B0Tracker" - readout="B0TrackerHits" - type="ref_RectangularTracker" - insideTrackingVolume="true" - reflect="false" - vis="AnlRed"> - <position x="0" y="0" z="B0Tracker_zpos"/> - <layer id="1" - vis="AnlBlue" - x="20.0*cm" - y="10.0*cm" > - <slice material="Air" thickness="1.0*cm" vis="AnlBlue" sensitive="true" /> - <slice material="Air" thickness="1.0*cm" vis="AnlBlue" sensitive="true" /> - <slice material="Air" thickness="1.0*cm" vis="AnlBlue" sensitive="true" /> - <slice material="Air" thickness="1.0*cm" vis="AnlBlue" sensitive="true" /> - </layer> - </detector> - </detectors> - - <readouts> - <readout name="B0TrackerHits"> - <segmentation type="CartesianGridXY" grid_size_x="1.0*mm" grid_size_y="1.0*mm" /> - <id>system:8,barrel:3,layer:4,slice:4,x:32:-16,y:-16</id> - </readout> - </readouts> - -</lccdd> diff --git a/compact/definitions.xml b/compact/definitions.xml index f629ef60..efdbdb09 100644 --- a/compact/definitions.xml +++ b/compact/definitions.xml @@ -626,33 +626,6 @@ <constant name="DIRCLength" value="CentralTracking_length + BackwardPIDLength"/> <constant name="DIRCOffset" value="(CentralTracking_length - DIRCLength)/2.0"/> - <comment> - ---------------------- - Zero Degree Parameters - ---------------------- - </comment> - <constant name="ffi_ZDC_ECAL_z_pos" value="3800.0 * cm"/> - <constant name="ffi_ZDC_ECAL_x_pos" value="ffi_ZDC_ECAL_z_pos * ionCrossingAngle"/> - <constant name="ffi_ZDC_ECAL_y_pos" value="0.0 * cm"/> - <constant name="ffi_ZDC_ECAL_rotateX_angle" value="0.0 * rad"/> - <constant name="ffi_ZDC_ECAL_rotateY_angle" value="-0.0125 * rad"/> - <constant name="ffi_ZDC_ECAL_rotateZ_angle" value="0.0 * rad"/> - <constant name="ffi_ZDC_ECAL_module_width" value="5.0 * cm"/> - <constant name="ffi_ZDC_ECAL_module_thickness" value="20.0 * cm"/> - <constant name="ffi_ZDC_ECAL_module_gap" value="1.0 * mm"/> - <constant name="ffi_ZDC_ECAL_module_ntower" value="12"/> - <constant name="ffi_ZDC_ECAL_width" value="(ffi_ZDC_ECAL_module_width + ffi_ZDC_ECAL_module_gap) * ffi_ZDC_ECAL_module_ntower + 2.0 * cm"/> - <constant name="ffi_ZDC_ECAL_thickness" value="ffi_ZDC_ECAL_module_thickness + 2.0 * cm"/> - - <constant name="ffi_ZDC_HCAL_x_pos" value="ffi_ZDC_ECAL_x_pos"/> - <constant name="ffi_ZDC_HCAL_y_pos" value="ffi_ZDC_ECAL_y_pos"/> - <constant name="ffi_ZDC_HCAL_z_pos" value="ffi_ZDC_ECAL_z_pos + ffi_ZDC_ECAL_thickness + 3.0 * cm"/> - <constant name="ffi_ZDC_HCAL_rotateX_angle" value="ffi_ZDC_ECAL_rotateX_angle"/> - <constant name="ffi_ZDC_HCAL_rotateY_angle" value="ffi_ZDC_ECAL_rotateY_angle"/> - <constant name="ffi_ZDC_HCAL_rotateZ_angle" value="ffi_ZDC_ECAL_rotateZ_angle"/> - <constant name="ffi_ZDC_HCAL_width" value="ffi_ZDC_ECAL_module_width * ffi_ZDC_ECAL_module_ntower"/> - <constant name="ffi_ZDC_HCAL_length" value="200.0 * cm"/> - <comment> ----------------------- Gaseous RICH Parameters diff --git a/compact/far_forward_ZDC_Ecal.xml b/compact/far_forward_ZDC_Ecal.xml deleted file mode 100644 index 10631a01..00000000 --- a/compact/far_forward_ZDC_Ecal.xml +++ /dev/null @@ -1,30 +0,0 @@ -<lccdd> - <comment> - ////////////////////////////////////////////////// - // Far Forward Ion Zero Degree Calorimeter - Ecal - // PWO crystal bars - ////////////////////////////////////////////////// - </comment> - - <detectors> - <detector id="ffi_ZDC_ECAL_ID" name="ffi_ZDC_ECAL" type="ffi_ZDC_ECAL" readout="ffi_ZDC_ECAL_Hits" vis="ffi_ZDC_ECAL_Vis"> - <position x="ffi_ZDC_ECAL_x_pos" y="ffi_ZDC_ECAL_y_pos" z="ffi_ZDC_ECAL_z_pos"/> - <rotation x="ffi_ZDC_ECAL_rotateX_angle" y="ffi_ZDC_ECAL_rotateY_angle" z="ffi_ZDC_ECAL_rotateZ_angle"/> - <dimensions x="ffi_ZDC_ECAL_width" z="ffi_ZDC_ECAL_thickness"/> - <module name="ffi_ZDC_ECAL_module" - vis="ffi_ZDC_ECAL_module_Vis" - material="PbWO4" - thickness="ffi_ZDC_ECAL_module_thickness" - width="ffi_ZDC_ECAL_module_width" - gap="ffi_ZDC_ECAL_module_gap" - ntower="ffi_ZDC_ECAL_module_ntower"/> - </detector> - </detectors> - - <readouts> - <readout name="ffi_ZDC_ECAL_Hits"> - <segmentation type="CartesianGridXY" grid_size_x="5.0*cm" grid_size_y="5.0*cm" /> - <id>system:8,module:14,x:32:-16,y:-16</id> - </readout> - </readouts> -</lccdd> diff --git a/compact/far_forward_ZDC_Hcal.xml b/compact/far_forward_ZDC_Hcal.xml deleted file mode 100644 index a1d3c901..00000000 --- a/compact/far_forward_ZDC_Hcal.xml +++ /dev/null @@ -1,35 +0,0 @@ -<lccdd> - <comment> - ////////////////////////////////////////////////// - // Far Forward Ion Zero Degree Calorimeter - Hcal - // Si+W sampling - ////////////////////////////////////////////////// - </comment> - - <define> - <constant name="ffi_ZDC_HCAL_NRepeat" value="40"/> - <constant name="ffiZDCHcalTungstenThickness" value="3.5 * mm"/> - <constant name="ffiZDCHcalSiliconThickness" value="500.0 * um"/> - <constant name="ffiZDCHcalAirThickness" value="1.0 * mm"/> - </define> - - <detectors> - <detector id="ffi_ZDC_HCAL_ID" name="ffi_ZDC_HCAL" type="ffi_ZDC_HCAL" readout="ffi_ZDC_HCAL_Hits" vis="ffi_ZDC_HCAL_Vis"> - <position x="ffi_ZDC_HCAL_x_pos" y="ffi_ZDC_HCAL_y_pos" z="ffi_ZDC_HCAL_z_pos"/> - <rotation x="ffi_ZDC_HCAL_rotateX_angle" y="ffi_ZDC_HCAL_rotateY_angle" z="ffi_ZDC_HCAL_rotateZ_angle"/> - <dimensions x="ffi_ZDC_HCAL_width" z="ffi_ZDC_HCAL_length"/> - <layer repeat="ffi_ZDC_HCAL_NRepeat"> - <slice name="Tungsten_slice" material="TungstenDens24" thickness="ffiZDCHcalTungstenThickness" vis="AnlBlue"/> - <slice name="Silicon_slice" material="Silicon" thickness="ffiZDCHcalSiliconThickness" vis="AnlRed" sensitive="true"/> - <slice name="Air_slice" material="Air" thickness="ffiZDCHcalAirThickness" vis="AnlGold"/> - </layer> - </detector> - </detectors> - - <readouts> - <readout name="ffi_ZDC_HCAL_Hits"> - <segmentation type="CartesianGridXY" grid_size_x="1.0*cm" grid_size_y="1.0*cm" /> - <id>system:8,layer:12,slice:12,x:32:-16,y:-16</id> - </readout> - </readouts> -</lccdd> diff --git a/compact/far_forward_detectors.xml b/compact/far_forward_detectors.xml deleted file mode 100644 index d55cf729..00000000 --- a/compact/far_forward_detectors.xml +++ /dev/null @@ -1,32 +0,0 @@ -<lccdd> - - <comment>Far Forward Hadron Detectors</comment> - - <define> - </define> - - <limits> - </limits> - - <regions> - </regions> - - <display> - </display> - - - <include ref="far_forward_ZDC_Ecal.xml" /> - <include ref="far_forward_ZDC_Hcal.xml" /> - - <detectors> - </detectors> - - <readouts> - </readouts> - - <plugins> - </plugins> - - <fields> - </fields> -</lccdd> diff --git a/compact/far_forward_offM_tracker.xml b/compact/far_forward_offM_tracker.xml deleted file mode 100644 index ae7f4752..00000000 --- a/compact/far_forward_offM_tracker.xml +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<lccdd> - <define> - <comment> - ---------------------------------------- - Forward Off-Momentum Tracker Parameters - ---------------------------------------- - </comment> - <constant name="ForwardOffMTracker_zpos" value="B1APF_CenterPosition + B1APF_Length/2.0 + 10.0*cm"/> - <constant name="ForwardOffMTracker_xpos" value="B1APF_XPosition+40.0*cm"/> - </define> - - <detectors> - <detector - id="ForwardOffMTracker_ID" - name="ForwardOffMTracker" - readout="ForwardOffMTrackerHits" - type="ref_RectangularTracker" - insideTrackingVolume="true" - reflect="false" - vis="AnlRed"> - <position x="ForwardOffMTracker_xpos" y="0" z="ForwardOffMTracker_zpos"/> - <layer id="1" - vis="AnlViolet" - x="60.0*cm" - y="20.0*cm" > - <slice material="Air" thickness="1.0*cm" vis="AnlViolet" sensitive="true" /> - <slice material="Air" thickness="1.0*cm" vis="AnlViolet" sensitive="true" /> - <slice material="Air" thickness="1.0*cm" vis="AnlViolet" sensitive="true" /> - <slice material="Air" thickness="1.0*cm" vis="AnlViolet" sensitive="true" /> - </layer> - </detector> - </detectors> - - <readouts> - <readout name="ForwardOffMTrackerHits"> - <segmentation type="CartesianGridXY" grid_size_x="1.0*mm" grid_size_y="1.0*mm" /> - <id>system:8,barrel:3,layer:4,slice:4,x:32:-16,y:-16</id> - </readout> - </readouts> - -</lccdd> diff --git a/compact/far_forward_romanpots.xml b/compact/far_forward_romanpots.xml deleted file mode 100644 index ba81c1f3..00000000 --- a/compact/far_forward_romanpots.xml +++ /dev/null @@ -1,63 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<lccdd> - <define> - <comment> - --------------------------------- - Far Forward B0 Tracker Parameters - --------------------------------- - </comment> - <constant name="ForwardRomanPotA_zpos" value="B1APF_CenterPosition + B1APF_Length/2.0 + 20.0*cm"/> - <constant name="ForwardRomanPotA_xpos" value="B1APF_XPosition"/> - <constant name="ForwardRomanPotB_zpos" value="B2PF_CenterPosition - B2PF_Length/2.0 - 20.0*cm"/> - <constant name="ForwardRomanPotB_xpos" value="B2PF_XPosition "/> - </define> - - <detectors> - <detector - id="ForwardRomanPotA_ID" - name="ForwardRomanPotA" - readout="ForwardRomanPotHits" - type="ref_RectangularTracker" - insideTrackingVolume="true" - reflect="false" - vis="AnlRed"> - <position x="ForwardRomanPotA_xpos" y="0" z="ForwardRomanPotA_zpos"/> - <layer id="1" - vis="AnlBlue" - x="20.0*cm" - y="10.0*cm" > - <slice material="Air" thickness="1.0*cm" vis="AnlBlue" sensitive="true" /> - <slice material="Air" thickness="1.0*cm" vis="AnlBlue" sensitive="true" /> - <slice material="Air" thickness="1.0*cm" vis="AnlBlue" sensitive="true" /> - <slice material="Air" thickness="1.0*cm" vis="AnlBlue" sensitive="true" /> - </layer> - </detector> - <detector - id="ForwardRomanPotB_ID" - name="ForwardRomanPotB" - readout="ForwardRomanPotHits" - type="ref_RectangularTracker" - insideTrackingVolume="true" - reflect="false" - vis="AnlRed"> - <position x="ForwardRomanPotB_xpos" y="0" z="ForwardRomanPotB_zpos"/> - <layer id="1" - vis="AnlBlue" - x="20.0*cm" - y="10.0*cm" > - <slice material="Air" thickness="1.0*cm" vis="AnlBlue" sensitive="true" /> - <slice material="Air" thickness="1.0*cm" vis="AnlBlue" sensitive="true" /> - <slice material="Air" thickness="1.0*cm" vis="AnlBlue" sensitive="true" /> - <slice material="Air" thickness="1.0*cm" vis="AnlBlue" sensitive="true" /> - </layer> - </detector> - </detectors> - - <readouts> - <readout name="ForwardRomanPotHits"> - <segmentation type="CartesianGridXY" grid_size_x="1.0*mm" grid_size_y="1.0*mm" /> - <id>system:8,barrel:3,layer:4,slice:4,x:32:-16,y:-16</id> - </readout> - </readouts> - -</lccdd> diff --git a/compact/ffi_offmtrk.xml b/compact/ffi_offmtrk.xml deleted file mode 100644 index 563167e1..00000000 --- a/compact/ffi_offmtrk.xml +++ /dev/null @@ -1,97 +0,0 @@ - -<lccdd> - - <define> - </define> - - <limits> - </limits> - - <regions> - </regions> - - <display> - </display> - - <!-- Define detector --> - <detectors> - - <detector - id="HCalBarrel_ID" - name="HcalBarrel" - type="DD4hep_PolyhedraBarrelCalorimeter2" - readout="HcalBarrelHits" - calorimeterType="HAD_BARREL" - gap="0.*cm" - material="Steel235"> - <dimensions - numsides="CaloSides" - rmin="HcalBarrel_rmin" - z="HcalBarrelLength"/> - <staves vis="HcalBarrelVis"/> - <layer repeat="HcalBarrelLayers"> - <slice material="Steel235" thickness="HcalSteelThickness"/> - <slice material="PyrexGlass" thickness="HcalPyrexThickness"/> - <slice material="RPCGasDefault" thickness="HcalRPCGasThickness" sensitive="yes" limits="cal_limits"/> - <slice material="PyrexGlass" thickness="HcalPyrexThickness"/> - <slice material="G10" thickness="HcalG10Thickness"/> - <slice material="Air" thickness="HcalAirThickness"/> - </layer> - </detector> - - <detector - id="HCalEndcapP_ID" - name="HcalEndcapP" - type="refdet_PolyhedraEndcapCalorimeter2" - readout="HcalEndcapHits" - vis="HcalEndcapVis" - calorimeterType="HAD_ENDCAP" - reflect="false"> - <dimensions - numsides="CaloSides" - zmin="HcalEndcap_zmin" - rmin="HcalEndcapP_rmin" - rmax="HcalBarrel_rmax"/> - <layer repeat="HcalEndcapLayers" vis="HcalEndcapVis" > - <slice material="Steel235" thickness="HcalSteelThickness"/> - <slice material="PyrexGlass" thickness="HcalPyrexThickness"/> - <slice material="RPCGasDefault" thickness="HcalRPCGasThickness" sensitive="yes" limits="cal_limits"/> - <slice material="PyrexGlass" thickness="HcalPyrexThickness"/> - <slice material="G10" thickness="HcalG10Thickness"/> - <slice material="Air" thickness="HcalAirThickness"/> - </layer> - </detector> - - <detector - id="HCalEndcapN_ID" - name="HcalEndcapN" - type="refdet_PolyhedraEndcapCalorimeter2" - readout="HcalEndcapHits" - vis="HcalEndcapVis" - calorimeterType="HAD_ENDCAP" reflect="true"> - <dimensions - numsides="CaloSides" - zmin="HcalEndcap_zmin" - rmin="HcalEndcapN_rmin" - rmax="HcalBarrel_rmax"/> - <layer repeat="HcalEndcapLayers" vis="HcalEndcapVis" > - <slice material="Steel235" thickness="HcalSteelThickness"/> - <slice material="PyrexGlass" thickness="HcalPyrexThickness"/> - <slice material="RPCGasDefault" thickness="HcalRPCGasThickness" sensitive="yes" limits="cal_limits"/> - <slice material="PyrexGlass" thickness="HcalPyrexThickness"/> - <slice material="G10" thickness="HcalG10Thickness"/> - <slice material="Air" thickness="HcalAirThickness"/> - </layer> - </detector> - - </detectors> - <!-- Definition of the readout segmentation/definition --> - <readouts> - </readouts> - - <plugins> - </plugins> - - <fields> - </fields> -</lccdd> diff --git a/src/ZeroDegreeCalorimeterEcal_geo.cpp b/src/ZeroDegreeCalorimeterEcal_geo.cpp deleted file mode 100644 index eb4694f9..00000000 --- a/src/ZeroDegreeCalorimeterEcal_geo.cpp +++ /dev/null @@ -1,88 +0,0 @@ -#include "DDRec/Surface.h" -#include "DDRec/DetectorData.h" -#include "DD4hep/OpticalSurfaces.h" -#include "DD4hep/DetFactoryHelper.h" -#include "DD4hep/Printout.h" -#include <XML/Helper.h> -////////////////////////////////////////////////// -// Far Forward Ion Zero Degree Calorimeter - Ecal -////////////////////////////////////////////////// - -using namespace std; -using namespace dd4hep; - -static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens) -{ - xml_det_t x_det = e; - string detName = x_det.nameStr(); - int detID = x_det.id(); - - xml_dim_t dim = x_det.dimensions(); - double Width = dim.x(); - double Thickness = dim.z(); - - xml_dim_t pos = x_det.position(); - xml_dim_t rot = x_det.rotation(); - - Material Vacuum = desc.material("Vacuum"); - - xml_comp_t mod = x_det.child(_Unicode(module)); - string modName = mod.nameStr(); - Material mPbWO4 = desc.material(mod.materialStr()); - double mThickness = mod.attr<double>(_Unicode(thickness)); - double mWidth = mod.attr<double>(_Unicode(width)); - double mGap = mod.attr<double>(_Unicode(gap)); - int mNTowers = mod.attr<double>(_Unicode(ntower)); - - // Create Global Volume - Box ffi_ZDC_GVol_Solid(Width * 0.5, Width * 0.5, Thickness * 0.5); - Volume detVol("ffi_ZDC_GVol_Logic", ffi_ZDC_GVol_Solid, Vacuum); - detVol.setVisAttributes(desc.visAttributes(x_det.visStr())); - - // Construct Tower - // Single Module - Box ffi_ZDC_ECAL_Solid_Tower(mWidth * 0.5, mWidth * 0.5, mThickness * 0.5); - Volume modVol("ffi_ZDC_ECAL_Logic_Tower", ffi_ZDC_ECAL_Solid_Tower, mPbWO4); - modVol.setVisAttributes(desc.visAttributes(mod.visStr())); - sens.setType("calorimeter"); - modVol.setSensitiveDetector(sens); - - // Module Position - double mod_x = 0.0 * mm; - double mod_y = 0.0 * mm; - double mod_z = -1.0 * Thickness / 2.0 + mThickness / 2.0 + 2.0 * mm; - - int k = -1; - // Place Modules - for (int j = 0; j < mNTowers; j++) { - if (j == 0) - mod_y = Width / 2.0 - mWidth / 2.0 - mGap; - else - mod_y -= (mWidth + mGap); - - if (abs(mod_y + mWidth / 2.0) > Width / 2.0) - continue; - - mod_x = Width / 2.0 - (mWidth + mGap) * 0.5; - - for (int i = 0; i < mNTowers; i++) { - if (i > 0) - mod_x -= (mWidth + mGap); - if (abs(mod_x + mWidth / 2.0) > Width / 2.0) - continue; - k++; - string module_name = detName + _toString(k,"_ECAL_Phys_%d"); - PlacedVolume pv_mod = detVol.placeVolume(modVol, Position(mod_x,mod_y,mod_z)); - pv_mod.addPhysVolID("module",k+1); - } - } - - DetElement det(detName, detID); - Volume motherVol = desc.pickMotherVolume(det); - Transform3D tr(RotationZYX(rot.z(), -rot.y(), rot.x()), Position(pos.x(), pos.y(), pos.z())); - PlacedVolume detPV = motherVol.placeVolume(detVol, tr); - detPV.addPhysVolID("system", detID); - det.setPlacement(detPV); - return det; -} -DECLARE_DETELEMENT(ffi_ZDC_ECAL, createDetector) diff --git a/src/ZeroDegreeCalorimeterHcal_geo.cpp b/src/ZeroDegreeCalorimeterHcal_geo.cpp deleted file mode 100644 index 7df26f3e..00000000 --- a/src/ZeroDegreeCalorimeterHcal_geo.cpp +++ /dev/null @@ -1,95 +0,0 @@ -#include "DDRec/Surface.h" -#include "DDRec/DetectorData.h" -#include "DD4hep/OpticalSurfaces.h" -#include "DD4hep/DetFactoryHelper.h" -#include "DD4hep/Printout.h" -#include <XML/Helper.h> -#include <XML/Layering.h> -////////////////////////////////////////////////// -// Far Forward Ion Zero Degree Calorimeter - Hcal -////////////////////////////////////////////////// - -using namespace std; -using namespace dd4hep; - -static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens) -{ - xml_det_t x_det = e; - string detName = x_det.nameStr(); - int detID = x_det.id(); - - xml_dim_t dim = x_det.dimensions(); - double Width = dim.x(); - double Length = dim.z(); - - xml_dim_t pos = x_det.position(); - double z = pos.z(); - xml_dim_t rot = x_det.rotation(); - - Material Vacuum = desc.material("Vacuum"); - - int layer_num = 1; - int slice_num = 1; - - double totWidth = Layering(x_det).totalThickness(); - - Box envelope (Width/2.0, Width/2.0, totWidth/2.0); - Volume envelopeVol(detName+"_envelope", envelope, Vacuum); - envelopeVol.setVisAttributes(desc.visAttributes(x_det.visStr())); - PlacedVolume pv; - - xml_comp_t x_layer = x_det.child(_U(layer)); - - // Read layers - for(xml_coll_t c(x_det,_U(layer)); c; ++c) { - xml_comp_t x_layer = c; - int repeat = x_layer.repeat(); - double layerWidth = 0; - - for(xml_coll_t l(x_layer,_U(slice)); l; ++l) - layerWidth += xml_comp_t(l).thickness(); - - // Loop over repeat# - for(int i=0; i< repeat; i++) { - double zlayer = z; - string layer_name = detName + _toString(layer_num,"_layer%d"); - Volume layer_vol(layer_name,Box(Width/2.0, Width/2.0,layerWidth/2.0), Vacuum); - - // Loop over slices - for(xml_coll_t l(x_layer,_U(slice)); l; ++l) { - xml_comp_t x_slice = l; - double w = x_slice.thickness(); - string slice_name = layer_name + _toString(slice_num,"slice%d"); - Material slice_mat = desc.material(x_slice.materialStr()); - Volume slice_vol (slice_name,Box(Width/2.0, Width/2.0,w/2.0),slice_mat); - - if(x_slice.isSensitive()) { - sens.setType("calorimeter"); - slice_vol.setSensitiveDetector(sens); - } - - slice_vol.setAttributes(desc,x_slice.regionStr(), x_slice.limitsStr(), x_slice.visStr()); - pv = layer_vol.placeVolume(slice_vol, Transform3D(RotationZYX(0, 0, 0),Position(0.0,0.0,z-zlayer-layerWidth/2.0+w/2.0))); - pv.addPhysVolID("slice", slice_num); - z += w; - ++slice_num; - } - - string layer_vis = dd4hep::getAttrOrDefault(x_layer, _Unicode(vis), "InvisibleWithDaughters"); - layer_vol.setAttributes(desc, x_layer.regionStr(), x_layer.limitsStr(), layer_vis); - pv = envelopeVol.placeVolume(layer_vol, Transform3D(RotationZYX(0, 0, 0), Position(0,0,zlayer-pos.z()-totWidth/2.0+layerWidth/2.0))); - pv.addPhysVolID("layer", layer_num); - ++layer_num; - } - } - - DetElement det(detName, detID); - Volume motherVol = desc.pickMotherVolume(det); - Transform3D tr(RotationZYX(rot.z(), -rot.y(), rot.x()), Position(pos.x(), pos.y(), pos.z() + totWidth/2.0)); - PlacedVolume phv = motherVol.placeVolume(envelopeVol, tr); - phv.addPhysVolID("system", detID); - det.setPlacement(phv); - - return det; -} -DECLARE_DETELEMENT(ffi_ZDC_HCAL, createDetector) -- GitLab