|  | 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 *= std::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)