ATLAS Offline Software
SiliconProperties.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 #include "CLHEP/Units/PhysicalConstants.h"
7 
8 #include <cmath>
9 #include <iostream>
10 
11 namespace InDet {
12 
14 using InDetDD::holes;
15 using InDetDD::electrons;
16 
17 // This value for the number of eh pairs per deposited energy is fairly standard I think.
18 // In reality there is some temperture dependence but for the temperature ranges we deal with
19 // I don't think variations are too signifcant.
20 const double SiliconProperties::s_ehPairsPerEnergyDefault = 1. / (3.62 * CLHEP::eV); // 1 eh pair per 3.62 CLHEP::eV.
21 
22 // Constants used in the formula
23 const double elecHallFactZero = 1.13;
24 const double elecHallFact_drdt = 8e-4;
25 const double elecV_sat_0 = 1.43e9 * CLHEP::cm/CLHEP::s; // This number was corrected by ATL-INDET-PUB-2018-001
26 const double elecV_sat_exp = -0.87;
27 const double elecE_crit_0 = 1.01 * CLHEP::volt/CLHEP::cm;
28 const double elecE_crit_exp = 1.55;
29 const double elecBeta_0 = 2.57e-2;
30 const double elecBeta_exp = 0.66;
31 
32 const double holeHallFactZero = 0.72;
33 const double holeHallFact_drdt = -5e-4;
34 const double holeV_sat_0 = 1.62e8 * CLHEP::cm/CLHEP::s;
35 const double holeV_sat_exp = -0.52;
36 const double holeE_crit_0 = 1.24 * CLHEP::volt/CLHEP::cm;
37 const double holeE_crit_exp = 1.68;
38 const double holeBeta_0 = 0.46;
39 const double holeBeta_exp = 0.17;
40 
41 const double temperatureZero = 273.15 * CLHEP::kelvin;
42 
44  : m_electronDriftMobility(0),
45  m_holeDriftMobility(0),
46  m_electronHallMobility(0),
47  m_holeHallMobility(0),
48  m_electronDiffusionConstant(0),
49  m_holeDiffusionConstant(0),
50  m_electronSaturationVelocity(0),
51  m_holeSaturationVelocity(0),
52  m_ehPairsPerEnergy(s_ehPairsPerEnergyDefault),
53  m_override(false)
54 {}
55 
56 SiliconProperties::SiliconProperties(double temperature, double electricField)
57  : m_electronDriftMobility(0),
58  m_holeDriftMobility(0),
59  m_electronHallMobility(0),
60  m_holeHallMobility(0),
61  m_electronDiffusionConstant(0),
62  m_holeDiffusionConstant(0),
63  m_electronSaturationVelocity(0),
64  m_holeSaturationVelocity(0),
65  m_ehPairsPerEnergy(s_ehPairsPerEnergyDefault),
66  m_override(false)
67 {
68  setConditions(temperature, electricField);
69 }
70 
71 void SiliconProperties::setConditions(double temperature, double electricField) {
72 
75 
76  if (!m_override) {
77  m_electronDriftMobility = calcElectronDriftMobility(temperature, electricField);
78  m_holeDriftMobility = calcHoleDriftMobility(temperature, electricField);
83  }
84 }
85 
86 double SiliconProperties::driftMobility(CarrierType carrierType) const {
87  if (carrierType == holes) {
88  return holeDriftMobility();
89  } else {
90  return electronDriftMobility();
91  }
92 }
93 
94 double SiliconProperties::hallMobility(CarrierType carrierType) const {
95  if (carrierType == holes) {
96  return holeHallMobility();
97  } else {
98  return electronHallMobility();
99  }
100 }
101 
103  if (carrierType == holes) {
104  return holeDiffusionConstant();
105  } else {
106  return electronDiffusionConstant();
107  }
108 }
109 
111  return (carrierType == holes) ? +1 : -1;
112 }
113 
115  if (carrierType == holes) {
116  return holeHallMobility();
117  } else {
118  return -electronHallMobility();
119  }
120 }
121 
122 
123 double SiliconProperties::calcElectronHallFactor(double temperature) {
124  // Equation from ATL-INDET-2001-004
125  return elecHallFactZero + elecHallFact_drdt * (temperature - temperatureZero);
126 }
127 
128 double SiliconProperties::calcHoleHallFactor(double temperature) {
129  // Equation from ATL-INDET-2001-004
130  return holeHallFactZero + holeHallFact_drdt * (temperature - temperatureZero);
131 }
132 
133 // driftMobility
134 double SiliconProperties::calcDriftMobility(double electricField, double electricField_critical, double saturationVelocity, double beta) {
135  // Equation from ATL-INDET-2001-004
136  return saturationVelocity / electricField_critical /
137  pow(std::abs(1. + pow(std::abs(electricField/electricField_critical), beta)), 1./beta);
138 }
139 
140 double SiliconProperties::calcElectronDriftMobility(double temperature, double electricField) const {
141  // Equations from ATL-INDET-2001-004
142 // double saturationVelocity = elecV_sat_0 * pow(temperature, elecV_sat_exp);
143  double saturationVelocity = m_electronSaturationVelocity*pow(temperature, elecV_sat_exp);
144  double electricField_critical = elecE_crit_0 * pow(temperature, elecE_crit_exp);
145  double beta = elecBeta_0 * pow(temperature, elecBeta_exp);
146  return calcDriftMobility(electricField, electricField_critical, saturationVelocity, beta);
147 }
148 
149 double SiliconProperties::calcHoleDriftMobility(double temperature, double electricField) const {
150  // Equations from ATL-INDET-2001-004
151 // double saturationVelocity = holeV_sat_0 * pow(temperature, holeV_sat_exp);
152  double saturationVelocity = m_holeSaturationVelocity*pow(temperature, holeV_sat_exp);
153  double electricField_critical = holeE_crit_0 * pow(temperature, holeE_crit_exp);
154  double beta = holeBeta_0 * pow(temperature, holeBeta_exp);
155  return calcDriftMobility(electricField, electricField_critical, saturationVelocity, beta);
156 }
157 
158 
159 double SiliconProperties::calcDiffusionConstant(double temperature, double mobility) {
160  // Einstein's relationship (in many text books)
161  return -CLHEP::k_Boltzmann * temperature / CLHEP::electron_charge * mobility; // CLHEP::k_Boltzmann and CLHEP::electron_charge
162 }
163 
166 }
167 
169  return m_holeDriftMobility;
170 }
171 
173  return m_electronHallMobility;
174 }
175 
177  return m_holeHallMobility;
178 }
179 
182 }
183 
186 }
187 
190 }
191 
194 }
195 
197  m_override = true;
198  m_electronDriftMobility = mobility;
199 }
200 
202  m_override = true;
203  m_holeDriftMobility = mobility;
204 }
205 
207  m_override = true;
208  m_electronHallMobility = mobility;
209 }
210 
212  m_override = true;
213  m_holeHallMobility = mobility;
214 }
215 
216 void SiliconProperties::setElectronDiffusionConstant(double diffusionConstant) {
217  m_override = true;
219 }
220 
221 void SiliconProperties::setHoleDiffusionConstant(double diffusionConstant) {
222  m_override = true;
224 }
225 
226 void SiliconProperties::setElectronSaturationVelocity(double electronSaturationVelocity) {
228 }
229 
230 void SiliconProperties::setHoleSaturationVelocity(double holeSaturationVelocity) {
232 }
233 
235  m_ehPairsPerEnergy = ehPairsPerEnergy;
236 }
237 
239  return m_ehPairsPerEnergy;
240 }
241 
242 
243 
244 } // namespace InDetDD
InDet::SiliconProperties::setElectronDiffusionConstant
void setElectronDiffusionConstant(double diffusionConstant)
Definition: SiliconProperties.cxx:216
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
InDet::SiliconProperties::holeHallMobility
double holeHallMobility() const
Definition: SiliconProperties.cxx:176
InDet::holeHallFactZero
const double holeHallFactZero
Definition: SiliconProperties.cxx:32
InDet::holeBeta_0
const double holeBeta_0
Definition: SiliconProperties.cxx:38
python.PhysicalConstants.k_Boltzmann
float k_Boltzmann
Definition: PhysicalConstants.py:114
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
InDet::elecHallFact_drdt
const double elecHallFact_drdt
Definition: SiliconProperties.cxx:24
InDet::SiliconProperties::calcElectronHallFactor
static double calcElectronHallFactor(double temperature)
Definition: SiliconProperties.cxx:123
InDet::elecBeta_0
const double elecBeta_0
Definition: SiliconProperties.cxx:29
InDet::SiliconProperties::calcDriftMobility
static double calcDriftMobility(double electricField, double electricField_critical, double saturationVelocity, double beta)
Definition: SiliconProperties.cxx:134
InDetDD::holes
@ holes
Definition: InDetDD_Defs.h:17
InDet
Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
InDet::SiliconProperties::setHoleDiffusionConstant
void setHoleDiffusionConstant(double diffusionConstant)
Definition: SiliconProperties.cxx:221
InDet::holeE_crit_exp
const double holeE_crit_exp
Definition: SiliconProperties.cxx:37
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
InDet::SiliconProperties::electronDriftMobility
double electronDriftMobility() const
Definition: SiliconProperties.cxx:164
InDet::SiliconProperties::holeDiffusionConstant
double holeDiffusionConstant() const
Definition: SiliconProperties.cxx:184
InDet::SiliconProperties::electronDiffusionConstant
double electronDiffusionConstant() const
Definition: SiliconProperties.cxx:180
InDet::SiliconProperties::diffusionConstant
double diffusionConstant(InDetDD::CarrierType carrier) const
Definition: SiliconProperties.cxx:102
InDet::SiliconProperties::m_holeSaturationVelocity
double m_holeSaturationVelocity
Definition: SiliconProperties.h:83
InDet::elecV_sat_0
const double elecV_sat_0
Definition: SiliconProperties.cxx:25
InDet::SiliconProperties::holeDriftMobility
double holeDriftMobility() const
Definition: SiliconProperties.cxx:168
InDet::elecE_crit_0
const double elecE_crit_0
Definition: SiliconProperties.cxx:27
InDet::SiliconProperties::m_holeHallMobility
double m_holeHallMobility
Definition: SiliconProperties.h:79
InDet::SiliconProperties::calcElectronDriftMobility
double calcElectronDriftMobility(double temperature, double electricField) const
Definition: SiliconProperties.cxx:140
InDet::elecBeta_exp
const double elecBeta_exp
Definition: SiliconProperties.cxx:30
python.SystemOfUnits.kelvin
int kelvin
Definition: SystemOfUnits.py:241
InDet::SiliconProperties::m_electronDriftMobility
double m_electronDriftMobility
Definition: SiliconProperties.h:76
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
InDet::holeHallFact_drdt
const double holeHallFact_drdt
Definition: SiliconProperties.cxx:33
InDet::SiliconProperties::s_ehPairsPerEnergyDefault
static const double s_ehPairsPerEnergyDefault
Definition: SiliconProperties.h:88
InDet::elecHallFactZero
const double elecHallFactZero
Definition: SiliconProperties.cxx:23
InDet::SiliconProperties::m_override
bool m_override
Definition: SiliconProperties.h:86
InDet::temperatureZero
const double temperatureZero
Definition: SiliconProperties.cxx:41
InDet::SiliconProperties::driftMobility
double driftMobility(InDetDD::CarrierType carrier) const
Definition: SiliconProperties.cxx:86
InDet::SiliconProperties::m_electronHallMobility
double m_electronHallMobility
Definition: SiliconProperties.h:78
InDet::holeE_crit_0
const double holeE_crit_0
Definition: SiliconProperties.cxx:36
InDet::SiliconProperties::setElectronDriftMobility
void setElectronDriftMobility(double mobility)
Definition: SiliconProperties.cxx:196
InDet::SiliconProperties::calcDiffusionConstant
static double calcDiffusionConstant(double temperature, double mobility)
Definition: SiliconProperties.cxx:159
InDet::SiliconProperties::calcHoleDriftMobility
double calcHoleDriftMobility(double temperature, double electricField) const
Definition: SiliconProperties.cxx:149
InDet::holeV_sat_exp
const double holeV_sat_exp
Definition: SiliconProperties.cxx:35
InDet::SiliconProperties::calcHoleHallFactor
static double calcHoleHallFactor(double temperature)
Definition: SiliconProperties.cxx:128
InDet::SiliconProperties::hallMobility
double hallMobility(InDetDD::CarrierType carrier) const
Definition: SiliconProperties.cxx:94
python.SystemOfUnits.volt
int volt
Definition: SystemOfUnits.py:204
InDet::SiliconProperties::m_electronDiffusionConstant
double m_electronDiffusionConstant
Definition: SiliconProperties.h:80
InDet::elecV_sat_exp
const double elecV_sat_exp
Definition: SiliconProperties.cxx:26
InDet::SiliconProperties::setHoleDriftMobility
void setHoleDriftMobility(double mobility)
Definition: SiliconProperties.cxx:201
InDet::elecE_crit_exp
const double elecE_crit_exp
Definition: SiliconProperties.cxx:28
python.SystemOfUnits.eV
int eV
Definition: SystemOfUnits.py:155
InDet::SiliconProperties::m_holeDriftMobility
double m_holeDriftMobility
Definition: SiliconProperties.h:77
InDet::SiliconProperties::signedHallMobility
double signedHallMobility(InDetDD::CarrierType carrier) const
Definition: SiliconProperties.cxx:114
InDet::SiliconProperties::SiliconProperties
SiliconProperties()
Definition: SiliconProperties.cxx:43
InDet::SiliconProperties::m_ehPairsPerEnergy
double m_ehPairsPerEnergy
Definition: SiliconProperties.h:84
InDet::SiliconProperties::electronHallMobility
double electronHallMobility() const
Definition: SiliconProperties.cxx:172
InDet::SiliconProperties::m_electronSaturationVelocity
double m_electronSaturationVelocity
Definition: SiliconProperties.h:82
InDetDD::CarrierType
CarrierType
Definition: InDetDD_Defs.h:17
InDet::SiliconProperties::holeSaturationVelocity
double holeSaturationVelocity() const
Definition: SiliconProperties.cxx:192
InDet::SiliconProperties::setHoleSaturationVelocity
void setHoleSaturationVelocity(double holeSaturationVelocity)
Definition: SiliconProperties.cxx:230
InDet::SiliconProperties::electronHolePairsPerEnergy
double electronHolePairsPerEnergy() const
Definition: SiliconProperties.cxx:238
InDet::SiliconProperties::electronSaturationVelocity
double electronSaturationVelocity() const
Definition: SiliconProperties.cxx:188
InDet::holeV_sat_0
const double holeV_sat_0
Definition: SiliconProperties.cxx:34
InDet::SiliconProperties::setElectronHallMobility
void setElectronHallMobility(double mobility)
Definition: SiliconProperties.cxx:206
python.PhysicalConstants.electron_charge
electron_charge
Definition: PhysicalConstants.py:79
InDet::SiliconProperties::setHoleHallMobility
void setHoleHallMobility(double mobility)
Definition: SiliconProperties.cxx:211
InDet::holeBeta_exp
const double holeBeta_exp
Definition: SiliconProperties.cxx:39
MuonParameters::beta
@ beta
Definition: MuonParamDefs.h:144
InDet::SiliconProperties::setElectronSaturationVelocity
void setElectronSaturationVelocity(double electronSaturationVelocity)
Definition: SiliconProperties.cxx:226
InDet::SiliconProperties::charge
static double charge(InDetDD::CarrierType carrier)
Definition: SiliconProperties.cxx:110
InDet::SiliconProperties::m_holeDiffusionConstant
double m_holeDiffusionConstant
Definition: SiliconProperties.h:81
InDet::SiliconProperties::setElectronHolePairsPerEnergy
void setElectronHolePairsPerEnergy(double ehPairsPerEnergy)
Definition: SiliconProperties.cxx:234
InDetDD::electrons
@ electrons
Definition: InDetDD_Defs.h:17
InDet::SiliconProperties::setConditions
void setConditions(double temperature, double electricField)
Definition: SiliconProperties.cxx:71
SiliconProperties.h