ATLAS Offline Software
EfieldInterpolator.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3  */
16 #ifndef PIXELDIGITIZATION_EFIELDINTERPOLATOR_H
17 #define PIXELDIGITIZATION_EFIELDINTERPOLATOR_H
18 
20 #include <vector>
21 
22 class TH1;
23 class TH1D;
24 class TString;
25 
26 // Different options to retrieve E field
27 // default: interspline
29  TCAD, //use Precomputed TCAD map
30  interspline, //use interpolation based on cubic splines
31  interinvdist, //use inverse distance weighted estimate
32  linearField //linear field according to bias voltage
33 };
34 
36 public:
37  EfieldInterpolator(const std::string& type, const std::string& name, const IInterface* parent);
39  void setLayer(int layer);
40  //Recommended constructor
41  StatusCode loadTCADlist(const std::string& TCADfileListToLoad);
42  //defFct
43 
44  virtual StatusCode initialize() override;
45  virtual StatusCode finalize() override;
46 
47  // Member Functions
48  const std::string loadTCADfiles(const std::string& targetList = "");
49  const std::string createInterpolationFromTCADtree(const std::string& fTCAD);//TTree* tTCAD);
50  bool initializeFromFile(const std::string& finpath);
51  bool initializeFromDirectory(const std::string& fpath);
52  double estimateEfield(std::vector<double> vvol, const std::vector<double>& vflu, const std::vector<std::vector<double> >& vfluvvol,
53  double aimFlu, double aimVol, const std::string& prepend = "", bool debug = false);
54  double estimateEfieldInvDistance(const std::vector<double> & vvol, const std::vector<double> & vflu,
55  const std::vector<std::vector<double> > & vfluvvol, double aimFlu, double aimVol,
56  double measure = 1.);
57 
58  TH1D* createEfieldProfile(double aimFluence, double aimVoltage);
59  TH1D* getEfield(double aimFluence, double aimVoltage);
60  TH1D* loadEfieldFromDat(const std::string& fname, bool fillEdges = true);
61  static void scaleIntegralTo(TH1* hin, double aimInt, int first = 1, int last = -1);
62  void reliabilityCheck(double aimFluence, const std::vector<double>& fluences, double aimVoltage,
63  const std::vector<double>& voltages);
64 private:
65  // Member variables
66  Gaudi::Property<bool> m_initialized
67  {
68  this, "initialized", false, "Flag whether already initalized"
69  };
70 
71  Gaudi::Property<bool> m_useSpline
72  {
73  this, "useSpline", true, "Flag whether to use cubic splines for interpolation"
74  };
75 
76  Gaudi::Property<int> m_sensorDepth
77  {
78  this, "sensorDepth", 200, "Depth of E fields in sensors in um"
79  };
80 
82  TH1D* m_efieldProfile{}; //Final efield profile
83  std::string m_fInter; //path to .root file for saving interpolation TTree, i.e. ordered by pixeldepth z
84  std::vector<std::vector<TString> > list_files(const TString& fileList_TCADsamples);
85  static double extrapolateLinear(double x1, double y1, double x2, double y2, double xaim);
86  int fillXYvectors(std::vector<double> vLoop, int ifix, const std::vector<std::vector<double> > & v2vsv1,
87  std::vector<double>& xx, std::vector<double>& yy, bool regularOrder = true);
88  void fillEdgeValues(TH1D* hin);
89  bool isInterpolation(const std::vector<double>& vval, double aimval)
90  {return(vval.front() <= aimval && aimval <= vval.back());};
91  bool isInterpolation(std::vector<double>* vval, double aimval)
92  {return(vval->front() <= aimval && aimval <= vval->back());};
93  static double relativeDistance(double x1, double x2); //difference between x1 x2 scaled to x1
94  static double relativeDistance(double x1, double y1, double x2, double y2);
95  double estimateEfieldLinear(double aimVoltage);
96  void saveTGraph(std::vector<double> vvol, std::vector<double> vflu, std::vector<std::vector<double> > vfluvvol,
97  double aimFlu, double aimVol, const std::string& prepend, bool skipNegative = true);
98 };
99 
100 #endif //> !PIXELDIGITIZATION_EFIELDINTERPOLATOR_H
EfieldInterpolator::scaleIntegralTo
static void scaleIntegralTo(TH1 *hin, double aimInt, int first=1, int last=-1)
Definition: EfieldInterpolator.cxx:221
TCAD
@ TCAD
Definition: EfieldInterpolator.h:29
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
EfieldInterpolator::finalize
virtual StatusCode finalize() override
Definition: EfieldInterpolator.cxx:38
EfieldInterpolator::list_files
std::vector< std::vector< TString > > list_files(const TString &fileList_TCADsamples)
Definition: EfieldInterpolator.cxx:334
EfieldInterpolator::m_efieldOrigin
interpolationMethod m_efieldOrigin
Definition: EfieldInterpolator.h:81
interinvdist
@ interinvdist
Definition: EfieldInterpolator.h:31
PlotCalibFromCool.yy
yy
Definition: PlotCalibFromCool.py:714
EfieldInterpolator::EfieldInterpolator
EfieldInterpolator(const std::string &type, const std::string &name, const IInterface *parent)
Definition: EfieldInterpolator.cxx:27
EfieldInterpolator::loadTCADfiles
const std::string loadTCADfiles(const std::string &targetList="")
Definition: EfieldInterpolator.cxx:270
EfieldInterpolator::estimateEfieldInvDistance
double estimateEfieldInvDistance(const std::vector< double > &vvol, const std::vector< double > &vflu, const std::vector< std::vector< double > > &vfluvvol, double aimFlu, double aimVol, double measure=1.)
Definition: EfieldInterpolator.cxx:526
EfieldInterpolator::fillXYvectors
int fillXYvectors(std::vector< double > vLoop, int ifix, const std::vector< std::vector< double > > &v2vsv1, std::vector< double > &xx, std::vector< double > &yy, bool regularOrder=true)
Definition: EfieldInterpolator.cxx:487
EfieldInterpolator::initializeFromDirectory
bool initializeFromDirectory(const std::string &fpath)
Definition: EfieldInterpolator.cxx:93
plotBeamSpotCompare.x2
x2
Definition: plotBeamSpotCompare.py:218
EfieldInterpolator::isInterpolation
bool isInterpolation(const std::vector< double > &vval, double aimval)
Definition: EfieldInterpolator.h:89
EfieldInterpolator
Definition: EfieldInterpolator.h:35
TH1D
Definition: rootspy.cxx:342
EfieldInterpolator::~EfieldInterpolator
virtual ~EfieldInterpolator()
EfieldInterpolator::m_sensorDepth
Gaudi::Property< int > m_sensorDepth
Definition: EfieldInterpolator.h:77
EfieldInterpolator::m_fInter
std::string m_fInter
Definition: EfieldInterpolator.h:83
EfieldInterpolator::m_efieldProfile
TH1D * m_efieldProfile
Definition: EfieldInterpolator.h:82
makeTRTBarrelCans.y1
tuple y1
Definition: makeTRTBarrelCans.py:15
EfieldInterpolator::saveTGraph
void saveTGraph(std::vector< double > vvol, std::vector< double > vflu, std::vector< std::vector< double > > vfluvvol, double aimFlu, double aimVol, const std::string &prepend, bool skipNegative=true)
Definition: EfieldInterpolator.cxx:646
EfieldInterpolator::createInterpolationFromTCADtree
const std::string createInterpolationFromTCADtree(const std::string &fTCAD)
Definition: EfieldInterpolator.cxx:364
linearField
@ linearField
Definition: EfieldInterpolator.h:32
EfieldInterpolator::estimateEfieldLinear
double estimateEfieldLinear(double aimVoltage)
Definition: EfieldInterpolator.cxx:521
EfieldInterpolator::setLayer
void setLayer(int layer)
Definition: EfieldInterpolator.cxx:66
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
makeTRTBarrelCans.y2
tuple y2
Definition: makeTRTBarrelCans.py:18
AthAlgTool.h
test_pyathena.parent
parent
Definition: test_pyathena.py:15
EfieldInterpolator::estimateEfield
double estimateEfield(std::vector< double > vvol, const std::vector< double > &vflu, const std::vector< std::vector< double > > &vfluvvol, double aimFlu, double aimVol, const std::string &prepend="", bool debug=false)
Definition: EfieldInterpolator.cxx:551
interpolationMethod
interpolationMethod
Definition: EfieldInterpolator.h:28
interspline
@ interspline
Definition: EfieldInterpolator.h:30
EfieldInterpolator::extrapolateLinear
static double extrapolateLinear(double x1, double y1, double x2, double y2, double xaim)
Definition: EfieldInterpolator.cxx:236
EfieldInterpolator::m_useSpline
Gaudi::Property< bool > m_useSpline
Definition: EfieldInterpolator.h:72
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
EfieldInterpolator::relativeDistance
static double relativeDistance(double x1, double x2)
Definition: EfieldInterpolator.cxx:225
debug
const bool debug
Definition: MakeUncertaintyPlots.cxx:53
EfieldInterpolator::createEfieldProfile
TH1D * createEfieldProfile(double aimFluence, double aimVoltage)
Definition: EfieldInterpolator.cxx:678
EfieldInterpolator::reliabilityCheck
void reliabilityCheck(double aimFluence, const std::vector< double > &fluences, double aimVoltage, const std::vector< double > &voltages)
Definition: EfieldInterpolator.cxx:193
python.AthDsoLogger.fname
string fname
Definition: AthDsoLogger.py:67
EfieldInterpolator::isInterpolation
bool isInterpolation(std::vector< double > *vval, double aimval)
Definition: EfieldInterpolator.h:91
EfieldInterpolator::initialize
virtual StatusCode initialize() override
Definition: EfieldInterpolator.cxx:33
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
TH1
Definition: rootspy.cxx:268
DeMoScan.first
bool first
Definition: DeMoScan.py:534
EfieldInterpolator::loadEfieldFromDat
TH1D * loadEfieldFromDat(const std::string &fname, bool fillEdges=true)
Definition: EfieldInterpolator.cxx:249
EfieldInterpolator::getEfield
TH1D * getEfield(double aimFluence, double aimVoltage)
Definition: EfieldInterpolator.cxx:825
EfieldInterpolator::m_initialized
Gaudi::Property< bool > m_initialized
Definition: EfieldInterpolator.h:67
AthAlgTool
Definition: AthAlgTool.h:26
EfieldInterpolator::fillEdgeValues
void fillEdgeValues(TH1D *hin)
Definition: EfieldInterpolator.cxx:781
EfieldInterpolator::initializeFromFile
bool initializeFromFile(const std::string &finpath)
Definition: EfieldInterpolator.cxx:162
EfieldInterpolator::loadTCADlist
StatusCode loadTCADlist(const std::string &TCADfileListToLoad)
Definition: EfieldInterpolator.cxx:78