|
ATLAS Offline Software
|
#include <SCT_ChargeTrappingTool.h>
|
| SCT_ChargeTrappingTool (const std::string &type, const std::string &name, const IInterface *parent) |
|
virtual | ~SCT_ChargeTrappingTool ()=default |
|
virtual StatusCode | initialize () override |
|
virtual StatusCode | finalize () override |
|
virtual SCT_ChargeTrappingCondData | getCondData (const IdentifierHash &elementHash, double pos, const EventContext &ctx) const override |
|
virtual SCT_ChargeTrappingCondData | getCondData (const IdentifierHash &elementHash, double pos) const override |
|
virtual void | getHoleTransport (double &x0, double &y0, double &xfin, double &yfin, double &Q_m2, double &Q_m1, double &Q_00, double &Q_p1, double &Q_p2, const EventContext &ctx) const override |
|
virtual void | getHoleTransport (double &x0, double &y0, double &xfin, double &yfin, double &Q_m2, double &Q_m1, double &Q_00, double &Q_p1, double &Q_p2) const override |
|
|
SCT_ChargeTrappingCondData | calculate (const IdentifierHash &elementHash, double pos, const EventContext &ctx) const |
|
double | induced (int istrip, double x, double y) const |
|
void | holeTransport (double &x0, double &y0, double &xfin, double &yfin, double &Q_m2, double &Q_m1, double &Q_00, double &Q_p1, double &Q_p2) const |
|
const InDetDD::SiDetectorElement * | getDetectorElement (const IdentifierHash &waferHash, const EventContext &ctx) const |
|
|
StringProperty | m_detectorName {this, "DetectorName", "SCT", "Detector name"} |
|
bool | m_isSCT {false} |
|
DoubleProperty | m_temperature {this, "Temperature", -2., "Default temperature in Celcius."} |
|
DoubleProperty | m_temperatureMin {this, "TemperatureMin", -80., "Minimum temperature allowed in Celcius."} |
|
DoubleProperty | m_temperatureMax {this, "TemperatureMax", 100., "Maximum temperature allowed in Celcius."} |
|
DoubleProperty | m_deplVoltage {this, "DepletionVoltage", -30., "Default depletion voltage in Volt."} |
|
DoubleProperty | m_biasVoltage {this, "BiasVoltage", 150., "Default bias voltage in Volt."} |
|
bool | m_conditionsToolValid {false} |
|
std::atomic_bool | m_conditionsToolWarning {false} |
|
BooleanProperty | m_calcHoles {this, "CalcHoles", true, "Default is to consider holes in signal formation."} |
|
DoubleProperty | m_fluence {this, "Fluence", 3.0E13, "Fluence received by the detector."} |
|
DoubleProperty | m_betaElectrons {this, "BetaElectrons", 3.1E-16, "Constant for the trapping model for electrons, in [cm^2/ns] -- average value from Table 2 in ATL-INDET-2003-014"} |
|
DoubleProperty | m_betaHoles {this, "BetaHoles", 5.1E-16, "Constant for the trapping model for holes in [cm^2/ns] -- average value from Table 2 in ATL-INDET-2003-014"} |
|
double | m_PotentialValue [81][115] {{0.}} |
|
ToolHandle< ISiliconConditionsTool > | m_siConditionsTool {this, "SiConditionsTool", "SCT_SiliconConditionsTool", "SCT silicon conditions tool"} |
|
ToolHandle< ISCT_ElectricFieldTool > | m_electricFieldTool {this, "SCT_ElectricFieldTool", "SCT_ElectricFieldTool", "SCT electric field tool"} |
|
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > | m_SCTDetEleCollKey {this, "SCTDetEleCollKey", "SCT_DetectorElementCollection", "Key of SiDetectorElementCollection for SCT"} |
|
Definition at line 44 of file SCT_ChargeTrappingTool.h.
◆ SCT_ChargeTrappingTool()
SCT_ChargeTrappingTool::SCT_ChargeTrappingTool |
( |
const std::string & |
type, |
|
|
const std::string & |
name, |
|
|
const IInterface * |
parent |
|
) |
| |
◆ ~SCT_ChargeTrappingTool()
virtual SCT_ChargeTrappingTool::~SCT_ChargeTrappingTool |
( |
| ) |
|
|
virtualdefault |
◆ calculate()
Definition at line 92 of file SCT_ChargeTrappingTool.cxx.
99 ATH_MSG_WARNING(
"Conditions Summary Tool is not used. Will use temperature and voltages from job options. "
100 <<
"Effects of radiation damage may be wrong!");
107 double temperature{0.};
108 double deplVoltage{0.};
109 double biasVoltage{0.};
131 double depletionDepth{element->thickness()};
132 if (std::abs(biasVoltage) < std::abs(deplVoltage)) {
133 depletionDepth *= sqrt(std::abs(biasVoltage / deplVoltage));
140 element->thickness(),
141 std::abs(biasVoltage))};
152 double electronDriftMobility{0.};
153 double holeDriftMobility{0.};
154 double electronDriftVelocity{0.};
155 double holeDriftVelocity{0.};
164 holeDriftVelocity = holeDriftMobility*electricField;
172 double trappingHoles{0.};
179 const double meanFreePathElectrons{electronDriftVelocity*trappingElectrons};
182 double meanFreePathHoles{0.};
184 meanFreePathHoles = holeDriftVelocity*trappingHoles;
189 double trappingProbability_electron{0.0};
190 double trappingProbability_hole{0.0};
191 double trappingProbability{0.0};
193 trappingProbability = 1.0 -
std::exp(-std::abs(
pos/meanFreePathElectrons));
194 trappingProbability_electron = trappingProbability;
197 trappingProbability = 1.0 -
std::exp(-std::abs(
pos/meanFreePathHoles));
198 trappingProbability_hole = trappingProbability;
200 trappingProbability = 0.0;
206 const double u{CLHEP::RandFlat::shoot(0., 1.)};
207 const double drift_time{-
std::log(
u)*trappingHoles};
211 const double t_electrode_hole{
pos/holeDriftVelocity};
215 const double trappingPosition_hole{holeDriftVelocity*drift_time};
227 ATH_MSG_VERBOSE(
"Electron drift velocity (cm/s): " << electronDriftVelocity);
229 ATH_MSG_VERBOSE(
"Electron trapping probability: " << trappingProbability_electron);
235 ATH_MSG_VERBOSE(
"Hole trapping probability: " << trappingProbability_hole);
◆ finalize()
StatusCode SCT_ChargeTrappingTool::finalize |
( |
| ) |
|
|
overridevirtual |
◆ getCondData() [1/2]
◆ getCondData() [2/2]
◆ getDetectorElement()
Definition at line 334 of file SCT_ChargeTrappingTool.cxx.
336 if (not condData.isValid())
return nullptr;
337 return condData->getDetectorElement(waferHash);
◆ getHoleTransport() [1/2]
void SCT_ChargeTrappingTool::getHoleTransport |
( |
double & |
x0, |
|
|
double & |
y0, |
|
|
double & |
xfin, |
|
|
double & |
yfin, |
|
|
double & |
Q_m2, |
|
|
double & |
Q_m1, |
|
|
double & |
Q_00, |
|
|
double & |
Q_p1, |
|
|
double & |
Q_p2 |
|
) |
| const |
|
overridevirtual |
◆ getHoleTransport() [2/2]
void SCT_ChargeTrappingTool::getHoleTransport |
( |
double & |
x0, |
|
|
double & |
y0, |
|
|
double & |
xfin, |
|
|
double & |
yfin, |
|
|
double & |
Q_m2, |
|
|
double & |
Q_m1, |
|
|
double & |
Q_00, |
|
|
double & |
Q_p1, |
|
|
double & |
Q_p2, |
|
|
const EventContext & |
ctx |
|
) |
| const |
|
overridevirtual |
◆ getPotentialValue()
double SCT_ChargeTrappingTool::getPotentialValue |
( |
int & |
ix, |
|
|
int & |
iy |
|
) |
| |
|
staticprivate |
◆ holeTransport()
void SCT_ChargeTrappingTool::holeTransport |
( |
double & |
x0, |
|
|
double & |
y0, |
|
|
double & |
xfin, |
|
|
double & |
yfin, |
|
|
double & |
Q_m2, |
|
|
double & |
Q_m1, |
|
|
double & |
Q_00, |
|
|
double & |
Q_p1, |
|
|
double & |
Q_p2 |
|
) |
| const |
|
private |
Definition at line 285 of file SCT_ChargeTrappingTool.cxx.
303 for (
int istrip{-2}; istrip < 3 ; istrip++) {
304 qstrip[istrip+2] =
induced(istrip,
x,
y);
306 ATH_MSG_DEBUG(
"h:qstrip=" << qstrip[0] <<
" " << qstrip[1] <<
" " << qstrip[2] <<
" " << qstrip[3] <<
" " << qstrip[4]);
309 for (
int istrip{-2}; istrip < 3 ; istrip++) {
312 const double qnew{
induced(istrip,
x,
y)};
314 const double dq{qnew - qstrip[jj]};
318 case -2: Q_m2 +=
dq ;
break;
319 case -1: Q_m1 +=
dq ;
break;
320 case 0: Q_00 +=
dq ;
break;
321 case +1: Q_p1 +=
dq ;
break;
322 case +2: Q_p2 +=
dq ;
break;
326 ATH_MSG_DEBUG(
"h:qstrip=" << qstrip[0] <<
" " << qstrip[1] <<
" " << qstrip[2] <<
" " << qstrip[3] <<
" " << qstrip[4]);
◆ induced()
double SCT_ChargeTrappingTool::induced |
( |
int |
istrip, |
|
|
double |
x, |
|
|
double |
y |
|
) |
| const |
|
private |
Definition at line 250 of file SCT_ChargeTrappingTool.cxx.
254 static const double deltax{0.0005};
255 static const double deltay{0.00025};
257 static const double bulk_depth{0.0285};
258 static const double strip_pitch{0.0080};
261 if ((
y < 0.) or (
y > bulk_depth))
return 0.;
262 const double xc{strip_pitch * (istrip + 0.5)};
263 const double dx{std::abs(
x-xc)};
264 const int ix{
static_cast<int>(
dx/deltax)};
265 if (ix > 79)
return 0.;
266 const int iy{
static_cast<int>(
y/deltay)};
267 const double fx{(
dx - ix*deltax) / deltax};
268 const double fy{(
y - iy*deltay) / deltay};
269 const int ix1{ix + 1};
270 const int iy1{iy + 1};
275 ATH_MSG_DEBUG(
"induced: x,y,iy="<<
x<<
" "<<
y<<
" "<<iy<<
" istrip,xc,dx,ix="
276 <<istrip<<
" "<<xc<<
" " <<
dx<<
" "<<ix<<
" fx,fy="<<fx <<
" " <<fy<<
", P="<<
P);
◆ initialize()
StatusCode SCT_ChargeTrappingTool::initialize |
( |
| ) |
|
|
overridevirtual |
Definition at line 32 of file SCT_ChargeTrappingTool.cxx.
36 return StatusCode::FAILURE;
55 for (
int ix{0}; ix<81; ix++) {
56 for (
int iy{0}; iy<115; iy++) {
61 return StatusCode::SUCCESS;
◆ m_betaElectrons
DoubleProperty SCT_ChargeTrappingTool::m_betaElectrons {this, "BetaElectrons", 3.1E-16, "Constant for the trapping model for electrons, in [cm^2/ns] -- average value from Table 2 in ATL-INDET-2003-014"} |
|
private |
◆ m_betaHoles
DoubleProperty SCT_ChargeTrappingTool::m_betaHoles {this, "BetaHoles", 5.1E-16, "Constant for the trapping model for holes in [cm^2/ns] -- average value from Table 2 in ATL-INDET-2003-014"} |
|
private |
◆ m_biasVoltage
DoubleProperty SCT_ChargeTrappingTool::m_biasVoltage {this, "BiasVoltage", 150., "Default bias voltage in Volt."} |
|
private |
◆ m_calcHoles
BooleanProperty SCT_ChargeTrappingTool::m_calcHoles {this, "CalcHoles", true, "Default is to consider holes in signal formation."} |
|
private |
◆ m_conditionsToolValid
bool SCT_ChargeTrappingTool::m_conditionsToolValid {false} |
|
private |
◆ m_conditionsToolWarning
std::atomic_bool SCT_ChargeTrappingTool::m_conditionsToolWarning {false} |
|
mutableprivate |
◆ m_deplVoltage
DoubleProperty SCT_ChargeTrappingTool::m_deplVoltage {this, "DepletionVoltage", -30., "Default depletion voltage in Volt."} |
|
private |
◆ m_detectorName
StringProperty SCT_ChargeTrappingTool::m_detectorName {this, "DetectorName", "SCT", "Detector name"} |
|
private |
◆ m_electricFieldTool
◆ m_fluence
DoubleProperty SCT_ChargeTrappingTool::m_fluence {this, "Fluence", 3.0E13, "Fluence received by the detector."} |
|
private |
◆ m_isSCT
bool SCT_ChargeTrappingTool::m_isSCT {false} |
|
private |
◆ m_PotentialValue
double SCT_ChargeTrappingTool::m_PotentialValue[81][115] {{0.}} |
|
private |
◆ m_SCTDetEleCollKey
◆ m_siConditionsTool
◆ m_temperature
DoubleProperty SCT_ChargeTrappingTool::m_temperature {this, "Temperature", -2., "Default temperature in Celcius."} |
|
private |
◆ m_temperatureMax
DoubleProperty SCT_ChargeTrappingTool::m_temperatureMax {this, "TemperatureMax", 100., "Maximum temperature allowed in Celcius."} |
|
private |
◆ m_temperatureMin
DoubleProperty SCT_ChargeTrappingTool::m_temperatureMin {this, "TemperatureMin", -80., "Minimum temperature allowed in Celcius."} |
|
private |
The documentation for this class was generated from the following files:
void setTrappingTime(const double trappingTime)
void setTrappingElectrons(const double trappingElectrons)
double getPotentialValue(const int ix, const int iy)
A free function to return the SCT electric field potential internal to the silicon on a 81 * 115 arra...
Data object for SCT_ChargeTrappingTool, SCT_RadDamageSummaryTool, SCT_SurfaceChargesGenerator.
void setTrappingHoles(const double trappingHoles)
void setMeanFreePathHoles(const double meanFreePathHoles)
#define ATH_MSG_VERBOSE(x)
void setElectricField(const double electricField)
@ u
Enums for curvilinear frames.
void setMeanFreePathElectrons(const double meanFreePathElectrons)
double getMeanFreePathElectrons() const
double calcHoleDriftMobility(double temperature, double electricField) const
StatusCode initialize(bool used=true)
void setTrappingProbability(const double trappingProbability)
double getMeanFreePathHoles() const
#define ATH_MSG_WARNING(x)
void setTimeToElectrode(const double electrodeTime)
void setHoleDriftMobility(const double holeDriftMobility)
void setTrappingPositionZ(const double trappingPosition)
void setConditions(double temperature, double electricField)