ATLAS Offline Software
Loading...
Searching...
No Matches
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
11namespace InDet {
12
14using InDetDD::holes;
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.
20const double SiliconProperties::s_ehPairsPerEnergyDefault = 1. / (3.62 * CLHEP::eV); // 1 eh pair per 3.62 CLHEP::eV.
21
22// Constants used in the formula
23const double elecHallFactZero = 1.13;
24const double elecHallFact_drdt = 8e-4;
25const double elecV_sat_0 = 1.43e9 * CLHEP::cm/CLHEP::s; // This number was corrected by ATL-INDET-PUB-2018-001
26const double elecV_sat_exp = -0.87;
27const double elecE_crit_0 = 1.01 * CLHEP::volt/CLHEP::cm;
28const double elecE_crit_exp = 1.55;
29const double elecBeta_0 = 2.57e-2;
30const double elecBeta_exp = 0.66;
31
32const double holeHallFactZero = 0.72;
33const double holeHallFact_drdt = -5e-4;
34const double holeV_sat_0 = 1.62e8 * CLHEP::cm/CLHEP::s;
35const double holeV_sat_exp = -0.52;
36const double holeE_crit_0 = 1.24 * CLHEP::volt/CLHEP::cm;
37const double holeE_crit_exp = 1.68;
38const double holeBeta_0 = 0.46;
39const double holeBeta_exp = 0.17;
40
41const double temperatureZero = 273.15 * CLHEP::kelvin;
42
55
70
85
87 if (carrierType == holes) {
88 return holeDriftMobility();
89 } else {
90 return electronDriftMobility();
91 }
92}
93
95 if (carrierType == holes) {
96 return holeHallMobility();
97 } else {
98 return electronHallMobility();
99 }
100}
101
103 if (carrierType == holes) {
104 return holeDiffusionConstant();
105 } else {
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
124 // Equation from ATL-INDET-2001-004
125 return elecHallFactZero + elecHallFact_drdt * (temperature - temperatureZero);
126}
127
128double SiliconProperties::calcHoleHallFactor(double temperature) {
129 // Equation from ATL-INDET-2001-004
130 return holeHallFactZero + holeHallFact_drdt * (temperature - temperatureZero);
131}
132
133// driftMobility
134double SiliconProperties::calcDriftMobility(double electricField, double electricField_critical, double saturationVelocity, double beta) {
135 // Equation from ATL-INDET-2001-004
136 return saturationVelocity / electricField_critical /
137 std::pow(std::abs(1. + std::pow(std::abs(electricField/electricField_critical), beta)), 1./beta);
138}
139
140double SiliconProperties::calcElectronDriftMobility(double temperature, double electricField) const {
141 // Equations from ATL-INDET-2001-004
142// double saturationVelocity = elecV_sat_0 * std::pow(temperature, elecV_sat_exp);
143 double saturationVelocity = m_electronSaturationVelocity*std::pow(temperature, elecV_sat_exp);
144 double electricField_critical = elecE_crit_0 * std::pow(temperature, elecE_crit_exp);
145 double beta = elecBeta_0 * std::pow(temperature, elecBeta_exp);
146 return calcDriftMobility(electricField, electricField_critical, saturationVelocity, beta);
147}
148
149double SiliconProperties::calcHoleDriftMobility(double temperature, double electricField) const {
150 // Equations from ATL-INDET-2001-004
151// double saturationVelocity = holeV_sat_0 * std::pow(temperature, holeV_sat_exp);
152 double saturationVelocity = m_holeSaturationVelocity*std::pow(temperature, holeV_sat_exp);
153 double electricField_critical = holeE_crit_0 * std::pow(temperature, holeE_crit_exp);
154 double beta = holeBeta_0 * std::pow(temperature, holeBeta_exp);
155 return calcDriftMobility(electricField, electricField_critical, saturationVelocity, beta);
156}
157
158
159double 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
167
171
175
179
183
187
191
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
220
225
229
233
235 m_ehPairsPerEnergy = ehPairsPerEnergy;
236}
237
241
242
243
244} // namespace InDetDD
static double calcHoleHallFactor(double temperature)
void setConditions(double temperature, double electricField)
double driftMobility(InDetDD::CarrierType carrier) const
void setElectronDiffusionConstant(double diffusionConstant)
static double charge(InDetDD::CarrierType carrier)
double signedHallMobility(InDetDD::CarrierType carrier) const
void setElectronHolePairsPerEnergy(double ehPairsPerEnergy)
void setHoleDiffusionConstant(double diffusionConstant)
static double calcElectronHallFactor(double temperature)
double hallMobility(InDetDD::CarrierType carrier) const
double electronSaturationVelocity() const
void setHoleSaturationVelocity(double holeSaturationVelocity)
double electronHolePairsPerEnergy() const
void setElectronSaturationVelocity(double electronSaturationVelocity)
double calcElectronDriftMobility(double temperature, double electricField) const
void setHoleHallMobility(double mobility)
double calcHoleDriftMobility(double temperature, double electricField) const
void setElectronDriftMobility(double mobility)
void setElectronHallMobility(double mobility)
static double calcDriftMobility(double electricField, double electricField_critical, double saturationVelocity, double beta)
static double calcDiffusionConstant(double temperature, double mobility)
double diffusionConstant(InDetDD::CarrierType carrier) const
void setHoleDriftMobility(double mobility)
static const double s_ehPairsPerEnergyDefault
double electronDiffusionConstant() const
const double holeHallFactZero
const double elecHallFactZero
const double temperatureZero
const double elecBeta_0
const double elecBeta_exp
const double elecHallFact_drdt
const double holeBeta_exp
const double holeBeta_0
const double elecE_crit_0
const double holeE_crit_0
const double elecE_crit_exp
const double elecV_sat_0
const double holeE_crit_exp
const double holeHallFact_drdt
const double holeV_sat_exp
const double elecV_sat_exp
const double holeV_sat_0
Primary Vertex Finder.