ATLAS Offline Software
JetQGTagger.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 #include <TRandom3.h>
8 #include <TSystem.h>
9 
15 
19 
20 namespace CP {
21 
22  JetQGTagger::JetQGTagger( const std::string& name): JSSTaggerBase( name ),
23  m_appliedSystEnum(QG_NONE),
24  m_hquark(nullptr),
25  m_hgluon(nullptr),
26  m_topo_hquark(nullptr),
27  m_exp_hquark_up(nullptr),
28  m_exp_hquark_down(nullptr),
29  m_exp_hgluon_up(nullptr),
30  m_exp_hgluon_down(nullptr),
31  m_me_hquark_up(nullptr),
32  m_me_hquark_down(nullptr),
33  m_me_hgluon_up(nullptr),
34  m_me_hgluon_down(nullptr),
35  m_pdf_hquark_up(nullptr),
36  m_pdf_hquark_down(nullptr),
37  m_pdf_hgluon_up(nullptr),
38  m_pdf_hgluon_down(nullptr),
39  m_trackeff_hquark(nullptr),
40  m_trackeff_hgluon(nullptr),
41  m_fake_hquark(nullptr),
42  m_fake_hgluon(nullptr),
43  m_trkSelectionTool(name+"_trackselectiontool", this),
44  m_trkTruthFilterTool(name+"_trackfiltertool",this),
45  m_trkFakeTool(name+"_trackfaketool",this),
46  m_jetTrackFilterTool(name+"_jettrackfiltertool",this),
47  m_originTool(name+"_origintool",this)
48  {
49 
50  declareProperty( "NTrackCut", m_NTrackCut=-1);
51  declareProperty( "cuttype", m_cuttype="log_pt");
52  declareProperty( "slope", m_slope=9.779);
53  declareProperty( "intercept", m_intercept=-32.28);
54  declareProperty( "UseJetVars", m_mode = 0); // 0 uses the tracks. 1 uses variables from the jets
55 
56  declareProperty( "Tagger", m_taggername = "ntrack");
57  declareProperty( "TopoWeightFile", m_topofile = "");
58  declareProperty( "ExpWeightFile", m_expfile = "qgsyst_exp.root");
59  declareProperty( "MEWeightFile", m_mefile = "qgsyst_me.root");
60  declareProperty( "PDFWeightFile", m_pdffile = "qgsyst_pdf.root");
61  declareProperty( "TrackEffFile", m_trackefffile = "track_systs.root");//REPLACE when file available
62  declareProperty( "FakeFile", m_fakefile = "track_systs.root");//REPLACE when file available
63  declareProperty( "MinPt", m_jetPtMin = 50e3);
64  declareProperty( "MaxEta", m_jetEtaMax = 2.1);
65  declareProperty( "WeightDecorationName", m_weight_decoration_name = "qgTaggerWeight");
66  declareProperty( "TaggerDecorationName", m_tagger_decoration_name = "qgTagger");
67 
68 
70 
71  }
72 
74 
75  ATH_MSG_INFO( "Initializing QuarkGluonTagger tool" );
76 
77  if( ! m_configFile.empty() ) {
78 
81 
82  // read in the specified track cut in the config file
83  m_NTrackCut=m_configReader.GetValue("NTrackCut" ,-1);
84 
85  ATH_MSG_VERBOSE( "NTrackCut by config file : "<<m_NTrackCut );
86 
87  }
88  else {
89  // no config file
90  // Assume the cut functions have been set through properties.
91  // check they are non empty
92  if( m_NTrackCut!=-1){
93  ATH_MSG_VERBOSE( "NTrackCut by manual setting of property : "<<m_NTrackCut );
94  }
95  else {
96  ATH_MSG_WARNING( "No config file provided AND no NTrackCut specified." ) ;
97  }
98  }
99  if(m_cuttype != "linear_pt" && m_cuttype != "threshold" && m_cuttype != "log_pt"){
100  ATH_MSG_ERROR("Cuttype set to: " << m_cuttype );
101  ATH_MSG_ERROR("Cuttype invalid. Must use 'linear_pt', 'log_pt', or 'threshold'");
102  return StatusCode::FAILURE;
103  }
104 
105  // decorators used to store
106  // 1) ntracks
107  // 2) tagger weight
108  ATH_MSG_INFO( "Decorators that will be attached to jet :" );
109  ATH_MSG_INFO( " " << m_tagger_decoration_name << " : Number of tracks for tagging decision" );
110  ATH_MSG_INFO( " " << m_weight_decoration_name << " : Scale factor weight given the number of tracks" );
111 
114 
115  ATH_CHECK( m_decTagKey.initialize() );
116  ATH_CHECK( m_qgDecWeightKey.initialize() );
117 
121 
122  ATH_CHECK( m_readNumTrkPt500PVKey.initialize() );
123  ATH_CHECK( m_readNtrkKey.initialize() );
124 
125  // set up InDet selection tool
127  ANA_CHECK( m_trkSelectionTool.setProperty( "CutLevel", "Loose" ) );
129 
130  // set up InDet truth track selection tools
133 
136 
137  ANA_CHECK( m_trkTruthFilterTool.setProperty( "Seed", 1234 ) );
138  ANA_CHECK( m_trkTruthFilterTool.setProperty( "trackOriginTool", m_originTool ) );
140  CP::SystematicSet systSetTrk = {
145  };
147 
148  // set up tools used for systematic variations of tracks
149  ANA_CHECK( m_trkFakeTool.setProperty( "Seed", 1234 ) );
150  ANA_CHECK( m_trkFakeTool.setProperty( "trackOriginTool", m_originTool ) );
152  CP::SystematicSet systSetTrkFake = {
154  };
156 
158  ANA_CHECK( m_jetTrackFilterTool.setProperty( "Seed", 1234 ) );
159  ANA_CHECK( m_jetTrackFilterTool.setProperty( "trackOriginTool", m_originTool ) );
161  CP::SystematicSet systSetJet = {
163  };
165 
166  // specify systematic variations relevant for this tool
167  if (!addAffectingSystematic(QGntrackSyst::trackfakes,true) ||
168  !addAffectingSystematic(QGntrackSyst::trackefficiency,true) ||
169  !addAffectingSystematic(QGntrackSyst::nchargedtopo,false /*for topology differences */) ||
170  !addAffectingSystematic(QGntrackSyst::nchargedexp_up,true) ||
171  !addAffectingSystematic(QGntrackSyst::nchargedme_up,true) ||
172  !addAffectingSystematic(QGntrackSyst::nchargedpdf_up,true) ||
173  !addAffectingSystematic(QGntrackSyst::nchargedexp_down,true) ||
174  !addAffectingSystematic(QGntrackSyst::nchargedme_down,true) ||
175  !addAffectingSystematic(QGntrackSyst::nchargedpdf_down,true) ||
176  !addAffectingSystematic(QGntrackSyst::trackeff,true)||
177  !addAffectingSystematic(QGntrackSyst::fake,true)
178  )
179  {
180  ATH_MSG_ERROR("failed to set up JetQGTagger systematics");
181  return StatusCode::FAILURE;
182  }
183 
184  // load in the histograms that store the ntrack systematics
185  if(!m_topofile.empty())//load topology file only if explicitly configured (default is "")
186  ANA_CHECK( this->loadHist(m_topo_hquark, m_topofile,"h2dquark") );
187  ANA_CHECK( this->loadHist(m_exp_hquark_up, m_expfile,"h2dquark_up") );
188  ANA_CHECK( this->loadHist(m_exp_hquark_down,m_expfile,"h2dquark_down"));
189  ANA_CHECK( this->loadHist(m_exp_hgluon_up, m_expfile,"h2dgluon_up") );
190  ANA_CHECK( this->loadHist(m_exp_hgluon_down,m_expfile,"h2dgluon_down"));
191  ANA_CHECK( this->loadHist(m_me_hquark_up, m_mefile, "h2dquark_up") );
192  ANA_CHECK( this->loadHist(m_me_hquark_down, m_mefile, "h2dquark_down"));
193  ANA_CHECK( this->loadHist(m_me_hgluon_up, m_mefile, "h2dgluon_up") );
194  ANA_CHECK( this->loadHist(m_me_hgluon_down, m_mefile, "h2dgluon_down"));
195  ANA_CHECK( this->loadHist(m_pdf_hquark_up, m_pdffile,"h2dquark_up") );
196  ANA_CHECK( this->loadHist(m_pdf_hquark_down,m_pdffile,"h2dquark_down"));
197  ANA_CHECK( this->loadHist(m_pdf_hgluon_up, m_pdffile,"h2dgluon_up") );
198  ANA_CHECK( this->loadHist(m_pdf_hgluon_down,m_pdffile,"h2dgluon_down"));
199  ATH_MSG_INFO("about to load track syst histos");
200  ATH_MSG_INFO("trackeff file: " << m_trackefffile);
201  ANA_CHECK( this->loadHist(m_trackeff_hquark,m_trackefffile,"track_syste_quark"));//REPLACE w/ right histo
202  ANA_CHECK( this->loadHist(m_trackeff_hgluon,m_trackefffile,"track_syste_gluon"));//REPLACE w/ right histo
203  ANA_CHECK( this->loadHist(m_fake_hquark,m_fakefile,"track_systf_quark"));//REPLACE w/ right histo
204  ANA_CHECK( this->loadHist(m_fake_hgluon,m_fakefile,"track_systf_gluon"));//REPLACE w/ right histo
205 
206  ATH_MSG_INFO( ": JetQGTagger tool initialized" );
207  ATH_MSG_INFO( " NTrackCut : "<< m_NTrackCut );
208 
210  m_acceptInfo.addCut( "QuarkJetTag", "True if the jet is deemed a quark jet because NTrack<NCut, False if jet deemed gluon jet because NTrack<NCut" );
211 
214 
216  printCuts();
217 
218  return StatusCode::SUCCESS;
219 
220  }
221 
223 
224  delete m_topo_hquark;
225  delete m_exp_hquark_up;
226  delete m_exp_hquark_down;
227  delete m_exp_hgluon_up;
228  delete m_exp_hgluon_down;
229  delete m_me_hquark_up;
230  delete m_me_hquark_down;
231  delete m_me_hgluon_up;
232  delete m_me_hgluon_down;
233  delete m_pdf_hquark_up;
234  delete m_pdf_hquark_down;
235  delete m_pdf_hgluon_up;
236  delete m_pdf_hgluon_down;
237  delete m_trackeff_hquark;
238  delete m_trackeff_hgluon;
239  delete m_fake_hquark;
240  delete m_fake_hgluon;
241 
242  }
243 
245 
246  ATH_MSG_DEBUG( "Obtaining QG result" );
247 
248  double jetWeight = -1;
249  int jetNTrack = -1;
250 
252  asg::AcceptData acceptData( &m_acceptInfo );
253 
255  ATH_CHECK( resetCuts( acceptData ) );
256 
258  ATH_CHECK( checkKinRange( jet, acceptData ) );
259 
263 
266  if ( !passKinRange(jet) ) {
267  decTagged(jet) = false;
268  return StatusCode::SUCCESS;
269  }
270 
271  if ( m_mode == 0 ) { //do tagging assuming relevant track particle, PV, etc containers exist
272  bool isValid = true;
273  if ( pv ) ATH_MSG_DEBUG( "Obtaining JetQGTagger decision with user specific primary vertex" );
274  else ATH_MSG_DEBUG( "Obtaining JetQGTagger decision default" );
275 
276  // if no primary vertex is specified, then the 0th primary vertex is used
277  if ( !pv ) {
278  const xAOD::VertexContainer* vxCont = nullptr;
279  if ( evtStore()->retrieve( vxCont, "PrimaryVertices" ).isFailure() ) {
280  ATH_MSG_WARNING("Unable to retrieve primary vertex container PrimaryVertices");
281  acceptData.setCutResult("ValidEventContent", false);
282  isValid = false;
283  }
284  else if ( vxCont->empty() ) {
285  ATH_MSG_WARNING("Event has no primary vertices!");
286  acceptData.setCutResult("ValidEventContent", false);
287  isValid = false;
288  }
289  else {
290  for ( const auto *vx : *vxCont ) {
291  // take the first vertex in the list that is a primary vertex
292  if ( vx->vertexType()==xAOD::VxType::PriVtx ) {
293  pv = vx;
294  break;
295  }
296  }
297  }
298  // Now we have to make sure that we did ID one as PV
299  // I think this can happen in physics events (though they've got to be removed in order to perform a lot of calibrations)
300  // so I've elected to not spit out a warning message here
301  if ( !pv ) {
302  acceptData.setCutResult("ValidEventContent", false);
303  isValid = false;
304  }
305  }
306 
307  // If the object isn't valid there's no point applying the remaining cuts
308  if ( !isValid ) return StatusCode::SUCCESS;
309 
310  // obtain the relevant information for tagging
311  // 1) the number of tracks
312  // 2) jet-by-jet event weight
313  ATH_CHECK( getNTrack(&jet, /*pv,*/ jetNTrack) );
314  ATH_CHECK( getNTrackWeight(&jet, jetWeight) );
315 
316  }
317 
318  if ( m_mode == 1 ) { //only calculating uncertainty using given jet info (nTrk already calculated, etc)
319  ATH_CHECK( simplegetNTrackWeight(&jet, jetWeight) );
322  if ( readNtrk.isAvailable() ) jetNTrack = readNtrk(jet);
323  else if ( readNumTrkPt500PV.isAvailable() ) jetNTrack = readNumTrkPt500PV(jet);
324  else {
325  ATH_MSG_ERROR("Neither NumTrkPt500PV nor DFCommonJets_QGTagger_NTracks is available for your jet. Please add it before running in mode 1 of the JetQGTagger.");
326  return StatusCode::FAILURE;
327  }
328 
329  // decorate the cut value if specified
331  decWeight(jet) = jetWeight;
332  }
333 
334  decValidEventContent(jet) = acceptData.getCutResult( "ValidEventContent" );
335 
336  // decorate the cut value if specified
339 
340  decTag(jet) = jetNTrack;
341  decWeight(jet) = jetWeight;
342 
343  // fill the AcceptData
344  ATH_MSG_DEBUG("NTrack = "<<jetNTrack);
345  ATH_MSG_DEBUG("NTrackWeight = "<<jetWeight);
346  double variable_nTrk = -999.0;
347  if (m_cuttype=="linear_pt"){
348  variable_nTrk=(m_slope*jet.pt())+m_intercept;
349  if(jetNTrack<variable_nTrk) acceptData.setCutResult("QuarkJetTag", true);
350  }
351  else if (m_cuttype=="log_pt"){
352  variable_nTrk=(m_slope*TMath::Log10(jet.pt()))+m_intercept;
353  if(jetNTrack<variable_nTrk) acceptData.setCutResult("QuarkJetTag", true);
354  }
355  else if(m_cuttype=="threshold" && jetNTrack<m_NTrackCut) acceptData.setCutResult("QuarkJetTag", true);
356 
357  decTagged(jet) = acceptData.getCutResult( "QuarkJetTag" );
358 
359  return StatusCode::SUCCESS;
360 
361  }
362 
364 
365  ATH_MSG_DEBUG( "Getting the jet weight for systematic variation " << m_appliedSystEnum );
366 
367  // initially set the weight to unity
368  // this is the weight returned if you are *not* dealing with a systematic variation
369  weight = 1.0;
370  ATH_MSG_DEBUG("Getting the jet weight for systematic variation " << m_appliedSystEnum);
371  ATH_MSG_DEBUG("made it into simplegetntrk");
372 
373  // if you are not dealing with a systematic variation, then exit
382  )
383  {
384  return StatusCode::SUCCESS;
385  }
386 
387  // use the lookup tables loaded in initialize() to find the systematically shifted weights
390 
391  int ptbin, ntrkbin;
392  int pdgid = jet->getAttribute<int>("PartonTruthLabelID");
393  if (truthsyst){
394  int tntrk = jet->getAttribute<int>("DFCommonJets_QGTagger_truthjet_nCharged");
395  float tjetpt = jet->getAttribute<float>("DFCommonJets_QGTagger_truthjet_pt")*0.001;
396  float tjeteta = jet->getAttribute<float>("DFCommonJets_QGTagger_truthjet_eta");
397  ATH_MSG_DEBUG("truth jet pdgid: " << pdgid << " pt: " << tjetpt);
398  if ( pdgid<0 ) {
399  ATH_MSG_DEBUG("Undefined pdg ID: setting weight to 1");
400  return StatusCode::SUCCESS;
401  }
402 
403  // if the jet is outside of the measurement fiducial region
404  // the systematic uncertainty is set to 0
405  if ( tjetpt < m_jetPtMin*1e-3 || std::abs(tjeteta) > m_jetEtaMax ) {
406  ATH_MSG_DEBUG( "Outside of fiducial region: setting weight to 1" );
407  return StatusCode::SUCCESS;
408  }
409 
410  if ( pdgid==21 && m_appliedSystEnum!=QG_NCHARGEDTOPO ) {
411  ptbin = std::as_const(*m_hgluon).GetXaxis()->FindFixBin(tjetpt);
412  ntrkbin = std::as_const(*m_hgluon).GetYaxis()->FindFixBin(tntrk);
413  weight = m_hgluon->GetBinContent(ptbin,ntrkbin);
414  }// gluon
416  ptbin = std::as_const(*m_hquark).GetXaxis()->FindFixBin(tjetpt);
417  ntrkbin = std::as_const(*m_hquark).GetYaxis()->FindFixBin(tntrk);
418  weight = m_hquark->GetBinContent(ptbin,ntrkbin);
419  }//quarks
420  else {
421  ATH_MSG_INFO( "Neither quark nor gluon jet: setting weight to 1" );
422  }
423  }
424 
425  // check if jet contains at least one NTracks variables
426  // prefer to use DFCommonJets* version
427  int ntrk = -1;
428  if ( recosyst) {
431  if ( readNtrk.isAvailable() ) ntrk = readNtrk(*jet);
432  else if ( readNumTrkPt500PV.isAvailable() ) ntrk = readNumTrkPt500PV(*jet);
433  else ATH_MSG_ERROR("Neither NumTrkPt500PV nor DFCommonJets_QGTagger_NTracks is available for your jet. Please add it before running mode 1 JetQGTagger.");
434  //float rjetpt = jet->getAttribute<float>("truthjet_pt")*0.001;
435  float rjetpt = jet->pt()*1e-3;
436  float rjeteta = jet->eta();
437 
438  ATH_MSG_DEBUG("reco jet Pt: " << rjetpt << " eta: " << rjeteta);
439  if( rjetpt<m_jetPtMin*1e-3 || std::abs(rjeteta)>m_jetEtaMax){
440  ATH_MSG_DEBUG("Outside of fiducial region: setting weight to 1");
441  return StatusCode::SUCCESS;
442  }
443 
444  if ( pdgid < 5 ) {
445  ptbin = std::as_const(*m_hquark).GetXaxis()->FindFixBin(rjetpt);
446  ntrkbin = std::as_const(*m_hquark).GetYaxis()->FindFixBin(ntrk);
447  weight = m_hquark->GetBinContent(ptbin,ntrkbin);
448  }
449  if ( pdgid == 21 ) {
450  ptbin = std::as_const(*m_hgluon).GetXaxis()->FindFixBin(rjetpt);
451  ntrkbin = std::as_const(*m_hgluon).GetYaxis()->FindFixBin(ntrk);
452  weight = m_hgluon->GetBinContent(ptbin,ntrkbin);
453  }
454  }
455 
456  ATH_MSG_DEBUG("weight: " << weight);
457 
458  return StatusCode::SUCCESS;
459 
460  }
461 
462  StatusCode JetQGTagger::getNTrack(const xAOD::Jet * jet, /*const xAOD::Vertex * pv,*/ int &ntracks) const {
463 
464  ATH_MSG_DEBUG( "Counting the number of tracks in the jet" );
465 
466  ntracks = 0;
467  // loop over the tracks associated to the jet of interest
468  std::vector<const xAOD::IParticle*> jettracks;
469 
470  if(!jet->getAssociatedObjects<xAOD::IParticle>(xAOD::JetAttribute::GhostTrack,jettracks)){
471  ATH_MSG_ERROR("This jet has no associated objects, so it will not be tagged. Please check the jet collection you are using.");
472  ntracks=999;
473  //Returning failure as this jet has no associated objects and we do not want to wrongly classify it as a gluon or quark using tag().
474  //Physics should be independent of skimming, which may have removed tracks.
475  //So we are returning a failure, and throwing an exception.
476  return StatusCode::FAILURE;
477  }
478 
479  for (size_t i = 0; i < jettracks.size(); i++) {
480 
481  const xAOD::TrackParticle* trk = static_cast<const xAOD::TrackParticle*>(jettracks[i]);
482 
483  if(!trk){
484  ATH_MSG_ERROR("This jet has null tracks, so it will not be tagged. Please check the jet collection you are using.");
485  ntracks=998;
486  //Returning failure as this jet has null tracks and we do not want to wrongly classify it as a gluon or quark using tag().
487  //Physics should be independent of skimming, which may have introduced null tracks.
488  //So we are returning a failure, and throwing an exception.
489  return StatusCode::FAILURE;
490  }
491 
492  // if you are applying a systematic variation then
493  // FRANCESCO ADD COMMENT
494 
495  bool acceptSyst = true;
496 
498  acceptSyst = ( m_trkTruthFilterTool->accept(trk) && m_jetTrackFilterTool->accept(trk,jet) );
499  else if ( m_appliedSystEnum==QG_TRACKFAKES )
500  acceptSyst = m_trkFakeTool->accept(trk);
501 
502  if (!acceptSyst)
503  continue;
504 
505  // only count tracks with selections
506  // 1) pt>500 MeV
507  // 2) accepted track from InDetTrackSelectionTool with CutLevel==Loose
508  // 3) associated to primary vertex OR within 3mm of the primary vertex
509  bool accept = (trk->pt()>500 &&
511  // TODO: Implement alternative to TrackParticle::vertex()
512  //&& (trk->vertex()==pv || (!trk->vertex() && std::abs((trk->z0()+trk->vz()-pv->z())*sin(trk->theta()))<3.))
513  );
514  if (!accept)
515  continue;
516 
517  ntracks++;
518  }
519 
520  return StatusCode::SUCCESS;
521  }
522 
523 
524 
526 
527  ATH_MSG_DEBUG( "Getting the jet weight for systematic variation " << m_appliedSystEnum );
528 
529  // initially set the weight to unity
530  // this is the weight returned if you are *not* dealing with a systematic variation
531  weight = 1.0;
532 
533  // if you are not dealing with a systematic variation, then exit
541  )
542  return StatusCode::SUCCESS;
543 
544  int pdgid = jet->getAttribute<int>("PartonTruthLabelID");
545  if ( pdgid<0 ) {
546  ATH_MSG_DEBUG("Undefined pdg ID: setting weight to 1");
547  return StatusCode::SUCCESS;
548  }
549 
550  // getting the associated truth jet
551  // FRANCESCO COMMENT
552  const xAOD::Jet* tjet;
554  GhostTruthAssociationLinkAcc("GhostTruthAssociationLink");
555  if(GhostTruthAssociationLinkAcc.isAvailable(*jet)) {
556  ATH_MSG_DEBUG("Accessing GhostTruthAssociationLink: is available");
557  ElementLink<xAOD::JetContainer> truthlink = GhostTruthAssociationLinkAcc(*jet);
558  if(truthlink.isValid() ){
559  ATH_MSG_DEBUG("Accessing GhostTruthAssociationLink: is valid");
560  if(truthlink)
561  tjet = * truthlink;
562  else{
563  ATH_MSG_WARNING("Cannot access truth: setting weight to 1");
564  return StatusCode::SUCCESS;
565  }//endelse NULL pointer
566  }
567  else {
568  ATH_MSG_WARNING("Cannot access truth: setting weight to 1");
569  return StatusCode::SUCCESS;
570  } //endelse isValid
571  } //endif isAvailable
572  else {
573  ATH_MSG_WARNING("Cannot access truth: setting weight to 1");
574  return StatusCode::SUCCESS;
575  }//endelse isAvailable
576 
577  // if the jet is outside of the measurement fiducial region
578  // the systematic uncertainty is set to 0
579  double tjetpt = tjet->pt()*0.001;
580  double tjeteta = tjet->eta();
581  if( tjetpt<m_jetPtMin*1.0e-3 || std::abs(tjeteta)>m_jetEtaMax){
582  ATH_MSG_DEBUG("Outside of fiducial region: setting weight to 1");
583  return StatusCode::SUCCESS;
584  }
585 
586  // compute truth ntrk
587  int tntrk = 0;
588  for (size_t ind = 0; ind < tjet->numConstituents(); ind++) {
589  const xAOD::TruthParticle *part = static_cast<const xAOD::TruthParticle*>(tjet->rawConstituent(ind));
590 
591  // dont count invalid truth particles
592  if (!part) continue;
593  // require the particle in the final state
594  if( ! MC::isStable(part) ) continue;
595  // require that the particle type (e.g. production type) be valid (e.g. not primaries)
596  if (HepMC::is_simulation_particle(part)) continue;
597  // pt>500 MeV
598  if( ! (part->pt()>500.) ) continue;
599  // charged
600  if( !(part->isCharged()) ) continue;
601  // this seems redundant
602  // FRANCESCO COMMENT
603  double pt = part->pt();
604  if( pt>500 ) tntrk++;
605 
606  }
607 
608  // use the lookup tables loaded in initialize() to find the systematically shifted weights
609  if ( pdgid==21 && m_appliedSystEnum!=QG_NCHARGEDTOPO){
610  int ptbin = std::as_const(*m_hgluon).GetXaxis()->FindFixBin(tjetpt);
611  int ntrkbin = std::as_const(*m_hgluon).GetYaxis()->FindFixBin(tntrk);
612  weight = m_hgluon->GetBinContent(ptbin,ntrkbin);
613  }// gluon
614  else if ( pdgid<5 ){
615  int ptbin = std::as_const(*m_hquark).GetXaxis()->FindFixBin(tjetpt);
616  int ntrkbin = std::as_const(*m_hquark).GetYaxis()->FindFixBin(tntrk);
617  weight = m_hquark->GetBinContent(ptbin,ntrkbin);
618  }//quarks
619  else{
620  ATH_MSG_DEBUG("Neither quark nor gluon jet: setting weight to 1");
621  }
622 
623  return StatusCode::SUCCESS;
624  }
625 
627 
628  // FRANCESCO COMMENT
629  ATH_MSG_DEBUG( "Applying systematic variation by weight" );
630 
631  // by default no systematics are applied
633 
634  if (systSet.empty()) {
635  ATH_MSG_DEBUG("No affecting systematics received.");
636  return StatusCode::SUCCESS;
637  }
638  else if (systSet.size()>1) {
639  ATH_MSG_WARNING("Tool does not support multiple systematics, returning unsupported" );
640  return StatusCode::FAILURE;
641  }
642  SystematicVariation systVar = *systSet.begin();
643  if (systVar == SystematicVariation(""))
645  else if (systVar == QGntrackSyst::nchargedtopo){
648  }
649  else if (systVar == QGntrackSyst::trackefficiency)
651  else if (systVar == QGntrackSyst::trackfakes)
653  else if (systVar == QGntrackSyst::nchargedexp_up){
657  }
658  else if (systVar == QGntrackSyst::nchargedme_up){
662  }
663  else if (systVar == QGntrackSyst::nchargedpdf_up){
667  }
668  else if (systVar == QGntrackSyst::nchargedexp_down){
672  }
673  else if (systVar == QGntrackSyst::nchargedme_down){
677  }
678  else if (systVar == QGntrackSyst::nchargedpdf_down){
682  }
683  else if (systVar == QGntrackSyst::trackeff){
687  }
688  else if (systVar == QGntrackSyst::fake){
692  }
693 
694  else {
695  ATH_MSG_WARNING("unsupported systematic applied");
696  return StatusCode::FAILURE;
697  }
698 
699  ATH_MSG_DEBUG("applied systematic is " << m_appliedSystEnum);
700  return StatusCode::SUCCESS;
701  }
702 
703  StatusCode JetQGTagger::loadHist(TH2D *&hist,const std::string& fname,const std::string& histname){
704 
705  std::string filename = PathResolverFindCalibFile( ("BoostedJetTaggers/"+m_calibArea+fname).c_str() );
706  ATH_MSG_INFO("CALIB FILE: " << filename << " histo: " << histname);
707  if (filename.empty()){
708  ATH_MSG_ERROR( "Could NOT resolve file name " << fname );
709  return StatusCode::FAILURE;
710  }
711  else{
712  ATH_MSG_DEBUG( "Path found = " << filename );
713  }
714  TFile* infile = TFile::Open(filename.c_str());
715  hist = dynamic_cast<TH2D*>(infile->Get(histname.c_str()));
716  hist->SetDirectory(nullptr);
717  return StatusCode::SUCCESS;
718  }
719 
720 } /* namespace CP */
CP::JetQGTagger::applySystematicVariation
virtual StatusCode applySystematicVariation(const SystematicSet &set) override
effects: configure this tool for the given list of systematic variations.
Definition: JetQGTagger.h:54
LArG4FSStartPointFilter.part
part
Definition: LArG4FSStartPointFilter.py:21
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
xAOD::TrackParticle_v1::pt
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Definition: TrackParticle_v1.cxx:73
InDet::IJetTrackFilterTool::applySystematicVariation
virtual StatusCode applySystematicVariation(const CP::SystematicSet &)=0
configure the tool to apply a given list of systematic variations
CP::JetQGTagger::m_fake_hquark
TH2D * m_fake_hquark
Definition: JetQGTagger.h:87
TH2D::GetBinContent
double GetBinContent(int) const
Definition: rootspy.cxx:435
CP::QG_NCHARGEDEXP_UP
@ QG_NCHARGEDEXP_UP
Definition: JetQGTagger.h:27
CP::JetQGTagger::m_trackefffile
std::string m_trackefffile
Definition: JetQGTagger.h:97
CP::JetQGTagger::m_NTrackCut
int m_NTrackCut
Definition: JetQGTagger.h:102
CP::JetQGTagger::m_expfile
std::string m_expfile
Definition: JetQGTagger.h:94
InDetTrackTruthFilterTool.h
CP::JetQGTagger::m_pdf_hquark_up
TH2D * m_pdf_hquark_up
Definition: JetQGTagger.h:80
CP::JetQGTagger::m_pdf_hquark_down
TH2D * m_pdf_hquark_down
Definition: JetQGTagger.h:81
CP::QG_NCHARGEDTOPO
@ QG_NCHARGEDTOPO
Definition: JetQGTagger.h:26
CP::JetQGTagger::m_exp_hquark_up
TH2D * m_exp_hquark_up
Definition: JetQGTagger.h:70
JSSTaggerBase::resetCuts
StatusCode resetCuts(asg::AcceptData &acceptData) const
Reset cuts.
Definition: JSSTaggerBase.cxx:338
run.infile
string infile
Definition: run.py:13
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
CP::JetQGTagger::m_decTagKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decTagKey
WriteDecorHandle keys.
Definition: JetQGTagger.h:119
JSSTaggerBase::m_jetEtaMax
float m_jetEtaMax
Definition: JSSTaggerBase.h:134
asg::AnaToolHandle::retrieve
StatusCode retrieve()
initialize the tool
CP::JetQGTagger::m_trackeff_hgluon
TH2D * m_trackeff_hgluon
Definition: JetQGTagger.h:86
CP::SystematicSet::size
size_t size() const
returns: size of the set
Definition: SystematicSet.h:71
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
JSSTaggerBase::m_configFile
std::string m_configFile
Configuration file name.
Definition: JSSTaggerBase.h:111
CP::QG_TRACKFAKES
@ QG_TRACKFAKES
Definition: JetQGTagger.h:25
JSSTaggerBase::m_configReader
TEnv m_configReader
TEnv instance to read config files.
Definition: JSSTaggerBase.h:62
CP::JetQGTagger::sysApplySystematicVariation
virtual StatusCode sysApplySystematicVariation(const SystematicSet &) override
effects: configure this tool for the given list of systematic variations.
Definition: JetQGTagger.cxx:626
plotmaker.hist
hist
Definition: plotmaker.py:148
CP::SystematicSet::empty
bool empty() const
returns: whether the set is empty
Definition: SystematicSet.h:67
CP::JetQGTagger::m_me_hgluon_down
TH2D * m_me_hgluon_down
Definition: JetQGTagger.h:78
CP::JetQGTagger::m_me_hquark_down
TH2D * m_me_hquark_down
Definition: JetQGTagger.h:76
CutsMETMaker::accept
StatusCode accept(const xAOD::Muon *mu)
Definition: CutsMETMaker.cxx:18
test_pyathena.pt
pt
Definition: test_pyathena.py:11
InDet::InDetTrackTruthOriginTool
Definition: InDetTrackTruthOriginTool.h:24
CP::QG_NCHARGEDME_DOWN
@ QG_NCHARGEDME_DOWN
Definition: JetQGTagger.h:31
CP::SystematicSet
Class to wrap a set of SystematicVariations.
Definition: SystematicSet.h:31
InDet::IInDetTrackTruthFilterTool::accept
virtual bool accept(const xAOD::TrackParticle *track) const =0
CP::JetQGTagger::m_tagger_decoration_name
std::string m_tagger_decoration_name
Definition: JetQGTagger.h:100
CP::JetQGTagger::m_qgDecWeightKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_qgDecWeightKey
Definition: JetQGTagger.h:120
CP::JetQGTagger::simplegetNTrackWeight
StatusCode simplegetNTrackWeight(const xAOD::Jet *jet, double &weight) const
Definition: JetQGTagger.cxx:363
JSSTaggerBase::m_jetPtMin
float m_jetPtMin
Kinematic bounds for the jet - the units are controlled by m_ptGeV.
Definition: JSSTaggerBase.h:132
CP::JetQGTagger::m_trackeff_hquark
TH2D * m_trackeff_hquark
Definition: JetQGTagger.h:85
CP::JetQGTagger::m_mode
int m_mode
Definition: JetQGTagger.h:106
ANA_CHECK
#define ANA_CHECK(EXP)
check whether the given expression was successful
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:324
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:54
CP::JetQGTagger::m_pdf_hgluon_up
TH2D * m_pdf_hgluon_up
Definition: JetQGTagger.h:82
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
isValid
bool isValid(const T &p)
Definition: AtlasPID.h:214
CP::SystematicVariation
Definition: SystematicVariation.h:47
JetQGTagger.h
InDet::TRK_EFF_LOOSE_PP0
@ TRK_EFF_LOOSE_PP0
Definition: InDetTrackSystematics.h:35
InDet::IJetTrackFilterTool::accept
virtual bool accept(const xAOD::TrackParticle *, const xAOD::Jet *) const =0
ASG_MAKE_ANA_TOOL
#define ASG_MAKE_ANA_TOOL(handle, type)
create the tool in the given tool handle
Definition: AnaToolHandle.h:690
xAOD::IParticle
Class providing the definition of the 4-vector interface.
Definition: Event/xAOD/xAODBase/xAODBase/IParticle.h:40
asg::AnaToolHandle::setProperty
StatusCode setProperty(const std::string &property, const T2 &value)
set the given property of the tool.
CP
Select isolated Photons, Electrons and Muons.
Definition: Control/xAODRootAccess/xAODRootAccess/TEvent.h:48
CP::JetQGTagger::m_exp_hgluon_down
TH2D * m_exp_hgluon_down
Definition: JetQGTagger.h:73
CP::JetQGTagger::loadHist
StatusCode loadHist(TH2D *&hist, const std::string &filename, const std::string &histname)
Definition: JetQGTagger.cxx:703
CP::JetQGTagger::m_fake_hgluon
TH2D * m_fake_hgluon
Definition: JetQGTagger.h:88
JSSTaggerBase::m_calibArea
std::string m_calibArea
Location where config files live on cvmfs.
Definition: JSSTaggerBase.h:114
CP::JetQGTagger::m_hquark
TH2D * m_hquark
Definition: JetQGTagger.h:65
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:200
CP::JetQGTagger::m_topo_hquark
TH2D * m_topo_hquark
Definition: JetQGTagger.h:68
CP::JetQGTagger::m_readNtrkKey
SG::ReadDecorHandleKey< xAOD::JetContainer > m_readNtrkKey
Definition: JetQGTagger.h:116
CP::JetQGTagger::m_appliedSystEnum
QGSystApplied m_appliedSystEnum
Definition: JetQGTagger.h:63
CP::JetQGTagger::m_intercept
double m_intercept
Definition: JetQGTagger.h:104
AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
PixelAthClusterMonAlgCfg.histname
histname
Definition: PixelAthClusterMonAlgCfg.py:106
CheckAppliedSFs.e3
e3
Definition: CheckAppliedSFs.py:264
SG::ReadDecorHandle
Handle class for reading a decoration on an object.
Definition: StoreGate/StoreGate/ReadDecorHandle.h:94
HepMC::is_simulation_particle
bool is_simulation_particle(const T &p)
Method to establish if a particle (or barcode) was created during the simulation (TODO update to be s...
Definition: MagicNumbers.h:299
lumiFormat.i
int i
Definition: lumiFormat.py:92
CP::JetQGTagger::m_trkFakeTool
asg::AnaToolHandle< InDet::IInDetTrackTruthFilterTool > m_trkFakeTool
Definition: JetQGTagger.h:110
InDet::TrackSystematicMap
static const std::unordered_map< InDet::TrackSystematic, CP::SystematicVariation, std::hash< int > > TrackSystematicMap
Definition: InDetTrackSystematics.h:56
CP::JetQGTagger::getNTrack
StatusCode getNTrack(const xAOD::Jet *jet, int &ntracks) const
Definition: JetQGTagger.cxx:462
CP::JetQGTagger::m_pdf_hgluon_down
TH2D * m_pdf_hgluon_down
Definition: JetQGTagger.h:83
InDet::TRK_EFF_LOOSE_PHYSMODEL
@ TRK_EFF_LOOSE_PHYSMODEL
Definition: InDetTrackSystematics.h:36
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:41
JSSTaggerBase::checkKinRange
StatusCode checkKinRange(const xAOD::Jet &jet, asg::AcceptData &acceptData) const
Check and record if jet passes kinematic constraints.
Definition: JSSTaggerBase.cxx:370
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:99
CP::QG_NCHARGEDPDF_DOWN
@ QG_NCHARGEDPDF_DOWN
Definition: JetQGTagger.h:32
CP::QG_NCHARGEDME_UP
@ QG_NCHARGEDME_UP
Definition: JetQGTagger.h:28
xAOD::VxType::PriVtx
@ PriVtx
Primary vertex.
Definition: TrackingPrimitives.h:571
InDetTrackSelectionTool.h
CP::JetQGTagger::m_trkSelectionTool
asg::AnaToolHandle< InDet::IInDetTrackSelectionTool > m_trkSelectionTool
Definition: JetQGTagger.h:108
CP::JetQGTagger::m_cuttype
std::string m_cuttype
Definition: JetQGTagger.h:105
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
CP::JetQGTagger::~JetQGTagger
virtual ~JetQGTagger()
Definition: JetQGTagger.cxx:222
CP::JetQGTagger::m_trkTruthFilterTool
asg::AnaToolHandle< InDet::IInDetTrackTruthFilterTool > m_trkTruthFilterTool
Definition: JetQGTagger.h:109
TH2D
Definition: rootspy.cxx:430
JSSTaggerBase::m_decValidEventContentKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decValidEventContentKey
Definition: JSSTaggerBase.h:77
CP::JetQGTagger::m_fakefile
std::string m_fakefile
Definition: JetQGTagger.h:98
CP::JetQGTagger::m_topofile
std::string m_topofile
Definition: JetQGTagger.h:93
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
CP::QG_NCHARGEDEXP_DOWN
@ QG_NCHARGEDEXP_DOWN
Definition: JetQGTagger.h:30
JSSTaggerBase
Definition: JSSTaggerBase.h:39
CP::QG_NCHARGEDPDF_UP
@ QG_NCHARGEDPDF_UP
Definition: JetQGTagger.h:29
CP::JetQGTagger::m_slope
double m_slope
Definition: JetQGTagger.h:103
xAOD::Jet_v1::eta
virtual double eta() const
The pseudorapidity ( ) of the particle.
Definition: Jet_v1.cxx:49
InDet::JetTrackFilterTool
Definition: JetTrackFilterTool.h:37
InDet::IInDetTrackTruthFilterTool::applySystematicVariation
virtual StatusCode applySystematicVariation(const CP::SystematicSet &)=0
configure the tool to apply a given list of systematic variations
CP::QG_TRACKEFFICIENCY
@ QG_TRACKEFFICIENCY
Definition: JetQGTagger.h:24
CP::JetQGTagger::m_weight_decoration_name
std::string m_weight_decoration_name
Definition: JetQGTagger.h:99
InDet::TRK_EFF_LOOSE_IBL
@ TRK_EFF_LOOSE_IBL
Definition: InDetTrackSystematics.h:34
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
JSSTaggerBase::initialize
virtual StatusCode initialize() override
Initialize the tool.
Definition: JSSTaggerBase.cxx:73
MagicNumbers.h
JSSTaggerBase::m_acceptInfo
asg::AcceptInfo m_acceptInfo
Object that stores the results for a jet.
Definition: JSSTaggerBase.h:65
CP::JetQGTagger::m_originTool
asg::AnaToolHandle< InDet::IInDetTrackTruthOriginTool > m_originTool
Definition: JetQGTagger.h:112
CP::JetQGTagger::tag
virtual StatusCode tag(const xAOD::Jet &jet, const xAOD::Vertex *pv) const override
Definition: JetQGTagger.cxx:244
CP::QG_NONE
@ QG_NONE
Definition: JetQGTagger.h:23
InDet::IInDetTrackSelectionTool::accept
virtual asg::AcceptData accept(const xAOD::IParticle *p) const =0
Get the decision using a generic IParticle pointer.
CP::JetQGTagger::m_me_hquark_up
TH2D * m_me_hquark_up
Definition: JetQGTagger.h:75
xAOD::Jet_v1::rawConstituent
const IParticle * rawConstituent(size_t i) const
Direct access to constituents. WARNING expert use only.
Definition: Jet_v1.cxx:158
InDet::InDetTrackTruthFilterTool
Definition: InDetTrackTruthFilterTool.h:36
CP::JetQGTagger::m_me_hgluon_up
TH2D * m_me_hgluon_up
Definition: JetQGTagger.h:77
CP::JetQGTagger::m_readNumTrkPt500PVKey
SG::ReadDecorHandleKey< xAOD::JetContainer > m_readNumTrkPt500PVKey
ReadDecorHandle keys.
Definition: JetQGTagger.h:115
JetTrackFilterTool.h
InDetTrackTruthOriginTool.h
PathResolverFindCalibFile
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.cxx:431
CP::JetQGTagger::JetQGTagger
JetQGTagger()
JSSTaggerBase::printCuts
void printCuts() const
Print configured cuts.
Definition: JSSTaggerBase.cxx:817
python.AthDsoLogger.fname
string fname
Definition: AthDsoLogger.py:67
CP::JetQGTagger::initialize
virtual StatusCode initialize() override
Initialize the tool.
Definition: JetQGTagger.cxx:73
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
InDet::TRK_FAKE_RATE_LOOSE
@ TRK_FAKE_RATE_LOOSE
Definition: InDetTrackSystematics.h:29
MC::isStable
bool isStable(const T &p)
Definition: HepMCHelpers.h:30
VertexContainer.h
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
asg::AcceptData::setCutResult
void setCutResult(const std::string &cutName, bool cutResult)
Set the result of a cut, based on the cut name (safer)
Definition: AcceptData.h:134
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
JSSTaggerBase::passKinRange
bool passKinRange(const xAOD::Jet &jet) const
Check if jet passes kinematic constraints.
Definition: JSSTaggerBase.cxx:356
asg::AcceptData::getCutResult
bool getCutResult(const std::string &cutName) const
Get the result of a cut, based on the cut name (safer)
Definition: AcceptData.h:98
InDet::TRK_EFF_LOOSE_TIDE
@ TRK_EFF_LOOSE_TIDE
Definition: InDetTrackSystematics.h:46
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
CP::SystematicSet::begin
const_iterator begin() const
description: const iterator to the beginning of the set
Definition: SystematicSet.h:55
JSSTaggerBase::getConfigReader
StatusCode getConfigReader()
Get configReader StatusCode.
Definition: JSSTaggerBase.cxx:300
python.changerun.pv
pv
Definition: changerun.py:81
CP::SystematicsTool::addAffectingSystematic
StatusCode addAffectingSystematic(const SystematicVariation &systematic, bool recommended)
effects: add a systematic to the list of registered systematics.
Definition: SystematicsTool.cxx:112
InDet::InDetTrackSelectionTool
Implementation of the track selector tool.
Definition: InDetTrackSelectionTool.h:51
CaloCellTimeCorrFiller.filename
filename
Definition: CaloCellTimeCorrFiller.py:24
CP::JetQGTagger::m_exp_hgluon_up
TH2D * m_exp_hgluon_up
Definition: JetQGTagger.h:72
SG::ConstAccessor::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
CP::JetQGTagger::m_pdffile
std::string m_pdffile
Definition: JetQGTagger.h:96
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
CP::JetQGTagger::getNTrackWeight
StatusCode getNTrackWeight(const xAOD::Jet *jet, double &weight) const
Definition: JetQGTagger.cxx:525
xAOD::Jet_v1::numConstituents
size_t numConstituents() const
Number of constituents in this jets (this is valid even when reading a file where the constituents ha...
Definition: Jet_v1.cxx:153
asg::AcceptData
Definition: AcceptData.h:30
xAOD::JetAttribute::GhostTrack
@ GhostTrack
Definition: JetAttributes.h:252
xAOD::Jet_v1::pt
virtual double pt() const
The transverse momentum ( ) of the particle.
Definition: Jet_v1.cxx:44
SG::ReadDecorHandle::isAvailable
bool isAvailable()
Test to see if this variable exists in the store, for the referenced object.
InDet::TRK_EFF_LOOSE_GLOBAL
@ TRK_EFF_LOOSE_GLOBAL
Definition: InDetTrackSystematics.h:33
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
CP::JetQGTagger::m_exp_hquark_down
TH2D * m_exp_hquark_down
Definition: JetQGTagger.h:71
checkFileSG.ind
list ind
Definition: checkFileSG.py:118
HepMCHelpers.h
CP::JetQGTagger::m_hgluon
TH2D * m_hgluon
Definition: JetQGTagger.h:66
JSSTaggerBase::m_decTaggedKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decTaggedKey
WriteDecorHandle keys for tagging bools.
Definition: JSSTaggerBase.h:71
asg::AcceptInfo::addCut
int addCut(const std::string &cutName, const std::string &cutDescription)
Add a cut; returning the cut position.
Definition: AcceptInfo.h:53
JSSTaggerBase::m_containerName
std::string m_containerName
Configurable members.
Definition: JSSTaggerBase.h:105
CP::JetQGTagger::m_jetTrackFilterTool
asg::AnaToolHandle< InDet::IJetTrackFilterTool > m_jetTrackFilterTool
Definition: JetQGTagger.h:111
CP::JetQGTagger::m_mefile
std::string m_mefile
Definition: JetQGTagger.h:95
CP::JetQGTagger::m_taggername
std::string m_taggername
Definition: JetQGTagger.h:92