17 #include <boost/core/demangle.hpp> 20 #include "FWCore/Framework/interface/Event.h" 22 #include "FWCore/ParameterSet/interface/ParameterSet.h" 24 #include "DataFormats/Candidate/interface/Candidate.h" 25 #include "DataFormats/Candidate/interface/CandidateFwd.h" 27 #include "DataFormats/L1Trigger/interface/L1JetParticle.h" 28 #include "DataFormats/L1Trigger/interface/L1JetParticleFwd.h" 30 #include "DataFormats/L1Trigger/interface/L1MuonParticle.h" 31 #include "DataFormats/L1Trigger/interface/L1MuonParticleFwd.h" 33 #include "DataFormats/L1Trigger/interface/Jet.h" 34 #include "DataFormats/L1Trigger/interface/Muon.h" 36 #include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" 37 #include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h" 39 #include "DataFormats/JetReco/interface/CaloJet.h" 40 #include "DataFormats/JetReco/interface/CaloJetCollection.h" 42 #include "DataFormats/JetReco/interface/PFJet.h" 43 #include "DataFormats/JetReco/interface/PFJetCollection.h" 45 #include "DataFormats/MuonReco/interface/Muon.h" 46 #include "DataFormats/MuonReco/interface/MuonFwd.h" 48 #include "DataFormats/TrackReco/interface/Track.h" 49 #include "DataFormats/TrackReco/interface/TrackFwd.h" 52 #include "DataFormats/PatCandidates/interface/Jet.h" 53 #include "DataFormats/PatCandidates/interface/Muon.h" 54 #include "DataFormats/PatCandidates/interface/MET.h" 56 #include "DataFormats/JetReco/interface/GenJet.h" 58 #include "DataFormats/HepMCCandidate/interface/GenParticle.h" 59 #include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h" 61 #include "CommonTools/Utils/interface/PtComparator.h" 63 #include "DataFormats/HLTReco/interface/TriggerEvent.h" 64 #include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" 65 #include "DataFormats/PatCandidates/interface/TriggerObjectStandAlone.h" 69 #include "FWCore/Framework/interface/ESHandle.h" 71 #include "DataFormats/Common/interface/TriggerResults.h" 73 #include "DataFormats/VertexReco/interface/Vertex.h" 104 template <
typename T>
110 template <
typename T>
112 minPt_(minPt), maxEta_(maxEta)
118 is_l1jet_ = std::is_same<T,l1extra::L1JetParticle>::value;
119 is_l1muon_ = std::is_same<T,l1extra::L1MuonParticle>::value;
120 is_calojet_ = std::is_same<T,reco::CaloJet>::value;
123 is_pfjet_ = std::is_same<T,reco::PFJet>::value;
127 is_genjet_ = std::is_same<T,reco::GenJet>::value;
142 std::string title = boost::core::demangle(
typeid(
T).
name()) +
" | " +
tree_->GetTitle();
144 tree_->SetTitle(title.c_str());
149 id_vars_.push_back({
"neutralHadronEnergyFraction",
"id_nHadFrac" });
150 id_vars_.push_back({
"neutralEmEnergyFraction",
"id_nEmFrac" });
151 id_vars_.push_back({
"neutralMultiplicity",
"id_nMult" });
152 id_vars_.push_back({
"chargedHadronEnergyFraction",
"id_cHadFrac" });
153 id_vars_.push_back({
"chargedEmEnergyFraction",
"id_cEmFrac" });
154 id_vars_.push_back({
"chargedMultiplicity",
"id_cMult" });
155 id_vars_.push_back({
"muonEnergyFraction",
"id_muonFrac" });
156 id_vars_.push_back({
"puppiJetsSpecific",
"id_puppi" });
174 template <
typename T>
187 template <
typename T>
194 edm::Handle<std::vector<T> > handler;
206 edm::Handle<l1t::JetBxCollection> handler;
208 BXVector<l1t::Jet> l1jets = *(handler.product());
209 for (
auto l1jet : l1jets )
214 NumericSafeGreaterByPt<l1t::Jet> l1tjetGreaterByPt;
226 edm::Handle<l1t::MuonBxCollection> handler;
228 BXVector<l1t::Muon> l1muons = *(handler.product());
229 for (
auto l1muon : l1muons )
234 NumericSafeGreaterByPt<l1t::Muon> l1tmuonGreaterByPt;
245 Handle<TriggerResults> trhandler;
251 edm::Handle<pat::TriggerObjectStandAloneCollection> handler;
254 const std::string treename =
tree_ -> GetName();
255 const std::string delimiter =
"_";
256 std::string label = treename.substr(0, treename.find(delimiter));
258 for (
auto ito : *handler )
260 ito.unpackFilterLabels(event,trgres);
261 if ( ito.filter(label) )
265 int type = ito.triggerObject().triggerObjectTypes().at(0);
268 if ( type == trigger::TriggerL1Mu )
candidates_.push_back(ito.triggerObject());
272 if ( type == trigger::TriggerL1Jet )
candidates_.push_back(ito.triggerObject());
276 if ( type == trigger::TriggerMuon )
candidates_.push_back(ito.triggerObject());
280 if ( type == trigger::TriggerJet )
candidates_.push_back(ito.triggerObject());
284 if ( type == trigger::TriggerBJet )
candidates_.push_back(ito.triggerObject());
295 NumericSafeGreaterByPt<pat::TriggerObject> triggerObjectGreaterByPt;
313 edm::Handle<trigger::TriggerEvent> handler;
316 const std::string treename =
tree_ -> GetName();
317 const std::string delimiter =
"_";
318 const std::string processName(handler->usedProcessName());
319 std::string label = treename.substr(0, treename.find(delimiter));
320 const unsigned int filterIndex(handler->filterIndex(InputTag(label,
"",processName)));
321 if ( filterIndex < handler->sizeFilters() )
323 const trigger::Keys& keys(handler->filterKeys(filterIndex));
324 const trigger::TriggerObjectCollection & triggerObjects = handler->getObjects();
325 for (
auto & key : keys )
333 NumericSafeGreaterByPt<trigger::TriggerObject> triggerObjectGreaterByPt;
337 template <
typename T>
352 reco::GenParticle * gp =
dynamic_cast<reco::GenParticle*
> (&
candidates_[i]);
353 int pdg = gp -> pdgId();
355 if ( abs(pdg) > 38 )
continue;
364 if ( gp->numberOfMothers() > 0 )
366 mo1_[n] = gp->motherRef(0).key();
367 mo2_[n] = gp->motherRef(gp->numberOfMothers()-1).key();
369 if ( gp->numberOfDaughters() > 0 )
371 da1_[n] = gp->daughterRef(0).key();
372 da2_[n] = gp->daughterRef(gp->numberOfDaughters()-1).key();
374 const reco::Candidate * mother = gp->mother(0);
376 if ( mother != NULL )
378 if ( mother->pdgId() == 36 || mother->pdgId() == 25 )
381 mass_[n] = gp->mass();
397 pat::Muon * muon =
dynamic_cast<pat::Muon*
> (&
candidates_[i]);
398 const reco::Vertex::Point vtxp = muon->reco::LeafCandidate::vertex();
399 const reco::Vertex::Error error ;
402 const reco::Vertex vtx ( vtxp, error ) ;
434 validPixelHits_ [n] = muon->innerTrack()->hitPattern().numberOfValidPixelHits() ;
438 ipxy_[n] = fabs(muon->muonBestTrack()->dxy(vtx.position())) ;
439 ipz_ [n] = fabs(muon->muonBestTrack()->dz (vtx.position())) ;
445 trkKink_ [n] = muon->combinedQuality().trkKink;
446 chi2LocalPos_[n] = muon->combinedQuality().chi2LocalPosition;
447 validMuonHits_[n] = muon->globalTrack()->hitPattern().numberOfValidMuonHits();
455 pat::Jet * jet =
dynamic_cast<pat::Jet*
> (&
candidates_[i]);
470 if ( jet->hasUserFloat(
"bJetRegCorr") )
bjetRegCorr_[n] = jet->userFloat(
"bJetRegCorr");
473 if ( jet->hasUserFloat(
"bJetRegRes") )
bjetRegRes_[n] = jet->userFloat(
"bJetRegRes");
476 for (
size_t it = 0 ; it <
btag_vars_.size() ; ++it )
481 if ( jet -> isPFJet() || jet -> isJPTJet() )
483 jetid_[0][n] = jet->neutralHadronEnergyFraction();
484 jetid_[1][n] = jet->neutralEmEnergyFraction();
485 if ( jet->hasUserFloat(
"patPuppiJetSpecificProducer:neutralPuppiMultiplicity") )
487 jetid_[2][n] = jet->userFloat(
"patPuppiJetSpecificProducer:neutralPuppiMultiplicity");
491 jetid_[2][n] = (float)jet->neutralMultiplicity();
493 jetid_[3][n] = jet->chargedHadronEnergyFraction();
494 jetid_[4][n] = jet->chargedEmEnergyFraction();
495 if ( jet->hasUserFloat(
"patPuppiJetSpecificProducer:neutralPuppiMultiplicity") && jet->hasUserFloat(
"patPuppiJetSpecificProducer:puppiMultiplicity") )
497 jetid_[5][n] = jet->userFloat(
"patPuppiJetSpecificProducer:puppiMultiplicity") - jet->userFloat(
"patPuppiJetSpecificProducer:neutralPuppiMultiplicity");
502 jetid_[5][n] = (float)jet->chargedMultiplicity();
505 jetid_[6][n] = jet->muonEnergyFraction();
509 for (
size_t ii = 0; ii < 7; ++ii )
jetid_[ii][n] = -1.;
517 flavour_ [n] = jet->hadronFlavour();
520 if (jet->genParton())
568 if ( jet -> hasUserFloat(qgkey) )
575 std::string pudisckey =
pujetidInst_+
":fullDiscriminant";
576 if ( jet -> hasUserFloat(pudisckey) )
582 if ( jet -> hasUserInt(puidkey) )
591 reco::PFJet * jet =
dynamic_cast<reco::PFJet*
> (&
candidates_[i]);
592 jetid_[0][n] = jet->neutralHadronEnergyFraction();
593 jetid_[1][n] = jet->neutralEmEnergyFraction();
594 jetid_[2][n] = (float)jet->neutralMultiplicity();
595 jetid_[3][n] = jet->chargedHadronEnergyFraction();
596 jetid_[4][n] = jet->chargedEmEnergyFraction();
597 jetid_[5][n] = (float)jet->chargedMultiplicity();
598 jetid_[6][n] = jet->muonEnergyFraction();
602 pat::MET * met =
dynamic_cast<pat::MET*
> (&
candidates_[i]);
603 sigxx_[n] = met->getSignificanceMatrix()(0,0);
604 sigxy_[n] = met->getSignificanceMatrix()(0,1);
605 sigyx_[n] = met->getSignificanceMatrix()(1,0);
606 sigyy_[n] = met->getSignificanceMatrix()(1,1);
609 const reco::GenMET * genMET = met->genMET();
618 pat::TriggerObject * to =
dynamic_cast<pat::TriggerObject*
> (&
candidates_[i]);
620 if ( to->triggerObjectTypes().size() > 0 )
621 type_[n] = to->triggerObjectTypes().at(0);
625 trigger::TriggerObject * to =
dynamic_cast<trigger::TriggerObject*
> (&
candidates_[i]);
626 type_[n] = to -> id();
675 l1t::Jet * cand =
dynamic_cast<l1t::Jet*
> (&
candidates_[i]);
679 eta_[n] = cand->eta();
680 phi_[n] = cand->phi();
684 e_[n] = cand->energy();
686 q_[n] = cand->charge();
703 l1t::Muon * cand =
dynamic_cast<l1t::Muon*
> (&
candidates_[i]);
707 eta_[n] = cand->eta();
708 phi_[n] = cand->phi();
712 e_[n] = cand->energy();
714 q_[n] = cand->charge();
735 reco::Track * cand =
dynamic_cast<reco::Track*
> (&
candidates_[i]);
739 eta_[n] = cand->eta();
740 phi_[n] = cand->phi();
744 q_[n] = cand->charge();
763 trkhp_lostmu_[n] = cand -> hitPattern().numberOfLostMuonHits() ;
764 trkhp_valmu_[n] = cand -> hitPattern().numberOfValidMuonHits() ;
765 trkhp_badmu_[n] = cand -> hitPattern().numberOfBadMuonHits() ;
786 template <
typename T>
799 template <
typename T>
805 template <
typename T>
812 template <
typename T>
818 template <
typename T>
826 template <
typename T>
833 jecUnc_ = std::unique_ptr<JetCorrectionUncertainty>(
new JetCorrectionUncertainty(
jecFile_));
837 edm::ESHandle<JetCorrectorParametersCollection> JetCorParColl;
838 setup.get<JetCorrectionsRecord>().
get(
jecRecord_,JetCorParColl);
839 JetCorrectorParameters
const & JetCorPar = (*JetCorParColl)[
"Uncertainty"];
840 jecUnc_ = std::unique_ptr<JetCorrectionUncertainty>(
new JetCorrectionUncertainty(JetCorPar));
854 res_ = JME::JetResolution::get(setup,label_pt);
856 res_sf_ = JME::JetResolutionScaleFactor::get(setup,label_sf);
859 edm::Handle<double> rhoHandler;
861 rho_ = *(rhoHandler.product());
870 template <
typename T>
876 tree_->Branch(
"n", &
n_,
"n/I");
877 tree_->Branch(
"pt",
pt_,
"pt[n]/F");
880 tree_->Branch(
"px",
px_,
"px[n]/F");
881 tree_->Branch(
"py",
py_,
"py[n]/F");
882 tree_->Branch(
"pz",
pz_,
"pz[n]/F");
883 tree_->Branch(
"q",
q_,
"q[n]/I");
887 tree_->Branch(
"e",
e_,
"e[n]/F");
888 tree_->Branch(
"et",
et_,
"et[n]/F");
899 tree_->Branch(
"mother1",
mo1_,
"mother1[n]/I");
900 tree_->Branch(
"mother2",
mo2_,
"mother2[n]/I");
901 tree_->Branch(
"daughter1",
da1_,
"daughter1[n]/I");
902 tree_->Branch(
"daughter2",
da2_,
"daughter2[n]/I");
934 for (
size_t it = 0 ; it <
btag_vars_.size() ; ++it )
937 if (title.find(
":") != std::string::npos)
939 title = std::regex_replace(title, std::regex(
"\\:"),
"_");
970 for (
size_t it = 0 ; it <
id_vars_.size() ; ++it )
1009 std::string trkqualities[10];
1010 trkqualities[0] =
"undefQuality";
1011 trkqualities[1] =
"loose";
1012 trkqualities[2] =
"tight";
1013 trkqualities[3] =
"highPurity";
1014 trkqualities[4] =
"confirmed";
1015 trkqualities[5] =
"goodIterative";
1016 trkqualities[6] =
"looseSetWithPV";
1017 trkqualities[7] =
"highPuritySetWithPV";
1018 trkqualities[8] =
"discarded";
1019 trkqualities[9] =
"qualitySize";
1020 for (
int it = 0 ; it < 10 ; ++it )
1021 tree_->Branch(Form(
"quality_%s",trkqualities[it].c_str()),
trkqual_[it],Form(
"quality_%s[n]/O",trkqualities[it].c_str()));
1025 tree_->Branch(
"numberOfValidMuonHits",
trkhp_valmu_ ,
"numberOfValidMuonHits[n]/I");
1026 tree_->Branch(
"numberOfBadMuonHits",
trkhp_badmu_ ,
"numberOfBadMuonHits[n]/I");
1048 template <
typename T>
1054 template <
typename T>
1064 template <
typename T>
1072 template <
typename T>
1079 template <
typename T>
1087 template <
typename T>
1095 template <
typename T>
1096 void Candidates<T>::AddJerInfo(
const std::string & jer,
const std::string & res_file,
const std::string & sf_file,
const edm::InputTag & rho)
1106 template <
typename T>
1111 template <
typename T>
int hwQual_[maxCandidates]
float sigxx_[maxCandidates]
int trkhp_valtidhits_[maxCandidates]
float jerResolution_[maxCandidates]
bool isTrackerMuon_[maxCandidates]
float trkchi2_[maxCandidates]
JetParameters & setJetEta(float eta)
int physicsFlavour_[maxCandidates]
JetParameters & setRho(float rho)
float trkLayersWithMeasurement_[maxCandidates]
float btag_[15][maxCandidates]
int puJetIdFullId_[maxCandidates]
def status(submission_dir, failed_only=False)
float etaAtVtx_[maxCandidates]
std::vector< TitleAlias > btag_vars_
float sigxy_[maxCandidates]
std::unique_ptr< JetCorrectionUncertainty > jecUnc_
float trkKink_[maxCandidates]
edm::InputTag triggerresults_collection_
int trkhp_valtrkhits_[maxCandidates]
void QGTaggerInstance(const std::string &)
float ipxy_[maxCandidates]
edm::InputTag rho_collection_
JetParameters & set(const Binning &bin, float value)
int trkhp_stationsvalhits_[maxCandidates]
float trkd0_[maxCandidates]
void AddJerInfo(const std::string &, const edm::InputTag &)
float phiAtVtx_[maxCandidates]
float bjetRegRes_[maxCandidates]
int partonFlavour_[maxCandidates]
std::vector< T > candidates_
int status_[maxCandidates]
int trkhp_innerstationsvalhits_[maxCandidates]
void AddJecInfo(const std::string &)
bool isGlobalMuon_[maxCandidates]
float getResolution(const JetParameters ¶meters) const
bool isMediumMuon_[maxCandidates]
float puJetIdFullDiscr_[maxCandidates]
float normChi2_[maxCandidates]
float qgLikelihood_[maxCandidates]
bool lastcopy_[maxCandidates]
int trkhp_outerstationsvalhits_[maxCandidates]
int trkhp_lostmu_[maxCandidates]
float ipz_[maxCandidates]
float jerSFUp_[maxCandidates]
void UseTriggerResults(edm::InputTag &)
void JECRecord(const std::string &)
float getScaleFactor(const JetParameters ¶meters, Variation variation=Variation::NOMINAL, std::string uncertaintySource="") const
bool isTightMuon_[maxCandidates]
float sigyy_[maxCandidates]
bool isLooseMuon_[maxCandidates]
int hadronFlavour_[maxCandidates]
int trkhp_valtibhits_[maxCandidates]
float phi_[maxCandidates]
int flavour_[maxCandidates]
float jetid_[15][maxCandidates]
int trkhp_stationsbadhits_[maxCandidates]
float sigyx_[maxCandidates]
float gen_px_[maxCandidates]
int trkhp_valtobhits_[maxCandidates]
float trkndof_[maxCandidates]
int trkhp_valtechits_[maxCandidates]
std::string trigobj_type_
void MinPt(const float &minPt=-1.)
float jerSFDown_[maxCandidates]
float validMuonHits_[maxCandidates]
float gen_py_[maxCandidates]
bool higgs_dau_[maxCandidates]
std::vector< TitleAlias > id_vars_
float eta_[maxCandidates]
float validPixelHits_[maxCandidates]
void MaxEta(const float &maxEta=-1.)
float mass_[maxCandidates]
int trkhp_badmu_[maxCandidates]
float chi2LocalPos_[maxCandidates]
float trkdxy_[maxCandidates]
int trkhp_valmu_[maxCandidates]
float jecUncert_[maxCandidates]
JetParameters & setJetPt(float pt)
void ReadFromEvent(const edm::Event &)
edm::InputTag input_collection_
float segmentCompatibility_[maxCandidates]
bool isPFMuon_[maxCandidates]
float bjetRegCorr_[maxCandidates]
float validFraction_[maxCandidates]
void PileupJetIdInstance(const std::string &)
void TriggerObjectType(const std::string &)
float matchedStations_[maxCandidates]
static const int maxCandidates
float jerSF_[maxCandidates]
float gen_pz_[maxCandidates]
std::string qgtaggerInst_
JME::JetResolutionScaleFactor res_sf_
bool trkqual_[10][maxCandidates]