ATLAS Offline Software
Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
top::JetFlavorPlots Class Reference

An example of how to quickly make some plots at a certain point in the cutflow. More...

#include <JetFlavorPlots.h>

Inheritance diagram for top::JetFlavorPlots:
Collaboration diagram for top::JetFlavorPlots:

Public Member Functions

 JetFlavorPlots (const std::string &name, TFile *outputFile, const std::string &params, std::shared_ptr< top::TopConfig > config, EL::Worker *wk=nullptr)
 Setup some example plots. More...
 
bool apply (const top::Event &event) const override
 Fill the histograms. More...
 
std::string name () const override
 Return the name for the cutflow table. More...
 
virtual bool applyParticleLevel (const top::ParticleLevelEvent &) const
 This does stuff based on the information in a particle level event. More...
 

Private Member Functions

void formatBinning (const std::string &str, std::vector< double > &binEdges)
 
void BookHistograms (std::shared_ptr< PlotManager > h_ptr, std::vector< double > ptBins, std::vector< double > etaBins)
 
void FillHistograms (std::shared_ptr< PlotManager > h_ptr, double w_event, const top::Event &event) const
 

Private Attributes

std::shared_ptr< PlotManagerm_hists = nullptr
 
std::shared_ptr< PlotManagerm_hists_Loose = nullptr
 
std::shared_ptr< PlotManagerm_hists_RadHigh = nullptr
 
std::shared_ptr< PlotManagerm_hists_RadHigh_Loose = nullptr
 
std::shared_ptr< PlotManagerm_hists_RadLow = nullptr
 
std::shared_ptr< PlotManagerm_hists_RadLow_Loose = nullptr
 
std::shared_ptr< PlotManagerm_hists_RadHighNoVar3c = nullptr
 
std::shared_ptr< PlotManagerm_hists_RadHighNoVar3c_Loose = nullptr
 
std::shared_ptr< PlotManagerm_hists_RadLowNoVar3c = nullptr
 
std::shared_ptr< PlotManagerm_hists_RadLowNoVar3c_Loose = nullptr
 
std::size_t m_nominalHashValue
 
bool m_detailed
 
bool m_doNominal
 
bool m_doRadHigh
 
bool m_doRadLow
 
bool m_doRadHighNoVar3c
 
bool m_doRadLowNoVar3c
 
std::string m_ptBins
 
std::string m_etaBins
 
int m_nJetsMax
 
std::string m_jetCollection
 
std::shared_ptr< top::TopConfigm_config
 
PMGTools::PMGTruthWeightToolm_PMGTruthWeights
 
std::atomic< bool > m_throwwarningPMG
 

Static Private Attributes

static const double toGeV = 0.001
 

Detailed Description

An example of how to quickly make some plots at a certain point in the cutflow.

Definition at line 27 of file JetFlavorPlots.h.

Constructor & Destructor Documentation

◆ JetFlavorPlots()

top::JetFlavorPlots::JetFlavorPlots ( const std::string &  name,
TFile *  outputFile,
const std::string &  params,
std::shared_ptr< top::TopConfig config,
EL::Worker wk = nullptr 
)

Setup some example plots.

Add a bunch of histograms.

Parameters
nameThe name of the directory to store histograms in, in the output file. e.g. you might have ee, mumu and emu.
outputFileThe output file. Needs setting up at the very start so that we can attach the files.
paramsThe arguments, e.g. for the binning of the plots.
configInstance of TopConfig
wkOnly used by EventLoop, ok as nullptr as default.

Definition at line 31 of file JetFlavorPlots.cxx.

33  :
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(""),
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  }

Member Function Documentation

◆ apply()

bool top::JetFlavorPlots::apply ( const top::Event event) const
overridevirtual

Fill the histograms.

Returns
True because it doesn't select any events.

Implements top::EventSelectorBase.

Definition at line 162 of file JetFlavorPlots.cxx.

162  {
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  }

◆ applyParticleLevel()

virtual bool top::EventSelectorBase::applyParticleLevel ( const top::ParticleLevelEvent ) const
inlinevirtualinherited

This does stuff based on the information in a particle level event.

