Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:21:14

0001 // -*- C++ -*-
0002 //
0003 // Package:    L1Trigger/L1TNtuples
0004 // Class:      L1JetRecoTreeProducer
0005 //
0006 /**\class L1JetRecoTreeProducer L1JetRecoTreeProducer.cc L1Trigger/L1TNtuples/src/L1JetRecoTreeProducer.cc
0007 
0008  Description: Produces tree containing reco quantities
0009 
0010 
0011 */
0012 
0013 // system include files
0014 #include <memory>
0015 
0016 // framework
0017 #include "FWCore/Framework/interface/Frameworkfwd.h"
0018 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0019 #include "FWCore/Framework/interface/Event.h"
0020 #include "FWCore/Framework/interface/EventSetup.h"
0021 #include "FWCore/Framework/interface/MakerMacros.h"
0022 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0023 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0024 #include "FWCore/Framework/interface/ESHandle.h"
0025 
0026 // cond formats
0027 #include "JetMETCorrections/JetCorrector/interface/JetCorrector.h"
0028 
0029 // data formats
0030 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
0031 #include "DataFormats/JetReco/interface/PFJetCollection.h"
0032 #include "DataFormats/JetReco/interface/JetID.h"
0033 
0034 //taus
0035 #include "DataFormats/TauReco/interface/PFTau.h"
0036 #include "DataFormats/TauReco/interface/PFTauFwd.h"
0037 #include "DataFormats/TauReco/interface/PFTauDiscriminator.h"
0038 
0039 // #include "CommonTools/UtilAlgos/interface/PhysObjectMatcher.h"
0040 // #include "CommonTools/UtilAlgos/interface/MCMatchSelector.h"
0041 // #include "CommonTools/UtilAlgos/interface/DummyMatchSelector.h"
0042 // #include "CommonTools/UtilAlgos/interface/MatchByDRDPt.h"
0043 // #include "DataFormats/TauReco/interface/PFTauDecayMode.h"
0044 // #include "DataFormats/TauReco/interface/PFTauDecayModeFwd.h"
0045 // #include "DataFormats/TauReco/interface/PFTau.h"
0046 
0047 // ROOT output stuff
0048 #include "FWCore/ServiceRegistry/interface/Service.h"
0049 #include "CommonTools/UtilAlgos/interface/TFileService.h"
0050 #include "TH1.h"
0051 #include "TTree.h"
0052 #include "TF1.h"
0053 
0054 //local  data formats
0055 #include "L1Trigger/L1TNtuples/interface/L1AnalysisRecoTau.h"
0056 #include "L1Trigger/L1TNtuples/interface/L1AnalysisRecoMet.h"
0057 
0058 //
0059 // class declaration
0060 //
0061 
0062 class L1TauRecoTreeProducer : public edm::one::EDAnalyzer<edm::one::SharedResources> {
0063 public:
0064   explicit L1TauRecoTreeProducer(const edm::ParameterSet&);
0065   ~L1TauRecoTreeProducer() override;
0066 
0067 private:
0068   void beginJob(void) override;
0069   void analyze(const edm::Event&, const edm::EventSetup&) override;
0070   void endJob() override;
0071 
0072 public:
0073   L1Analysis::L1AnalysisRecoTau* tau;
0074 
0075   L1Analysis::L1AnalysisRecoTauDataFormat* tau_data;
0076 
0077 private:
0078   // output file
0079   edm::Service<TFileService> fs_;
0080 
0081   // tree
0082   TTree* tree_;
0083 
0084   // EDM input tags
0085   edm::EDGetTokenT<reco::PFTauCollection> TauToken_;
0086   edm::EDGetTokenT<reco::PFTauDiscriminator> DMFindingToken_;
0087   edm::EDGetTokenT<reco::PFTauDiscriminator> DMFindingOldToken_;
0088   edm::EDGetTokenT<reco::PFTauDiscriminator> TightIsoToken_;
0089   edm::EDGetTokenT<reco::PFTauDiscriminator> TightRawIsoToken_;
0090   edm::EDGetTokenT<reco::PFTauDiscriminator> LooseIsoToken_;
0091   edm::EDGetTokenT<reco::PFTauDiscriminator> LooseAntiMuonToken_;
0092   edm::EDGetTokenT<reco::PFTauDiscriminator> TightAntiMuonToken_;
0093   edm::EDGetTokenT<reco::PFTauDiscriminator> VLooseAntiElectronToken_;
0094   edm::EDGetTokenT<reco::PFTauDiscriminator> LooseAntiElectronToken_;
0095   edm::EDGetTokenT<reco::PFTauDiscriminator> TightAntiElectronToken_;
0096 
0097   // edm::EDGetTokenT<reco::CaloJetCollection>     caloJetToken_;
0098   // edm::EDGetTokenT<edm::ValueMap<reco::JetID> > caloJetIdToken_;
0099   // edm::EDGetTokenT<reco::JetCorrector>          jetCorrectorToken_;
0100 
0101   // debug stuff
0102   bool caloJetsMissing_;
0103   double jetptThreshold_;
0104   unsigned int maxCl_;
0105   std::string period_;
0106   unsigned int maxTau_;
0107   unsigned int maxVtx_;
0108   unsigned int maxTrk_;
0109 };
0110 
0111 L1TauRecoTreeProducer::L1TauRecoTreeProducer(const edm::ParameterSet& iConfig) : caloJetsMissing_(false) {
0112   period_ = iConfig.getParameter<std::string>("period");
0113 
0114   if (period_ == "2015") {
0115     maxTau_ = iConfig.getParameter<unsigned int>("maxTau");
0116     TauToken_ =
0117         consumes<reco::PFTauCollection>(iConfig.getUntrackedParameter("TauToken", edm::InputTag("hpsPFTauProducer")));
0118     DMFindingToken_ = consumes<reco::PFTauDiscriminator>(iConfig.getUntrackedParameter(
0119         "DMFindingToken", edm::InputTag("hpsPFTauDiscriminationByDecayModeFindingNewDMs")));
0120     DMFindingOldToken_ = consumes<reco::PFTauDiscriminator>(iConfig.getUntrackedParameter(
0121         "DMFindingOldToken", edm::InputTag("hpsPFTauDiscriminationByDecayModeFindingOldDMs")));
0122     TightIsoToken_ = consumes<reco::PFTauDiscriminator>(
0123         iConfig.getUntrackedParameter("TightIsoToken", edm::InputTag("hpsPFTauDiscriminationByTightIsolation")));
0124     TightRawIsoToken_ = consumes<reco::PFTauDiscriminator>(iConfig.getUntrackedParameter(
0125         "TightRawIsoToken", edm::InputTag("hpsPFTauDiscriminationByRawCombinedIsolationDBSumPtCorr3Hits")));
0126     LooseIsoToken_ = consumes<reco::PFTauDiscriminator>(
0127         iConfig.getUntrackedParameter("LooseIsoToken", edm::InputTag("hpsPFTauDiscriminationByLooseIsolation")));
0128     LooseAntiMuonToken_ = consumes<reco::PFTauDiscriminator>(iConfig.getUntrackedParameter(
0129         "LooseAntiMuonToken", edm::InputTag("hpsPFTauDiscriminationByLooseMuonRejection")));
0130     TightAntiMuonToken_ = consumes<reco::PFTauDiscriminator>(iConfig.getUntrackedParameter(
0131         "TightAntiMuonToken", edm::InputTag("hpsPFTauDiscriminationByTightMuonRejection")));
0132     VLooseAntiElectronToken_ = consumes<reco::PFTauDiscriminator>(iConfig.getUntrackedParameter(
0133         "VLooseAntiElectronToken", edm::InputTag("hpsPFTauDiscriminationByMVA5VLooseElectronRejection")));
0134     LooseAntiElectronToken_ = consumes<reco::PFTauDiscriminator>(iConfig.getUntrackedParameter(
0135         "LooseAntiElectronToken", edm::InputTag("hpsPFTauDiscriminationByMVA5LooseElectronRejection")));
0136     TightAntiElectronToken_ = consumes<reco::PFTauDiscriminator>(iConfig.getUntrackedParameter(
0137         "TightAntiElectronToken", edm::InputTag("hpsPFTauDiscriminationByMVA5TightElectronRejection")));
0138   } else if (period_ == "2016") {
0139     maxTau_ = iConfig.getParameter<unsigned int>("maxTau");
0140     TauToken_ =
0141         consumes<reco::PFTauCollection>(iConfig.getUntrackedParameter("TauToken", edm::InputTag("hpsPFTauProducer")));
0142     DMFindingToken_ = consumes<reco::PFTauDiscriminator>(iConfig.getUntrackedParameter(
0143         "DMFindingToken", edm::InputTag("hpsPFTauDiscriminationByDecayModeFindingNewDMs")));
0144     DMFindingOldToken_ = consumes<reco::PFTauDiscriminator>(iConfig.getUntrackedParameter(
0145         "DMFindingOldToken", edm::InputTag("hpsPFTauDiscriminationByDecayModeFindingOldDMs")));
0146     TightIsoToken_ = consumes<reco::PFTauDiscriminator>(iConfig.getUntrackedParameter(
0147         "TightIsoToken", edm::InputTag("hpsPFTauDiscriminationByTightCombinedIsolationDBSumPtCorr3Hits")));
0148     TightRawIsoToken_ = consumes<reco::PFTauDiscriminator>(iConfig.getUntrackedParameter(
0149         "TightRawIsoToken", edm::InputTag("hpsPFTauDiscriminationByRawCombinedIsolationDBSumPtCorr3Hits")));
0150     LooseIsoToken_ = consumes<reco::PFTauDiscriminator>(iConfig.getUntrackedParameter(
0151         "LooseIsoToken", edm::InputTag("hpsPFTauDiscriminationByLooseCombinedIsolationDBSumPtCorr3Hits")));
0152     LooseAntiMuonToken_ = consumes<reco::PFTauDiscriminator>(iConfig.getUntrackedParameter(
0153         "LooseAntiMuonToken", edm::InputTag("hpsPFTauDiscriminationByLooseMuonRejection3")));
0154     TightAntiMuonToken_ = consumes<reco::PFTauDiscriminator>(iConfig.getUntrackedParameter(
0155         "TightAntiMuonToken", edm::InputTag("hpsPFTauDiscriminationByTightMuonRejection3")));
0156     VLooseAntiElectronToken_ = consumes<reco::PFTauDiscriminator>(iConfig.getUntrackedParameter(
0157         "VLooseAntiElectronToken", edm::InputTag("hpsPFTauDiscriminationByMVA6VLooseElectronRejection")));
0158     LooseAntiElectronToken_ = consumes<reco::PFTauDiscriminator>(iConfig.getUntrackedParameter(
0159         "LooseAntiElectronToken", edm::InputTag("hpsPFTauDiscriminationByMVA6LooseElectronRejection")));
0160     TightAntiElectronToken_ = consumes<reco::PFTauDiscriminator>(iConfig.getUntrackedParameter(
0161         "TightAntiElectronToken", edm::InputTag("hpsPFTauDiscriminationByMVA6TightElectronRejection")));
0162   }
0163 
0164   /*  
0165   caloJetToken_ = consumes<reco::CaloJetCollection>(iConfig.getUntrackedParameter("caloJetToken",edm::InputTag("ak4CaloJets")));
0166   //  caloJetIdToken_ = consumes<edm::ValueMap<reco::JetID> >(iConfig.getUntrackedParameter("jetIdToken",edm::InputTag("ak4JetID")));
0167   jetCorrectorToken_ = consumes<reco::JetCorrector>(iConfig.getUntrackedParameter<edm::InputTag>("jetCorrToken"));
0168 
0169   jetptThreshold_ = iConfig.getParameter<double>      ("jetptThreshold");
0170   maxTau_         = iConfig.getParameter<unsigned int>("maxTau");
0171   */
0172 
0173   tau = new L1Analysis::L1AnalysisRecoTau();
0174   tau_data = tau->getData();
0175 
0176   usesResource(TFileService::kSharedResource);
0177   /*
0178   // set up output
0179   */
0180   tree_ = fs_->make<TTree>("TauRecoTree", "TauRecoTree");
0181   //tree_=fs_->make<TTree>("JetRecoTree", "JetRecoTree");
0182   tree_->Branch("Tau", "L1Analysis::L1AnalysisRecoTauDataFormat", &tau_data, 32000, 3);
0183 }
0184 
0185 L1TauRecoTreeProducer::~L1TauRecoTreeProducer() {
0186   // do anything here that needs to be done at desctruction time
0187   // (e.g. close files, deallocate resources etc.)
0188 }
0189 
0190 //
0191 // member functions
0192 //
0193 
0194 // ------------ method called to for each event  ------------
0195 void L1TauRecoTreeProducer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0196   tau->Reset();
0197   edm::Handle<reco::PFTauCollection> recoTaus;
0198   iEvent.getByToken(TauToken_, recoTaus);
0199 
0200   edm::Handle<reco::PFTauDiscriminator> DMFindingTaus;
0201   iEvent.getByToken(DMFindingToken_, DMFindingTaus);
0202 
0203   edm::Handle<reco::PFTauDiscriminator> DMFindingOldTaus;
0204   iEvent.getByToken(DMFindingOldToken_, DMFindingOldTaus);
0205 
0206   edm::Handle<reco::PFTauDiscriminator> TightIsoTaus;
0207   iEvent.getByToken(TightIsoToken_, TightIsoTaus);
0208 
0209   edm::Handle<reco::PFTauDiscriminator> TightRawIsoTaus;
0210   iEvent.getByToken(TightRawIsoToken_, TightRawIsoTaus);
0211 
0212   edm::Handle<reco::PFTauDiscriminator> LooseIsoTaus;
0213   iEvent.getByToken(LooseIsoToken_, LooseIsoTaus);
0214 
0215   edm::Handle<reco::PFTauDiscriminator> LooseAntiMuon;
0216   iEvent.getByToken(LooseAntiMuonToken_, LooseAntiMuon);
0217 
0218   edm::Handle<reco::PFTauDiscriminator> TightAntiMuon;
0219   iEvent.getByToken(TightAntiMuonToken_, TightAntiMuon);
0220 
0221   edm::Handle<reco::PFTauDiscriminator> VLooseAntiElectron;
0222   iEvent.getByToken(VLooseAntiElectronToken_, VLooseAntiElectron);
0223 
0224   edm::Handle<reco::PFTauDiscriminator> LooseAntiElectron;
0225   iEvent.getByToken(LooseAntiElectronToken_, LooseAntiElectron);
0226 
0227   edm::Handle<reco::PFTauDiscriminator> TightAntiElectron;
0228   iEvent.getByToken(TightAntiElectronToken_, TightAntiElectron);
0229 
0230   //std::cout<<"size of recoTaus = "<<recoTaus->size()<<std::endl;
0231 
0232   if (recoTaus.isValid()) {
0233     //std::cout<<"passing here"<<std::endl;
0234     tau->SetTau(iEvent,
0235                 iSetup,
0236                 recoTaus,
0237                 DMFindingOldTaus,
0238                 DMFindingTaus,
0239                 TightIsoTaus,
0240                 TightRawIsoTaus,
0241                 LooseIsoTaus,
0242                 LooseAntiMuon,
0243                 TightAntiMuon,
0244                 VLooseAntiElectron,
0245                 LooseAntiElectron,
0246                 TightAntiElectron,
0247                 maxTau_);
0248   } else {
0249     if (!caloJetsMissing_) {
0250       edm::LogWarning("MissingProduct") << "CaloJets not found.  Branch will not be filled" << std::endl;
0251     }
0252     caloJetsMissing_ = true;
0253   }
0254 
0255   /*
0256   jet->Reset();
0257 
0258   // get jets  & co...
0259   edm::Handle<reco::CaloJetCollection> recoCaloJets;
0260   edm::Handle<edm::ValueMap<reco::JetID> > jetsID;
0261   edm::Handle<reco::JetCorrector> jetCorr;
0262 
0263   iEvent.getByToken(caloJetToken_, recoCaloJets);
0264   //iEvent.getByLabel(jetIdTag_,jetsID);
0265   //iEvent.getByToken(jetCorrectorToken_, jetCorr);
0266 
0267   if (recoCaloJets.isValid()) {
0268     jet->SetCaloJet(iEvent, iSetup, recoCaloJets, maxTau_); //jetsID, maxTau_);
0269   }
0270   else {
0271     if (!caloJetsMissing_) {edm::LogWarning("MissingProduct") << "CaloJets not found.  Branch will not be filled" << std::endl;}
0272     caloJetsMissing_ = true;
0273   }
0274   */
0275 
0276   tree_->Fill();
0277 }
0278 
0279 // ------------ method called once each job just before starting event loop  ------------
0280 void L1TauRecoTreeProducer::beginJob(void) {}
0281 
0282 // ------------ method called once each job just after ending the event loop  ------------
0283 void L1TauRecoTreeProducer::endJob() {}
0284 
0285 //define this as a plug-in
0286 DEFINE_FWK_MODULE(L1TauRecoTreeProducer);