CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Static Public Attributes | Protected Member Functions | Private Member Functions | Private Attributes
MTDShapeBase Class Referenceabstract

#include <MTDShapeBase.h>

Inheritance diagram for MTDShapeBase:
CaloVShape BTLPulseShape

Public Types

typedef std::vector< double > DVec
 

Public Member Functions

unsigned int indexOfMax () const
 
 MTDShapeBase ()
 
double operator() (double aTime) const override
 
std::array< float, 3 > timeAtThr (const float scale, const float threshold1, const float threshold2) const
 
double timeOfMax () const
 
double timeToRise () const override
 
 ~MTDShapeBase () override
 
- Public Member Functions inherited from CaloVShape
 CaloVShape ()
 
virtual ~CaloVShape ()
 

Static Public Attributes

static constexpr unsigned int k1NSecBinsTotal = kReadoutTimeInterval * kNBinsPerNSec
 
static constexpr unsigned int kNBinsPerNSec = 100
 
static constexpr unsigned int kReadoutTimeInterval = 28
 

Protected Member Functions

void buildMe ()
 
virtual void fillShape (DVec &aVec) const =0
 
unsigned int timeIndex (double aTime) const
 

Private Member Functions

double linear_interpolation (const double &y, const double &x1, const double &x2, const double &y1, const double &y2) const
 

Private Attributes

unsigned int indexOfMax_
 
const double qNSecPerBin_
 
DVec shape_
 
double timeOfMax_
 

Detailed Description

Definition at line 9 of file MTDShapeBase.h.

Member Typedef Documentation

◆ DVec

typedef std::vector<double> MTDShapeBase::DVec

Definition at line 11 of file MTDShapeBase.h.

Constructor & Destructor Documentation

◆ MTDShapeBase()

MTDShapeBase::MTDShapeBase ( )

Definition at line 6 of file MTDShapeBase.cc.

◆ ~MTDShapeBase()

MTDShapeBase::~MTDShapeBase ( )
override

Definition at line 4 of file MTDShapeBase.cc.

4 {}

Member Function Documentation

◆ buildMe()

void MTDShapeBase::buildMe ( )
protected

Definition at line 73 of file MTDShapeBase.cc.

73  {
74  // --- Fill the vector with the pulse shape
76 
77  // --- Find the index of maximum
78  for (unsigned int i = 0; i < shape_.size(); ++i) {
79  if (shape_[indexOfMax_] < shape_[i])
80  indexOfMax_ = i;
81  }
82 
83  if (indexOfMax_ != 0)
85 }

References fillShape(), mps_fire::i, indexOfMax_, qNSecPerBin_, shape_, and timeOfMax_.

Referenced by BTLPulseShape::BTLPulseShape().

◆ fillShape()

virtual void MTDShapeBase::fillShape ( DVec aVec) const
protectedpure virtual

Implemented in BTLPulseShape.

Referenced by buildMe().

◆ indexOfMax()

unsigned int MTDShapeBase::indexOfMax ( ) const

Definition at line 69 of file MTDShapeBase.cc.

69 { return indexOfMax_; }

References indexOfMax_.

◆ linear_interpolation()

double MTDShapeBase::linear_interpolation ( const double &  y,
const double &  x1,
const double &  x2,
const double &  y1,
const double &  y2 
) const
private

Definition at line 104 of file MTDShapeBase.cc.

105  {
106  if (x1 == x2)
107  throw cms::Exception("BadValue") << " MTDShapeBase: Trying to interpolate two points with the same x coordinate!";
108 
109  double a = (y2 - y1) / (x2 - x1);
110  double b = y1 - a * x1;
111 
112  return (y - b) / a;
113 }

References a, b, Exception, testProducerWithPsetDescEmpty_cfi::x1, testProducerWithPsetDescEmpty_cfi::x2, y, testProducerWithPsetDescEmpty_cfi::y1, and testProducerWithPsetDescEmpty_cfi::y2.

Referenced by timeAtThr().

◆ operator()()

