File indexing completed on 2023-10-25 10:01:00
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #include <iostream>
0018
0019 #include "FWCore/Framework/interface/Frameworkfwd.h"
0020 #include "FWCore/Framework/interface/global/EDFilter.h"
0021 #include "FWCore/Framework/interface/Event.h"
0022 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0023 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0024
0025 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
0026 #include "DataFormats/DetId/interface/DetId.h"
0027 #include "DataFormats/EcalDetId/interface/EEDetId.h"
0028 #include "DataFormats/EcalDetId/interface/EBDetId.h"
0029 #include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
0030
0031 #include "Geometry/CaloTopology/interface/CaloTopology.h"
0032 #include "Geometry/Records/interface/CaloTopologyRecord.h"
0033
0034 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
0035
0036 using namespace std;
0037
0038 class EcalBadCalibFilter : public edm::global::EDFilter<> {
0039 public:
0040 explicit EcalBadCalibFilter(const edm::ParameterSet& iConfig);
0041 ~EcalBadCalibFilter() override {}
0042
0043 private:
0044
0045
0046 bool filter(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const override;
0047
0048
0049
0050 const edm::EDGetTokenT<EcalRecHitCollection> ecalRHSrcToken_;
0051 const edm::ESGetToken<CaloGeometry, CaloGeometryRecord> geoToken_;
0052
0053
0054 const double ecalMin_;
0055
0056 const std::vector<unsigned int> baddetEcal_;
0057
0058 const bool taggingMode_;
0059 const bool debug_;
0060 };
0061
0062
0063 EcalBadCalibFilter::EcalBadCalibFilter(const edm::ParameterSet& iConfig)
0064 : ecalRHSrcToken_(consumes<EcalRecHitCollection>(iConfig.getParameter<edm::InputTag>("EcalRecHitSource"))),
0065 geoToken_(esConsumes()),
0066 ecalMin_(iConfig.getParameter<double>("ecalMinEt")),
0067 baddetEcal_(iConfig.getParameter<std::vector<unsigned int> >("baddetEcal")),
0068 taggingMode_(iConfig.getParameter<bool>("taggingMode")),
0069 debug_(iConfig.getParameter<bool>("debug")) {
0070 produces<bool>();
0071 }
0072
0073 bool EcalBadCalibFilter::filter(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const {
0074
0075
0076
0077 edm::Handle<EcalRecHitCollection> ecalRHs;
0078 iEvent.getByToken(ecalRHSrcToken_, ecalRHs);
0079
0080
0081 const CaloGeometry& geo = iSetup.getData(geoToken_);
0082
0083
0084 bool pass = true;
0085
0086 for (const auto ecalit : baddetEcal_) {
0087 DetId ecaldet(ecalit);
0088
0089 if (ecaldet.rawId() == 0)
0090 continue;
0091
0092
0093 EcalRecHitCollection::const_iterator ecalhit = ecalRHs->find(ecaldet);
0094
0095 if (ecalhit == ecalRHs->end())
0096 continue;
0097
0098
0099 if (ecalhit->id().rawId() == 0 || ecalhit->id().rawId() != ecaldet.rawId()) {
0100 continue;
0101 }
0102
0103
0104 float ene = 0;
0105 float et = 0;
0106
0107
0108 ene = ecalhit->energy();
0109
0110
0111 const GlobalPoint& posecal = geo.getPosition(ecaldet);
0112 float pf = posecal.perp() / posecal.mag();
0113 et = ene * pf;
0114
0115
0116 if (debug_) {
0117
0118
0119 if (ecaldet.subdetId() == 1) {
0120 EBDetId ebdet(ecalit);
0121 int ix = ebdet.ieta();
0122 int iy = ebdet.iphi();
0123 int iz = ebdet.zside();
0124
0125 edm::LogInfo("EcalBadCalibFilter") << "DetId=" << ecaldet.rawId();
0126 edm::LogInfo("EcalBadCalibFilter") << "ieta=" << ix << " iphi=" << iy << " iz=" << iz;
0127 edm::LogInfo("EcalBadCalibFilter") << "Et=" << et << " thresh=" << ecalMin_;
0128 }
0129
0130
0131 else if (ecaldet.subdetId() == 2) {
0132 EEDetId eedet(ecalit);
0133 int ix = eedet.ix();
0134 int iy = eedet.iy();
0135 int iz = eedet.zside();
0136
0137 edm::LogInfo("EcalBadCalibFilter") << "DetId=" << ecaldet.rawId();
0138 edm::LogInfo("EcalBadCalibFilter") << "ix=" << ix << " iy=" << iy << " iz=" << iz;
0139 edm::LogInfo("EcalBadCalibFilter") << "Et=" << et << " thresh=" << ecalMin_;
0140 }
0141 }
0142
0143
0144 if (et > ecalMin_) {
0145 pass = false;
0146 if (debug_) {
0147 edm::LogInfo("EcalBadCalibFilter") << "DUMP EVENT" << std::endl;
0148 }
0149 }
0150 }
0151
0152
0153 if (pass == false && debug_)
0154 edm::LogInfo("EcalBadCalibFilter") << "REJECT EVENT!!!";
0155
0156 iEvent.put(std::make_unique<bool>(pass));
0157
0158 return taggingMode_ || pass;
0159 }
0160
0161 #include "FWCore/Framework/interface/MakerMacros.h"
0162
0163 DEFINE_FWK_MODULE(EcalBadCalibFilter);