test
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
HcalHFStatusBitFromRecHits Class Reference

#include <HcalHFStatusBitFromRecHits.h>

Public Member Functions

double bit ()
 
 HcalHFStatusBitFromRecHits ()
 
 HcalHFStatusBitFromRecHits (double shortR, double shortET, double shortE, double longR, double longET, double longE)
 
void hfSetFlagFromRecHits (HFRecHitCollection &rec, HcalChannelQuality *myqual, const HcalSeverityLevelComputer *mySeverity)
 
double long_energythreshold ()
 
double long_ETthreshold ()
 
double long_hflongshortratio ()
 
void set_long_energythreshold (double x)
 
void set_long_ETthreshold (double x)
 
void set_long_hflongshortratio (double x)
 
void set_short_energythreshold (double x)
 
void set_short_ETthreshold (double x)
 
void set_short_hflongshortratio (double x)
 
double short_energythreshold ()
 
double short_ETthreshold ()
 
double short_hflongshortratio ()
 
 ~HcalHFStatusBitFromRecHits ()
 

Private Attributes

double long_HFlongshortratio_
 
double long_thresholdEnergy_
 
double long_thresholdET_
 
double short_HFlongshortratio_
 
double short_thresholdEnergy_
 
double short_thresholdET_
 

Detailed Description

This class sets status bit in the status words for the revised CaloRecHit objets using comparisons between the rec hit energies of long and short fibers for a given HF (ieat, iphi)

Author
J. Temple – University of Maryland and E. Yazgan

Definition at line 19 of file HcalHFStatusBitFromRecHits.h.

Constructor & Destructor Documentation

HcalHFStatusBitFromRecHits::HcalHFStatusBitFromRecHits ( )

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

Definition at line 9 of file HcalHFStatusBitFromRecHits.cc.

References long_HFlongshortratio_, long_thresholdEnergy_, long_thresholdET_, short_HFlongshortratio_, short_thresholdEnergy_, and short_thresholdET_.

10 {
11  // use simple values in default constructor
14  long_thresholdET_ = 0.5; // default energy requirement
15  short_thresholdET_ = 0.5;
18 }
HcalHFStatusBitFromRecHits::HcalHFStatusBitFromRecHits ( double  shortR,
double  shortET,
double  shortE,
double  longR,
double  longET,
double  longE 
)
HcalHFStatusBitFromRecHits::~HcalHFStatusBitFromRecHits ( )

Definition at line 31 of file HcalHFStatusBitFromRecHits.cc.

31 {}

Member Function Documentation

double HcalHFStatusBitFromRecHits::bit ( )
inline
void HcalHFStatusBitFromRecHits::hfSetFlagFromRecHits ( HFRecHitCollection rec,
HcalChannelQuality myqual,
const HcalSeverityLevelComputer mySeverity 
)

Definition at line 33 of file HcalHFStatusBitFromRecHits.cc.

References funct::abs(), edm::SortedCollection< T, SORT >::begin(), HcalSeverityLevelComputer::dropChannel(), edm::SortedCollection< T, SORT >::end(), HcalChannelStatus::getValue(), HcalCondObjectContainer< Item >::getValues(), HcalForward, HcalCaloFlagLabels::HFLongShort, long_HFlongshortratio_, long_thresholdEnergy_, long_thresholdET_, DetId::rawId(), short_HFlongshortratio_, short_thresholdEnergy_, short_thresholdET_, ntuplemaker::status, and theHFEtaBounds.

