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

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

#include <ExamplePlots.h>

Inheritance diagram for top::ExamplePlots:
Collaboration diagram for top::ExamplePlots:

Public Member Functions

 ExamplePlots (const std::string &name, TFile *outputFile, EL::Worker *wk=nullptr, std::shared_ptr< top::TopConfig > config=nullptr)
 Setup some example plots. More...
 
virtual 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 Attributes

PlotManager m_hists
 Easy access to histograms. More...
 
std::size_t m_nominalHashValue
 
std::shared_ptr< top::TopConfigm_config
 
top::ScaleFactorRetrieverm_sfRetriever
 

Static Private Attributes

static const double toGeV = 0.001
 File units are MeV and normally people like plots in GeV. More...
 

Detailed Description

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

Definition at line 25 of file ExamplePlots.h.

Constructor & Destructor Documentation

◆ ExamplePlots()

top::ExamplePlots::ExamplePlots ( const std::string &  name,
TFile *  outputFile,
EL::Worker wk = nullptr,
std::shared_ptr< top::TopConfig config = 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.
wkOnly used by EventLoop, ok as nullptr as default.

Definition at line 24 of file ExamplePlots.cxx.

25  :
27  m_config = config;
28  m_sfRetriever = asg::ToolStore::get<ScaleFactorRetriever>("top::ScaleFactorRetriever");
30  m_nominalHashValue = nominal.hash();
31 
32  m_hists.addHist("event_mu", ";<#mu>;Events", 25, 0., 50.);
33  if (m_config->isMC()) {
34  m_hists.addHist("mc_weight", ";MC Event Weight", 30, -1, 1000);
35  m_hists.addHist("beamspot_weight", ";Beamspot weight", 120, -0.5, 2.5);
36  m_hists.addHist("jvt_SF", ";JVT SF", 120, -0.5, 2.5);
37  if (m_config->useElectrons() || m_config->useMuons())
38  m_hists.addHist("lepton_SF", ";Lepton SF", 120, -0.5, 2.5);
39  if (m_config->useGlobalTriggerConfiguration())
40  m_hists.addHist("globalTriggerSF", ";Global Trigger SF", 120, -0.5, 2.5);
41  m_hists.addHist("triggerSF", ";Trigger SF", 120, -0.5, 2.5);
42  if (m_config->useTaus())
43  m_hists.addHist("tau_SF", ";Tau SF", 120, -0.5, 2.5);
44  if (m_config->usePhotons())
45  m_hists.addHist("photon_SF", ";Photon SF", 120, -0.5, 2.5);
46  }
47 
48  m_hists.addHist("pileup_weight", ";Pileup Weight", 20, -1, 5);
49 
50  m_hists.addHist("el_n", ";Electron multiplicity;Events", 10, -0.5, 9.5);
51  m_hists.addHist("el_pt", ";Electron p_{T} / GeV;Electrons", 20, 0., 250.);
52  m_hists.addHist("el_eta", ";Electron #eta;Electrons", 20, -2.5, 2.5);
53  m_hists.addHist("el_phi", ";Electron #phi;Electrons", 20, -M_PI, M_PI);
54  m_hists.addHist("el_charge", ";Electron charge;Electrons", 3, -1.5, 1.5);
55  if (m_config->isMC()) m_hists.addHist("el_true_type", ";Electron true type;Electrons", 20, 0., 20.);
56 
57  m_hists.addHist("mu_n", ";Muon multiplicity;Events", 10, -0.5, 9.5);
58  m_hists.addHist("mu_pt", ";Muon p_{T} / GeV;Muons", 20, 0., 250.);
59  m_hists.addHist("mu_eta", ";Muon #eta;Muons", 20, -2.5, 2.5);
60  m_hists.addHist("mu_phi", ";Muon #phi;Muons", 20, -M_PI, M_PI);
61  m_hists.addHist("mu_charge", ";Muon charge;Muons", 3, -1.5, 1.5);
62  if (m_config->isMC()) m_hists.addHist("mu_true_type", ";Muon true type;Muons", 20, 0., 20.);
63 
64  m_hists.addHist("ph_n", ";Photon multiplicity;Events", 10, -0.5, 9.5);
65  m_hists.addHist("ph_pt", ";Photon p_{T} / GeV;Photons", 20, 0., 250.);
66  m_hists.addHist("ph_eta", ";Photon #eta;Photons", 20, -2.5, 2.5);
67  m_hists.addHist("ph_phi", ";Photon #phi;Photons", 20, -M_PI, M_PI);
68  m_hists.addHist("ph_e", ";Photon e / GeV;Photons", 20, 0, 250);
69 
70  m_hists.addHist("jet_n", ";Jet multiplicity;Events", 10, -0.5, 9.5);
71  m_hists.addHist("jet_pt", ";Jet p_{T} / GeV;Jets", 40, 0., 500.);
72  m_hists.addHist("jet_e", ";Jet e / GeV;Jets", 40, 0., 1000.);
73  m_hists.addHist("jet_eta", ";Jet #eta;Jets", 20, -2.5, 2.5);
74  m_hists.addHist("jet_phi", ";Jet #phi;Jets", 20, -M_PI, M_PI);
75  if (m_config->isMC()) {
76  m_hists.addHist("jet_truthflav", ";Jet truth flavor;Jets", 20, 0., 20.);
77  m_hists.addHist("jet_btagSF_DL1dv01_77", ";Jet btag SF;Jets", 100, 0.5, 1.5);
78  }
79  m_hists.addHist("jet_isbtagged_DL1dv01_77", ";Jet is b-tagged;Jets", 2, 0., 2.);
80 
81  m_hists.addHist("jet0_pt", ";Jet0 p_{T} / GeV; Events / 10 GeV", 25, 5, 505);
82  m_hists.addHist("jet0_eta", ";Jet0 #eta; Jets", 25, -2.5, 2.5);
83  m_hists.addHist("jet0_phi", ";Jet0 #phi; Jets", 25, -M_PI, M_PI);
84  m_hists.addHist("jet0_e", ";Jet0 E / GeV; Jets", 100, 0, 1000);
85  if (m_config->isMC()) {
86  m_hists.addHist("jet0_truthflav", ";Jet0 truth flavor;Jets", 20, 0., 20.);
87  m_hists.addHist("jet0_btagSF_DL1dv01_77", ";Jet0 btag SF;Jets", 100, 0.5, 1.5);
88  }
89  m_hists.addHist("jet0_isbtagged_DL1dv01_77", ";Jet is b-tagged;Jets", 2, 0., 2.);
90 
91  m_hists.addHist("jet1_pt", ";Jet1 p_{T} / GeV; Events / 10 GeV", 25, 5, 505);
92  m_hists.addHist("jet1_eta", ";Jet1 #eta; Jets", 25, -2.5, 2.5);
93  m_hists.addHist("jet1_phi", ";Jet1 #phi; Jets", 25, -M_PI, M_PI);
94  m_hists.addHist("jet1_e", ";Jet1 E / GeV; Jets", 100, 0, 1000);
95  if (m_config->isMC()) {
96  m_hists.addHist("jet1_truthflav", ";Jet1 truth flavor;Jets", 20, 0., 20.);
97  m_hists.addHist("jet1_btagSF_DL1dv01_77", ";Jet1 btag SF;Jets", 100, 0.5, 1.5);
98  }
99  m_hists.addHist("jet1_isbtagged_DL1dv01_77", ";Jet is b-tagged;Jets", 2, 0., 2.);
100 
101  m_hists.addHist("jet2_pt", ";Jet2 p_{T} / GeV; Events / 10 GeV", 25, 5, 505);
102  m_hists.addHist("jet2_eta", ";Jet2 #eta; Jets", 25, -2.5, 2.5);
103  m_hists.addHist("jet2_phi", ";Jet2 #phi; Jets", 25, -M_PI, M_PI);
104  m_hists.addHist("jet2_e", ";Jet2 E / GeV; Jets", 100, 0, 1000);
105  if (m_config->isMC()) {
106  m_hists.addHist("jet2_truthflav", ";Jet2 truth flavor;Jets", 20, 0., 20.);
107  m_hists.addHist("jet2_btagSF_DL1dv01_77", ";Jet2 btag SF;Jets", 100, 0.5, 1.5);
108  }
109  m_hists.addHist("jet2_isbtagged_DL1dv01_77", ";Jet is b-tagged;Jets", 2, 0., 2.);
110 
111  m_hists.addHist("jet3_pt", ";Jet3 p_{T} / GeV; Events / 10 GeV", 25, 5, 505);
112  m_hists.addHist("jet3_eta", ";Jet3 #eta; Jets", 25, -2.5, 2.5);
113  m_hists.addHist("jet3_phi", ";Jet3 #phi; Jets", 25, -M_PI, M_PI);
114  m_hists.addHist("jet3_e", ";Jet3 E / GeV; Jets", 100, 0, 1000);
115  if (m_config->isMC()) {
116  m_hists.addHist("jet3_truthflav", ";Jet3 truth flavor;Jets", 20, 0., 20.);
117  m_hists.addHist("jet3_btagSF_DL1dv01_77", ";Jet3 btag SF;Jets", 100, 0.5, 1.5);
118  }
119  m_hists.addHist("jet3_isbtagged_DL1dv01_77", ";Jet is b-tagged;Jets", 2, 0., 2.);
120 
121  //Large-R jet
122  m_hists.addHist("ljet_n", ";Large-R Jet multiplicity; Jets ", 5, 0, 5);
123  m_hists.addHist("ljet_pt", ";Large-R Jet p_{T} / GeV; Jets / 26 GeV", 50, 200, 1500);
124  m_hists.addHist("ljet_eta", ";Large-R Jet #eta; Jets", 15, -2., 2.);
125  m_hists.addHist("ljet_phi", ";Large-R Jet #phi; Jets", 25, -M_PI, M_PI);
126  m_hists.addHist("ljet_m", ";Large-R mass / GeV; Jets/ 10 GeV", 35, 50, 400);
127 
128  m_hists.addHist("taujet_n", ";TauJet multiplicity;Events", 20, -0.5, 19.5);
129  m_hists.addHist("taujet_pt", ";TauJet p_{T} / GeV;TauJet", 20, 0., 200.);
130  m_hists.addHist("taujet_eta", ";TauJet #eta;TauJet", 20, -2.5, 2.5);
131  m_hists.addHist("taujet_phi", ";TauJet #phi;TauJet", 20, -M_PI, M_PI);
132  m_hists.addHist("taujet_charge", ";TauJet charge;TauJet", 3, -1.5, 1.5);
133 
134  m_hists.addHist("event_met_et", ";MET / GeV;Events", 50, 0., 400.);
135  m_hists.addHist("event_met_phi", ";MET #phi;Events", 20, -M_PI, M_PI);
136  }

