ATLAS Offline Software
JetFlavorPlots.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3  */
4 
6 
7 #include <cmath>
8 #include <array>
9 #include <string>
10 
11 #include "TopEvent/EventTools.h"
14 
15 #include "TH1.h"
16 #include "TH2D.h"
17 #include "TFile.h"
18 
19 // Systematic include(s):
21 
23 
25 using namespace TopEventSelectionTools;
26 
27 namespace top {
28  const double JetFlavorPlots::toGeV = 0.001;
29 
30 
31  JetFlavorPlots::JetFlavorPlots(const std::string& name,
32  TFile* outputFile, const std::string& params, std::shared_ptr<top::TopConfig> config,
33  EL::Worker* wk) :
34  m_nominalHashValue(0),
35  m_detailed(false),
36  m_doNominal(false),
37  m_doRadHigh(false),
38  m_doRadLow(false),
39  m_doRadHighNoVar3c(false),
40  m_doRadLowNoVar3c(false),
41  // default pT and eta binning, and default max number of Jets
42  m_ptBins("15:20:30:45:60:80:110:160:210:260:310:400:500:600:800:1000:1200:1500:1800:2500"),
43  m_etaBins("0.:0.3:0.8:1.2:2.1:2.8:3.6:4.5"),
44  m_nJetsMax(15),
45  m_jetCollection(""),
46  m_config(config),
47  m_PMGTruthWeights(nullptr),
48  m_throwwarningPMG(true) {
50  m_nominalHashValue = nominal.hash();
51 
52  // retrieve jet collection and remove the "Jets" at the end of it
53  m_jetCollection = m_config->sgKeyJets();
54  int pos = m_jetCollection.find("Jets");
55  m_jetCollection.erase(pos);
56  //FIXME: If no metadata is available, the PMGTool will crash. Providing here a "manual" workaround.
57  //FIXME PMG: comment from here
58  //retrieve PMGTruthWeights
59  const std::string truthWeightToolName = "PMGTruthWeightTool";
60  if (asg::ToolStore::contains<PMGTools::PMGTruthWeightTool>(truthWeightToolName)) m_PMGTruthWeights =
61  asg::ToolStore::get<PMGTools::PMGTruthWeightTool>(truthWeightToolName);
62  else {
63  m_PMGTruthWeights = new PMGTools::PMGTruthWeightTool(truthWeightToolName);
64  top::check(m_PMGTruthWeights->initialize(), "Failed to initialize " + truthWeightToolName);
65  }
66  //FIXME PMG: comment till here
67  //decoding arguments
68  std::istringstream stream(params);
69  std::string s;
70  while (stream >> s) {
71  if (s == "detailed") m_detailed = true;
72  else if (s.substr(0, 3) == "pt:" || s.substr(0, 3) == "pT:") m_ptBins = s.substr(3, s.size() - 3);
73  else if (s.substr(0, 7) == "abseta:") m_etaBins = s.substr(7, s.size() - 7);
74  else if (s.substr(0, 9) == "nJetsMax:") m_nJetsMax = std::atoi(s.substr(9, s.size() - 9).c_str());
75  else if (s == "nominal" || s == "NOMINAL" || s == "Nominal") m_doNominal = true;
76  else if (s == "radiationhigh" || s == "RADIATIONHIGH" || s == "RadiationHigh" ||
77  s == "radiationHigh") m_doRadHigh = true;
78  else if (s == "radiationlow" || s == "RADIATIONLOW" || s == "RadiationLow" ||
79  s == "radiationLow") m_doRadLow = true;
80  else if (s == "radiationhighnovar3c" || s == "RADIATIONHIGHNOVAR3C" || s == "RadiationHighNoVar3c" ||
81  s == "radiationHighNoVar3c") m_doRadHighNoVar3c = true;
82  else if (s == "radiationlownovar3c" || s == "RADIATIONLOWNOVAR3C" || s == "RadiationLowNoVar3c" ||
83  s == "radiationLowNoVar3c") m_doRadLowNoVar3c = true;
84  else {
85  throw std::runtime_error("ERROR: Can't understand argument " + s + "For JETFLAVORPLOTS");
86  }
87  }
88  //If neither nominal or radiation has been selected, assume it's nominal
90  // create the JetFlavorPlots and JetFlavorPlots_Loose directories only if needed
91  if (m_config->doTightEvents()) {
92  if (m_doNominal) m_hists = std::make_shared<PlotManager>(name + "/JetFlavorPlots", outputFile, wk);
93  if (m_doRadHigh) m_hists_RadHigh = std::make_shared<PlotManager>(name + "/JetFlavorPlots_RadHigh", outputFile, wk);
94  if (m_doRadLow) m_hists_RadLow = std::make_shared<PlotManager>(name + "/JetFlavorPlots_RadLow", outputFile, wk);
95  if (m_doRadHighNoVar3c) m_hists_RadHighNoVar3c = std::make_shared<PlotManager>(name + "/JetFlavorPlots_RadHighNoVar3c", outputFile, wk);
96  if (m_doRadLowNoVar3c) m_hists_RadLowNoVar3c = std::make_shared<PlotManager>(name + "/JetFlavorPlots_RadLowNoVar3c", outputFile, wk);
97  }
98  if (m_config->doLooseEvents()) {
99  if (m_doNominal) m_hists_Loose = std::make_shared<PlotManager>(name + "/JetFlavorPlots_Loose", outputFile, wk);
100  if (m_doRadHigh) m_hists_RadHigh_Loose = std::make_shared<PlotManager>(name + "/JetFlavorPlots_Loose_RadHigh", outputFile, wk);
101  if (m_doRadLow) m_hists_RadLow_Loose = std::make_shared<PlotManager>(name + "/JetFlavorPlots_Loose_RadLow", outputFile, wk);
102  if (m_doRadHighNoVar3c) m_hists_RadHighNoVar3c_Loose = std::make_shared<PlotManager>(name + "/JetFlavorPlots_Loose_RadHighNoVar3c", outputFile, wk);
103  if (m_doRadLowNoVar3c) m_hists_RadLowNoVar3c_Loose = std::make_shared<PlotManager>(name + "/JetFlavorPlots_Loose_RadLowNoVar3c", outputFile, wk);
104  }
105  //handle binning
106  std::vector<double> ptBinning;
107  std::vector<double> etaBinning;
108  formatBinning(m_ptBins, ptBinning);
109  formatBinning(m_etaBins, etaBinning);
110  MsgStream& msgInfo = msg(MSG::Level::INFO);
111  msgInfo << "Here is the binning used for JETFLAVORPLOTS in selection " << name << ":\n";
112  msgInfo << "pt: ";
113  for (auto pt:ptBinning) msgInfo << pt << " ";
114  msgInfo << "\n";
115  msgInfo << "abseta: ";
116  for (auto eta:etaBinning) msgInfo << eta << " ";
117  msgInfo << std::endl;
118  msgInfo.doOutput();
119 
120  if (m_config->doTightEvents()) {
121  if (m_doNominal) BookHistograms(m_hists, ptBinning, etaBinning);
122  if (m_doRadHigh) BookHistograms(m_hists_RadHigh, ptBinning, etaBinning);
123  if (m_doRadLow) BookHistograms(m_hists_RadLow, ptBinning, etaBinning);
124  if (m_doRadHighNoVar3c) BookHistograms(m_hists_RadHighNoVar3c, ptBinning, etaBinning);
125  if (m_doRadLowNoVar3c) BookHistograms(m_hists_RadLowNoVar3c, ptBinning, etaBinning);
126  }
127  if (m_config->doLooseEvents()) {
128  if (m_doNominal) BookHistograms(m_hists_Loose, ptBinning, etaBinning);
129  if (m_doRadHigh) BookHistograms(m_hists_RadHigh_Loose, ptBinning, etaBinning);
130  if (m_doRadLow) BookHistograms(m_hists_RadLow_Loose, ptBinning, etaBinning);
132  if (m_doRadLowNoVar3c) BookHistograms(m_hists_RadLowNoVar3c_Loose, ptBinning, etaBinning);
133  }
134  }
135 
136  void JetFlavorPlots::BookHistograms(std::shared_ptr<PlotManager> h_ptr, std::vector<double> ptBins,
137  std::vector<double> etaBins) {
138  if (m_detailed) {
139  for (std::string flavour:{"gluon", "lightquark", "cquark", "bquark", "other"}) {
140  // vs. nJets and flavour
141  for (int i = 0; i <= m_nJetsMax; ++i) {
142  h_ptr->addHist(flavour + "_jets_njet" + std::to_string(
143  i) + "_" + m_jetCollection, ";pT [GeV];|#eta^{jet}|;Events",
144  ptBins.size() - 1, ptBins.data(), etaBins.size() - 1, etaBins.data());
145  }
146  // vs. flavour only
147  h_ptr->addHist(flavour + "_jets_" + m_jetCollection, ";pT [GeV];|#eta^{jet}|;Events",
148  ptBins.size() - 1, ptBins.data(), etaBins.size() - 1, etaBins.data());
149  }
150  // if "detailed", also making the quark_jets one
151  h_ptr->addHist("quark_jets_" + m_jetCollection, ";pT [GeV];|#eta^{jet}|;Events",
152  ptBins.size() - 1, ptBins.data(), etaBins.size() - 1, etaBins.data());
153  } else {
154  // the simplest case, one for gluon, one for quarks
155  h_ptr->addHist("quark_jets_" + m_jetCollection, ";pT [GeV];|#eta^{jet}|;Events",
156  ptBins.size() - 1, ptBins.data(), etaBins.size() - 1, etaBins.data());
157  h_ptr->addHist("gluon_jets_" + m_jetCollection, ";pT [GeV];|#eta^{jet}|;Events",
158  ptBins.size() - 1, ptBins.data(), etaBins.size() - 1, etaBins.data());
159  }
160  }
161 
163  //only MC
164  if (!top::isSimulation(event)) return true;
165 
166  // only nominal
167  if (event.m_hashValue != m_nominalHashValue) return true;
168 
169  // do loose or tight events only if requested
170  if (event.m_isLoose && !m_config->doLooseEvents()) return true;
171 
172  if (!event.m_isLoose && !m_config->doTightEvents()) return true;
173 
174  double nominalWeight = event.m_info->auxdata<float>("AnalysisTop_eventWeight");
175 
176  if (m_doNominal) {
177  double eventWeight = nominalWeight;
178 
179  if (event.m_isLoose) FillHistograms(m_hists_Loose, eventWeight, event);
180  else FillHistograms(m_hists, eventWeight, event);
181  }
183  // 2 different names are acceptable
184  double scaleWeight = 1.;
185  if (m_PMGTruthWeights->hasWeight(" muR = 0.5, muF = 0.5 ")) scaleWeight = m_PMGTruthWeights->getWeight(event.m_info," muR = 0.5, muF = 0.5 ");
186  else if (m_PMGTruthWeights->hasWeight(" muR = 0.50, muF = 0.50 ")) scaleWeight = m_PMGTruthWeights->getWeight(event.m_info," muR = 0.50, muF = 0.50 ");
187  else if (m_PMGTruthWeights->hasWeight("MUR0.5_MUF0.5_PDF261000")) scaleWeight = m_PMGTruthWeights->getWeight(event.m_info,"MUR0.5_MUF0.5_PDF261000"); // for e.g. Sherpa Z+jets
188  else if (m_PMGTruthWeights->hasWeight(" muR=0.50000E+00 muF=0.50000E+00 ")) scaleWeight = m_PMGTruthWeights->getWeight(event.m_info," muR=0.50000E+00 muF=0.50000E+00 "); // for e.g. ttZ DSID 410218
189  else if (m_PMGTruthWeights->hasWeight(" dyn= 0 muR=0.50000E+00 muF=0.50000E+00 ")) scaleWeight = m_PMGTruthWeights->getWeight(event.m_info," dyn= 0 muR=0.50000E+00 muF=0.50000E+00 "); // for e.g. tWZ 412118
190  else if (m_PMGTruthWeights->hasWeight("1009")) scaleWeight = m_PMGTruthWeights->getWeight(event.m_info,"1009"); // for e.g. tZ 412063
191  else if (m_PMGTruthWeights->hasWeight(" dyn= -1 muR=0.50000E+00 muF=0.50000E+00 ")) scaleWeight = m_PMGTruthWeights->getWeight(event.m_info," dyn= -1 muR=0.50000E+00 muF=0.50000E+00 "); // for e.g. ttZ 504330
192  else if (m_PMGTruthWeights->hasWeight("muR=05,muF=05")) scaleWeight = m_PMGTruthWeights->getWeight(event.m_info,"muR=05,muF=05"); // for some other generator setups
193  else top::check(m_PMGTruthWeights->hasWeight(" muR = 0.5, muF = 0.5 "), "JetFlavorPlots::apply(): Weight \" muR = 0.5, muF = 0.5 \" not found. Please report this message!");
194  double eventWeight = scaleWeight;
195  if (!m_doRadHighNoVar3c) {
196  top::check(m_PMGTruthWeights->hasWeight("Var3cUp"), "JetFlavorPlots::apply(): Weight \"Var3cUp\" not found. Please report this message!");
197  eventWeight *= m_PMGTruthWeights->getWeight(event.m_info,"Var3cUp") / nominalWeight;
198  if (event.m_isLoose) FillHistograms(m_hists_RadHigh_Loose, eventWeight, event);
199  else FillHistograms(m_hists_RadHigh, eventWeight, event);
200  } // finish if (!m_doRadHighNoVar3c)
201  else { // m_doRadHighVar3c is true
202  if (event.m_isLoose) FillHistograms(m_hists_RadHighNoVar3c_Loose, eventWeight, event);
203  else FillHistograms(m_hists_RadHighNoVar3c, eventWeight, event);
204  } // finish else
205  }
206  if (m_doRadLow || m_doRadLowNoVar3c) {
207  //2 different names are acceptable
208  double scaleWeight = 1.;
209  if (m_PMGTruthWeights->hasWeight(" muR = 2.0, muF = 2.0 ")) scaleWeight = m_PMGTruthWeights->getWeight(event.m_info," muR = 2.0, muF = 2.0 ");
210  else if (m_PMGTruthWeights->hasWeight(" muR = 2.00, muF = 2.00 ")) scaleWeight = m_PMGTruthWeights->getWeight(event.m_info," muR = 2.00, muF = 2.00 ");
211  else if (m_PMGTruthWeights->hasWeight("MUR2_MUF2_PDF261000")) scaleWeight = m_PMGTruthWeights->getWeight(event.m_info,"MUR2_MUF2_PDF261000"); // for e.g. Sherpa Z+jets
212  else if (m_PMGTruthWeights->hasWeight(" muR=0.20000E+01 muF=0.20000E+01 ")) scaleWeight = m_PMGTruthWeights->getWeight(event.m_info," muR=0.20000E+01 muF=0.20000E+01 "); // for e.g. ttZ DSID 410218
213  else if (m_PMGTruthWeights->hasWeight(" dyn= 0 muR=0.20000E+01 muF=0.20000E+01 ")) scaleWeight = m_PMGTruthWeights->getWeight(event.m_info," dyn= 0 muR=0.20000E+01 muF=0.20000E+01 "); // for e.g. tWZ 412118
214  else if (m_PMGTruthWeights->hasWeight("1005")) scaleWeight = m_PMGTruthWeights->getWeight(event.m_info,"1005"); // for e.g. tZ 412063
215  else if (m_PMGTruthWeights->hasWeight(" dyn= -1 muR=0.20000E+01 muF=0.20000E+01 ")) scaleWeight = m_PMGTruthWeights->getWeight(event.m_info," dyn= -1 muR=0.20000E+01 muF=0.20000E+01 "); // for e.g. ttZ 504330
216  else if (m_PMGTruthWeights->hasWeight("muR=20,muF=20")) scaleWeight = m_PMGTruthWeights->getWeight(event.m_info,"muR=20,muF=20"); // for some other generator setups
217  else top::check(m_PMGTruthWeights->hasWeight(" muR = 2.0, muF = 2.0 "), "JetFlavorPlots::apply(): Weight \" muR = 2.0, muF = 2.0 \" not found. Please report this message!");
218  double eventWeight = scaleWeight;
219  if (!m_doRadLowNoVar3c) {
220  top::check(m_PMGTruthWeights->hasWeight("Var3cDown"), "JetFlavorPlots::apply(): Weight \"Var3cDown\" not found. Please report this message!");
221  eventWeight *= m_PMGTruthWeights->getWeight(event.m_info,"Var3cDown") / nominalWeight;
222  if (event.m_isLoose) FillHistograms(m_hists_RadLow_Loose, eventWeight, event);
223  else FillHistograms(m_hists_RadLow, eventWeight, event);
224  } // finish if (!m_doRadLowNoVar3c) {
225  else { // m_doRadLowNoVar3c is true
226  if (event.m_isLoose) FillHistograms(m_hists_RadLowNoVar3c_Loose, eventWeight, event);
227  else FillHistograms(m_hists_RadLowNoVar3c, eventWeight, event);
228  } // finish else
229 
230  }
231  return true;
232  }
233 
234  void JetFlavorPlots::FillHistograms(std::shared_ptr<PlotManager> h_ptr, double w_event, const top::Event& event) const {
235  bool throwWarning = false;
236 
237  for (const auto* const jetPtr : event.m_jets) {
238  int jet_flavor = -99;
239  bool status = jetPtr->getAttribute<int>("PartonTruthLabelID", jet_flavor);
240  if (!status) continue;
241 
242  if (m_detailed) {
243  if ((unsigned int) m_nJetsMax >= event.m_jets.size()) {
244  // vs. nJets and flavour
245  char name[200];
246  // PDG ID for gluon is 21
247  if (jet_flavor == 21) sprintf(name, "gluon_jets_njet%lu_%s", event.m_jets.size(), m_jetCollection.c_str());
248  // PDG ID for d,u,s is 1,2,3
249  else if (jet_flavor >= 1 && jet_flavor <= 3) sprintf(name, "lightquark_jets_njet%lu_%s", event.m_jets.size(), m_jetCollection.c_str());
250  // PDG ID for c is 4
251  else if (jet_flavor == 4) sprintf(name, "cquark_jets_njet%lu_%s", event.m_jets.size(), m_jetCollection.c_str());
252  // PDG ID for b is 5
253  else if (jet_flavor == 5) sprintf(name, "bquark_jets_njet%lu_%s", event.m_jets.size(), m_jetCollection.c_str());
254  else sprintf(name, "other_jets_njet%lu_%s", event.m_jets.size(), m_jetCollection.c_str());
255 
256  static_cast<TH2D*>(h_ptr->hist(name))->Fill(jetPtr->pt() * toGeV,
257  jetPtr->eta(),
258  w_event);
259 
260  // if "detailed", also making the quark_jets one
261  if (jet_flavor >= 1 && jet_flavor <= 4) {
262  sprintf(name, "quark_jets_%s", m_jetCollection.c_str());
263 
264  static_cast<TH2D*>(h_ptr->hist(name))->Fill(jetPtr->pt() * toGeV,
265  jetPtr->eta(),
266  w_event);
267  }
268  } else throwWarning = true;
269  // vs. flavour only
270  char shortname[200];
271  // PDG ID for gluon is 21
272  if (jet_flavor == 21) sprintf(shortname, "gluon_jets_%s", m_jetCollection.c_str());
273  // PDG ID for d,u,s is 1,2,3
274  else if (jet_flavor >= 1 && jet_flavor <= 3) sprintf(shortname, "lightquark_jets_%s", m_jetCollection.c_str());
275  // PDG ID for c is 4
276  else if (jet_flavor == 4) sprintf(shortname, "cquark_jets_%s", m_jetCollection.c_str());
277  // PDG ID for b is 5
278  else if (jet_flavor == 5) sprintf(shortname, "bquark_jets_%s", m_jetCollection.c_str());
279  else sprintf(shortname, "other_jets_%s", m_jetCollection.c_str());
280 
281  static_cast<TH2D*>(h_ptr->hist(shortname))->Fill(jetPtr->pt() * toGeV,
282  jetPtr->eta(),
283  w_event);
284  } else {
285  // the simplest case, one for gluon, one for quarks
286  char name[200];
287  // PDG ID for gluon is 21
288  if (jet_flavor == 21) sprintf(name, "gluon_jets_%s", m_jetCollection.c_str());
289  // PDG ID for d,u,s is 1,2,3
290  else if (jet_flavor >= 1 && jet_flavor <= 4) sprintf(name, "quark_jets_%s", m_jetCollection.c_str());
291  // We are not interested in other PDG IDs
292  else continue;
293 
294  static_cast<TH2D*>(h_ptr->hist(name))->Fill(jetPtr->pt() * toGeV,
295  jetPtr->eta(),
296  w_event);
297  }
298  }
299 
300  if (throwWarning){
301  ATH_MSG_WARNING("Warning! Number of jets in the event is " << event.m_jets.size()
302  << ", but histograms have been booked up to " << m_nJetsMax
303  << ". Exclusive histograms in number of jets have not been filled.\n");
304  }
305  }
306 
307 // function to translate the binnings into vector of bin edges
308  void JetFlavorPlots::formatBinning(const std::string& str, std::vector<double>& binEdges) {
309  std::stringstream ss(str);
310  std::string tok;
311  char separator = ':';
312  while (std::getline(ss, tok, separator)) {
313  binEdges.push_back(std::atof(tok.c_str()));
314  }
315  }
316 
317  std::string JetFlavorPlots::name() const {
318  return "JETFLAVORPLOTS";
319  }
320 } // namespace top
top::JetFlavorPlots::m_hists_Loose
std::shared_ptr< PlotManager > m_hists_Loose
Definition: JetFlavorPlots.h:65
top::JetFlavorPlots::m_doRadHigh
bool m_doRadHigh
Definition: JetFlavorPlots.h:83
top::JetFlavorPlots::BookHistograms
void BookHistograms(std::shared_ptr< PlotManager > h_ptr, std::vector< double > ptBins, std::vector< double > etaBins)
Definition: JetFlavorPlots.cxx:136
top::JetFlavorPlots::m_etaBins
std::string m_etaBins
Definition: JetFlavorPlots.h:90
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
top
TopConfig A simple configuration that is NOT a singleton.
Definition: AnalysisTrackingHelper.cxx:58
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
top::JetFlavorPlots::name
std::string name() const override
Return the name for the cutflow table.
Definition: JetFlavorPlots.cxx:317
top::JetFlavorPlots::formatBinning
void formatBinning(const std::string &str, std::vector< double > &binEdges)
Definition: JetFlavorPlots.cxx:308
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
ConvertOldUJHistosToNewHistos.etaBins
list etaBins
Definition: ConvertOldUJHistosToNewHistos.py:145
PMGTools::PMGTruthWeightTool::hasWeight
virtual bool hasWeight(const std::string &weightName) const override
Implements interface from IPMGTruthWeightTool.
Definition: PMGTruthWeightTool.cxx:135
SystematicSet.h
test_pyathena.pt
pt
Definition: test_pyathena.py:11
CP::SystematicSet
Class to wrap a set of SystematicVariations.
Definition: SystematicSet.h:31
PMGTools::PMGTruthWeightTool::initialize
virtual StatusCode initialize() override
Function initialising the tool.
Definition: PMGTruthWeightTool.cxx:31
MsgCategory.h
top::JetFlavorPlots::m_hists_RadLowNoVar3c_Loose
std::shared_ptr< PlotManager > m_hists_RadLowNoVar3c_Loose
Definition: JetFlavorPlots.h:73
top::JetFlavorPlots::apply
bool apply(const top::Event &event) const override
Fill the histograms.
Definition: JetFlavorPlots.cxx:162
top::JetFlavorPlots::m_jetCollection
std::string m_jetCollection
Definition: JetFlavorPlots.h:96
AthenaPoolTestWrite.stream
string stream
Definition: AthenaPoolTestWrite.py:12
config
Definition: PhysicsAnalysis/AnalysisCommon/AssociationUtils/python/config.py:1
EventTools.h
A few functions for doing operations on particles / events. Currently holds code for dR,...
top::JetFlavorPlots::toGeV
static const double toGeV
Definition: JetFlavorPlots.h:61
compareGeometries.outputFile
string outputFile
Definition: compareGeometries.py:25
EL::Worker
Definition: Worker.h:25
top::JetFlavorPlots::m_nominalHashValue
std::size_t m_nominalHashValue
Definition: JetFlavorPlots.h:76
event
POOL::TEvent event(POOL::TEvent::kClassAccess)
top::JetFlavorPlots::m_hists
std::shared_ptr< PlotManager > m_hists
Definition: JetFlavorPlots.h:64
lumiFormat.i
int i
Definition: lumiFormat.py:92
top::JetFlavorPlots::m_detailed
bool m_detailed
Definition: JetFlavorPlots.h:79
top::JetFlavorPlots::m_config
std::shared_ptr< top::TopConfig > m_config
Definition: JetFlavorPlots.h:99
top::nominal
@ nominal
Definition: ScaleFactorRetriever.h:29
top::JetFlavorPlots::m_hists_RadLow
std::shared_ptr< PlotManager > m_hists_RadLow
Definition: JetFlavorPlots.h:68
toGeV
#define toGeV
Definition: HIEfficiencyResponseHistos.cxx:16
top::check
void check(bool thingToCheck, const std::string &usefulFailureMessage)
Print an error message and terminate if thingToCheck is false.
Definition: EventTools.cxx:15
top::JetFlavorPlots::m_doRadHighNoVar3c
bool m_doRadHighNoVar3c
Definition: JetFlavorPlots.h:85
top::JetFlavorPlots::m_hists_RadHighNoVar3c
std::shared_ptr< PlotManager > m_hists_RadHighNoVar3c
Definition: JetFlavorPlots.h:70
top::isSimulation
bool isSimulation(const top::Event &event)
Is this event MC simulation (True) or data (False)?
Definition: EventTools.cxx:52
top::JetFlavorPlots::m_hists_RadHighNoVar3c_Loose
std::shared_ptr< PlotManager > m_hists_RadHighNoVar3c_Loose
Definition: JetFlavorPlots.h:71
top::JetFlavorPlots::m_doRadLowNoVar3c
bool m_doRadLowNoVar3c
Definition: JetFlavorPlots.h:86
CxxUtils::atof
double atof(std::string_view str)
Converts a string into a double / float.
Definition: Control/CxxUtils/Root/StringUtils.cxx:91
top::JetFlavorPlots::m_PMGTruthWeights
PMGTools::PMGTruthWeightTool * m_PMGTruthWeights
Definition: JetFlavorPlots.h:102
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
top::JetFlavorPlots::m_doNominal
bool m_doNominal
Definition: JetFlavorPlots.h:82
TopConfig.h
top::JetFlavorPlots::m_nJetsMax
int m_nJetsMax
Definition: JetFlavorPlots.h:93
EventInfo.h
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
top::JetFlavorPlots::FillHistograms
void FillHistograms(std::shared_ptr< PlotManager > h_ptr, double w_event, const top::Event &event) const
Definition: JetFlavorPlots.cxx:234
PMGTools::PMGTruthWeightTool
Implementation for the xAOD truth meta data weight tool.
Definition: PMGTruthWeightTool.h:26
top::JetFlavorPlots::m_doRadLow
bool m_doRadLow
Definition: JetFlavorPlots.h:84
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.Constants.INFO
int INFO
Definition: Control/AthenaCommon/python/Constants.py:16
top::JetFlavorPlots::m_hists_RadLowNoVar3c
std::shared_ptr< PlotManager > m_hists_RadLowNoVar3c
Definition: JetFlavorPlots.h:72
JetFlavorPlots.h
CxxUtils::atoi
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...
Definition: Control/CxxUtils/Root/StringUtils.cxx:85
str
Definition: BTagTrackIpAccessor.cxx:11
merge.status
status
Definition: merge.py:17
top::Event
Very simple class to hold event data after reading from a file.
Definition: Event.h:49
top::JetFlavorPlots::m_hists_RadHigh_Loose
std::shared_ptr< PlotManager > m_hists_RadHigh_Loose
Definition: JetFlavorPlots.h:67
PowhegControl_ttFCNC_NLO.params
params
Definition: PowhegControl_ttFCNC_NLO.py:226
top::JetFlavorPlots::m_ptBins
std::string m_ptBins
Definition: JetFlavorPlots.h:89
ScaleFactorRetriever.h
top::JetFlavorPlots::m_hists_RadLow_Loose
std::shared_ptr< PlotManager > m_hists_RadLow_Loose
Definition: JetFlavorPlots.h:69
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
PMGTools::PMGTruthWeightTool::getWeight
virtual float getWeight(const xAOD::EventInfo *evtInfo, const std::string &weightName) const override
Implements interface from IPMGTruthWeightTool.
Definition: PMGTruthWeightTool.cxx:111
top::JetFlavorPlots::m_hists_RadHigh
std::shared_ptr< PlotManager > m_hists_RadHigh
Definition: JetFlavorPlots.h:66