diff --git a/plugins/MiniEffiTree.cc b/plugins/MiniEffiTree.cc new file mode 100644 index 0000000..ed68e35 --- /dev/null +++ b/plugins/MiniEffiTree.cc @@ -0,0 +1,540 @@ +/* + * ===================================================================================== + * + * Filename: MiniEffiTree.cc + * Company: UW Madison + * + * ===================================================================================== + */ + +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" + +#include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/L1Trigger/interface/L1JetParticle.h" +#include "DataFormats/L1Trigger/interface/L1EmParticle.h" + +#include "SimDataFormats/PileupSummaryInfo/interface/PileupSummaryInfo.h" + +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" + +#include "DataFormats/Math/interface/deltaPhi.h" + +#include "TTree.h" + +typedef std::vector VInputTag; + +class MiniEffiTree : public edm::EDAnalyzer { + public: + MiniEffiTree(const edm::ParameterSet& pset); + virtual ~MiniEffiTree(); + void analyze(const edm::Event& evt, const edm::EventSetup& es); + private: + VInputTag src_; + VInputTag L1Src_; + VInputTag srcJet_; + VInputTag L1SrcJet_; + VInputTag srcEg_; + VInputTag L1SrcEg_; + VInputTag metSrc_; + VInputTag L1MetSrc_; + + TTree* tree; + std::vector* pts_; + std::vector* etas_; + std::vector* phis_; + std::vector* L1matches_; + + std::vector* L1pts_; + std::vector* L1etas_; + std::vector* L1phis_; + std::vector* L1charges_; + + std::vector* L1Matchedpts_; + std::vector* L1Matchedetas_; + std::vector* L1Matchedphis_; + std::vector* L1Matchedcharges_; + + std::vector* L1dRToJet_; + std::vector* L1MatchedJet_; + + std::vector* jetpts_; + std::vector* jetetas_; + std::vector* jetphis_; + std::vector* L1Jetmatches_; + + std::vector* L1Jetpts_; + std::vector* L1Jetetas_; + std::vector* L1Jetphis_; + + std::vector* egpts_; + std::vector* egetas_; + std::vector* egphis_; + std::vector* egTaumatches_; + std::vector* dREgTau_; + + std::vector* L1Egpts_; + std::vector* L1Egetas_; + std::vector* L1Egphis_; + std::vector* L1EgTaumatches_; + std::vector* dRL1EgTau_; + + Float_t L1Met_Et_; + Float_t L1Met_Phi_; + Float_t met_Et_; + Float_t met_Phi_; + + + UInt_t run_; + UInt_t lumi_; + ULong64_t event_; + Int_t nPU_; + + Int_t count_; +}; + +MiniEffiTree::MiniEffiTree(const edm::ParameterSet& pset) { + // Initialize the ntuple builder + edm::Service fs; + tree = fs->make("Ntuple", "Ntuple"); + pts_ = new std::vector(); + etas_ = new std::vector(); + phis_ = new std::vector(); + L1matches_ = new std::vector(); + + + L1pts_ = new std::vector(); + L1etas_ = new std::vector(); + L1phis_ = new std::vector(); + L1charges_ = new std::vector(); + + L1Matchedpts_ = new std::vector(); + L1Matchedetas_ = new std::vector(); + L1Matchedphis_ = new std::vector(); + L1Matchedcharges_ = new std::vector(); + + L1dRToJet_ = new std::vector(); + L1MatchedJet_ = new std::vector(); + + + jetpts_ = new std::vector(); + jetetas_ = new std::vector(); + jetphis_ = new std::vector(); + L1Jetmatches_ = new std::vector(); + + L1Jetpts_ = new std::vector(); + L1Jetetas_ = new std::vector(); + L1Jetphis_ = new std::vector(); + + egpts_ = new std::vector(); + egetas_ = new std::vector(); + egphis_ = new std::vector(); + egTaumatches_ = new std::vector(); + dREgTau_ = new std::vector(); + + L1Egpts_ = new std::vector(); + L1Egetas_ = new std::vector(); + L1Egphis_ = new std::vector(); + L1EgTaumatches_ = new std::vector(); + dRL1EgTau_ = new std::vector(); + + tree->Branch("pt", "std::vector", &pts_); + tree->Branch("eta", "std::vector", &etas_); + tree->Branch("phi", "std::vector", &phis_); + tree->Branch("L1matches", "std::vector", &L1matches_); + + tree->Branch("L1pt", "std::vector", &L1pts_); + tree->Branch("L1eta", "std::vector", &L1etas_); + tree->Branch("L1phi", "std::vector", &L1phis_); + tree->Branch("L1charge", "std::vector", &L1charges_); + + tree->Branch("L1Matchedpt", "std::vector", &L1Matchedpts_); + tree->Branch("L1Matchedeta", "std::vector", &L1Matchedetas_); + tree->Branch("L1Matchedphi", "std::vector", &L1Matchedphis_); + tree->Branch("L1Matchedcharge", "std::vector", &L1Matchedcharges_); + + tree->Branch("L1dRToJet", "std::vector", &L1dRToJet_); + tree->Branch("L1MatchedJet", "std::vector", &L1MatchedJet_); + + tree->Branch("jetpt", "std::vector", &jetpts_); + tree->Branch("jeteta", "std::vector", &jetetas_); + tree->Branch("jetphi", "std::vector", &jetphis_); + tree->Branch("L1Jetmatches", "std::vector", &L1Jetmatches_); + + tree->Branch("L1Jetpt", "std::vector", &L1Jetpts_); + tree->Branch("L1Jeteta", "std::vector", &L1Jetetas_); + tree->Branch("L1Jetphi", "std::vector", &L1Jetphis_); + + tree->Branch("egpt", "std::vector", &egpts_); + tree->Branch("egeta", "std::vector", &egetas_); + tree->Branch("egphi", "std::vector", &egphis_); + tree->Branch("egTaumatches", "std::vector", &egTaumatches_); + tree->Branch("dREgTau", "std::vector", &dREgTau_); + + tree->Branch("L1Egpt", "std::vector", &L1Egpts_); + tree->Branch("L1Egeta", "std::vector", &L1Egetas_); + tree->Branch("L1Egphi", "std::vector", &L1Egphis_); + tree->Branch("L1EgTaumatches", "std::vector", &L1EgTaumatches_); + tree->Branch("dRL1EgTau" , "std::vector", &dRL1EgTau_); + + tree->Branch("L1Met_Et", &L1Met_Et_, "L1Met_Et/F"); + tree->Branch("L1Met_Phi", &L1Met_Phi_, "L1Met_Phi/F"); + tree->Branch("met_Et", &met_Et_, "met_Et/F"); + tree->Branch("met_Phi", &met_Phi_, "met_Phi/F"); + + tree->Branch("run", &run_, "run/i"); + tree->Branch("lumi", &lumi_, "lumi/i"); + tree->Branch("evt", &event_, "evt/l"); + tree->Branch("nPU", &nPU_, "nPU/i"); + + src_ = pset.getParameter("src"); + L1Src_ = pset.getParameter("L1Src"); + srcJet_ = pset.getParameter("srcJet"); + L1SrcJet_ = pset.getParameter("L1SrcJet"); + srcEg_ = pset.getParameter("srcEg"); + L1SrcEg_ = pset.getParameter("L1SrcEg"); + metSrc_ = pset.getParameter("metSrc"); + L1MetSrc_ = pset.getParameter("L1MetSrc"); + + count_=0; +} + +MiniEffiTree::~MiniEffiTree() { + delete pts_; + delete etas_; + delete phis_; + delete L1matches_; + delete L1pts_; + delete L1phis_; + delete L1etas_; + delete L1charges_; + delete L1Matchedpts_; + delete L1Matchedphis_; + delete L1Matchedetas_; + delete L1Matchedcharges_; + delete jetpts_; + delete jetetas_; + delete jetphis_; + delete L1Jetmatches_; + delete L1Jetpts_; + delete L1Jetphis_; + delete L1Jetetas_; + + delete egpts_; + delete egetas_; + delete egphis_; + delete egTaumatches_; + delete dREgTau_; + delete L1Egpts_; + delete L1Egphis_; + delete L1Egetas_; + delete L1EgTaumatches_; + delete dRL1EgTau_; + + delete L1MatchedJet_; + delete L1dRToJet_; +} + + +namespace { + + // Predicate to sort candidates by descending pt + class CandPtSorter { + public: + bool operator()(const reco::Candidate* candA, const reco::Candidate* candB) + const { + return candA->pt() > candB->pt(); + } + }; + + // Turn a set of InputTags into a colleciton of candidate pointers. + std::vector getCollections( + const edm::Event& evt, const VInputTag& collections) { + std::vector output; + // Loop over collections + for (size_t i = 0; i < collections.size(); ++i) { + edm::Handle > handle; + evt.getByLabel(collections[i], handle); + // Loop over objects in current collection + for (size_t j = 0; j < handle->size(); ++j) { + const reco::Candidate& object = handle->at(j); + output.push_back(&object); + } + } + return output; + } + +} + +void MiniEffiTree::analyze(const edm::Event& evt, const edm::EventSetup& es) { + + count_++; + + // Get the objects. + std::vector objects = getCollections( + evt, src_); + std::vector L1Objects = getCollections( + evt, L1Src_); + std::vector jetObjects = getCollections( + evt, srcJet_); + std::vector L1JetObjects = getCollections( + evt, L1SrcJet_); + std::vector egObjects = getCollections( + evt, srcEg_); + std::vector L1EgObjects = getCollections( + evt, L1SrcEg_); + std::vector metObject = getCollections( + evt, metSrc_); + std::vector L1MetObject = getCollections( + evt, L1MetSrc_); + + std::sort(objects.begin(), objects.end(), CandPtSorter()); + std::sort(L1Objects.begin(), L1Objects.end(), CandPtSorter()); + + + + + // Clear previous event's objects + pts_->clear(); + etas_->clear(); + phis_->clear(); + L1matches_->clear(); + L1pts_->clear(); + L1etas_->clear(); + L1phis_->clear(); + L1charges_->clear(); + L1Matchedpts_->clear(); + L1Matchedetas_->clear(); + L1Matchedphis_->clear(); + L1Matchedcharges_->clear(); + jetpts_->clear(); + jetetas_->clear(); + jetphis_->clear(); + L1Jetmatches_->clear(); + L1Jetpts_->clear(); + L1Jetetas_->clear(); + L1Jetphis_->clear(); + egpts_->clear(); + egetas_->clear(); + egphis_->clear(); + egTaumatches_->clear(); + L1Egpts_->clear(); + L1Egphis_->clear(); + L1Egetas_->clear(); + L1EgTaumatches_->clear(); + L1dRToJet_->clear(); + L1MatchedJet_->clear(); + + // Setup meta info + run_ = evt.id().run(); + lumi_ = evt.id().luminosityBlock(); + event_ = evt.id().event(); + + edm::Handle > PupInfo; + evt.getByLabel("addPileupInfo", PupInfo); + + nPU_=-1; + for(std::vector::const_iterator i = PupInfo->begin(); + i!=PupInfo->end();++i) { + int BX = i->getBunchCrossing(); + if(BX==0) { + nPU_ =i->getTrueNumInteractions(); + nPU_=i->getPU_NumInteractions(); + } + } + + +// std::cout<<"----------------------------"<pt()<<" "<eta()<<" "<phi()<push_back(objects[i]->pt()); + etas_->push_back(objects[i]->eta()); + phis_->push_back(objects[i]->phi()); + } + + //std::cout<<"L1 Objects!"<pt()<<" "<eta()<<" "<phi()<push_back(L1Objects[i]->pt()); + L1etas_->push_back(L1Objects[i]->eta()); + L1phis_->push_back(L1Objects[i]->phi()); + L1charges_->push_back(L1Objects[i]->charge()); + } + + for (size_t i = 0; i < egObjects.size(); ++i) { +// std::cout<pt()<<" "<eta()<<" "<phi()<push_back(egObjects[i]->pt()); + egetas_->push_back(egObjects[i]->eta()); + egphis_->push_back(egObjects[i]->phi()); + } + +// std::cout<<"Gen Objects!"<pt()<<" "<eta()<<" "<phi()<push_back(L1EgObjects[i]->pt()); + L1Egetas_->push_back(L1EgObjects[i]->eta()); + L1Egphis_->push_back(L1EgObjects[i]->phi()); + } + + for (size_t i =0; i < objects.size(); ++i){ + int matchj=-1; + double minAngle=0.5; + for (size_t j=0; jat(j) - L1Objects[i]->eta() ); + //double deltaPhi=reco::deltaPhi(phis_->at(j),L1Objects[i]->phi()); + //double dR=sqrt( deltaEta*deltaEta + deltaPhi*deltaPhi) ; + double deltaEta=(objects[i]->eta() - L1Objects[j]->eta() ); + double deltaPhi=reco::deltaPhi(objects[i]->phi(),L1Objects[j]->phi()); + double dR=sqrt( deltaEta*deltaEta + deltaPhi*deltaPhi); + std::cout << "pt, L1pt: " << objects[i]->pt() <<", "<pt() <<", "<push_back(1); + std::cout << "pushing back 1 for match pt, L1pt: " << objects[i]->pt() <<", "<pt() <push_back(L1Objects[j]->pt()); + L1Matchedetas_->push_back(L1Objects[j]->eta()); + L1Matchedphis_->push_back(L1Objects[j]->phi()); + L1Matchedcharges_->push_back(L1Objects[j]->charge()); + } +// else{ + // L1matches_->push_back(-1); + // std::cout << "pushing back -1 for nonmatch pt, L1pt :" << objects[i]->pt() <<", "<pt() <eta() - egObjects[j]->eta() ); + double deltaPhi=reco::deltaPhi(objects[i]->phi(),egObjects[j]->phi()); + double dR=sqrt( deltaEta*deltaEta + deltaPhi*deltaPhi); + + std::cout <<"EGdEta, EGdPhi, EGdR " << deltaEta << " " << deltaPhi << " " << dR << std::endl; + if(dRpush_back(match); + dREgTau_->push_back(minAngle); + + } + */ + + + for (size_t i =0; i < L1Objects.size(); ++i){ + int match=-1; + //double minAngle=0.5; + double minAngle = 6.0; + for (size_t j=0; jeta() - L1EgObjects[j]->eta() ); + double deltaPhi=reco::deltaPhi(L1Objects[i]->phi(),L1EgObjects[j]->phi()); + double dR=sqrt( deltaEta*deltaEta + deltaPhi*deltaPhi); + + std::cout <<"L1EGdEta, L1EGdPhi, L1EGdR " << deltaEta << " " << deltaPhi << " " << dR << std::endl; + if(dRpush_back(match); + //dRL1EgTau_->push_back(minAngle); + } + + + +// std::cout<<"-----> matched to"<at(i) - L1JetObjects[j]->eta() ); + double deltaPhi=reco::deltaPhi(L1phis_->at(i),L1JetObjects[j]->phi()); + double dR=sqrt( deltaEta*deltaEta + deltaPhi*deltaPhi) ; + if(dR<0.05) { + continue; + } + if(dRpt(); } + } + if (closestDR < 1000){ + L1dRToJet_->push_back(closestDR); + } + else{ + L1dRToJet_->push_back(-5); + } + L1MatchedJet_->push_back(JET); +*/ + + + +// std::cout<<"jet Objects!"<pt()<<" "<eta()<<" "<phi()<push_back(jetObjects[i]->pt()); + jetetas_->push_back(jetObjects[i]->eta()); + jetphis_->push_back(jetObjects[i]->phi()); + } + +// std::cout<<"Gen Jet Objects!"<size(); j++){ + double deltaEta=(L1etas_->at(j) - L1JetObjects[i]->eta() ); + double deltaPhi=reco::deltaPhi(L1phis_->at(j),L1JetObjects[i]->phi()); + double dR=sqrt( deltaEta*deltaEta + deltaPhi*deltaPhi) ; + if(dR<0.05) {isEle=true;} + } + if (isEle) continue; + + if(L1JetObjects[i]->pt()<10) continue; +// std::cout<pt()<<" "<eta()<<" "<phi()<push_back(L1JetObjects[i]->pt()); + L1Jetetas_->push_back(L1JetObjects[i]->eta()); + L1Jetphis_->push_back(L1JetObjects[i]->phi()); + int match=-1; + double minAngle=2; + for (size_t j=0; jsize(); j++){ + double deltaEta=(jetetas_->at(j) - L1JetObjects[i]->eta() ); + double deltaPhi=reco::deltaPhi(jetphis_->at(j),L1JetObjects[i]->phi()); + double dR=sqrt( deltaEta*deltaEta + deltaPhi*deltaPhi) ; + if(dRpush_back(match); +// std::cout<<"-----> matched to"<pt(); + met_Phi_=metObject[0]->phi(); + // std::cout<<"MET: "<pt(); + L1Met_Phi_=L1MetObject[0]->phi(); +// std::cout<<"GenMET: "<Fill(); +} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(MiniEffiTree); diff --git a/plugins/RateTree.cc b/plugins/RateTree.cc index a0ef56b..29a0b40 100644 --- a/plugins/RateTree.cc +++ b/plugins/RateTree.cc @@ -77,7 +77,9 @@ class RateTree : public edm::EDAnalyzer { std::vector* puEM_; std::vector* puUICEM_; std::vector* effArea_; + std::vector* eneighbor_; std::vector* taus_; + std::vector* tausneighbor_; std::vector* mips_; }; @@ -89,7 +91,9 @@ RateTree::RateTree(const edm::ParameterSet& pset) { pts_ = new std::vector(); etas_ = new std::vector(); phis_ = new std::vector(); + eneighbor_ = new std::vector(); taus_ = new std::vector(); + tausneighbor_ = new std::vector(); mips_ = new std::vector(); @@ -162,7 +166,9 @@ RateTree::RateTree(const edm::ParameterSet& pset) { tree->Branch("puEM", "std::vector", &puEM_); tree->Branch("puUICEM", "std::vector", &puUICEM_); tree->Branch("effArea", "std::vector", &effArea_); + tree->Branch("associated4x4Et", "std::vector",&eneighbor_); tree->Branch("tauVeto", "std::vector", &taus_); + tree->Branch("associated4x4Tau","std::vector",&tausneighbor_); tree->Branch("mipBit", "std::vector", &mips_); // Now add nice aliases so the same draw commands work for rate/eff @@ -183,6 +189,7 @@ RateTree::RateTree(const edm::ParameterSet& pset) { tree->SetAlias("l1gEllIso", "ellIso"); tree->SetAlias("l1gTauVeto", "tauVeto"); + tree->SetAlias("l1gTauVetoNeighbor","associated4x4Tau"); tree->SetAlias("l1gMIP", "mipBit"); tree->SetAlias("l1gPU", "pu"); @@ -228,7 +235,9 @@ RateTree::~RateTree() { delete puUICEM_; delete effArea_; delete mips_; + delete eneighbor_; delete taus_; + delete tausneighbor_; } @@ -303,7 +312,9 @@ void RateTree::analyze(const edm::Event& evt, const edm::EventSetup& es) { puEM_->clear(); puUICEM_->clear(); effArea_->clear(); + eneighbor_->clear(); taus_->clear(); + tausneighbor_->clear(); mips_->clear(); // Setup meta info @@ -359,7 +370,10 @@ void RateTree::analyze(const edm::Event& evt, const edm::EventSetup& es) { puUICEM_->push_back(uct->getFloat("puLevelUICEM", -4)); effArea_->push_back(uct->getFloat("effArea", -4)); mips_->push_back(uct->getInt("mipBit", -4)); + eneighbor_->push_back(uct->getFloat("associated4x4Et",-4)); taus_->push_back(uct->getInt("tauVeto", -4)); + //std::cout << "tauVeto Rate Tree:" << uct->getFloat("tauVeto",-4) << std::endl; + tausneighbor_->push_back(uct->getInt("associated4x4Tau",-4)); // UCT doesn't have a type type_->push_back(-1); } else { @@ -409,7 +423,8 @@ void RateTree::analyze(const edm::Event& evt, const edm::EventSetup& es) { puUICEM_->push_back(-5); effArea_->push_back(-5); mips_->push_back(-5); - taus_->push_back(-5); + //taus_->push_back(-5); + //tausneighbor_->push_back(-5); type_->push_back(-5); tree->Fill(); diff --git a/plugins/RateTreeEmul.cc b/plugins/RateTreeEmul.cc new file mode 100644 index 0000000..15bf800 --- /dev/null +++ b/plugins/RateTreeEmul.cc @@ -0,0 +1,167 @@ +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/EDAnalyzer.h" + +#include "DataFormats/Candidate/interface/Candidate.h" + +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" + +#include "SimDataFormats/PileupSummaryInfo/interface/PileupSummaryInfo.h" + +#include "DataFormats/L1Trigger/interface/L1EmParticle.h" +#include "DataFormats/L1Trigger/interface/L1EmParticleFwd.h" +#include "DataFormats/L1Trigger/interface/L1JetParticle.h" +#include "DataFormats/L1Trigger/interface/L1JetParticleFwd.h" +#include "DataFormats/L1Trigger/interface/L1EtMissParticle.h" +#include "DataFormats/L1Trigger/interface/L1EtMissParticleFwd.h" + +#include "DataFormats/Scalers/interface/LumiScalers.h" + +#include "L1Trigger/L1TCalorimeter/interface/Stage1Layer2TauAlgorithmImp.h" +#include "DataFormats/L1Trigger/interface/Tau.h" +#include "DataFormats/L1Trigger/interface/L1Candidate.h" + +#include "TTree.h" + +typedef std::vector VInputTag; + +class RateTreeEmul : public edm::EDAnalyzer { + public: + RateTreeEmul(const edm::ParameterSet& pset); + virtual ~RateTreeEmul(); + void analyze(const edm::Event& evt, const edm::EventSetup& es); + private: + VInputTag src_; + TTree* tree; + std::vector* pts_; + std::vector* etas_; + std::vector* phis_; + std::vector* isoFlags_; + UInt_t run_; + UInt_t lumi_; + ULong64_t event_; + Int_t nPU_; +}; + +RateTreeEmul::RateTreeEmul(const edm::ParameterSet& pset) { + // Initialize the ntuple builder + edm::Service fs; + tree = fs->make("Ntuple", "Ntuple"); + pts_ = new std::vector(); + etas_ = new std::vector(); + phis_ = new std::vector(); + isoFlags_ = new std::vector(); + + tree->Branch("pt", "std::vector", &pts_); + tree->Branch("eta", "std::vector", &etas_); + tree->Branch("phi", "std::vector", &phis_); + tree->Branch("run", &run_, "run/i"); + //tree->Branch("isoFlags", "std::vector", &isoFlags_); + tree->Branch("lumi", &lumi_, "lumi/i"); + tree->Branch("evt", &event_, "evt/l"); + tree->Branch("nPU", &nPU_, "nPU/i"); + + src_ = pset.getParameter("src"); +} + +RateTreeEmul::~RateTreeEmul() { + delete pts_; + delete etas_; + delete phis_; + delete isoFlags_; +} + + +namespace { + + // Predicate to sort candidates by descending pt + class CandPtSorter { + public: + bool operator()(const reco::Candidate* candA, const reco::Candidate* candB) + const { + return candA->pt() > candB->pt(); + } + }; + + // Turn a set of InputTags into a colleciton of candidate pointers. + std::vector getCollections( + const edm::Event& evt, const VInputTag& collections) { + std::vector output; + // Loop over collections + for (size_t i = 0; i < collections.size(); ++i) { + edm::Handle > handle; + evt.getByLabel(collections[i], handle); + // Loop over objects in current collection + for (size_t j = 0; j < handle->size(); ++j) { + const reco::Candidate& object = handle->at(j); + output.push_back(&object); + } + } + return output; + } + +} + +void RateTreeEmul::analyze(const edm::Event& evt, const edm::EventSetup& es) { + //std::cout << "getting objects" << std::endl; + // Get the objects. + std::vector objects = getCollections( + evt, src_); + //std::cout << "sorting objects" << std::endl; + std::sort(objects.begin(), objects.end(), CandPtSorter()); + + //std::cout << "clearing objects" << std::endl; + // Clear previous event's objects + pts_->clear(); + etas_->clear(); + phis_->clear(); + isoFlags_->clear(); + + + //std::cout << "setting up meta info" < > PupInfo; + evt.getByLabel("addPileupInfo", PupInfo); + + nPU_=-1; + for(std::vector::const_iterator i = PupInfo->begin(); i!=PupInfo->end();++i) { + int BX = i->getBunchCrossing(); + if(BX==0) { + nPU_ =i->getTrueNumInteractions(); + } + else { + nPU_=i->getPU_NumInteractions(); + } + } + + + + //std::cout << "pushing back" << std::endl; + for (size_t i = 0; i < objects.size(); ++i) { + pts_->push_back(objects[i]->pt()); + etas_->push_back(objects[i]->eta()); + phis_->push_back(objects[i]->phi()); + //std::cout <<"about to make dynamic cast"<(objects[i]); + //std::cout << "about to push back hwIso" <push_back(tau[i].hwIso()); + } + + + tree->Fill(); +} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(RateTreeEmul); diff --git a/python/recoObjects_cfi.py b/python/recoObjects_cfi.py index 9bea532..642613e 100644 --- a/python/recoObjects_cfi.py +++ b/python/recoObjects_cfi.py @@ -33,7 +33,7 @@ src = cms.InputTag( "gsfElectrons" ), cut = cms.string( " (et>20.0)" - " && (gsfTrack.trackerExpectedHitsInner.numberOfHits==0 && !(-0.02