File indexing completed on 2023-03-17 10:53:45
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 #include <memory>
0022
0023
0024 #include "FWCore/Framework/interface/Frameworkfwd.h"
0025 #include "FWCore/Framework/interface/stream/EDFilter.h"
0026
0027 #include "FWCore/Framework/interface/Event.h"
0028 #include "FWCore/Framework/interface/MakerMacros.h"
0029
0030 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0031
0032 #include "DataFormats/JetReco/interface/PFJet.h"
0033 #include "DataFormats/ParticleFlowReco/interface/PFCluster.h"
0034 #include "DataFormats/ParticleFlowReco/interface/PFClusterFwd.h"
0035 #include "DataFormats/Math/interface/deltaR.h"
0036
0037 using namespace std;
0038 using namespace edm;
0039 using namespace reco;
0040
0041 class JetHTJetPlusHOFilter : public edm::stream::EDFilter<> {
0042 public:
0043 explicit JetHTJetPlusHOFilter(const edm::ParameterSet&);
0044 ~JetHTJetPlusHOFilter() override;
0045
0046 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0047
0048 private:
0049 bool filter(edm::Event&, const edm::EventSetup&) override;
0050
0051
0052 int Nevt;
0053 int Njetp;
0054 int Npass;
0055 double jtptthr;
0056 double jtetath;
0057 double hothres;
0058 bool isOthHistFill;
0059
0060 edm::EDGetTokenT<reco::PFJetCollection> tok_PFJets_;
0061 edm::EDGetTokenT<reco::PFClusterCollection> tok_hoht_;
0062 };
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075 JetHTJetPlusHOFilter::JetHTJetPlusHOFilter(const edm::ParameterSet& iConfig) {
0076 tok_PFJets_ = consumes<reco::PFJetCollection>(iConfig.getParameter<edm::InputTag>("PFJets"));
0077 tok_hoht_ = consumes<reco::PFClusterCollection>(iConfig.getParameter<edm::InputTag>("particleFlowClusterHO"));
0078
0079
0080 jtptthr = iConfig.getUntrackedParameter<double>("Ptcut", 200.0);
0081 jtetath = iConfig.getUntrackedParameter<double>("Etacut", 1.5);
0082 hothres = iConfig.getUntrackedParameter<double>("HOcut", 8.0);
0083
0084 Nevt = 0;
0085 Njetp = 0;
0086 Npass = 0;
0087 }
0088
0089 JetHTJetPlusHOFilter::~JetHTJetPlusHOFilter() {
0090
0091
0092 }
0093
0094
0095
0096
0097 bool JetHTJetPlusHOFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0098 using namespace std;
0099 using namespace edm;
0100 using namespace reco;
0101 Nevt++;
0102
0103 edm::Handle<reco::PFJetCollection> PFJets;
0104 iEvent.getByToken(tok_PFJets_, PFJets);
0105 bool passed = false;
0106 vector<pair<double, double> > jetdirection;
0107 vector<double> jetspt;
0108 if (PFJets.isValid()) {
0109 for (unsigned jet = 0; jet < PFJets->size(); jet++) {
0110 if (((*PFJets)[jet].pt() < jtptthr) || (abs((*PFJets)[jet].eta()) > jtetath))
0111 continue;
0112
0113 std::pair<double, double> etaphi((*PFJets)[jet].eta(), (*PFJets)[jet].phi());
0114 jetdirection.push_back(etaphi);
0115 jetspt.push_back((*PFJets)[jet].pt());
0116 passed = true;
0117 }
0118 }
0119
0120 if (!passed)
0121 return false;
0122 Njetp++;
0123 bool isJetDir = false;
0124
0125 edm::Handle<PFClusterCollection> hoht;
0126 iEvent.getByToken(tok_hoht_, hoht);
0127 if (hoht.isValid()) {
0128 if (!(*hoht).empty()) {
0129 for (PFClusterCollection::const_iterator ij = (*hoht).begin(); ij != (*hoht).end(); ij++) {
0130 double hoenr = (*ij).energy();
0131 if (hoenr < hothres)
0132 continue;
0133
0134 const math::XYZPoint& cluster_pos = ij->position();
0135
0136 double hoeta = cluster_pos.eta();
0137 double hophi = cluster_pos.phi();
0138
0139 for (unsigned ijet = 0; ijet < jetdirection.size(); ijet++) {
0140 double delta = deltaR2(jetdirection[ijet].first, jetdirection[ijet].second, hoeta, hophi);
0141 if (delta < 0.5) {
0142 isJetDir = true;
0143 break;
0144 }
0145 }
0146 }
0147 }
0148 }
0149
0150 if (isJetDir) {
0151 Npass++;
0152 }
0153
0154 return isJetDir;
0155 }
0156
0157
0158 void JetHTJetPlusHOFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0159
0160
0161 edm::ParameterSetDescription desc;
0162 desc.setUnknown();
0163 descriptions.addDefault(desc);
0164 }
0165
0166
0167 DEFINE_FWK_MODULE(JetHTJetPlusHOFilter);
0168
0169
0170
0171