The idea is that you implement this to return either true or false, based on the information held within the top::ParticleLevelEvent. If this function returns true, then the event is kept, otherwise it is removed. The function has a default implementation (which returns true) because it is expected that many EventSelector objects do not operate on ParticleLevelEvent objects.

Parameters
top::ParticleLevelEventthe current particle level event.
trueif the event should be kept (i.e. it passed the selector criteria), false otherwise.

Reimplemented in top::JetNGhostSelector, top::PrintEventSelector, top::PseudoTopRecoRun, top::NElectronNMuonTightSelector, top::NElectronNMuonSelector, top::NFwdElectronSelector, top::HTSelector, top::OSLeptonTightSelector, top::MLLSelector, top::MWTSelector, top::NElectronTightSelector, top::NFwdElectronTightSelector, top::NMuonTightSelector, top::OSLeptonSelector, top::METMWTSelector, top::METSelector, top::MLLWindow, top::NElectronSelector, top::NJetSelector, top::NMuonSelector, top::NPhotonSelector, top::NSoftMuonSelector, top::NTauSelector, top::SSLeptonTightSelector, top::SSLeptonSelector, top::ParticleLevelSelector, top::RecoLevelSelector, top::NVarRCJetSelector, top::NLargeJetSelector, and top::NRCJetSelector.

Definition at line 73 of file EventSelectorBase.h.

73 {return true;}

◆ BookHistograms()

void top::JetFlavorPlots::BookHistograms ( std::shared_ptr< PlotManager h_ptr,
std::vector< double >  ptBins,
std::vector< double >  etaBins 
)
private

Definition at line 136 of file JetFlavorPlots.cxx.

137  {
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  }

◆ FillHistograms()

void top::JetFlavorPlots::FillHistograms ( std::shared_ptr< PlotManager h_ptr,
double  w_event,
const top::Event event 
) const
private

Definition at line 234 of file JetFlavorPlots.cxx.

234  {
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  }

◆ formatBinning()

void top::JetFlavorPlots::formatBinning ( const std::string &  str,
std::vector< double > &  binEdges 
)
private

Definition at line 308 of file JetFlavorPlots.cxx.

308  {
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  }

◆ name()

std::string top::JetFlavorPlots::name ( ) const
overridevirtual

Return the name for the cutflow table.

Returns
The word JETFLAVORPLOTS.

Implements top::EventSelectorBase.

Definition at line 317 of file JetFlavorPlots.cxx.

317  {
318  return "JETFLAVORPLOTS";
319  }

Member Data Documentation

◆ m_config

std::shared_ptr<top::TopConfig> top::JetFlavorPlots::m_config
private

Definition at line 99 of file JetFlavorPlots.h.

◆ m_detailed

bool top::JetFlavorPlots::m_detailed
private

Definition at line 79 of file JetFlavorPlots.h.

◆ m_doNominal

bool top::JetFlavorPlots::m_doNominal
private

Definition at line 82 of file JetFlavorPlots.h.

◆ m_doRadHigh

bool top::JetFlavorPlots::m_doRadHigh
private

Definition at line 83 of file JetFlavorPlots.h.

◆ m_doRadHighNoVar3c

bool top::JetFlavorPlots::m_doRadHighNoVar3c
private

Definition at line 85 of file JetFlavorPlots.h.

◆ m_doRadLow

bool top::JetFlavorPlots::m_doRadLow
private

Definition at line 84 of file JetFlavorPlots.h.

◆ m_doRadLowNoVar3c

bool top::JetFlavorPlots::m_doRadLowNoVar3c
private

Definition at line 86 of file JetFlavorPlots.h.

◆ m_etaBins

std::string top::JetFlavorPlots::m_etaBins
private

Definition at line 90 of file JetFlavorPlots.h.

◆ m_hists

std::shared_ptr<PlotManager> top::JetFlavorPlots::m_hists = nullptr
private

Definition at line 64 of file JetFlavorPlots.h.

◆ m_hists_Loose

std::shared_ptr<PlotManager> top::JetFlavorPlots::m_hists_Loose = nullptr
private