double MTDShapeBase::operator() ( double  aTime) const
overridevirtual

Implements CaloVShape.

Definition at line 98 of file MTDShapeBase.cc.

98  {
99  // return pulse amplitude for request time in ns
100  const unsigned int index(timeIndex(aTime));
101  return (k1NSecBinsTotal == index ? 0 : shape_[index]);
102 }

References k1NSecBinsTotal, shape_, and timeIndex().

◆ timeAtThr()

std::array< float, 3 > MTDShapeBase::timeAtThr ( const float  scale,
const float  threshold1,
const float  threshold2 
) const

Definition at line 9 of file MTDShapeBase.cc.

9  {
10  std::array<float, 3> times_tmp = {{0., 0., 0.}};
11 
12  // --- Check if the pulse amplitude is greater than threshold 2
13  if (shape_[indexOfMax_] * scale < threshold2)
14  return times_tmp;
15 
16  // --- Find the times corresponding to thresholds 1 and 2 on the pulse leading edge
17  // NB: To speed up the search we loop only on the rising edge
18  unsigned int index_LT1 = 0;
19  unsigned int index_LT2 = 0;
20 
21  for (unsigned int i = 0; i < indexOfMax_; ++i) {
22  float amplitude = shape_[i] * scale;
23 
24  if (amplitude > threshold1 && index_LT1 == 0)
25  index_LT1 = i;
26 
27  if (amplitude > threshold2 && index_LT2 == 0) {
28  index_LT2 = i;
29  break;
30  }
31  }
32 
33  // --- Find the time corresponding to thresholds 1 on the pulse falling edge
34  unsigned int index_FT1 = 0;
35 
36  for (unsigned int i = shape_.size() - 1; i > indexOfMax_; i--) {
37  float amplitude = shape_[i] * scale;
38 
39  if (amplitude > threshold1 && index_FT1 == 0) {
40  index_FT1 = i + 1;
41  break;
42  }
43  }
44 
45  if (index_LT1 != 0)
46  times_tmp[0] = linear_interpolation(threshold1,
47  (index_LT1 - 1) * qNSecPerBin_,
48  index_LT1 * qNSecPerBin_,
49  shape_[index_LT1 - 1] * scale,
50  shape_[index_LT1] * scale);
51 
52  if (index_LT2 != 0)
53  times_tmp[1] = linear_interpolation(threshold2,
54  (index_LT2 - 1) * qNSecPerBin_,
55  index_LT2 * qNSecPerBin_,
56  shape_[index_LT2 - 1] * scale,
57  shape_[index_LT2] * scale);
58 
59  if (index_FT1 != 0)
60  times_tmp[2] = linear_interpolation(threshold1,
61  (index_FT1 - 1) * qNSecPerBin_,
62  index_FT1 * qNSecPerBin_,
63  shape_[index_FT1 - 1] * scale,
64  shape_[index_FT1] * scale);
65 
66  return times_tmp;
67 }

References CustomPhysics_cfi::amplitude, mps_fire::i, indexOfMax_, linear_interpolation(), qNSecPerBin_, L1EGammaCrystalsEmulatorProducer_cfi::scale, and shape_.

Referenced by BTLElectronicsSim::run().

◆ timeIndex()

unsigned int MTDShapeBase::timeIndex ( double  aTime) const
protected

Definition at line 87 of file MTDShapeBase.cc.

87  {
88  const unsigned int index = aTime * kNBinsPerNSec;
89 
90  const bool bad = (k1NSecBinsTotal <= index);
91 
92  if (bad)
93  LogDebug("MTDShapeBase") << " MTD pulse shape requested for out of range time " << aTime;
94 
95  return (bad ? k1NSecBinsTotal : index);
96 }

References k1NSecBinsTotal, kNBinsPerNSec, and LogDebug.

Referenced by operator()().

◆ timeOfMax()

double MTDShapeBase::timeOfMax ( ) const

Definition at line 71 of file MTDShapeBase.cc.

71 { return timeOfMax_; }

References timeOfMax_.

