CMS 3D CMS Logo

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

#include <HcalNoiseInfoProducer.h>

Inheritance diagram for reco::HcalNoiseInfoProducer:
edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

Public Member Functions

 HcalNoiseInfoProducer (const edm::ParameterSet &)
 
 ~HcalNoiseInfoProducer ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
boost::function< void(const
BranchDescription &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 

Private Member Functions

virtual void beginJob ()
 
virtual void beginRun (edm::Run &, const edm::EventSetup &)
 
virtual void endJob ()
 
virtual void endRun (edm::Run &, const edm::EventSetup &)
 
void fillcalotwrs (edm::Event &, const edm::EventSetup &, HcalNoiseRBXArray &, HcalNoiseSummary &) const
 
void filldigis (edm::Event &, const edm::EventSetup &, HcalNoiseRBXArray &) const
 
void fillOtherSummaryVariables (HcalNoiseSummary &summary, const CommonHcalNoiseRBXData &data) const
 
void fillrechits (edm::Event &, const edm::EventSetup &, HcalNoiseRBXArray &, HcalNoiseSummary &) const
 
void filltracks (edm::Event &, const edm::EventSetup &, HcalNoiseSummary &) const
 
virtual void produce (edm::Event &, const edm::EventSetup &)
 

Private Attributes

HcalNoiseAlgo algo_
 
std::string caloTowerCollName_
 
std::string digiCollName_
 
bool fillCaloTowers_
 
bool fillDigis_
 
bool fillRecHits_
 
bool fillTracks_
 
uint32_t HcalAcceptSeverityLevel_
 
int maxCaloTowerIEta_
 
int maxProblemRBXs_
 
double maxTrackEta_
 
double minHighHitE_
 
double minLowHitE_
 
double minRecHitE_
 
double minTrackPt_
 
std::string recHitCollName_
 
std::string trackCollName_
 
double TS4TS5EnergyThreshold_
 
std::vector< std::pair< double,
double > > 
TS4TS5LowerCut_
 
std::vector< std::pair< double,
double > > 
TS4TS5UpperCut_
 

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
typedef WorkerT< EDProducerWorkerType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDProducer
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::ProducerBase
template<class TProducer , class TMethod >
void callWhenNewProductsRegistered (TProducer *iProd, TMethod iMethod)
 

Detailed Description

Definition at line 38 of file HcalNoiseInfoProducer.h.

Constructor & Destructor Documentation

HcalNoiseInfoProducer::HcalNoiseInfoProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 33 of file HcalNoiseInfoProducer.cc.

References caloTowerCollName_, digiCollName_, fillCaloTowers_, fillDigis_, fillRecHits_, fillTracks_, edm::ParameterSet::getParameter(), HcalAcceptSeverityLevel_, i, maxCaloTowerIEta_, maxProblemRBXs_, maxTrackEta_, minHighHitE_, minLowHitE_, minRecHitE_, minTrackPt_, recHitCollName_, python.multivaluedict::sort(), trackCollName_, TS4TS5EnergyThreshold_, TS4TS5LowerCut_, and TS4TS5UpperCut_.

33  : algo_(iConfig)
34 {
35  // set the parameters
36  fillDigis_ = iConfig.getParameter<bool>("fillDigis");
37  fillRecHits_ = iConfig.getParameter<bool>("fillRecHits");
38  fillCaloTowers_ = iConfig.getParameter<bool>("fillCaloTowers");
39  fillTracks_ = iConfig.getParameter<bool>("fillTracks");
40 
41  maxProblemRBXs_ = iConfig.getParameter<int>("maxProblemRBXs");
42 
43  maxCaloTowerIEta_ = iConfig.getParameter<int>("maxCaloTowerIEta");
44  maxTrackEta_ = iConfig.getParameter<double>("maxTrackEta");
45  minTrackPt_ = iConfig.getParameter<double>("minTrackPt");
46 
47  digiCollName_ = iConfig.getParameter<std::string>("digiCollName");
48  recHitCollName_ = iConfig.getParameter<std::string>("recHitCollName");
49  caloTowerCollName_ = iConfig.getParameter<std::string>("caloTowerCollName");
50  trackCollName_ = iConfig.getParameter<std::string>("trackCollName");
51 
52  minRecHitE_ = iConfig.getParameter<double>("minRecHitE");
53  minLowHitE_ = iConfig.getParameter<double>("minLowHitE");
54  minHighHitE_ = iConfig.getParameter<double>("minHighHitE");
55 
56  HcalAcceptSeverityLevel_ = iConfig.getParameter<uint32_t>("HcalAcceptSeverityLevel");
57 
58  TS4TS5EnergyThreshold_ = iConfig.getParameter<double>("TS4TS5EnergyThreshold");
59 
60  std::vector<double> TS4TS5UpperThresholdTemp = iConfig.getParameter<std::vector<double> >("TS4TS5UpperThreshold");
61  std::vector<double> TS4TS5UpperCutTemp = iConfig.getParameter<std::vector<double> >("TS4TS5UpperCut");
62  std::vector<double> TS4TS5LowerThresholdTemp = iConfig.getParameter<std::vector<double> >("TS4TS5LowerThreshold");
63  std::vector<double> TS4TS5LowerCutTemp = iConfig.getParameter<std::vector<double> >("TS4TS5LowerCut");
64 
65  for(int i = 0; i < (int)TS4TS5UpperThresholdTemp.size() && i < (int)TS4TS5UpperCutTemp.size(); i++)
66  TS4TS5UpperCut_.push_back(std::pair<double, double>(TS4TS5UpperThresholdTemp[i], TS4TS5UpperCutTemp[i]));
67  sort(TS4TS5UpperCut_.begin(), TS4TS5UpperCut_.end());
68 
69  for(int i = 0; i < (int)TS4TS5LowerThresholdTemp.size() && i < (int)TS4TS5LowerCutTemp.size(); i++)
70  TS4TS5LowerCut_.push_back(std::pair<double, double>(TS4TS5LowerThresholdTemp[i], TS4TS5LowerCutTemp[i]));
71  sort(TS4TS5LowerCut_.begin(), TS4TS5LowerCut_.end());
72 
73  // if digis are filled, then rechits must also be filled
74  if(fillDigis_ && !fillRecHits_) {
75  fillRecHits_=true;
76  edm::LogWarning("HCalNoiseInfoProducer") << " forcing fillRecHits to be true if fillDigis is true.\n";
77  }
78 
79  // we produce a vector of HcalNoiseRBXs
80  produces<HcalNoiseRBXCollection>();
81  // we also produce a noise summary
82  produces<HcalNoiseSummary>();
83 }
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
std::vector< std::pair< double, double > > TS4TS5LowerCut_
std::vector< std::pair< double, double > > TS4TS5UpperCut_
HcalNoiseInfoProducer::~HcalNoiseInfoProducer ( )

Definition at line 86 of file HcalNoiseInfoProducer.cc.

87 {
88 }

Member Function Documentation

void HcalNoiseInfoProducer::beginJob ( void  )
privatevirtual

Reimplemented from edm::EDProducer.

Definition at line 164 of file HcalNoiseInfoProducer.cc.

165 {
166  return;
167 }
void HcalNoiseInfoProducer::beginRun ( edm::Run ,
const edm::EventSetup  
)
privatevirtual

Reimplemented from edm::EDProducer.

Definition at line 180 of file HcalNoiseInfoProducer.cc.

181 {
182  return;
183 }
void HcalNoiseInfoProducer::endJob ( void  )
privatevirtual

Reimplemented from edm::EDProducer.

Definition at line 171 of file HcalNoiseInfoProducer.cc.

172 {
173  return;
174 }
void HcalNoiseInfoProducer::endRun ( edm::Run ,
const edm::EventSetup  
)
privatevirtual

Reimplemented from edm::EDProducer.

Definition at line 187 of file HcalNoiseInfoProducer.cc.

188 {
189  return;
190 }
void HcalNoiseInfoProducer::fillcalotwrs ( edm::Event iEvent,
const edm::EventSetup iSetup,
HcalNoiseRBXArray array,
HcalNoiseSummary summary 
) const
private

Definition at line 486 of file HcalNoiseInfoProducer.cc.

References caloTowerCollName_, CaloTower::emEnergy(), HcalNoiseSummary::emenergy_, edm::hlt::Exception, reco::HcalNoiseRBXArray::findHPD(), edm::Event::getByLabel(), CaloTower::hadEnergy(), HcalNoiseSummary::hadenergy_, patZpeak::handle, CaloTower::ietaAbs(), edm::HandleBase::isValid(), maxCaloTowerIEta_, and edm::errors::ProductNotFound.

Referenced by produce().

487 {
488  // get the calotowers
490  iEvent.getByLabel(caloTowerCollName_, handle);
491  if(!handle.isValid()) {
493  << " could not find CaloTowerCollection named " << caloTowerCollName_ << "\n.";
494  return;
495  }
496 
497  summary.emenergy_ = summary.hadenergy_ = 0.0;
498 
499  // loop over all of the calotower information
500  for(CaloTowerCollection::const_iterator it = handle->begin(); it!=handle->end(); ++it) {
501  const CaloTower& twr=(*it);
502 
503  // create a persistent reference to the tower
504  edm::Ref<CaloTowerCollection> myRef(handle, it-handle->begin());
505 
506  // get all of the hpd's that are pointed to by the calotower
507  std::vector<std::vector<HcalNoiseHPD>::iterator> hpditervec;
508  array.findHPD(twr, hpditervec);
509 
510  // loop over the hpd's and add the reference to the RefVectors
511  for(std::vector<std::vector<HcalNoiseHPD>::iterator>::iterator it=hpditervec.begin();
512  it!=hpditervec.end(); ++it)
513  (*it)->calotowers_.push_back(myRef);
514 
515  // skip over anything with |ieta|>maxCaloTowerIEta
516  if(twr.ietaAbs()>maxCaloTowerIEta_) {
517  summary.emenergy_ += twr.emEnergy();
518  summary.hadenergy_ += twr.hadEnergy();
519  }
520  }
521 
522  return;
523 }
std::vector< CaloTower >::const_iterator const_iterator
double emEnergy() const
Definition: CaloTower.h:79
tuple handle
Definition: patZpeak.py:22
std::vector< HcalNoiseHPD >::iterator findHPD(int hpdindex)
bool isValid() const
Definition: HandleBase.h:76
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:355
double hadEnergy() const
Definition: CaloTower.h:80
int ietaAbs() const
Definition: CaloTower.h:155
void HcalNoiseInfoProducer::filldigis ( edm::Event iEvent,
const edm::EventSetup iSetup,
HcalNoiseRBXArray array 
) const
private

Definition at line 285 of file HcalNoiseInfoProducer.cc.

References ecalMGPA::adc(), HcalCoderDb::adc2fC(), reco::HcalNoiseRBX::allCharge_, edm::RefVector< C, T, F >::begin(), reco::HcalNoiseHPD::big5Charge_, reco::HcalNoiseHPD::bigCharge_, cmsDriverOptions::counter, digiCollName_, HcalSeverityLevelComputer::dropChannel(), edm::RefVector< C, T, F >::end(), edm::hlt::Exception, reco::HcalNoiseRBXArray::findHPD(), reco::HcalNoiseRBXArray::findRBX(), edm::EventSetup::get(), edm::Event::getByLabel(), HcalChannelStatus::getValue(), HcalCondObjectContainer< Item >::getValues(), patZpeak::handle, HBHEDataFrame::id(), edm::HandleBase::isValid(), reco::HcalNoiseHPD::maxZeros_, HcalCalibrations::pedestal(), edm::ESHandle< class >::product(), edm::errors::ProductNotFound, DetId::rawId(), reco::HcalNoiseHPD::rechits_, CaloSamples::size(), reco::HcalNoiseHPD::totalZeros_, and HBHEDataFrame::zsMarkAndPass().

Referenced by produce().

286 {
287 
288  // get the conditions and channel quality
289  edm::ESHandle<HcalDbService> conditions;
290  iSetup.get<HcalDbRecord>().get(conditions);
291  const HcalQIEShape* shape = conditions->getHcalShape();
293  iSetup.get<HcalChannelQualityRcd>().get(qualhandle);
294  const HcalChannelQuality* myqual = qualhandle.product();
296  iSetup.get<HcalSeverityLevelComputerRcd>().get(mycomputer);
297  const HcalSeverityLevelComputer* mySeverity = mycomputer.product();
298 
299  // get the digis
301  iEvent.getByLabel(digiCollName_, handle);
302  if(!handle.isValid()) {
303  throw edm::Exception(edm::errors::ProductNotFound) << " could not find HBHEDigiCollection named " << digiCollName_ << "\n.";
304  return;
305  }
306 
307  // loop over all of the digi information
308  for(HBHEDigiCollection::const_iterator it=handle->begin(); it!=handle->end(); ++it) {
309  const HBHEDataFrame &digi=(*it);
310  HcalDetId cell = digi.id();
311  DetId detcell=(DetId)cell;
312 
313  // check on cells to be ignored and dropped
314  const HcalChannelStatus* mydigistatus=myqual->getValues(detcell.rawId());
315  if(mySeverity->dropChannel(mydigistatus->getValue())) continue;
316  if(digi.zsMarkAndPass()) continue;
317 
318  // get the calibrations and coder
319  const HcalCalibrations& calibrations=conditions->getHcalCalibrations(cell);
320  const HcalQIECoder* channelCoder = conditions->getHcalCoder (cell);
321  HcalCoderDb coder (*channelCoder, *shape);
322 
323  // match the digi to an rbx and hpd
324  HcalNoiseRBX &rbx=(*array.findRBX(digi));
325  HcalNoiseHPD &hpd=(*array.findHPD(digi));
326 
327  // determine if the digi is one the highest energy hits in the HPD
328  // this works because the rechits are sorted by energy (see fillrechits() below)
329  bool isBig=false, isBig5=false, isRBX=false;
330  int counter=0;
333  rit!=rechits.end(); ++rit, ++counter) {
334  if((*rit)->id() == digi.id()) {
335  if(counter==0) isBig=isBig5=true; // digi is also the highest energy rechit
336  if(counter<5) isBig5=true; // digi is one of 5 highest energy rechits
337  isRBX=true;
338  }
339  }
340 
341  // loop over each of the digi's time slices
342  int totalzeros=0;
343  CaloSamples tool;
344  coder.adc2fC(digi,tool);
345  for(int ts=0; ts<tool.size(); ++ts) {
346 
347  // count zero's
348  if(digi[ts].adc()==0) {
349  ++hpd.totalZeros_;
350  ++totalzeros;
351  }
352 
353  // get the fC's
354  double corrfc = tool[ts]-calibrations.pedestal(digi[ts].capid());
355 
356  // fill the relevant digi arrays
357  if(isBig) hpd.bigCharge_[ts]+=corrfc;
358  if(isBig5) hpd.big5Charge_[ts]+=corrfc;
359  if(isRBX) rbx.allCharge_[ts]+=corrfc;
360  }
361 
362  // record the maximum number of zero's found
363  if(totalzeros>hpd.maxZeros_)
364  hpd.maxZeros_=totalzeros;
365  }
366 
367  return;
368 }
int adc(sample_type sample)
get the ADC sample (12 bits)
bool zsMarkAndPass() const
was ZS MarkAndPass?
Definition: HBHEDataFrame.h:30
std::vector< T >::const_iterator const_iterator
std::vector< float > bigCharge_
Definition: HcalNoiseHPD.h:134
std::vector< float > big5Charge_
Definition: HcalNoiseHPD.h:135
double pedestal(int fCapId) const
get pedestal for capid=0..3
const_iterator end() const
Termination of iteration.
Definition: RefVector.h:243
const_iterator begin() const
Initialize an iterator over the RefVector.
Definition: RefVector.h:238
edm::RefVector< HBHERecHitCollection > rechits_
Definition: HcalNoiseHPD.h:138
uint32_t rawId() const
get the raw id
Definition: DetId.h:45
HcalNoiseRBXArray::iterator findRBX(int rbxindex)
tuple handle
Definition: patZpeak.py:22
std::vector< HcalNoiseHPD >::iterator findHPD(int hpdindex)
bool dropChannel(const uint32_t &mystatus) const
bool isValid() const
Definition: HandleBase.h:76
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:355
std::vector< float > allCharge_
Definition: HcalNoiseRBX.h:105
Definition: DetId.h:20
int size() const
get the size
Definition: CaloSamples.h:24
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
const HcalDetId & id() const
Definition: HBHEDataFrame.h:22
uint32_t getValue() const
const Item * getValues(DetId fId) const
void HcalNoiseInfoProducer::fillOtherSummaryVariables ( HcalNoiseSummary summary,
const CommonHcalNoiseRBXData data 
) const
private

