DESY Hbb Analysis Framework
Candidates.cc
Go to the documentation of this file.
1 
8 //
9 // Original Author: Roberval Walsh Bastos Rangel
10 // Created: Mon, 20 Oct 2014 14:24:08 GMT
11 //
12 //
13 
14 // system include files
15 //
16 #include <regex>
17 #include <boost/core/demangle.hpp>
18 
19 // user include files
20 #include "FWCore/Framework/interface/Event.h"
21 //
22 #include "FWCore/ParameterSet/interface/ParameterSet.h"
23 
24 #include "DataFormats/Candidate/interface/Candidate.h"
25 #include "DataFormats/Candidate/interface/CandidateFwd.h"
26 
27 #include "DataFormats/L1Trigger/interface/L1JetParticle.h"
28 #include "DataFormats/L1Trigger/interface/L1JetParticleFwd.h"
29 
30 #include "DataFormats/L1Trigger/interface/L1MuonParticle.h"
31 #include "DataFormats/L1Trigger/interface/L1MuonParticleFwd.h"
32 
33 #include "DataFormats/L1Trigger/interface/Jet.h"
34 #include "DataFormats/L1Trigger/interface/Muon.h"
35 
36 #include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h"
37 #include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h"
38 
39 #include "DataFormats/JetReco/interface/CaloJet.h"
40 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
41 
42 #include "DataFormats/JetReco/interface/PFJet.h"
43 #include "DataFormats/JetReco/interface/PFJetCollection.h"
44 
45 #include "DataFormats/MuonReco/interface/Muon.h"
46 #include "DataFormats/MuonReco/interface/MuonFwd.h"
47 
48 #include "DataFormats/TrackReco/interface/Track.h"
49 #include "DataFormats/TrackReco/interface/TrackFwd.h"
50 
51 
52 #include "DataFormats/PatCandidates/interface/Jet.h"
53 #include "DataFormats/PatCandidates/interface/Muon.h"
54 #include "DataFormats/PatCandidates/interface/MET.h"
55 
56 #include "DataFormats/JetReco/interface/GenJet.h"
57 
58 #include "DataFormats/HepMCCandidate/interface/GenParticle.h"
59 #include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h"
60 
61 #include "CommonTools/Utils/interface/PtComparator.h"
62 
63 #include "DataFormats/HLTReco/interface/TriggerEvent.h"
64 #include "DataFormats/HLTReco/interface/TriggerTypeDefs.h"
65 #include "DataFormats/PatCandidates/interface/TriggerObjectStandAlone.h"
66 
68 
69 #include "FWCore/Framework/interface/ESHandle.h"
70 
71 #include "DataFormats/Common/interface/TriggerResults.h"
72 
73 #include "DataFormats/VertexReco/interface/Vertex.h"
74 
75 
76 #include "TTree.h"
77 
78 
79 //
80 // class declaration
81 //
82 
83 using namespace analysis;
84 using namespace analysis::ntuple;
85 
86 // member functions specialization - needed to be declared in the same namespace as the class
87 namespace analysis {
88  namespace ntuple {
89  template <> void Candidates<pat::TriggerObject>::ReadFromEvent(const edm::Event& event);
90  template <> void Candidates<pat::TriggerObject>::TriggerObjectType(const std::string& trigobj_type);
91  template <> void Candidates<pat::Jet>::JECRecord(const std::string & jr);
92  template <> void Candidates<trigger::TriggerObject>::ReadFromEvent(const edm::Event& event);
93  template <> void Candidates<l1t::Jet>::ReadFromEvent(const edm::Event& event);
94  template <> void Candidates<l1t::Muon>::ReadFromEvent(const edm::Event& event);
96  template <> void Candidates<l1t::Jet>::Kinematics();
97  template <> void Candidates<l1t::Muon>::Kinematics();
98  template <> void Candidates<reco::Track>::Kinematics();
99  }
100 }
101 //
102 // constructors and destructor
103 //
104 template <typename T>
106 {
107  // default constructor
108 }
109 
110 template <typename T>
111 Candidates<T>::Candidates(const edm::InputTag& tag, TTree* tree, const bool & mc, float minPt, float maxEta ) :
112  minPt_(minPt), maxEta_(maxEta)
113 {
114  input_collection_ = tag;
115  tree_ = tree;
116 
117  is_mc_ = mc;
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;
121  is_recomuon_ = std::is_same<T,reco::Muon>::value;
122  is_recotrack_ = std::is_same<T,reco::Track>::value;
123  is_pfjet_ = std::is_same<T,reco::PFJet>::value;
124  is_patjet_ = std::is_same<T,pat::Jet>::value;
125  is_patmuon_ = std::is_same<T,pat::Muon>::value;
126  is_patmet_ = std::is_same<T,pat::MET>::value;
127  is_genjet_ = std::is_same<T,reco::GenJet>::value;
128  is_genparticle_ = std::is_same<T,reco::GenParticle>::value;
129  is_trigobject_ = std::is_same<T,pat::TriggerObject>::value;
130  is_trigobject_reco_ = std::is_same<T,trigger::TriggerObject>::value;
131  is_l1tjet_ = std::is_same<T,l1t::Jet>::value;
132  is_l1tmuon_ = std::is_same<T,l1t::Muon>::value;
133  is_chargedcand_ = std::is_same<T,reco::RecoChargedCandidate>::value;
134 
135 // do_kinematics_ = ( is_l1jet_ || is_l1muon_ || is_calojet_ || is_pfjet_ || is_patjet_ || is_patmuon_ || is_genjet_ || is_genparticle_ );
136  do_kinematics_ = true;
138 
139  higgs_pdg_ = 36;
140 
141 
142  std::string title = boost::core::demangle(typeid(T).name()) + " | " + tree_->GetTitle();
143 
144  tree_->SetTitle(title.c_str());
145 
146  // definitions
147  // jetid
148  id_vars_.clear();
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" });
157 
158  // init
159  btag_vars_.clear();
160 
161  // JEC info default
162  jecRecord_ = "";
163  jecFile_ = "";
164 
165  // trigger object split
166  trigobj_type_ = "";
167 
168  // pat jet user vars default
169  qgtaggerInst_ = "";
170  pujetidInst_ = "";
171 
172 }
173 
174 template <typename T>
176 {
177  // do anything here that needs to be done at desctruction time
178  // (e.g. close files, deallocate resources etc.)
179 }
180 
181 
182 //
183 // member functions
184 //
185 
186 // ------------ method called for each event ------------
187 template <typename T>
188 void Candidates<T>::ReadFromEvent(const edm::Event& event)
189 {
190  using namespace edm;
191 
192  // Candidates
193  candidates_.clear();
194  edm::Handle<std::vector<T> > handler;
195  event.getByLabel(input_collection_, handler);
196  candidates_ = *(handler.product());
197 }
198 // Specialization for l1t jets
199 template <>
200 void Candidates<l1t::Jet>::ReadFromEvent(const edm::Event& event)
201 {
202  using namespace edm;
203 
204  // Candidates
205  candidates_.clear();
206  edm::Handle<l1t::JetBxCollection> handler;
207  event.getByLabel(input_collection_, handler);
208  BXVector<l1t::Jet> l1jets = *(handler.product());
209  for ( auto l1jet : l1jets )
210  {
211  candidates_.push_back(l1jet);
212  }
213  // Sort the objects by pt
214  NumericSafeGreaterByPt<l1t::Jet> l1tjetGreaterByPt;
215  std::sort (candidates_.begin(), candidates_.end(),l1tjetGreaterByPt);
216 
217 }
218 // Specialization for l1t muons
219 template <>
220 void Candidates<l1t::Muon>::ReadFromEvent(const edm::Event& event)
221 {
222  using namespace edm;
223 
224  // Candidates
225  candidates_.clear();
226  edm::Handle<l1t::MuonBxCollection> handler;
227  event.getByLabel(input_collection_, handler);
228  BXVector<l1t::Muon> l1muons = *(handler.product());
229  for ( auto l1muon : l1muons )
230  {
231  candidates_.push_back(l1muon);
232  }
233  // Sort the objects by pt
234  NumericSafeGreaterByPt<l1t::Muon> l1tmuonGreaterByPt;
235  std::sort (candidates_.begin(), candidates_.end(),l1tmuonGreaterByPt);
236 
237 }
238 
239 // Specialization for trigger objects (pat)
240 template <>
242 {
243  using namespace edm;
244 
245  Handle<TriggerResults> trhandler;
246  event.getByLabel(triggerresults_collection_, trhandler);
247  const TriggerResults & trgres = *(trhandler.product());
248 
249  candidates_.clear();
250  // The stand alone collection
251  edm::Handle<pat::TriggerObjectStandAloneCollection> handler;
252  event.getByLabel(input_collection_, handler);
253 
254  const std::string treename = tree_ -> GetName(); // using the label to name the tree
255  const std::string delimiter = "_";
256  std::string label = treename.substr(0, treename.find(delimiter));
257 
258  for ( auto ito : *handler )
259  {
260  ito.unpackFilterLabels(event,trgres);
261  if ( ito.filter(label) )
262  {
263  if ( trigobj_type_ != "" )
264  {
265  int type = ito.triggerObject().triggerObjectTypes().at(0);
266  if ( trigobj_type_ == "l1muon" )
267  {
268  if ( type == trigger::TriggerL1Mu ) candidates_.push_back(ito.triggerObject());
269  }
270  else if ( trigobj_type_ == "l1jet" )
271  {
272  if ( type == trigger::TriggerL1Jet ) candidates_.push_back(ito.triggerObject());
273  }
274  else if ( trigobj_type_ == "hltmuon" )
275  {
276  if ( type == trigger::TriggerMuon ) candidates_.push_back(ito.triggerObject());
277  }
278  else if ( trigobj_type_ == "hltjet" )
279  {
280  if ( type == trigger::TriggerJet ) candidates_.push_back(ito.triggerObject());
281  }
282  else if ( trigobj_type_ == "hltbjet" )
283  {
284  if ( type == trigger::TriggerBJet ) candidates_.push_back(ito.triggerObject());
285  }
286  }
287  else
288  {
289  candidates_.push_back(ito.triggerObject());
290  }
291  }
292  }
293 
294  // Sort the objects by pt
295  NumericSafeGreaterByPt<pat::TriggerObject> triggerObjectGreaterByPt;
296  std::sort (candidates_.begin(), candidates_.end(),triggerObjectGreaterByPt);
297 }
298 template <>
299 void Candidates<pat::TriggerObject>::TriggerObjectType(const std::string& trigobj_type)
300 {
301  trigobj_type_ = trigobj_type;
302 }
303 
304 // Specialization for trigger objects (trigger - reco)
305 template <>
307 {
308  using namespace edm;
309 
310  candidates_.clear();
311  // The stand alone collection
312 
313  edm::Handle<trigger::TriggerEvent> handler;
314  event.getByLabel(input_collection_, handler);
315 
316  const std::string treename = tree_ -> GetName(); // using the label to name the tree
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() )
322  {
323  const trigger::Keys& keys(handler->filterKeys(filterIndex));
324  const trigger::TriggerObjectCollection & triggerObjects = handler->getObjects();
325  for ( auto & key : keys )
326  {
327  candidates_.reserve(candidates_.size()+keys.size());
328  candidates_.push_back(triggerObjects[key]);
329  }
330  }
331 
332  // Sort the objects by pt
333  NumericSafeGreaterByPt<trigger::TriggerObject> triggerObjectGreaterByPt;
334  std::sort (candidates_.begin(), candidates_.end(),triggerObjectGreaterByPt);
335 }
336 
337 template <typename T>
339 {
340  using namespace edm;
341 
342  int n = 0;
343  for ( size_t i = 0 ; i < candidates_.size(); ++i )
344  {
345  if ( n >= maxCandidates ) break;
346 
347  if ( minPt_ >= 0. && candidates_[i].pt() < minPt_ ) continue;
348  if ( maxEta_ >= 0. && fabs(candidates_[i].eta()) > maxEta_ ) continue;
349 
350  if ( is_genparticle_ )
351  {
352  reco::GenParticle * gp = dynamic_cast<reco::GenParticle*> (&candidates_[i]);
353  int pdg = gp -> pdgId();
354  int status = gp -> status(); // any status selection?
355  if ( abs(pdg) > 38 ) continue;
356  pdg_[n] = pdg;
357  status_[n]= status;
358  lastcopy_[n] = gp -> isLastCopy();
359  indx_[n] = i;
360  mo1_[n] = -1;
361  mo2_[n] = -1;
362  da1_[n] = -1;
363  da2_[n] = -1;
364  if ( gp->numberOfMothers() > 0 )
365  {
366  mo1_[n] = gp->motherRef(0).key();
367  mo2_[n] = gp->motherRef(gp->numberOfMothers()-1).key();
368  }
369  if ( gp->numberOfDaughters() > 0 )
370  {
371  da1_[n] = gp->daughterRef(0).key();
372  da2_[n] = gp->daughterRef(gp->numberOfDaughters()-1).key();
373  }
374  const reco::Candidate * mother = gp->mother(0);
375  higgs_dau_[n] = false;
376  if ( mother != NULL ) // initial protons are orphans
377  {
378  if ( mother->pdgId() == 36 || mother->pdgId() == 25 )
379  higgs_dau_[n] = true;
380  }
381  mass_[n] = gp->mass();
382  }
383 
384  pt_[n] = candidates_[i].pt();
385  eta_[n] = candidates_[i].eta();
386  phi_[n] = candidates_[i].phi();
387  px_[n] = candidates_[i].px();
388  py_[n] = candidates_[i].py();
389  pz_[n] = candidates_[i].pz();
390  q_[n] = candidates_[i].charge();
391  e_[n] = candidates_[i].energy();
392  et_[n] = candidates_[i].et();
393 
394  // PAT MUONS
395  if ( is_patmuon_ )
396  {
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 ;
400  //const reco::Vertex::Error error = muon->reco::LeafCandidate::vertexCovariance(); not implemented at edm level
401 
402  const reco::Vertex vtx ( vtxp, error ) ;
403 
404  isPFMuon_ [n] = muon->isPFMuon() ;
405  isGlobalMuon_ [n] = muon->isGlobalMuon() ;
406  isTrackerMuon_ [n] = muon->isTrackerMuon();
407 
408  isLooseMuon_ [n] = muon->isLooseMuon() ;
409  isMediumMuon_ [n] = muon->isMediumMuon();
410  isTightMuon_ [n] = muon->isTightMuon( vtx ) ;
411 
412  // default values
413  segmentCompatibility_ [n] = -1.;
414  validFraction_ [n] = -1.;
415  matchedStations_ [n] = 9999.;
416  validPixelHits_ [n] = 9999.;
417  validMuonHits_ [n] = 9999.;
418  trkLayersWithMeasurement_ [n] = 9999.;
419  trkKink_ [n] = 9999.;
420  ipxy_ [n] = 9999.;
421  ipz_ [n] = 9999.;
422  normChi2_ [n] = 9999.;
423  chi2LocalPos_ [n] = 9999.;
424 
425 
426  if ( isPFMuon_[n] && ( isGlobalMuon_[n] || isTrackerMuon_[n] ) )
427  {
428  // muon chamber stations
429  segmentCompatibility_ [n] = muon->segmentCompatibility() ; // medium muon
430  matchedStations_ [n] = muon->numberOfMatchedStations() ; // at least 2 in tight
431 
432  //inner tracker
433  validFraction_ [n] = muon->innerTrack()->validFraction() ;
434  validPixelHits_ [n] = muon->innerTrack()->hitPattern().numberOfValidPixelHits() ;
435  trkLayersWithMeasurement_ [n] = muon->innerTrack()->hitPattern().trackerLayersWithMeasurement() ;
436 
437  //transverse and longitudinal ip - tracker only
438  ipxy_[n] = fabs(muon->muonBestTrack()->dxy(vtx.position())) ;
439  ipz_ [n] = fabs(muon->muonBestTrack()->dz (vtx.position())) ;
440 
441  //global tracker - only for GlobalMuons
442  if ( isGlobalMuon_[n] )
443  {
444  normChi2_ [n] = muon->normChi2();
445  trkKink_ [n] = muon->combinedQuality().trkKink;
446  chi2LocalPos_[n] = muon->combinedQuality().chi2LocalPosition;
447  validMuonHits_[n] = muon->globalTrack()->hitPattern().numberOfValidMuonHits();
448  }
449  }
450  }
451 
452  // PAT JETS
453  if ( is_patjet_ )
454  {
455  pat::Jet * jet = dynamic_cast<pat::Jet*> (&candidates_[i]);
456 
457 // std::string sv = "pfSecondaryVertexTagInfos";
458 // std::cout << "oioi " << sv << std::endl;
459 // const reco::SecondaryVertexTagInfo * svTI = jet->tagInfoSecondaryVertex("secondaryVertex");
460 // std::cout << "oioi " << svTI << std::endl;
461 
462 // //
463 // std::vector<std::string> tagNames = jet -> userIntNames();
464 // std::cout << "Jet has " << tagNames.size() << " tags" << std::endl;
465 // for ( size_t it = 0 ; it < tagNames.size() ; ++it )
466 // {
467 // std::cout << " Tag Name = " << tagNames[it] << std::endl;
468 // }
469 
470  if ( jet->hasUserFloat("bJetRegCorr") ) bjetRegCorr_[n] = jet->userFloat("bJetRegCorr");
471  else bjetRegCorr_[n] = 1;
472 
473  if ( jet->hasUserFloat("bJetRegRes") ) bjetRegRes_[n] = jet->userFloat("bJetRegRes");
474  else bjetRegRes_[n] = 1;
475 
476  for ( size_t it = 0 ; it < btag_vars_.size() ; ++it )
477  {
478  btag_[it][n] = jet->bDiscriminator(btag_vars_[it].title);
479  }
480 
481  if ( jet -> isPFJet() || jet -> isJPTJet() )
482  {
483  jetid_[0][n] = jet->neutralHadronEnergyFraction();
484  jetid_[1][n] = jet->neutralEmEnergyFraction();
485  if ( jet->hasUserFloat("patPuppiJetSpecificProducer:neutralPuppiMultiplicity") )
486  {
487  jetid_[2][n] = jet->userFloat("patPuppiJetSpecificProducer:neutralPuppiMultiplicity");
488  }
489  else
490  {
491  jetid_[2][n] = (float)jet->neutralMultiplicity();
492  }
493  jetid_[3][n] = jet->chargedHadronEnergyFraction();
494  jetid_[4][n] = jet->chargedEmEnergyFraction();
495  if ( jet->hasUserFloat("patPuppiJetSpecificProducer:neutralPuppiMultiplicity") && jet->hasUserFloat("patPuppiJetSpecificProducer:puppiMultiplicity") )
496  {
497  jetid_[5][n] = jet->userFloat("patPuppiJetSpecificProducer:puppiMultiplicity") - jet->userFloat("patPuppiJetSpecificProducer:neutralPuppiMultiplicity");
498  jetid_[7][n] = 1.;
499  }
500  else
501  {
502  jetid_[5][n] = (float)jet->chargedMultiplicity();
503  jetid_[7][n] = -1.;
504  }
505  jetid_[6][n] = jet->muonEnergyFraction();
506  }
507  else // set some dummy values
508  {
509  for ( size_t ii = 0; ii < 7; ++ii ) jetid_[ii][n] = -1.;
510  }
511  flavour_ [n] = 0;
512  hadronFlavour_ [n] = 0;
513  partonFlavour_ [n] = 0;
514  physicsFlavour_ [n] = 0;
515  if ( is_mc_ )
516  {
517  flavour_ [n] = jet->hadronFlavour();
518  hadronFlavour_ [n] = jet->hadronFlavour();
519  partonFlavour_ [n] = jet->partonFlavour();
520  if (jet->genParton())
521  physicsFlavour_[n] = jet->genParton()->pdgId();
522  }
523 
524  // JEC Uncertainties
525  if ( jecRecord_ != "" )
526  {
527  jecUnc_->setJetEta(eta_[n]);
528  jecUnc_->setJetPt(pt_[n]);
529  jecUncert_[n] = jecUnc_->getUncertainty(true);
530  }
531  else
532  {
533  jecUncert_[n] = -1.;
534  }
535  //JER
536  if( jerRecord_ != "" )
537  {
538  // SetUp Jet parameters
539  JME::JetParameters jerParamRes;
540  jerParamRes.setJetPt(pt_[n]);
541  jerParamRes.setJetEta(eta_[n]);
542  jerParamRes.setRho(rho_);
543 
544  // Return JER
545  jerResolution_[n] = res_.getResolution(jerParamRes);
546 
547  JME::JetParameters jerParamSF;
548  jerParamSF.set(JME::Binning::JetPt, pt_[n]);
549  jerParamSF.set(JME::Binning::JetEta, eta_[n]);
550  jerParamSF.set(JME::Binning::Rho, rho_);
551 
552  jerSF_[n] = res_sf_.getScaleFactor(jerParamSF);
553  jerSFUp_[n] = res_sf_. getScaleFactor(jerParamSF,Variation::UP);
554  jerSFDown_[n] = res_sf_. getScaleFactor(jerParamSF,Variation::DOWN);
555 
556  }
557  else
558  {
559  jerResolution_[n] = -1;
560  jerSF_[n] = -1;
561  jerSFUp_[n] = -1;
562  jerSFDown_[n] = -1;
563  }
564 
565  // quark-gluon likelihood
566  qgLikelihood_[n] = -10.;
567  std::string qgkey = qgtaggerInst_+":qgLikelihood";
568  if ( jet -> hasUserFloat(qgkey) )
569  {
570  qgLikelihood_[n] = jet->userFloat(qgkey);
571  }
572 
573  // jet pileup id
574  puJetIdFullDiscr_[n] = -10.;
575  std::string pudisckey = pujetidInst_+":fullDiscriminant";
576  if ( jet -> hasUserFloat(pudisckey) )
577  {
578  puJetIdFullDiscr_[n] = jet -> userFloat(pudisckey);
579  }
580  puJetIdFullId_[n] = -1;
581  std::string puidkey = pujetidInst_+":fullId";
582  if ( jet -> hasUserInt(puidkey) )
583  {
584  puJetIdFullId_[n] = jet -> userInt(puidkey);
585  }
586 
587 
588  }
589  if ( is_pfjet_ )
590  {
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();
599  }
600  if ( is_patmet_ )
601  {
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);
607  if ( is_mc_ )
608  {
609  const reco::GenMET * genMET = met->genMET();
610  gen_px_[n] = genMET->px();;
611  gen_py_[n] = genMET->py();;
612  gen_pz_[n] = genMET->pz();;
613  }
614  }
615 
616  if ( is_trigobject_ )
617  {
618  pat::TriggerObject * to = dynamic_cast<pat::TriggerObject*> (&candidates_[i]);
619  type_[n] = 0;
620  if ( to->triggerObjectTypes().size() > 0 )
621  type_[n] = to->triggerObjectTypes().at(0);
622  }
623  if ( is_trigobject_reco_ )
624  {
625  trigger::TriggerObject * to = dynamic_cast<trigger::TriggerObject*> (&candidates_[i]);
626  type_[n] = to -> id();
627  }
628 
629  ++n;
630  }
631 
632  n_ = n;
633 
634 }
635 
636 template <>
638 {
639  using namespace edm;
640 
641  int n = 0;
642  for ( size_t i = 0 ; i < candidates_.size(); ++i )
643  {
644  if ( n >= maxCandidates ) break;
645 
646  if ( minPt_ >= 0. && candidates_[i].pt() < minPt_ ) continue;
647  if ( maxEta_ >= 0. && fabs(candidates_[i].eta()) > maxEta_ ) continue;
648 
649  pt_[n] = candidates_[i].pt();
650  eta_[n] = candidates_[i].eta();
651  phi_[n] = candidates_[i].phi();
652  px_[n] = candidates_[i].px();
653  py_[n] = candidates_[i].py();
654  pz_[n] = candidates_[i].pz();
655  e_[n] = candidates_[i].energy();
656  et_[n] = candidates_[i].et();
657  q_[n] = 0;
658  type_[n] = candidates_[i].id();
659 
660  ++n;
661  }
662  n_ = n;
663 
664 }
665 
666 template <>
668 {
669  using namespace edm;
670 
671  int n = 0;
672 
673  for ( size_t i = 0 ; i < candidates_.size(); ++i )
674  {
675  l1t::Jet * cand = dynamic_cast<l1t::Jet*> (&candidates_[i]);
676  if ( n >= maxCandidates ) break;
677 
678  pt_[n] = cand->pt();
679  eta_[n] = cand->eta();
680  phi_[n] = cand->phi();
681  px_[n] = cand->px();
682  py_[n] = cand->py();
683  pz_[n] = cand->pz();
684  e_[n] = cand->energy();
685  et_[n] = cand->et();
686  q_[n] = cand->charge();
687 
688  ++n;
689  }
690  n_ = n;
691 
692 }
693 
694 template <>
696 {
697  using namespace edm;
698 
699  int n = 0;
700 
701  for ( size_t i = 0 ; i < candidates_.size(); ++i )
702  {
703  l1t::Muon * cand = dynamic_cast<l1t::Muon*> (&candidates_[i]);
704  if ( n >= maxCandidates ) break;
705 
706  pt_[n] = cand->pt();
707  eta_[n] = cand->eta();
708  phi_[n] = cand->phi();
709  px_[n] = cand->px();
710  py_[n] = cand->py();
711  pz_[n] = cand->pz();
712  e_[n] = cand->energy();
713  et_[n] = cand->et();
714  q_[n] = cand->charge();
715  hwQual_[n] = cand->hwQual();
716  etaAtVtx_[n] = cand->etaAtVtx();
717  phiAtVtx_[n] = cand->phiAtVtx();
718 
719 
720  ++n;
721  }
722  n_ = n;
723 
724 }
725 
726 template <>
728 {
729  using namespace edm;
730 
731  int n = 0;
732 
733  for ( size_t i = 0 ; i < candidates_.size(); ++i )
734  {
735  reco::Track * cand = dynamic_cast<reco::Track*> (&candidates_[i]);
736  if ( n >= maxCandidates ) break;
737 
738  pt_[n] = cand->pt();
739  eta_[n] = cand->eta();
740  phi_[n] = cand->phi();
741  px_[n] = cand->px();
742  py_[n] = cand->py();
743  pz_[n] = cand->pz();
744  q_[n] = cand->charge();
745 
746  trkchi2_[n] = cand->chi2();
747  trkndof_[n] = cand->ndof();
748  trkd0_[n] = cand->d0();
749  trkdxy_[n] = cand->dxy();
750 
751 
753  trkqual_[1][n] = cand->quality(reco::TrackBase::TrackQuality::loose );
754  trkqual_[2][n] = cand->quality(reco::TrackBase::TrackQuality::tight );
755  trkqual_[3][n] = cand->quality(reco::TrackBase::TrackQuality::highPurity );
756  trkqual_[4][n] = cand->quality(reco::TrackBase::TrackQuality::confirmed );
760  trkqual_[8][n] = cand->quality(reco::TrackBase::TrackQuality::discarded );
762 
763  trkhp_lostmu_[n] = cand -> hitPattern().numberOfLostMuonHits() ;
764  trkhp_valmu_[n] = cand -> hitPattern().numberOfValidMuonHits() ;
765  trkhp_badmu_[n] = cand -> hitPattern().numberOfBadMuonHits() ;
766 
767  trkhp_valtrkhits_[n] = cand -> hitPattern().numberOfValidTrackerHits() ;
768  trkhp_valtechits_[n] = cand -> hitPattern().numberOfValidStripTECHits();
769  trkhp_valtibhits_[n] = cand -> hitPattern().numberOfValidStripTIBHits();
770  trkhp_valtidhits_[n] = cand -> hitPattern().numberOfValidStripTIDHits();
771  trkhp_valtobhits_[n] = cand -> hitPattern().numberOfValidStripTOBHits();
772 
773  trkhp_stationsvalhits_[n] = cand -> hitPattern().muonStationsWithValidHits () ;
774  trkhp_stationsbadhits_[n] = cand -> hitPattern().muonStationsWithBadHits () ;
775  trkhp_innerstationsvalhits_[n] = cand -> hitPattern().innermostMuonStationWithValidHits ();
776  trkhp_outerstationsvalhits_[n] = cand -> hitPattern().outermostMuonStationWithValidHits ();
777 
778 
779  ++n;
780  }
781  n_ = n;
782 
783 }
784 
785 
786 template <typename T>
787 void Candidates<T>::JECRecord(const std::string& jr)
788 {
789  jecRecord_ = "";
790 }
791 
792 template <>
793 void Candidates<pat::Jet>::JECRecord(const std::string& jr)
794 {
795  jecRecord_ = jr;
796 }
797 
798 
799 template <typename T>
800 void Candidates<T>::MinPt(const float& minPt)
801 {
802  minPt_ = minPt;
803 }
804 
805 template <typename T>
806 void Candidates<T>::MaxEta(const float& maxEta)
807 {
808  maxEta_ = maxEta;
809 }
810 
811 
812 template <typename T>
814 {
815  tree_->Fill();
816 }
817 
818 template <typename T>
819 void Candidates<T>::Fill(const edm::Event& event)
820 {
821  ReadFromEvent(event);
822  if ( do_kinematics_ ) Kinematics();
823  Fill();
824 }
825 
826 template <typename T>
827 void Candidates<T>::Fill(const edm::Event& event, const edm::EventSetup& setup)
828 {
829  if ( jecRecord_ != "" )
830  {
831  if ( jecFile_ != "" )
832  {
833  jecUnc_ = std::unique_ptr<JetCorrectionUncertainty>(new JetCorrectionUncertainty(jecFile_));
834  }
835  else
836  {
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));
841  }
842  }
843 
844  if (jerRecord_ != "" )
845  {
846  if(jerFile_ != "" && jersfFile_ != "")
847  {
850  }
851  else
852  {
853  std::string label_pt = jerRecord_ + "_pt";
854  res_ = JME::JetResolution::get(setup,label_pt);
855  std::string label_sf = jerRecord_;
856  res_sf_ = JME::JetResolutionScaleFactor::get(setup,label_sf);
857  }
858 
859  edm::Handle<double> rhoHandler;
860  event.getByLabel(rho_collection_, rhoHandler);
861  rho_ = *(rhoHandler.product());
862 
863  }
864 
865  Fill(event);
866 }
867 
868 // ------------ method called once each job just before starting event loop ------------
869 
870 template <typename T>
872 {
873  // kinematics output info
874  if ( do_kinematics_ )
875  {
876  tree_->Branch("n", &n_, "n/I");
877  tree_->Branch("pt", pt_, "pt[n]/F");
878  tree_->Branch("eta", eta_, "eta[n]/F");
879  tree_->Branch("phi", phi_, "phi[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");
884 
885  if ( ! is_recotrack_ )
886  {
887  tree_->Branch("e", e_, "e[n]/F");
888  tree_->Branch("et", et_, "et[n]/F");
889  }
890 
891 
892  if ( is_genparticle_ )
893  {
894  tree_->Branch("index",indx_, "index[n]/I");
895  tree_->Branch("pdg", pdg_, "pdg[n]/I");
896  tree_->Branch("status",status_,"status[n]/I");
897  tree_->Branch("last_copy",lastcopy_,"last_copy[n]/O");
898  tree_->Branch("higgs_dau",higgs_dau_,"higgs_dau[n]/O");
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");
903  tree_->Branch("mass",mass_,"mass[n]/F");
904  }
905 
906  if ( is_patmuon_ )
907  {
908  tree_->Branch("isPFMuon", isPFMuon_, "isPFMuon[n]/O");
909  tree_->Branch("isGlobalMuon", isGlobalMuon_, "isGlobalMuon[n]/O");
910  tree_->Branch("isTrackerMuon",isTrackerMuon_,"isTrackerMuon[n]/O");
911  tree_->Branch("isLooseMuon", isLooseMuon_, "isLooseMuon[n]/O");
912  tree_->Branch("isMediumMuon", isMediumMuon_, "isMediumMuon[n]/O");
913  tree_->Branch("isTightMuon", isTightMuon_, "isTightMuon[n]/O");
914 
915  tree_->Branch("validFraction", validFraction_, "validFraction[n]/F");
916  tree_->Branch("segmentCompatibility", segmentCompatibility_, "segmentCompatibility[n]/F");
917 
918  tree_->Branch("matchedStations", matchedStations_, "matchedStations[n]/F");
919  tree_->Branch("validPixelHits", validPixelHits_, "validPixelHits[n]/F" );
920  tree_->Branch("validMuonHits", validMuonHits_, "validMuonHits[n]/F" );
921  tree_->Branch("trkLayersWithMeasurement", trkLayersWithMeasurement_, "trkLayersWithMeasurement[n]/F");
922  tree_->Branch("ipxy", ipxy_, "ipxy[n]/F" );
923  tree_->Branch("ipz", ipz_, "ipz[n]/F" );
924 
925 
926  tree_->Branch("normChi2", normChi2_, "normChi2[n]/F");
927  tree_->Branch("trkKink", trkKink_, "trkKink[n]/F");
928  tree_->Branch("chi2LocalPos", chi2LocalPos_, "chi2LocalPos[n]/F");
929 
930  }
931 
932  if ( is_patjet_ )
933  {
934  for ( size_t it = 0 ; it < btag_vars_.size() ; ++it )
935  {
936  std::string title = btag_vars_[it].title;
937  if (title.find(":") != std::string::npos)
938  {
939  title = std::regex_replace(title, std::regex("\\:"), "_");
940  }
941  tree_->Branch(btag_vars_[it].alias.c_str(), btag_[it], (title+"[n]/F").c_str());
942 // tree_->Branch(btag_vars_[it].alias.c_str(), btag_[it], (btag_vars_[it].title+"[n]/F").c_str());
943 // std::cout << btag_vars_[it].alias.c_str() << " " << title.c_str() << std::endl;
944  }
945 
946  tree_->Branch("flavour", flavour_, "flavour[n]/I");
947  tree_->Branch("hadronFlavour", hadronFlavour_, "hadronFlavour[n]/I" );
948  tree_->Branch("partonFlavour", partonFlavour_, "partonFlavour[n]/I" );
949  tree_->Branch("physicsFlavour", physicsFlavour_, "physicsFlavour[n]/I");
950 
951 // if ( jecRecord_ != "" )
952 // {
953  tree_->Branch("jecUncert", jecUncert_, "jecUncert[n]/F");
954  tree_->Branch("jerResolution",jerResolution_,"jerResolution[n]/F");
955  tree_->Branch("jerSF",jerSF_,"jerSF[n]/F");
956  tree_->Branch("jerSFUp",jerSFUp_,"jerSFUp[n]/F");
957  tree_->Branch("jerSFDown",jerSFDown_,"jerSFDown[n]/F");
958  tree_->Branch("Rho",&rho_,"Rho/D");
959 // }
960  tree_->Branch("qgLikelihood", qgLikelihood_, "qgLikelihood[n]/F");
961  tree_->Branch("puJetIdFullDiscriminant", puJetIdFullDiscr_, "puJetIdFullDiscriminant[n]/F");
962  tree_->Branch("puJetIdFullId", puJetIdFullId_, "puJetIdFullId[n]/I");
963 
964  tree_->Branch("bjetRegCorr",bjetRegCorr_,"bjetRegCorr_[n]/F");
965  tree_->Branch("bjetRegRes",bjetRegRes_,"bjetRegRes_[n]/F");
966 
967  }
968  if ( is_pfjet_ || is_patjet_ )
969  {
970  for ( size_t it = 0 ; it < id_vars_.size() ; ++it )
971  tree_->Branch(id_vars_[it].alias.c_str(), jetid_[it], (id_vars_[it].title+"[n]/F").c_str());
972  }
973  if ( is_patmet_ )
974  {
975  tree_->Branch("sigxx", sigxx_, "sigxx[n]/F");
976  tree_->Branch("sigxy", sigxy_, "sigxy[n]/F");
977  tree_->Branch("sigyx", sigyx_, "sigyx[n]/F");
978  tree_->Branch("sigyy", sigyy_, "sigyy[n]/F");
979  if ( is_mc_ )
980  {
981  tree_->Branch("gen_px", gen_px_, "gen_px[n]/F");
982  tree_->Branch("gen_py", gen_py_, "gen_py[n]/F");
983  tree_->Branch("gen_pz", gen_pz_, "gen_pz[n]/F");
984  }
985  }
986 
988  {
989  // there may be more than one type for an object, one has to be careful depending on the trigger
990  // for now only the first entry is used.
991  // definitions in DataFormats/HLTReco/interface/TriggerTypeDefs.h
992  tree_->Branch("type", type_, "type[n]/I");
993  }
994 
995  if ( is_l1tmuon_ )
996  {
997  tree_->Branch("hwQual" , hwQual_ , "hwQual[n]/I");
998  tree_->Branch("etaAtVtx", etaAtVtx_, "etaAtVtx[n]/F");
999  tree_->Branch("phiAtVtx", phiAtVtx_, "phiAtVtx[n]/F");
1000  }
1001 
1002  if ( is_recotrack_ )
1003  {
1004  tree_->Branch("chi2", trkchi2_, "chi2[n]/F");
1005  tree_->Branch("ndof", trkndof_, "ndof[n]/F");
1006  tree_->Branch("d0", trkd0_, "d0[n]/F");
1007  tree_->Branch("dxy", trkdxy_, "dxy[n]/F");
1008 
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()));
1022 
1023  // hit pattern
1024  tree_->Branch("numberOfLostMuonHits" ,trkhp_lostmu_, "numberOfLostMuonHits[n]/I");
1025  tree_->Branch("numberOfValidMuonHits",trkhp_valmu_ , "numberOfValidMuonHits[n]/I");
1026  tree_->Branch("numberOfBadMuonHits", trkhp_badmu_ , "numberOfBadMuonHits[n]/I");
1027 
1028  tree_->Branch("numberOfValidTrackerHits" ,trkhp_valtrkhits_,"numberOfValidTrackerHits[n]/I");
1029  tree_->Branch("numberOfValidStripTECHits",trkhp_valtechits_,"numberOfValidStripTECHits[n]/I");
1030  tree_->Branch("numberOfValidStripTIBHits",trkhp_valtibhits_,"numberOfValidStripTIBHits[n]/I");
1031  tree_->Branch("numberOfValidStripTIDHits",trkhp_valtidhits_,"numberOfValidStripTIDHits[n]/I");
1032  tree_->Branch("numberOfValidStripTOBHits",trkhp_valtobhits_,"numberOfValidStripTOBHits[n]/I");
1033 
1034  tree_->Branch("muonStationsWithValidHits" , trkhp_stationsvalhits_ ,"muonStationsWithValidHits[n]/I");
1035  tree_->Branch("muonStationsWithBadHits" , trkhp_stationsbadhits_ ,"muonStationsWithBadHits[n]/I");
1036  tree_->Branch("innermostMuonStationWithValidHits" ,trkhp_innerstationsvalhits_,"innermostMuonStationWithValidHits[n]/I");
1037  tree_->Branch("outermostMuonStationWithValidHits" ,trkhp_outerstationsvalhits_,"outermostMuonStationWithValidHits[n]/I");
1038  }
1039 
1040 
1041  }
1042 
1043 
1044 }
1045 
1046 // Initialisation
1047 
1048 template <typename T>
1050 {
1051  Branches();
1052 }
1053 
1054 template <typename T>
1055 void Candidates<T>::Init( const std::vector<TitleAlias> & btagVars )
1056 {
1057  btag_vars_ = btagVars;
1058  if ( btag_vars_.size() > 15 )
1059  btag_vars_.erase(btag_vars_.begin()+15,btag_vars_.end());
1060  Init();
1061 
1062 }
1063 
1064 template <typename T>
1065 void Candidates<T>::UseTriggerResults(edm::InputTag& tr)
1066 {
1068 }
1069 
1070 
1071 
1072 template <typename T>
1073 void Candidates<T>::AddJecInfo( const std::string & jec )
1074 {
1075  // Will use confDB
1076  jecRecord_ = jec;
1077 }
1078 
1079 template <typename T>
1080 void Candidates<T>::AddJecInfo( const std::string & jec , const std::string & jec_file )
1081 {
1082  // Will use txt file
1083  jecRecord_ = jec;
1084  jecFile_ = jec_file;
1085 }
1086 
1087 template <typename T>
1088 void Candidates<T>::AddJerInfo( const std::string & jer, const edm::InputTag & rho )
1089 {
1090  // Will use confDB
1091  jerRecord_ = jer;
1092  rho_collection_ = rho;
1093 }
1094 
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)
1097 {
1098  // Will use txt file
1099  jerRecord_ = jer;
1100  jerFile_ = res_file;
1101  jersfFile_ = sf_file;
1102  rho_collection_ = rho;
1103 
1104 }
1105 
1106 template <typename T>
1107 void Candidates<T>::QGTaggerInstance(const std::string & instance)
1108 {
1109  qgtaggerInst_ = instance;
1110 }
1111 template <typename T>
1112 void Candidates<T>::PileupJetIdInstance(const std::string & instance)
1113 {
1114  pujetidInst_ = instance;
1115 }
1116 
1117 // Need to declare all possible template classes here
1118 template class Candidates<l1extra::L1JetParticle>;
1120 template class Candidates<reco::CaloJet>;
1121 template class Candidates<reco::PFJet>;
1122 template class Candidates<reco::Muon>;
1123 template class Candidates<reco::Track>;
1124 template class Candidates<pat::Jet>;
1125 template class Candidates<pat::Muon>;
1126 template class Candidates<pat::MET>;
1127 template class Candidates<reco::GenJet>;
1128 template class Candidates<reco::GenParticle>;
1129 template class Candidates<pat::TriggerObject>;
1130 template class Candidates<trigger::TriggerObject>;
1131 template class Candidates<l1t::Jet>;
1132 template class Candidates<l1t::Muon>;
int da2_[maxCandidates]
Definition: Candidates.h:172
int hwQual_[maxCandidates]
Definition: Candidates.h:190
float sigxx_[maxCandidates]
Definition: Candidates.h:176
int trkhp_valtidhits_[maxCandidates]
Definition: Candidates.h:208
float jerResolution_[maxCandidates]
Definition: Candidates.h:144
bool isTrackerMuon_[maxCandidates]
Definition: Candidates.h:109
float trkchi2_[maxCandidates]
Definition: Candidates.h:196
JetParameters & setJetEta(float eta)
int physicsFlavour_[maxCandidates]
Definition: Candidates.h:136
JetParameters & setRho(float rho)
float trkLayersWithMeasurement_[maxCandidates]
Definition: Candidates.h:121
float btag_[15][maxCandidates]
Definition: Candidates.h:132
int puJetIdFullId_[maxCandidates]
Definition: Candidates.h:157
int indx_[maxCandidates]
Definition: Candidates.h:164
def status(submission_dir, failed_only=False)
Definition: naf_submit.py:362
float etaAtVtx_[maxCandidates]
Definition: Candidates.h:192
std::vector< TitleAlias > btag_vars_
Definition: Candidates.h:250
float sigxy_[maxCandidates]
Definition: Candidates.h:177
std::unique_ptr< JetCorrectionUncertainty > jecUnc_
Definition: Candidates.h:88
float trkKink_[maxCandidates]
Definition: Candidates.h:126
edm::InputTag triggerresults_collection_
Definition: Candidates.h:84
int trkhp_valtrkhits_[maxCandidates]
Definition: Candidates.h:205
int type_[maxCandidates]
Definition: Candidates.h:187
void QGTaggerInstance(const std::string &)
Definition: Candidates.cc:1107
float ipxy_[maxCandidates]
Definition: Candidates.h:122
edm::InputTag rho_collection_
Definition: Candidates.h:142
JetParameters & set(const Binning &bin, float value)
int trkhp_stationsvalhits_[maxCandidates]
Definition: Candidates.h:210
float trkd0_[maxCandidates]
Definition: Candidates.h:198
void AddJerInfo(const std::string &, const edm::InputTag &)
Definition: Candidates.cc:1088
float phiAtVtx_[maxCandidates]
Definition: Candidates.h:193
int da1_[maxCandidates]
Definition: Candidates.h:171
float e_[maxCandidates]
Definition: Candidates.h:102
float bjetRegRes_[maxCandidates]
Definition: Candidates.h:162
int partonFlavour_[maxCandidates]
Definition: Candidates.h:135
std::vector< T > candidates_
Definition: Candidates.h:81
int status_[maxCandidates]
Definition: Candidates.h:166
int trkhp_innerstationsvalhits_[maxCandidates]
Definition: Candidates.h:212
int q_[maxCandidates]
Definition: Candidates.h:104
void AddJecInfo(const std::string &)
Definition: Candidates.cc:1073
bool isGlobalMuon_[maxCandidates]
Definition: Candidates.h:108
float pz_[maxCandidates]
Definition: Candidates.h:101
float getResolution(const JetParameters &parameters) const
bool isMediumMuon_[maxCandidates]
Definition: Candidates.h:111
float puJetIdFullDiscr_[maxCandidates]
Definition: Candidates.h:156
float pt_[maxCandidates]
Definition: Candidates.h:98
float normChi2_[maxCandidates]
Definition: Candidates.h:129
float qgLikelihood_[maxCandidates]
Definition: Candidates.h:152
bool lastcopy_[maxCandidates]
Definition: Candidates.h:167
int trkhp_outerstationsvalhits_[maxCandidates]
Definition: Candidates.h:213
int trkhp_lostmu_[maxCandidates]
Definition: Candidates.h:202
float ipz_[maxCandidates]
Definition: Candidates.h:123
float jerSFUp_[maxCandidates]
Definition: Candidates.h:146
float px_[maxCandidates]
Definition: Candidates.h:99
void UseTriggerResults(edm::InputTag &)
Definition: Candidates.cc:1065
void JECRecord(const std::string &)
Definition: Candidates.cc:787
float getScaleFactor(const JetParameters &parameters, Variation variation=Variation::NOMINAL, std::string uncertaintySource="") const
bool isTightMuon_[maxCandidates]
Definition: Candidates.h:112
float sigyy_[maxCandidates]
Definition: Candidates.h:179
bool isLooseMuon_[maxCandidates]
Definition: Candidates.h:110
int hadronFlavour_[maxCandidates]
Definition: Candidates.h:134
int trkhp_valtibhits_[maxCandidates]
Definition: Candidates.h:207
float phi_[maxCandidates]
Definition: Candidates.h:97
int flavour_[maxCandidates]
Definition: Candidates.h:133
float T
Definition: PlotsCompare.cc:18
float jetid_[15][maxCandidates]
Definition: Candidates.h:138
int trkhp_stationsbadhits_[maxCandidates]
Definition: Candidates.h:211
float sigyx_[maxCandidates]
Definition: Candidates.h:178
float gen_px_[maxCandidates]
Definition: Candidates.h:182
int trkhp_valtobhits_[maxCandidates]
Definition: Candidates.h:209
float trkndof_[maxCandidates]
Definition: Candidates.h:197
int trkhp_valtechits_[maxCandidates]
Definition: Candidates.h:206
JME::JetResolution res_
Definition: Candidates.h:148
void MinPt(const float &minPt=-1.)
Definition: Candidates.cc:800
float jerSFDown_[maxCandidates]
Definition: Candidates.h:147
float validMuonHits_[maxCandidates]
Definition: Candidates.h:128
float gen_py_[maxCandidates]
Definition: Candidates.h:183
bool higgs_dau_[maxCandidates]
Definition: Candidates.h:168
std::vector< TitleAlias > id_vars_
Definition: Candidates.h:249
float eta_[maxCandidates]
Definition: Candidates.h:96
float validPixelHits_[maxCandidates]
Definition: Candidates.h:120
void MaxEta(const float &maxEta=-1.)
Definition: Candidates.cc:806
float mass_[maxCandidates]
Definition: Candidates.h:173
int mo1_[maxCandidates]
Definition: Candidates.h:169
int trkhp_badmu_[maxCandidates]
Definition: Candidates.h:204
float chi2LocalPos_[maxCandidates]
Definition: Candidates.h:127
float trkdxy_[maxCandidates]
Definition: Candidates.h:199
int trkhp_valmu_[maxCandidates]
Definition: Candidates.h:203
float jecUncert_[maxCandidates]
Definition: Candidates.h:141
JetParameters & setJetPt(float pt)
void ReadFromEvent(const edm::Event &)
Definition: Candidates.cc:188
edm::InputTag input_collection_
Definition: Candidates.h:83
int mo2_[maxCandidates]
Definition: Candidates.h:170
float segmentCompatibility_[maxCandidates]
Definition: Candidates.h:115
bool isPFMuon_[maxCandidates]
Definition: Candidates.h:107
float bjetRegCorr_[maxCandidates]
Definition: Candidates.h:161
float validFraction_[maxCandidates]
Definition: Candidates.h:119
void PileupJetIdInstance(const std::string &)
Definition: Candidates.cc:1112
void TriggerObjectType(const std::string &)
float matchedStations_[maxCandidates]
Definition: Candidates.h:116
static const int maxCandidates
Definition: Candidates.h:77
float et_[maxCandidates]
Definition: Candidates.h:103
float jerSF_[maxCandidates]
Definition: Candidates.h:145
float py_[maxCandidates]
Definition: Candidates.h:100
float gen_pz_[maxCandidates]
Definition: Candidates.h:184
int pdg_[maxCandidates]
Definition: Candidates.h:165
JME::JetResolutionScaleFactor res_sf_
Definition: Candidates.h:149
bool trkqual_[10][maxCandidates]
Definition: Candidates.h:200