File indexing completed on 2024-09-07 04:37:20
0001 #include <memory>
0002 #include <vector>
0003
0004 #include "FWCore/Framework/interface/global/EDProducer.h"
0005 #include "FWCore/Framework/interface/Frameworkfwd.h"
0006 #include "FWCore/Framework/interface/Event.h"
0007 #include "FWCore/Framework/interface/MakerMacros.h"
0008 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0009 #include "FWCore/Utilities/interface/StreamID.h"
0010 #include "DataFormats/PatCandidates/interface/Jet.h"
0011 #include "DataFormats/JetReco/interface/PileupJetIdentifier.h"
0012
0013 class PileupJetIDVarProducer : public edm::global::EDProducer<> {
0014 public:
0015 explicit PileupJetIDVarProducer(const edm::ParameterSet& iConfig)
0016 : srcJet_(consumes<edm::View<pat::Jet>>(iConfig.getParameter<edm::InputTag>("srcJet"))),
0017 srcPileupJetId_(
0018 consumes<edm::ValueMap<StoredPileupJetIdentifier>>(iConfig.getParameter<edm::InputTag>("srcPileupJetId"))) {
0019 produces<edm::ValueMap<float>>("dR2Mean");
0020 produces<edm::ValueMap<float>>("majW");
0021 produces<edm::ValueMap<float>>("minW");
0022 produces<edm::ValueMap<float>>("frac01");
0023 produces<edm::ValueMap<float>>("frac02");
0024 produces<edm::ValueMap<float>>("frac03");
0025 produces<edm::ValueMap<float>>("frac04");
0026 produces<edm::ValueMap<float>>("ptD");
0027 produces<edm::ValueMap<float>>("beta");
0028 produces<edm::ValueMap<float>>("pull");
0029 produces<edm::ValueMap<float>>("jetR");
0030 produces<edm::ValueMap<float>>("jetRchg");
0031 produces<edm::ValueMap<int>>("nCharged");
0032 }
0033 ~PileupJetIDVarProducer() override {}
0034
0035 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0036
0037 private:
0038 void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;
0039
0040
0041 edm::EDGetTokenT<edm::View<pat::Jet>> srcJet_;
0042 edm::EDGetTokenT<edm::ValueMap<StoredPileupJetIdentifier>> srcPileupJetId_;
0043 };
0044
0045
0046 void PileupJetIDVarProducer::produce(edm::StreamID streamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const {
0047 auto srcJet = iEvent.getHandle(srcJet_);
0048 const auto& pileupJetIdProd = iEvent.get(srcPileupJetId_);
0049
0050 unsigned int nJet = srcJet->size();
0051
0052 std::vector<float> dR2Mean(nJet, -1);
0053 std::vector<float> majW(nJet, -1);
0054 std::vector<float> minW(nJet, -1);
0055 std::vector<float> frac01(nJet, -1);
0056 std::vector<float> frac02(nJet, -1);
0057 std::vector<float> frac03(nJet, -1);
0058 std::vector<float> frac04(nJet, -1);
0059 std::vector<float> ptD(nJet, -1);
0060 std::vector<float> beta(nJet, -1);
0061 std::vector<float> pull(nJet, -1);
0062 std::vector<float> jetR(nJet, -1);
0063 std::vector<float> jetRchg(nJet, -1);
0064 std::vector<int> nCharged(nJet, -1);
0065
0066 for (unsigned int ij = 0; ij < nJet; ij++) {
0067 auto jet = srcJet->ptrAt(ij);
0068
0069 edm::RefToBase<pat::Jet> jetRef = srcJet->refAt(ij);
0070
0071 dR2Mean[ij] = pileupJetIdProd[jetRef].dR2Mean();
0072 majW[ij] = pileupJetIdProd[jetRef].majW();
0073 minW[ij] = pileupJetIdProd[jetRef].minW();
0074 frac01[ij] = pileupJetIdProd[jetRef].frac01();
0075 frac02[ij] = pileupJetIdProd[jetRef].frac02();
0076 frac03[ij] = pileupJetIdProd[jetRef].frac03();
0077 frac04[ij] = pileupJetIdProd[jetRef].frac04();
0078 ptD[ij] = pileupJetIdProd[jetRef].ptD();
0079 beta[ij] = pileupJetIdProd[jetRef].beta();
0080 pull[ij] = pileupJetIdProd[jetRef].pull();
0081 jetR[ij] = pileupJetIdProd[jetRef].jetR();
0082 jetRchg[ij] = pileupJetIdProd[jetRef].jetRchg();
0083 nCharged[ij] = pileupJetIdProd[jetRef].nCharged();
0084 }
0085
0086 std::unique_ptr<edm::ValueMap<float>> dR2MeanV(new edm::ValueMap<float>());
0087 edm::ValueMap<float>::Filler filler_dR2Mean(*dR2MeanV);
0088 filler_dR2Mean.insert(srcJet, dR2Mean.begin(), dR2Mean.end());
0089 filler_dR2Mean.fill();
0090 iEvent.put(std::move(dR2MeanV), "dR2Mean");
0091
0092 std::unique_ptr<edm::ValueMap<float>> majWV(new edm::ValueMap<float>());
0093 edm::ValueMap<float>::Filler filler_majW(*majWV);
0094 filler_majW.insert(srcJet, majW.begin(), majW.end());
0095 filler_majW.fill();
0096 iEvent.put(std::move(majWV), "majW");
0097
0098 std::unique_ptr<edm::ValueMap<float>> minWV(new edm::ValueMap<float>());
0099 edm::ValueMap<float>::Filler filler_minW(*minWV);
0100 filler_minW.insert(srcJet, minW.begin(), minW.end());
0101 filler_minW.fill();
0102 iEvent.put(std::move(minWV), "minW");
0103
0104 std::unique_ptr<edm::ValueMap<float>> frac01V(new edm::ValueMap<float>());
0105 edm::ValueMap<float>::Filler filler_frac01(*frac01V);
0106 filler_frac01.insert(srcJet, frac01.begin(), frac01.end());
0107 filler_frac01.fill();
0108 iEvent.put(std::move(frac01V), "frac01");
0109
0110 std::unique_ptr<edm::ValueMap<float>> frac02V(new edm::ValueMap<float>());
0111 edm::ValueMap<float>::Filler filler_frac02(*frac02V);
0112 filler_frac02.insert(srcJet, frac02.begin(), frac02.end());
0113 filler_frac02.fill();
0114 iEvent.put(std::move(frac02V), "frac02");
0115
0116 std::unique_ptr<edm::ValueMap<float>> frac03V(new edm::ValueMap<float>());
0117 edm::ValueMap<float>::Filler filler_frac03(*frac03V);
0118 filler_frac03.insert(srcJet, frac03.begin(), frac03.end());
0119 filler_frac03.fill();
0120 iEvent.put(std::move(frac03V), "frac03");
0121
0122 std::unique_ptr<edm::ValueMap<float>> frac04V(new edm::ValueMap<float>());
0123 edm::ValueMap<float>::Filler filler_frac04(*frac04V);
0124 filler_frac04.insert(srcJet, frac04.begin(), frac04.end());
0125 filler_frac04.fill();
0126 iEvent.put(std::move(frac04V), "frac04");
0127
0128 std::unique_ptr<edm::ValueMap<float>> ptDV(new edm::ValueMap<float>());
0129 edm::ValueMap<float>::Filler filler_ptD(*ptDV);
0130 filler_ptD.insert(srcJet, ptD.begin(), ptD.end());
0131 filler_ptD.fill();
0132 iEvent.put(std::move(ptDV), "ptD");
0133
0134 std::unique_ptr<edm::ValueMap<float>> betaV(new edm::ValueMap<float>());
0135 edm::ValueMap<float>::Filler filler_beta(*betaV);
0136 filler_beta.insert(srcJet, beta.begin(), beta.end());
0137 filler_beta.fill();
0138 iEvent.put(std::move(betaV), "beta");
0139
0140 std::unique_ptr<edm::ValueMap<float>> pullV(new edm::ValueMap<float>());
0141 edm::ValueMap<float>::Filler filler_pull(*pullV);
0142 filler_pull.insert(srcJet, pull.begin(), pull.end());
0143 filler_pull.fill();
0144 iEvent.put(std::move(pullV), "pull");
0145
0146 std::unique_ptr<edm::ValueMap<float>> jetRV(new edm::ValueMap<float>());
0147 edm::ValueMap<float>::Filler filler_jetR(*jetRV);
0148 filler_jetR.insert(srcJet, jetR.begin(), jetR.end());
0149 filler_jetR.fill();
0150 iEvent.put(std::move(jetRV), "jetR");
0151
0152 std::unique_ptr<edm::ValueMap<float>> jetRchgV(new edm::ValueMap<float>());
0153 edm::ValueMap<float>::Filler filler_jetRchg(*jetRchgV);
0154 filler_jetRchg.insert(srcJet, jetRchg.begin(), jetRchg.end());
0155 filler_jetRchg.fill();
0156 iEvent.put(std::move(jetRchgV), "jetRchg");
0157
0158 std::unique_ptr<edm::ValueMap<int>> nChargedV(new edm::ValueMap<int>());
0159 edm::ValueMap<int>::Filler filler_nCharged(*nChargedV);
0160 filler_nCharged.insert(srcJet, nCharged.begin(), nCharged.end());
0161 filler_nCharged.fill();
0162 iEvent.put(std::move(nChargedV), "nCharged");
0163 }
0164
0165
0166 void PileupJetIDVarProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0167
0168
0169 edm::ParameterSetDescription desc;
0170 desc.add<edm::InputTag>("srcJet")->setComment("pat::Jet input collection");
0171 desc.add<edm::InputTag>("srcPileupJetId")->setComment("StoredPileupJetIdentifier ValueMap input collection");
0172 descriptions.addWithDefaultLabel(desc);
0173 }
0174
0175
0176 DEFINE_FWK_MODULE(PileupJetIDVarProducer);