CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HcalTimingCorrector.cc
Go to the documentation of this file.
1 #include "../interface/HcalTimingCorrector.h"
3 
4 // Using defined flags instead of hardcoding bits 2 and 3
5 
6 namespace HcalTimingCorrector_impl {
7  template <class T, class V>
8  void makeCorrection(T &rechit, const V &digi, int favorite_capid) {
9  if (digi.fiberIdleOffset() == -1000) return; //reserved for bad stuff
10 
11  bool bad = false;
12  //convention, -1 means digi is early, need to add
13  // +1 means digi is late, need to subtract
14  int capid_shift = (favorite_capid - digi[0].capid());
15  capid_shift %= 4;
16  while (capid_shift < 0) capid_shift += 4;
17 
18  int idle_shift = digi.fiberIdleOffset();
19  idle_shift %= 4;
20  while (idle_shift < 0) idle_shift += 4;
21 
22  if (capid_shift != idle_shift) {
23  bad = true;
24  }
25  else if (capid_shift == 0) {
26  // do nothing, all is well
27  }
28  else if (capid_shift == 2) {
29  bad = true;
30  }
31  else {
32  /*
33  std::cout << "capid_shift " << capid_shift
34  << " fiberOffset " << digi.fiberIdleOffset() << std::endl;
35  */
36  rechit = T(rechit.id(), rechit.energy(), rechit.time() +
37  ( capid_shift == 1 ? -25 : +25 )
38  );
39  rechit.setFlagField(1,(capid_shift == 1 ?
42  }
43 
44  if (bad) {
45  /*
46  std::cout << "BAD capid_shift " << capid_shift
47  << " fiberOffset " << digi.fiberIdleOffset() << std::endl;
48  */
49  rechit.setFlagField(1,HcalCaloFlagLabels::TimingErrorBit);
50  }
51  }
52 }
53 
54 using namespace HcalTimingCorrector_impl;
55 
57 {}
58 
60 {}
61 
62 void HcalTimingCorrector::Correct(HBHERecHit& rechit, const HBHEDataFrame& digi, int favorite_capid)
63 {
64  makeCorrection<HBHERecHit, HBHEDataFrame>(rechit, digi, favorite_capid);
65 }
66 
67 void HcalTimingCorrector::Correct(HORecHit& rechit, const HODataFrame& digi, int favorite_capid)
68 {
69  makeCorrection<HORecHit, HODataFrame>(rechit, digi, favorite_capid);
70 }
71 
72 void HcalTimingCorrector::Correct(HFRecHit& rechit, const HFDataFrame& digi, int favorite_capid)
73 {
74  makeCorrection<HFRecHit, HFDataFrame>(rechit, digi, favorite_capid);
75 }
76 
int bad(Items const &cont)
void makeCorrection(T &rechit, const V &digi, int favorite_capid)
static void Correct(HBHERecHit &rechit, const HBHEDataFrame &digi, int favorite_capid)
long double T