Definition at line 194 of file HcalNoiseInfoProducer.cc.

References algo_, HcalNoiseSummary::cnthit10_, HcalNoiseSummary::cnthit25_, CommonHcalNoiseRBXData::e10ts(), CommonHcalNoiseRBXData::e2ts(), HcalNoiseSummary::filterstatus_, HcalNoiseSummary::hasBadRBXTS4TS5_, CommonHcalNoiseRBXData::highEHitTimeSqrd(), HcalNoiseSummary::hlnoisetwrs_, CommonHcalNoiseRBXData::HPDEMF(), join(), HcalNoiseSummary::loosenoisetwrs_, CommonHcalNoiseRBXData::lowEHitTimeSqrd(), HcalNoiseSummary::max10_, HcalNoiseSummary::max10GeVHitTime(), HcalNoiseSummary::max25_, HcalNoiseSummary::max25GeVHitTime(), HcalNoiseSummary::maxe10ts_, HcalNoiseSummary::maxE2Over10TS(), HcalNoiseSummary::maxe2ts_, CommonHcalNoiseRBXData::maxHighEHitTime(), HcalNoiseSummary::maxHPDHits(), HcalNoiseSummary::maxhpdhits_, HcalNoiseSummary::maxhpdhitsnoother_, HcalNoiseSummary::maxHPDNoOtherHits(), CommonHcalNoiseRBXData::maxLowEHitTime(), HcalNoiseSummary::maxRBXHits(), HcalNoiseSummary::maxrbxhits_, HcalNoiseSummary::maxZeros(), HcalNoiseSummary::maxzeros_, HcalNoiseSummary::min10_, HcalNoiseSummary::min10GeVHitTime(), HcalNoiseSummary::min25_, HcalNoiseSummary::min25GeVHitTime(), HcalNoiseSummary::mine10ts_, HcalNoiseSummary::minE2Over10TS(), HcalNoiseSummary::mine2ts_, CommonHcalNoiseRBXData::minHighEHitTime(), HcalNoiseSummary::minHPDEMF(), HcalNoiseSummary::minhpdemf_, CommonHcalNoiseRBXData::minLowEHitTime(), HcalNoiseSummary::minRBXEMF(), HcalNoiseSummary::minrbxemf_, CommonHcalNoiseRBXData::numHighEHits(), CommonHcalNoiseRBXData::numHPDHits(), CommonHcalNoiseRBXData::numHPDNoOtherHits(), CommonHcalNoiseRBXData::numLowEHits(), CommonHcalNoiseRBXData::numRBXHits(), CommonHcalNoiseRBXData::numZeros(), HcalNoiseAlgo::passEMFThreshold(), HcalNoiseAlgo::passHighLevelNoiseFilter(), HcalNoiseAlgo::passLooseHits(), HcalNoiseAlgo::passLooseNoiseFilter(), HcalNoiseAlgo::passLooseRatio(), HcalNoiseAlgo::passLooseTiming(), HcalNoiseAlgo::passLooseZeros(), HcalNoiseAlgo::passRatioThreshold(), HcalNoiseAlgo::passTightHits(), HcalNoiseAlgo::passTightNoiseFilter(), HcalNoiseAlgo::passTightRatio(), HcalNoiseAlgo::passTightTiming(), HcalNoiseAlgo::passTightZeros(), CommonHcalNoiseRBXData::PassTS4TS5(), HcalNoiseAlgo::passZerosThreshold(), CommonHcalNoiseRBXData::ratio(), CommonHcalNoiseRBXData::RBXEMF(), CommonHcalNoiseRBXData::rbxTowers(), HcalNoiseSummary::rms10_, HcalNoiseSummary::rms25_, HcalNoiseSummary::tightnoisetwrs_, and CommonHcalNoiseRBXData::validRatio().

