ATLAS Offline Software
MuonScaleFactorCalculator.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3  */
4 
5 // $Id: MuonScaleFactorCalculator.cxx 805964 2017-06-05 19:27:16Z iconnell $
7 
8 #include <string>
9 #include <vector>
10 #include <set>
11 
13 #include "TopEvent/EventTools.h"
14 
16 #include "xAODMuon/MuonContainer.h"
17 
18 namespace top {
20  asg::AsgTool(name),
21  m_config(nullptr),
22  m_systNominal(CP::SystematicSet()),
23 
24  m_muonEfficiencyCorrectionsTool("MuonEfficiencyScaleFactorsTool"),
25  m_softmuonEfficiencyCorrectionsTool("SoftMuonEfficiencyScaleFactorsTool"),
26  m_muonEfficiencyCorrectionsToolLoose("MuonEfficiencyScaleFactorsToolLoose"),
27  m_muonEfficiencyCorrectionsToolIso("MuonEfficiencyScaleFactorsToolIso"),
28  m_muonEfficiencyCorrectionsToolLooseIso("MuonEfficiencyScaleFactorsToolLooseIso"),
29  m_muonEfficiencyCorrectionsToolTTVA("MuonEfficiencyScaleFactorsToolTTVA"),
30  m_muonEfficiencyCorrectionsToolBadMuonVeto("MuonEfficiencyScaleFactorsToolBadMuonVeto"),
31 
32  m_decor_triggerEff("SetMe"), m_decor_triggerEff_loose("SetMe"),
33  m_decor_triggerSF("SetMe"), m_decor_triggerSF_loose("SetMe"),
34  m_decor_idSF("SetMe"), m_decor_idSF_loose("SetMe"),
35  m_decor_isoSF("SetMe"), m_decor_isoSF_loose("SetMe"),
36  m_decor_TTVA("MU_SF_TTVA"),
37 
38  m_decor_softmuon_idSF("SetMe"),
39 
40  m_do_muon_isolation_SFs(true),
41  m_do_muon_isolation_SFs_loose(true),
42  // The systematics are defined here...
43  m_trig_sf_stat_UP("MUON_EFF_TrigStatUncertainty__1up"),
44  m_trig_sf_stat_DOWN("MUON_EFF_TrigStatUncertainty__1down"),
45  m_trig_sf_syst_UP("MUON_EFF_TrigSystUncertainty__1up"),
46  m_trig_sf_syst_DOWN("MUON_EFF_TrigSystUncertainty__1down"),
47 
48  m_reco_stat_UP("MUON_EFF_RECO_STAT__1up"),
49  m_reco_stat_DOWN("MUON_EFF_RECO_STAT__1down"),
50  m_reco_syst_UP("MUON_EFF_RECO_SYS__1up"),
51  m_reco_syst_DOWN("MUON_EFF_RECO_SYS__1down"),
52 
53  m_reco_bkg_fraction_UP("MUON_EFF_RECO_BKGFRACTION__1up"),
54  m_reco_bkg_fraction_DOWN("MUON_EFF_RECO_BKGFRACTION__1down"),
55  m_reco_fit_model_lowpt_UP("MUON_EFF_RECO_FITMODEL_LOWPT__1up"),
56  m_reco_fit_model_lowpt_DOWN("MUON_EFF_RECO_FITMODEL_LOWPT__1down"),
57  m_reco_lumi_uncert_UP("MUON_EFF_RECO_LUMIUNCERT__1up"),
58  m_reco_lumi_uncert_DOWN("MUON_EFF_RECO_LUMIUNCERT__1down"),
59  m_reco_matching_UP("MUON_EFF_RECO_MATCHING__1up"),
60  m_reco_matching_DOWN("MUON_EFF_RECO_MATCHING__1down"),
61  m_reco_matching_lowpt_UP("MUON_EFF_RECO_MATCHING_LOWPT__1up"),
62  m_reco_matching_lowpt_DOWN("MUON_EFF_RECO_MATCHING_LOWPT__1down"),
63  m_reco_mc_xsec_UP("MUON_EFF_RECO_MCXSEC__1up"),
64  m_reco_mc_xsec_DOWN("MUON_EFF_RECO_MCXSEC__1down"),
65  m_reco_pt_dependency_UP("MUON_EFF_RECO_PTDEPENDENCY__1up"),
66  m_reco_pt_dependency_DOWN("MUON_EFF_RECO_PTDEPENDENCY__1down"),
67  m_reco_qcd_template_UP("MUON_EFF_RECO_QCDTEMPLATE__1up"),
68  m_reco_qcd_template_DOWN("MUON_EFF_RECO_QCDTEMPLATE__1down"),
69  m_reco_supression_scale_UP("MUON_EFF_RECO_SUPRESSIONSCALE__1up"),
70  m_reco_supression_scale_DOWN("MUON_EFF_RECO_SUPRESSIONSCALE__1down"),
71  m_reco_truth_UP("MUON_EFF_RECO_TRUTH__1up"),
72  m_reco_truth_DOWN("MUON_EFF_RECO_TRUTH__1down"),
73  m_reco_truth_lowpt_UP("MUON_EFF_RECO_TRUTH_LOWPT__1up"),
74  m_reco_truth_lowpt_DOWN("MUON_EFF_RECO_TRUTH_LOWPT__1down"),
75  m_reco_cr1_UP("MUON_EFF_RECO_CR1__1up"),
76  m_reco_cr1_DOWN("MUON_EFF_RECO_CR1__1down"),
77  m_reco_cr2_UP("MUON_EFF_RECO_CR2__1up"),
78  m_reco_cr2_DOWN("MUON_EFF_RECO_CR2__1down"),
79  m_reco_cr3_UP("MUON_EFF_RECO_CR3__1up"),
80  m_reco_cr3_DOWN("MUON_EFF_RECO_CR3__1down"),
81  m_reco_higheta_probeip_UP("MUON_EFF_RECO_HIGHETA_PROBEIP__1up"),
82  m_reco_higheta_probeip_DOWN("MUON_EFF_RECO_HIGHETA_PROBEIP__1down"),
83  m_reco_higheta_probeiso_UP("MUON_EFF_RECO_HIGHETA_PROBEISO__1up"),
84  m_reco_higheta_probeiso_DOWN("MUON_EFF_RECO_HIGHETA_PROBEISO__1down"),
85  m_reco_tagpt_UP("MUON_EFF_RECO_TAGPT__1up"),
86  m_reco_tagpt_DOWN("MUON_EFF_RECO_TAGPT__1down"),
87  m_reco_extrapolation_UP("MUON_EFF_RECO_EXTRAPOLATION__1up"),
88  m_reco_extrapolation_DOWN("MUON_EFF_RECO_EXTRAPOLATION__1down"),
89  m_reco_extrapolation_lowpt_UP("MUON_EFF_RECO_EXTRAPOLATION_LOWPT__1up"),
90  m_reco_extrapolation_lowpt_DOWN("MUON_EFF_RECO_EXTRAPOLATION_LOWPT__1down"),
91 
92  m_reco_stat_lowpt_UP("MUON_EFF_RECO_STAT_LOWPT__1up"),
93  m_reco_stat_lowpt_DOWN("MUON_EFF_RECO_STAT_LOWPT__1down"),
94  m_reco_syst_lowpt_UP("MUON_EFF_RECO_SYS_LOWPT__1up"),
95  m_reco_syst_lowpt_DOWN("MUON_EFF_RECO_SYS_LOWPT__1down"),
96  m_reco_bad_muon_veto_UP("MUON_EFF_BADMUON_SYS__1up"),
97  m_reco_bad_muon_veto_DOWN("MUON_EFF_BADMUON_SYS__1down"),
98 
99  m_iso_stat_UP("MUON_EFF_ISO_STAT__1up"),
100  m_iso_stat_DOWN("MUON_EFF_ISO_STAT__1down"),
101  m_iso_syst_UP("MUON_EFF_ISO_SYS__1up"),
102  m_iso_syst_DOWN("MUON_EFF_ISO_SYS__1down"),
103 
104  m_iso_bkg_fraction_UP("MUON_EFF_ISO_BKGFRACTION__1up"),
105  m_iso_bkg_fraction_DOWN("MUON_EFF_ISO_BKGFRACTION__1down"),
106  m_iso_drmuj_UP("MUON_EFF_ISO_DRMUJ__1up"),
107  m_iso_drmuj_DOWN("MUON_EFF_ISO_DRMUJ__1down"),
108  m_iso_lumi_uncert_UP("MUON_EFF_ISO_LUMIUNCERT__1up"),
109  m_iso_lumi_uncert_DOWN("MUON_EFF_ISO_LUMIUNCERT__1down"),
110  m_iso_mc_xsec_UP("MUON_EFF_ISO_MCXSEC__1up"),
111  m_iso_mc_xsec_DOWN("MUON_EFF_ISO_MCXSEC__1down"),
112  m_iso_mllwindow_UP("MUON_EFF_ISO_MLLWINDOW__1up"),
113  m_iso_mllwindow_DOWN("MUON_EFF_ISO_MLLWINDOW__1down"),
114  m_iso_qcd_template_UP("MUON_EFF_ISO_QCDTEMPLATE__1up"),
115  m_iso_qcd_template_DOWN("MUON_EFF_ISO_QCDTEMPLATE__1down"),
116  m_iso_sherpa_powheg_UP("MUON_EFF_ISO_SHERPA_POWHEG__1up"),
117  m_iso_sherpa_powheg_DOWN("MUON_EFF_ISO_SHERPA_POWHEG__1down"),
118  m_iso_supression_scale_UP("MUON_EFF_ISO_SUPRESSIONSCALE__1up"),
119  m_iso_supression_scale_DOWN("MUON_EFF_ISO_SUPRESSIONSCALE__1down"),
120  m_iso_extrapolation_UP("MUON_EFF_ISO_EXTRAPOLATION__1up"),
121  m_iso_extrapolation_DOWN("MUON_EFF_ISO_EXTRAPOLATION__1down"),
122 
123  m_TTVA_stat_UP("MUON_EFF_TTVA_STAT__1up"),
124  m_TTVA_stat_DOWN("MUON_EFF_TTVA_STAT__1down"),
125  m_TTVA_syst_UP("MUON_EFF_TTVA_SYS__1up"),
126  m_TTVA_syst_DOWN("MUON_EFF_TTVA_SYS__1down"),
127 
128  m_TTVA_bkg_fraction_UP("MUON_EFF_TTVA_BKGFRACTION__1up"),
129  m_TTVA_bkg_fraction_DOWN("MUON_EFF_TTVA_BKGFRACTION__1down"),
130  m_TTVA_lumi_uncert_UP("MUON_EFF_TTVA_LUMIUNCERT__1up"),
131  m_TTVA_lumi_uncert_DOWN("MUON_EFF_TTVA_LUMIUNCERT__1down"),
132  m_TTVA_mc_xsec_UP("MUON_EFF_TTVA_MCXSEC__1up"),
133  m_TTVA_mc_xsec_DOWN("MUON_EFF_TTVA_MCXSEC__1down"),
134  m_TTVA_qcd_template_UP("MUON_EFF_TTVA_QCDTEMPLATE__1up"),
135  m_TTVA_qcd_template_DOWN("MUON_EFF_TTVA_QCDTEMPLATE__1down"),
136  m_TTVA_supression_scale_UP("MUON_EFF_TTVA_SUPRESSIONSCALE__1up"),
137  m_TTVA_supression_scale_DOWN("MUON_EFF_TTVA_SUPRESSIONSCALE__1down"),
138  m_TTVA_extrapolation_UP("MUON_EFF_TTVA_EXTRAPOLATION__1up"),
139  m_TTVA_extrapolation_DOWN("MUON_EFF_TTVA_EXTRAPOLATION__1down"){
140  declareProperty("config", m_config);
141  }
142 
144  ATH_MSG_INFO(" top::MuonScaleFactorCalculator initialize");
145 
146  m_muonTriggerScaleFactors_R21 = ToolHandle<CP::IMuonTriggerScaleFactors>("MuonTriggerScaleFactors_R21");
148  ToolHandle<CP::IMuonTriggerScaleFactors>("MuonTriggerScaleFactorsLoose_R21");
149 
150  std::set<std::string> implemented_systematics;
151  if (m_config->muonBreakDownSystematics()) {
152  implemented_systematics = {
153  "MUON_EFF_ISO_STAT",
154  "MUON_EFF_ISO_BKGFRACTION",
155  "MUON_EFF_ISO_DRMUJ",
156  "MUON_EFF_ISO_LUMIUNCERT",
157  "MUON_EFF_ISO_MCXSEC",
158  "MUON_EFF_ISO_MLLWINDOW",
159  "MUON_EFF_ISO_QCDTEMPLATE",
160  "MUON_EFF_ISO_SHERPA_POWHEG",
161  "MUON_EFF_ISO_SUPRESSIONSCALE",
162  "MUON_EFF_ISO_EXTRAPOLATION",
163  "MUON_EFF_RECO_BKGFRACTION",
164  "MUON_EFF_RECO_FITMODEL_LOWPT",
165  "MUON_EFF_RECO_LUMIUNCERT",
166  "MUON_EFF_RECO_MATCHING",
167  "MUON_EFF_RECO_MATCHING_LOWPT",
168  "MUON_EFF_RECO_MCXSEC",
169  "MUON_EFF_RECO_PTDEPENDENCY",
170  "MUON_EFF_RECO_QCDTEMPLATE",
171  "MUON_EFF_RECO_STAT",
172  "MUON_EFF_RECO_STAT_LOWPT",
173  "MUON_EFF_RECO_SUPRESSIONSCALE",
174  "MUON_EFF_RECO_TRUTH",
175  "MUON_EFF_RECO_TRUTH_LOWPT",
176  "MUON_EFF_RECO_CR1",
177  "MUON_EFF_RECO_CR2",
178  "MUON_EFF_RECO_CR3",
179  "MUON_EFF_RECO_HIGHETA_PROBEIP",
180  "MUON_EFF_RECO_HIGHETA_PROBEISO",
181  "MUON_EFF_RECO_TAGPT",
182  "MUON_EFF_RECO_EXTRAPOLATION",
183  "MUON_EFF_TTVA_BKGFRACTION",
184  "MUON_EFF_TTVA_LUMIUNCERT",
185  "MUON_EFF_TTVA_MCXSEC",
186  "MUON_EFF_TTVA_QCDTEMPLATE",
187  "MUON_EFF_TTVA_STAT",
188  "MUON_EFF_TTVA_SUPRESSIONSCALE",
189  "MUON_EFF_TTVA_EXTRAPOLATION",
190  "MUON_EFF_TrigStatUncertainty",
191  "MUON_EFF_TrigSystUncertainty",
192  "MUON_EFF_RECO_EXTRAPOLATION_LOWPT",
193  };
194  if (m_config->muonQuality() == "HighPt" || m_config->muonQualityLoose() == "HighPt") {
195  implemented_systematics.insert("MUON_EFF_BADMUON_PTDEPENDENCY");
196  m_reco_bad_muon_veto_UP = CP::SystematicSet("MUON_EFF_BADMUON_PTDEPENDENCY__1up");
197  m_reco_bad_muon_veto_DOWN = CP::SystematicSet("MUON_EFF_BADMUON_PTDEPENDENCY__1down");
198  }
199  } else {
200  implemented_systematics = {
201  "MUON_EFF_RECO_STAT",
202  "MUON_EFF_RECO_STAT_LOWPT",
203  "MUON_EFF_RECO_SYS",
204  "MUON_EFF_RECO_SYS_LOWPT",
205  "MUON_EFF_TrigStatUncertainty",
206  "MUON_EFF_TrigSystUncertainty",
207  "MUON_EFF_ISO_STAT",
208  "MUON_EFF_ISO_SYS",
209  "MUON_EFF_TTVA_STAT",
210  "MUON_EFF_TTVA_SYS"
211  };
212  if (m_config->muonQuality() == "HighPt" || m_config->muonQualityLoose() == "HighPt") {
213  implemented_systematics.insert("MUON_EFF_BADMUON_SYS");
214  }
215  }
216 
217  std::set<std::string> recommended_systematics;
218 
219  // For R21, a single tool
221  recommended_systematics);
223  recommended_systematics);
224 
226  recommended_systematics);
227 
228  if (m_config->useSoftMuons()) {
230  recommended_systematics);
231  }
232 
234  recommended_systematics);
235 
236  if (m_config->muonQuality() == "HighPt" || m_config->muonQualityLoose() == "HighPt") {
238  recommended_systematics);
239  }
240 
241  if (asg::ToolStore::contains<CP::IMuonEfficiencyScaleFactors>("MuonEfficiencyScaleFactorsToolIso")) {
243  recommended_systematics);
244  } else {
245  m_do_muon_isolation_SFs = false;
246  }
247  if (asg::ToolStore::contains<CP::IMuonEfficiencyScaleFactors>("MuonEfficiencyScaleFactorsToolLooseIso")) {
249  recommended_systematics);
250  } else {
252  }
253 
255  if (m_config->muonIsolationSF() != "None" && !m_do_muon_isolation_SFs) {
256  ATH_MSG_WARNING("No muon isolation SFs available."
257  " You can run with MuonIsolation set to"
258  " None if you don't want isolation.");
259  return StatusCode::FAILURE;
260  }
262  if (m_config->muonIsolationSFLoose() != "None" && !m_do_muon_isolation_SFs_loose) {
263  ATH_MSG_WARNING("No loose muon isolation SFs available."
264  " You can run with MuonIsolationLoose set to"
265  " None if you don't want isolation.");
266  return StatusCode::FAILURE;
267  }
268 
270  recommended_systematics);
271 
272  top::check(this->checkSystematicsImplemented(recommended_systematics,
273  implemented_systematics),
274  "There are differences between the recommended and implemented"
275  " muon SF systematic uncertainties");
276 
277 
278  m_decor_triggerEff = "MU_EFF_Trigger_" + m_config->muonQuality();
279  m_decor_triggerEff_loose = "MU_LOOSE_EFF_Trigger_" + m_config->muonQualityLoose();
280  m_decor_triggerSF = "MU_SF_Trigger_" + m_config->muonQuality();
281  m_decor_triggerSF_loose = "MU_LOOSE_SF_Trigger_" + m_config->muonQualityLoose();
282  m_decor_idSF = "MU_SF_ID_" + m_config->muonQuality();
283  m_decor_idSF_loose = "MU_LOOSE_SF_ID_" + m_config->muonQualityLoose();
284  m_decor_isoSF = "MU_SF_Isol_" + m_config->muonIsolationSF();
285  m_decor_isoSF_loose = "MU_LOOSE_SF_Isol_" + m_config->muonIsolationSFLoose();
286 
287  m_decor_softmuon_idSF = "SOFTMU_SF_ID_" + m_config->softmuonQuality();
288 
289  return StatusCode::SUCCESS;
290  }
291 
293  /*************************************************************
294  *
295  * The muon trigger SF tool wants a random run number,
296  * which we can get from the PRW tool.
297  *
298  *************************************************************/
299 
300  if (m_config->isMC()) {
301  const xAOD::EventInfo* eventInfo(nullptr);
302  top::check(evtStore()->retrieve(eventInfo, m_config->sgKeyEventInfo()),
303  "Failed to retrieve EventInfo");
304 
305  // This is the default value in the MuonTriggerScaleFactors tool
306  unsigned int runNumber = 267639;
307  if (eventInfo->isAvailable<unsigned int>("RandomRunNumber")) runNumber = eventInfo->auxdataConst<unsigned int>(
308  "RandomRunNumber");
309  else ATH_MSG_WARNING("Event has not been decorated with RandomRunNumber");
310 
311  // Keep an eye here for trigger strings
315 
316  if (runNumber == 0) {
317  m_muon_trigger_sf_config = "HLT_mu26_ivarmedium_OR_HLT_mu50";
318  }
319  // 2015
320  else if (runNumber > 0 && runNumber <= 284484) {
321  m_muon_trigger_sf_config = "HLT_mu20_iloose_L1MU15_OR_HLT_mu40";
322  }
323  // 2016 (set to a large value but split as we may need to have strings for 2016 -> certain 2017 run)
324  else if (runNumber > 284484 && runNumber < 324320) {
325  m_muon_trigger_sf_config = "HLT_mu26_ivarmedium_OR_HLT_mu50";
326  }
327  // 2017+18
328  else if (runNumber >= 324320 && runNumber < 364485) {
329  m_muon_trigger_sf_config = "HLT_mu26_ivarmedium_OR_HLT_mu50";
330  } else if (runNumber >= 410000) { // 2022+
331  m_muon_trigger_sf_config = "HLT_mu24_ivarmedium_L1MU14FCH_OR_HLT_mu50_L1MU14FCH";
332  }
333 
334  if (m_config->muonForceTrigger() != " "){
335  m_muon_trigger_sf_config = m_config->muonForceTrigger();
336  }
337 
338  ATH_MSG_DEBUG("Muon trigger scale factor config is : " + m_muon_trigger_sf_config);
339  ATH_MSG_DEBUG("RunNumber (0 < 2015 < 284484 < 2016 < 324320 < 2017) : ");
341  }
342 
344  for (auto currentSystematic : *m_config->systSgKeyMapMuons()) {
345  const xAOD::MuonContainer* muons(nullptr);
346  top::check(evtStore()->retrieve(muons, currentSystematic.second),
347  "Failed to retrieve muons");
348 
350  for (auto muonPtr : *muons) {
352  bool passSelection(false);
353  if (muonPtr->isAvailable<char>("passPreORSelection")) {
354  if (muonPtr->auxdataConst<char>("passPreORSelection") == 1) {
355  passSelection = true;
356  }
357  }
358  if (muonPtr->isAvailable<char>("passPreORSelectionLoose")) {
359  if (muonPtr->auxdataConst<char>("passPreORSelectionLoose") == 1) {
360  passSelection = true;
361  }
362  }
363 
364  if (!passSelection) continue;
365 
366  // Tell the SF tools to use the nominal systematic
367  // To be extra sure we do this when we try and get a SF too!
373  if (m_config->muonQuality() == "HighPt" || m_config->muonQualityLoose() == "HighPt") {
375  }
376 
377  //-- Only do isolation if we actually get the tools --//
380  m_systNominal);
381 
382  // The nominal SFs/efficiencies.
383  // Include are::
384  // 1. ID SF (no reco Eff since 2.4.22)
385  // 2. Isolation SF
386  // 3. TTVA SF
387  // 4. Trigger SF and efficiency
388 
389  // Reco efficiency and ID SF decorations
391  static SG::AuxElement::Decorator<float> id_sf_loose_decor(m_decor_idSF_loose);
392 
394  m_systNominal, *muonPtr,
395  id_sf_decor);
397  m_systNominal, *muonPtr,
398  id_sf_loose_decor);
399 
400  // Isolation SF decorations. If we aren't using isolation for
401  // either tight or loose muons then decorate anyway with 1.0.
402  static SG::AuxElement::Decorator<float> iso_sf_decor(m_decor_isoSF);
403  static SG::AuxElement::Decorator<float> iso_sf_loose_decor(m_decor_isoSF_loose);
404 
407  m_systNominal, *muonPtr,
408  iso_sf_decor);
409  } else {
410  iso_sf_decor(*muonPtr) = 1.0;
411  }
414  m_systNominal, *muonPtr,
415  iso_sf_loose_decor);
416  } else {
417  iso_sf_loose_decor(*muonPtr) = 1.0;
418  }
419 
420  // TTVA decoration
423  m_systNominal, *muonPtr, TTVA_decor);
424 
425  /**********************************************************************
426  * Muon Trigger Scale Factors
427  * TOM : The MCP tool takes a container of muons. The examples seem to
428  * suggest these should somehow be selected muons but it isn't clear
429  * to me what level of selection should be applied.
430  *
431  * *** To be followed up with MCP people by Jay ***
432  *
433  * TOM : We trick it by creating a view container
434  * with a single muon in.
435  * NOTE: This also happens later on for the systematics so if we ever
436  * get a nice function make sure we change it there too!
437  *
438  **********************************************************************/
439 
441  trigger_SF_muon.push_back(muonPtr);
442 
444  static SG::AuxElement::Decorator<float> trig_sf_loose_decor(m_decor_triggerSF_loose);
446  static SG::AuxElement::Decorator<float> trig_eff_loose_decor(m_decor_triggerEff_loose);
447 
449  m_systNominal, trigger_SF_muon,
450  trig_sf_decor, trig_eff_decor);
452  m_systNominal, trigger_SF_muon,
453  trig_sf_loose_decor, trig_eff_loose_decor);
454 
455  // If we are running on the nominal tree, then do the
456  // SF systematic variations too.
457  // Otherwise just move onto the next muon...
458  if (currentSystematic.first != m_config->nominalHashValue()) continue;
459 
460  // Trigger systematics
461  this->decorateTriggerSystematics(trigger_SF_muon);
462  // ID systematics
463  this->decorateIDSFandRecoEffSystematics(*muonPtr);
464  // Isolation systematics
465  this->decorateIsolationSystematics(*muonPtr);
466  // TTVA muon SFs- track-to-vertex association
467  this->decorateTTVASystematics(*muonPtr);
468  }
469  }
470 
472  for (const auto& currentSystematic : *m_config->systSgKeyMapSoftMuons()) {
473  const xAOD::MuonContainer* softmuons(nullptr);
474  top::check(evtStore()->retrieve(softmuons, currentSystematic.second),
475  "Failed to retrieve softmuons");
476 
478  for (const xAOD::Muon* muonPtr : *softmuons) {
480  bool passSelection(false);
481  if (muonPtr->isAvailable<char>("passPreORSelection")) {
482  if (muonPtr->auxdataConst<char>("passPreORSelection") == 1) {
483  passSelection = true;
484  }
485  }
486 
487  if (!passSelection) continue;
488 
489  // Tell the SF tools to use the nominal systematic
490  // To be extra sure we do this when we try and get a SF too!
492 
493  // Reco efficiency and ID SF decorations
495 
497  m_systNominal, *muonPtr,
498  id_sf_decor);
499 
500  // If we are running on the nominal tree, then do the
501  // SF systematic variations too.
502  // Otherwise just move onto the next muon...
503  if (currentSystematic.first != m_config->nominalHashValue()) continue;
504 
505  // ID systematics
507  }//end of loop on soft muons
508  }
509 
510  return StatusCode::SUCCESS;
511  }
512 
513  // End of public functions
514 
515  template<typename T>
517  std::set<std::string>& recommended_systematics) {
518  top::check(tool.retrieve(), "Failed to retrieve " + tool.name());
519  // Add all recommended systematics to set
520  ATH_MSG_INFO("retrieved systematics from tool "<<tool.name());
521  for (auto s : tool->recommendedSystematics().getBaseNames())
522  {
523  ATH_MSG_INFO("---> "<<std::string(s));
524  recommended_systematics.insert(std::string(s));
525  }
526  }
527 
528  template<typename T>
530  const CP::SystematicSet& systematic) {
531  top::check(tool->applySystematicVariation(systematic),
532  "Failed to set " + tool.name()
533  + " to " + (systematic.empty()
534  ? "Nominal" : systematic.name()));
535  }
536 
537  StatusCode MuonScaleFactorCalculator::checkSystematicsImplemented(const std::set<std::string>& recommended,
538  const std::set<std::string>& implemented) {
539  std::vector<std::string> different_systematics = {};
540  std::set_difference(recommended.begin(),
541  recommended.end(),
542  implemented.begin(),
543  implemented.end(),
544  std::back_inserter(different_systematics));
545  if (different_systematics.size()) {
546  ATH_MSG_WARNING("WE ARE EXPECTING THE FOLLOWING SYSTEMATICS:");
547  for (auto syst : recommended)
548  ATH_MSG_WARNING("\t" << syst);
549  ATH_MSG_WARNING("WE HAVE THE FOLLOWING SYSTEMATICS:");
550  for (auto syst : implemented)
551  ATH_MSG_WARNING("\t" << syst);
552  ATH_MSG_WARNING("WE ARE MISSING THE FOLLOWING SYSTEMATICS:");
553  for (const auto& syst : different_systematics)
554  ATH_MSG_WARNING("\t" << syst);
555  return StatusCode::FAILURE;
556  }
557  return StatusCode::SUCCESS;
558  }
559 
560  void MuonScaleFactorCalculator::decorateTriggerEfficiency(ToolHandle<CP::IMuonTriggerScaleFactors>& tool,
561  const xAOD::Muon& muon,
562  const SG::AuxElement::Decorator<float>& decor) {
563  double trigEff = 1.0;
564 
565  top::check(tool->getTriggerEfficiency(muon, trigEff,
567  !m_config->isMC()),
568  "Failed to get muon trigger efficiency");
569  decor(muon) = trigEff;
570  }
571 
572  void MuonScaleFactorCalculator::decorateTriggerSF(ToolHandle<CP::IMuonTriggerScaleFactors>& tool,
573  const ConstDataVector<xAOD::MuonContainer>& muon_cont,
574  const SG::AuxElement::Decorator<float>& decor) {
575  double trigSF = 1.0;
576 
577  top::check(tool->getTriggerScaleFactor(*muon_cont.asDataVector(), trigSF,
579  "Failed to get muon trigger scale factor");
580  decor(*muon_cont[0]) = trigSF;
581  }
582 
583  void MuonScaleFactorCalculator::decorateTrigSFandEff(ToolHandle<CP::IMuonTriggerScaleFactors>& tool,
584  const CP::SystematicSet& systematic,
585  const ConstDataVector<xAOD::MuonContainer>& muon_cont,
586  const SG::AuxElement::Decorator<float>& sf_decor,
587  const SG::AuxElement::Decorator<float>& eff_decor) {
588  // Set tool to systematic
589  this->applySystematicVariation(tool, systematic);
590  // Decorate with Trigger SF
591  this->decorateTriggerSF(tool, muon_cont, sf_decor);
592  // Decorate with Trigger Efficiency
593  this->decorateTriggerEfficiency(tool, *muon_cont[0], eff_decor);
594  }
595 
597  {
598  // Perform all trigger systematic variations, for loose and tight,
599  // (stat/syst up/down)
600  static SG::AuxElement::Decorator<float> trig_eff_decor_stat_up(m_decor_triggerEff + "_STAT_UP");
601  static SG::AuxElement::Decorator<float> trig_eff_loose_decor_stat_up(m_decor_triggerEff_loose + "_STAT_UP");
602  static SG::AuxElement::Decorator<float> trig_sf_decor_stat_up(m_decor_triggerSF + "_STAT_UP");
603  static SG::AuxElement::Decorator<float> trig_sf_loose_decor_stat_up(m_decor_triggerSF_loose + "_STAT_UP");
604 
605  static SG::AuxElement::Decorator<float> trig_eff_decor_stat_down(m_decor_triggerEff + "_STAT_DOWN");
606  static SG::AuxElement::Decorator<float> trig_eff_loose_decor_stat_down(m_decor_triggerEff_loose + "_STAT_DOWN");
607  static SG::AuxElement::Decorator<float> trig_sf_decor_stat_down(m_decor_triggerSF + "_STAT_DOWN");
608  static SG::AuxElement::Decorator<float> trig_sf_loose_decor_stat_down(m_decor_triggerSF_loose + "_STAT_DOWN");
609 
610  static SG::AuxElement::Decorator<float> trig_eff_decor_syst_up(m_decor_triggerEff + "_SYST_UP");
611  static SG::AuxElement::Decorator<float> trig_eff_loose_decor_syst_up(m_decor_triggerEff_loose + "_SYST_UP");
612  static SG::AuxElement::Decorator<float> trig_sf_decor_syst_up(m_decor_triggerSF + "_SYST_UP");
613  static SG::AuxElement::Decorator<float> trig_sf_loose_decor_syst_up(m_decor_triggerSF_loose + "_SYST_UP");
614 
615  static SG::AuxElement::Decorator<float> trig_eff_decor_syst_down(m_decor_triggerEff + "_SYST_DOWN");
616  static SG::AuxElement::Decorator<float> trig_eff_loose_decor_syst_down(m_decor_triggerEff_loose + "_SYST_DOWN");
617  static SG::AuxElement::Decorator<float> trig_sf_decor_syst_down(m_decor_triggerSF + "_SYST_DOWN");
618  static SG::AuxElement::Decorator<float> trig_sf_loose_decor_syst_down(m_decor_triggerSF_loose + "_SYST_DOWN");
619 
620  // Trigger variations
621  //
622  // Stat UP
624  m_trig_sf_stat_UP, trigger_SF_muon,
625  trig_sf_decor_stat_up,
626  trig_eff_decor_stat_up);
627 
629  m_trig_sf_stat_UP, trigger_SF_muon,
630  trig_sf_loose_decor_stat_up,
631  trig_eff_loose_decor_stat_up);
632 
633  // Stat DOWN
635  m_trig_sf_stat_DOWN, trigger_SF_muon,
636  trig_sf_decor_stat_down,
637  trig_eff_decor_stat_down);
638 
640  m_trig_sf_stat_DOWN, trigger_SF_muon,
641  trig_sf_loose_decor_stat_down,
642  trig_eff_loose_decor_stat_down);
643 
644  // Syst UP
646  m_trig_sf_syst_UP, trigger_SF_muon,
647  trig_sf_decor_syst_up,
648  trig_eff_decor_syst_up);
649 
651  m_trig_sf_syst_UP, trigger_SF_muon,
652  trig_sf_loose_decor_syst_up,
653  trig_eff_loose_decor_syst_up);
654 
655  // Syst DOWN
657  m_trig_sf_syst_DOWN, trigger_SF_muon,
658  trig_sf_decor_syst_down,
659  trig_eff_decor_syst_down);
660 
662  m_trig_sf_syst_DOWN, trigger_SF_muon,
663  trig_sf_loose_decor_syst_down,
664  trig_eff_loose_decor_syst_down);
665  }
666 
667  void MuonScaleFactorCalculator::decorateEfficiencySF(ToolHandle<CP::IMuonEfficiencyScaleFactors>& tool,
668  const CP::SystematicSet& systematic,
669  const xAOD::Muon& muon,
670  const SG::AuxElement::Decorator<float>& decor) {
671  // 1. Set tool to systematic
672  this->applySystematicVariation(tool, systematic);
673 
674  float efficiency_SF = 1.0;
675  // 2. Decorate muon with efficiency SF
676  top::check(tool->getEfficiencyScaleFactor(muon, efficiency_SF),
677  "Failed to get " + tool.name()
678  + " efficiency SF for " + (systematic.empty()
679  ? "Nominal" : systematic.name()));
680  decor(muon) = efficiency_SF;
681  }
682 
684  // Decorate 'tight' isolation SFs
685  static SG::AuxElement::Decorator<float> iso_sf_decor_stat_up(m_decor_isoSF + "_STAT_UP");
686  static SG::AuxElement::Decorator<float> iso_sf_decor_stat_down(m_decor_isoSF + "_STAT_DOWN");
687  static SG::AuxElement::Decorator<float> iso_sf_decor_syst_up(m_decor_isoSF + "_SYST_UP");
688  static SG::AuxElement::Decorator<float> iso_sf_decor_syst_down(m_decor_isoSF + "_SYST_DOWN");
689 
690  // Decorate 'loose' isolation SFs
691  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_stat_up(m_decor_isoSF_loose + "_STAT_UP");
692  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_stat_down(m_decor_isoSF_loose + "_STAT_DOWN");
693  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_syst_up(m_decor_isoSF_loose + "_SYST_UP");
694  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_syst_down(m_decor_isoSF_loose + "_SYST_DOWN");
695 
696  //breakdown
697  static SG::AuxElement::Decorator<float> iso_sf_decor_bkg_fraction_up(m_decor_isoSF + "_BKG_FRACTION_UP");
698  static SG::AuxElement::Decorator<float> iso_sf_decor_bkg_fraction_down(m_decor_isoSF + "_BKG_FRACTION_DOWN");
699  static SG::AuxElement::Decorator<float> iso_sf_decor_drmuj_up(m_decor_isoSF + "_DRMUJ_UP");
700  static SG::AuxElement::Decorator<float> iso_sf_decor_drmuj_down(m_decor_isoSF + "_DRMUJ_DOWN");
701  static SG::AuxElement::Decorator<float> iso_sf_decor_lumi_uncert_up(m_decor_isoSF + "_LUMI_UNCERT_UP");
702  static SG::AuxElement::Decorator<float> iso_sf_decor_lumi_uncert_down(m_decor_isoSF + "_LUMI_UNCERT_DOWN");
703  static SG::AuxElement::Decorator<float> iso_sf_decor_mc_xsec_up(m_decor_isoSF + "_MC_XSEC_UP");
704  static SG::AuxElement::Decorator<float> iso_sf_decor_mc_xsec_down(m_decor_isoSF + "_MC_XSEC_DOWN");
705  static SG::AuxElement::Decorator<float> iso_sf_decor_mllwindow_up(m_decor_isoSF + "_MLLWINDOW_UP");
706  static SG::AuxElement::Decorator<float> iso_sf_decor_mllwindow_down(m_decor_isoSF + "_MLLWINDOW_DOWN");
707  static SG::AuxElement::Decorator<float> iso_sf_decor_qcd_template_up(m_decor_isoSF + "_QCD_TEMPLATE_UP");
708  static SG::AuxElement::Decorator<float> iso_sf_decor_qcd_template_down(m_decor_isoSF + "_QCD_TEMPLATE_DOWN");
709  static SG::AuxElement::Decorator<float> iso_sf_decor_sherpa_powheg_up(m_decor_isoSF + "_SHERPA_POWHEG_UP");
710  static SG::AuxElement::Decorator<float> iso_sf_decor_sherpa_powheg_down(m_decor_isoSF + "_SHERPA_POWHEG_DOWN");
711  static SG::AuxElement::Decorator<float> iso_sf_decor_supression_scale_up(m_decor_isoSF + "_SUPRESSION_SCALE_UP");
712  static SG::AuxElement::Decorator<float> iso_sf_decor_supression_scale_down(m_decor_isoSF + "_SUPRESSION_SCALE_DOWN");
713  static SG::AuxElement::Decorator<float> iso_sf_decor_extrapolation_up(m_decor_isoSF + "_EXTRAPOLATION_UP");
714  static SG::AuxElement::Decorator<float> iso_sf_decor_extrapolation_down(m_decor_isoSF + "_EXTRAPOLATION_DOWN");
715 
716  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_bkg_fraction_up(m_decor_isoSF_loose + "_BKG_FRACTION_UP");
717  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_bkg_fraction_down(m_decor_isoSF_loose + "_BKG_FRACTION_DOWN");
718  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_drmuj_up(m_decor_isoSF_loose + "_DRMUJ_UP");
719  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_drmuj_down(m_decor_isoSF_loose + "_DRMUJ_DOWN");
720  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_lumi_uncert_up(m_decor_isoSF_loose + "_LUMI_UNCERT_UP");
721  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_lumi_uncert_down(m_decor_isoSF_loose + "_LUMI_UNCERT_DOWN");
722  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_mc_xsec_up(m_decor_isoSF_loose + "_MC_XSEC_UP");
723  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_mc_xsec_down(m_decor_isoSF_loose + "_MC_XSEC_DOWN");
724  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_mllwindow_up(m_decor_isoSF_loose + "_MLLWINDOW_UP");
725  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_mllwindow_down(m_decor_isoSF_loose + "_MLLWINDOW_DOWN");
726  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_qcd_template_up(m_decor_isoSF_loose + "_QCD_TEMPLATE_UP");
727  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_qcd_template_down(m_decor_isoSF_loose + "_QCD_TEMPLATE_DOWN");
728  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_sherpa_powheg_up(m_decor_isoSF_loose + "_SHERPA_POWHEG_UP");
729  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_sherpa_powheg_down(m_decor_isoSF_loose + "_SHERPA_POWHEG_DOWN");
730  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_supression_scale_up(m_decor_isoSF_loose + "_SUPRESSION_SCALE_UP");
731  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_supression_scale_down(m_decor_isoSF_loose + "_SUPRESSION_SCALE_DOWN");
732  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_extrapolation_up(m_decor_isoSF_loose + "_EXTRAPOLATION_UP");
733  static SG::AuxElement::Decorator<float> iso_sf_loose_decor_extrapolation_down(m_decor_isoSF_loose + "_EXTRAPOLATION_DOWN");
734 
735 
737 
740  m_iso_stat_UP, muon,
741  iso_sf_decor_stat_up);
744  m_iso_stat_DOWN, muon,
745  iso_sf_decor_stat_down);
746 
747  if (m_config->muonBreakDownSystematics())
748  {
749  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolIso,m_iso_bkg_fraction_UP,muon,iso_sf_decor_bkg_fraction_up);
750  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolIso,m_iso_bkg_fraction_DOWN,muon,iso_sf_decor_bkg_fraction_down);
751 
754 
755  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolIso,m_iso_lumi_uncert_UP,muon,iso_sf_decor_lumi_uncert_up);
756  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolIso,m_iso_lumi_uncert_DOWN,muon,iso_sf_decor_lumi_uncert_down);
757 
759  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolIso,m_iso_mc_xsec_DOWN,muon,iso_sf_decor_mc_xsec_down);
760 
761  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolIso,m_iso_mllwindow_UP,muon,iso_sf_decor_mllwindow_up);
762  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolIso,m_iso_mllwindow_DOWN,muon,iso_sf_decor_mllwindow_down);
763 
764  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolIso,m_iso_qcd_template_UP,muon,iso_sf_decor_qcd_template_up);
765  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolIso,m_iso_qcd_template_DOWN,muon,iso_sf_decor_qcd_template_down);
766 
767  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolIso,m_iso_sherpa_powheg_UP,muon,iso_sf_decor_sherpa_powheg_up);
768  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolIso,m_iso_sherpa_powheg_DOWN,muon,iso_sf_decor_sherpa_powheg_down);
769 
770  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolIso,m_iso_supression_scale_UP,muon,iso_sf_decor_supression_scale_up);
771  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolIso,m_iso_supression_scale_DOWN,muon,iso_sf_decor_supression_scale_down);
772 
773  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolIso,m_iso_extrapolation_UP,muon,iso_sf_decor_extrapolation_up);
774  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolIso,m_iso_extrapolation_DOWN,muon,iso_sf_decor_extrapolation_down);
775  }
776  else
777  {
780  m_iso_syst_UP, muon,
781  iso_sf_decor_syst_up);
784  m_iso_syst_DOWN, muon,
785  iso_sf_decor_syst_down);
786  }
787 
788 
789  } else {
790  // If we aren't using muon isolation then still
791  // decorate with isolation SFs of 1.0
792  iso_sf_decor_stat_up(muon) = 1.0;
793  iso_sf_decor_stat_down(muon) = 1.0;
794  iso_sf_decor_syst_up(muon) = 1.0;
795  iso_sf_decor_syst_down(muon) = 1.0;
796  }
797 
801  m_iso_stat_UP, muon,
802  iso_sf_loose_decor_stat_up);
805  m_iso_stat_DOWN, muon,
806  iso_sf_loose_decor_stat_down);
807 
808  if (m_config->muonBreakDownSystematics())
809  {
810  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolLooseIso,m_iso_bkg_fraction_UP,muon,iso_sf_loose_decor_bkg_fraction_up);
811  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolLooseIso,m_iso_bkg_fraction_DOWN,muon,iso_sf_loose_decor_bkg_fraction_down);
812 
813  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolLooseIso,m_iso_drmuj_UP,muon,iso_sf_loose_decor_drmuj_up);
814  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolLooseIso,m_iso_drmuj_DOWN,muon,iso_sf_loose_decor_drmuj_down);
815 
816  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolLooseIso,m_iso_lumi_uncert_UP,muon,iso_sf_loose_decor_lumi_uncert_up);
817  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolLooseIso,m_iso_lumi_uncert_DOWN,muon,iso_sf_loose_decor_lumi_uncert_down);
818 
819  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolLooseIso,m_iso_mc_xsec_UP,muon,iso_sf_loose_decor_mc_xsec_up);
820  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolLooseIso,m_iso_mc_xsec_DOWN,muon,iso_sf_loose_decor_mc_xsec_down);
821 
822  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolLooseIso,m_iso_mllwindow_UP,muon,iso_sf_loose_decor_mllwindow_up);
823  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolLooseIso,m_iso_mllwindow_DOWN,muon,iso_sf_loose_decor_mllwindow_down);
824 
825  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolLooseIso,m_iso_qcd_template_UP,muon,iso_sf_loose_decor_qcd_template_up);
826  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolLooseIso,m_iso_qcd_template_DOWN,muon,iso_sf_loose_decor_qcd_template_down);
827 
828  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolLooseIso,m_iso_sherpa_powheg_UP,muon,iso_sf_loose_decor_sherpa_powheg_up);
829  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolLooseIso,m_iso_sherpa_powheg_DOWN,muon,iso_sf_loose_decor_sherpa_powheg_down);
830 
831  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolLooseIso,m_iso_supression_scale_UP,muon,iso_sf_loose_decor_supression_scale_up);
832  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolLooseIso,m_iso_supression_scale_DOWN,muon,iso_sf_loose_decor_supression_scale_down);
833 
834  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolLooseIso,m_iso_extrapolation_UP,muon,iso_sf_loose_decor_extrapolation_up);
835  this->decorateEfficiencySF(m_muonEfficiencyCorrectionsToolLooseIso,m_iso_extrapolation_DOWN,muon,iso_sf_loose_decor_extrapolation_down);
836  }
837  else
838  {
841  m_iso_syst_UP, muon,
842  iso_sf_loose_decor_syst_up);
845  m_iso_syst_DOWN, muon,
846  iso_sf_loose_decor_syst_down);
847  }
848  } else {
849  // If we aren't using muon isolation then still
850  // decorate with isolation SFs of 1.0
851  iso_sf_loose_decor_stat_up(muon) = 1.0;
852  iso_sf_loose_decor_stat_down(muon) = 1.0;
853  iso_sf_loose_decor_syst_up(muon) = 1.0;
854  iso_sf_loose_decor_syst_down(muon) = 1.0;
855  }
856  }
857 
859  static SG::AuxElement::Decorator<float> TTVA_decor_stat_up(m_decor_TTVA + "_STAT_UP");
860  static SG::AuxElement::Decorator<float> TTVA_decor_stat_down(m_decor_TTVA + "_STAT_DOWN");
861  static SG::AuxElement::Decorator<float> TTVA_decor_syst_up(m_decor_TTVA + "_SYST_UP");
862  static SG::AuxElement::Decorator<float> TTVA_decor_syst_down(m_decor_TTVA + "_SYST_DOWN");
863  static SG::AuxElement::Decorator<float> TTVA_decor_lumi_uncert_up(m_decor_TTVA + "_LUMI_UNCERT_UP");
864  static SG::AuxElement::Decorator<float> TTVA_decor_lumi_uncert_down(m_decor_TTVA + "_LUMI_UNCERT_DOWN");
865  static SG::AuxElement::Decorator<float> TTVA_decor_bkg_fraction_up(m_decor_TTVA + "_BKG_FRACTION_UP");
866  static SG::AuxElement::Decorator<float> TTVA_decor_bkg_fraction_down(m_decor_TTVA + "_BKG_FRACTION_DOWN");
867  static SG::AuxElement::Decorator<float> TTVA_decor_mc_xsec_up(m_decor_TTVA + "_MC_XSEC_UP");
868  static SG::AuxElement::Decorator<float> TTVA_decor_mc_xsec_down(m_decor_TTVA + "_MC_XSEC_DOWN");
869  static SG::AuxElement::Decorator<float> TTVA_decor_qcd_template_up(m_decor_TTVA + "_QCD_TEMPLATE_UP");
870  static SG::AuxElement::Decorator<float> TTVA_decor_qcd_template_down(m_decor_TTVA + "_QCD_TEMPLATE_DOWN");
871  static SG::AuxElement::Decorator<float> TTVA_decor_supression_scale_up(m_decor_TTVA + "_SUPRESSION_SCALE_UP");
872  static SG::AuxElement::Decorator<float> TTVA_decor_supression_scale_down(m_decor_TTVA + "_SUPRESSION_SCALE_DOWN");
873  static SG::AuxElement::Decorator<float> TTVA_decor_extrapolation_up(m_decor_TTVA + "_EXTRAPOLATION_UP");
874  static SG::AuxElement::Decorator<float> TTVA_decor_extrapolation_down(m_decor_TTVA + "_EXTRAPOLATION_DOWN");
875 
877  m_TTVA_stat_UP, muon, TTVA_decor_stat_up);
879  m_TTVA_stat_DOWN, muon, TTVA_decor_stat_down);
880 
881  if (m_config->muonBreakDownSystematics()) {
883  m_TTVA_stat_UP, muon, TTVA_decor_stat_up);
885  m_TTVA_stat_DOWN, muon, TTVA_decor_stat_down);
887  m_TTVA_bkg_fraction_UP, muon, TTVA_decor_bkg_fraction_up);
889  m_TTVA_bkg_fraction_DOWN, muon, TTVA_decor_bkg_fraction_down);
891  m_TTVA_lumi_uncert_UP, muon, TTVA_decor_lumi_uncert_up);
893  m_TTVA_lumi_uncert_DOWN, muon, TTVA_decor_lumi_uncert_down);
895  m_TTVA_mc_xsec_UP, muon, TTVA_decor_mc_xsec_up);
897  m_TTVA_mc_xsec_DOWN, muon, TTVA_decor_mc_xsec_down);
899  m_TTVA_qcd_template_UP, muon, TTVA_decor_qcd_template_up);
901  m_TTVA_qcd_template_DOWN, muon, TTVA_decor_qcd_template_down);
903  m_TTVA_supression_scale_UP, muon, TTVA_decor_supression_scale_up);
905  m_TTVA_supression_scale_DOWN, muon, TTVA_decor_supression_scale_down);
907  m_TTVA_extrapolation_UP, muon, TTVA_decor_extrapolation_up);
909  m_TTVA_extrapolation_DOWN, muon, TTVA_decor_extrapolation_down);
910  } else {
912  m_TTVA_syst_UP, muon, TTVA_decor_syst_up);
914  m_TTVA_syst_DOWN, muon, TTVA_decor_syst_down);
915  }
916  }
917 
918  void MuonScaleFactorCalculator::decorateIDSFandRecoEff(ToolHandle<CP::IMuonEfficiencyScaleFactors>& tool,
919  const CP::SystematicSet& systematic,
920  const xAOD::Muon& muon,
921  const SG::AuxElement::Decorator<float>& id_sf_decor) {
922  // 1. Set the tool to apply systematic and
923  // decorate the ID efficiency using decorateEfficiencySF()
924  this->decorateEfficiencySF(tool, systematic, muon, id_sf_decor);
925  // 2. No reco Eff since 2.4.22
926  }
927 
929  const static SG::AuxElement::Decorator<float> id_sf_decor_stat_up(m_decor_idSF + "_STAT_UP");
930  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_stat_up(m_decor_idSF_loose + "_STAT_UP");
931 
932  const static SG::AuxElement::Decorator<float> id_sf_decor_stat_down(m_decor_idSF + "_STAT_DOWN");
933  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_stat_down(m_decor_idSF_loose + "_STAT_DOWN");
934 
935  const static SG::AuxElement::Decorator<float> id_sf_decor_syst_up(m_decor_idSF + "_SYST_UP");
936  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_syst_up(m_decor_idSF_loose + "_SYST_UP");
937 
938  const static SG::AuxElement::Decorator<float> id_sf_decor_syst_down(m_decor_idSF + "_SYST_DOWN");
939  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_syst_down(m_decor_idSF_loose + "_SYST_DOWN");
940 
941  const static SG::AuxElement::Decorator<float> id_sf_decor_stat_lowpt_up(m_decor_idSF + "_STAT_LOWPT_UP");
942  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_stat_lowpt_up(m_decor_idSF_loose + "_STAT_LOWPT_UP");
943 
944  const static SG::AuxElement::Decorator<float> id_sf_decor_stat_lowpt_down(m_decor_idSF + "_STAT_LOWPT_DOWN");
945  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_stat_lowpt_down(m_decor_idSF_loose + "_STAT_LOWPT_DOWN");
946 
947  const static SG::AuxElement::Decorator<float> id_sf_decor_syst_lowpt_up(m_decor_idSF + "_SYST_LOWPT_UP");
948  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_syst_lowpt_up(m_decor_idSF_loose + "_SYST_LOWPT_UP");
949 
950  const static SG::AuxElement::Decorator<float> id_sf_decor_syst_lowpt_down(m_decor_idSF + "_SYST_LOWPT_DOWN");
951  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_syst_lowpt_down(m_decor_idSF_loose + "_SYST_LOWPT_DOWN");
952 
953  const static SG::AuxElement::Decorator<float> id_sf_decor_bkg_fraction_up(m_decor_idSF + "_BKG_FRACTION_UP");
954  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_bkg_fraction_up(m_decor_idSF_loose + "_BKG_FRACTION_UP");
955  const static SG::AuxElement::Decorator<float> id_sf_decor_bkg_fraction_down(m_decor_idSF + "_BKG_FRACTION_DOWN");
956  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_bkg_fraction_down(m_decor_idSF_loose + "_BKG_FRACTION_DOWN");
957 
958  const static SG::AuxElement::Decorator<float> id_sf_decor_fit_model_lowpt_up(m_decor_idSF + "_FIT_MODEL_LOWPT_UP");
959  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_fit_model_lowpt_up(m_decor_idSF_loose + "_FIT_MODEL_LOWPT_UP");
960  const static SG::AuxElement::Decorator<float> id_sf_decor_fit_model_lowpt_down(m_decor_idSF + "_FIT_MODEL_LOWPT_DOWN");
961  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_fit_model_lowpt_down(m_decor_idSF_loose + "_FIT_MODEL_LOWPT_DOWN");
962 
963  const static SG::AuxElement::Decorator<float> id_sf_decor_lumi_uncert_up(m_decor_idSF + "_LUMI_UNCERT_UP");
964  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_lumi_uncert_up(m_decor_idSF_loose + "_LUMI_UNCERT_UP");
965  const static SG::AuxElement::Decorator<float> id_sf_decor_lumi_uncert_down(m_decor_idSF + "_LUMI_UNCERT_DOWN");
966  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_lumi_uncert_down(m_decor_idSF_loose + "_LUMI_UNCERT_DOWN");
967 
968  const static SG::AuxElement::Decorator<float> id_sf_decor_matching_up(m_decor_idSF + "_MATCHING_UP");
969  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_matching_up(m_decor_idSF_loose + "_MATCHING_UP");
970  const static SG::AuxElement::Decorator<float> id_sf_decor_matching_down(m_decor_idSF + "_MATCHING_DOWN");
971  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_matching_down(m_decor_idSF_loose + "_MATCHING_DOWN");
972 
973  const static SG::AuxElement::Decorator<float> id_sf_decor_matching_lowpt_up(m_decor_idSF + "_MATCHING_LOWPT_UP");
974  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_matching_lowpt_up(m_decor_idSF_loose + "_MATCHING_LOWPT_UP");
975  const static SG::AuxElement::Decorator<float> id_sf_decor_matching_lowpt_down(m_decor_idSF + "_MATCHING_LOWPT_DOWN");
976  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_matching_lowpt_down(m_decor_idSF_loose + "_MATCHING_LOWPT_DOWN");
977 
978  const static SG::AuxElement::Decorator<float> id_sf_decor_mc_xsec_up(m_decor_idSF + "_MC_XSEC_UP");
979  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_mc_xsec_up(m_decor_idSF_loose + "_MC_XSEC_UP");
980  const static SG::AuxElement::Decorator<float> id_sf_decor_mc_xsec_down(m_decor_idSF + "_MC_XSEC_DOWN");
981  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_mc_xsec_down(m_decor_idSF_loose + "_MC_XSEC_DOWN");
982 
983  const static SG::AuxElement::Decorator<float> id_sf_decor_pt_dependency_up(m_decor_idSF + "_PT_DEPENDENCY_UP");
984  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_pt_dependency_up(m_decor_idSF_loose + "_PT_DEPENDENCY_UP");
985  const static SG::AuxElement::Decorator<float> id_sf_decor_pt_dependency_down(m_decor_idSF + "_PT_DEPENDENCY_DOWN");
986  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_pt_dependency_down(m_decor_idSF_loose + "_PT_DEPENDENCY_DOWN");
987 
988  const static SG::AuxElement::Decorator<float> id_sf_decor_qcd_template_up(m_decor_idSF + "_QCD_TEMPLATE_UP");
989  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_qcd_template_up(m_decor_idSF_loose + "_QCD_TEMPLATE_UP");
990  const static SG::AuxElement::Decorator<float> id_sf_decor_qcd_template_down(m_decor_idSF + "_QCD_TEMPLATE_DOWN");
991  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_qcd_template_down(m_decor_idSF_loose + "_QCD_TEMPLATE_DOWN");
992 
993  const static SG::AuxElement::Decorator<float> id_sf_decor_supression_scale_up(m_decor_idSF + "_SUPRESSION_SCALE_UP");
994  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_supression_scale_up(m_decor_idSF_loose + "_SUPRESSION_SCALE_UP");
995  const static SG::AuxElement::Decorator<float> id_sf_decor_supression_scale_down(m_decor_idSF + "_SUPRESSION_SCALE_DOWN");
996  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_supression_scale_down(m_decor_idSF_loose + "_SUPRESSION_SCALE_DOWN");
997 
998  const static SG::AuxElement::Decorator<float> id_sf_decor_truth_up(m_decor_idSF + "_TRUTH_UP");
999  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_truth_up(m_decor_idSF_loose + "_TRUTH_UP");
1000  const static SG::AuxElement::Decorator<float> id_sf_decor_truth_down(m_decor_idSF + "_TRUTH_DOWN");
1001  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_truth_down(m_decor_idSF_loose + "_TRUTH_DOWN");
1002 
1003  const static SG::AuxElement::Decorator<float> id_sf_decor_truth_lowpt_up(m_decor_idSF + "_TRUTH_LOWPT_UP");
1004  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_truth_lowpt_up(m_decor_idSF_loose + "_TRUTH_LOWPT_UP");
1005  const static SG::AuxElement::Decorator<float> id_sf_decor_truth_lowpt_down(m_decor_idSF + "_TRUTH_LOWPT_DOWN");
1006  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_truth_lowpt_down(m_decor_idSF_loose + "_TRUTH_LOWPT_DOWN");
1007 
1008  const static SG::AuxElement::Decorator<float> id_sf_decor_bad_muon_veto_up(m_decor_idSF + "_BAD_MUON_VETO_UP");
1009  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_bad_muon_veto_up(m_decor_idSF_loose + "_BAD_MUON_VETO_UP");
1010  const static SG::AuxElement::Decorator<float> id_sf_decor_bad_muon_veto_down(m_decor_idSF + "_BAD_MUON_VETO_DOWN");
1011  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_bad_muon_veto_down(m_decor_idSF_loose + "_BAD_MUON_VETO_DOWN");
1012 
1013  const static SG::AuxElement::Decorator<float> id_sf_decor_cr1_up(m_decor_idSF + "_CR1_UP");
1014  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_cr1_up(m_decor_idSF_loose + "_CR1_UP");
1015  const static SG::AuxElement::Decorator<float> id_sf_decor_cr1_down(m_decor_idSF + "_CR1_DOWN");
1016  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_cr1_down(m_decor_idSF_loose + "_CR1_DOWN");
1017 
1018  const static SG::AuxElement::Decorator<float> id_sf_decor_cr2_up(m_decor_idSF + "_CR2_UP");
1019  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_cr2_up(m_decor_idSF_loose + "_CR2_UP");
1020  const static SG::AuxElement::Decorator<float> id_sf_decor_cr2_down(m_decor_idSF + "_CR2_DOWN");
1021  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_cr2_down(m_decor_idSF_loose + "_CR2_DOWN");
1022 
1023  const static SG::AuxElement::Decorator<float> id_sf_decor_cr3_up(m_decor_idSF + "_CR3_UP");
1024  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_cr3_up(m_decor_idSF_loose + "_CR3_UP");
1025  const static SG::AuxElement::Decorator<float> id_sf_decor_cr3_down(m_decor_idSF + "_CR3_DOWN");
1026  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_cr3_down(m_decor_idSF_loose + "_CR3_DOWN");
1027 
1028  const static SG::AuxElement::Decorator<float> id_sf_decor_higheta_probeip_up(m_decor_idSF + "_HIGHETA_PROBEIP_UP");
1029  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_higheta_probeip_up(m_decor_idSF_loose + "_HIGHETA_PROBEIP_UP");
1030  const static SG::AuxElement::Decorator<float> id_sf_decor_higheta_probeip_down(m_decor_idSF + "_HIGHETA_PROBEIP_DOWN");
1031  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_higheta_probeip_down(m_decor_idSF_loose + "_HIGHETA_PROBEIP_DOWN");
1032 
1033  const static SG::AuxElement::Decorator<float> id_sf_decor_higheta_probeiso_up(m_decor_idSF + "_HIGHETA_PROBEISO_UP");
1034  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_higheta_probeiso_up(m_decor_idSF_loose + "_HIGHETA_PROBEISO_UP");
1035  const static SG::AuxElement::Decorator<float> id_sf_decor_higheta_probeiso_down(m_decor_idSF + "_HIGHETA_PROBEISO_DOWN");
1036  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_higheta_probeiso_down(m_decor_idSF_loose + "_HIGHETA_PROBEISO_DOWN");
1037 
1038  const static SG::AuxElement::Decorator<float> id_sf_decor_tagpt_up(m_decor_idSF + "_TAGPT_UP");
1039  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_tagpt_up(m_decor_idSF_loose + "_TAGPT_UP");
1040  const static SG::AuxElement::Decorator<float> id_sf_decor_tagpt_down(m_decor_idSF + "_TAGPT_DOWN");
1041  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_tagpt_down(m_decor_idSF_loose + "_TAGPT_DOWN");
1042 
1043  const static SG::AuxElement::Decorator<float> id_sf_decor_extrapolation_up(m_decor_idSF + "_EXTRAPOLATION_UP");
1044  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_extrapolation_up(m_decor_idSF_loose + "_EXTRAPOLATION_UP");
1045  const static SG::AuxElement::Decorator<float> id_sf_decor_extrapolation_down(m_decor_idSF + "_EXTRAPOLATION_DOWN");
1046  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_extrapolation_down(m_decor_idSF_loose + "_EXTRAPOLATION_DOWN");
1047 
1048  const static SG::AuxElement::Decorator<float> id_sf_decor_extrapolation_lowpt_up(m_decor_idSF + "_EXTRAPOLATION_LOWPT_UP");
1049  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_extrapolation_lowpt_up(m_decor_idSF_loose + "_EXTRAPOLATION_LOWPT_UP");
1050  const static SG::AuxElement::Decorator<float> id_sf_decor_extrapolation_lowpt_down(m_decor_idSF + "_EXTRAPOLATION_LOWPT_DOWN");
1051  const static SG::AuxElement::Decorator<float> id_sf_loose_decor_extrapolation_lowpt_down(m_decor_idSF_loose + "_EXTRAPOLATION_LOWPT_DOWN");
1052 
1054  m_reco_stat_UP, muon,
1055  id_sf_decor_stat_up);
1057  m_reco_stat_UP, muon,
1058  id_sf_loose_decor_stat_up);
1060  m_reco_stat_DOWN, muon,
1061  id_sf_decor_stat_down);
1063  m_reco_stat_DOWN, muon,
1064  id_sf_loose_decor_stat_down);
1065 
1067  m_reco_stat_lowpt_UP, muon,
1068  id_sf_decor_stat_lowpt_up);
1070  m_reco_stat_lowpt_UP, muon,
1071  id_sf_loose_decor_stat_lowpt_up);
1073  m_reco_stat_lowpt_DOWN, muon,
1074  id_sf_decor_stat_lowpt_down);
1076  m_reco_stat_lowpt_DOWN, muon,
1077  id_sf_loose_decor_stat_lowpt_down);
1078 
1079  if (m_config->muonBreakDownSystematics()) {
1080 
1082  m_reco_bkg_fraction_UP, muon,
1083  id_sf_decor_bkg_fraction_up);
1085  m_reco_bkg_fraction_UP, muon,
1086  id_sf_loose_decor_bkg_fraction_up);
1089  id_sf_decor_bkg_fraction_down);
1092  id_sf_loose_decor_bkg_fraction_down);
1093 
1096  id_sf_decor_fit_model_lowpt_up);
1099  id_sf_loose_decor_fit_model_lowpt_up);
1102  id_sf_decor_fit_model_lowpt_down);
1105  id_sf_loose_decor_fit_model_lowpt_down);
1106 
1108  m_reco_lumi_uncert_UP, muon,
1109  id_sf_decor_lumi_uncert_up);
1111  m_reco_lumi_uncert_UP, muon,
1112  id_sf_loose_decor_lumi_uncert_up);
1115  id_sf_decor_lumi_uncert_down);
1118  id_sf_loose_decor_lumi_uncert_down);
1119 
1121  m_reco_matching_UP, muon,
1122  id_sf_decor_matching_up);
1124  m_reco_matching_UP, muon,
1125  id_sf_loose_decor_matching_up);
1127  m_reco_matching_DOWN, muon,
1128  id_sf_decor_matching_down);
1130  m_reco_matching_DOWN, muon,
1131  id_sf_loose_decor_matching_down);
1132 
1135  id_sf_decor_matching_lowpt_up);
1138  id_sf_loose_decor_matching_lowpt_up);
1141  id_sf_decor_matching_lowpt_down);
1144  id_sf_loose_decor_matching_lowpt_down);
1145 
1147  m_reco_mc_xsec_UP, muon,
1148  id_sf_decor_mc_xsec_up);
1150  m_reco_mc_xsec_UP, muon,
1151  id_sf_loose_decor_mc_xsec_up);
1153  m_reco_mc_xsec_DOWN, muon,
1154  id_sf_decor_mc_xsec_down);
1156  m_reco_mc_xsec_DOWN, muon,
1157  id_sf_loose_decor_mc_xsec_down);
1158 
1161  id_sf_decor_pt_dependency_up);
1164  id_sf_loose_decor_pt_dependency_up);
1167  id_sf_decor_pt_dependency_down);
1170  id_sf_loose_decor_pt_dependency_down);
1171 
1173  m_reco_qcd_template_UP, muon,
1174  id_sf_decor_qcd_template_up);
1176  m_reco_qcd_template_UP, muon,
1177  id_sf_loose_decor_qcd_template_up);
1180  id_sf_decor_qcd_template_down);
1183  id_sf_loose_decor_qcd_template_down);
1184 
1187  id_sf_decor_supression_scale_up);
1190  id_sf_loose_decor_supression_scale_up);
1193  id_sf_decor_supression_scale_down);
1196  id_sf_loose_decor_supression_scale_down);
1197 
1199  m_reco_truth_UP, muon,
1200  id_sf_decor_truth_up);
1202  m_reco_truth_UP, muon,
1203  id_sf_loose_decor_truth_up);
1205  m_reco_truth_DOWN, muon,
1206  id_sf_decor_truth_down);
1208  m_reco_truth_DOWN, muon,
1209  id_sf_loose_decor_truth_down);
1210 
1212  m_reco_truth_lowpt_UP, muon,
1213  id_sf_decor_truth_lowpt_up);
1215  m_reco_truth_lowpt_UP, muon,
1216  id_sf_loose_decor_truth_lowpt_up);
1219  id_sf_decor_truth_lowpt_down);
1222  id_sf_loose_decor_truth_lowpt_down);
1223 
1225  m_reco_cr1_UP, muon,
1226  id_sf_decor_cr1_up);
1228  m_reco_cr1_UP, muon,
1229  id_sf_loose_decor_cr1_up);
1231  m_reco_cr1_DOWN, muon,
1232  id_sf_decor_cr1_down);
1234  m_reco_cr1_DOWN, muon,
1235  id_sf_loose_decor_cr1_down);
1236 
1238  m_reco_cr2_UP, muon,
1239  id_sf_decor_cr2_up);
1241  m_reco_cr2_UP, muon,
1242  id_sf_loose_decor_cr2_up);
1244  m_reco_cr2_DOWN, muon,
1245  id_sf_decor_cr2_down);
1247  m_reco_cr2_DOWN, muon,
1248  id_sf_loose_decor_cr2_down);
1249 
1251  m_reco_cr3_UP, muon,
1252  id_sf_decor_cr3_up);
1254  m_reco_cr3_UP, muon,
1255  id_sf_loose_decor_cr3_up);
1257  m_reco_cr3_DOWN, muon,
1258  id_sf_decor_cr3_down);
1260  m_reco_cr3_DOWN, muon,
1261  id_sf_loose_decor_cr3_down);
1262 
1265  id_sf_decor_higheta_probeip_up);
1268  id_sf_loose_decor_higheta_probeip_up);
1271  id_sf_decor_higheta_probeip_down);
1274  id_sf_loose_decor_higheta_probeip_down);
1275 
1278  id_sf_decor_higheta_probeiso_up);
1281  id_sf_loose_decor_higheta_probeiso_up);
1284  id_sf_decor_higheta_probeiso_down);
1287  id_sf_loose_decor_higheta_probeiso_down);
1288 
1290  m_reco_tagpt_UP, muon,
1291  id_sf_decor_tagpt_up);
1293  m_reco_tagpt_UP, muon,
1294  id_sf_loose_decor_tagpt_up);
1296  m_reco_tagpt_DOWN, muon,
1297  id_sf_decor_tagpt_down);
1299  m_reco_tagpt_DOWN, muon,
1300  id_sf_loose_decor_tagpt_down);
1301 
1304  id_sf_decor_extrapolation_up);
1307  id_sf_loose_decor_extrapolation_up);
1310  id_sf_decor_extrapolation_lowpt_up);
1313  id_sf_loose_decor_extrapolation_lowpt_up);
1316  id_sf_decor_extrapolation_down);
1319  id_sf_loose_decor_extrapolation_down);
1322  id_sf_decor_extrapolation_lowpt_down);
1325  id_sf_loose_decor_extrapolation_down);
1326  } else {
1329  m_reco_syst_UP, muon,
1330  id_sf_decor_syst_up);
1332  m_reco_syst_UP, muon,
1333  id_sf_loose_decor_syst_up);
1334 
1337  m_reco_syst_DOWN, muon,
1338  id_sf_decor_syst_down);
1340  m_reco_syst_DOWN, muon,
1341  id_sf_loose_decor_syst_down);
1344  m_reco_syst_lowpt_UP, muon,
1345  id_sf_decor_syst_lowpt_up);
1347  m_reco_syst_lowpt_UP, muon,
1348  id_sf_loose_decor_syst_lowpt_up);
1349 
1352  m_reco_syst_lowpt_DOWN, muon,
1353  id_sf_decor_syst_lowpt_down);
1355  m_reco_syst_lowpt_DOWN, muon,
1356  id_sf_loose_decor_syst_lowpt_down);
1357  }
1358  if (m_config->muonQuality() == "HighPt" || m_config->muonQualityLoose() == "HighPt") {
1361  id_sf_decor_bad_muon_veto_up);
1364  id_sf_decor_bad_muon_veto_down);
1367  id_sf_loose_decor_bad_muon_veto_up);
1370  id_sf_loose_decor_bad_muon_veto_down);
1371  }
1372  }
1373 
1375  static SG::AuxElement::Decorator<float> id_sf_decor_stat_up(m_decor_softmuon_idSF + "_STAT_UP");
1376 
1377  static SG::AuxElement::Decorator<float> id_sf_decor_stat_down(m_decor_softmuon_idSF + "_STAT_DOWN");
1378 
1379  static SG::AuxElement::Decorator<float> id_sf_decor_syst_up(m_decor_softmuon_idSF + "_SYST_UP");
1380 
1381  static SG::AuxElement::Decorator<float> id_sf_decor_syst_down(m_decor_softmuon_idSF + "_SYST_DOWN");
1382 
1383 
1386  m_reco_stat_UP, muon,
1387  id_sf_decor_stat_up);
1388 
1391  m_reco_stat_DOWN, muon,
1392  id_sf_decor_stat_down);
1393 
1396  m_reco_syst_UP, muon,
1397  id_sf_decor_syst_up);
1398 
1401  m_reco_syst_DOWN, muon,
1402  id_sf_decor_syst_down);
1403 
1404  static SG::AuxElement::Decorator<float> id_sf_decor_stat_lowpt_up(m_decor_softmuon_idSF + "_STAT_LOWPT_UP");
1405 
1406  static SG::AuxElement::Decorator<float> id_sf_decor_stat_lowpt_down(m_decor_softmuon_idSF + "_STAT_LOWPT_DOWN");
1407 
1408  static SG::AuxElement::Decorator<float> id_sf_decor_syst_lowpt_up(m_decor_softmuon_idSF + "_SYST_LOWPT_UP");
1409 
1410  static SG::AuxElement::Decorator<float> id_sf_decor_syst_lowpt_down(m_decor_softmuon_idSF + "_SYST_LOWPT_DOWN");
1411 
1414  m_reco_stat_lowpt_UP, muon,
1415  id_sf_decor_stat_lowpt_up);
1416 
1419  m_reco_stat_lowpt_DOWN, muon,
1420  id_sf_decor_stat_lowpt_down);
1421 
1424  m_reco_syst_lowpt_UP, muon,
1425  id_sf_decor_syst_lowpt_up);
1426 
1429  m_reco_syst_lowpt_DOWN, muon,
1430  id_sf_decor_syst_lowpt_down);
1431  }
1432 } // namespace top
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
top::MuonScaleFactorCalculator::m_muonEfficiencyCorrectionsToolTTVA
ToolHandle< CP::IMuonEfficiencyScaleFactors > m_muonEfficiencyCorrectionsToolTTVA
Definition: MuonScaleFactorCalculator.h:167
top::MuonScaleFactorCalculator::decorateTTVASystematics
void decorateTTVASystematics(const xAOD::Muon &muon)
Definition: MuonScaleFactorCalculator.cxx:858
xAOD::muon
@ muon
Definition: TrackingPrimitives.h:195
top::MuonScaleFactorCalculator::decorateTriggerSF
void decorateTriggerSF(ToolHandle< CP::IMuonTriggerScaleFactors > &tool, const ConstDataVector< xAOD::MuonContainer > &muon_cont, const SG::AuxElement::Decorator< float > &decor)
Definition: MuonScaleFactorCalculator.cxx:572
top::MuonScaleFactorCalculator::m_reco_fit_model_lowpt_UP
CP::SystematicSet m_reco_fit_model_lowpt_UP
Definition: MuonScaleFactorCalculator.h:197
top::MuonScaleFactorCalculator::m_iso_syst_DOWN
CP::SystematicSet m_iso_syst_DOWN
Definition: MuonScaleFactorCalculator.h:244
top::MuonScaleFactorCalculator::m_decor_triggerEff_loose
std::string m_decor_triggerEff_loose
Definition: MuonScaleFactorCalculator.h:171
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
top::MuonScaleFactorCalculator::m_reco_matching_DOWN
CP::SystematicSet m_reco_matching_DOWN
Definition: MuonScaleFactorCalculator.h:202
top::MuonScaleFactorCalculator::m_iso_bkg_fraction_UP
CP::SystematicSet m_iso_bkg_fraction_UP
Definition: MuonScaleFactorCalculator.h:246
top::MuonScaleFactorCalculator::m_reco_truth_lowpt_DOWN
CP::SystematicSet m_reco_truth_lowpt_DOWN
Definition: MuonScaleFactorCalculator.h:216
top::MuonScaleFactorCalculator::m_reco_truth_DOWN
CP::SystematicSet m_reco_truth_DOWN
Definition: MuonScaleFactorCalculator.h:214
top::MuonScaleFactorCalculator::m_iso_lumi_uncert_UP
CP::SystematicSet m_iso_lumi_uncert_UP
Definition: MuonScaleFactorCalculator.h:250
top
TopConfig A simple configuration that is NOT a singleton.
Definition: AnalysisTrackingHelper.cxx:58
top::MuonScaleFactorCalculator::m_iso_bkg_fraction_DOWN
CP::SystematicSet m_iso_bkg_fraction_DOWN
Definition: MuonScaleFactorCalculator.h:247
top::MuonScaleFactorCalculator::m_muonEfficiencyCorrectionsTool
ToolHandle< CP::IMuonEfficiencyScaleFactors > m_muonEfficiencyCorrectionsTool
Definition: MuonScaleFactorCalculator.h:162
top::MuonScaleFactorCalculator::m_iso_supression_scale_UP
CP::SystematicSet m_iso_supression_scale_UP
Definition: MuonScaleFactorCalculator.h:260
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
top::MuonScaleFactorCalculator::m_iso_sherpa_powheg_DOWN
CP::SystematicSet m_iso_sherpa_powheg_DOWN
Definition: MuonScaleFactorCalculator.h:259
top::MuonScaleFactorCalculator::m_reco_mc_xsec_UP
CP::SystematicSet m_reco_mc_xsec_UP
Definition: MuonScaleFactorCalculator.h:205
top::MuonScaleFactorCalculator::m_reco_bad_muon_veto_DOWN
CP::SystematicSet m_reco_bad_muon_veto_DOWN
Definition: MuonScaleFactorCalculator.h:239
top::MuonScaleFactorCalculator::m_reco_matching_lowpt_UP
CP::SystematicSet m_reco_matching_lowpt_UP
Definition: MuonScaleFactorCalculator.h:203
top::MuonScaleFactorCalculator::m_reco_pt_dependency_UP
CP::SystematicSet m_reco_pt_dependency_UP
Definition: MuonScaleFactorCalculator.h:207
top::MuonScaleFactorCalculator::m_trig_sf_stat_DOWN
CP::SystematicSet m_trig_sf_stat_DOWN
Definition: MuonScaleFactorCalculator.h:186
top::MuonScaleFactorCalculator::m_decor_triggerEff
std::string m_decor_triggerEff
Definition: MuonScaleFactorCalculator.h:170
SG::VIEW_ELEMENTS
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition: OwnershipPolicy.h:18
top::MuonScaleFactorCalculator::decorateTrigSFandEff
void decorateTrigSFandEff(ToolHandle< CP::IMuonTriggerScaleFactors > &tool, const CP::SystematicSet &systematic, const ConstDataVector< xAOD::MuonContainer > &muon_cont, const SG::AuxElement::Decorator< float > &sf_decor, const SG::AuxElement::Decorator< float > &eff_decor)
Definition: MuonScaleFactorCalculator.cxx:583
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
top::MuonScaleFactorCalculator::m_muonEfficiencyCorrectionsToolIso
ToolHandle< CP::IMuonEfficiencyScaleFactors > m_muonEfficiencyCorrectionsToolIso
Definition: MuonScaleFactorCalculator.h:165
top::MuonScaleFactorCalculator::decorateIsolationSystematics
void decorateIsolationSystematics(const xAOD::Muon &muon)
Definition: MuonScaleFactorCalculator.cxx:683
top::MuonScaleFactorCalculator::m_reco_tagpt_DOWN
CP::SystematicSet m_reco_tagpt_DOWN
Definition: MuonScaleFactorCalculator.h:228
top::MuonScaleFactorCalculator::m_reco_mc_xsec_DOWN
CP::SystematicSet m_reco_mc_xsec_DOWN
Definition: MuonScaleFactorCalculator.h:206
top::MuonScaleFactorCalculator::m_reco_syst_lowpt_UP
CP::SystematicSet m_reco_syst_lowpt_UP
Definition: MuonScaleFactorCalculator.h:236
top::MuonScaleFactorCalculator::m_reco_fit_model_lowpt_DOWN
CP::SystematicSet m_reco_fit_model_lowpt_DOWN
Definition: MuonScaleFactorCalculator.h:198
CP::SystematicSet::empty
bool empty() const
returns: whether the set is empty
Definition: SystematicSet.h:67
top::MuonScaleFactorCalculator::m_reco_lumi_uncert_UP
CP::SystematicSet m_reco_lumi_uncert_UP
Definition: MuonScaleFactorCalculator.h:199
top::MuonScaleFactorCalculator::m_iso_supression_scale_DOWN
CP::SystematicSet m_iso_supression_scale_DOWN
Definition: MuonScaleFactorCalculator.h:261
top::MuonScaleFactorCalculator::m_TTVA_bkg_fraction_UP
CP::SystematicSet m_TTVA_bkg_fraction_UP
Definition: MuonScaleFactorCalculator.h:270
top::MuonScaleFactorCalculator::m_reco_qcd_template_DOWN
CP::SystematicSet m_reco_qcd_template_DOWN
Definition: MuonScaleFactorCalculator.h:210
top::MuonScaleFactorCalculator::m_reco_truth_lowpt_UP
CP::SystematicSet m_reco_truth_lowpt_UP
Definition: MuonScaleFactorCalculator.h:215
top::MuonScaleFactorCalculator::m_decor_triggerSF
std::string m_decor_triggerSF
Definition: MuonScaleFactorCalculator.h:172
asg
Definition: DataHandleTestTool.h:28
top::MuonScaleFactorCalculator::m_muon_trigger_sf_config
std::string m_muon_trigger_sf_config
Definition: MuonScaleFactorCalculator.h:283
top::MuonScaleFactorCalculator::m_reco_higheta_probeip_UP
CP::SystematicSet m_reco_higheta_probeip_UP
Definition: MuonScaleFactorCalculator.h:223
CP::SystematicSet
Class to wrap a set of SystematicVariations.
Definition: SystematicSet.h:31
top::MuonScaleFactorCalculator::m_reco_matching_UP
CP::SystematicSet m_reco_matching_UP
Definition: MuonScaleFactorCalculator.h:201
top::MuonScaleFactorCalculator::m_muonTriggerScaleFactorsLoose_R21
ToolHandle< CP::IMuonTriggerScaleFactors > m_muonTriggerScaleFactorsLoose_R21
Definition: MuonScaleFactorCalculator.h:160
top::MuonScaleFactorCalculator::m_decor_isoSF_loose
std::string m_decor_isoSF_loose
Definition: MuonScaleFactorCalculator.h:177
top::MuonScaleFactorCalculator::decorateTriggerEfficiency
void decorateTriggerEfficiency(ToolHandle< CP::IMuonTriggerScaleFactors > &tool, const xAOD::Muon &muon, const SG::AuxElement::Decorator< float > &decor)
Definition: MuonScaleFactorCalculator.cxx:560
CP::SystematicSet::name
std::string name() const
returns: the systematics joined into a single string.
Definition: SystematicSet.cxx:278
top::MuonScaleFactorCalculator::m_TTVA_syst_DOWN
CP::SystematicSet m_TTVA_syst_DOWN
Definition: MuonScaleFactorCalculator.h:268
top::MuonScaleFactorCalculator::m_TTVA_syst_UP
CP::SystematicSet m_TTVA_syst_UP
Definition: MuonScaleFactorCalculator.h:267
top::MuonScaleFactorCalculator::m_config
std::shared_ptr< top::TopConfig > m_config
Definition: MuonScaleFactorCalculator.h:146
top::MuonScaleFactorCalculator::m_reco_extrapolation_lowpt_DOWN
CP::SystematicSet m_reco_extrapolation_lowpt_DOWN
Definition: MuonScaleFactorCalculator.h:232
top::MuonScaleFactorCalculator::m_TTVA_lumi_uncert_UP
CP::SystematicSet m_TTVA_lumi_uncert_UP
Definition: MuonScaleFactorCalculator.h:272
top::MuonScaleFactorCalculator::m_reco_cr1_UP
CP::SystematicSet m_reco_cr1_UP
Definition: MuonScaleFactorCalculator.h:217
top::MuonScaleFactorCalculator::m_reco_supression_scale_UP
CP::SystematicSet m_reco_supression_scale_UP
Definition: MuonScaleFactorCalculator.h:211
top::MuonScaleFactorCalculator::m_reco_cr3_UP
CP::SystematicSet m_reco_cr3_UP
Definition: MuonScaleFactorCalculator.h:221
top::MuonScaleFactorCalculator::m_reco_higheta_probeip_DOWN
CP::SystematicSet m_reco_higheta_probeip_DOWN
Definition: MuonScaleFactorCalculator.h:224
CP
Select isolated Photons, Electrons and Muons.
Definition: Control/xAODRootAccess/xAODRootAccess/TEvent.h:48
top::MuonScaleFactorCalculator::m_iso_sherpa_powheg_UP
CP::SystematicSet m_iso_sherpa_powheg_UP
Definition: MuonScaleFactorCalculator.h:258
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
top::MuonScaleFactorCalculator::m_TTVA_extrapolation_DOWN
CP::SystematicSet m_TTVA_extrapolation_DOWN
Definition: MuonScaleFactorCalculator.h:281
top::MuonScaleFactorCalculator::m_trig_sf_stat_UP
CP::SystematicSet m_trig_sf_stat_UP
Definition: MuonScaleFactorCalculator.h:185
top::MuonScaleFactorCalculator::m_reco_stat_lowpt_UP
CP::SystematicSet m_reco_stat_lowpt_UP
Definition: MuonScaleFactorCalculator.h:234
EventTools.h
A few functions for doing operations on particles / events. Currently holds code for dR,...
top::MuonScaleFactorCalculator::retrieveSystematicTool
void retrieveSystematicTool(const ToolHandle< T > &tool, std::set< std::string > &recommended_systematics)
Definition: MuonScaleFactorCalculator.cxx:516
top::MuonScaleFactorCalculator::m_decor_softmuon_idSF
std::string m_decor_softmuon_idSF
Definition: MuonScaleFactorCalculator.h:180
ConstDataVector::asDataVector
const DV * asDataVector() const
Return a pointer to this object, as a const DataVector.
top::MuonScaleFactorCalculator::m_reco_supression_scale_DOWN
CP::SystematicSet m_reco_supression_scale_DOWN
Definition: MuonScaleFactorCalculator.h:212
top::MuonScaleFactorCalculator::m_reco_bkg_fraction_DOWN
CP::SystematicSet m_reco_bkg_fraction_DOWN
Definition: MuonScaleFactorCalculator.h:196
top::MuonScaleFactorCalculator::m_reco_extrapolation_DOWN
CP::SystematicSet m_reco_extrapolation_DOWN
Definition: MuonScaleFactorCalculator.h:230
SG::AuxElement::auxdataConst
Accessor< T, ALLOC >::const_reference_type auxdataConst(const std::string &name) const
Fetch an aux data variable, as a const reference.
top::MuonScaleFactorCalculator::m_reco_bkg_fraction_UP
CP::SystematicSet m_reco_bkg_fraction_UP
Definition: MuonScaleFactorCalculator.h:195
top::MuonScaleFactorCalculator::m_trig_sf_syst_DOWN
CP::SystematicSet m_trig_sf_syst_DOWN
Definition: MuonScaleFactorCalculator.h:188
top::MuonScaleFactorCalculator::m_iso_stat_UP
CP::SystematicSet m_iso_stat_UP
Definition: MuonScaleFactorCalculator.h:241
AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
top::MuonScaleFactorCalculator::m_systNominal
CP::SystematicSet m_systNominal
Definition: MuonScaleFactorCalculator.h:148
top::MuonScaleFactorCalculator::m_TTVA_stat_UP
CP::SystematicSet m_TTVA_stat_UP
Definition: MuonScaleFactorCalculator.h:265
top::MuonScaleFactorCalculator::m_reco_syst_UP
CP::SystematicSet m_reco_syst_UP
Definition: MuonScaleFactorCalculator.h:192
top::MuonScaleFactorCalculator::m_reco_stat_DOWN
CP::SystematicSet m_reco_stat_DOWN
Definition: MuonScaleFactorCalculator.h:191
SG::Decorator
Helper class to provide type-safe access to aux data.
Definition: Decorator.h:58
top::MuonScaleFactorCalculator::m_do_muon_isolation_SFs
bool m_do_muon_isolation_SFs
Definition: MuonScaleFactorCalculator.h:182
top::MuonScaleFactorCalculator::m_TTVA_supression_scale_UP
CP::SystematicSet m_TTVA_supression_scale_UP
Definition: MuonScaleFactorCalculator.h:278
top::MuonScaleFactorCalculator::m_iso_stat_DOWN
CP::SystematicSet m_iso_stat_DOWN
Definition: MuonScaleFactorCalculator.h:242
top::MuonScaleFactorCalculator::m_TTVA_qcd_template_DOWN
CP::SystematicSet m_TTVA_qcd_template_DOWN
Definition: MuonScaleFactorCalculator.h:277
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
top::MuonScaleFactorCalculator::m_iso_extrapolation_UP
CP::SystematicSet m_iso_extrapolation_UP
Definition: MuonScaleFactorCalculator.h:262
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
top::MuonScaleFactorCalculator::m_reco_stat_lowpt_DOWN
CP::SystematicSet m_reco_stat_lowpt_DOWN
Definition: MuonScaleFactorCalculator.h:235
top::MuonScaleFactorCalculator::m_muonTriggerScaleFactors
ToolHandle< CP::IMuonTriggerScaleFactors > m_muonTriggerScaleFactors
Definition: MuonScaleFactorCalculator.h:150
top::MuonScaleFactorCalculator::m_iso_extrapolation_DOWN
CP::SystematicSet m_iso_extrapolation_DOWN
Definition: MuonScaleFactorCalculator.h:263
top::MuonScaleFactorCalculator::decorateEfficiencySF
void decorateEfficiencySF(ToolHandle< CP::IMuonEfficiencyScaleFactors > &tool, const CP::SystematicSet &systematic, const xAOD::Muon &muon, const SG::AuxElement::Decorator< float > &decor)
Definition: MuonScaleFactorCalculator.cxx:667
top::MuonScaleFactorCalculator::m_muonEfficiencyCorrectionsToolLooseIso
ToolHandle< CP::IMuonEfficiencyScaleFactors > m_muonEfficiencyCorrectionsToolLooseIso
Definition: MuonScaleFactorCalculator.h:166
top::MuonScaleFactorCalculator::m_iso_mllwindow_DOWN
CP::SystematicSet m_iso_mllwindow_DOWN
Definition: MuonScaleFactorCalculator.h:255
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::MuonScaleFactorCalculator::m_TTVA_lumi_uncert_DOWN
CP::SystematicSet m_TTVA_lumi_uncert_DOWN
Definition: MuonScaleFactorCalculator.h:273
top::MuonScaleFactorCalculator::m_iso_syst_UP
CP::SystematicSet m_iso_syst_UP
Definition: MuonScaleFactorCalculator.h:243
top::MuonScaleFactorCalculator::m_iso_mc_xsec_DOWN
CP::SystematicSet m_iso_mc_xsec_DOWN
Definition: MuonScaleFactorCalculator.h:253
top::MuonScaleFactorCalculator::decorateIDSFandRecoEffSystematicsSoftMuon
void decorateIDSFandRecoEffSystematicsSoftMuon(const xAOD::Muon &muon)
Definition: MuonScaleFactorCalculator.cxx:1374
top::MuonScaleFactorCalculator::m_iso_mllwindow_UP
CP::SystematicSet m_iso_mllwindow_UP
Definition: MuonScaleFactorCalculator.h:254
top::MuonScaleFactorCalculator::m_reco_cr3_DOWN
CP::SystematicSet m_reco_cr3_DOWN
Definition: MuonScaleFactorCalculator.h:222
top::MuonScaleFactorCalculator::m_TTVA_bkg_fraction_DOWN
CP::SystematicSet m_TTVA_bkg_fraction_DOWN
Definition: MuonScaleFactorCalculator.h:271
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
top::MuonScaleFactorCalculator::m_reco_bad_muon_veto_UP
CP::SystematicSet m_reco_bad_muon_veto_UP
Definition: MuonScaleFactorCalculator.h:238
top::MuonScaleFactorCalculator::checkSystematicsImplemented
StatusCode checkSystematicsImplemented(const std::set< std::string > &recommended, const std::set< std::string > &implemented)
Definition: MuonScaleFactorCalculator.cxx:537
top::MuonScaleFactorCalculator::m_decor_idSF_loose
std::string m_decor_idSF_loose
Definition: MuonScaleFactorCalculator.h:175
top::MuonScaleFactorCalculator::m_decor_isoSF
std::string m_decor_isoSF
Definition: MuonScaleFactorCalculator.h:176
top::MuonScaleFactorCalculator::m_reco_qcd_template_UP
CP::SystematicSet m_reco_qcd_template_UP
Definition: MuonScaleFactorCalculator.h:209
top::MuonScaleFactorCalculator::m_decor_triggerSF_loose
std::string m_decor_triggerSF_loose
Definition: MuonScaleFactorCalculator.h:173
top::MuonScaleFactorCalculator::m_TTVA_supression_scale_DOWN
CP::SystematicSet m_TTVA_supression_scale_DOWN
Definition: MuonScaleFactorCalculator.h:279
top::MuonScaleFactorCalculator::m_reco_cr2_DOWN
CP::SystematicSet m_reco_cr2_DOWN
Definition: MuonScaleFactorCalculator.h:220
SG::AuxElement::isAvailable
bool isAvailable(const std::string &name, const std::string &clsname="") const
Check if an aux variable is available for reading.
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
top::MuonScaleFactorCalculator::m_trig_sf_syst_UP
CP::SystematicSet m_trig_sf_syst_UP
Definition: MuonScaleFactorCalculator.h:187
top::MuonScaleFactorCalculator::m_muonEfficiencyCorrectionsToolBadMuonVeto
ToolHandle< CP::IMuonEfficiencyScaleFactors > m_muonEfficiencyCorrectionsToolBadMuonVeto
Definition: MuonScaleFactorCalculator.h:168
AtlCoolConsole.tool
tool
Definition: AtlCoolConsole.py:453
top::MuonScaleFactorCalculator::m_reco_higheta_probeiso_DOWN
CP::SystematicSet m_reco_higheta_probeiso_DOWN
Definition: MuonScaleFactorCalculator.h:226
ConstDataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
top::MuonScaleFactorCalculator::m_muonTriggerScaleFactorsLoose
ToolHandle< CP::IMuonTriggerScaleFactors > m_muonTriggerScaleFactorsLoose
Definition: MuonScaleFactorCalculator.h:151
top::MuonScaleFactorCalculator::m_muonTriggerScaleFactors_R21
ToolHandle< CP::IMuonTriggerScaleFactors > m_muonTriggerScaleFactors_R21
Definition: MuonScaleFactorCalculator.h:159
top::MuonScaleFactorCalculator::m_reco_lumi_uncert_DOWN
CP::SystematicSet m_reco_lumi_uncert_DOWN
Definition: MuonScaleFactorCalculator.h:200
top::MuonScaleFactorCalculator::m_iso_lumi_uncert_DOWN
CP::SystematicSet m_iso_lumi_uncert_DOWN
Definition: MuonScaleFactorCalculator.h:251
TopConfig.h
top::MuonScaleFactorCalculator::applySystematicVariation
void applySystematicVariation(ToolHandle< T > &tool, const CP::SystematicSet &systematic)
Definition: MuonScaleFactorCalculator.cxx:529
EventInfo.h
xAOD::EventInfo_v1
Class describing the basic event information.
Definition: EventInfo_v1.h:43
MuonContainer.h
top::MuonScaleFactorCalculator::m_reco_tagpt_UP
CP::SystematicSet m_reco_tagpt_UP
Definition: MuonScaleFactorCalculator.h:227
top::MuonScaleFactorCalculator::m_TTVA_qcd_template_UP
CP::SystematicSet m_TTVA_qcd_template_UP
Definition: MuonScaleFactorCalculator.h:276
top::MuonScaleFactorCalculator::m_iso_qcd_template_DOWN
CP::SystematicSet m_iso_qcd_template_DOWN
Definition: MuonScaleFactorCalculator.h:257
top::MuonScaleFactorCalculator::decorateIDSFandRecoEff
void decorateIDSFandRecoEff(ToolHandle< CP::IMuonEfficiencyScaleFactors > &tool, const CP::SystematicSet &systematic, const xAOD::Muon &muon, const SG::AuxElement::Decorator< float > &id_sf_decor)
Definition: MuonScaleFactorCalculator.cxx:918
DeMoAtlasDataLoss.runNumber
string runNumber
Definition: DeMoAtlasDataLoss.py:64
top::MuonScaleFactorCalculator::m_reco_truth_UP
CP::SystematicSet m_reco_truth_UP
Definition: MuonScaleFactorCalculator.h:213
top::MuonScaleFactorCalculator::m_TTVA_extrapolation_UP
CP::SystematicSet m_TTVA_extrapolation_UP
Definition: MuonScaleFactorCalculator.h:280
top::MuonScaleFactorCalculator::m_iso_mc_xsec_UP
CP::SystematicSet m_iso_mc_xsec_UP
Definition: MuonScaleFactorCalculator.h:252
MuonScaleFactorCalculator.h
top::MuonScaleFactorCalculator::decorateIDSFandRecoEffSystematics
void decorateIDSFandRecoEffSystematics(const xAOD::Muon &muon)
Definition: MuonScaleFactorCalculator.cxx:928
top::MuonScaleFactorCalculator::m_TTVA_mc_xsec_UP
CP::SystematicSet m_TTVA_mc_xsec_UP
Definition: MuonScaleFactorCalculator.h:274
top::MuonScaleFactorCalculator::m_iso_qcd_template_UP
CP::SystematicSet m_iso_qcd_template_UP
Definition: MuonScaleFactorCalculator.h:256
top::MuonScaleFactorCalculator::decorateTriggerSystematics
void decorateTriggerSystematics(const ConstDataVector< xAOD::MuonContainer > &trigger_SF_muon)
Definition: MuonScaleFactorCalculator.cxx:596
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
ConstDataVector
DataVector adapter that acts like it holds const pointers.
Definition: ConstDataVector.h:76
top::MuonScaleFactorCalculator::m_reco_syst_lowpt_DOWN
CP::SystematicSet m_reco_syst_lowpt_DOWN
Definition: MuonScaleFactorCalculator.h:237
top::MuonScaleFactorCalculator::MuonScaleFactorCalculator
MuonScaleFactorCalculator(const std::string &name)
Definition: MuonScaleFactorCalculator.cxx:19
top::MuonScaleFactorCalculator::m_muonEfficiencyCorrectionsToolLoose
ToolHandle< CP::IMuonEfficiencyScaleFactors > m_muonEfficiencyCorrectionsToolLoose
Definition: MuonScaleFactorCalculator.h:164
top::MuonScaleFactorCalculator::m_decor_TTVA
std::string m_decor_TTVA
Definition: MuonScaleFactorCalculator.h:178
top::MuonScaleFactorCalculator::m_do_muon_isolation_SFs_loose
bool m_do_muon_isolation_SFs_loose
Definition: MuonScaleFactorCalculator.h:183
top::MuonScaleFactorCalculator::m_decor_idSF
std::string m_decor_idSF
Definition: MuonScaleFactorCalculator.h:174
top::MuonScaleFactorCalculator::m_reco_cr2_UP
CP::SystematicSet m_reco_cr2_UP
Definition: MuonScaleFactorCalculator.h:219
top::MuonScaleFactorCalculator::m_TTVA_mc_xsec_DOWN
CP::SystematicSet m_TTVA_mc_xsec_DOWN
Definition: MuonScaleFactorCalculator.h:275
top::MuonScaleFactorCalculator::m_reco_matching_lowpt_DOWN
CP::SystematicSet m_reco_matching_lowpt_DOWN
Definition: MuonScaleFactorCalculator.h:204
top::MuonScaleFactorCalculator::m_TTVA_stat_DOWN
CP::SystematicSet m_TTVA_stat_DOWN
Definition: MuonScaleFactorCalculator.h:266
top::MuonScaleFactorCalculator::m_reco_pt_dependency_DOWN
CP::SystematicSet m_reco_pt_dependency_DOWN
Definition: MuonScaleFactorCalculator.h:208
top::MuonScaleFactorCalculator::m_reco_syst_DOWN
CP::SystematicSet m_reco_syst_DOWN
Definition: MuonScaleFactorCalculator.h:193
top::MuonScaleFactorCalculator::m_reco_stat_UP
CP::SystematicSet m_reco_stat_UP
Definition: MuonScaleFactorCalculator.h:190
top::MuonScaleFactorCalculator::initialize
StatusCode initialize()
Dummy implementation of the initialisation function.
Definition: MuonScaleFactorCalculator.cxx:143
top::MuonScaleFactorCalculator::m_iso_drmuj_UP
CP::SystematicSet m_iso_drmuj_UP
Definition: MuonScaleFactorCalculator.h:248
top::MuonScaleFactorCalculator::m_reco_extrapolation_UP
CP::SystematicSet m_reco_extrapolation_UP
Definition: MuonScaleFactorCalculator.h:229
top::MuonScaleFactorCalculator::m_softmuonEfficiencyCorrectionsTool
ToolHandle< CP::IMuonEfficiencyScaleFactors > m_softmuonEfficiencyCorrectionsTool
Definition: MuonScaleFactorCalculator.h:163
top::MuonScaleFactorCalculator::m_reco_higheta_probeiso_UP
CP::SystematicSet m_reco_higheta_probeiso_UP
Definition: MuonScaleFactorCalculator.h:225
top::MuonScaleFactorCalculator::m_iso_drmuj_DOWN
CP::SystematicSet m_iso_drmuj_DOWN
Definition: MuonScaleFactorCalculator.h:249
top::MuonScaleFactorCalculator::execute
StatusCode execute()
Definition: MuonScaleFactorCalculator.cxx:292
top::MuonScaleFactorCalculator::m_reco_extrapolation_lowpt_UP
CP::SystematicSet m_reco_extrapolation_lowpt_UP
Definition: MuonScaleFactorCalculator.h:231
top::MuonScaleFactorCalculator::m_reco_cr1_DOWN
CP::SystematicSet m_reco_cr1_DOWN
Definition: MuonScaleFactorCalculator.h:218