◆ timeToRise()

double MTDShapeBase::timeToRise ( ) const
inlineoverridevirtual

Implements CaloVShape.

Definition at line 21 of file MTDShapeBase.h.

21 { return 0.; }

Member Data Documentation

◆ indexOfMax_

unsigned int MTDShapeBase::indexOfMax_
private

Definition at line 41 of file MTDShapeBase.h.

Referenced by buildMe(), indexOfMax(), and timeAtThr().

◆ k1NSecBinsTotal

constexpr unsigned int MTDShapeBase::k1NSecBinsTotal = kReadoutTimeInterval * kNBinsPerNSec
staticconstexpr

Definition at line 27 of file MTDShapeBase.h.

Referenced by operator()(), and timeIndex().

◆ kNBinsPerNSec

constexpr unsigned int MTDShapeBase::kNBinsPerNSec = 100
staticconstexpr

Definition at line 26 of file MTDShapeBase.h.

Referenced by timeIndex().

◆ kReadoutTimeInterval

constexpr unsigned int MTDShapeBase::kReadoutTimeInterval = 28
staticconstexpr

Definition at line 25 of file MTDShapeBase.h.

◆ qNSecPerBin_

const double MTDShapeBase::qNSecPerBin_
private

Definition at line 40 of file MTDShapeBase.h.

Referenced by buildMe(), and timeAtThr().

◆ shape_

DVec MTDShapeBase::shape_
private

Definition at line 43 of file MTDShapeBase.h.

Referenced by buildMe(), operator()(), and timeAtThr().

◆ timeOfMax_

double MTDShapeBase::timeOfMax_
private

Definition at line 42 of file MTDShapeBase.h.

Referenced by buildMe(), and timeOfMax().

DDAxes::y
MTDShapeBase::qNSecPerBin_
const double qNSecPerBin_
Definition: MTDShapeBase.h:40
mps_fire.i
i
Definition: mps_fire.py:428
CustomPhysics_cfi.amplitude
amplitude
Definition: CustomPhysics_cfi.py:12
L1EGammaCrystalsEmulatorProducer_cfi.scale
scale
Definition: L1EGammaCrystalsEmulatorProducer_cfi.py:10
MTDShapeBase::fillShape
virtual void fillShape(DVec &aVec) const =0
testProducerWithPsetDescEmpty_cfi.x2
x2
Definition: testProducerWithPsetDescEmpty_cfi.py:28
testProducerWithPsetDescEmpty_cfi.x1
x1
Definition: testProducerWithPsetDescEmpty_cfi.py:33
testProducerWithPsetDescEmpty_cfi.y1
y1
Definition: testProducerWithPsetDescEmpty_cfi.py:29
MTDShapeBase::DVec
std::vector< double > DVec
Definition: MTDShapeBase.h:11
MTDShapeBase::k1NSecBinsTotal
static constexpr unsigned int k1NSecBinsTotal
Definition: MTDShapeBase.h:27
b
double b
Definition: hdecay.h:118
testProducerWithPsetDescEmpty_cfi.y2
y2
Definition: testProducerWithPsetDescEmpty_cfi.py:30
MTDShapeBase::timeOfMax_
double timeOfMax_
Definition: MTDShapeBase.h:42
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:223
a
double a
Definition: hdecay.h:119
MTDShapeBase::shape_
DVec shape_
Definition: MTDShapeBase.h:43
Exception
Definition: hltDiff.cc:246
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
MTDShapeBase::kNBinsPerNSec
static constexpr unsigned int kNBinsPerNSec
Definition: MTDShapeBase.h:26
MTDShapeBase::indexOfMax_
unsigned int indexOfMax_
Definition: MTDShapeBase.h:41
MTDShapeBase::linear_interpolation
double linear_interpolation(const double &y, const double &x1, const double &x2, const double &y1, const double &y2) const
Definition: MTDShapeBase.cc:104
MTDShapeBase::timeIndex
unsigned int timeIndex(double aTime) const
Definition: MTDShapeBase.cc:87