Referenced by produce().

195 {
196  // charge ratio
197  if(algo_.passRatioThreshold(data) && data.validRatio()) {
198  if(data.ratio()<summary.minE2Over10TS()) {
199  summary.mine2ts_ = data.e2ts();
200  summary.mine10ts_ = data.e10ts(); }
201  if(data.ratio()>summary.maxE2Over10TS()) {
202  summary.maxe2ts_ = data.e2ts();
203  summary.maxe10ts_ = data.e10ts();
204  }
205  }
206 
207  // ADC zeros
208  if(algo_.passZerosThreshold(data)) {
209  if(data.numZeros()>summary.maxZeros()) {
210  summary.maxzeros_ = data.numZeros();
211  }
212  }
213 
214  // hits count
215  if(data.numHPDHits() > summary.maxHPDHits()) {
216  summary.maxhpdhits_ = data.numHPDHits();
217  }
218  if(data.numRBXHits() > summary.maxRBXHits()) {
219  summary.maxrbxhits_ = data.numRBXHits();
220  }
221  if(data.numHPDNoOtherHits() > summary.maxHPDNoOtherHits()) {
222  summary.maxhpdhitsnoother_ = data.numHPDNoOtherHits();
223  }
224 
225  // TS4TS5
226  if(data.PassTS4TS5() == false)
227  summary.hasBadRBXTS4TS5_ = true;
228 
229  // hit timing
230  if(data.minLowEHitTime()<summary.min10GeVHitTime()) {
231  summary.min10_ = data.minLowEHitTime();
232  }
233  if(data.maxLowEHitTime()>summary.max10GeVHitTime()) {
234  summary.max10_ = data.maxLowEHitTime();
235  }
236  summary.rms10_ += data.lowEHitTimeSqrd();
237  summary.cnthit10_ += data.numLowEHits();
238  if(data.minHighEHitTime()<summary.min25GeVHitTime()) {
239  summary.min25_ = data.minHighEHitTime();
240  }
241  if(data.maxHighEHitTime()>summary.max25GeVHitTime()) {
242  summary.max25_ = data.maxHighEHitTime();
243  }
244  summary.rms25_ += data.highEHitTimeSqrd();
245  summary.cnthit25_ += data.numHighEHits();
246 
247  // EMF
248  if(algo_.passEMFThreshold(data)) {
249  if(summary.minHPDEMF() > data.HPDEMF()) {
250  summary.minhpdemf_ = data.HPDEMF();
251  }
252  if(summary.minRBXEMF() > data.RBXEMF()) {
253  summary.minrbxemf_ = data.RBXEMF();
254  }
255  }
256 
257  // summary flag
258  if(!algo_.passLooseRatio(data)) summary.filterstatus_ |= 0x1;
259  if(!algo_.passLooseHits(data)) summary.filterstatus_ |= 0x2;
260  if(!algo_.passLooseZeros(data)) summary.filterstatus_ |= 0x4;
261  if(!algo_.passLooseTiming(data)) summary.filterstatus_ |= 0x8;
262 
263  if(!algo_.passTightRatio(data)) summary.filterstatus_ |= 0x100;
264  if(!algo_.passTightHits(data)) summary.filterstatus_ |= 0x200;
265  if(!algo_.passTightZeros(data)) summary.filterstatus_ |= 0x400;
266  if(!algo_.passTightTiming(data)) summary.filterstatus_ |= 0x800;
267 
268  if(!algo_.passHighLevelNoiseFilter(data)) summary.filterstatus_ |= 0x10000;
269 
270  // summary refvectors
272  if(!algo_.passLooseNoiseFilter(data))
273  join(summary.loosenoisetwrs_, data.rbxTowers());
274  if(!algo_.passTightNoiseFilter(data))
275  join(summary.tightnoisetwrs_, data.rbxTowers());
277  join(summary.hlnoisetwrs_, data.rbxTowers());
278 
279  return;
280 }
double e10ts(void) const
Definition: HcalNoiseAlgo.h:23
double HPDEMF(void) const
Definition: HcalNoiseAlgo.h:38
double e2ts(void) const
Definition: HcalNoiseAlgo.h:22
edm::RefVector< CaloTowerCollection > hlnoisetwrs_
double lowEHitTimeSqrd(void) const
Definition: HcalNoiseAlgo.h:31
bool passTightRatio(const CommonHcalNoiseRBXData &) const
double minLowEHitTime(void) const
Definition: HcalNoiseAlgo.h:29
bool passLooseRatio(const CommonHcalNoiseRBXData &) const
double maxHighEHitTime(void) const
Definition: HcalNoiseAlgo.h:34
bool passTightTiming(const CommonHcalNoiseRBXData &) const
double maxLowEHitTime(void) const
Definition: HcalNoiseAlgo.h:30
int numLowEHits(void) const
Definition: HcalNoiseAlgo.h:32
double ratio(void) const
Definition: HcalNoiseAlgo.h:21
float maxE2Over10TS(void) const
edm::RefVector< CaloTowerCollection > loosenoisetwrs_
float min25GeVHitTime(void) const
bool passHighLevelNoiseFilter(const CommonHcalNoiseRBXData &) const
double RBXEMF(void) const
Definition: HcalNoiseAlgo.h:37
int numRBXHits(void) const
Definition: HcalNoiseAlgo.h:26
float min10GeVHitTime(void) const
double highEHitTimeSqrd(void) const
Definition: HcalNoiseAlgo.h:35
float minE2Over10TS(void) const
bool passLooseZeros(const CommonHcalNoiseRBXData &) const
int maxRBXHits(void) const
bool passTightZeros(const CommonHcalNoiseRBXData &) const
int numHighEHits(void) const
Definition: HcalNoiseAlgo.h:36
bool passRatioThreshold(const CommonHcalNoiseRBXData &) const
int numHPDNoOtherHits(void) const
Definition: HcalNoiseAlgo.h:27
int numZeros(void) const
Definition: HcalNoiseAlgo.h:28
bool passZerosThreshold(const CommonHcalNoiseRBXData &) const
float minHPDEMF(void) const
bool passLooseNoiseFilter(const CommonHcalNoiseRBXData &) const
edm::RefVector< CaloTowerCollection > rbxTowers(void) const
Definition: HcalNoiseAlgo.h:40
bool passLooseHits(const CommonHcalNoiseRBXData &) const
static std::string join(char **cmd)
Definition: RemoteFile.cc:18
int maxZeros(void) const
edm::RefVector< CaloTowerCollection > tightnoisetwrs_
bool passLooseTiming(const CommonHcalNoiseRBXData &) const
bool passTightNoiseFilter(const CommonHcalNoiseRBXData &) const
int maxHPDNoOtherHits(void) const
double minHighEHitTime(void) const
Definition: HcalNoiseAlgo.h:33
float minRBXEMF(void) const
bool PassTS4TS5(void) const
Definition: HcalNoiseAlgo.h:39
bool passEMFThreshold(const CommonHcalNoiseRBXData &) const
int maxHPDHits(void) const
int numHPDHits(void) const
Definition: HcalNoiseAlgo.h:25
float max25GeVHitTime(void) const
float max10GeVHitTime(void) const
bool validRatio(void) const
Definition: HcalNoiseAlgo.h:24
bool passTightHits(const CommonHcalNoiseRBXData &) const
void HcalNoiseInfoProducer::fillrechits ( edm::Event iEvent,
const edm::EventSetup iSetup,
HcalNoiseRBXArray array,
HcalNoiseSummary summary 
) const
private

