CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HBHEStatusBitSetter.cc
Go to the documentation of this file.
5 
7 {
10 
11  for (int iRm=0;iRm<HcalFrontEndId::maxRmIndex;iRm++) {
12  hpdMultiplicity_.push_back(0);
13  }
14 
15  nominalPedestal_=3.0;
18 }
19 
21  double hitEnergyMinimum,
22  int hitMultiplicityThreshold,
23  std::vector<edm::ParameterSet> pulseShapeParameterSets
24  )
25 {
28 
29  for (int iRm=0;iRm<HcalFrontEndId::maxRmIndex;iRm++) {
30  hpdMultiplicity_.push_back(0);
31  }
32 
33  nominalPedestal_=nominalPedestal;
34  hitEnergyMinimum_=hitEnergyMinimum;
35  hitMultiplicityThreshold_=hitMultiplicityThreshold;
36 
37  for (unsigned int iPSet=0;iPSet<pulseShapeParameterSets.size();iPSet++) {
38  edm::ParameterSet pset=pulseShapeParameterSets.at(iPSet);
39  std::vector<double> params=pset.getParameter<std::vector<double> >("pulseShapeParameters");
40  pulseShapeParameters_.push_back(params);
41  }
42 
43 }
44 
46  delete logicalMap_;
47 }
48 
50 {
51  for (unsigned int i=0;i<hpdMultiplicity_.size();i++) hpdMultiplicity_[i]=0;
52 }
53 
55  const HBHEDataFrame& digi,
56  const HcalCoder& coder,
57  const HcalCalibrations& calib,
58  int firstSample,
59  int samplesToAdd
60  )
61 {
62  // get firstSample, samplesToAdd from database for each hit
64  samplesToAdd_ = samplesToAdd;
65 
66  //increment hit multiplicity
67  if (hbhe.energy()>hitEnergyMinimum_) {
68  int index=logicalMap_->getHcalFrontEndId(hbhe.detid()).rmIndex();
69  hpdMultiplicity_.at(index)++;
70  }
71 
72  //set pulse shape bits
73  // Shuichi's algorithm uses the "correct" charge & pedestals, while Ted's uses "nominal" values.
74  // Perhaps we should correct Ted's algorithm in the future, though that will mean re-tuning thresholds for his cuts. -- Jeff, 28 May 2010
75  //double shuichi_charge_total=0.0;
76  double nominal_charge_total=0.0;
77  double charge_max3=-100.0;
78  double charge_late3=-100.0;
79  unsigned int slice_max3=0;
80  unsigned int size=digi.size();
81 
82  CaloSamples tool;
83  coder.adc2fC(digi,tool);
84 
85  // int capid=-1;
86  for (unsigned int iSlice=0;iSlice<size;iSlice++)
87  {
88  // capid = digi.sample(iSlice).capid();
89  //shuichi_charge_total+=tool[iSlice]-calib.pedestal(capid);
90  nominal_charge_total+=digi[iSlice].nominal_fC()-nominalPedestal_;
91 
92  if (iSlice<2) continue;
93  // digi[i].nominal_fC() could be replaced by tool[iSlice], I think... -- Jeff, 11 April 2011
94  double qsum3=digi[iSlice].nominal_fC() + digi[iSlice-1].nominal_fC() + digi[iSlice-2].nominal_fC() - 3*nominalPedestal_;
95  if (qsum3>charge_max3) {
96  charge_max3=qsum3;
97  slice_max3=iSlice;
98  }
99  }
100 
101  if ((4+slice_max3)>size) return;
102  charge_late3=digi[slice_max3+1].nominal_fC() + digi[slice_max3+2].nominal_fC() + digi[slice_max3+3].nominal_fC() - 3*nominalPedestal_;
103 
104  for (unsigned int iCut=0;iCut<pulseShapeParameters_.size();iCut++) {
105  if (pulseShapeParameters_[iCut].size()!=6) continue;
106  if (nominal_charge_total<pulseShapeParameters_[iCut].at(0) || nominal_charge_total>=pulseShapeParameters_[iCut].at(1)) continue;
107  if ( charge_late3< (pulseShapeParameters_[iCut].at(2)+nominal_charge_total*pulseShapeParameters_[iCut].at(3)) ) continue;
108  if ( charge_late3>=(pulseShapeParameters_[iCut].at(4)+nominal_charge_total*pulseShapeParameters_[iCut].at(5)) ) continue;
110  return;
111  }
112 
113 }
114 
116  for (HBHERecHitCollection::iterator iHBHE=rec.begin();iHBHE!=rec.end();++iHBHE) {
117  int index=logicalMap_->getHcalFrontEndId(iHBHE->detid()).rmIndex();
118  if (hpdMultiplicity_.at(index)<hitMultiplicityThreshold_) continue;
119  iHBHE->setFlagField(1,HcalCaloFlagLabels::HBHEHpdHitMultiplicity);
120  }
121 }
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
const DetId & detid() const
Definition: CaloRecHit.h:22
HcalLogicalMap createMap(unsigned int mapIOV=5)
int size() const
total number of samples in the digi
Definition: HBHEDataFrame.h:26
std::vector< int > hpdMultiplicity_
void setFlagField(uint32_t value, int base, int width=1)
Definition: CaloRecHit.cc:20
void SetFlagsFromDigi(HBHERecHit &hbhe, const HBHEDataFrame &digi, const HcalCoder &coder, const HcalCalibrations &calib, int firstSample=3, int samplesToAdd=4)
MVATrainerComputer * calib
Definition: MVATrainer.cc:64
float energy() const
Definition: CaloRecHit.h:19
static const int maxRmIndex
std::vector< T >::iterator iterator
const_iterator end() const
const HcalFrontEndId getHcalFrontEndId(const DetId &)
std::vector< std::vector< double > > pulseShapeParameters_
virtual void adc2fC(const HBHEDataFrame &df, CaloSamples &lf) const =0
HcalLogicalMap * logicalMap_
tuple size
Write out results.
void SetFlagsFromRecHits(HBHERecHitCollection &rec)
const_iterator begin() const
list at
Definition: asciidump.py:428