ATLAS Offline Software
RadDamageUtil.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3  */
11 #ifndef PIXELDIGITIZATION_RADDAMAGEUTIL_H
12 #define PIXELDIGITIZATION_RADDAMAGEUTIL_H
13 
15 #include "GaudiKernel/ToolHandle.h"
16 #include "Gaudi/Property.h"
17 
18 
19 #include "EfieldInterpolator.h" //ToolHandle template argument
20 #include <utility> // for std::pair
21 namespace InDetDD{
22  class PixelModuleDesign;
23 }
24 
25 class TH3F;
26 class TH2F;
27 class TH1F;
28 
29 //====================
30 // C L A S S D E F
31 //====================
32 class RadDamageUtil: public AthAlgTool {
33 public:
34  RadDamageUtil(const std::string& type, const std::string& name, const IInterface* parent);
35 
36  virtual StatusCode initialize() override;
37  virtual StatusCode finalize() override;
38 
39  virtual ~RadDamageUtil();
41  const StatusCode generateRamoMap(TH3F* ramPotentialMap, InDetDD::PixelModuleDesign* module);
43  StatusCode generateEfieldMap(TH1F*& eFieldMap, InDetDD::PixelModuleDesign* module, double fluence, double biasVoltage,
44  int layer, const std::string& TCAD_list, bool interpolate);
45  const StatusCode generateDistanceTimeMap(TH2F*& distanceMap_e, TH2F*& distanceMap_h, TH1F*& timeMap_e,
46  TH1F*& timeMap_h, TH2F*& lorentzMap_e, TH2F*& lorentzMap_h, TH1F*& eFieldMap,
48 
49  const std::pair<double, double> getTrappingTimes(double fluence) const;
50  static const std::pair<double, double> getMobility(double electricField, double temperature) ;
51  static double getTanLorentzAngle(double electricField, double temperature, double bField, bool isHole) ;
52 
53  bool saveDebugMaps();
54 private:
56 
57  Gaudi::Property<int> m_defaultRamo
58  {
59  this, "defaultRamo", 1, "Mapping strategy of Ramo potential"
60  };
61 
62  Gaudi::Property<double> m_betaElectrons
63  {
64  this, "betaElectrons", 4.5e-16, "Used in trapping time calculation"
65  };
66 
67  Gaudi::Property<double> m_betaHoles
68  {
69  this, "betaHoles", 6.0e-16, "Used in trapping time calculation"
70  };
71 
72  Gaudi::Property<bool> m_saveDebugMaps
73  {
74  this, "saveDebugMaps", false, "Flag to save map"
75  };
76 
77  Gaudi::Property<double> m_fieldScale{this, "fieldScale", 1.};
78 
79  static double alpha(int n, int Nrep, double a); //Poisson solution factor
80  static double weighting3D(double x, double y, double z, int n, int m, int Nrep, double a, double b);
81  static double weighting2D(double x, double z, double Lx, double sensorThickness);
82 
83  ToolHandle<EfieldInterpolator> m_EfieldInterpolator
84  {
85  this, "EfieldInterpolator", "EfieldInterpolator",
86  "Create an Efield for fluence and bias volatge of interest based on TCAD samples"
87  };
88 };
89 
90 #endif //PIXELDIGITIZATION_RADDAMAGEUTIL_H
EfieldInterpolator.h
Instances of this class create a map (TH1D) describing the electric field profile along the pixeldept...
RadDamageUtil::saveDebugMaps
bool saveDebugMaps()
Definition: RadDamageUtil.cxx:453
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
RadDamageUtil::generateRamoMap
const StatusCode generateRamoMap(TH3F *ramPotentialMap, InDetDD::PixelModuleDesign *module)
Definition: RadDamageUtil.cxx:58
InDetDD::PixelModuleDesign
Definition: PixelModuleDesign.h:48
RadDamageUtil::initialize
virtual StatusCode initialize() override
Definition: RadDamageUtil.cxx:44
RadDamageUtil::getTanLorentzAngle
static double getTanLorentzAngle(double electricField, double temperature, double bField, bool isHole)
Definition: RadDamageUtil.cxx:424
python.TrigEgammaMonitorHelper.TH2F
def TH2F(name, title, nxbins, bins_par2, bins_par3, bins_par4, bins_par5=None, bins_par6=None, path='', **kwargs)
Definition: TrigEgammaMonitorHelper.py:45
x
#define x
RadDamageUtil::~RadDamageUtil
virtual ~RadDamageUtil()
python.PyAthena.module
module
Definition: PyAthena.py:131
RadDamageUtil::generateEfieldMap
const StatusCode generateEfieldMap(TH1F *&eFieldMap, InDetDD::PixelModuleDesign *module)
Definition: RadDamageUtil.cxx:214
RadDamageUtil::RadDamageUtil
RadDamageUtil()
z
#define z
beamspotman.n
n
Definition: beamspotman.py:731
RadDamageUtil::getMobility
static const std::pair< double, double > getMobility(double electricField, double temperature)
Definition: RadDamageUtil.cxx:392
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
RadDamageUtil::m_fieldScale
Gaudi::Property< double > m_fieldScale
Definition: RadDamageUtil.h:77
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
RadDamageUtil::m_betaElectrons
Gaudi::Property< double > m_betaElectrons
Definition: RadDamageUtil.h:63
AthAlgTool.h
RadDamageUtil
Definition: RadDamageUtil.h:32
test_pyathena.parent
parent
Definition: test_pyathena.py:15
RadDamageUtil::m_defaultRamo
Gaudi::Property< int > m_defaultRamo
Definition: RadDamageUtil.h:58
RadDamageUtil::weighting2D
static double weighting2D(double x, double z, double Lx, double sensorThickness)
Definition: RadDamageUtil.cxx:195
RadDamageUtil::generateDistanceTimeMap
const StatusCode generateDistanceTimeMap(TH2F *&distanceMap_e, TH2F *&distanceMap_h, TH1F *&timeMap_e, TH1F *&timeMap_h, TH2F *&lorentzMap_e, TH2F *&lorentzMap_h, TH1F *&eFieldMap, InDetDD::PixelModuleDesign *module)
Definition: RadDamageUtil.cxx:283
RadDamageUtil::m_saveDebugMaps
Gaudi::Property< bool > m_saveDebugMaps
Definition: RadDamageUtil.h:73
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
RadDamageUtil::initTools
StatusCode initTools()
RadDamageUtil::weighting3D
static double weighting3D(double x, double y, double z, int n, int m, int Nrep, double a, double b)
Definition: RadDamageUtil.cxx:155
RadDamageUtil::finalize
virtual StatusCode finalize() override
Definition: RadDamageUtil.cxx:460
a
TList * a
Definition: liststreamerinfos.cxx:10
y
#define y
InDetDD
Message Stream Member.
Definition: FakeTrackBuilder.h:8
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
CaloClusterCorr::interpolate
float interpolate(const CaloRec::Array< 2 > &a, float x, unsigned int degree, unsigned int ycol=1, const CaloRec::Array< 1 > &regions=CaloRec::Array< 1 >(), int n_points=-1, bool fixZero=false)
Polynomial interpolation in a table.
Definition: interpolate.cxx:75
RadDamageUtil::alpha
static double alpha(int n, int Nrep, double a)
Definition: RadDamageUtil.cxx:146
python.TrigEgammaMonitorHelper.TH1F
def TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)
Definition: TrigEgammaMonitorHelper.py:24
RadDamageUtil::m_betaHoles
Gaudi::Property< double > m_betaHoles
Definition: RadDamageUtil.h:68
AthAlgTool
Definition: AthAlgTool.h:26
RadDamageUtil::m_EfieldInterpolator
ToolHandle< EfieldInterpolator > m_EfieldInterpolator
Definition: RadDamageUtil.h:84
RadDamageUtil::getTrappingTimes
const std::pair< double, double > getTrappingTimes(double fluence) const
Definition: RadDamageUtil.cxx:439