Definition at line 372 of file HcalNoiseInfoProducer.cc.

References CaloRecHit::detid(), CaloRecHit::energy(), edm::hlt::Exception, reco::HcalNoiseRBXArray::findHPD(), CaloRecHit::flags(), HcalNoiseSummary::flatnoisee_, HcalNoiseSummary::flatnoiseet_, edm::EventSetup::get(), edm::Event::getByLabel(), CaloGeometry::getPosition(), HcalSeverityLevelComputer::getSeverityLevel(), HcalChannelStatus::getValue(), HcalCondObjectContainer< Item >::getValues(), patZpeak::handle, HcalCaloFlagLabels::HBHEFlatNoise, HcalCaloFlagLabels::HBHEIsolatedNoise, HcalCaloFlagLabels::HBHESpikeNoise, HcalCaloFlagLabels::HBHETriangleNoise, HcalCaloFlagLabels::HBHETS4TS5Noise, HcalAcceptSeverityLevel_, HBHERecHit::id(), HcalNoiseSummary::isolnoisee_, HcalNoiseSummary::isolnoiseet_, edm::HandleBase::isValid(), HcalNoiseSummary::nflatnoise_, HcalNoiseSummary::nisolnoise_, HcalNoiseSummary::nspikenoise_, HcalNoiseSummary::ntrianglenoise_, HcalNoiseSummary::nts4ts5noise_, edm::ESHandle< class >::product(), edm::errors::ProductNotFound, recHitCollName_, HcalSeverityLevelComputer::recoveredRecHit(), reco::HcalNoiseHPD::refrechitset_, HcalNoiseSummary::spikenoisee_, HcalNoiseSummary::spikenoiseet_, HcalNoiseSummary::trianglenoisee_, HcalNoiseSummary::trianglenoiseet_, HcalNoiseSummary::ts4ts5noisee_, and HcalNoiseSummary::ts4ts5noiseet_.

