CMS 3D CMS Logo

Functions | Variables

HFTimingTrust Namespace Reference

Functions

template<class T , class V >
void checkHFTimErr (T &rechit, const V &digi, int level1, int level2)
double timerr_hf (double rectime, double ampl)

Variables

static const float hfterrlut [195]

Function Documentation

template<class T , class V >
void HFTimingTrust::checkHFTimErr ( T rechit,
const V &  digi,
int  level1,
int  level2 
)

Definition at line 12 of file HFTimingTrustFlag.cc.

References HcalCaloFlagLabels::HFTimingTrustBits, i, findQualityFiles::maxI, ntuplemaker::status, and timerr_hf().

  {
    // Get rechit timing
    double rectime = rechit.time();

    if (rectime>-100 && rectime<250) {

      // Get signal from digi
      double ampl=0; double sum=0; int maxI = -1;
      for (int i=0;i<digi.size();++i) {
        sum += digi.sample(i).nominal_fC();
        if (digi.sample(i).nominal_fC()>ampl) {
          ampl = digi.sample(i).nominal_fC();
          maxI = i;
        }
      }
      if (ampl>1 && maxI>0 && maxI<digi.size()-1) {
        ampl = ampl + digi.sample(maxI-1).nominal_fC() + digi.sample(maxI+1).nominal_fC();
        ampl -= (sum-ampl)*3.0/(digi.size()-3);
        if (ampl>3) {
          int timerr = (int) timerr_hf(rectime,ampl);
          uint32_t status=0;
          if (timerr<0) status = 3; // unreconstructable time
          else if (timerr<=level1) status = 0; // time reconstructed; precision better than level1 value
          else if (timerr<=level2) status = 1; // precision worse than level1 value
          else status = 2; //precision worse than level 2 value
          rechit.setFlagField(status,HcalCaloFlagLabels::HFTimingTrustBits,2);
          return;
        }
      }

    } // if (rectime > -100 && rectime < -250)
    // if rectime outside expected range, set flag field to 3 (unreconstructable)?
    rechit.setFlagField(3,HcalCaloFlagLabels::HFTimingTrustBits,2);
    return;
  }
double HFTimingTrust::timerr_hf ( double  rectime,
double  ampl 
)

Definition at line 67 of file HFTimingTrustFlag.cc.

References hfterrlut, i, and getHLTprescales::index.

Referenced by checkHFTimErr().

  {
    int itim,iampl,index;
    double tim;
    if (rectime>0) tim=rectime-((int)(rectime/25))*25;
    else tim=rectime-((int)(rectime/25))*25+25;
    itim = (int) (tim/2.0);

    iampl=0;
    static const double bampl[15]={3,5,8,12,19,30,47,73,115,182,287,452,712,1120,1766};
    if (ampl>=bampl[14]) iampl=14;
    else {
      for (int i=1;i<=14;i++) {
        if (ampl<bampl[i]) {
          iampl=i-1;
          break;
        }
      }
    }

    index = itim + iampl*13;

    double y1 = hfterrlut[index];
    double y2 = 0;
    double v1 = y1;
    if (itim<12) {
      y2 = hfterrlut[index+1];
      v1 = y1 + (y2-y1)*(tim/2.0-(float)itim);
    }
    double yy1 = 0;
    double yy2 = 0;
    double v2 = 0;
    if (iampl<14) {
      yy1 = hfterrlut[index+13];
      if (itim==12) v2 = yy1;
      else {
        yy2 = hfterrlut[index+14];
        v2 = yy1 + (yy2-yy1)*(tim/2.0-(float)itim);
      }
      v1 = v1 + (v2-v1)*(ampl-bampl[iampl])/(bampl[iampl+1]-bampl[iampl]);
    }

    return v1;
  }

Variable Documentation

const float HFTimingTrust::hfterrlut[195] [static]
Initial value:
 { 
    3.42,  3.04,  9.18,  8.97,  8.49,  8.08,  8.01,  8.30,  8.75,  8.22,  7.21,  5.04,  2.98,
    2.04,  1.22,  7.58,  7.79,  7.11,  6.93,  7.03,  7.27,  7.23,  6.53,  4.59,  2.40,  1.46,
    1.31,  0.42,  5.95,  6.48,  6.29,  5.84,  5.97,  6.31,  6.00,  4.37,  2.37,  1.03,  0.72,
    0.81,  0.27,  3.98,  5.57,  5.04,  5.10,  5.21,  5.18,  4.22,  2.23,  1.07,  0.66,  0.40,
    0.48,  0.17,  2.51,  4.70,  4.28,  4.29,  4.36,  3.84,  2.40,  1.15,  0.68,  0.40,  0.24,
    0.29,  0.11,  0.81,  3.71,  3.47,  3.48,  3.52,  2.58,  1.25,  0.71,  0.41,  0.26,  0.16,
    0.16,  0.08,  0.27,  2.88,  2.63,  2.76,  2.33,  1.31,  0.72,  0.44,  0.27,  0.16,  0.11,
    0.10,  0.06,  0.15,  2.11,  2.00,  1.84,  1.46,  0.79,  0.45,  0.26,  0.17,  0.10,  0.08,
    0.05,  0.04,  0.10,  1.58,  1.49,  1.25,  0.90,  0.48,  0.29,  0.17,  0.10,  0.06,  0.06,
    0.02,  0.03,  0.06,  1.26,  1.03,  0.77,  0.57,  0.30,  0.18,  0.11,  0.06,  0.04,  0.05,
    0.01,  0.02,  0.04,  0.98,  0.66,  0.47,  0.39,  0.18,  0.11,  0.07,  0.04,  0.03,  0.04,
    0.01,  0.02,  0.02,  0.86,  0.44,  0.30,  0.27,  0.11,  0.07,  0.04,  0.03,  0.02,  0.04,
    0.01,  0.02,  0.02,  0.80,  0.30,  0.21,  0.17,  0.07,  0.04,  0.03,  0.02,  0.01,  0.04,
    0.01,  0.02,  0.01,  0.76,  0.22,  0.17,  0.12,  0.05,  0.03,  0.02,  0.01,  0.01,  0.04,
    0.01,  0.02,  0.01,  0.76,  0.17,  0.14,  0.09,  0.03,  0.02,  0.01,  0.01,  0.01,  0.04
  }

Definition at line 49 of file HFTimingTrustFlag.cc.

Referenced by timerr_hf().