6. The DM_Detector
classes
The details of a direct detection experiment are summarized in the DM_Detector
class declared in /include/obscura/Direct_Detection.hpp.
In particular, it responsible for:
The statistical methods to compute likelihoods and exclusion limits. Since these are independent of the type of experiment, this functionality is part of the base class
DM_Detector
. As of now, obscura implements the following statistical analyses. 1. Poisson statistics 2. Binned Poisson statistics 3. Maximum gap following [Yellin2002].The detector details, such as detection efficiencies, energy resolution, target particles, etc. These can be very specific and are implemented in classes derived from
DM_Detector
, e.g.DM_Detector_Nucleus
.
We provide a number of examples of how to construct different instances of derived classes of DM_Detector
.
Nuclear recoil experiments
For experiments looking for DM induced nuclear recoils, obscura contains the DM_Detector_Nucleus
class that is declared in /include/obscura/Direct_Detection_Nucleus.hpp.
For example, assume we have a nuclear recoil experiment with \(\mathrm{CaWO}_4\) crystals, an energy threshold of 500 eV, and an exposure of 100 kg days. This information suffices to define a toy experiment.
#include "libphysica/Natural_Units.hpp"
#include "obscura/Target_Nucleus.hpp"
#include "obscura/DM_Detector_Nucleus.hpp"
using namespace libphysica::natural_units;
// ...
double exposure = 100.0 * kg * day;
std::vector<Nucleus> nuclear_targets = {obscura::Get_Nucleus(8), obscura::Get_Nucleus(20), obscura::Get_Nucleus(74)};
std::vector<double> target_ratios = {4, 1, 1};
double energy_threshold = 500 * eV;
obscura::DM_Detector_Nucleus detector("Nuclear recoil experiment", exposure, nuclear_targets, target_ratios);
Electron recoil experiments
For electron recoil experiments with atomic targets, we have to use the DM_Detector_Ionization_ER
class that can be found in /include/obscura/Direct_Detection_ER.hpp
Here is an example of a xenon target experiment probing DM-electron interactions and DM induced ionizations. As exposure we choose 100 kg days, and we furthermore assume that only events with at least 4 ionized electrons can be detectred.
#include "libphysica/Natural_Units.hpp"
#include "obscura/DM_Detector_ER.hpp"
using namespace libphysica::natural_units;
// ...
double exposure = 100.0 * kg * day;
obscura::DM_Detector_Ionization_ER xenon_experiment("Electron recoil experiment", exposure, "Xe");
argon_experiment.Use_Electron_Threshold(4);
Alternatively, many experiments looking for sub-GeV DM use semiconductor crystals as targets. In this case, there is another derived class, DM_Detector_Crystal
.
Again we construct an example toy experiment. This time, we assume a silicon crystal target, choose an exposure of 10 g year, and assume that only events with at least 2 electron-hole pairs can trigger the detector.
#include "libphysica/Natural_Units.hpp"
#include "obscura/DM_Detector_Crystal.hpp"
using namespace libphysica::natural_units;
// ...
double exposure = 10.0 * gram * year;
obscura::DM_Detector_Crystal silicon_experiment("Crystal target experiment", exposure, "Si");
silicon_experiment.Use_Q_Threshold(2);