Member Function Documentation

◆ apply()

bool top::ExamplePlots::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 138 of file ExamplePlots.cxx.

138  {
139  //only nominal
140 
141  if (event.m_hashValue != m_nominalHashValue) return true;
142 
143  //only plot tight selection
144  //before, we were plotting tight and loose together
145  if (event.m_isLoose) return true;
146 
147  double eventWeight = 1.;
148  if (top::isSimulation(event)) eventWeight = event.m_info->auxdataConst<float>("AnalysisTop_eventWeight");
149 
150  if (m_config->isMC()) {
151  m_hists.hist("mc_weight")->Fill(eventWeight, eventWeight);
152  m_hists.hist("beamspot_weight")->Fill(event.m_info->beamSpotWeight(), eventWeight);
153  m_hists.hist("jvt_SF")->Fill(event.m_jvtSF, eventWeight);
154 
155  if (m_config->useElectrons() || m_config->useMuons())
156  m_hists.hist("lepton_SF")->Fill(m_sfRetriever->leptonSF(event, topSFSyst::nominal), eventWeight);
157  if (m_config->useGlobalTriggerConfiguration())
158  m_hists.hist("globalTriggerSF")->Fill(m_sfRetriever->globalTriggerSF(event, topSFSyst::nominal), eventWeight);
159  m_hists.hist("triggerSF")->Fill(m_sfRetriever->triggerSF(event, topSFSyst::nominal), eventWeight);
160  if (m_config->useTaus())
161  m_hists.hist("tau_SF")->Fill(m_sfRetriever->tauSF(event, topSFSyst::nominal), eventWeight);
162  if (m_config->usePhotons())
163  m_hists.hist("photon_SF")->Fill(m_sfRetriever->photonSF(event, topSFSyst::nominal), eventWeight);
164 
165  //pileup weight needs pileup reweighting tool to have run
167  event), eventWeight);
168  }
169 
170  m_hists.hist("event_mu")->Fill(event.m_info->averageInteractionsPerCrossing(), eventWeight);
171 
172  m_hists.hist("el_n")->Fill(event.m_electrons.size(), eventWeight);
173  for (const auto* const elPtr : event.m_electrons) {
174  m_hists.hist("el_pt")->Fill(elPtr->pt() * toGeV, eventWeight);
175  m_hists.hist("el_eta")->Fill(elPtr->eta(), eventWeight);
176  m_hists.hist("el_phi")->Fill(elPtr->phi(), eventWeight);
177  m_hists.hist("el_charge")->Fill(elPtr->charge(), eventWeight);
178 
179  //retrieve the truth-matching variables from MCTruthClassifier
180  if (m_config->isMC()) {
181  static SG::AuxElement::Accessor<int> typeel("truthType");
182  if (typeel.isAvailable(*elPtr)) m_hists.hist("el_true_type")->Fill(typeel(*elPtr), eventWeight);
183  }
184 
185  }
186 
187  m_hists.hist("mu_n")->Fill(event.m_muons.size(), eventWeight);
188  for (const auto* const muPtr : event.m_muons) {
189  m_hists.hist("mu_pt")->Fill(muPtr->pt() * toGeV, eventWeight);
190  m_hists.hist("mu_eta")->Fill(muPtr->eta(), eventWeight);
191  m_hists.hist("mu_phi")->Fill(muPtr->phi(), eventWeight);
192 
193  m_hists.hist("mu_charge")->Fill(muPtr->charge(), eventWeight);
194  if (m_config->isMC()) {
195  static SG::AuxElement::Accessor<int> acc_mctt("truthType");
196  if (acc_mctt.isAvailable(*muPtr)) m_hists.hist("mu_true_type")->Fill(acc_mctt(*muPtr), eventWeight);
197  }
198  }
199 
200  m_hists.hist("ph_n")->Fill(event.m_photons.size(), eventWeight);
201  for (const auto* const phPtr : event.m_photons) {
202  m_hists.hist("ph_pt")->Fill(phPtr->pt() * toGeV, eventWeight);
203  m_hists.hist("ph_eta")->Fill(phPtr->eta(), eventWeight);
204  m_hists.hist("ph_phi")->Fill(phPtr->phi(), eventWeight);
205  m_hists.hist("ph_e")->Fill(phPtr->e() * toGeV, eventWeight);
206  }
207 
208  m_hists.hist("jet_n")->Fill(event.m_jets.size(), eventWeight);
209  unsigned int i = 0;
210  std::array<std::string, 4> numbers {{
211  "jet0", "jet1", "jet2", "jet3"
212  }};
213 
214  for (const auto* const jetPtr : event.m_jets) {
215  m_hists.hist("jet_pt")->Fill(jetPtr->pt() * toGeV, eventWeight);
216  m_hists.hist("jet_eta")->Fill(jetPtr->eta(), eventWeight);
217  m_hists.hist("jet_phi")->Fill(jetPtr->phi(), eventWeight);
218  m_hists.hist("jet_e")->Fill(jetPtr->e() * toGeV, eventWeight);
219 
220  int jet_truthflav = -1;
221  if (m_config->isMC()) {
222  if (jetPtr->isAvailable<int>("HadronConeExclTruthLabelID")) {
223  jetPtr->getAttribute("HadronConeExclTruthLabelID", jet_truthflav);
224  m_hists.hist("jet_truthflav")->Fill(jet_truthflav, eventWeight);
225  }
226  }
227 
228  int isbtagged = 0;
229  float btagSF = 1.;
230  bool hasBtagSF = false;
231  const bool hasBtag = jetPtr->isAvailable<char>("isbtagged_DL1dv01_FixedCutBEff_77");
232  if (hasBtag) {
233  isbtagged = jetPtr->auxdataConst<char>("isbtagged_DL1dv01_FixedCutBEff_77");
234  m_hists.hist("jet_isbtagged_DL1dv01_77")->Fill(isbtagged, eventWeight);
235  if (m_config->isMC()) {
236  if (jetPtr->isAvailable<float>("btag_SF_DL1dv01_FixedCutBEff_77_nom")) {
237  btagSF = jetPtr->auxdataConst<float>("btag_SF_DL1dv01_FixedCutBEff_77_nom");
238  m_hists.hist("jet_btagSF_DL1dv01_77")->Fill(btagSF, eventWeight);
239  hasBtagSF = true;
240  }
241  }
242  }
243 
244  if (i < numbers.size()) {
245  m_hists.hist(numbers[i] + "_pt")->Fill(jetPtr->pt() * toGeV, eventWeight);
246  m_hists.hist(numbers[i] + "_eta")->Fill(jetPtr->eta(), eventWeight);
247  m_hists.hist(numbers[i] + "_phi")->Fill(jetPtr->phi(), eventWeight);
248  m_hists.hist(numbers[i] + "_e")->Fill(jetPtr->e() * toGeV, eventWeight);
249  if (hasBtag) m_hists.hist(numbers[i] + "_isbtagged_DL1dv01_77")->Fill(isbtagged, eventWeight);
250  if (m_config->isMC()) {
251  if (hasBtagSF) m_hists.hist(numbers[i] + "_btagSF_DL1dv01_77")->Fill(btagSF, eventWeight);
252  m_hists.hist(numbers[i] + "_truthflav")->Fill(jet_truthflav, eventWeight);
253  }
254  }
255  ++i;
256  }
257 
258  m_hists.hist("ljet_n")->Fill(event.m_largeJets.size(), eventWeight);
259  for (const auto* const jetPtr : event.m_largeJets) {
260  m_hists.hist("ljet_pt")->Fill(jetPtr->pt() * toGeV, eventWeight);
261  m_hists.hist("ljet_eta")->Fill(jetPtr->eta(), eventWeight);
262  m_hists.hist("ljet_phi")->Fill(jetPtr->phi(), eventWeight);
263  m_hists.hist("ljet_m")->Fill(jetPtr->m() * toGeV, eventWeight);
264  }
265 
266  m_hists.hist("taujet_n")->Fill(event.m_tauJets.size(), eventWeight);
267  for (const auto* const tauPtr : event.m_tauJets) {
268  m_hists.hist("taujet_pt")->Fill(tauPtr->pt() * toGeV, eventWeight);
269  m_hists.hist("taujet_eta")->Fill(tauPtr->eta(), eventWeight);
270  m_hists.hist("taujet_phi")->Fill(tauPtr->phi(), eventWeight);
271  m_hists.hist("taujet_charge")->Fill(tauPtr->charge(), eventWeight);
272  }
273 
274  if (event.m_met != nullptr) {
275  m_hists.hist("event_met_et")->Fill(event.m_met->met() * toGeV, eventWeight);
276  m_hists.hist("event_met_phi")->Fill(event.m_met->phi(), eventWeight);
277  }
278 
279  return true;
280  }

