diff --git a/Detector/DetCEPCv4/compact/FullDetGear.xml b/Detector/DetCEPCv4/compact/FullDetGear.xml new file mode 100644 index 0000000000000000000000000000000000000000..00f51646ab7d08a72ee1f1d42d53d4f5dee70557 --- /dev/null +++ b/Detector/DetCEPCv4/compact/FullDetGear.xml @@ -0,0 +1,330 @@ +<gear> + <global detectorName="CEPC_v4" /> + <!--Gear XML file automatically created with GearXML::createXMLFile ....--> + <BField type="ConstantBField" x="0.000000000e+00" y="0.000000000e+00" z="3.000000000e+00" /> + <detectors> + <detector geartype="TPCParameters" name="TPC"> + <maxDriftLength value="2.225000000e+03" /> + <driftVelocity value="0.000000000e+00" /> + <coordinateType value="polar" /> + <modules> + <module> + <moduleID value="0" /> + <readoutFrequency value="0.000000000e+00" /> + <PadRowLayout2D type="FixedPadSizeDiskLayout" rMin="3.840000000e+02" rMax="1.716000000e+03" padHeight="6.000000000e+00" padWidth="1.000000000e+00" maxRow="222" padGap="0.000000000e+00" phiMax="6.283185307e+00" /> + <offset x_r="0.000000000e+00" y_phi="0.000000000e+00" /> + <angle value="0.000000000e+00" /> + <enlargeActiveAreaBy value="0.000000000e+00" /> + </module> + </modules> + <parameter name="TPCGasProperties_RadLen" type="double" value="1.155205461e+05" /> + <parameter name="TPCGasProperties_dEdx" type="double" value="2.668179899e-07" /> + <parameter name="TPCInnerWallProperties_RadLen" type="double" value="2.740688665e+03" /> + <parameter name="TPCInnerWallProperties_dEdx" type="double" value="1.241647394e-05" /> + <parameter name="TPCOuterWallProperties_RadLen" type="double" value="6.495646008e+03" /> + <parameter name="TPCOuterWallProperties_dEdx" type="double" value="5.300932694e-06" /> + <parameter name="TPCWallProperties_RadLen" type="double" value="2.740688665e+03" /> + <parameter name="TPCWallProperties_dEdx" type="double" value="1.241647394e-05" /> + <parameter name="tpcInnerRadius" type="double" value="3.290000000e+02" /> + <parameter name="tpcInnerWallThickness" type="double" value="2.500000000e+01" /> + <parameter name="tpcOuterRadius" type="double" value="1.808000000e+03" /> + <parameter name="tpcOuterWallThickness" type="double" value="6.000000000e+01" /> + <parameter name="tpcZAnode" type="double" value="4.600000000e+03" /> + </detector> + <detector name="EcalBarrel" geartype="CalorimeterParameters"> + <layout type="Barrel" symmetry="8" phi0="0.000000000e+00" /> + <dimensions inner_r="1.847415655e+03" outer_z="2.350000000e+03" /> + <layer repeat="19" thickness="5.250000000e+00" absorberThickness="2.100000000e+00" cellSize0="1.016666667e+01" cellSize1="1.016666667e+01" /> + <layer repeat="1" thickness="6.300000000e+00" absorberThickness="2.100000000e+00" cellSize0="1.016666667e+01" cellSize1="1.016666667e+01" /> + <layer repeat="9" thickness="7.350000000e+00" absorberThickness="4.200000000e+00" cellSize0="1.016666667e+01" cellSize1="1.016666667e+01" /> + </detector> + <detector name="EcalEndcap" geartype="CalorimeterParameters"> + <layout type="Endcap" symmetry="2" phi0="0.000000000e+00" /> + <dimensions inner_r="4.000000000e+02" outer_r="2.088800000e+03" inner_z="2.450000000e+03" /> + <layer repeat="19" thickness="5.250000000e+00" absorberThickness="2.100000000e+00" cellSize0="1.016666667e+01" cellSize1="1.016666667e+01" /> + <layer repeat="1" thickness="6.300000000e+00" absorberThickness="2.100000000e+00" cellSize0="1.016666667e+01" cellSize1="1.016666667e+01" /> + <layer repeat="9" thickness="7.350000000e+00" absorberThickness="4.200000000e+00" cellSize0="1.016666667e+01" cellSize1="1.016666667e+01" /> + </detector> + <detector name="EcalPlug" geartype="CalorimeterParameters"> + <layout type="Endcap" symmetry="2" phi0="0.000000000e+00" /> + <dimensions inner_r="2.400000000e+02" outer_r="4.000000000e+02" inner_z="2.450000000e+03" /> + <layer repeat="19" thickness="5.250000000e+00" absorberThickness="2.100000000e+00" cellSize0="1.016666667e+01" cellSize1="1.016666667e+01" /> + <layer repeat="1" thickness="6.300000000e+00" absorberThickness="2.100000000e+00" cellSize0="1.016666667e+01" cellSize1="1.016666667e+01" /> + <layer repeat="9" thickness="7.350000000e+00" absorberThickness="4.200000000e+00" cellSize0="1.016666667e+01" cellSize1="1.016666667e+01" /> + </detector> + <detector name="YokeBarrel" geartype="CalorimeterParameters"> + <layout type="Barrel" symmetry="12" phi0="0.000000000e+00" /> + <dimensions inner_r="4.173929932e+03" outer_z="4.072000000e+03" /> + <layer repeat="1" thickness="4.000000000e+01" absorberThickness="0.000000000e+00" cellSize0="3.000000000e+01" cellSize1="3.000000000e+01" /> + <layer repeat="10" thickness="1.400000000e+02" absorberThickness="1.000000000e+02" cellSize0="3.000000000e+01" cellSize1="3.000000000e+01" /> + <layer repeat="3" thickness="6.000000000e+02" absorberThickness="5.600000000e+02" cellSize0="3.000000000e+01" cellSize1="3.000000000e+01" /> + </detector> + <detector name="YokeEndcap" geartype="CalorimeterParameters"> + <layout type="Endcap" symmetry="2" phi0="0.000000000e+00" /> + <dimensions inner_r="3.200000000e+02" outer_r="7.414929932e+03" inner_z="4.072000000e+03" /> + <layer repeat="10" thickness="1.400000000e+02" absorberThickness="1.000000000e+02" cellSize0="3.000000000e+01" cellSize1="3.000000000e+01" /> + <layer repeat="2" thickness="6.000000000e+02" absorberThickness="5.600000000e+02" cellSize0="3.000000000e+01" cellSize1="3.000000000e+01" /> + </detector> + <detector name="YokePlug" geartype="CalorimeterParameters"> + <layout type="Endcap" symmetry="2" phi0="0.000000000e+00" /> + <dimensions inner_r="3.200000000e+02" outer_r="2.849254326e+03" inner_z="3.781430000e+03" /> + <parameter name="YokePlugThickness" type="double" value="2.905700000e+02" /> + </detector> + <detector name="HcalBarrel" geartype="CalorimeterParameters"> + <layout type="Barrel" symmetry="8" phi0="1.570796327e+00" /> + <dimensions inner_r="2.058000000e+03" outer_z="2.350000000e+03" /> + <layer repeat="40" thickness="2.673000000e+01" absorberThickness="2.000000000e+01" cellSize0="1.000000000e+01" cellSize1="1.000000000e+01" /> + <parameter name="Hcal_barrel_number_modules" type="int" value="5" /> + <parameter name="N_cells_z" type="int" value="91" /> + <parameter name="FrameWidth" type="double" value="1.000000000e+00" /> + <parameter name="Hcal_lateral_structure_thickness" type="double" value="1.000000000e+01" /> + <parameter name="Hcal_modules_gap" type="double" value="2.000000000e+00" /> + <parameter name="Hcal_outer_radius" type="double" value="3.144432447e+03" /> + <parameter name="Hcal_virtual_cell_size" type="double" value="1.000000000e+01" /> + <parameter name="InnerOctoSize" type="double" value="1.704903012e+03" /> + <parameter name="RPC_PadSeparation" type="double" value="0.000000000e+00" /> + <parameter name="TPC_Ecal_Hcal_barrel_halfZ" type="double" value="2.350000000e+03" /> + </detector> + <detector name="HcalEndcap" geartype="CalorimeterParameters"> + <layout type="Endcap" symmetry="2" phi0="0.000000000e+00" /> + <dimensions inner_r="3.500000000e+02" outer_r="3.144432447e+03" inner_z="2.650000000e+03" /> + <layer repeat="40" thickness="2.673000000e+01" absorberThickness="2.000000000e+01" cellSize0="1.000000000e+01" cellSize1="1.000000000e+01" /> + <parameter name="FrameWidth" type="double" value="0.000000000e+00" /> + <parameter name="Hcal_virtual_cell_size" type="double" value="1.000000000e+01" /> + </detector> + <detector name="HcalRing" geartype="CalorimeterParameters"> + <layout type="Endcap" symmetry="2" phi0="0.000000000e+00" /> + <dimensions inner_r="2.138800000e+03" outer_r="3.144432447e+03" inner_z="2.450000000e+03" /> + <layer repeat="6" thickness="2.673000000e+01" absorberThickness="2.000000000e+01" cellSize0="1.000000000e+01" cellSize1="1.000000000e+01" /> + <parameter name="FrameWidth" type="double" value="0.000000000e+00" /> + <parameter name="Hcal_virtual_cell_size" type="double" value="1.000000000e+01" /> + </detector> + <detector name="Lcal" geartype="CalorimeterParameters"> + <layout type="Endcap" symmetry="1" phi0="0.000000000e+00" /> + <dimensions inner_r="3.225828541e+01" outer_r="9.880000000e+01" inner_z="9.519000000e+02" /> + <layer repeat="30" thickness="4.290000000e+00" absorberThickness="3.500000000e+00" cellSize0="1.039714290e+00" cellSize1="1.308996939e-01" /> + <parameter name="beam_crossing_angle" type="double" value="0.000000000e+00" /> + </detector> + <detector name="VXD" geartype="ZPlanarParameters"> + <type technology="HYBRID" /> + <shell halfLength="1.450000000e+02" gap="0.000000000e+00" innerRadius="6.500000000e+01" outerRadius="6.549392000e+01" radLength="3.527597571e+02" /> + <layers> + <layer nLadders="10" phi0="-1.570796327e+00"> + <ladder distance="1.600000000e+01" thickness="1.000000000e+00" width="1.150000000e+01" length="6.250000000e+01" offset="-1.874869853e+00" radLength="1.014262421e+03" /> + <sensitive distance="1.595000000e+01" thickness="5.000000000e-02" width="1.100000000e+01" length="6.250000000e+01" offset="-1.624869853e+00" radLength="9.366070445e+01" /> + </layer> + <layer nLadders="10" phi0="-1.570796327e+00"> + <ladder distance="1.700000000e+01" thickness="1.000000000e+00" width="1.150000000e+01" length="6.250000000e+01" offset="-1.874869853e+00" radLength="1.014262421e+03" /> + <sensitive distance="1.800000000e+01" thickness="5.000000000e-02" width="1.100000000e+01" length="6.250000000e+01" offset="-1.624869853e+00" radLength="9.366070445e+01" /> + </layer> + <layer nLadders="11" phi0="-1.570796327e+00"> + <ladder distance="3.700000000e+01" thickness="1.000000000e+00" width="2.250000000e+01" length="1.250000000e+02" offset="-1.837940563e+00" radLength="1.014262421e+03" /> + <sensitive distance="3.695000000e+01" thickness="5.000000000e-02" width="2.200000000e+01" length="1.250000000e+02" offset="-1.587940563e+00" radLength="9.366070445e+01" /> + </layer> + <layer nLadders="11" phi0="-1.570796327e+00"> + <ladder distance="3.800000000e+01" thickness="1.000000000e+00" width="2.250000000e+01" length="1.250000000e+02" offset="-1.837940563e+00" radLength="1.014262421e+03" /> + <sensitive distance="3.900000000e+01" thickness="5.000000000e-02" width="2.200000000e+01" length="1.250000000e+02" offset="-1.587940563e+00" radLength="9.366070445e+01" /> + </layer> + <layer nLadders="17" phi0="-1.570796327e+00"> + <ladder distance="5.800000000e+01" thickness="1.000000000e+00" width="2.250000000e+01" length="1.250000000e+02" offset="-2.636744400e+00" radLength="1.014262421e+03" /> + <sensitive distance="5.795000000e+01" thickness="5.000000000e-02" width="2.200000000e+01" length="1.250000000e+02" offset="-2.386744400e+00" radLength="9.366070445e+01" /> + </layer> + <layer nLadders="17" phi0="-1.570796327e+00"> + <ladder distance="5.900000000e+01" thickness="1.000000000e+00" width="2.250000000e+01" length="1.250000000e+02" offset="-2.636744400e+00" radLength="1.014262421e+03" /> + <sensitive distance="6.000000000e+01" thickness="5.000000000e-02" width="2.200000000e+01" length="1.250000000e+02" offset="-2.386744400e+00" radLength="9.366070445e+01" /> + </layer> + </layers> + </detector> + <detector name="FTD" geartype="FTDParameters"> + <layers> + <layer nPetals="16" nSensors="1" isDoubleSided="0" sensorType="PIXEL" petalOpenningAngle="1.963495408e-01" phi0="0.000000000e+00" alpha="0.000000000e+00" zoffset="1.500000000e+00" zsign0="-1.000000000e+00" zposition="2.200000000e+02"> + <support thickness="1.000000000e+00" width="1.180723890e+02" lengthMin="2.502788316e+01" lengthMax="7.200000000e+01" rInner="2.950000000e+01" radLength="2.860837413e+02" /> + <sensitive thickness="2.000000000e-02" width="1.180723890e+02" lengthMin="2.502788316e+01" lengthMax="7.200000000e+01" rInner="2.950000000e+01" radLength="9.366070445e+01" /> + </layer> + <layer nPetals="16" nSensors="1" isDoubleSided="0" sensorType="PIXEL" petalOpenningAngle="1.963495408e-01" phi0="0.000000000e+00" alpha="0.000000000e+00" zoffset="1.500000000e+00" zsign0="-1.000000000e+00" zposition="3.713094000e+02"> + <support thickness="1.000000000e+00" width="1.170317258e+02" lengthMin="2.544188474e+01" lengthMax="7.200000000e+01" rInner="3.054066325e+01" radLength="2.860837413e+02" /> + <sensitive thickness="2.000000000e-02" width="1.170317258e+02" lengthMin="2.544188474e+01" lengthMax="7.200000000e+01" rInner="3.054066325e+01" radLength="9.366070445e+01" /> + </layer> + <layer nPetals="16" nSensors="2" isDoubleSided="1" sensorType="STRIP" petalOpenningAngle="1.963495408e-01" phi0="0.000000000e+00" alpha="0.000000000e+00" zoffset="1.500000000e+00" zsign0="-1.000000000e+00" zposition="6.429059500e+02"> + <support thickness="2.000000000e+00" width="2.600401444e+02" lengthMin="1.903959852e+01" lengthMax="1.224900000e+02" rInner="3.251798652e+01" radLength="2.860837413e+02" /> + <sensitive thickness="2.000000000e-01" width="2.600401444e+02" lengthMin="1.903959852e+01" lengthMax="1.224900000e+02" rInner="3.251798652e+01" radLength="9.366070445e+01" /> + </layer> + <layer nPetals="16" nSensors="2" isDoubleSided="1" sensorType="STRIP" petalOpenningAngle="1.963495408e-01" phi0="0.000000000e+00" alpha="0.000000000e+00" zoffset="1.500000000e+00" zsign0="-1.000000000e+00" zposition="8.440001500e+02"> + <support thickness="2.000000000e+00" width="2.688914284e+02" lengthMin="1.551833880e+01" lengthMax="1.224900000e+02" rInner="3.397826298e+01" radLength="2.860837413e+02" /> + <sensitive thickness="2.000000000e-01" width="2.688914284e+02" lengthMin="1.551833880e+01" lengthMax="1.224900000e+02" rInner="3.397826298e+01" radLength="9.366070445e+01" /> + </layer> + <layer nPetals="16" nSensors="2" isDoubleSided="1" sensorType="STRIP" petalOpenningAngle="1.963495408e-01" phi0="0.000000000e+00" alpha="0.000000000e+00" zoffset="1.500000000e+00" zsign0="-1.000000000e+00" zposition="9.249600000e+02"> + <support thickness="2.000000000e+00" width="2.683035260e+02" lengthMin="1.575222092e+01" lengthMax="1.224900000e+02" rInner="3.456616538e+01" radLength="2.860837413e+02" /> + <sensitive thickness="2.000000000e-01" width="2.683035260e+02" lengthMin="1.575222092e+01" lengthMax="1.224900000e+02" rInner="3.456616538e+01" radLength="9.366070445e+01" /> + </layer> + </layers> + <parameter name="strip_angle_deg" type="double" value="5.000000000e+00" /> + <parameter name="strip_length_mm" type="double" value="2.500000000e+02" /> + <parameter name="strip_pitch_mm" type="double" value="1.000000000e-02" /> + <parameter name="strip_width_mm" type="double" value="1.000000000e-03" /> + </detector> + <detector name="SIT" geartype="ZPlanarParameters"> + <type technology="CCD" /> + <shell halfLength="0.000000000e+00" gap="0.000000000e+00" innerRadius="0.000000000e+00" outerRadius="0.000000000e+00" radLength="0.000000000e+00" /> + <layers> + <layer nLadders="10" phi0="0.000000000e+00"> + <ladder distance="1.531000000e+02" thickness="1.000000000e+00" width="9.916044311e+01" length="3.680000000e+02" offset="0.000000000e+00" radLength="2.134851878e+02" /> + <sensitive distance="1.529000000e+02" thickness="2.000000000e-01" width="9.916044311e+01" length="3.680000000e+02" offset="0.000000000e+00" radLength="9.366070445e+01" /> + </layer> + <layer nLadders="10" phi0="0.000000000e+00"> + <ladder distance="1.544000000e+02" thickness="1.000000000e+00" width="1.001352022e+02" length="3.680000000e+02" offset="0.000000000e+00" radLength="2.134851878e+02" /> + <sensitive distance="1.554000000e+02" thickness="2.000000000e-01" width="1.001352022e+02" length="3.680000000e+02" offset="0.000000000e+00" radLength="9.366070445e+01" /> + </layer> + <layer nLadders="19" phi0="0.000000000e+00"> + <ladder distance="3.001000000e+02" thickness="1.000000000e+00" width="9.988891763e+01" length="6.440000000e+02" offset="0.000000000e+00" radLength="2.134851878e+02" /> + <sensitive distance="2.999000000e+02" thickness="2.000000000e-01" width="9.988891763e+01" length="6.440000000e+02" offset="0.000000000e+00" radLength="9.366070445e+01" /> + </layer> + <layer nLadders="19" phi0="0.000000000e+00"> + <ladder distance="3.014000000e+02" thickness="1.000000000e+00" width="1.003895291e+02" length="6.440000000e+02" offset="0.000000000e+00" radLength="2.134851878e+02" /> + <sensitive distance="3.024000000e+02" thickness="2.000000000e-01" width="1.003895291e+02" length="6.440000000e+02" offset="0.000000000e+00" radLength="9.366070445e+01" /> + </layer> + </layers> + <parameter name="sensor_length_mm" type="double" value="9.200000000e+01" /> + <parameter name="strip_angle_deg" type="double" value="7.000000000e+00" /> + <parameter name="strip_length_mm" type="double" value="9.200000000e+01" /> + <parameter name="strip_pitch_mm" type="double" value="5.000000000e-02" /> + <parameter name="strip_width_mm" type="double" value="1.250000000e-02" /> + <parameter name="n_sensors_per_ladder" type="IntVec" value="8 8 14 14" /> + </detector> + <detector name="SET" geartype="ZPlanarParameters"> + <type technology="CCD" /> + <shell halfLength="0.000000000e+00" gap="0.000000000e+00" innerRadius="0.000000000e+00" outerRadius="0.000000000e+00" radLength="0.000000000e+00" /> + <layers> + <layer nLadders="24" phi0="0.000000000e+00"> + <ladder distance="1.811100000e+03" thickness="1.000000000e+00" width="4.766190158e+02" length="2.300000000e+03" offset="0.000000000e+00" radLength="2.134851878e+02" /> + <sensitive distance="1.810900000e+03" thickness="2.000000000e-01" width="4.766190158e+02" length="2.300000000e+03" offset="0.000000000e+00" radLength="9.366070445e+01" /> + </layer> + <layer nLadders="24" phi0="0.000000000e+00"> + <ladder distance="1.812400000e+03" thickness="1.000000000e+00" width="4.770139733e+02" length="2.300000000e+03" offset="0.000000000e+00" radLength="2.134851878e+02" /> + <sensitive distance="1.813400000e+03" thickness="2.000000000e-01" width="4.770139733e+02" length="2.300000000e+03" offset="0.000000000e+00" radLength="9.366070445e+01" /> + </layer> + </layers> + <parameter name="sensor_length_mm" type="double" value="9.200000000e+01" /> + <parameter name="strip_angle_deg" type="double" value="7.000000000e+00" /> + <parameter name="strip_length_mm" type="double" value="9.200000000e+01" /> + <parameter name="strip_pitch_mm" type="double" value="5.000000000e-02" /> + <parameter name="strip_width_mm" type="double" value="1.250000000e-02" /> + <parameter name="n_sensors_per_ladder" type="IntVec" value="50 50" /> + </detector> + <detector name="BeamPipe" geartype="GearParameters"> + <parameter name="BeamPipeHalfZ" type="double" value="7.300000000e+02" /> + <parameter name="BeamPipeProperties_RadLen" type="double" value="3.527597571e+02" /> + <parameter name="BeamPipeProperties_dEdx" type="double" value="2.941795296e-04" /> + <parameter name="BeamPipeRadius" type="double" value="1.400000000e+01" /> + <parameter name="BeamPipeThickness" type="double" value="5.000000000e-01" /> + <parameter name="RInner" type="DoubleVec" value="1.400000000e+01 1.400000000e+01 2.500000000e+00 1.300000000e+01 1.300000000e+01 1.300000000e+01 1.550000000e+01 1.550000000e+01 1.900000000e+01 1.900000000e+01 2.500000000e+01 2.500000000e+01 1.300000000e+01 1.300000000e+01 2.050000000e+01 2.050000000e+01 2.300000000e+01 2.300000000e+01 2.600000000e+01 2.600000000e+01 3.200000000e+01 3.200000000e+01" /> + <parameter name="ROuter" type="DoubleVec" value="1.450000000e+01 1.450000000e+01 1.800000000e+01 1.800000000e+01 1.550000000e+01 1.550000000e+01 1.900000000e+01 1.900000000e+01 2.500000000e+01 2.500000000e+01 3.300000000e+01 3.300000000e+01 1.550000000e+01 1.550000000e+01 2.300000000e+01 2.300000000e+01 2.600000000e+01 2.600000000e+01 3.200000000e+01 3.200000000e+01 4.000000000e+01 4.000000000e+01" /> + <parameter name="Z" type="DoubleVec" value="0.000000000e+00 5.000000000e+02 7.000000000e+02 7.010000000e+02 2.200000000e+03 2.200000000e+03 2.200000000e+03 2.200000000e+03 2.200000000e+03 2.200000000e+03 2.200000000e+03 2.200000000e+03 3.950000000e+03 3.950000000e+03 4.450000000e+03 4.450000000e+03 4.450000000e+03 4.450000000e+03 4.450000000e+03 4.450000000e+03 4.450000000e+03 4.450000000e+03" /> + </detector> + <detector name="CoilParameters" geartype="GearParameters"> + <parameter name="Coil_cryostat_c_modules_half_z" type="double" value="1.224000000e+03" /> + <parameter name="Coil_cryostat_c_modules_inner_radius" type="double" value="3.348930000e+03" /> + <parameter name="Coil_cryostat_c_modules_outer_radius" type="double" value="3.733930000e+03" /> + <parameter name="Coil_cryostat_half_z" type="double" value="3.872000000e+03" /> + <parameter name="Coil_cryostat_inner_cyl_half_z" type="double" value="3.872000000e+03" /> + <parameter name="Coil_cryostat_inner_cyl_inner_radius" type="double" value="3.173930000e+03" /> + <parameter name="Coil_cryostat_inner_cyl_outer_radius" type="double" value="3.963930000e+03" /> + <parameter name="Coil_cryostat_inner_radius" type="double" value="3.173930000e+03" /> + <parameter name="Coil_cryostat_mandrel_half_z" type="double" value="3.675000000e+03" /> + <parameter name="Coil_cryostat_mandrel_inner_radius" type="double" value="3.733930000e+03" /> + <parameter name="Coil_cryostat_mandrel_outer_radius" type="double" value="3.808930000e+03" /> + <parameter name="Coil_cryostat_modules_half_z" type="double" value="7.960000000e+02" /> + <parameter name="Coil_cryostat_modules_inner_radius" type="double" value="3.348930000e+03" /> + <parameter name="Coil_cryostat_modules_outer_radius" type="double" value="3.733930000e+03" /> + <parameter name="Coil_cryostat_outer_cyl_half_z" type="double" value="3.872000000e+03" /> + <parameter name="Coil_cryostat_outer_cyl_inner_radius" type="double" value="3.893930000e+03" /> + <parameter name="Coil_cryostat_outer_cyl_outer_radius" type="double" value="3.923930000e+03" /> + <parameter name="Coil_cryostat_outer_radius" type="double" value="3.923930000e+03" /> + <parameter name="Coil_cryostat_scint1_inner_radius" type="double" value="3.263930000e+03" /> + <parameter name="Coil_cryostat_scint1_outer_radius" type="double" value="3.273930000e+03" /> + <parameter name="Coil_cryostat_scint1_zposend" type="double" value="3.972000000e+03" /> + <parameter name="Coil_cryostat_scint1_zposin" type="double" value="3.772000000e+03" /> + <parameter name="Coil_cryostat_scint2_inner_radius" type="double" value="3.278930000e+03" /> + <parameter name="Coil_cryostat_scint2_outer_radius" type="double" value="3.288930000e+03" /> + <parameter name="Coil_cryostat_scint2_zposend" type="double" value="3.972000000e+03" /> + <parameter name="Coil_cryostat_scint2_zposin" type="double" value="3.772000000e+03" /> + <parameter name="Coil_cryostat_scint3_inner_radius" type="double" value="3.833930000e+03" /> + <parameter name="Coil_cryostat_scint3_outer_radius" type="double" value="3.843930000e+03" /> + <parameter name="Coil_cryostat_scint3_zposend" type="double" value="3.972000000e+03" /> + <parameter name="Coil_cryostat_scint3_zposin" type="double" value="3.772000000e+03" /> + <parameter name="Coil_cryostat_scint4_inner_radius" type="double" value="3.818930000e+03" /> + <parameter name="Coil_cryostat_scint4_outer_radius" type="double" value="3.828930000e+03" /> + <parameter name="Coil_cryostat_scint4_zposend" type="double" value="3.972000000e+03" /> + <parameter name="Coil_cryostat_scint4_zposin" type="double" value="3.772000000e+03" /> + <parameter name="Coil_cryostat_side_l_half_z" type="double" value="2.500000000e+01" /> + <parameter name="Coil_cryostat_side_l_inner_radius" type="double" value="3.213930000e+03" /> + <parameter name="Coil_cryostat_side_l_outer_radius" type="double" value="3.893930000e+03" /> + <parameter name="Coil_cryostat_side_r_half_z" type="double" value="2.500000000e+01" /> + <parameter name="Coil_cryostat_side_r_inner_radius" type="double" value="3.213930000e+03" /> + <parameter name="Coil_cryostat_side_r_outer_radius" type="double" value="3.893930000e+03" /> + <parameter name="Coil_material_c_modules" type="string" value="aluminium" /> + <parameter name="Coil_material_inner_cyl" type="string" value="aluminium" /> + <parameter name="Coil_material_mandrel" type="string" value="aluminium" /> + <parameter name="Coil_material_modules" type="string" value="aluminium" /> + <parameter name="Coil_material_outer_cyl" type="string" value="aluminium" /> + <parameter name="Coil_material_scint1" type="string" value="polystyrene" /> + <parameter name="Coil_material_scint2" type="string" value="polystyrene" /> + <parameter name="Coil_material_scint3" type="string" value="polystyrene" /> + <parameter name="Coil_material_scint4" type="string" value="polystyrene" /> + <parameter name="Coil_material_side_l" type="string" value="aluminium" /> + <parameter name="Coil_material_side_r" type="string" value="aluminium" /> + </detector> + <detector name="MokkaParameters" geartype="GearParameters"> + <parameter name="Ecal_endcap_outer_radius" type="string" value="2088.8" /> + <parameter name="Ecal_endcap_plug_rmin" type="string" value="240" /> + <parameter name="Ecal_endcap_zmax" type="string" value="2635" /> + <parameter name="Ecal_endcap_zmin" type="string" value="2450" /> + <parameter name="Ecal_outer_radius" type="string" value="2028" /> + <parameter name="Hcal_R_max" type="string" value="3144.43" /> + <parameter name="Hcal_endcap_zmin" type="string" value="2650" /> + <parameter name="Lcal_z_begin" type="string" value="951.9" /> + <parameter name="Lcal_z_thickness" type="string" value="128.1" /> + <parameter name="MokkaModel" type="string" value="CEPC_v4" /> + <parameter name="MokkaVersion" type="string" value="void" /> + <parameter name="SIT1_Half_Length_Z" type="string" value="368" /> + <parameter name="SIT1_Radius" type="string" value="152.9" /> + <parameter name="SIT2_Half_Length_Z" type="string" value="644" /> + <parameter name="SIT2_Radius" type="string" value="299.9" /> + <parameter name="TPC_Ecal_Hcal_barrel_halfZ" type="string" value="2350" /> + <parameter name="Yoke_Z_start_endcaps" type="string" value="4072" /> + <parameter name="Yoke_barrel_inner_radius" type="string" value="4173.92993164062" /> + <parameter name="calorimeter_region_rmax" type="string" value="3144.43" /> + <parameter name="calorimeter_region_zmax" type="string" value="3736.43" /> + <parameter name="tracker_region_rmax" type="string" value="1842.9" /> + <parameter name="tracker_region_zmax" type="string" value="2350" /> + <parameter name="world_box_hx" type="string" value="" /> + <parameter name="world_box_hy" type="string" value="" /> + <parameter name="world_box_hz" type="string" value="" /> + </detector> + <detector name="VXDInfra" geartype="GearParameters"> + <parameter name="ActiveLayerProperties_dEdx" type="double" value="3.870163611e-04" /> + <parameter name="BeSupportEndplateThickness" type="double" value="2.000000000e+00" /> + <parameter name="BeSupport_dEdx" type="double" value="2.941795296e-04" /> + <parameter name="CryostatAlHalfZ" type="double" value="1.766000000e+02" /> + <parameter name="CryostatAlInnerR" type="double" value="2.420000000e+01" /> + <parameter name="CryostatAlRadius" type="double" value="1.000000000e+02" /> + <parameter name="CryostatAlThickness" type="double" value="5.000000000e-01" /> + <parameter name="CryostatAlZEndCap" type="double" value="1.768500000e+02" /> + <parameter name="CryostatFoamRadius" type="double" value="9.000000000e+01" /> + <parameter name="CryostatFoamThickness" type="double" value="1.000000000e+01" /> + <parameter name="Cryostat_RadLen" type="double" value="8.896317758e+01" /> + <parameter name="Cryostat_dEdx" type="double" value="4.350185478e-04" /> + <parameter name="ElectronicEndLength" type="double" value="1.000000000e+01" /> + <parameter name="ElectronicEndThickness" type="double" value="1.000000000e-01" /> + <parameter name="StripLineBeamPipeRadius" type="double" value="2.430000000e+01" /> + <parameter name="VXDEndPlateInnerRadius" type="double" value="3.000000000e+01" /> + <parameter name="VXDSupport_dEdx" type="double" value="5.431907412e-05" /> + <parameter name="LadderGaps" type="DoubleVec" value="0.000000000e+00 0.000000000e+00 0.000000000e+00 0.000000000e+00 0.000000000e+00 0.000000000e+00" /> + <parameter name="StripLineFinalZ" type="DoubleVec" value="1.500000000e+02 1.500000000e+02 1.500000000e+02 1.500000000e+02 1.500000000e+02 1.500000000e+02" /> + </detector> + </detectors> + <materials> + <material name="VXDFoamShellMaterial" A="1.043890843e+01" Z="5.612886646e+00" density="2.500000000e+01" radLength="1.751650267e+04" intLength="6.594366018e+01" /> + <material name="VXDSupportMaterial" A="2.075865162e+01" Z="1.039383117e+01" density="2.765900000e+02" radLength="1.014262421e+03" intLength="1.206635688e+02" /> + </materials> +</gear> diff --git a/Detector/DetEcalMatrix/compact/det.xml b/Detector/DetEcalMatrix/compact/det.xml index 462dbf7af0bd26384def4b8d9645386e71c2026c..2cd46f4fe3081ca4bb416e503022108b450466a9 100644 --- a/Detector/DetEcalMatrix/compact/det.xml +++ b/Detector/DetEcalMatrix/compact/det.xml @@ -32,6 +32,7 @@ <detectors> <detector id="1" name="CaloDetector" type="EcalMatrix" readout="CaloHitsCollection" vis="VisibleGreen" sensitive="true"> + <!-- Use cm as unit if you want to use Pandora for reconstruction --> <position x="200*cm" y="0" z="0"/> <dimensions dx="30*cm" dy="30*cm" dz="30*cm"/> </detector> diff --git a/Detector/DetEcalMatrix/src/calorimeter/EcalMatrix.cpp b/Detector/DetEcalMatrix/src/calorimeter/EcalMatrix.cpp index b835f023b3a84e9efd832207624dc33d691a5e70..f12972c81dcdbc647b9112324e7d16b59e746ad8 100644 --- a/Detector/DetEcalMatrix/src/calorimeter/EcalMatrix.cpp +++ b/Detector/DetEcalMatrix/src/calorimeter/EcalMatrix.cpp @@ -69,23 +69,23 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector, << std::endl; - // double cellSize_x = ::atof( seg.segmentation()->parameter("grid_size_x")->value().c_str() ) * 10;// from cm to mm - // double cellSize_y = ::atof( seg.segmentation()->parameter("grid_size_y")->value().c_str() ) * 10;// from cm to mm - // double cellSize_z = ::atof( seg.segmentation()->parameter("grid_size_z")->value().c_str() ) * 10;// from cm to mm - // int n_layer = int(2*dim.dx()*10/cellSize_x) ; // here the calorimeter is placed in barrel, so x direaction is layer direction - // std::cout<<"cellx="<<cellSize_x<<",celly="<<cellSize_y<<",cellz="<<cellSize_z<<",dx="<<dim.dx()*10<<"mm,n_layer="<<n_layer<<std::endl; - // for(int i=1 ; i <= n_layer; i++) - // { - // LayeredCalorimeterData::Layer caloLayer ; - // caloLayer.distance = caloData->extent[0] + (i-0.5)*cellSize_x; //NEED TO START FROM ORIGIN, to mm - // caloLayer.sensitive_thickness = cellSize_x ; - // caloLayer.inner_thickness = cellSize_x ; - // caloLayer.outer_thickness = cellSize_x ; - // caloLayer.absorberThickness = cellSize_x; - // caloLayer.cellSize0 = cellSize_y; - // caloLayer.cellSize1 = cellSize_z; - // caloData->layers.push_back(caloLayer); - // } + double cellSize_x = ::atof( seg.segmentation()->parameter("grid_size_x")->value().c_str() ) * 10;// from cm to mm + double cellSize_y = ::atof( seg.segmentation()->parameter("grid_size_y")->value().c_str() ) * 10;// from cm to mm + double cellSize_z = ::atof( seg.segmentation()->parameter("grid_size_z")->value().c_str() ) * 10;// from cm to mm + int n_layer = int(2*dim.dx()*10/cellSize_x) ; // here the calorimeter is placed in barrel, so x direaction is layer direction + std::cout<<"cellx="<<cellSize_x<<",celly="<<cellSize_y<<",cellz="<<cellSize_z<<",dx="<<dim.dx()*10<<"mm,n_layer="<<n_layer<<std::endl; + for(int i=1 ; i <= n_layer; i++) + { + LayeredCalorimeterData::Layer caloLayer ; + caloLayer.distance = caloData->extent[0] + (i-0.5)*cellSize_x; //NEED TO START FROM ORIGIN, to mm + caloLayer.sensitive_thickness = cellSize_x ; + caloLayer.inner_thickness = cellSize_x ; + caloLayer.outer_thickness = cellSize_x ; + caloLayer.absorberThickness = cellSize_x; + caloLayer.cellSize0 = cellSize_y; + caloLayer.cellSize1 = cellSize_z; + caloData->layers.push_back(caloLayer); + } if ( x_det.isSensitive() ) { dd4hep::SensitiveDetector sd = sens; @@ -96,7 +96,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector, phv.addPhysVolID("system",x_det.id()); } sdet.setPlacement(phv); - // sdet.addExtension< LayeredCalorimeterData >(caloData) ; + sdet.addExtension< LayeredCalorimeterData >(caloData) ; MYDEBUG("create_detector DONE. "); return sdet; } diff --git a/Examples/options/tut_detsim_pan_matrix.py b/Examples/options/tut_detsim_pan_matrix.py index 50fdf5baf8f51b52cea54cfe642a3cfac92766b3..d5fabde3075bdba7ef1caae6a4f53ce18e84bea0 100644 --- a/Examples/options/tut_detsim_pan_matrix.py +++ b/Examples/options/tut_detsim_pan_matrix.py @@ -130,7 +130,8 @@ example_CaloDigiAlg.CaloHitCollection = "ECALBarrel" ############################################################################## from Configurables import GearSvc gearSvc = GearSvc("GearSvc") -gearSvc.GearXMLFile = "/junofs/users/wxfang/CEPC/CEPCOFF/doSim/fullDet/GearOutput.xml" +#gearSvc.GearXMLFile = "/junofs/users/wxfang/CEPC/CEPCOFF/doSim/fullDet/GearOutput.xml" +gearSvc.GearXMLFile = "../Detector/DetCEPCv4/compact/FullDetGear.xml" ############################################################################## #from Configurables import PandoraPFAlg from Configurables import PandoraMatrixAlg diff --git a/Reconstruction/Digi_Calo/src/CaloDigiAlg.cpp b/Reconstruction/Digi_Calo/src/CaloDigiAlg.cpp index 1370dda825fdc9dbb36499516f70a62d5c0364cb..723e0e2117d6e4f683e8e203298f8a78838312d5 100644 --- a/Reconstruction/Digi_Calo/src/CaloDigiAlg.cpp +++ b/Reconstruction/Digi_Calo/src/CaloDigiAlg.cpp @@ -8,8 +8,6 @@ #include "DD4hep/Detector.h" #include <DD4hep/Objects.h> -#include <DDRec/DetectorData.h> -#include <DDRec/CellIDPositionConverter.h> #include <math.h> @@ -41,77 +39,45 @@ StatusCode CaloDigiAlg::initialize() dd4hep::Detector* m_dd4hep = m_geosvc->lcdd(); if ( !m_dd4hep ) throw "CaloDigiAlg :Failed to get dd4hep::Detector ..."; m_cellIDConverter = new dd4hep::rec::CellIDPositionConverter(*m_dd4hep); - try{ - const dd4hep::DetElement &detElement = m_dd4hep->detector("CaloDetector"); - dd4hep::rec::LayeredCalorimeterData* Data = detElement.extension<dd4hep::rec::LayeredCalorimeterData>() ; - const std::vector<dd4hep::rec::LayeredCalorimeterData::Layer>& layerLayout = Data->layers; - assert(layerLayout.size()>=1); - m_layerLayout = &layerLayout; - std::cout<<"saved m_layerLayout"<<std::endl; - } - catch(...) - { - throw "CaloDigiAlg :Failed to get LayeredCalorimeterData ..."; - } return GaudiAlgorithm::initialize(); } StatusCode CaloDigiAlg::execute() { - std::map<std::string, std::vector<edm4hep::SimCalorimeterHit> > id_vhit_map; + std::map<unsigned long long, edm4hep::SimCalorimeterHit> id_hit_map; + std::map<unsigned long long, int > test_map; edm4hep::CalorimeterHitCollection* caloVec = w_DigiCaloCol.createAndPut(); const edm4hep::SimCalorimeterHitCollection* SimHitCol = r_SimCaloCol.get(); + double tot_e = 0 ; if(SimHitCol == 0) { std::cout<<"not found SimCalorimeterHitCollection"<< std::endl; return StatusCode::SUCCESS; } std::cout<<"digi, input sim hit size="<< SimHitCol->size() <<std::endl; - float tot_sim_en = 0; for( int i = 0; i < SimHitCol->size(); i++ ) { edm4hep::SimCalorimeterHit SimHit = SimHitCol->at(i); + unsigned long long id = SimHit.getCellID(); float en = SimHit.getEnergy(); - tot_sim_en += en; - std::string id = GetCode(&SimHit); - //std::cout<<"sim i ="<< i<<",id="<< id<<",x="<<SimHit.getPosition().x<<",y="<<SimHit.getPosition().y<<",z="<<SimHit.getPosition().z <<std::endl; - if(id_vhit_map.find(id) != id_vhit_map.end()) id_vhit_map[id].push_back(SimHit); - else - { - std::vector<edm4hep::SimCalorimeterHit> vect; - vect.push_back(SimHit); - id_vhit_map[id] = vect; - } + tot_e += en; + test_map[id] = 1; + if ( id_hit_map.find(id) != id_hit_map.end()) id_hit_map[id].setEnergy(id_hit_map[id].getEnergy() + en); + else id_hit_map[id] = SimHit ; } - float tot_en = 0; - for(std::map<std::string, std::vector <edm4hep::SimCalorimeterHit> >::iterator iter = id_vhit_map.begin(); iter != id_vhit_map.end(); iter++) + for(std::map<unsigned long long, edm4hep::SimCalorimeterHit>::iterator iter = id_hit_map.begin(); iter != id_hit_map.end(); iter++) { - float energy = 0; - float x0 = 0; - float y0 = 0; - float z0 = 0; - for(int j=0; j < iter->second.size(); j++) - { - float hit_en = iter->second.at(j).getEnergy(); - energy += hit_en; - x0 += hit_en*iter->second.at(j).getPosition().x ; - y0 += hit_en*iter->second.at(j).getPosition().y ; - z0 += hit_en*iter->second.at(j).getPosition().z ; - } - x0 = x0/energy; - y0 = y0/energy; - z0 = z0/energy; - edm4hep::Vector3f pos(x0, y0, z0); - energy = energy*m_scale; auto caloHit = caloVec->create(); - //caloHit.setCellID (iter->second.getCellID()); - caloHit.setEnergy (energy); - caloHit.setPosition(pos); - tot_en += caloHit.getEnergy(); + caloHit.setCellID((iter->second).getCellID()); + caloHit.setEnergy((iter->second).getEnergy()*m_scale); + dd4hep::Position position = m_cellIDConverter->position(caloHit.getCellID()); + edm4hep::Vector3f vpos(position.x()*10, position.y()*10, position.z()*10);// cm to mm + caloHit.setPosition(vpos); + //std::cout << "sim hit id =" << caloHit.getCellID() <<",x="<<position.x()<<",y="<<position.y()<<",z="<<position.z() <<",real x="<<(iter->second).getPosition().x <<",y="<<(iter->second).getPosition().y<<",z="<<(iter->second).getPosition().z<< std::endl; } - std::cout<<"total sim e ="<< tot_sim_en <<std::endl; - std::cout<<"digi, output digi hit size="<< caloVec->size()<<",tot_en="<<tot_en <<std::endl; + std::cout<<"total sim e ="<< tot_e <<std::endl; + std::cout<<"digi, output digi hit size="<< caloVec->size() <<std::endl; _nEvt ++ ; return StatusCode::SUCCESS; @@ -122,30 +88,3 @@ StatusCode CaloDigiAlg::finalize() info() << "Processed " << _nEvt << " events " << endmsg; return GaudiAlgorithm::finalize(); } - - -std::string CaloDigiAlg::GetCode(const edm4hep::SimCalorimeterHit *const pHit) const -{ - int layer = -1 ; - for (unsigned int i = 0, iMax = m_layerLayout->size(); i < iMax; ++i) - { - const float distance(m_layerLayout->at(i).distance); - const float sensitive_thickness(m_layerLayout->at(i).sensitive_thickness); - if( (distance - 0.5*sensitive_thickness) <= pHit->getPosition().x && pHit->getPosition().x <= (distance + 0.5*sensitive_thickness)) {layer = i ; break;} - } - if(layer==-1) - { - int lmax = m_layerLayout->size()-1; - std::cout<<"Error BarrelLayer, set to default 1, Hit.x="<<pHit->getPosition().x<<", min_x="<<m_layerLayout->at(0).distance-0.5*m_layerLayout->at(0).sensitive_thickness<<", max_x="<<m_layerLayout->at(lmax).distance+0.5*m_layerLayout->at(lmax).sensitive_thickness<<std::endl; - layer = 0; - } - float cellSize0 = m_layerLayout->at(layer).cellSize0; - float cellSize1 = m_layerLayout->at(layer).cellSize1; - int cell0 = floor((pHit->getPosition().y+0.5*cellSize0)/cellSize0); - int cell1 = floor((pHit->getPosition().z+0.5*cellSize1)/cellSize1); - std::string sl = std::to_string(layer); - std::string s0 = std::to_string(cell0); - std::string s1 = std::to_string(cell1); - std::string id = sl+"_"+s0+"_"+s1 ; - return id; -} diff --git a/Reconstruction/Digi_Calo/src/CaloDigiAlg.cpp_id b/Reconstruction/Digi_Calo/src/CaloDigiAlg.cpp_id deleted file mode 100644 index e25ad95b5fc877a77772984e5ea60154294aa0b2..0000000000000000000000000000000000000000 --- a/Reconstruction/Digi_Calo/src/CaloDigiAlg.cpp_id +++ /dev/null @@ -1,91 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -#include "CaloDigiAlg.h" - - -#include "edm4hep/SimCalorimeterHit.h" -#include "edm4hep/CalorimeterHit.h" - -#include "DD4hep/Detector.h" -#include <DD4hep/Objects.h> - -#include <cmath> -#include <algorithm> - -DECLARE_COMPONENT( CaloDigiAlg ) - -CaloDigiAlg::CaloDigiAlg(const std::string& name, ISvcLocator* svcLoc) - : GaudiAlgorithm(name, svcLoc), - _nEvt(0) -{ - - // Input collections - declareProperty("SimCaloHitCollection", r_SimCaloCol, "Handle of the Input SimCaloHit collection"); - - // Output collections - declareProperty("CaloHitCollection", w_DigiCaloCol, "Handle of Digi CaloHit collection"); - - -} - -StatusCode CaloDigiAlg::initialize() -{ - - m_geosvc = service<IGeoSvc>("GeoSvc"); - if ( !m_geosvc ) throw "CaloDigiAlg :Failed to find GeoSvc ..."; - dd4hep::Detector* m_dd4hep = m_geosvc->lcdd(); - m_cellIDConverter = new dd4hep::rec::CellIDPositionConverter(*m_dd4hep); - - std::cout<<"m_scale="<<m_scale<<std::endl; - - return GaudiAlgorithm::initialize(); -} - -StatusCode CaloDigiAlg::execute() -{ - std::map<unsigned long long, edm4hep::SimCalorimeterHit> id_hit_map; - std::map<unsigned long long, int > test_map; - edm4hep::CalorimeterHitCollection* caloVec = w_DigiCaloCol.createAndPut(); - const edm4hep::SimCalorimeterHitCollection* SimHitCol = r_SimCaloCol.get(); - double tot_e = 0 ; - if(SimHitCol == 0) - { - std::cout<<"not found SimCalorimeterHitCollection"<< std::endl; - return StatusCode::SUCCESS; - } - std::cout<<"digi, input sim hit size="<< SimHitCol->size() <<std::endl; - for( int i = 0; i < SimHitCol->size(); i++ ) - { - edm4hep::SimCalorimeterHit SimHit = SimHitCol->at(i); - unsigned long long id = SimHit.getCellID(); - /* - dd4hep::Position gpos(SimHit.getPosition().x, SimHit.getPosition().y, SimHit.getPosition().z); - long long int cell_id = m_cellIDConverter->cellID(gpos); - signed long long id2 = (signed long long) SimHit.getCellID(); - std::cout<<"sim gpos x="<<gpos.x()<<",y="<<gpos.y()<<",z="<<gpos.z()<<",id0="<<id<<",id1="<<cell_id<<",id2="<<id2<<std::endl; - */ - float en = SimHit.getEnergy(); - tot_e += en; - test_map[id] = 1; - if ( id_hit_map.find(id) != id_hit_map.end()) id_hit_map[id].setEnergy(id_hit_map[id].getEnergy() + en); - else id_hit_map[id] = SimHit ; - } - for(std::map<unsigned long long, edm4hep::SimCalorimeterHit>::iterator iter = id_hit_map.begin(); iter != id_hit_map.end(); iter++) - { - auto caloHit = caloVec->create(); - caloHit.setCellID((iter->second).getCellID()); - caloHit.setEnergy((iter->second).getEnergy()*m_scale); - caloHit.setPosition((iter->second).getPosition()); - } - - std::cout<<"total sim e ="<< tot_e <<std::endl; - std::cout<<"digi, output digi hit size="<< caloVec->size() <<std::endl; - _nEvt ++ ; - - return StatusCode::SUCCESS; -} - -StatusCode CaloDigiAlg::finalize() -{ - info() << "Processed " << _nEvt << " events " << endmsg; - return GaudiAlgorithm::finalize(); -} diff --git a/Reconstruction/Digi_Calo/src/CaloDigiAlg.cpp_v1 b/Reconstruction/Digi_Calo/src/CaloDigiAlg.cpp_v1 deleted file mode 100644 index d1d19a494ae3341a4ea1d228219ea799405bf783..0000000000000000000000000000000000000000 --- a/Reconstruction/Digi_Calo/src/CaloDigiAlg.cpp_v1 +++ /dev/null @@ -1,131 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -#include "CaloDigiAlg.h" - - -#include "edm4hep/SimCalorimeterHit.h" -#include "edm4hep/CalorimeterHit.h" -#include "edm4hep/Vector3f.h" - -#include "DD4hep/Detector.h" -#include <DD4hep/Objects.h> -#include <DDRec/DetectorData.h> -#include <DDRec/CellIDPositionConverter.h> - - -#include <cmath> -#include <algorithm> - -DECLARE_COMPONENT( CaloDigiAlg ) - -CaloDigiAlg::CaloDigiAlg(const std::string& name, ISvcLocator* svcLoc) - : GaudiAlgorithm(name, svcLoc), - _nEvt(0) -{ - - // Input collections - declareProperty("SimCaloHitCollection", r_SimCaloCol, "Handle of the Input SimCaloHit collection"); - - // Output collections - declareProperty("CaloHitCollection", w_DigiCaloCol, "Handle of Digi CaloHit collection"); - - -} - -StatusCode CaloDigiAlg::initialize() -{ - - std::cout<<"CaloDigiAlg::m_scale="<<m_scale<<std::endl; - m_geosvc = service<IGeoSvc>("GeoSvc"); - if ( !m_geosvc ) throw "CaloDigiAlg :Failed to find GeoSvc ..."; - dd4hep::Detector* m_dd4hep = m_geosvc->lcdd(); - if ( !m_dd4hep ) throw "CaloDigiAlg :Failed to get dd4hep::Detector ..."; - m_cellIDConverter = new dd4hep::rec::CellIDPositionConverter(*m_dd4hep); - try{ - const dd4hep::DetElement &detElement = m_dd4hep->detector("CaloDetector"); - dd4hep::rec::LayeredCalorimeterData* Data = detElement.extension<dd4hep::rec::LayeredCalorimeterData>() ; - const std::vector<dd4hep::rec::LayeredCalorimeterData::Layer>& layerLayout = Data->layers; - assert(layerLayout.size()>=1); - float cellSize0 = layerLayout.at(0).cellSize0; - float cellSize1 = layerLayout.at(0).cellSize1; - float cellThickness = layerLayout.at(0).sensitive_thickness; - m_length = sqrt(cellSize0*cellSize0 + cellSize1*cellSize1 + cellThickness*cellThickness); - std::cout<<"CaloDigiAlg::cellSize0="<<cellSize0<<",cellSize1="<<cellSize1<<",cellThickness="<<cellThickness<<",m_length="<<m_length<<std::endl; - } - catch(...) - { - throw "CaloDigiAlg :Failed to get LayeredCalorimeterData ..."; - } - return GaudiAlgorithm::initialize(); -} - -StatusCode CaloDigiAlg::execute() -{ - std::vector< edm4hep::SimCalorimeterHit > sim_vec; - std::map<unsigned long long, edm4hep::SimCalorimeterHit> id_hit_map; - std::map<unsigned long long, int > test_map; - edm4hep::CalorimeterHitCollection* caloVec = w_DigiCaloCol.createAndPut(); - const edm4hep::SimCalorimeterHitCollection* SimHitCol = r_SimCaloCol.get(); - if(SimHitCol == 0) - { - std::cout<<"not found SimCalorimeterHitCollection"<< std::endl; - return StatusCode::SUCCESS; - } - std::cout<<"digi, input sim hit size="<< SimHitCol->size() <<std::endl; - float tot_sim_en = 0; - for( int i = 0; i < SimHitCol->size(); i++ ) - { - int index = -1; - float dis_min = m_length;//10mm*10mm*10mm - bool found = false; - edm4hep::SimCalorimeterHit SimHit = SimHitCol->at(i); - float en = SimHit.getEnergy(); - tot_sim_en += en; - float x0 = SimHit.getPosition().x ; - float y0 = SimHit.getPosition().y ; - float z0 = SimHit.getPosition().z ; - //std::cout<<"x0="<<x0<<",y0="<<y0<<",z0="<<z0<<std::endl; - for(int j=0; j<sim_vec.size(); j++) - { - float x = sim_vec.at(j).getPosition().x ; - float y = sim_vec.at(j).getPosition().y ; - float z = sim_vec.at(j).getPosition().z ; - float dist = sqrt( (x-x0)*(x-x0) + (y-y0)*(y-y0) + (z-z0)*(z-z0) ); - if( dist < dis_min ){ dis_min = dist; index = j ; } - } - if(index==-1) sim_vec.push_back(SimHit); - else - { - float en_ori = sim_vec.at(index).getEnergy(); - float sum_en = en + en_ori ; - sim_vec.at(index).setEnergy(sum_en); - //std::cout<<"ori_x="<<sim_vec.at(index).getPosition().x<<",ori_y="<<sim_vec.at(index).getPosition().y<<",ori_z="<<sim_vec.at(index).getPosition().z<<std::endl; - float new_x = sim_vec.at(index).getPosition().x * en_ori/sum_en + SimHit.getPosition().x * en/sum_en; - float new_y = sim_vec.at(index).getPosition().y * en_ori/sum_en + SimHit.getPosition().y * en/sum_en; - float new_z = sim_vec.at(index).getPosition().z * en_ori/sum_en + SimHit.getPosition().z * en/sum_en; - edm4hep::Vector3f pos(new_x, new_y, new_z); - sim_vec.at(index).setPosition(pos); - //std::cout<<"new_x="<<sim_vec.at(index).getPosition().x<<",new_y="<<sim_vec.at(index).getPosition().y<<",new_z="<<sim_vec.at(index).getPosition().z<<std::endl; - } - } - float tot_en = 0; - for(std::vector< edm4hep::SimCalorimeterHit >::iterator iter = sim_vec.begin(); iter != sim_vec.end(); iter++) - { - auto caloHit = caloVec->create(); - caloHit.setCellID (iter->getCellID()); - caloHit.setEnergy (iter->getEnergy()*m_scale); - caloHit.setPosition(iter->getPosition()); - tot_en += caloHit.getEnergy(); - } - - std::cout<<"total sim e ="<< tot_sim_en <<std::endl; - std::cout<<"digi, output digi hit size="<< caloVec->size()<<",tot_en="<<tot_en <<std::endl; - _nEvt ++ ; - - return StatusCode::SUCCESS; -} - -StatusCode CaloDigiAlg::finalize() -{ - info() << "Processed " << _nEvt << " events " << endmsg; - return GaudiAlgorithm::finalize(); -} diff --git a/Reconstruction/Digi_Calo/src/CaloDigiAlg.h b/Reconstruction/Digi_Calo/src/CaloDigiAlg.h index 5ecc0f68960684808570a51bec49ce9b1564ee18..050ffe7b6b8932ee181f9a9555a1e118fc9cea5b 100644 --- a/Reconstruction/Digi_Calo/src/CaloDigiAlg.h +++ b/Reconstruction/Digi_Calo/src/CaloDigiAlg.h @@ -13,34 +13,6 @@ #include <DDRec/CellIDPositionConverter.h> #include "DetInterface/IGeoSvc.h" -/** ======= PlanarDigiProcessor / CaloDigiAlg ========== <br> - * Creates TrackerHits from SimTrackerHits, smearing them according to the input parameters. - * The SimTrackerHits should come from a planar detector like VXD, SIT, SET or FTD. - * - * WARNING: this processor depends on correctly set CellID0s and is NOT backwards compatible to - * SimTrackerHit output with wrong CellID0s!!! - * - * The positions of "digitized" TrackerHits are obtained by gaussian smearing positions - * of SimTrackerHits in u and v direction. - * <h4>Input collections and prerequisites</h4> - * Processor requires a collection of SimTrackerHits <br> - * <h4>Output</h4> - * Processor produces collection of smeared TrackerHits<br> - * @param SimTrackHitCollectionName The name of input collection of SimTrackerHits <br> - * (default name VXDCollection) <br> - * @param TrackerHitCollectionName The name of output collection of smeared TrackerHits <br> - * (default name VTXTrackerHits) <br> - * @param SimTrkHitRelCollection The name of the TrackerHit SimTrackerHit relation collection <br> - * (default name VTXTrackerHitRelations) <br> - * @param ResolutionU resolution in direction of u (in mm) <br> - * (default value 0.004) <br> - * @param ResolutionV Resolution in direction of v (in mm) <br> - * (default value 0.004) <br> - * @param IsStrip whether the hits are 1 dimensional strip measurements <br> - * (default value false)<br> - * <br> - * - */ @@ -64,12 +36,8 @@ public: */ virtual StatusCode finalize() ; - std::string GetCode(const edm4hep::SimCalorimeterHit *const pHit) const; - protected: - const std::vector<dd4hep::rec::LayeredCalorimeterData::Layer>* m_layerLayout; - SmartIF<IGeoSvc> m_geosvc; typedef std::vector<float> FloatVec;