Definition at line 65 of file JetFlavorPlots.h.

◆ m_hists_RadHigh

std::shared_ptr<PlotManager> top::JetFlavorPlots::m_hists_RadHigh = nullptr
private

Definition at line 66 of file JetFlavorPlots.h.

◆ m_hists_RadHigh_Loose

std::shared_ptr<PlotManager> top::JetFlavorPlots::m_hists_RadHigh_Loose = nullptr
private

Definition at line 67 of file JetFlavorPlots.h.

◆ m_hists_RadHighNoVar3c

std::shared_ptr<PlotManager> top::JetFlavorPlots::m_hists_RadHighNoVar3c = nullptr
private

Definition at line 70 of file JetFlavorPlots.h.

◆ m_hists_RadHighNoVar3c_Loose

std::shared_ptr<PlotManager> top::JetFlavorPlots::m_hists_RadHighNoVar3c_Loose = nullptr
private

Definition at line 71 of file JetFlavorPlots.h.

◆ m_hists_RadLow

std::shared_ptr<PlotManager> top::JetFlavorPlots::m_hists_RadLow = nullptr
private

Definition at line 68 of file JetFlavorPlots.h.

◆ m_hists_RadLow_Loose

std::shared_ptr<PlotManager> top::JetFlavorPlots::m_hists_RadLow_Loose = nullptr
private

Definition at line 69 of file JetFlavorPlots.h.

◆ m_hists_RadLowNoVar3c

std::shared_ptr<PlotManager> top::JetFlavorPlots::m_hists_RadLowNoVar3c = nullptr
private

Definition at line 72 of file JetFlavorPlots.h.

◆ m_hists_RadLowNoVar3c_Loose

std::shared_ptr<PlotManager> top::JetFlavorPlots::m_hists_RadLowNoVar3c_Loose = nullptr
private

Definition at line 73 of file JetFlavorPlots.h.

◆ m_jetCollection

std::string top::JetFlavorPlots::m_jetCollection
private

Definition at line 96 of file JetFlavorPlots.h.

◆ m_nJetsMax

int top::JetFlavorPlots::m_nJetsMax
private

Definition at line 93 of file JetFlavorPlots.h.

◆ m_nominalHashValue

std::size_t top::JetFlavorPlots::m_nominalHashValue
private

Definition at line 76 of file JetFlavorPlots.h.

◆ m_PMGTruthWeights

PMGTools::PMGTruthWeightTool* top::JetFlavorPlots::m_PMGTruthWeights
private

Definition at line 102 of file JetFlavorPlots.h.

◆ m_ptBins

std::string top::JetFlavorPlots::m_ptBins
private

Definition at line 89 of file JetFlavorPlots.h.

◆ m_throwwarningPMG

std::atomic<bool> top::JetFlavorPlots::m_throwwarningPMG
mutableprivate

Definition at line 111 of file JetFlavorPlots.h.

◆ toGeV

const double top::JetFlavorPlots::toGeV = 0.001
staticprivate

Definition at line 61 of file JetFlavorPlots.h.


The documentation for this class was generated from the following files:
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
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
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
top::JetFlavorPlots::m_hists_RadLowNoVar3c_Loose
std::shared_ptr< PlotManager > m_hists_RadLowNoVar3c_Loose
Definition: JetFlavorPlots.h:73
top::JetFlavorPlots::m_jetCollection
std::string m_jetCollection
Definition: JetFlavorPlots.h:96
AthenaPoolTestWrite.stream
string stream
Definition: AthenaPoolTestWrite.py:12
top::JetFlavorPlots::m_throwwarningPMG
std::atomic< bool > m_throwwarningPMG
Definition: JetFlavorPlots.h:111
config
Definition: PhysicsAnalysis/AnalysisCommon/AssociationUtils/python/config.py:1
top::JetFlavorPlots::toGeV
static const double toGeV
Definition: JetFlavorPlots.h:61
compareGeometries.outputFile
string outputFile
Definition: compareGeometries.py: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
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
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
top::JetFlavorPlots::m_nJetsMax
int m_nJetsMax
Definition: JetFlavorPlots.h:93
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
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::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
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