LDMX Software
ChargeCarrier.h
1#pragma once
2
3#include <stdexcept>
4
5/*
6 * Original Author T. K. Nelson
7 */
8
9namespace tracking {
10namespace digitization {
11
12static const double TCOEFF = 300.0;
13
15 public:
16 ChargeCarrier(int charge, double mu_0_factor, double mu_0_exponent,
17 double mu_min_factor, double mu_min_exponent,
18 double N_ref_factor, double N_ref_exponent, double alpha_factor,
19 double alpha_exponent) {
20 charge_ = charge;
21 mu_0_factor_ = mu_0_factor;
22 mu_0_exponent_ = mu_0_exponent;
23 mu_min_factor_ = mu_min_factor;
24 mu_min_exponent_ = mu_min_exponent;
25 N_ref_factor_ = N_ref_factor;
26 N_ref_exponent_ = N_ref_exponent;
27 alpha_factor_ = alpha_factor;
28 alpha_exponent_ = alpha_exponent;
29 }
30
31 int charge() { return charge_; }
32
33 double mu0(double temperature);
34 double muMin(double temperature);
35 double nRef(double temperature);
36 double alpha(double temperature);
37
38 private:
39 int charge_;
40 double mu_0_factor_;
41 double mu_0_exponent_;
42 double mu_min_factor_;
43 double mu_min_exponent_;
44 double N_ref_factor_;
45 double N_ref_exponent_;
46 double alpha_factor_;
47 double alpha_exponent_;
48};
49
50static const ChargeCarrier electron(-1, 1268.0, -2.33, 92.0, -0.57, 1.3E+17,
51 2.4, 0.91, -0.146);
52static const ChargeCarrier hole(1, 406.9, -2.23, 54.3, -0.57, 2.35E+17, 2.4,
53 0.88, -0.146);
54
55static ChargeCarrier getCarrier(int charge) {
56 if (charge == -1)
57 return electron;
58 else if (charge == 1)
59 return hole;
60 else
61 throw std::invalid_argument("No ChargeCarrier for charge specified");
62}
63
64} // namespace digitization
65} // namespace tracking
The measurement calibrator can be a function or a class/struct able to retrieve the sim hits containe...