CMS 3D CMS Logo

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

#include <HBHETimeProfileStatusBitSetter.h>

Classes

struct  compare_digi_energy
 

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 ( )

Definition at line 47 of file HBHETimeProfileStatusBitSetter.cc.

47 {}

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 57 of file HBHETimeProfileStatusBitSetter.cc.

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

Referenced by HcalHitReconstructor::produce().

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

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

63  {
64  double Total=0;
65  for(int i=0; i!=x.size(); Total += x.sample(i++).nominal_fC());
66  return Total;
67  }
int i
Definition: DBlmapReader.cc:9
int size() const
total number of samples in the digi
Definition: HBHEDataFrame.h:26
const HcalQIESample & sample(int i) const
access a sample
Definition: HBHEDataFrame.h:39
double nominal_fC() const
get the nominal FC (no calibrations applied)

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