Referenced by produce().

373 {
374  // get the HCAL channel status map
375  edm::ESHandle<HcalChannelQuality> hcalChStatus;
376  iSetup.get<HcalChannelQualityRcd>().get( hcalChStatus );
377  const HcalChannelQuality* dbHcalChStatus = hcalChStatus.product();
378 
379  // get the severity level computer
380  edm::ESHandle<HcalSeverityLevelComputer> hcalSevLvlComputerHndl;
381  iSetup.get<HcalSeverityLevelComputerRcd>().get(hcalSevLvlComputerHndl);
382  const HcalSeverityLevelComputer* hcalSevLvlComputer = hcalSevLvlComputerHndl.product();
383 
384  // get the calo geometry
386  iSetup.get<CaloGeometryRecord>().get(pG);
387  const CaloGeometry* geo = pG.product();
388 
389  // get the rechits
391  iEvent.getByLabel(recHitCollName_, handle);
392  if(!handle.isValid()) {
394  << " could not find HBHERecHitCollection named " << recHitCollName_ << "\n.";
395  return;
396  }
397 
398  // loop over all of the rechit information
399  for(HBHERecHitCollection::const_iterator it=handle->begin(); it!=handle->end(); ++it) {
400  const HBHERecHit &rechit=(*it);
401 
402  // skip bad rechits (other than those flagged by the isolated noise algorithm)
403  const DetId id = rechit.detid();
404  uint32_t recHitFlag = rechit.flags();
405  uint32_t noisebitset = (1 << HcalCaloFlagLabels::HBHEIsolatedNoise);
406  uint32_t flatbitset = (1 << HcalCaloFlagLabels::HBHEFlatNoise);
407  uint32_t spikebitset = (1 << HcalCaloFlagLabels::HBHESpikeNoise);
408  uint32_t trianglebitset = (1 << HcalCaloFlagLabels::HBHETriangleNoise);
409  uint32_t ts4ts5bitset = (1 << HcalCaloFlagLabels::HBHETS4TS5Noise);
410  recHitFlag = (recHitFlag & noisebitset) ? recHitFlag-noisebitset : recHitFlag;
411  const uint32_t dbStatusFlag = dbHcalChStatus->getValues(id)->getValue();
412  int severityLevel = hcalSevLvlComputer->getSeverityLevel(id, recHitFlag, dbStatusFlag);
413  bool isRecovered = hcalSevLvlComputer->recoveredRecHit(id, recHitFlag);
414  if(severityLevel!=0 && !isRecovered && severityLevel>static_cast<int>(HcalAcceptSeverityLevel_)) continue;
415 
416  // if it was ID'd as isolated noise, update the summary object
417  if(rechit.flags() & noisebitset) {
418  summary.nisolnoise_++;
419  summary.isolnoisee_ += rechit.energy();
420  GlobalPoint gp = geo->getPosition(rechit.id());
421  double et = rechit.energy()*gp.perp()/gp.mag();
422  summary.isolnoiseet_ += et;
423  }
424 
425  if(rechit.flags() & flatbitset) {
426  summary.nflatnoise_++;
427  summary.flatnoisee_ += rechit.energy();
428  GlobalPoint gp = geo->getPosition(rechit.id());
429  double et = rechit.energy()*gp.perp()/gp.mag();
430  summary.flatnoiseet_ += et;
431  }
432 
433  if(rechit.flags() & spikebitset) {
434  summary.nspikenoise_++;
435  summary.spikenoisee_ += rechit.energy();
436  GlobalPoint gp = geo->getPosition(rechit.id());
437  double et = rechit.energy()*gp.perp()/gp.mag();
438  summary.spikenoiseet_ += et;
439  }
440 
441  if(rechit.flags() & trianglebitset) {
442  summary.ntrianglenoise_++;
443  summary.trianglenoisee_ += rechit.energy();
444  GlobalPoint gp = geo->getPosition(rechit.id());
445  double et = rechit.energy()*gp.perp()/gp.mag();
446  summary.trianglenoiseet_ += et;
447  }
448 
449  if(rechit.flags() & ts4ts5bitset) {
450  summary.nts4ts5noise_++;
451  summary.ts4ts5noisee_ += rechit.energy();
452  GlobalPoint gp = geo->getPosition(rechit.id());
453  double et = rechit.energy()*gp.perp()/gp.mag();
454  summary.ts4ts5noiseet_ += et;
455  }
456 
457  // find the hpd that the rechit is in
458  HcalNoiseHPD& hpd=(*array.findHPD(rechit));
459 
460  // create a persistent reference to the rechit
461  edm::Ref<HBHERecHitCollection> myRef(handle, it-handle->begin());
462 
463  // store it in a place so that it remains sorted by energy
464  hpd.refrechitset_.insert(myRef);
465 
466  } // end loop over rechits
467 
468  // loop over all HPDs and transfer the information from refrechitset_ to rechits_;
469  for(HcalNoiseRBXArray::iterator rbxit=array.begin(); rbxit!=array.end(); ++rbxit) {
470  for(std::vector<HcalNoiseHPD>::iterator hpdit=rbxit->hpds_.begin(); hpdit!=rbxit->hpds_.end(); ++hpdit) {
471 
472  // loop over all of the entries in the set and add them to rechits_
474  it=hpdit->refrechitset_.begin(); it!=hpdit->refrechitset_.end(); ++it) {
475  hpdit->rechits_.push_back(*it);
476  }
477  }
478  }
479  // now the rechits in all the HPDs are sorted by energy!
480 
481  return;
482 }
T perp() const
Definition: PV3DBase.h:66
const DetId & detid() const
Definition: CaloRecHit.h:21
HcalDetId id() const
get the id
Definition: HBHERecHit.h:21
std::set< edm::Ref< HBHERecHitCollection >, RefHBHERecHitEnergyComparison > refrechitset_
Definition: HcalNoiseHPD.h:142
std::vector< T >::const_iterator const_iterator
T mag() const
Definition: PV3DBase.h:61
float energy() const
Definition: CaloRecHit.h:19
bool recoveredRecHit(const DetId &myid, const uint32_t &myflag) const
uint32_t flags() const
Definition: CaloRecHit.h:22
tuple handle
Definition: patZpeak.py:22
std::vector< HcalNoiseHPD >::iterator findHPD(int hpdindex)
const GlobalPoint & getPosition(const DetId &id) const
Get the position of a given detector id.
Definition: CaloGeometry.cc:68
bool isValid() const
Definition: HandleBase.h:76
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:355
Definition: DetId.h:20
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
int getSeverityLevel(const DetId &myid, const uint32_t &myflag, const uint32_t &mystatus) const
uint32_t getValue() const
const Item * getValues(DetId fId) const
void HcalNoiseInfoProducer::filltracks ( edm::Event iEvent,
const edm::EventSetup iSetup,
HcalNoiseSummary summary 
) const
private

