1 package org.lcsim.detector.tracker.silicon;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public enum ChargeCarrier
18 {
19 ELECTRON(-1,1268.0,-2.33,92.0,-0.57,1.3E+17,2.4,0.91,-0.146),
20 HOLE(1,406.9,-2.23,54.3,-0.57,2.35E+17,2.4,0.88,-0.146);
21
22 private final int _charge;
23 private final double _mu_0_factor;
24 private final double _mu_0_exponent;
25 private final double _mu_min_factor;
26 private final double _mu_min_exponent;
27 private final double _N_ref_factor;
28 private final double _N_ref_exponent;
29 private final double _alpha_factor;
30 private final double _alpha_exponent;
31
32 ChargeCarrier(int charge, double mu_0_factor, double mu_0_exponent, double mu_min_factor, double mu_min_exponent,
33 double N_ref_factor, double N_ref_exponent, double alpha_factor, double alpha_exponent)
34 {
35 _charge = charge;
36 _mu_0_factor = mu_0_factor;
37 _mu_0_exponent = mu_0_exponent;
38 _mu_min_factor = mu_min_factor;
39 _mu_min_exponent = mu_min_exponent;
40 _N_ref_factor = N_ref_factor;
41 _N_ref_exponent = N_ref_exponent;
42 _alpha_factor = alpha_factor;
43 _alpha_exponent = alpha_exponent;
44 }
45
46
47 public int charge()
48 {return _charge;}
49 double mu0(double temperature)
50 {return _mu_0_factor * Math.pow( (temperature/300.0), _mu_0_exponent);}
51 double muMin(double temperature)
52 {return _mu_min_factor * Math.pow( (temperature/300.0), _mu_min_exponent);}
53 double nRef(double temperature)
54 {return _N_ref_factor * Math.pow( (temperature/300.0), _N_ref_exponent);}
55 double alpha(double temperature)
56 {return _alpha_factor * Math.pow( (temperature/300.0), _alpha_exponent);}
57
58
59 public static ChargeCarrier getCarrier(int charge)
60 {
61 if (charge == -1) return ChargeCarrier.ELECTRON;
62 if (charge == +1) return ChargeCarrier.HOLE;
63 else throw new RuntimeException("No ChargeCarrier for charge: "+charge);
64 }
65
66 }