◆ 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;}

◆ name()

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

Return the name for the cutflow table.

Returns
The word EXAMPLEPLOTS.

Implements top::EventSelectorBase.

Definition at line 282 of file ExamplePlots.cxx.

282  {
283  return "EXAMPLEPLOTS";
284  }

Member Data Documentation

◆ m_config

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

Definition at line 64 of file ExamplePlots.h.

◆ m_hists

PlotManager top::ExamplePlots::m_hists
private

Easy access to histograms.

Definition at line 59 of file ExamplePlots.h.

◆ m_nominalHashValue

std::size_t top::ExamplePlots::m_nominalHashValue
private

Definition at line 62 of file ExamplePlots.h.

◆ m_sfRetriever

top::ScaleFactorRetriever* top::ExamplePlots::m_sfRetriever
private

Definition at line 65 of file ExamplePlots.h.

◆ toGeV

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

File units are MeV and normally people like plots in GeV.

Definition at line 56 of file ExamplePlots.h.


The documentation for this class was generated from the following files:
top::ExamplePlots::m_config
std::shared_ptr< top::TopConfig > m_config
Definition: ExamplePlots.h:64
SG::Accessor
Helper class to provide type-safe access to aux data.
Definition: Control/AthContainers/AthContainers/Accessor.h:66
top::ScaleFactorRetriever::tauSF
float tauSF(const top::Event &event, const top::topSFSyst SFSyst) const
: get the tauSF for all taus in event
Definition: ScaleFactorRetriever.cxx:1325
top::ScaleFactorRetriever::hasPileupSF
static bool hasPileupSF(const top::Event &event)
Definition: ScaleFactorRetriever.cxx:63
CP::SystematicSet
Class to wrap a set of SystematicVariations.
Definition: SystematicSet.h:31
M_PI
#define M_PI
Definition: ActiveFraction.h:11
top::ScaleFactorRetriever::leptonSF
float leptonSF(const top::Event &event, const top::topSFSyst SFSyst) const
Definition: ScaleFactorRetriever.cxx:85
compareGeometries.outputFile
string outputFile
Definition: compareGeometries.py:25
top::ScaleFactorRetriever::triggerSF
float triggerSF(const top::Event &event, const top::topSFSyst SFSyst) const
Definition: ScaleFactorRetriever.cxx:176
event
POOL::TEvent event(POOL::TEvent::kClassAccess)
lumiFormat.i
int i
Definition: lumiFormat.py:92
top::ExamplePlots::toGeV
static const double toGeV
File units are MeV and normally people like plots in GeV.
Definition: ExamplePlots.h:56
top::nominal
@ nominal
Definition: ScaleFactorRetriever.h:29
top::PlotManager::hist
TH1 * hist(const std::string &name) const
Recover an existing histogram, to fill it for example.
Definition: PlotManager.cxx:169
top::isSimulation
bool isSimulation(const top::Event &event)
Is this event MC simulation (True) or data (False)?
Definition: EventTools.cxx:52
TH1::Fill
int Fill(double)
Definition: rootspy.cxx:285
top::ScaleFactorRetriever::photonSF
float photonSF(const top::Event &event, const top::topSFSyst SFSyst) const
: get the photonSF for all photons in event
Definition: ScaleFactorRetriever.cxx:1411
top::ExamplePlots::name
std::string name() const override
Return the name for the cutflow table.
Definition: ExamplePlots.cxx:282
top::ExamplePlots::m_sfRetriever
top::ScaleFactorRetriever * m_sfRetriever
Definition: ExamplePlots.h:65
top::ScaleFactorRetriever::globalTriggerSF
float globalTriggerSF(const top::Event &event, const top::topSFSyst SFSyst) const
Definition: ScaleFactorRetriever.cxx:91
top::PlotManager::addHist
void addHist(const std::string &hname, const std::string &title, int bins, double start, double end) const
Add a 1D histogram to the output file.
Definition: PlotManager.cxx:60
top::ScaleFactorRetriever::pileupSF
static float pileupSF(const top::Event &event, int var=0)
Definition: ScaleFactorRetriever.cxx:68
config
std::vector< std::string > config
Definition: fbtTestBasics.cxx:72
top::ExamplePlots::m_nominalHashValue
std::size_t m_nominalHashValue
Definition: ExamplePlots.h:62
top::ExamplePlots::m_hists
PlotManager m_hists
Easy access to histograms.
Definition: ExamplePlots.h:59