Definition at line 527 of file HcalNoiseInfoProducer.cc.

References reco::TrackBase::eta(), edm::Event::getByLabel(), patZpeak::handle, edm::HandleBase::isValid(), maxTrackEta_, minTrackPt_, reco::TrackBase::p(), reco::TrackBase::pt(), trackCollName_, and HcalNoiseSummary::trackenergy_.

Referenced by produce().

528 {
530  iEvent.getByLabel(trackCollName_, handle);
531 
532  // don't throw exception, just return quietly
533  if(!handle.isValid()) {
534  // throw edm::Exception(edm::errors::ProductNotFound)
535  // << " could not find trackCollection named " << trackCollName_ << "\n.";
536  return;
537  }
538 
539  summary.trackenergy_=0.0;
540  for(reco::TrackCollection::const_iterator iTrack = handle->begin(); iTrack!=handle->end(); ++iTrack) {
541  reco::Track trk=*iTrack;
542  if(trk.pt()<minTrackPt_ || fabs(trk.eta())>maxTrackEta_) continue;
543 
544  summary.trackenergy_ += trk.p();
545  }
546 
547  return;
548 }
double p() const
momentum vector magnitude
Definition: TrackBase.h:129
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:141
double pt() const
track transverse momentum
Definition: TrackBase.h:131
tuple handle
Definition: patZpeak.py:22
bool isValid() const
Definition: HandleBase.h:76
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:355
void HcalNoiseInfoProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
privatevirtual

