CMS 3D CMS Logo

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

#include <EcalShapeBase.h>

Inheritance diagram for EcalShapeBase:
CaloVShape APDShape EBShape EEShape

Public Types

typedef std::vector< double > DVec
 

Public Member Functions

double derivative (double time) const
 
 EcalShapeBase (bool)
 
void m_shape_print (const char *fileName)
 
double operator() (double aTime) const override
 
void setEventSetup (const edm::EventSetup &evtSetup)
 
double threshold () const
 
double timeOfMax () const
 
double timeOfThr () const
 
double timeToRise () const override
 
 ~EcalShapeBase () override
 
- Public Member Functions inherited from CaloVShape
 CaloVShape ()
 
virtual ~CaloVShape ()
 

Protected Member Functions

void buildMe (const edm::EventSetup *=nullptr)
 
virtual void fillShape (float &time_interval, double &m_thresh, EcalShapeBase::DVec &aVec, const edm::EventSetup *es) const =0
 
unsigned int timeIndex (double aTime) const
 

Protected Attributes

bool m_useDBShape
 

Private Attributes

unsigned int m_arraySize
 
unsigned int m_denseArraySize
 
DVec m_deriv
 
unsigned int m_firstIndexOverThreshold
 
double m_firstTimeOverThreshold
 
unsigned int m_indexOfMax
 
unsigned int m_kNBinsPerNSec
 
double m_qNSecPerBin
 
DVec m_shape
 
double m_thresh
 
double m_timeOfMax
 

Detailed Description

Definition at line 24 of file EcalShapeBase.h.

Member Typedef Documentation

◆ DVec

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

Definition at line 26 of file EcalShapeBase.h.

Constructor & Destructor Documentation

◆ EcalShapeBase()

EcalShapeBase::EcalShapeBase ( bool  useDBShape)

Definition at line 11 of file EcalShapeBase.cc.

12  : m_useDBShape(useDBShape),
15  m_indexOfMax(0),
16  m_timeOfMax(0.0),
17  m_thresh(0.0) {}
double m_firstTimeOverThreshold
Definition: EcalShapeBase.h:58
unsigned int m_indexOfMax
Definition: EcalShapeBase.h:59
double m_timeOfMax
Definition: EcalShapeBase.h:60
unsigned int m_firstIndexOverThreshold
Definition: EcalShapeBase.h:57

◆ ~EcalShapeBase()

EcalShapeBase::~EcalShapeBase ( )
override

Definition at line 9 of file EcalShapeBase.cc.

9 {}

Member Function Documentation

◆ buildMe()

void EcalShapeBase::buildMe ( const edm::EventSetup evtSetup = nullptr)
protected

Definition at line 29 of file EcalShapeBase.cc.

References a, b, c, dumpMFGeometry_cfg::delta, MillePedeFileConverter_cfg::e, DeadROC_duringRun::f1, DeadROC_duringRun::f2, fillShape(), mps_fire::i, createfilelist::int, m_arraySize, m_denseArraySize, m_deriv, m_firstIndexOverThreshold, m_firstTimeOverThreshold, m_indexOfMax, m_kNBinsPerNSec, m_qNSecPerBin, m_shape, m_thresh, m_timeOfMax, DMR_cfg::thresh, threshold(), relativeConstraints::value, and x.

Referenced by APDShape::APDShape(), EBShape::EBShape(), EEShape::EEShape(), and setEventSetup().

