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)

    1. PbWO4 \((12\mathrm{cm} < R < 60 \mathrm{cm})\)

    2. Dimension: \(2\times 2 \times 20 \mathrm{cm}^3\)

    3. Performance: \(\sim 2\%/\sqrt(E)+0.7\%\)

    4. Estimated # of blocks for EIC: 2500

  • Implemeted in

    1. GenericDetectors/calorimeters/compact/CrystalEndcapECAL_example.xml

    2. GenericDetectors/calorimeters/src/CrystalEndcapECAL_geo.cpp

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)

../_images/ZDC.png
Longitudinal structure
../_images/Longitudinal_structure_of_ZDC_detector.png
Detector Description
  • Two towers with the same layer structure

    1. Small tower: 20mm x 20 mm

    2. Large tower: 40mm x 40 mm

    3. 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.

../_images/RP.png

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

../_images/rp_schem.pdf
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.

../_images/topside_rich.png
<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>