Implements edm::EDProducer.

Definition at line 97 of file HcalNoiseInfoProducer.cc.

References algo_, runTheMatrix::data, CommonHcalNoiseRBXData::energy(), fillCaloTowers_, fillcalotwrs(), filldigis(), fillDigis_, fillOtherSummaryVariables(), fillrechits(), fillRecHits_, filltracks(), fillTracks_, HcalNoiseAlgo::isProblematic(), maxProblemRBXs_, minHighHitE_, minLowHitE_, minRecHitE_, HcalNoiseSummary::nproblemRBXs_, HcalNoiseAlgo::passHighLevelNoiseFilter(), HcalNoiseAlgo::passLooseNoiseFilter(), HcalNoiseAlgo::passTightNoiseFilter(), edm::Event::put(), summarizeEdmComparisonLogfiles::summary, TS4TS5EnergyThreshold_, TS4TS5LowerCut_, and TS4TS5UpperCut_.

98 {
99  // this is what we're going to actually write to the EDM
100  std::auto_ptr<HcalNoiseRBXCollection> result1(new HcalNoiseRBXCollection);
101  std::auto_ptr<HcalNoiseSummary> result2(new HcalNoiseSummary);
102 
103  // define an empty HcalNoiseRBXArray that we're going to fill
104  HcalNoiseRBXArray rbxarray;
105  HcalNoiseSummary &summary=*result2;
106 
107  // fill them with the various components
108  // digi assumes that rechit information is available
109  if(fillRecHits_) fillrechits(iEvent, iSetup, rbxarray, summary);
110  if(fillDigis_) filldigis(iEvent, iSetup, rbxarray);
111  if(fillCaloTowers_) fillcalotwrs(iEvent, iSetup, rbxarray, summary);
112  if(fillTracks_) filltracks(iEvent, iSetup, summary);
113 
114  // select those RBXs which are interesting
115  // also look for the highest energy RBX
116  HcalNoiseRBXArray::iterator maxit=rbxarray.begin();
117  double maxenergy=-999;
118  bool maxwritten=false;
119  for(HcalNoiseRBXArray::iterator rit = rbxarray.begin(); rit!=rbxarray.end(); ++rit) {
120  HcalNoiseRBX &rbx=(*rit);
123 
124  // find the highest energy rbx
125  if(data.energy()>maxenergy) {
126  maxenergy=data.energy();
127  maxit=rit;
128  maxwritten=false;
129  }
130 
131  // find out if the rbx is problematic/noisy/etc.
132  bool writerbx = algo_.isProblematic(data) || !algo_.passLooseNoiseFilter(data) ||
134 
135  // fill variables in the summary object not filled elsewhere
137 
138  if(writerbx) {
139  summary.nproblemRBXs_++;
140  if(summary.nproblemRBXs_<=maxProblemRBXs_) {
141  result1->push_back(rbx);
142  if(maxit==rit) maxwritten=true;
143  }
144  }
145  } // end loop over rbxs
146 
147  // if we still haven't written the maximum energy rbx, write it now
148  if(!maxwritten) {
149  HcalNoiseRBX &rbx=(*maxit);
150 
151  // add the RBX to the event
152  result1->push_back(rbx);
153  }
154 
155  // put the rbxcollection and summary into the EDM
156  iEvent.put(result1);
157  iEvent.put(result2);
158 
159  return;
160 }
std::vector< HcalNoiseRBX > HcalNoiseRBXCollection
Definition: HcalNoiseRBX.h:26
bool isProblematic(const CommonHcalNoiseRBXData &) const
void fillrechits(edm::Event &, const edm::EventSetup &, HcalNoiseRBXArray &, HcalNoiseSummary &) const
std::vector< std::pair< double, double > > TS4TS5LowerCut_
void filldigis(edm::Event &, const edm::EventSetup &, HcalNoiseRBXArray &) const
void fillcalotwrs(edm::Event &, const edm::EventSetup &, HcalNoiseRBXArray &, HcalNoiseSummary &) const
bool passHighLevelNoiseFilter(const CommonHcalNoiseRBXData &) const
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:84
std::vector< std::pair< double, double > > TS4TS5UpperCut_
bool passLooseNoiseFilter(const CommonHcalNoiseRBXData &) const
bool passTightNoiseFilter(const CommonHcalNoiseRBXData &) const
void filltracks(edm::Event &, const edm::EventSetup &, HcalNoiseSummary &) const
void fillOtherSummaryVariables(HcalNoiseSummary &summary, const CommonHcalNoiseRBXData &data) const

