CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
HBHETimeProfileStatusBitSetter Class Reference

#include <HBHETimeProfileStatusBitSetter.h>

Public Member Functions

double EnergyThreshold ()
 
void hbheSetTimeFlagsFromDigi (HBHERecHitCollection *, const std::vector< HBHEDataFrame > &, const std::vector< int > &)
 
 HBHETimeProfileStatusBitSetter ()
 
 HBHETimeProfileStatusBitSetter (double R1Min, double R1Max, double R2Min, double R2Max, double FracLeaderMin, double FracLeaderMax, double SlopeMin, double SlopeMax, double OuterMin, double OuterMax, double EnergyThreshold)
 
void SetExpLimits (double R1Min, double R1Max, double R2Min, double R2Max)
 
void SetFracLeaderLimits (double FracLeaderMin, double FracLeaderMax)
 
void SetOuterLimits (double OuterMin, double OuterMax)
 
void SetSlopeLimits (double SlopeMin, double SlopeMax)
 
 ~HBHETimeProfileStatusBitSetter ()
 

Private Member Functions

double TotalEnergyInDataFrame (const HBHEDataFrame &x)
 

Private Attributes

double EnergyThreshold_
 
double FracLeaderMax_
 
double FracLeaderMin_
 
double OuterMax_
 
double OuterMin_
 
double R1Max_
 
double R1Min_
 
double R2Max_
 
double R2Min_
 
double SlopeMax_
 
double SlopeMin_
 

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.

Author
B Jones – University of Bristol / University of Maryland

Definition at line 15 of file HBHETimeProfileStatusBitSetter.h.

Constructor & Destructor Documentation

HBHETimeProfileStatusBitSetter::HBHETimeProfileStatusBitSetter ( )

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

Definition at line 11 of file HBHETimeProfileStatusBitSetter.cc.

References EnergyThreshold_, FracLeaderMax_, FracLeaderMin_, OuterMax_, OuterMin_, R1Max_, R1Min_, R2Max_, R2Min_, SlopeMax_, and SlopeMin_.

HBHETimeProfileStatusBitSetter::HBHETimeProfileStatusBitSetter ( double  R1Min,
double  R1Max,
double  R2Min,
double  R2Max,
double  FracLeaderMin,
double  FracLeaderMax,
double  SlopeMin,
double  SlopeMax,
double  OuterMin,
double  OuterMax,
double  EnergyThreshold 
)

Definition at line 27 of file HBHETimeProfileStatusBitSetter.cc.

References EnergyThreshold(), EnergyThreshold_, FracLeaderMax_, FracLeaderMin_, OuterMax_, OuterMin_, R1Max_, R1Min_, R2Max_, R2Min_, SlopeMax_, and SlopeMin_.

33 {
34  R1Min_ = R1Min;
35  R1Max_ = R1Max;
36  R2Min_ = R2Min;
37  R2Max_ = R2Max;
38  FracLeaderMin_ = FracLeaderMin;
39  FracLeaderMax_ = FracLeaderMax;
40  SlopeMin_ = SlopeMin;
41  SlopeMax_ = SlopeMax;
42  OuterMin_ = OuterMin;
43  OuterMax_ = OuterMax;
45 }
HBHETimeProfileStatusBitSetter::~HBHETimeProfileStatusBitSetter ( )

Member Function Documentation

double HBHETimeProfileStatusBitSetter::EnergyThreshold ( )
inline
void HBHETimeProfileStatusBitSetter::hbheSetTimeFlagsFromDigi ( HBHERecHitCollection hbhe,
const std::vector< HBHEDataFrame > &  udigi,
const std::vector< int > &  RecHitIndex 
)

Definition at line 62 of file HBHETimeProfileStatusBitSetter.cc.

References funct::abs(), FracLeaderMax_, HcalCaloFlagLabels::HSCP_ExpFit, HcalCaloFlagLabels::HSCP_FracLeader, HcalCaloFlagLabels::HSCP_OuterEnergy, HcalCaloFlagLabels::HSCP_R1R2, mps_fire::i, OuterMax_, R1Max_, R1Min_, R2Max_, R2Min_, and jetUpdater_cfi::sort.

