CMS 3D CMS Logo

HcalPulseShapes.h
Go to the documentation of this file.
1 #ifndef CALIBCALORIMETRY_HCALALGOS_HCALPULSESHAPES_H
2 #define CALIBCALORIMETRY_HCALALGOS_HCALPULSESHAPES_H 1
3 
4 #include <map>
5 #include <vector>
6 #include <cmath>
11 
17 namespace CLHEP {
18  class HepRandomEngine;
19 }
20 
22 public:
26  // only needed if you'll be getting shapes by DetId
27  void beginRun(edm::EventSetup const& es);
28  void beginRun(const HcalDbService* conditions);
29 
30  const Shape& hbShape() const { return hpdShape_; }
31  const Shape& heShape() const { return hpdShape_; }
32  const Shape& hfShape() const { return hfShape_; }
33  const Shape& hoShape(bool sipm = false) const { return sipm ? siPMShapeHO_ : hpdShape_; }
34  // return Shape for given shapeType.
35  const Shape& getShape(int shapeType) const;
37  const Shape& shape(const HcalDetId& detId) const;
38  const Shape& shapeForReco(const HcalDetId& detId) const;
40  const Shape& defaultShape(const HcalDetId& detId) const;
41  //public static helpers
42  static const int nBinsSiPM_ = 250;
43  static constexpr float deltaTSiPM_ = 0.5;
44  static constexpr float invDeltaTSiPM_ = 2.0;
45  static double analyticPulseShapeSiPMHO(double t);
46  static double analyticPulseShapeSiPMHE(double t);
47  static constexpr float Y11RANGE_ = nBinsSiPM_;
48  static constexpr float Y11MAX203_ = 0.04;
49  static constexpr float Y11MAX206_ = 0.08;
50  static double Y11203(double t);
51  static double Y11206(double t);
52  static double generatePhotonTime(CLHEP::HepRandomEngine* engine, unsigned int signalShape);
53  static double generatePhotonTime203(CLHEP::HepRandomEngine* engine);
54  static double generatePhotonTime206(CLHEP::HepRandomEngine* engine);
55  //this function can take function pointers *or* functors!
56  template <class F1, class F2>
57  static std::vector<double> convolve(unsigned nbin, F1 f1, F2 f2) {
58  std::vector<double> result(2 * nbin - 1, 0.);
59  for (unsigned i = 0; i < 2 * nbin - 1; ++i) {
60  for (unsigned j = 0; j < std::min(i + 1, nbin); ++j) {
61  double tmp = f1(j) * f2(i - j);
62  if (std::isnan(tmp) or std::isinf(tmp))
63  continue;
64  result[i] += tmp;
65  }
66  }
67  return result;
68  }
69  static std::vector<double> normalize(std::vector<double> nt, unsigned nbin) {
70  //skip first bin, always 0
71  double norm = 0.;
72  for (unsigned int j = 1; j <= nbin; ++j) {
73  norm += (nt[j] > 0) ? nt[j] : 0.;
74  }
75 
76  double normInv = 1. / norm;
77  for (unsigned int j = 1; j <= nbin; ++j) {
78  nt[j] *= normInv;
79  }
80 
81  return nt;
82  }
83  static std::vector<double> normalizeShift(std::vector<double> nt, unsigned nbin, int shift) {
84  //skip first bin, always 0
85  double norm = 0.;
86  for (unsigned int j = std::max(1, -1 * shift); j <= nbin; j++) {
87  norm += std::max(0., nt[j - shift]);
88  }
89  double normInv = 1. / norm;
90  std::vector<double> nt2(nt.size(), 0);
91  for (int j = 1; j <= (int)nbin; j++) {
92  if (j - shift >= 0) {
93  nt2[j] = nt[j - shift] * normInv;
94  }
95  }
96  return nt2;
97  }
98 
99  std::map<int, Shape const*> const& get_all_shapes() const { return theShapes; }
100 
101 private:
102  void computeHPDShape(float, float, float, float, float, float, float, float, Shape&);
103  void computeHFShape();
104  void computeSiPMShapeHO();
115  typedef std::map<int, const Shape*> ShapeMap;
117 };
118 #endif
HcalPulseShapes::invDeltaTSiPM_
static constexpr float invDeltaTSiPM_
Definition: HcalPulseShapes.h:44
mps_fire.i
i
Definition: mps_fire.py:355
HcalPulseShapes::heShape
const Shape & heShape() const
Definition: HcalPulseShapes.h:31
HcalPulseShapes::defaultShape
const Shape & defaultShape(const HcalDetId &detId) const
in case of conditions problems
Definition: HcalPulseShapes.cc:486
HcalPulseShapes::theShapes
ShapeMap theShapes
Definition: HcalPulseShapes.h:116
HcalPulseShapes::~HcalPulseShapes
~HcalPulseShapes()
Definition: HcalPulseShapes.cc:138
nt
int nt
Definition: AMPTWrapper.h:42
min
T min(T a, T b)
Definition: MathUtil.h:58
HcalPulseShapes
Definition: HcalPulseShapes.h:21
HcalPulseShapes::hpdShapeMC_v3
Shape hpdShapeMC_v3
Definition: HcalPulseShapes.h:112
HcalPulseShapes::nBinsSiPM_
static const int nBinsSiPM_
Definition: HcalPulseShapes.h:42
HcalPulseShapes::shapeForReco
const Shape & shapeForReco(const HcalDetId &detId) const
Definition: HcalPulseShapes.cc:472
HcalPulseShapes::computeHFShape
void computeHFShape()
Definition: HcalPulseShapes.cc:245
HcalPulseShapes::computeSiPMShapeData2017
void computeSiPMShapeData2017()
Definition: HcalPulseShapes.cc:328
HcalPulseShapes::computeSiPMShapeHE206
const HcalPulseShape & computeSiPMShapeHE206()
Definition: HcalPulseShapes.cc:440
createJobs.tmp
tmp
align.sh
Definition: createJobs.py:716
HcalPulseShapes::deltaTSiPM_
static constexpr float deltaTSiPM_
Definition: HcalPulseShapes.h:43
Shape
Abstract Class of shape.
Definition: Shape.h:14
HcalPulseShapes::get_all_shapes
std::map< int, Shape const * > const & get_all_shapes() const
Definition: HcalPulseShapes.h:99
HcalPulseShapes::hpdShape_
Shape hpdShape_
Definition: HcalPulseShapes.h:109
edm::detail::isnan
bool isnan(float x)
Definition: math.h:13
HcalPulseShapes::generatePhotonTime203
static double generatePhotonTime203(CLHEP::HepRandomEngine *engine)
Definition: HcalPulseShapes.cc:537
HcalPulseShapes::computeSiPMShapeHO
void computeSiPMShapeHO()
Definition: HcalPulseShapes.cc:382
HcalPulseShapes::Y11206
static double Y11206(double t)
Definition: HcalPulseShapes.cc:559
HcalPulseShapes::getShape
const Shape & getShape(int shapeType) const
Definition: HcalPulseShapes.cc:448
HcalPulseShape.h
HcalPulseShapes::convolve
static std::vector< double > convolve(unsigned nbin, F1 f1, F2 f2)
Definition: HcalPulseShapes.h:57
HcalPulseShapes::hbShape
const Shape & hbShape() const
Definition: HcalPulseShapes.h:30
HcalPulseShapes::Y11203
static double Y11203(double t)
Definition: HcalPulseShapes.cc:556
OrderedSet.t
t
Definition: OrderedSet.py:90
HcalPulseShapes::Y11RANGE_
static constexpr float Y11RANGE_
Definition: HcalPulseShapes.h:47
HcalPulseShapes::HcalPulseShapes
HcalPulseShapes()
Definition: HcalPulseShapes.cc:15
HcalPulseShapes::siPMShapeData2018_
Shape siPMShapeData2018_
Definition: HcalPulseShapes.h:110
CLHEP
Definition: CocoaGlobals.h:27
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
HcalPulseShapes::hpdBV30Shape_v2
Shape hpdBV30Shape_v2
Definition: HcalPulseShapes.h:113
DeadROC_duringRun.f2
f2
Definition: DeadROC_duringRun.py:220
HcalPulseShapes::normalize
static std::vector< double > normalize(std::vector< double > nt, unsigned nbin)
Definition: HcalPulseShapes.h:69
HcalDetId.h
HcalPulseShapes::hpdBV30ShapeMC_v2
Shape hpdBV30ShapeMC_v2
Definition: HcalPulseShapes.h:113
HcalPulseShapes::analyticPulseShapeSiPMHE
static double analyticPulseShapeSiPMHE(double t)
Definition: HcalPulseShapes.cc:523
HcalDetId
Definition: HcalDetId.h:12
createfilelist.int
int
Definition: createfilelist.py:10
HcalPulseShapes::beginRun
void beginRun(edm::EventSetup const &es)
Definition: HcalPulseShapes.cc:140
HcalPulseShapes::computeSiPMShapeData2018
void computeSiPMShapeData2018()
Definition: HcalPulseShapes.cc:275
edm::EventSetup
Definition: EventSetup.h:57
HcalPulseShapes::Y11MAX203_
static constexpr float Y11MAX203_
Definition: HcalPulseShapes.h:48
HcalPulseShape
Definition: HcalPulseShape.h:6
HcalPulseShapes::hoShape
const Shape & hoShape(bool sipm=false) const
Definition: HcalPulseShapes.h:33
HcalPulseShapes::normalizeShift
static std::vector< double > normalizeShift(std::vector< double > nt, unsigned nbin, int shift)
Definition: HcalPulseShapes.h:83
HcalPulseShapes::generatePhotonTime
static double generatePhotonTime(CLHEP::HepRandomEngine *engine, unsigned int signalShape)
Definition: HcalPulseShapes.cc:530
HcalPulseShapes::hfShape
const Shape & hfShape() const
Definition: HcalPulseShapes.h:32
HcalPulseShapes::hpdShape_v2
Shape hpdShape_v2
Definition: HcalPulseShapes.h:111
HcalDbService
Definition: HcalDbService.h:26
HcalPulseShapes::shape
const Shape & shape(const HcalDetId &detId) const
automatically figures out which shape to return
Definition: HcalPulseShapes.cc:458
HcalPulseShapes::computeHPDShape
void computeHPDShape(float, float, float, float, float, float, float, float, Shape &)
Definition: HcalPulseShapes.cc:149
HcalPulseShapes::siPMShapeHO_
Shape siPMShapeHO_
Definition: HcalPulseShapes.h:109
edm::shift
static unsigned const int shift
Definition: LuminosityBlockID.cc:7
HcalPulseShapes::hpdShapeMC_v2
Shape hpdShapeMC_v2
Definition: HcalPulseShapes.h:111
Frameworkfwd.h
HcalPulseShapes::theDbService
const HcalDbService * theDbService
Definition: HcalPulseShapes.h:114
ZMuMuCategoriesSequences_cff.nbin
nbin
Definition: ZMuMuCategoriesSequences_cff.py:25
or
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
HcalPulseShapes::Shape
HcalPulseShape Shape
Definition: HcalPulseShapes.h:23
HcalPulseShapes::Y11MAX206_
static constexpr float Y11MAX206_
Definition: HcalPulseShapes.h:49
HcalPulseShapes::generatePhotonTime206
static double generatePhotonTime206(CLHEP::HepRandomEngine *engine)
Definition: HcalPulseShapes.cc:546
HcalDbService.h
HcalPulseShapes::computeSiPMShapeHE203
const HcalPulseShape & computeSiPMShapeHE203()
Definition: HcalPulseShapes.cc:433
HcalPulseShapes::hpdShape_v3
Shape hpdShape_v3
Definition: HcalPulseShapes.h:112
mps_fire.result
result
Definition: mps_fire.py:303
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
DeadROC_duringRun.f1
f1
Definition: DeadROC_duringRun.py:219
HcalPulseShapes::siPMShapeData2017_
Shape siPMShapeData2017_
Definition: HcalPulseShapes.h:110
HcalPulseShapes::ShapeMap
std::map< int, const Shape * > ShapeMap
Definition: HcalPulseShapes.h:115
HcalPulseShapes::analyticPulseShapeSiPMHO
static double analyticPulseShapeSiPMHO(double t)
Definition: HcalPulseShapes.cc:516
HcalPulseShapes::hfShape_
Shape hfShape_
Definition: HcalPulseShapes.h:109