Member Data Documentation

HcalNoiseAlgo reco::HcalNoiseInfoProducer::algo_
private

Definition at line 94 of file HcalNoiseInfoProducer.h.

Referenced by fillOtherSummaryVariables(), and produce().

std::string reco::HcalNoiseInfoProducer::caloTowerCollName_
private

Definition at line 90 of file HcalNoiseInfoProducer.h.

Referenced by fillcalotwrs(), and HcalNoiseInfoProducer().

std::string reco::HcalNoiseInfoProducer::digiCollName_
private

Definition at line 88 of file HcalNoiseInfoProducer.h.

Referenced by filldigis(), and HcalNoiseInfoProducer().

bool reco::HcalNoiseInfoProducer::fillCaloTowers_
private

Definition at line 77 of file HcalNoiseInfoProducer.h.

Referenced by HcalNoiseInfoProducer(), and produce().

bool reco::HcalNoiseInfoProducer::fillDigis_
private

Definition at line 75 of file HcalNoiseInfoProducer.h.

Referenced by HcalNoiseInfoProducer(), and produce().

bool reco::HcalNoiseInfoProducer::fillRecHits_
private

Definition at line 76 of file HcalNoiseInfoProducer.h.

Referenced by HcalNoiseInfoProducer(), and produce().

bool reco::HcalNoiseInfoProducer::fillTracks_
private

Definition at line 78 of file HcalNoiseInfoProducer.h.

Referenced by HcalNoiseInfoProducer(), and produce().

uint32_t reco::HcalNoiseInfoProducer::HcalAcceptSeverityLevel_
private

Definition at line 100 of file HcalNoiseInfoProducer.h.

Referenced by fillrechits(), and HcalNoiseInfoProducer().

int reco::HcalNoiseInfoProducer::maxCaloTowerIEta_
private

Definition at line 84 of file HcalNoiseInfoProducer.h.

Referenced by fillcalotwrs(), and HcalNoiseInfoProducer().

int reco::HcalNoiseInfoProducer::maxProblemRBXs_
private

Definition at line 81 of file HcalNoiseInfoProducer.h.

Referenced by HcalNoiseInfoProducer(), and produce().

double reco::HcalNoiseInfoProducer::maxTrackEta_
private

Definition at line 85 of file HcalNoiseInfoProducer.h.

Referenced by filltracks(), and HcalNoiseInfoProducer().

double reco::HcalNoiseInfoProducer::minHighHitE_
private

Definition at line 93 of file HcalNoiseInfoProducer.h.

Referenced by HcalNoiseInfoProducer(), and produce().

double reco::HcalNoiseInfoProducer::minLowHitE_
private

Definition at line 93 of file HcalNoiseInfoProducer.h.

Referenced by HcalNoiseInfoProducer(), and produce().

double reco::HcalNoiseInfoProducer::minRecHitE_
private

Definition at line 93 of file HcalNoiseInfoProducer.h.

Referenced by HcalNoiseInfoProducer(), and produce().

double reco::HcalNoiseInfoProducer::minTrackPt_
private

Definition at line 86 of file HcalNoiseInfoProducer.h.

Referenced by filltracks(), and HcalNoiseInfoProducer().

std::string reco::HcalNoiseInfoProducer::recHitCollName_
private

Definition at line 89 of file HcalNoiseInfoProducer.h.

Referenced by fillrechits(), and HcalNoiseInfoProducer().

std::string reco::HcalNoiseInfoProducer::trackCollName_
private

Definition at line 91 of file HcalNoiseInfoProducer.h.

Referenced by filltracks(), and HcalNoiseInfoProducer().

double reco::HcalNoiseInfoProducer::TS4TS5EnergyThreshold_
private

Definition at line 96 of file HcalNoiseInfoProducer.h.

Referenced by HcalNoiseInfoProducer(), and produce().

std::vector<std::pair<double, double> > reco::HcalNoiseInfoProducer::TS4TS5LowerCut_
private

Definition at line 98 of file HcalNoiseInfoProducer.h.

Referenced by HcalNoiseInfoProducer(), and produce().

std::vector<std::pair<double, double> > reco::HcalNoiseInfoProducer::TS4TS5UpperCut_
private

Definition at line 97 of file HcalNoiseInfoProducer.h.

Referenced by HcalNoiseInfoProducer(), and produce().