CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Functions
HcalTimingCorrector_impl Namespace Reference

Functions

template<class T , class V >
void makeCorrection (T &rechit, const V &digi, int favorite_capid)
 

Function Documentation

template<class T , class V >
void HcalTimingCorrector_impl::makeCorrection ( T rechit,
const V &  digi,
int  favorite_capid 
)

Definition at line 8 of file HcalTimingCorrector.cc.

References cond::ecalcond::bad(), HcalCaloFlagLabels::TimingAddedBit, HcalCaloFlagLabels::TimingErrorBit, and HcalCaloFlagLabels::TimingSubtractedBit.

8  {
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  }
int bad(Items const &cont)
long double T