ATLAS Offline Software
JSSWTopTaggerANN.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 #include <fstream>
8 #include <memory>
9 
12  m_lwnn(nullptr)
13 {
14 
15 }
16 
19 
20  ATH_MSG_INFO( "Initializing JSSWTopTaggerANN tool" );
21 
22 
23 
24  ATH_CHECK(m_jetContainer_key.initialize());
26  m_ptGeV = true;
27 
29  m_useMassCut = true;
30 
32  m_useScoreCut = true;
33 
34  if( ! m_configFile.empty() ) {
35 
38 
40  m_tagType = m_configReader.GetValue("TaggerType" ,"");
41 
44  m_kerasCalibArea = m_configReader.GetValue("CalibAreaKeras" ,"");
45 
47  m_kerasConfigFileName = m_configReader.GetValue("KerasConfigFile" ,"");
48 
50  m_kerasConfigOutputName = m_configReader.GetValue("KerasOutput" ,"");
51 
53  m_strMassCutLow = m_configReader.GetValue("MassCutLow_in_GeV" ,"");
54  m_strMassCutHigh = m_configReader.GetValue("MassCutHigh_in_GeV" ,"");
55 
57  m_jetPtMin = m_configReader.GetValue("pTCutLow_in_GeV", 200.0);
58  m_jetPtMax = m_configReader.GetValue("pTCutHigh_in_GeV", 2000.0);
59 
61  m_strScoreCut = m_configReader.GetValue("ScoreCut" ,"");
62 
64  m_decorationName = m_configReader.GetValue("DecorationName" ,"");
65 
67  m_calcSF = m_configReader.GetValue("CalcSF", false);
68  if ( m_calcSF ) {
69  m_weightDecorationName = m_configReader.GetValue("WeightDecorationName", "");
70  m_weightFileName = m_configReader.GetValue("WeightFile", "");
71  m_weightHistogramName = m_configReader.GetValue("WeightHistogramName", "");
72  m_efficiencyHistogramName = m_configReader.GetValue("EfficiencyHistogramName", "");
73  m_weightFlavors = m_configReader.GetValue("WeightFlavors", "");
74 
76  m_truthLabelName = m_configReader.GetValue("TruthLabelName" , "R10TruthLabel_R21Consolidated");
77  }
78 
80  ATH_MSG_INFO( "Configurations Loaded :");
81  ATH_MSG_INFO( "tagType : " << m_tagType );
82  ATH_MSG_INFO( "calibarea_keras : " << m_kerasCalibArea );
83  ATH_MSG_INFO( "kerasConfigFileName : " << m_kerasConfigFileName );
84  ATH_MSG_INFO( "kerasConfigOutputName : " << m_kerasConfigOutputName );
85  ATH_MSG_INFO( "strMassCutLow : " << m_strMassCutLow );
86  ATH_MSG_INFO( "strMassCutHigh : " << m_strMassCutHigh );
87  ATH_MSG_INFO( "pTCutLow : " << m_jetPtMin );
88  ATH_MSG_INFO( "pTCutHigh : " << m_jetPtMax );
89  ATH_MSG_INFO( "strScoreCut : " << m_strScoreCut );
90  ATH_MSG_INFO( "decorationName : " << m_decorationName );
91  if ( m_calcSF ) {
92  ATH_MSG_INFO( "weightDecorationName : " << m_weightDecorationName );
93  ATH_MSG_INFO( "weightFile : " << m_weightFileName );
94  ATH_MSG_INFO( "weightHistogramName : " << m_weightHistogramName );
95  ATH_MSG_INFO( "efficiencyHistogramName : "<<m_efficiencyHistogramName );
96  ATH_MSG_INFO( "weightFlavors : " << m_weightFlavors );
97  ATH_MSG_INFO( "TruthLabelName : " << m_truthLabelName );
98  }
99  }
100  else {
101  if ( (m_kerasConfigFileName.empty() ||
104  m_kerasConfigOutputName.empty() ||
105  m_strScoreCut.empty() ||
106  m_strMassCutLow.empty() ||
107  m_strMassCutHigh.empty() ||
108  m_decorationName.empty() ||
109  m_weightFileName.empty()) ||
110  ((m_weightDecorationName.empty() ||
111  m_weightHistogramName.empty() ||
112  m_weightFlavors.empty()) && m_calcSF) ) {
113  ATH_MSG_ERROR( "No config file provided OR you haven't manually specified all needed parameters" ) ;
114  ATH_MSG_ERROR( "Please read the TWiki for this tool" );
115  return StatusCode::FAILURE;
116  }
117 
118  }
119 
120  ATH_MSG_INFO( "Mass cut low : " << m_strMassCutLow );
121  ATH_MSG_INFO( "Mass cut High : " << m_strMassCutHigh );
122  ATH_MSG_INFO( "Score cut low : " << m_strScoreCut );
123 
125  if ( m_kerasCalibArea.empty() ) {
126  ATH_MSG_ERROR( "You need to specify where the calibarea is as either being Local or on CVMFS" );
127  return StatusCode::FAILURE;
128  }
129  else if( !m_kerasCalibArea.compare("Local") ) {
130  std::string localCalibArea = "BoostedJetTaggers/JSSWTopTaggerANN/";
131  ATH_MSG_INFO( "Using Local calibarea " << localCalibArea );
134  if ( m_calcSF )
136  }
137  else {
138  ATH_MSG_INFO( "Using CVMFS calibarea" );
142  if ( m_calcSF )
144  }
145 
147  ATH_MSG_INFO( "ANN Tagger configured with: " << m_kerasConfigFilePath );
148 
149  std::ifstream input_cfg( m_kerasConfigFilePath.c_str() );
150 
151  if ( !input_cfg.is_open() ) {
152  ATH_MSG_ERROR( "Error openning config file: " << m_kerasConfigFilePath );
153  ATH_MSG_ERROR( "Are you sure that the file exists at this path?" );
154  return StatusCode::FAILURE;
155  }
156 
157  lwt::GraphConfig config = lwt::parse_json_graph( input_cfg );
158 
159  for ( auto& input_node: config.inputs ) {
160  ATH_MSG_INFO( " input node: " << input_node.name );
161  for ( auto& input: input_node.variables ) {
162  ATH_MSG_INFO( " " << input );
163  }
164  }
165 
166  auto output_node_name = config.outputs.begin()->first;
167  m_out_names = config.outputs.at(output_node_name).labels;
168 
169  ATH_MSG_INFO( "Keras Network NLayers: " << config.layers.size() );
170 
171  m_lwnn = std::make_unique< lwt::LightweightGraph >(config, output_node_name);
172 
174  try {
175  m_lwnn = std::make_unique<lwt::LightweightGraph>(config, output_node_name);
176  } catch (lwt::NNConfigurationException& exc) {
177  ATH_MSG_ERROR( "NN configuration problem: " << exc.what() );
178  return StatusCode::FAILURE;
179  }
180 
182  if ( !m_tagType.compare("TopQuark") ) {
183  ATH_MSG_DEBUG( "This is a top quark tagger" );
184  m_tagClass = TAGCLASS::TopQuark;
185  }
186  else if ( !m_tagType.compare("WBoson") ) {
187  ATH_MSG_DEBUG( "This is a W boson tagger" );
189  }
190  else if ( !m_tagType.compare("ZBoson") ) {
191  ATH_MSG_DEBUG( "This is a Z boson tagger" );
193  }
194  else {
195  ATH_MSG_ERROR( "I can't tell what kind of tagger your configuration is for." );
196  return StatusCode::FAILURE;
197  }
198 
200  m_acceptInfo.addCut( "PassMassLow" , "mJet > mCutLow" );
201  m_acceptInfo.addCut( "PassScore" , "ScoreJet > ScoreCut" );
203  m_acceptInfo.addCut( "PassMassHigh", "mJet < mCutHigh" );
204  }
205 
207  printCuts();
208 
211 
212  ATH_MSG_INFO( "ANN Tagger tool initialized" );
213 
214  return StatusCode::SUCCESS;
215 
216 }
217 
220 
221  ATH_MSG_DEBUG("Using AthAnalysis code. ANN code.");
226 
234 
239 
240  // Get input jet collection
242  if (!jetContainer.isValid()){
243  ATH_MSG_ERROR("Invalid JetContainer datahandle: " << m_jetContainer_key.key());
244  return StatusCode::FAILURE;
245  }
246 
247  auto jets = jetContainer.cptr();
248 
249  ATH_MSG_DEBUG("Successfully retrieved JetContainer: " << m_jetContainer_key.key());
250 
251  if (jets->size() == 0 ) {
252  ATH_MSG_WARNING("There are no jets in the container. Nothing to be done.");
253  }
254 
255 
256 
257  for(const xAOD::Jet* jet : jetCont){
258 
259  asg::AcceptData acceptData( &m_acceptInfo );
261  ATH_CHECK( resetCuts( acceptData ) );
262 
263  float scale = m_ptGeV ? 1.e3 : 1.0;
264 
265  bool passKinRange = true;
266 
269  if ( std::abs(jet->eta()) > m_jetEtaMax ) {
270  ATH_MSG_VERBOSE( "Jet does not pass basic kinematic selection (|eta| < " << m_jetEtaMax << "). Jet eta = " << jet->eta() );
271  acceptData.setCutResult( "ValidEtaRange", false );
272  passKinRange = false;
273  }
274 
275  if ( jet->pt() < m_jetPtMin * scale ) {
276  ATH_MSG_VERBOSE( "Jet does not pass basic kinematic selection (pT > " << m_jetPtMin * scale / 1.e3 << "). Jet pT = " << jet->pt() / 1.e3 << " GeV" );
277  acceptData.setCutResult( "ValidPtRangeLow", false );
278  passKinRange = false;
279  }
280 
281  if ( jet->pt() > m_jetPtMax * scale ) {
282  ATH_MSG_VERBOSE( "Jet does not pass basic kinematic selection (pT < " << m_jetPtMax * scale / 1.e3 << "). Jet pT = " << jet->pt() / 1.e3 << " GeV" );
283  acceptData.setCutResult( "ValidPtRangeHigh", false );
284  passKinRange = false;
285  }
286  decValidPtRangeHigh(*jet) = acceptData.getCutResult( "ValidPtRangeHigh" );
287  decValidPtRangeLow(*jet) = acceptData.getCutResult( "ValidPtRangeLow" );
288  decValidEtaRange(*jet) = acceptData.getCutResult( "ValidEtaRange" );
289  decValidKinRange(*jet) = passKinRange;
290 
291 
292 
295  float jet_pt = jet->pt()/1000.;
296  float jet_mass = jet->m()/1000.;
297 
299  float jet_score = getScore(*jet);
300 
301 
303  float cut_mass_low = m_funcMassCutLow ->Eval(jet_pt);
304  float cut_mass_high = m_funcMassCutHigh->Eval(jet_pt);
305  float cut_score = m_funcScoreCut ->Eval(jet_pt);
306 
308  ATH_MSG_VERBOSE( "Cut values : Mass window = [" << cut_mass_low << "," << cut_mass_high << "], score cut = " << cut_score );
309  ATH_MSG_VERBOSE( "Jet values : Mass = " << jet_mass << ", score = " << jet_score );
310 
312  if ( !m_calcSF ) return StatusCode::SUCCESS;
313 
314  float weight = 1.0;
315  float effSF = 1.0;
316  float sigeffSF = 1.0;
317  float efficiency = 1.0;
318 
319  if ( m_isMC ) {
320 
321  std::string truthLabelStr = getTruthLabelStr( *jet, acceptData );
322  std::tie(effSF, efficiency) = getSF( *jet, truthLabelStr );
323 
324  // calculate signal efficiency SF
325  if ( m_weightHistograms.count("t_qqb") ) {
326  sigeffSF = getSF(*jet, "t_qqb").first;
327  } else if ( m_weightHistograms.count("V_qq") ) {
328  sigeffSF = getSF(*jet, "V_qq").first;
329  } else if ( m_weightHistograms.count("t") ){
330  sigeffSF = getSF(*jet, "t").first;
331  } else {
332  sigeffSF = 1.0;
333  }
334 
336  if ( m_weightFlavors.find("fail") != std::string::npos ) {
337  weight = effSF;
338  }
339 
340  else {
341 
343  if ( jet_score > cut_score ) {
344  weight = effSF;
345  }
346 
348  else {
350  if ( !m_efficiencyHistogramName.empty() && efficiency < 1.0 ) {
351  weight = ( 1. - effSF * efficiency ) / ( 1. - efficiency );
352  }
353 
354  }
355  }
356 
357  }
358 
359 
360  decWeight(*jet) = weight;
361  decEfficiency(*jet) = efficiency;
362  decEffSF(*jet) = effSF;
363  decSigeffSF(*jet) = sigeffSF;
364 
366  ATH_MSG_DEBUG( "Decorating with score" );
367 
369  decCutMLow(*jet) = cut_mass_low;
370  decCutMHigh(*jet) = cut_mass_high;
371  decScoreCut(*jet) = cut_score;
372  decScoreValue(*jet) = jet_score;
373 
375  bool passCuts = true;
376 
379  ATH_MSG_VERBOSE( "Determining WZ tag return" );
380  if ( jet_mass > cut_mass_low ) acceptData.setCutResult( "PassMassLow", true );
381  if ( jet_mass < cut_mass_high ) acceptData.setCutResult( "PassMassHigh", true );
382  if ( jet_score > cut_score ) acceptData.setCutResult( "PassScore", true );
383  decPassMass(*jet) = acceptData.getCutResult( "PassMassLow" ) && acceptData.getCutResult( "PassMassHigh" );
384  passCuts = passCuts && acceptData.getCutResult( "PassMassLow" ) && acceptData.getCutResult( "PassMassHigh" );
385  }
386  else if ( m_tagClass == TAGCLASS::TopQuark ) {
387  ATH_MSG_VERBOSE( "Determining TopQuark tag return" );
388  if( jet_mass > cut_mass_low ) acceptData.setCutResult( "PassMassLow", true );
389  if( jet_score > cut_score ) acceptData.setCutResult( "PassScore", true );
390  decPassMass(*jet) = acceptData.getCutResult( "PassMassLow" );
391  passCuts = passCuts && acceptData.getCutResult( "PassMassLow" );
392  }
393 
394  decPassScore(*jet) = acceptData.getCutResult( "PassScore" );
395 
396  passCuts = passCuts && acceptData.getCutResult( "PassScore" );
397 
398  decTagged(*jet) = passCuts;
399 
400 
401  }
402 
403  return StatusCode::SUCCESS;
404 
405 }
406 
407 
410 
411  ATH_MSG_DEBUG("Using AnalysisBase code. ANN code.");
412 
414  asg::AcceptData acceptData( &m_acceptInfo );
415 
417  ATH_CHECK( resetCuts( acceptData ) );
419  ATH_CHECK( checkKinRange( jet, acceptData ) );
420 
423  float jet_pt = jet.pt()/1000.;
424  float jet_mass = jet.m()/1000.;
425 
427  float jet_score = getScore(jet);
428 
430  float cut_mass_low = m_funcMassCutLow ->Eval(jet_pt);
431  float cut_mass_high = m_funcMassCutHigh->Eval(jet_pt);
432  float cut_score = m_funcScoreCut ->Eval(jet_pt);
433 
435  ATH_MSG_VERBOSE( "Cut values : Mass window = [" << cut_mass_low << "," << cut_mass_high << "], score cut = " << cut_score );
436  ATH_MSG_VERBOSE( "Jet values : Mass = " << jet_mass << ", score = " << jet_score );
437 
439  ATH_CHECK( getWeight( jet, jet_score > cut_score, acceptData ) );
440 
442  ATH_MSG_DEBUG( "Decorating with score" );
443 
452 
453 
455  decCutMLow(jet) = cut_mass_low;
456  decCutMHigh(jet) = cut_mass_high;
457  decScoreCut(jet) = cut_score;
458  decScoreValue(jet) = jet_score;
459 
461  bool passCuts = true;
462 
465  ATH_MSG_VERBOSE( "Determining WZ tag return" );
466  if ( jet_mass > cut_mass_low ) acceptData.setCutResult( "PassMassLow", true );
467  if ( jet_mass < cut_mass_high ) acceptData.setCutResult( "PassMassHigh", true );
468  if ( jet_score > cut_score ) acceptData.setCutResult( "PassScore", true );
469  decPassMass(jet) = acceptData.getCutResult( "PassMassLow" ) && acceptData.getCutResult( "PassMassHigh" );
470  passCuts = passCuts && acceptData.getCutResult( "PassMassLow" ) && acceptData.getCutResult( "PassMassHigh" );
471  }
472  else if ( m_tagClass == TAGCLASS::TopQuark ) {
473  ATH_MSG_VERBOSE( "Determining TopQuark tag return" );
474  if( jet_mass > cut_mass_low ) acceptData.setCutResult( "PassMassLow", true );
475  if( jet_score > cut_score ) acceptData.setCutResult( "PassScore", true );
476  decPassMass(jet) = acceptData.getCutResult( "PassMassLow" );
477  passCuts = passCuts && acceptData.getCutResult( "PassMassLow" );
478  }
479 
480  decPassScore(jet) = acceptData.getCutResult( "PassScore" );
481 
482  passCuts = passCuts && acceptData.getCutResult( "PassScore" );
483 
484  decTagged(jet) = passCuts;
485 
486  return StatusCode::SUCCESS;
487 
488 }
489 
490 double JSSWTopTaggerANN::getScore( const xAOD::Jet& jet ) const {
491 
493  std::map<std::string, std::map<std::string,double>> ANN_inputs = getJetProperties(jet);
494 
496  auto discriminant = m_lwnn->compute(ANN_inputs);
497 
499  double ANNscore = -666.;
500 
502  bool validVars = true;
504  if ( readTau21WTA(jet) < 0.0 ) validVars = false;
505  if ( m_tagClass == TAGCLASS::TopQuark ) {
507  if ( readTau32WTA(jet) < 0.0 ) validVars = false;
508  }
509 
510  if ( !validVars ) {
511 
512  if ( m_nWarnVar++ < m_nWarnMax ) ATH_MSG_WARNING( "One (or more) tagger input variable has an out-of-range value, setting score to -666" );
513  else ATH_MSG_WARNING( "One (or more) tagger input variable has an out-of-range value, setting score to -666" );
514 
515  return ANNscore;
516 
517  }
518 
519  ANNscore = discriminant.at(m_out_names.at(0));
520 
521  return ANNscore;
522 }
523 
524 std::map<std::string, std::map<std::string, double>> JSSWTopTaggerANN::getJetProperties( const xAOD::Jet& jet ) const {
525 
527  std::map< std::string, std::map<std::string, double> > ANN_inputs;
528  std::map< std::string, double > ANN_inputValues;
529 
532 
533  ATH_MSG_DEBUG( "Loading variables for common ANN tagger" );
534 
540 
543  ANN_inputValues["CaloTACombinedMassUncorrelated"] = jet.m();
544  ANN_inputValues["JetpTCorrByCombinedMass"] = jet.pt();
545 
547  ANN_inputValues["Split12"] = readSplit12(jet);
548 
550  ANN_inputValues["C2"] = readC2(jet);
551  ANN_inputValues["D2"] = readD2(jet);
552 
554  ANN_inputValues["Tau21_wta"] = readTau21WTA(jet);
555 
556  if ( m_tagClass == TAGCLASS::WBoson ) {
557 
558  ATH_MSG_DEBUG( "Loading variables for W boson tagger" );
559 
561  ANN_inputValues["FoxWolfram20"] = jet.getAttribute<float>("FoxWolfram2") / jet.getAttribute<float>("FoxWolfram0");
562  ANN_inputValues["PlanarFlow"] = jet.getAttribute<float>("PlanarFlow");
563  ANN_inputValues["Angularity"] = jet.getAttribute<float>("Angularity");
564  ANN_inputValues["Aplanarity"] = jet.getAttribute<float>("Aplanarity");
565  ANN_inputValues["ZCut12"] = jet.getAttribute<float>("ZCut12");
566  ANN_inputValues["KtDR"] = jet.getAttribute<float>("KtDR");
567 
568  int pv_location = findPV();
569 
570  if(pv_location != -1){
571  if( GetUnGroomTracks(jet, pv_location).isSuccess()){
572 
574 
575  ANN_inputValues["Ntrk500"] = readNtrk500(jet);
576  }
577  else{
578  ATH_MSG_ERROR("Either the ungroomed parent jet doesn't have 'NumTrkPt500' as an attribute or the parent link is broken");
579  ANN_inputValues["Ntrk500"] = -999;
580  }
581  }
582  else {
583  ATH_MSG_ERROR("Could not find a primary vertex");
584  ANN_inputValues["Ntrk500"] = -999;
585  }
586  }
587 
588  else if ( m_tagClass == TAGCLASS::TopQuark ) {
589 
590  ATH_MSG_DEBUG( "Loading variables for top quark tagger" );
591 
600 
602  ANN_inputValues["Split23"] = readSplit23(jet);
603 
605  ANN_inputValues["e3"] = readE3(jet);
606 
608  ANN_inputValues["Tau1_wta"] = readTau1WTA(jet);
609  ANN_inputValues["Tau2_wta"] = readTau2WTA(jet);
610  ANN_inputValues["Tau3_wta"] = readTau3WTA(jet);
611 
612  ANN_inputValues["Tau32_wta"] = readTau32WTA(jet);
613 
615  ANN_inputValues["Qw"] = readQw(jet);
616 
617  }
618 
619  else {
620  ATH_MSG_ERROR( "Loading variables failed because the tagger type is not supported" );
621  }
622 
623  ANN_inputs["node_0"] = ANN_inputValues;
624 
625  return ANN_inputs;
626 
627 }
JSSWTopTaggerANN::JSSWTopTaggerANN
JSSWTopTaggerANN(const std::string &name)
Constructor.
Definition: JSSWTopTaggerANN.cxx:10
JSSTaggerBase::m_readSplit23Key
SG::ReadDecorHandleKey< xAOD::JetContainer > m_readSplit23Key
Definition: JSSTaggerBase.h:171
JSSTaggerBase::getTruthLabelStr
std::string getTruthLabelStr(const xAOD::Jet &jet, asg::AcceptData &acceptData) const
Definition: JSSTaggerBase.cxx:728
JSSTaggerBase::m_decScoreCutKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decScoreCutKey
Definition: JSSTaggerBase.h:233
JSSTaggerBase::m_strMassCutLow
std::string m_strMassCutLow
Strings for cut functions.
Definition: JSSTaggerBase.h:192
JSSTaggerBase::m_funcScoreCut
std::unique_ptr< TF1 > m_funcScoreCut
Definition: JSSTaggerBase.h:199
JSSTaggerBase::m_readTau32WTAKey
SG::ReadDecorHandleKey< xAOD::JetContainer > m_readTau32WTAKey
Definition: JSSTaggerBase.h:159
JSSTaggerBase::resetCuts
StatusCode resetCuts(asg::AcceptData &acceptData) const
Reset cuts.
Definition: JSSTaggerBase.cxx:338
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
JSSTaggerBase::m_readNtrk500Key
SG::ReadDecorHandleKey< xAOD::JetContainer > m_readNtrk500Key
Definition: JSSTaggerBase.h:187
JSSTaggerBase::m_jetContainer_key
SG::ReadHandleKey< xAOD::JetContainer > m_jetContainer_key
Definition: JSSTaggerBase.h:68
JSSTaggerBase::m_jetEtaMax
float m_jetEtaMax
Definition: JSSTaggerBase.h:134
JSSTaggerBase::m_nWarnVar
std::atomic< int > m_nWarnVar
Warning counters.
Definition: JSSTaggerBase.h:86
JSSTaggerBase::m_useMassCut
bool m_useMassCut
Flag to indicate if mass window cut is used.
Definition: JSSTaggerBase.h:93
JSSTaggerBase::m_decValidEtaRangeKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decValidEtaRangeKey
Definition: JSSTaggerBase.h:74
JSSTaggerBase::m_kerasCalibArea
std::string m_kerasCalibArea
Definition: JSSTaggerBase.h:120
JSSTaggerBase::m_configFile
std::string m_configFile
Configuration file name.
Definition: JSSTaggerBase.h:111
JSSTaggerBase::m_useScoreCut
bool m_useScoreCut
Flag to indicate if a discriminant score is used.
Definition: JSSTaggerBase.h:96
JSSTaggerBase::m_configReader
TEnv m_configReader
TEnv instance to read config files.
Definition: JSSTaggerBase.h:62
JSSTaggerBase::m_nWarnMax
const int m_nWarnMax
Maximum number of warnings.
Definition: JSSTaggerBase.h:83
JSSTaggerBase::m_weightFileName
std::string m_weightFileName
Definition: JSSTaggerBase.h:210
JSSTaggerBase::m_decPassScoreKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decPassScoreKey
Definition: JSSTaggerBase.h:80
JSSTaggerBase::getWeight
StatusCode getWeight(const xAOD::Jet &jet, bool passSel, asg::AcceptData &acceptData) const
Get SF weight.
Definition: JSSTaggerBase.cxx:596
JSSTaggerBase::m_readTau2WTAKey
SG::ReadDecorHandleKey< xAOD::JetContainer > m_readTau2WTAKey
Definition: JSSTaggerBase.h:154
JSSTaggerBase::m_readSplit12Key
SG::ReadDecorHandleKey< xAOD::JetContainer > m_readSplit12Key
Definition: JSSTaggerBase.h:170
JSSTaggerBase::m_jetPtMin
float m_jetPtMin
Kinematic bounds for the jet - the units are controlled by m_ptGeV.
Definition: JSSTaggerBase.h:132
JSSWTopTaggerANN::m_lwnn
std::unique_ptr< lwt::LightweightGraph > m_lwnn
ANN tools.
Definition: JSSWTopTaggerANN.h:34
JSSTaggerBase::m_decCutMLowKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decCutMLowKey
WriteDecorHandle keys for cut values.
Definition: JSSTaggerBase.h:231
JSSTaggerBase::m_decorationName
std::string m_decorationName
Decoration name.
Definition: JSSTaggerBase.h:202
JSSWTopTaggerANN::decorate
virtual StatusCode decorate(const xAOD::JetContainer &jets) const override
Decorate jet collection with tagging info.
Definition: JSSWTopTaggerANN.cxx:219
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
ZBoson
@ ZBoson
Definition: TruthClasses.h:67
JSSTaggerBase::m_readTau21WTAKey
SG::ReadDecorHandleKey< xAOD::JetContainer > m_readTau21WTAKey
Definition: JSSTaggerBase.h:158
yodamerge_tmp.scale
scale
Definition: yodamerge_tmp.py:138
JSSTaggerBase::m_decValidPtRangeHighKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decValidPtRangeHighKey
Definition: JSSTaggerBase.h:72
JSSTaggerBase::m_funcMassCutHigh
std::unique_ptr< TF1 > m_funcMassCutHigh
Definition: JSSTaggerBase.h:198
JSSTaggerBase::m_weightHistogramName
std::string m_weightHistogramName
Definition: JSSTaggerBase.h:211
config
Definition: PhysicsAnalysis/AnalysisCommon/AssociationUtils/python/config.py:1
JSSWTopTaggerANN::getScore
double getScore(const xAOD::Jet &jet) const
Retrieve score for a given ANN type (top/W)
Definition: JSSWTopTaggerANN.cxx:490
JSSTaggerBase::m_jetPtMax
float m_jetPtMax
Definition: JSSTaggerBase.h:133
JSSTaggerBase::m_decWeightKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decWeightKey
WriteDecorHandle keys for SF.
Definition: JSSTaggerBase.h:237
WBoson
@ WBoson
Definition: TruthClasses.h:66
JSSTaggerBase::m_decSigeffSFKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decSigeffSFKey
Definition: JSSTaggerBase.h:240
JSSWTopTaggerANN::getJetProperties
std::map< std::string, std::map< std::string, double > > getJetProperties(const xAOD::Jet &jet) const
Update the jet substructure variables for each jet to use in ANN.
Definition: JSSWTopTaggerANN.cxx:524
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:200
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:269
JSSTaggerBase::m_truthLabelName
std::string m_truthLabelName
Definition: JSSTaggerBase.h:225
JSSTaggerBase::m_decEfficiencyKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decEfficiencyKey
Definition: JSSTaggerBase.h:238
JSSTaggerBase::m_decCutMHighKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decCutMHighKey
Definition: JSSTaggerBase.h:232
JSSTaggerBase::m_ptGeV
bool m_ptGeV
Flag to indicate units pT is defined in Set to false by default.
Definition: JSSTaggerBase.h:90
efficiency
void efficiency(std::vector< double > &bins, std::vector< double > &values, const std::vector< std::string > &files, const std::string &histname, const std::string &tplotname, const std::string &label="")
Definition: dependence.cxx:128
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
CheckAppliedSFs.e3
e3
Definition: CheckAppliedSFs.py:264
JSSTaggerBase::m_readQwKey
SG::ReadDecorHandleKey< xAOD::JetContainer > m_readQwKey
Definition: JSSTaggerBase.h:173
SG::ReadDecorHandle
Handle class for reading a decoration on an object.
Definition: StoreGate/StoreGate/ReadDecorHandle.h:94
JSSTaggerBase::getSF
std::pair< double, double > getSF(const xAOD::Jet &jet, const std::string &truthLabelStr) const
Get scale factor and efficiency.
Definition: JSSTaggerBase.cxx:670
JSSTaggerBase::m_tagClass
TAGCLASS m_tagClass
Definition: JSSTaggerBase.h:100
JSSTaggerBase::m_kerasConfigOutputName
std::string m_kerasConfigOutputName
Definition: JSSTaggerBase.h:119
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
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
PlotPulseshapeFromCool.input
input
Definition: PlotPulseshapeFromCool.py:106
JSSTaggerBase::m_efficiencyHistogramName
std::string m_efficiencyHistogramName
Definition: JSSTaggerBase.h:212
JSSTaggerBase::m_strScoreCut
std::string m_strScoreCut
Definition: JSSTaggerBase.h:194
JSSTaggerBase::calculateJSSRatios
int calculateJSSRatios(const xAOD::Jet &jet) const
Calculate JSS moment ratios in case they are not already saved TODO: Remove this once JSSMomentTools ...
Definition: JSSTaggerBase.cxx:416
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
JSSTaggerBase::m_decEffSFKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decEffSFKey
Definition: JSSTaggerBase.h:239
JSSTaggerBase::m_calcSF
bool m_calcSF
Flag to calculate scale factor.
Definition: JSSTaggerBase.h:205
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
JSSTaggerBase::GetUnGroomTracks
StatusCode GetUnGroomTracks(const xAOD::Jet &jet, int indexPV) const
Retrieve Ntrk variable from the ungroomed parent jet.
Definition: JSSTaggerBase.cxx:553
JSSTaggerBase
Definition: JSSTaggerBase.h:39
JetAnalysisAlgorithmsTest_EMTopo_eljob.jetContainer
string jetContainer
Definition: JetAnalysisAlgorithmsTest_EMTopo_eljob.py:36
JSSTaggerBase::findPV
int findPV() const
Find the PV (to be used for Ntrk)
Definition: JSSTaggerBase.cxx:529
JSSTaggerBase::m_kerasConfigFilePath
std::string m_kerasConfigFilePath
Definition: JSSTaggerBase.h:118
TauJetParameters::discriminant
@ discriminant
Definition: TauJetParameters.h:166
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
JSSTaggerBase::initialize
virtual StatusCode initialize() override
Initialize the tool.
Definition: JSSTaggerBase.cxx:73
JSSTaggerBase::m_acceptInfo
asg::AcceptInfo m_acceptInfo
Object that stores the results for a jet.
Definition: JSSTaggerBase.h:65
JSSWTopTaggerANN::initialize
virtual StatusCode initialize() override
Run once at the start of the job to setup everything.
Definition: JSSWTopTaggerANN.cxx:18
JSSTaggerBase::m_decScoreValueKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decScoreValueKey
Definition: JSSTaggerBase.h:234
PathResolverFindCalibFile
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.cxx:431
JSSTaggerBase::printCuts
void printCuts() const
Print configured cuts.
Definition: JSSTaggerBase.cxx:817
JSSTaggerBase::m_isMC
bool m_isMC
Definition: JSSTaggerBase.h:206
JSSTaggerBase::m_weightDecorationName
std::string m_weightDecorationName
String for scale factor decoration names.
Definition: JSSTaggerBase.h:209
JSSWTopTaggerANN::m_out_names
std::vector< std::string > m_out_names
Internal stuff to keep track of the output node for the NN.
Definition: JSSWTopTaggerANN.h:38
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
lwtDev::parse_json_graph
GraphConfig parse_json_graph(std::istream &json)
Definition: parse_json.cxx:71
JSSTaggerBase::m_decValidKinRangeKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decValidKinRangeKey
Definition: JSSTaggerBase.h:75
JSSTaggerBase::m_readTau1WTAKey
SG::ReadDecorHandleKey< xAOD::JetContainer > m_readTau1WTAKey
ReadDecorHandle keys for JSS moments.
Definition: JSSTaggerBase.h:153
JSSTaggerBase::m_weightHistograms
std::map< std::string, std::unique_ptr< TH2D > > m_weightHistograms
Definition: JSSTaggerBase.h:217
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
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
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
JSSTaggerBase::m_decValidPtRangeLowKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decValidPtRangeLowKey
Definition: JSSTaggerBase.h:73
JSSTaggerBase::m_readTau3WTAKey
SG::ReadDecorHandleKey< xAOD::JetContainer > m_readTau3WTAKey
Definition: JSSTaggerBase.h:155
JSSTaggerBase::m_readD2Key
SG::ReadDecorHandleKey< xAOD::JetContainer > m_readD2Key
Definition: JSSTaggerBase.h:167
JSSTaggerBase::getConfigReader
StatusCode getConfigReader()
Get configReader StatusCode.
Definition: JSSTaggerBase.cxx:300
JSSTaggerBase::m_decPassMassKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decPassMassKey
Definition: JSSTaggerBase.h:79
JSSWTopTaggerANN::tag
virtual StatusCode tag(const xAOD::Jet &jet) const override
Decorate single jet with tagging info.
Definition: JSSWTopTaggerANN.cxx:409
JSSTaggerBase::m_tagType
std::string m_tagType
Definition: JSSTaggerBase.h:129
JSSTaggerBase::m_funcMassCutLow
std::unique_ptr< TF1 > m_funcMassCutLow
TF1 for cut functions.
Definition: JSSTaggerBase.h:197
defineDB.jets
list jets
Definition: JetTagCalibration/share/defineDB.py:24
JSSTaggerBase::m_strMassCutHigh
std::string m_strMassCutHigh
Definition: JSSTaggerBase.h:193
JSSTaggerBase::m_kerasConfigFileName
std::string m_kerasConfigFileName
Keras configurations for ML taggers.
Definition: JSSTaggerBase.h:117
JSSTaggerBase::m_weightConfigPath
std::string m_weightConfigPath
Path to the SF configuration root file.
Definition: JSSTaggerBase.h:108
JSSTaggerBase::m_weightFlavors
std::string m_weightFlavors
Definition: JSSTaggerBase.h:213
asg::AcceptData
Definition: AcceptData.h:30
JSSTaggerBase::m_readE3Key
SG::ReadDecorHandleKey< xAOD::JetContainer > m_readE3Key
Definition: JSSTaggerBase.h:168
JSSWTopTaggerANN.h
JSSTaggerBase::m_readC2Key
SG::ReadDecorHandleKey< xAOD::JetContainer > m_readC2Key
Definition: JSSTaggerBase.h:166
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