ATLAS Offline Software
VMM_Shaper.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef MM_DIGITIZATION_VMM_SHAPER_H
6 #define MM_DIGITIZATION_VMM_SHAPER_H
7 
8 #include <vector>
9 
10 class VMM_Shaper {
11 public:
12  VMM_Shaper(const float peakTime, const float lowerTimeWindow, const float upperTimeWindow);
13  virtual ~VMM_Shaper() = default;
14 
15  void initialize();
16 
17  bool vmmPeakResponse(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime,
18  const double electronicsThreshold, double &amplitudeFirstPeak, double &timeFirstPeak) const;
19  bool vmmThresholdResponse(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime,
20  const double electronicsThreshold, double &amplitudeAtFirstPeak, double &timeAtThreshold) const;
21 
22  bool hasChargeAboveThreshold(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime,
23  const double electronicsThreshold) const;
24 
25 private:
26  double m_peakTime{0.};
27  double m_lowerTimeWindow{0.};
28  double m_upperTimeWindow{0.};
29 
30  double m_timeStep{0.};
31  double m_inverseTimeStep{0.};
32 
34  // shaper parameters
35  double m_a{0.};
36  double m_pole0{0.};
37  double m_re_pole1{0.};
38  double m_im_pole1{0.};
39  double m_pole1_square{0.};
40  double m_k1_abs{0.};
41  double m_argK1{0.};
43 
44  double vmmResponse(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime, double time) const;
45  double findPeak(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime,
46  const double electronicsThreshold) const;
47  bool aboveThresholdSimple(const std::vector<float> &effectiveCharge, const std::vector<float> &electronsTime,
48  const double electronicsThreshold) const;
49  double m_pole0_ns{0.};
50  double m_re_pole1_ns{0.};
51  double m_im_pole1_ns{0.};
52 };
53 
54 #endif // MM_DIGITIZATION_VMM_SHAPER_H
VMM_Shaper
Definition: VMM_Shaper.h:10
VMM_Shaper::m_peakTimeChargeScaling
double m_peakTimeChargeScaling
Definition: VMM_Shaper.h:42
VMM_Shaper::hasChargeAboveThreshold
bool hasChargeAboveThreshold(const std::vector< float > &effectiveCharge, const std::vector< float > &electronsTime, const double electronicsThreshold) const
Definition: VMM_Shaper.cxx:185
VMM_Shaper::aboveThresholdSimple
bool aboveThresholdSimple(const std::vector< float > &effectiveCharge, const std::vector< float > &electronsTime, const double electronicsThreshold) const
Definition: VMM_Shaper.cxx:204
VMM_Shaper::vmmResponse
double vmmResponse(const std::vector< float > &effectiveCharge, const std::vector< float > &electronsTime, double time) const
Definition: VMM_Shaper.cxx:49
VMM_Shaper::vmmPeakResponse
bool vmmPeakResponse(const std::vector< float > &effectiveCharge, const std::vector< float > &electronsTime, const double electronicsThreshold, double &amplitudeFirstPeak, double &timeFirstPeak) const
Definition: VMM_Shaper.cxx:64
VMM_Shaper::m_inverseTimeStep
double m_inverseTimeStep
Definition: VMM_Shaper.h:31
VMM_Shaper::vmmThresholdResponse
bool vmmThresholdResponse(const std::vector< float > &effectiveCharge, const std::vector< float > &electronsTime, const double electronicsThreshold, double &amplitudeAtFirstPeak, double &timeAtThreshold) const
Definition: VMM_Shaper.cxx:75
VMM_Shaper::m_pole1_square
double m_pole1_square
Definition: VMM_Shaper.h:39
VMM_Shaper::m_peakTime
double m_peakTime
Definition: VMM_Shaper.h:26
VMM_Shaper::m_upperTimeWindow
double m_upperTimeWindow
Definition: VMM_Shaper.h:28
VMM_Shaper::m_im_pole1
double m_im_pole1
Definition: VMM_Shaper.h:38
VMM_Shaper::m_re_pole1
double m_re_pole1
Definition: VMM_Shaper.h:37
VMM_Shaper::m_preCalculationVMMShaper
double m_preCalculationVMMShaper
Definition: VMM_Shaper.h:33
VMM_Shaper::m_a
double m_a
Definition: VMM_Shaper.h:35
VMM_Shaper::m_re_pole1_ns
double m_re_pole1_ns
Definition: VMM_Shaper.h:50
VMM_Shaper::m_timeStep
double m_timeStep
Definition: VMM_Shaper.h:30
VMM_Shaper::m_im_pole1_ns
double m_im_pole1_ns
Definition: VMM_Shaper.h:51
VMM_Shaper::VMM_Shaper
VMM_Shaper(const float peakTime, const float lowerTimeWindow, const float upperTimeWindow)
Definition: VMM_Shaper.cxx:21
VMM_Shaper::m_pole0
double m_pole0
Definition: VMM_Shaper.h:36
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
VMM_Shaper::m_k1_abs
double m_k1_abs
Definition: VMM_Shaper.h:40
VMM_Shaper::m_argK1
double m_argK1
Definition: VMM_Shaper.h:41
VMM_Shaper::m_pole0_ns
double m_pole0_ns
Definition: VMM_Shaper.h:49
VMM_Shaper::findPeak
double findPeak(const std::vector< float > &effectiveCharge, const std::vector< float > &electronsTime, const double electronicsThreshold) const
Definition: VMM_Shaper.cxx:122
VMM_Shaper::~VMM_Shaper
virtual ~VMM_Shaper()=default
VMM_Shaper::initialize
void initialize()
Definition: VMM_Shaper.cxx:27
VMM_Shaper::m_lowerTimeWindow
double m_lowerTimeWindow
Definition: VMM_Shaper.h:27