29  {
30  DVec shapeArray;
31 
32  float time_interval = 0;
33  fillShape(time_interval,
34  m_thresh,
35  shapeArray,
36  evtSetup); // pure virtual function, implementation may vary for EB/EE/APD ...
37  m_arraySize = shapeArray.size(); // original data
38 
39  m_denseArraySize = 10 * m_arraySize; // dense array with interpolation between data
41  (unsigned int)(10 /
42  time_interval); // used to be an unsigned int = 10 in < CMSSW10X, should work for time intervals ~0.1, 0.2, 0.5, 1
43  m_qNSecPerBin = time_interval / 10.;
44 
45  m_deriv.resize(m_denseArraySize);
46  m_shape.resize(m_denseArraySize);
47 
48  const double maxel(*max_element(shapeArray.begin(), shapeArray.end()));
49 
50  const double maxelt(1.e-5 < maxel ? maxel : 1);
51 
52  for (unsigned int i(0); i != shapeArray.size(); ++i) {
53  shapeArray[i] = shapeArray[i] / maxelt;
54  }
55 
56  const double thresh(threshold() / maxelt);
57 
58  const double delta(m_qNSecPerBin / 2.);
59 
60  for (unsigned int denseIndex(0); denseIndex != m_denseArraySize; ++denseIndex) {
61  const double xb((denseIndex + 0.5) * m_qNSecPerBin);
62 
63  const unsigned int ibin(denseIndex / 10);
64 
65  double value = 0.0;
66  double deriv = 0.0;
67 
68  if (0 == ibin || shapeArray.size() == 1 + ibin) // cannot do quadratic interpolation at ends
69  {
70  value = shapeArray[ibin];
71  deriv = 0.0;
72  } else {
73  const double x(xb - (ibin + 0.5) * time_interval);
74  const double f1(shapeArray[ibin - 1]);
75  const double f2(shapeArray[ibin]);
76  const double f3(shapeArray[ibin + 1]);
77  const double a(f2);
78  const double b((f3 - f1) / (2. * time_interval));
79  const double c(((f1 + f3) / 2. - f2) / (time_interval * time_interval));
80  value = a + b * x + c * x * x;
81  deriv = (b + 2 * c * x) / delta;
82  }
83 
84  m_shape[denseIndex] = value;
85  m_deriv[denseIndex] = deriv;
86 
87  if (0 < denseIndex && thresh < value && 0 == m_firstIndexOverThreshold) {
88  m_firstIndexOverThreshold = denseIndex - 1;
90  }
91 
92  if (m_shape[m_indexOfMax] < value) {
93  m_indexOfMax = denseIndex;
94  }
95  }
97 }
virtual void fillShape(float &time_interval, double &m_thresh, EcalShapeBase::DVec &aVec, const edm::EventSetup *es) const =0
double threshold() const
unsigned int m_denseArraySize
Definition: EcalShapeBase.h:67
std::vector< double > DVec
Definition: EcalShapeBase.h:26
Definition: value.py:1
double m_firstTimeOverThreshold
Definition: EcalShapeBase.h:58
double m_qNSecPerBin
Definition: EcalShapeBase.h:68
unsigned int m_arraySize
Definition: EcalShapeBase.h:66
double b
Definition: hdecay.h:118
unsigned int m_indexOfMax
Definition: EcalShapeBase.h:59
double m_timeOfMax
Definition: EcalShapeBase.h:60
double a
Definition: hdecay.h:119
unsigned int m_firstIndexOverThreshold
Definition: EcalShapeBase.h:57
unsigned int m_kNBinsPerNSec
Definition: EcalShapeBase.h:62

◆ derivative()

double EcalShapeBase::derivative ( double  time) const

Definition at line 117 of file EcalShapeBase.cc.

References m_denseArraySize, m_deriv, and timeIndex().

117  {
118  const unsigned int index(timeIndex(aTime));
119  return (m_denseArraySize == index ? 0 : m_deriv[index]);
120 }
unsigned int m_denseArraySize
Definition: EcalShapeBase.h:67
unsigned int timeIndex(double aTime) const

◆ fillShape()

virtual void EcalShapeBase::fillShape ( float &  time_interval,
double &  m_thresh,
EcalShapeBase::DVec aVec,
const edm::EventSetup es 
) const
protectedpure virtual

Implemented in APDShape, EBShape, and EEShape.

Referenced by buildMe().

◆ m_shape_print()

void EcalShapeBase::m_shape_print ( const char *  fileName)

Definition at line 122 of file EcalShapeBase.cc.

References MillePedeFileConverter_cfg::fileName, compareTotals::fs, mps_fire::i, and m_shape.

122  {
123  std::ofstream fs;
124  fs.open(fileName);
125  for (auto i : m_shape)
126  fs << "vec.push_back(" << i << ");\n";
127  fs.close();
128 }

◆ operator()()

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

Implements CaloVShape.

Definition at line 110 of file EcalShapeBase.cc.

References m_denseArraySize, m_shape, and timeIndex().

110  {
111  // return pulse amplitude for request time in ns
112 
113  const unsigned int index(timeIndex(aTime));
114  return (m_denseArraySize == index ? 0 : m_shape[index]);
115 }
unsigned int m_denseArraySize
Definition: EcalShapeBase.h:67
unsigned int timeIndex(double aTime) const

◆ setEventSetup()

void EcalShapeBase::setEventSetup ( const edm::EventSetup evtSetup)

◆ threshold()

double EcalShapeBase::threshold ( ) const

Definition at line 27 of file EcalShapeBase.cc.

