CMS 3D CMS Logo

HBHEStatusBitSetter.cc
Go to the documentation of this file.
1 #include <cassert>
4 
5 HBHEStatusBitSetter::HBHEStatusBitSetter() : frontEndMap_(nullptr) {
6  nominalPedestal_ = 3.0;
7  hitEnergyMinimum_ = 2.0;
9 }
10 
12  double hitEnergyMinimum,
14  const std::vector<edm::ParameterSet>& pulseShapeParameterSets)
15  : hitEnergyMinimum_(hitEnergyMinimum),
16  hitMultiplicityThreshold_(hitMultiplicityThreshold),
17  nominalPedestal_(nominalPedestal),
18  frontEndMap_(nullptr) {
19  const unsigned sz = pulseShapeParameterSets.size();
20  pulseShapeParameters_.reserve(sz);
21  for (unsigned iPSet = 0; iPSet < sz; iPSet++) {
23  const std::vector<double>& params = pset.getParameter<std::vector<double> >("pulseShapeParameters");
24  pulseShapeParameters_.push_back(params);
25  }
26 }
27 
29 
31  frontEndMap_ = m;
32  hpdMultiplicity_.clear();
33  if (frontEndMap_) {
34  const int sz = frontEndMap_->maxRMIndex();
35  hpdMultiplicity_.reserve(sz);
36  for (int iRm = 0; iRm < sz; iRm++) {
37  hpdMultiplicity_.push_back(0);
38  }
39  }
40 }
41 
43  const unsigned sz = hpdMultiplicity_.size();
44  for (unsigned i = 0; i < sz; i++)
45  hpdMultiplicity_[i] = 0;
46 }
47 
49  if (frontEndMap_ == nullptr) {
50  edm::LogError("HBHEStatusBitSetter") << "No HcalFrontEndMap in rememberHit";
51  return;
52  }
53  //increment hit multiplicity
54  if (hbhe.energy() > hitEnergyMinimum_) {
55  const int index = frontEndMap_->lookupRMIndex(hbhe.detid());
56  hpdMultiplicity_.at(index)++;
57  }
58 }
59 
61  const HBHEDataFrame& digi,
62  const HcalCoder& coder,
63  const HcalCalibrations& calib) {
64  if (frontEndMap_ == nullptr) {
65  edm::LogError("HBHEStatusBitSetter") << "No HcalFrontEndMap in SetFlagsFromDigi";
66  return;
67  }
69 
70  //set pulse shape bits
71  // Shuichi's algorithm uses the "correct" charge & pedestals, while Ted's uses "nominal" values.
72  // Perhaps we should correct Ted's algorithm in the future, though that will mean re-tuning thresholds for his cuts. -- Jeff, 28 May 2010
73  //double shuichi_charge_total=0.0;
74  double nominal_charge_total = 0.0;
75  double charge_max3 = -100.0;
76  double charge_late3 = -100.0;
77  unsigned int slice_max3 = 0;
78  unsigned int size = digi.size();
79 
80  CaloSamples tool;
81  coder.adc2fC(digi, tool);
82 
83  // int capid=-1;
84  for (unsigned int iSlice = 0; iSlice < size; iSlice++) {
85  // capid = digi.sample(iSlice).capid();
86  //shuichi_charge_total+=tool[iSlice]-calib.pedestal(capid);
87  nominal_charge_total += digi[iSlice].nominal_fC() - nominalPedestal_;
88 
89  if (iSlice < 2)
90  continue;
91  // digi[i].nominal_fC() could be replaced by tool[iSlice], I think... -- Jeff, 11 April 2011
92  double qsum3 = digi[iSlice].nominal_fC() + digi[iSlice - 1].nominal_fC() + digi[iSlice - 2].nominal_fC() -
93  3 * nominalPedestal_;
94  if (qsum3 > charge_max3) {
95  charge_max3 = qsum3;
96  slice_max3 = iSlice;
97  }
98  }
99 
100  if ((4 + slice_max3) > size)
101  return;
102  charge_late3 = digi[slice_max3 + 1].nominal_fC() + digi[slice_max3 + 2].nominal_fC() +
103  digi[slice_max3 + 3].nominal_fC() - 3 * nominalPedestal_;
104 
105  for (unsigned int iCut = 0; iCut < pulseShapeParameters_.size(); iCut++) {
106  if (pulseShapeParameters_[iCut].size() != 6)
107  continue;
108  if (nominal_charge_total < pulseShapeParameters_[iCut].at(0) ||
109  nominal_charge_total >= pulseShapeParameters_[iCut].at(1))
110  continue;
111  if (charge_late3 < (pulseShapeParameters_[iCut].at(2) + nominal_charge_total * pulseShapeParameters_[iCut].at(3)))
112  continue;
113  if (charge_late3 >= (pulseShapeParameters_[iCut].at(4) + nominal_charge_total * pulseShapeParameters_[iCut].at(5)))
114  continue;
115  hbhe.setFlagField(1, HcalCaloFlagLabels::HBHEPulseShape);
116  return;
117  }
118 }
119 
121  if (frontEndMap_ == nullptr) {
122  edm::LogError("HBHEStatusBitSetter") << "No HcalFrontEndMap in SetFlagsFromRecHits";
123  return;
124  }
125 
126  for (HBHERecHitCollection::iterator iHBHE = rec.begin(); iHBHE != rec.end(); ++iHBHE) {
127  const int index = frontEndMap_->lookupRMIndex(iHBHE->detid());
129  continue;
130  iHBHE->setFlagField(1, HcalCaloFlagLabels::HBHEHpdHitMultiplicity);
131  }
132 }
HBHEStatusBitSetter::SetFrontEndMap
void SetFrontEndMap(const HcalFrontEndMap *m)
Definition: HBHEStatusBitSetter.cc:30
mps_fire.i
i
Definition: mps_fire.py:428
MessageLogger.h
HBHEStatusBitSetter::hitEnergyMinimum_
double hitEnergyMinimum_
Definition: HBHEStatusBitSetter.h:36
HcalCoder::adc2fC
virtual void adc2fC(const HBHEDataFrame &df, CaloSamples &lf) const =0
HBHEStatusBitSetter::Clear
void Clear()
Definition: HBHEStatusBitSetter.cc:42
HcalFrontEndMap::lookupRMIndex
const int lookupRMIndex(DetId fId) const
Definition: HcalFrontEndMap.cc:63
CalibrationSummaryClient_cfi.params
params
Definition: CalibrationSummaryClient_cfi.py:14
HBHERecHit
Definition: HBHERecHit.h:13
HLT_FULL_cff.nominalPedestal
nominalPedestal
Definition: HLT_FULL_cff.py:8386
edm::SortedCollection
Definition: SortedCollection.h:49
HLT_FULL_cff.hitMultiplicityThreshold
hitMultiplicityThreshold
Definition: HLT_FULL_cff.py:8387
HBHEStatusBitSetter::SetFlagsFromDigi
void SetFlagsFromDigi(HBHERecHit &hbhe, const HBHEDataFrame &digi, const HcalCoder &coder, const HcalCalibrations &calib)
Definition: HBHEStatusBitSetter.cc:60
edm::SortedCollection::begin
const_iterator begin() const
Definition: SortedCollection.h:262
visualization-live-secondInstance_cfg.m
m
Definition: visualization-live-secondInstance_cfg.py:72
HBHEStatusBitSetter::HBHEStatusBitSetter
HBHEStatusBitSetter()
Definition: HBHEStatusBitSetter.cc:5
HcalCaloFlagLabels::HBHEHpdHitMultiplicity
Definition: HcalCaloFlagLabels.h:13
HcalCalibrations
Definition: HcalCalibrations.h:9
HBHEStatusBitSetter::nominalPedestal_
double nominalPedestal_
Definition: HBHEStatusBitSetter.h:38
HBHEStatusBitSetter::~HBHEStatusBitSetter
~HBHEStatusBitSetter()
Definition: HBHEStatusBitSetter.cc:28
calib
Definition: CalibElectron.h:12
HBHEDataFrame
Definition: HBHEDataFrame.h:14
edm::ParameterSet
Definition: ParameterSet.h:47
edm::SortedCollection::iterator
std::vector< T >::iterator iterator
Definition: SortedCollection.h:81
edm::SortedCollection::end
const_iterator end() const
Definition: SortedCollection.h:267
HcalFrontEndMap::maxRMIndex
const int maxRMIndex() const
Definition: HcalFrontEndMap.h:58
CaloSamples
Definition: CaloSamples.h:14
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
HBHEStatusBitSetter::hpdMultiplicity_
std::vector< int > hpdMultiplicity_
Definition: HBHEStatusBitSetter.h:40
HBHEStatusBitSetter::hitMultiplicityThreshold_
int hitMultiplicityThreshold_
Definition: HBHEStatusBitSetter.h:37
photonIsolationHIProducer_cfi.hbhe
hbhe
Definition: photonIsolationHIProducer_cfi.py:8
HBHEDataFrame::size
constexpr int size() const
total number of samples in the digi
Definition: HBHEDataFrame.h:27
HcalCoder
Definition: HcalCoder.h:19
HcalFrontEndMap
Definition: HcalFrontEndMap.h:23
HBHEStatusBitSetter::SetFlagsFromRecHits
void SetFlagsFromRecHits(HBHERecHitCollection &rec)
Definition: HBHEStatusBitSetter.cc:120
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
HBHEStatusBitSetter::frontEndMap_
const HcalFrontEndMap * frontEndMap_
Definition: HBHEStatusBitSetter.h:39
HcalCaloFlagLabels::HBHEPulseShape
Definition: HcalCaloFlagLabels.h:14
HBHEStatusBitSetter::rememberHit
void rememberHit(const HBHERecHit &hbhe)
Definition: HBHEStatusBitSetter.cc:48
HLT_FULL_cff.pulseShapeParameterSets
pulseShapeParameterSets
Definition: HLT_FULL_cff.py:8380
HBHEStatusBitSetter.h
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443
HLT_FULL_cff.hitEnergyMinimum
hitEnergyMinimum
Definition: HLT_FULL_cff.py:8379
HBHEStatusBitSetter::pulseShapeParameters_
std::vector< std::vector< double > > pulseShapeParameters_
Definition: HBHEStatusBitSetter.h:41