CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Attributes
HcalHFStatusBitFromDigis Class Reference

#include <HcalHFStatusBitFromDigis.h>

Public Member Functions

 HcalHFStatusBitFromDigis ()
 
 HcalHFStatusBitFromDigis (int recoFirstSample, int recoSamplesToAdd, const edm::ParameterSet &HFDigiTimeParams, const edm::ParameterSet &HFTimeInWindowParams)
 
void hfSetFlagFromDigi (HFRecHit &hf, const HFDataFrame &digi, const HcalCoder &coder, const HcalCalibrations &calib)
 
void resetTimeSamples (int firstSample, int samplesToAdd)
 
 ~HcalHFStatusBitFromDigis ()
 

Private Attributes

double coef0_
 
double coef1_
 
double coef2_
 
int expectedPeak_
 
int firstSample_
 
double HFlongwindowEthresh_
 
std::vector< double > HFlongwindowMaxTime_
 
std::vector< double > HFlongwindowMinTime_
 
double HFshortwindowEthresh_
 
std::vector< double > HFshortwindowMaxTime_
 
std::vector< double > HFshortwindowMinTime_
 
double minthreshold_
 
int recoFirstSample_
 
int recoSamplesToAdd_
 
int samplesToAdd_
 

Detailed Description

This class sets status bit in the status words for the revised CaloRecHit objets according to informatino from the digi associated to the hit.

Date:
2010/06/04 14:13:51
Revision:
1.11
Author
J. Temple – University of Maryland and E. Yazgan

Definition at line 20 of file HcalHFStatusBitFromDigis.h.

Constructor & Destructor Documentation

HcalHFStatusBitFromDigis::HcalHFStatusBitFromDigis ( )

Full featured constructor for HB/HE and HO (HPD-based detectors)

Definition at line 8 of file HcalHFStatusBitFromDigis.cc.

References coef0_, coef1_, coef2_, expectedPeak_, firstSample_, HFlongwindowEthresh_, HFlongwindowMaxTime_, HFlongwindowMinTime_, HFshortwindowEthresh_, HFshortwindowMaxTime_, HFshortwindowMinTime_, minthreshold_, recoFirstSample_, recoSamplesToAdd_, and samplesToAdd_.

9 {
10  // use simple values in default constructor
11  minthreshold_=40; // minimum energy threshold (in GeV)
14  firstSample_=3;
15  samplesToAdd_=4;
16  expectedPeak_=4;
17  // Based on Igor V's algorithm:
18  //TS4/(TS3+TS4+TS5+TS6) > 0.93 - exp(-0.38275-0.012667*E)
19  coef0_= 0.93;
20  coef1_ = -0.38275;
21  coef2_ = -0.012667;
22  // Minimum energy of 10 GeV required
24  HFlongwindowMinTime_.clear();
25  HFlongwindowMinTime_.push_back(-10);
26  HFlongwindowMaxTime_.clear();
27  HFlongwindowMaxTime_.push_back(8);
29  HFshortwindowMinTime_.clear();
30  HFshortwindowMinTime_.push_back(-10);
31  HFshortwindowMaxTime_.clear();
32  HFshortwindowMaxTime_.push_back(8);
33 }
std::vector< double > HFlongwindowMaxTime_
std::vector< double > HFshortwindowMinTime_
std::vector< double > HFlongwindowMinTime_
std::vector< double > HFshortwindowMaxTime_
HcalHFStatusBitFromDigis::HcalHFStatusBitFromDigis ( int  recoFirstSample,
int  recoSamplesToAdd,
const edm::ParameterSet HFDigiTimeParams,
const edm::ParameterSet HFTimeInWindowParams 
)

Definition at line 35 of file HcalHFStatusBitFromDigis.cc.

References coef0_, coef1_, coef2_, expectedPeak_, firstSample_, edm::ParameterSet::getParameter(), HFlongwindowEthresh_, HFlongwindowMaxTime_, HFlongwindowMinTime_, HFshortwindowEthresh_, HFshortwindowMaxTime_, HFshortwindowMinTime_, minthreshold_, recoFirstSample_, recoSamplesToAdd_, and samplesToAdd_.

