Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:23:43

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   // ----------member data ---------------------------
0041   edm::EDGetTokenT<edm::View<pat::Jet>> srcJet_;
0042   edm::EDGetTokenT<edm::ValueMap<StoredPileupJetIdentifier>> srcPileupJetId_;
0043 };
0044 
0045 // ------------ method called to produce the data  ------------
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 // ------------ method fills 'descriptions' with the allowed parameters for the module  ------------
0166 void PileupJetIDVarProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0167   //The following says we do not know what parameters are allowed so do no validation
0168   // Please change this to state exactly what you do use, even if it is no parameters
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 //define this as a plug-in
0176 DEFINE_FWK_MODULE(PileupJetIDVarProducer);