CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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 10 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 25 of file HBHETimeProfileStatusBitSetter.cc.

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

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

Definition at line 49 of file HBHETimeProfileStatusBitSetter.cc.

49 {}

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 64 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_, and R2Min_.

66  {
67  bool Bits[4] = {false, false, false, false};
68  std::vector<HBHEDataFrame> digi(udigi);
69  std::sort(digi.begin(), digi.end(), compareDigiEnergy); // sort digis according to energies
70  std::vector<double> PulseShape; // store fC values for each time slice
71  int DigiSize = 0;
72  // int LeadingEta=0;
73  int LeadingPhi = 0;
74  bool FoundLeadingChannel = false;
75  for (std::vector<HBHEDataFrame>::const_iterator itDigi = digi.begin(); itDigi != digi.end(); itDigi++) {
76  if (!FoundLeadingChannel) {
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  if (!RecHitIndex.empty()) {
90  double FracInLeader = -1;
91  //double Slope=0; // not currently used
92  double R1 = -1;
93  double R2 = -1;
94  double OuterEnergy = -1;
95  double TotalEnergy = 0;
96  int PeakPosition = 0;
97 
98  for (int i = 0; i != DigiSize; i++) {
99  if (PulseShape[i] > PulseShape[PeakPosition])
100  PeakPosition = i;
101  TotalEnergy += PulseShape[i];
102  }
103 
104  if (PeakPosition < (DigiSize - 2)) {
105  R1 = PulseShape[PeakPosition + 1] / PulseShape[PeakPosition];
106  R2 = PulseShape[PeakPosition + 2] / PulseShape[PeakPosition + 1];
107  }
108 
109  FracInLeader = PulseShape[PeakPosition] / TotalEnergy;
110 
111  if ((PeakPosition > 0) && (PeakPosition < (DigiSize - 2))) {
112  OuterEnergy = 1. - ((PulseShape[PeakPosition - 1] + PulseShape[PeakPosition] + PulseShape[PeakPosition + 1] +
113  PulseShape[PeakPosition + 2]) /
114  TotalEnergy);
115  }
116 
117  /* TH1D * HistForFit = new TH1D("HistForFit","HistForFit",DigiSize,0,DigiSize);
118  for(int i=0; i!=DigiSize; i++)
119  {
120  HistForFit->Fill(i,PulseShape[i]);
121  HistForFit->Fit("expo","WWQ","",PeakPosition, DigiSize-1);
122  TF1 * Fit = HistForFit->GetFunction("expo");
123  Slope = Fit->GetParameter("Slope");
124  }
125  delete HistForFit;
126  */
127  if (R1 != -1 && R2 != -1)
128  Bits[0] = (R1Min_ > R1) || (R1Max_ < R1) || (R2Min_ > R2) || (R2Max_ < R2);
129  if (FracInLeader != -1)
130  Bits[1] = (FracInLeader < FracLeaderMin_) || (FracInLeader > FracLeaderMax_);
131  if (OuterEnergy != -1)
132  Bits[2] = (OuterEnergy < OuterMin_) || (OuterEnergy > OuterMax_);
133  // Bits[3] = (SlopeMin_ > Slope) || (SlopeMax_ < Slope);
134  Bits[3] = false;
135 
136  } // if (RecHitIndex.size()>0)
137  else {
138  Bits[0] = false;
139  Bits[1] = false;
140  Bits[2] = false;
141  Bits[3] = true;
142 
143  } // (RecHitIndex.size()==0; no need to set Bit3 true?)
144 
145  for (unsigned int i = 0; i != RecHitIndex.size(); i++) {
146  // Write calculated bit values starting from position FirstBit
147  (*hbhe)[RecHitIndex.at(i)].setFlagField(Bits[0], HcalCaloFlagLabels::HSCP_R1R2);
148  (*hbhe)[RecHitIndex.at(i)].setFlagField(Bits[1], HcalCaloFlagLabels::HSCP_FracLeader);
149  (*hbhe)[RecHitIndex.at(i)].setFlagField(Bits[2], HcalCaloFlagLabels::HSCP_OuterEnergy);
150  (*hbhe)[RecHitIndex.at(i)].setFlagField(Bits[3], HcalCaloFlagLabels::HSCP_ExpFit);
151  }
152 }
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

Definition at line 44 of file HBHETimeProfileStatusBitSetter.h.

References FracLeaderMax_, and FracLeaderMin_.

44  {
45  FracLeaderMin_ = FracLeaderMin;
46  FracLeaderMax_ = FracLeaderMax;
47  }
void HBHETimeProfileStatusBitSetter::SetOuterLimits ( double  OuterMin,
double  OuterMax 
)
inline

Definition at line 52 of file HBHETimeProfileStatusBitSetter.h.

References OuterMax_, and OuterMin_.

void HBHETimeProfileStatusBitSetter::SetSlopeLimits ( double  SlopeMin,
double  SlopeMax 
)
inline

Definition at line 48 of file HBHETimeProfileStatusBitSetter.h.

References SlopeMax_, and SlopeMin_.

double HBHETimeProfileStatusBitSetter::TotalEnergyInDataFrame ( const HBHEDataFrame x)
inlineprivate

Definition at line 66 of file HBHETimeProfileStatusBitSetter.h.

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

66  {
67  double Total = 0;
68  for (int i = 0; i != x.size(); Total += x.sample(i++).nominal_fC())
69  ;
70  return Total;
71  }
constexpr HcalQIESample const & sample(int i) const
access a sample
Definition: HBHEDataFrame.h:40
constexpr double nominal_fC() const
get the nominal FC (no calibrations applied)
Definition: HcalQIESample.h:45
constexpr int size() const
total number of samples in the digi
Definition: HBHEDataFrame.h:27

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