39 {
40  recoFirstSample_ = recoFirstSample;
41  recoSamplesToAdd_ = recoSamplesToAdd;
42 
43  // Specify parameters used in forming the HFDigiTime flag
44  firstSample_ = HFDigiTimeParams.getParameter<int>("HFdigiflagFirstSample");
45  samplesToAdd_ = HFDigiTimeParams.getParameter<int>("HFdigiflagSamplesToAdd");
46  expectedPeak_ = HFDigiTimeParams.getParameter<int>("HFdigiflagExpectedPeak");
47  minthreshold_ = HFDigiTimeParams.getParameter<double>("HFdigiflagMinEthreshold");
48  coef0_ = HFDigiTimeParams.getParameter<double>("HFdigiflagCoef0");
49  coef1_ = HFDigiTimeParams.getParameter<double>("HFdigiflagCoef1");
50  coef2_ = HFDigiTimeParams.getParameter<double>("HFdigiflagCoef2");
51 
52  // Specify parameters used in forming HFInTimeWindow flag
53  HFlongwindowMinTime_ = HFTimeInWindowParams.getParameter<std::vector<double> >("hflongMinWindowTime");
54  HFlongwindowMaxTime_ = HFTimeInWindowParams.getParameter<std::vector<double> >("hflongMaxWindowTime");
55  HFlongwindowEthresh_ = HFTimeInWindowParams.getParameter<double>("hflongEthresh");
56  HFshortwindowMinTime_ = HFTimeInWindowParams.getParameter<std::vector<double> >("hfshortMinWindowTime");
57  HFshortwindowMaxTime_ = HFTimeInWindowParams.getParameter<std::vector<double> >("hfshortMaxWindowTime");
58  HFshortwindowEthresh_ = HFTimeInWindowParams.getParameter<double>("hfshortEthresh");
59 }
T getParameter(std::string const &) const
std::vector< double > HFlongwindowMaxTime_
std::vector< double > HFshortwindowMinTime_
std::vector< double > HFlongwindowMinTime_
std::vector< double > HFshortwindowMaxTime_
HcalHFStatusBitFromDigis::~HcalHFStatusBitFromDigis ( )

Definition at line 61 of file HcalHFStatusBitFromDigis.cc.

61 {}

Member Function Documentation

void HcalHFStatusBitFromDigis::hfSetFlagFromDigi ( HFRecHit hf,
const HFDataFrame digi,
const HcalCoder coder,
const HcalCalibrations calib 
)

Definition at line 63 of file HcalHFStatusBitFromDigis.cc.

References HcalCoder::adc2fC(), HcalQIESample::capid(), coef0_, coef1_, coef2_, prof2calltree::cutoff, HcalDetId::depth(), CaloRecHit::energy(), funct::exp(), expectedPeak_, firstSample_, HcalCaloFlagLabels::Fraction2TS, HcalCaloFlagLabels::HFDigiTime, HcalCaloFlagLabels::HFInTimeWindow, HFlongwindowEthresh_, HFlongwindowMaxTime_, HFlongwindowMinTime_, HFshortwindowEthresh_, HFshortwindowMaxTime_, HFshortwindowMinTime_, i, HFRecHit::id(), minthreshold_, VarParsing::mult, HcalCalibrations::pedestal(), recoFirstSample_, recoSamplesToAdd_, HcalCalibrations::respcorrgain(), HFDataFrame::sample(), samplesToAdd_, CaloRecHit::setFlagField(), HFDataFrame::size(), CaloRecHit::time(), and relativeConstraints::value.

Referenced by HcalHitReconstructor::produce().