63 {
64 
65  bool Bits[4]={false, false, false, false};
66  std::vector<HBHEDataFrame> digi(udigi);
67  std::sort(digi.begin(), digi.end(), compareDigiEnergy); // sort digis according to energies
68  std::vector<double> PulseShape; // store fC values for each time slice
69  int DigiSize=0;
70  // int LeadingEta=0;
71  int LeadingPhi=0;
72  bool FoundLeadingChannel=false;
73  for(std::vector<HBHEDataFrame>::const_iterator itDigi = digi.begin(); itDigi!=digi.end(); itDigi++)
74  {
75  if(!FoundLeadingChannel)
76  {
77  // LeadingEta = itDigi->id().ieta();
78  LeadingPhi = itDigi->id().iphi();
79  DigiSize=(*itDigi).size();
80  PulseShape.clear();
81  PulseShape.resize(DigiSize,0);
82  FoundLeadingChannel=true;
83  }
84  if(abs(LeadingPhi - itDigi->id().iphi())<2)
85  for(int i=0; i!=DigiSize; i++)
86  PulseShape[i]+=itDigi->sample(i).nominal_fC();
87 
88  }
89 
90 
91 
92  if(!RecHitIndex.empty())
93  {
94  double FracInLeader=-1;
95  //double Slope=0; // not currently used
96  double R1=-1;
97  double R2=-1;
98  double OuterEnergy=-1;
99  double TotalEnergy=0;
100  int PeakPosition=0;
101 
102  for(int i=0; i!=DigiSize; i++)
103  {
104  if(PulseShape[i]>PulseShape[PeakPosition])
105  PeakPosition=i;
106  TotalEnergy+=PulseShape[i];
107  }
108 
109 
110  if(PeakPosition < (DigiSize-2))
111  {
112  R1 = PulseShape[PeakPosition+1]/PulseShape[PeakPosition];
113  R2 = PulseShape[PeakPosition+2]/PulseShape[PeakPosition+1];
114  }
115 
116  FracInLeader = PulseShape[PeakPosition]/TotalEnergy;
117 
118  if((PeakPosition > 0) && (PeakPosition < (DigiSize-2)))
119  {
120  OuterEnergy = 1. -((PulseShape[PeakPosition - 1] +
121  PulseShape[PeakPosition] +
122  PulseShape[PeakPosition + 1] +
123  PulseShape[PeakPosition + 2] )
124  / TotalEnergy);
125 
126  }
127 
128  /* TH1D * HistForFit = new TH1D("HistForFit","HistForFit",DigiSize,0,DigiSize);
129  for(int i=0; i!=DigiSize; i++)
130  {
131  HistForFit->Fill(i,PulseShape[i]);
132  HistForFit->Fit("expo","WWQ","",PeakPosition, DigiSize-1);
133  TF1 * Fit = HistForFit->GetFunction("expo");
134  Slope = Fit->GetParameter("Slope");
135  }
136  delete HistForFit;
137  */
138  if (R1!=-1 && R2!=-1)
139  Bits[0] = (R1Min_ > R1) || (R1Max_ < R1) || (R2Min_ > R2) || (R2Max_ < R2);
140  if (FracInLeader!=-1)
141  Bits[1] = (FracInLeader < FracLeaderMin_) || (FracInLeader > FracLeaderMax_);
142  if (OuterEnergy!=-1)
143  Bits[2] = (OuterEnergy < OuterMin_) || (OuterEnergy > OuterMax_);
144  // Bits[3] = (SlopeMin_ > Slope) || (SlopeMax_ < Slope);
145  Bits[3] = false;
146 
147  } // if (RecHitIndex.size()>0)
148  else
149  {
150 
151  Bits[0]=false;
152  Bits[1]=false;
153  Bits[2]=false;
154  Bits[3]=true;
155 
156  } // (RecHitIndex.size()==0; no need to set Bit3 true?)
157 
158  for(unsigned int i=0; i!=RecHitIndex.size(); i++)
159  {
160 
161  // Write calculated bit values starting from position FirstBit
162  (*hbhe)[RecHitIndex.at(i)].setFlagField(Bits[0],HcalCaloFlagLabels::HSCP_R1R2);
163  (*hbhe)[RecHitIndex.at(i)].setFlagField(Bits[1],HcalCaloFlagLabels::HSCP_FracLeader);
164  (*hbhe)[RecHitIndex.at(i)].setFlagField(Bits[2],HcalCaloFlagLabels::HSCP_OuterEnergy);
165  (*hbhe)[RecHitIndex.at(i)].setFlagField(Bits[3],HcalCaloFlagLabels::HSCP_ExpFit);
166 
167  }
168 
169 
170 
171 }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
void HBHETimeProfileStatusBitSetter::SetExpLimits ( double  R1Min,
double  R1Max,
double  R2Min,
double  R2Max 
)
inline
void HBHETimeProfileStatusBitSetter::SetFracLeaderLimits ( double  FracLeaderMin,
double  FracLeaderMax 
)
inline
void HBHETimeProfileStatusBitSetter::SetOuterLimits ( double  OuterMin,
double  OuterMax 
)
inline
void HBHETimeProfileStatusBitSetter::SetSlopeLimits ( double  SlopeMin,
double  SlopeMax 
)
inline
double HBHETimeProfileStatusBitSetter::TotalEnergyInDataFrame ( const HBHEDataFrame x)
inlineprivate

Definition at line 53 of file HBHETimeProfileStatusBitSetter.h.

References mps_fire::i, HcalQIESample::nominal_fC(), HBHEDataFrame::sample(), and HBHEDataFrame::size().

53  {
54  double Total=0;
55  for(int i=0; i!=x.size(); Total += x.sample(i++).nominal_fC());
56  return Total;
57  }
int size() const
total number of samples in the digi
Definition: HBHEDataFrame.h:31
constexpr double nominal_fC() const
get the nominal FC (no calibrations applied)
Definition: HcalQIESample.h:61
HcalQIESample const & sample(int i) const
access a sample
Definition: HBHEDataFrame.h:44

Member Data Documentation

double HBHETimeProfileStatusBitSetter::EnergyThreshold_
private
double HBHETimeProfileStatusBitSetter::FracLeaderMax_
private
double HBHETimeProfileStatusBitSetter::FracLeaderMin_
private
double HBHETimeProfileStatusBitSetter::OuterMax_
private
double HBHETimeProfileStatusBitSetter::OuterMin_
private
double HBHETimeProfileStatusBitSetter::R1Max_
private
double HBHETimeProfileStatusBitSetter::R1Min_
private
double HBHETimeProfileStatusBitSetter::R2Max_
private
double HBHETimeProfileStatusBitSetter::R2Min_
private
double HBHETimeProfileStatusBitSetter::SlopeMax_
private
double HBHETimeProfileStatusBitSetter::SlopeMin_
private