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