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();
116  typedef std::map<int, const Shape*> ShapeMap;
118 };
119 #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:539
HcalPulseShapes::theShapes
ShapeMap theShapes
Definition: HcalPulseShapes.h:117
HcalPulseShapes::~HcalPulseShapes
~HcalPulseShapes()
Definition: HcalPulseShapes.cc:141
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:113
HcalPulseShapes::nBinsSiPM_
static const int nBinsSiPM_
Definition: HcalPulseShapes.h:42
HcalPulseShapes::shapeForReco
const Shape & shapeForReco(const HcalDetId &detId) const
Definition: HcalPulseShapes.cc:525
HcalPulseShapes::computeHFShape
void computeHFShape()
Definition: HcalPulseShapes.cc:248
HcalPulseShapes::computeSiPMShapeData2017
void computeSiPMShapeData2017()
Definition: HcalPulseShapes.cc:381
HcalPulseShapes::computeSiPMShapeHE206
const HcalPulseShape & computeSiPMShapeHE206()
Definition: HcalPulseShapes.cc:493
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:110
edm::detail::isnan
bool isnan(float x)
Definition: math.h:13
HcalPulseShapes::generatePhotonTime203
static double generatePhotonTime203(CLHEP::HepRandomEngine *engine)
Definition: HcalPulseShapes.cc:590
HcalPulseShapes::computeSiPMShapeHO
void computeSiPMShapeHO()
Definition: HcalPulseShapes.cc:435
HcalPulseShapes::Y11206
static double Y11206(double t)
Definition: HcalPulseShapes.cc:612
HcalPulseShapes::getShape
const Shape & getShape(int shapeType) const
Definition: HcalPulseShapes.cc:501
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:609
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:111
CLHEP
Definition: CocoaGlobals.h:27
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
HcalPulseShapes::hpdBV30Shape_v2
Shape hpdBV30Shape_v2
Definition: HcalPulseShapes.h:114
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:114
HcalPulseShapes::analyticPulseShapeSiPMHE
static double analyticPulseShapeSiPMHE(double t)
Definition: HcalPulseShapes.cc:576
HcalDetId
Definition: HcalDetId.h:12
createfilelist.int
int
Definition: createfilelist.py:10
HcalPulseShapes::beginRun
void beginRun(edm::EventSetup const &es)
Definition: HcalPulseShapes.cc:143
HcalPulseShapes::computeSiPMShapeData2018
void computeSiPMShapeData2018()
Definition: HcalPulseShapes.cc:328
edm::EventSetup
Definition: EventSetup.h:57
HcalPulseShapes::Y11MAX203_
static constexpr float Y11MAX203_
Definition: HcalPulseShapes.h:48
HcalPulseShapes::siPMShapeMCRecoRun3_
Shape siPMShapeMCRecoRun3_
Definition: HcalPulseShapes.h:111
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:583
HcalPulseShapes::hfShape
const Shape & hfShape() const
Definition: HcalPulseShapes.h:32
HcalPulseShapes::hpdShape_v2
Shape hpdShape_v2
Definition: HcalPulseShapes.h:112
HcalDbService
Definition: HcalDbService.h:26
HcalPulseShapes::shape
const Shape & shape(const HcalDetId &detId) const
automatically figures out which shape to return
Definition: HcalPulseShapes.cc:511
HcalPulseShapes::computeHPDShape
void computeHPDShape(float, float, float, float, float, float, float, float, Shape &)
Definition: HcalPulseShapes.cc:152
HcalPulseShapes::siPMShapeHO_
Shape siPMShapeHO_
Definition: HcalPulseShapes.h:110
edm::shift
static unsigned const int shift
Definition: LuminosityBlockID.cc:7
HcalPulseShapes::hpdShapeMC_v2
Shape hpdShapeMC_v2
Definition: HcalPulseShapes.h:112
Frameworkfwd.h
HcalPulseShapes::theDbService
const HcalDbService * theDbService
Definition: HcalPulseShapes.h:115
ZMuMuCategoriesSequences_cff.nbin
nbin
Definition: ZMuMuCategoriesSequences_cff.py:25
HcalPulseShapes::computeSiPMShapeMCRecoRun3
void computeSiPMShapeMCRecoRun3()
Definition: HcalPulseShapes.cc:277
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:599
HcalDbService.h
HcalPulseShapes::computeSiPMShapeHE203
const HcalPulseShape & computeSiPMShapeHE203()
Definition: HcalPulseShapes.cc:486
HcalPulseShapes::hpdShape_v3
Shape hpdShape_v3
Definition: HcalPulseShapes.h:113
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:111
HcalPulseShapes::ShapeMap
std::map< int, const Shape * > ShapeMap
Definition: HcalPulseShapes.h:116
HcalPulseShapes::analyticPulseShapeSiPMHO
static double analyticPulseShapeSiPMHO(double t)
Definition: HcalPulseShapes.cc:569
HcalPulseShapes::hfShape_
Shape hfShape_
Definition: HcalPulseShapes.h:110