diff --git a/EventFilter/HcalRawToDigi/plugins/BuildFile.xml b/EventFilter/HcalRawToDigi/plugins/BuildFile.xml index d4f72086ce85b..54453a383887f 100644 --- a/EventFilter/HcalRawToDigi/plugins/BuildFile.xml +++ b/EventFilter/HcalRawToDigi/plugins/BuildFile.xml @@ -13,7 +13,7 @@ - + diff --git a/EventFilter/HcalRawToDigi/plugins/HBHEstuckADCfilter.cc b/EventFilter/HcalRawToDigi/plugins/HBHEstuckADCfilter.cc new file mode 100644 index 0000000000000..32098fb1b4040 --- /dev/null +++ b/EventFilter/HcalRawToDigi/plugins/HBHEstuckADCfilter.cc @@ -0,0 +1,94 @@ +// simple filter slecting events with all-equal 8 ADC counts > threshold +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/one/EDFilter.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Utilities/interface/ESGetToken.h" +#include "DataFormats/HcalDigi/interface/HcalDigiCollections.h" +#include "DataFormats/HcalDigi/interface/QIE11DataFrame.h" +#include "DataFormats/HcalDetId/interface/HcalGenericDetId.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include + +class HBHEstuckADCfilter : public edm::one::EDFilter<> { +public: + explicit HBHEstuckADCfilter(const edm::ParameterSet&); + ~HBHEstuckADCfilter() override; + + static void fillDescriptions(edm::ConfigurationDescriptions&); + +private: + bool filter(edm::Event&, const edm::EventSetup&) override; + void endJob() override; + + edm::EDGetTokenT tok_qie11_; + int thresholdADC_; + bool writeList_; + std::ofstream outfile_; +}; + +HBHEstuckADCfilter::HBHEstuckADCfilter(const edm::ParameterSet& conf) + : tok_qie11_(consumes(conf.getParameter("digiLabel"))), + thresholdADC_(conf.getParameter("thresholdADC")), + writeList_(conf.getParameter("writeList")) { + if (writeList_) + outfile_.open("events_list_stuckADC.txt"); +} + +HBHEstuckADCfilter::~HBHEstuckADCfilter() {} + +bool HBHEstuckADCfilter::filter(edm::Event& ev, const edm::EventSetup& set) { + edm::Handle theDigis; + ev.getByToken(tok_qie11_, theDigis); + + bool result = true; + for (QIE11DigiCollection::const_iterator itr = theDigis->begin(); itr != theDigis->end(); itr++) { + int tsize = (*itr).size(); + const QIE11DataFrame frame = *itr; + + bool flag = true; + int adc0 = (frame[0]).adc(); + if (adc0 < thresholdADC_) + flag = false; + else { + for (int i = 1; i < tsize; i++) { + if ((frame[i]).adc() != adc0) { + flag = false; + break; + } + } + } + + // report explicitly + if (flag) { + const HcalDetId cell(itr->id()); + edm::LogWarning("HBHEstuckADCfilter") << "stuck ADC = " << adc0 << " in " << cell << std::endl; + result = false; + } + } + if (!result && writeList_) + outfile_ << ev.id().run() << ":" << ev.luminosityBlock() << ":" << ev.id().event() << std::endl; + + return result; +} + +void HBHEstuckADCfilter::endJob() { + if (writeList_) + outfile_.close(); +} + +void HBHEstuckADCfilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("digiLabel", edm::InputTag("hcalDigis")); + desc.add("thresholdADC", 100); + desc.add("writeList", true); + descriptions.add("hbhestuckADCfilter", desc); +} + +//define as a plug-in +DEFINE_FWK_MODULE(HBHEstuckADCfilter); diff --git a/EventFilter/HcalRawToDigi/python/HBHEstuckADCfilter_cfi.py b/EventFilter/HcalRawToDigi/python/HBHEstuckADCfilter_cfi.py new file mode 100644 index 0000000000000..f27cd9aef86a8 --- /dev/null +++ b/EventFilter/HcalRawToDigi/python/HBHEstuckADCfilter_cfi.py @@ -0,0 +1,5 @@ +import FWCore.ParameterSet.Config as cms + +import EventFilter.HcalRawToDigi.hbhestuckADCfilter_cfi +stuckADCfilter = EventFilter.HcalRawToDigi.hbhestuckADCfilter_cfi.hbhestuckADCfilter.clone() +stuckADCfilter.thresholdADC = 100