67 {
68  // The following 3 values are computed using the default reconstruction window (for Shuichi's algorithm)
69  double maxInWindow=-10; // maximum value found in reco window
70  int maxCapid=-1;
71  int maxTS=-1; // time slice where maximum is found
72 
73  // The following 3 values are computed only in the window (firstSample_, firstSample_ + samplesToAdD_), which may not be the same as the default reco window (for Igor's algorithm)
74  double totalCharge=0;
75  double peakCharge=0;
76  double RecomputedEnergy=0;
77 
78  CaloSamples tool;
79  coder.adc2fC(digi,tool);
80 
81  // Compute quantities needed for HFDigiTime, Fraction2TS FLAGS
82  for (int i=0;i<digi.size();++i)
83  {
84  int capid=digi.sample(i).capid();
85  //double value = digi.sample(i).nominal_fC()-calib.pedestal(capid);
86  double value = tool[i]-calib.pedestal(capid);
87  // Find largest value within reconstruction window
89  {
90  // Find largest overall pulse within the full digi, or just the allowed window?
91  if (value>maxInWindow)
92  {
93  maxCapid=capid;
94  maxInWindow=value;
95  maxTS=i;
96  }
97  }
98 
99  // Sum all charge within flagging window, find charge in expected peak time slice
101  {
102  totalCharge+=value;
103  RecomputedEnergy+=value*calib.respcorrgain(capid);
104  if (i==expectedPeak_) peakCharge=value;
105  }
106  } // for (int i=0;i<digi.size();++i)
107 
108  // FLAG: HcalCaloLabel::Fraction2TS
109  // Shuichi's Algorithm: Compare size of peak in digi to charge in TS immediately before peak
110  int TSfrac_counter=1;
111  // get pedestals for each capid -- add 4 to each capid, and then check mod 4.
112  // (This takes care of the case where max capid =0 , and capid-1 would then be negative)
113  if (maxTS>0 &&
114  tool[maxTS]!=calib.pedestal(maxCapid))
115  TSfrac_counter=int(50*((tool[maxTS-1]-calib.pedestal((maxCapid+3)%4))/(tool[maxTS]-calib.pedestal((maxCapid+4)%4)))+1); // 6-bit counter to hold peak ratio info
116  hf.setFlagField(TSfrac_counter, HcalCaloFlagLabels::Fraction2TS,6);
117 
118  // FLAG: HcalCaloLabels::HFDigiTime
119  // Igor's algorithm: compare charge in peak to total charge in window
120  if (RecomputedEnergy>=minthreshold_) // don't set noise flags for cells below a given threshold
121  {
122  // Calculate allowed minimum value of (TS4/TS3+4+5+6):
123  double cutoff=coef0_-exp(coef1_+coef2_*RecomputedEnergy);
124 
125  if (peakCharge/totalCharge<cutoff)
127  }
128 
129  // FLAG: HcalCaloLabels:: HFInTimeWindow
130  // Timing algorithm
131  if (hf.id().depth()==1)
132  {
133  if (hf.energy()>=HFlongwindowEthresh_)
134  {
135  float mult=1./hf.energy();
136  float enPow=1.;
137  float mintime=0;
138  float maxtime=0;
139  for (unsigned int i=0;i<HFlongwindowMinTime_.size();++i)
140  {
141  mintime+=HFlongwindowMinTime_[i]*enPow;
142  maxtime+=HFlongwindowMaxTime_[i]*enPow;
143  enPow*=mult;
144  }
145  if (hf.time()<mintime || hf.time()>maxtime)
147  }
148  }
149  else if (hf.id().depth()==2)
150  {
151  if (hf.energy()>=HFshortwindowEthresh_)
152  {
153  float mult=1./hf.energy();
154  float enPow=1.;
155  float mintime=0;
156  float maxtime=0;
157  for (unsigned int i=0;i<HFshortwindowMinTime_.size();++i)
158  {
159  mintime+=HFshortwindowMinTime_[i]*enPow;
160  maxtime+=HFshortwindowMaxTime_[i]*enPow;
161  enPow*=mult;
162  }
163  if (hf.time()<mintime || hf.time()>maxtime)
165  }
166  }
167 
168  return;
169 }
std::vector< double > HFlongwindowMaxTime_
int i
Definition: DBlmapReader.cc:9
double respcorrgain(int fCapId) const
get response corrected gain for capid=0..3
std::vector< double > HFshortwindowMinTime_
void setFlagField(uint32_t value, int base, int width=1)
Definition: CaloRecHit.cc:22
double pedestal(int fCapId) const
get pedestal for capid=0..3
Exp< T >::type exp(const T &t)
Definition: Exp.h:22
float time() const
Definition: CaloRecHit.h:20
int depth() const
get the tower depth
Definition: HcalDetId.h:42
float energy() const
Definition: CaloRecHit.h:19
std::vector< double > HFlongwindowMinTime_
const HcalQIESample & sample(int i) const
access a sample
Definition: HFDataFrame.h:39
int size() const
total number of samples in the digi
Definition: HFDataFrame.h:26
int capid() const
get the Capacitor id
Definition: HcalQIESample.h:28
virtual void adc2fC(const HBHEDataFrame &df, CaloSamples &lf) const =0
std::vector< double > HFshortwindowMaxTime_
HcalDetId id() const
get the id
Definition: HFRecHit.h:21
void HcalHFStatusBitFromDigis::resetTimeSamples ( int  firstSample,
int  samplesToAdd 
)
inline