36 {
37  // Compares energies from long & short fibers
38  int status;
39  float en, en2;
40  int ieta, iphi, depth;
41  float ratio; // ratio of (L-S)/(L+S) energy magnitudes
42  double coshEta;
43 
44  // Is there a faster way to do this than a double loop?
45  for (HFRecHitCollection::iterator iHF=rec.begin(); iHF!=rec.end();++iHF)
46  {
47  // skip cells that have already been tagged -- shouldn't happen in current algorithm
48  //if (iHF->flagField(HcalCaloFlagLabels::HFLongShort, HcalCaloFlagLabels::HFLongShort+1)) continue;
49 
50  ieta =iHF->id().ieta(); // int between 29-41
51  // eta = average value between cell eta bounds
52  coshEta=fabs(cosh(0.5*(theHFEtaBounds[abs(ieta)-29]+theHFEtaBounds[abs(ieta)-28])));
53 
54  status=0; // status bit for rechit
55 
56  en2=-999; // dummy starting value for partner energy
57  depth=iHF->id().depth();
58  en=iHF->energy(); // energy of current rechit
59 
60  if (depth==1) // check long fiber
61  {
62  if (en<1.2) continue; // never flag long rechits < 1.2 GeV
63  if (long_thresholdEnergy_>0. && en<long_thresholdEnergy_) continue;
64  if (long_thresholdET_>0. && en<long_thresholdET_*coshEta) continue;
65  }
66 
67  else if (depth==2) // check short fiber
68  {
69  if (en<1.8) continue; // never flag short rechits < 1.8 GeV
70  if (short_thresholdEnergy_>0. && en<short_thresholdEnergy_) continue;
71  if (short_thresholdET_>0. && en<short_thresholdET_*coshEta) continue;
72  }
73 
74  iphi =iHF->id().iphi();
75 
76  // Check for cells whose partners have been excluded from the rechit collections
77  // Such cells will not get flagged (since we can't make an L vs. S comparison)
78 
79  HcalDetId partner(HcalForward, ieta, iphi, 3-depth); // if depth=1, 3-depth =2, and vice versa
80  DetId detpartner=DetId(partner);
81  const HcalChannelStatus* partnerstatus=myqual->getValues(detpartner.rawId());
82  if (mySeverity->dropChannel(partnerstatus->getValue() ) ) continue; // partner was dropped; don't set flag
83 
84  // inner loop will find 'partner' channel (same ieta, iphi, different depth)
85  for (HFRecHitCollection::iterator iHF2=rec.begin(); iHF2!=rec.end();++iHF2)
86  {
87  if (iHF2->id().ieta()!=ieta) continue; // require ieta match
88  if (iHF2->id().iphi()!=iphi) continue; // require iphi match
89  if (iHF2->id().depth()==depth) continue; // require short/long combo
90 
91  en2=iHF2->energy();
92 
93  /*
94  We used to use absolute values of energies for ratios, but I don't think we want to do this any more.
95  For example, for a threshold of 0.995, if en=50 and en2=0, the flag would be set.
96  But if en=50 and en2<-0.125, the threshold would not be set if using the absolute values.
97  I don't think we want to have a range of en2 below which the flag is not set.
98  This does mean that we need to be careful not to set the en energy threshold too low,
99  so as to not falsely flag fluctuations (en=2, en2=-0.01, for example), but we should never be setting our
100  thresholds that low.
101  */
102 
103  ratio = (en - en2)/(en + en2);
104 
105  if (depth==1 && ratio>long_HFlongshortratio_)
106  status=1;
107  else if (depth==2 && ratio>short_HFlongshortratio_)
108  status=1;
109  break; // once partner channel found, break out of loop
110  } // inner loop
111 
112  // Consider the case where only one depth present
113  if (en2==-999) // outer rechit has already passed energy, ET thresholds above; no partner cell means this looks like isolated energy in one channel -- flag it!
114  status=1;
115 
116  // flag rechit as potential PMT window hit
117  if (status==1)
118  iHF->setFlagField(status,HcalCaloFlagLabels::HFLongShort, 1);
119  } // outer loop
120  return;
121 } // void HcalHFStatusBitFromRecHits::hfSetFlagFromRecHits(...)
const Item * getValues(DetId fId, bool throwOnFail=true) const
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool dropChannel(const uint32_t &mystatus) const
std::vector< HFRecHit >::iterator iterator
const_iterator end() const
Definition: DetId.h:18
static const double theHFEtaBounds[]
tuple status
Definition: ntuplemaker.py:245
uint32_t getValue() const
const_iterator begin() const
double HcalHFStatusBitFromRecHits::long_energythreshold ( )
inline
double HcalHFStatusBitFromRecHits::long_ETthreshold ( )
inline

Definition at line 37 of file HcalHFStatusBitFromRecHits.h.

References long_thresholdET_.

double HcalHFStatusBitFromRecHits::long_hflongshortratio ( )
inline
void HcalHFStatusBitFromRecHits::set_long_energythreshold ( double  x)
inline

Definition at line 46 of file HcalHFStatusBitFromRecHits.h.

References long_thresholdEnergy_, and x.

void HcalHFStatusBitFromRecHits::set_long_ETthreshold ( double  x)
inline

Definition at line 47 of file HcalHFStatusBitFromRecHits.h.

References long_thresholdET_, and x.

void HcalHFStatusBitFromRecHits::set_long_hflongshortratio ( double  x)
inline

Definition at line 45 of file HcalHFStatusBitFromRecHits.h.

References long_HFlongshortratio_, and x.

void HcalHFStatusBitFromRecHits::set_short_energythreshold ( double  x)
inline

Definition at line 49 of file HcalHFStatusBitFromRecHits.h.

References short_thresholdEnergy_, and x.

void HcalHFStatusBitFromRecHits::set_short_ETthreshold ( double  x)
inline

Definition at line 50 of file HcalHFStatusBitFromRecHits.h.

References short_thresholdET_, and x.

void HcalHFStatusBitFromRecHits::set_short_hflongshortratio ( double  x)
inline

Definition at line 48 of file HcalHFStatusBitFromRecHits.h.

References short_HFlongshortratio_, and x.

double HcalHFStatusBitFromRecHits::short_energythreshold ( )
inline
double HcalHFStatusBitFromRecHits::short_ETthreshold ( )
inline

Definition at line 40 of file HcalHFStatusBitFromRecHits.h.

References short_thresholdET_.

double HcalHFStatusBitFromRecHits::short_hflongshortratio ( )
inline

Member Data Documentation

double HcalHFStatusBitFromRecHits::long_HFlongshortratio_
private
double HcalHFStatusBitFromRecHits::long_thresholdEnergy_
private
double HcalHFStatusBitFromRecHits::long_thresholdET_
private
double HcalHFStatusBitFromRecHits::short_HFlongshortratio_
private
double HcalHFStatusBitFromRecHits::short_thresholdEnergy_
private
double HcalHFStatusBitFromRecHits::short_thresholdET_
private