Detectors¶
NPdet is detector toolkit for full simulations of Nuclear Physics experiments.
This site is currently under construction. Come back later!!!
Calorimeters¶
Crystal Calorimeters¶
For the backward electron direction¶
From Tanja Horn’s talk at 1st EIC Yellow Report Workshop at Temple University. The title of talk is Electromagnetic calorimetry technologies for EIC. The presentation file can be found (Page 4 Electron Endcap EMCAL).
Homogeneous calorimetry (inner part)
PbWO4 \((12\mathrm{cm} < R < 60 \mathrm{cm})\)
Dimension: \(2\times 2 \times 20 \mathrm{cm}^3\)
Performance: \(\sim 2\%/\sqrt(E)+0.7\%\)
Estimated # of blocks for EIC: 2500
Implemeted in
GenericDetectors/calorimeters/compact/CrystalEndcapECAL_example.xml
Zero Degree Calorimeters¶
For neutrons and photons¶
Form Yuji Goto (RIKEN)’s talk at 1st EIC Yellow Report Workshop at Temple University. The title of talk is Zero Degree Calorimetry. The presentation can be found.
Detector configuration of RHICf detector¶
Tungsten (Grey)
Scintillator (Blue)
Scintillator position (Red)
Longitudinal structure¶
Detector Description¶
Two towers with the same layer structure
Small tower: 20mm x 20 mm
Large tower: 40mm x 40 mm
Tungsten absorbers, Plastic Scintillators, and Scintillator position layers
Define section:¶
<define>
<constant name="offset_ZDC" value="5.0*mm"/>
<constant name="st_length" value="20.0*mm"/>
<constant name="lt_length" value="40.0*mm"/>
<constant name="st_ZDC_x_pos" value="0.0*m"/> <!-- value="0.60*m" -->
<constant name="st_ZDC_y_pos" value="0.0*m"/>
<constant name="st_ZDC_z_pos" value="1.0*m"/> <!-- value="34.0*m" -->
<constant name="lt_ZDC_x_pos" value="0.0*m"/> <!-- value="0.60*m" -->
<constant name="lt_ZDC_y_pos" value="offset_ZDC + (st_length+lt_length)/sqrt(2)"/>
<constant name="lt_ZDC_z_pos" value="1.0*m"/> <!-- value="34.0*m" -->
</define>
Detector section:¶
<detector id="1" name="smallZDC" type="ZDC" readout="ZDCHits" vis="RedVis">
<position x="st_ZDC_x_pos" y="st_ZDC_y_pos" z="st_ZDC_z_pos"/>
<dimensions x = "st_length" y = "st_length"/>
<layer repeat="2">
<slice name="Tungsten_slice" material="TungstenDens24" thickness="7*mm" vis = "GrayVis"/>
<slice name="Scint_slice" material="PlasticScint" thickness="3*mm" vis = "BlueVis" sensitive = "true"/>
</layer>
<layer repeat="1">
<slice name="Tungsten_slice" material="TungstenDens24" thickness="7*mm" vis = "GrayVis"/>
<slice name="SciFi_belt" material="PlasticScint" thickness="1*mm" vis = "RedVis" sensitive = "true"/>
<slice name="SciFi_belt" material="PlasticScint" thickness="1*mm" vis = "RedVis" sensitive = "true"/>
</layer>
<layer repeat="2">
<slice name="Scint_slice" material="PlasticScint" thickness="3*mm" vis = "BlueVis" sensitive = "true"/>
<slice name="Tungsten_slice" material="TungstenDens24" thickness="7*mm" vis = "GrayVis"/>
</layer>
<layer repeat="2">
<slice name="SciFi_belt" material="PlasticScint" thickness="1*mm" vis = "RedVis" sensitive = "true"/>
</layer>
<layer repeat="7">
<slice name="Scint_slice" material="PlasticScint" thickness="3*mm" vis = "BlueVis" sensitive = "true"/>
<slice name="Tungsten_slice" material="TungstenDens24" thickness="7*mm" vis = "GrayVis"/>
</layer>
<layer repeat="1">
<slice name="Tungsten_slice" material="TungstenDens24" thickness="7*mm" vis = "GrayVis"/>
<slice name="Scint_slice" material="PlasticScint" thickness="3*mm" vis = "BlueVis" sensitive = "true"/>
<slice name="Tungsten_slice" material="TungstenDens24" thickness="7*mm" vis = "GrayVis"/>
<slice name="Tungsten_slice" material="TungstenDens24" thickness="7*mm" vis = "GrayVis"/>
</layer>
<layer repeat="2">
<slice name="SciFi_belt" material="PlasticScint" thickness="1*mm" vis = "RedVis" sensitive = "true"/>
</layer>
<layer repeat="3">
<slice name="Scint_slice" material="PlasticScint" thickness="3*mm" vis = "BlueVis" sensitive = "true"/>
<slice name="Tungsten_slice" material="TungstenDens24" thickness="7*mm" vis = "GrayVis"/>
<slice name="Tungsten_slice" material="TungstenDens24" thickness="7*mm" vis = "GrayVis"/>
</layer>
<layer repeat="2">
<slice name="SciFi_belt" material="PlasticScint" thickness="1*mm" vis = "RedVis" sensitive = "true"/>
</layer>
<layer repeat="1">
<slice name="Scint_slice" material="PlasticScint" thickness="3*mm" vis = "BlueVis" sensitive = "true"/>
<slice name="Tungsten_slice" material="TungstenDens24" thickness="7*mm" vis = "GrayVis"/>
</layer>
</detector>
<detector id="2" name="largeZDC" type="ZDC" readout="ZDCHits" vis="RedVis">
<position x="lt_ZDC_x_pos" y="lt_ZDC_y_pos" z="lt_ZDC_z_pos"/>
<dimensions x = "lt_length" y = "lt_length"/>
<layer>
</layer>
</detector>
Access Variables¶
Volume ID that obtained from Cell ID using dd4hep::VolumeManagerContext.identifier
auto volID = [&] (const std::vector<dd4hep::sim::Geant4Calorimeter::Hit*>& hits) {
std::vector<double> result;
for(const auto& h: hits) {
auto volcontext = cellid_converter.findContext(h->cellID);
result.push_back(volcontext->identifier);
}
return result;
};
Volume ID that obtained from Cell ID using dd4hep::VolumeManagerContext.element and Readout/Segmentation
auto volID = [&] (const std::vector<dd4hep::sim::Geant4Calorimeter::Hit*>& hits) {
std::vector<double> result;
for(const auto& h: hits) {
auto volcontext = cellid_converter.findContext(h->cellID);
dd4hep::Readout r = cellid_converter.findReadout(volcontext->element);
dd4hep::Segmentation seg = r.segmentation();
result.push_back(seg.volumeID(h->cellID));
}
return result;
};
SoLID ElectroMagnetic Calorimeter¶
A electromagnetic calorimeter for the SoLID detector. It is a ring-shape detector with hexgonal modules.
Example use:
<detector id="3" name="LAECPreShower" type="EMCalorimeterSoLID" readout="LAEC_PrShHits" vis="PurpleVis" >
<comment>Large Angle Electromagnetic Calorimeter (LAEC) Preshower for SIDIS</comment>
<dimensions rmin="83*cm" rmax="140*cm" z0="-65*cm" rmod="6.25*cm" rtol="1.0*cm" />
<layer repeat="1" vis="InvisibleWithDaughters">
<slice material = "Lead" thickness = "1.12*cm" vis="BlueVis"/>
<slice material = "EJ204" thickness = "6.25*cm" vis="PurpleVis" sensitive="yes"/>
</layer>
</detector>
<detector id="4" name="LAECShower" type="EMCalorimeterSoLID" readout="LAEC_ShHits" vis="PurpleVis" >
<comment>Large Angle Electromagnetic Calorimeter (LAEC) Shower for SIDIS</comment>
<dimensions rmin="83*cm" rmax="140*cm" z0="-57*cm" rmod="6.25*cm" rtol="1.0*cm" />
<layer repeat="194" vis="GreenVis">
<slice material = "Lead" thickness = "0.05*cm"/>
<slice material = "EJ204" thickness = "0.15*cm" sensitive="yes" limits="cal_limits"/>
<slice material = "Air" thickness = "0.012*2*cm"/>
</layer>
</detector>
Detector description variables¶
- dimensions
Dimensions of the sensitive detector
- rmin
Inner radius of the detector
- rmax
Outer raidus of the detector
- z0
Z position (along the beam line) of the front surface of the detector
- rmod
Outer radius (side length) of the hexgonal module
- rtol
Extrusion Tolerance for putting modules inside the detector ring
- layer
Layer definition of the hexgonal modules
- repeat
Number of the same slices to stack along z
- slice
Slice definition in the layer
- material
slice material
- thickness
slice thickness
Trackers¶
Roman Pot¶
A pair of Roman Pot-style detectors for detection of particles scattered by very small angles, typically in forward and far-forward regions.
Generic information about design of Roman pot detectors can be found in references describing units used at LHC ref 1 and ref 2.
Example use:
<detector id = "1" name = "MyRomanPot" type = "RomanPot" readout =
"ForwardRomanPotHits" vis = "RedVis">
<dimensions x = "3.0*cm" y = "3.0*cm" delta = "0.005*cm" />
<frame x = "10.0*cm" y = "5.0*cm" z = "2*cm" />
<position z_offset = "0.0*m" rotation = "false" vmax = "10*cm" v = "2.0*cm" />
<layer repeat = "5">
<slice material = "Carbon" thickness = "0.5*mm" vis = "BlueVis" />
<slice material = "Silicon" thickness = "0.03*cm" vis = "GreenVis" sensitive = "true" />
<slice material = "Carbon" thickness = "0.5*mm" vis = "BlueVis" />
<slice material = "Vacuum" thickness = "1.0*mm" vis = "InvisibleWithDaughters" />
</layer>
</detector>
Detector description variables¶
- dimensions
Dimensions of the sensitive detector.
- x
Width of the detector.
- y
Height of the detector.
- delta
Separation gap - the distance between the inner edges of the active area substrate.
- frame
Dimensions of the frame that houses the sensitive detector.
- x
Width of the frame.
- y
Height of the frame.
- z
thickness of the frame.
- position
Positioning of the whole detector pair relative to the beamline.
- z_offset
Distance along the beamline.
- rotation
Boolean which determines whether the detector pair is horizontal (false) or vertical (true).
- vmax
Furthest distance of the detector from the beam (used to create the full unit unclosure).
- v
Current insertion depth of the detectors (distance of the inner edge relative to the beam axis).
- layer
Material stack used for the sensitive detector.
- repeat
Number of layers in a single detectors.
Particle Identification (PID)¶
Generic Gaseous RICH¶
A generic gas RICH detector for hadron PID in the forward dectection is shown in the figure below. The simple design uses a plane mirror to reflect cherenkov photons (green) onto an array of MCP-PMT detectors (blue). The optical properties of the mirror are defined in a properites block as shown here.
<detector id="1" name="ForwardRICH" type="GenericRICH"
readout="ForwardRICHHits" vis="RedVis" material="N2cherenkov">
<dimensions rmin1="30*cm" rmin2="30*cm" rmax1="80*cm" rmax2="80*cm" zmin="20*cm" zmax="120*cm"/>
</detector>
Optical surfaces are defined in the detector construction. Their optical properites of surfaces are defined in the detector description:
<surfaces>
<opticalsurface finish="polished" model="glisur" name="MirrorOpticalSurface" type="dielectric_metal" value="0">
<property name="REFLECTIVITY" ref="REFLECTIVITY_mirror"/>
<property name="RINDEX" coldim="2" values="1.034*eV 1.5 4.136*eV 1.5"/>
</opticalsurface>
</surfaces>