Member Data Documentation

double HcalHFStatusBitFromDigis::coef0_
private

Definition at line 54 of file HcalHFStatusBitFromDigis.h.

Referenced by HcalHFStatusBitFromDigis(), and hfSetFlagFromDigi().

double HcalHFStatusBitFromDigis::coef1_
private

Definition at line 55 of file HcalHFStatusBitFromDigis.h.

Referenced by HcalHFStatusBitFromDigis(), and hfSetFlagFromDigi().

double HcalHFStatusBitFromDigis::coef2_
private

Definition at line 56 of file HcalHFStatusBitFromDigis.h.

Referenced by HcalHFStatusBitFromDigis(), and hfSetFlagFromDigi().

int HcalHFStatusBitFromDigis::expectedPeak_
private

Definition at line 50 of file HcalHFStatusBitFromDigis.h.

Referenced by HcalHFStatusBitFromDigis(), and hfSetFlagFromDigi().

int HcalHFStatusBitFromDigis::firstSample_
private
double HcalHFStatusBitFromDigis::HFlongwindowEthresh_
private

Definition at line 59 of file HcalHFStatusBitFromDigis.h.

Referenced by HcalHFStatusBitFromDigis(), and hfSetFlagFromDigi().

std::vector<double> HcalHFStatusBitFromDigis::HFlongwindowMaxTime_
private

Definition at line 61 of file HcalHFStatusBitFromDigis.h.

Referenced by HcalHFStatusBitFromDigis(), and hfSetFlagFromDigi().

std::vector<double> HcalHFStatusBitFromDigis::HFlongwindowMinTime_
private

Definition at line 60 of file HcalHFStatusBitFromDigis.h.

Referenced by HcalHFStatusBitFromDigis(), and hfSetFlagFromDigi().

double HcalHFStatusBitFromDigis::HFshortwindowEthresh_
private

Definition at line 62 of file HcalHFStatusBitFromDigis.h.

Referenced by HcalHFStatusBitFromDigis(), and hfSetFlagFromDigi().

std::vector<double> HcalHFStatusBitFromDigis::HFshortwindowMaxTime_
private

Definition at line 64 of file HcalHFStatusBitFromDigis.h.

Referenced by HcalHFStatusBitFromDigis(), and hfSetFlagFromDigi().

std::vector<double> HcalHFStatusBitFromDigis::HFshortwindowMinTime_
private

Definition at line 63 of file HcalHFStatusBitFromDigis.h.

Referenced by HcalHFStatusBitFromDigis(), and hfSetFlagFromDigi().

double HcalHFStatusBitFromDigis::minthreshold_
private

Definition at line 43 of file HcalHFStatusBitFromDigis.h.

Referenced by HcalHFStatusBitFromDigis(), and hfSetFlagFromDigi().

int HcalHFStatusBitFromDigis::recoFirstSample_
private

Definition at line 45 of file HcalHFStatusBitFromDigis.h.

Referenced by HcalHFStatusBitFromDigis(), and hfSetFlagFromDigi().

int HcalHFStatusBitFromDigis::recoSamplesToAdd_
private

Definition at line 46 of file HcalHFStatusBitFromDigis.h.

Referenced by HcalHFStatusBitFromDigis(), and hfSetFlagFromDigi().

int HcalHFStatusBitFromDigis::samplesToAdd_
private