References m_thresh.

Referenced by buildMe().

27 { return m_thresh; }

◆ timeIndex()

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

Definition at line 99 of file EcalShapeBase.cc.

References LogDebug, m_denseArraySize, m_firstIndexOverThreshold, and m_kNBinsPerNSec.

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

99  {
100  const int index(m_firstIndexOverThreshold + (unsigned int)(aTime * m_kNBinsPerNSec + 0.5));
101 
102  const bool bad((int)m_firstIndexOverThreshold > index || (int)m_denseArraySize <= index);
103 
104  if ((int)m_denseArraySize <= index) {
105  LogDebug("EcalShapeBase") << " ECAL MGPA shape requested for out of range time " << aTime;
106  }
107  return (bad ? m_denseArraySize : (unsigned int)index);
108 }
unsigned int m_denseArraySize
Definition: EcalShapeBase.h:67
unsigned int m_firstIndexOverThreshold
Definition: EcalShapeBase.h:57
unsigned int m_kNBinsPerNSec
Definition: EcalShapeBase.h:62
#define LogDebug(id)

◆ timeOfMax()

double EcalShapeBase::timeOfMax ( ) const

Definition at line 23 of file EcalShapeBase.cc.

References m_timeOfMax.

Referenced by EcalTPGParamBuilder::computeWeights(), and timeToRise().

23 { return m_timeOfMax; }
double m_timeOfMax
Definition: EcalShapeBase.h:60

◆ timeOfThr()

double EcalShapeBase::timeOfThr ( ) const

Definition at line 21 of file EcalShapeBase.cc.

References m_firstTimeOverThreshold.

Referenced by EcalTPGParamBuilder::computeWeights(), and timeToRise().

21 { return m_firstTimeOverThreshold; }
double m_firstTimeOverThreshold
Definition: EcalShapeBase.h:58

◆ timeToRise()

double EcalShapeBase::timeToRise ( ) const
overridevirtual

Implements CaloVShape.

Definition at line 25 of file EcalShapeBase.cc.

References timeOfMax(), and timeOfThr().

Referenced by EcalDccWeightBuilder::computeWeights(), and EcalUncalibRecHitRecChi2Algo< C >::EcalUncalibRecHitRecChi2Algo().

25 { return timeOfMax() - timeOfThr(); }
double timeOfThr() const
double timeOfMax() const

Member Data Documentation

◆ m_arraySize

unsigned int EcalShapeBase::m_arraySize
private

Definition at line 66 of file EcalShapeBase.h.

Referenced by buildMe().

◆ m_denseArraySize

unsigned int EcalShapeBase::m_denseArraySize
private

Definition at line 67 of file EcalShapeBase.h.

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

◆ m_deriv

DVec EcalShapeBase::m_deriv
private

Definition at line 64 of file EcalShapeBase.h.

Referenced by buildMe(), and derivative().

◆ m_firstIndexOverThreshold

unsigned int EcalShapeBase::m_firstIndexOverThreshold
private

Definition at line 57 of file EcalShapeBase.h.

Referenced by buildMe(), and timeIndex().

◆ m_firstTimeOverThreshold

double EcalShapeBase::m_firstTimeOverThreshold
private

Definition at line 58 of file EcalShapeBase.h.

Referenced by buildMe(), and timeOfThr().

◆ m_indexOfMax

unsigned int EcalShapeBase::m_indexOfMax
private

Definition at line 59 of file EcalShapeBase.h.

Referenced by buildMe().

◆ m_kNBinsPerNSec

unsigned int EcalShapeBase::m_kNBinsPerNSec
private

Definition at line 62 of file EcalShapeBase.h.

Referenced by buildMe(), and timeIndex().

◆ m_qNSecPerBin

double EcalShapeBase::m_qNSecPerBin
private

Definition at line 68 of file EcalShapeBase.h.

Referenced by buildMe().

◆ m_shape

DVec EcalShapeBase::m_shape
private

Definition at line 63 of file EcalShapeBase.h.

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

◆ m_thresh

double EcalShapeBase::m_thresh
private

◆ m_timeOfMax

double EcalShapeBase::m_timeOfMax
private

Definition at line 60 of file EcalShapeBase.h.

Referenced by buildMe(), and timeOfMax().

◆ m_useDBShape

bool EcalShapeBase::m_useDBShape
protected

Definition at line 54 of file EcalShapeBase.h.

Referenced by APDShape::fillShape(), EEShape::fillShape(), and EBShape::fillShape().