ATLAS Offline Software
TauCombinedTES.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 #include "TFile.h"
8 
9 #include <cmath>
10 
11 
12 
13 TauCombinedTES::TauCombinedTES(const std::string& name) :
15  declareProperty("addCalibrationResultVariables", m_addCalibrationResultVariables = false);
16  declareProperty("WeightFileName", m_calFileName = "");
17  declareProperty("useMvaResolution", m_useMvaResolution = false);
18 }
19 
20 
21 
23 
24  std::string calFilePath = find_file(m_calFileName);
25  std::unique_ptr<TFile> calFile(TFile::Open(calFilePath.c_str(), "READ"));
26  ATH_MSG_INFO("Using calibration file: " << calFilePath);
27 
28  // 1D array with decay mode as index
29  TH1F* hist = nullptr;
30  TF1* tf1 = nullptr;
31  std::string histName = "";
32  for (size_t decayModeIndex = 0; decayModeIndex < DecayModeBinning; ++ decayModeIndex) {
33  histName = "CorrelationCoeff_tauRec_" + m_decayModeNames[decayModeIndex];
34  hist = dynamic_cast<TH1F*> (calFile->Get(histName.c_str()));
35  if(hist) {
36  hist->SetDirectory(nullptr);
37  m_correlationHists[decayModeIndex] = std::unique_ptr<TH1F>(hist);
38  ATH_MSG_DEBUG("Adding corr hist: " << histName);
39  }
40  else {
41  ATH_MSG_FATAL("Failed to get an object with name " << histName);
42  return StatusCode::FAILURE;
43  }
44 
45  histName = "nSigmaCompatibility_" + m_decayModeNames[decayModeIndex];
46  tf1 = dynamic_cast<TF1*> (calFile->Get(histName.c_str()));
47  if(tf1) {
48  m_nSigmaCompatibility[decayModeIndex] = std::unique_ptr<TF1>(tf1);
49  ATH_MSG_DEBUG("Adding compatibility TF1: " << histName);
50  }
51  else {
52  ATH_MSG_FATAL("Failed to get an object with name " << histName);
53  return StatusCode::FAILURE;
54  }
55  }
56 
57  // 2D array with (eta, decay mode) as index
58  TGraph* graph = nullptr;
59  std::string graphName="";
60  for (size_t decayModeIndex = 0; decayModeIndex < DecayModeBinning; ++decayModeIndex) {
61  for (size_t etaIndex = 0; etaIndex < EtaBinning; ++etaIndex) {
62  // Calo TES: relative bias
63  graphName = "tauRec/Graph_from_MeanEt_tauRec_" + m_decayModeNames[decayModeIndex] + "_" + m_etaBinNames[etaIndex];
64  graph = dynamic_cast<TGraph*> (calFile->Get(graphName.c_str()));
65  if(graph) {
66  m_caloRelBiasMaxEt[decayModeIndex][etaIndex] = TMath::MaxElement(graph->GetN(), graph->GetX());
67  m_caloRelBias[decayModeIndex][etaIndex] = std::unique_ptr<TGraph>(graph);
68  ATH_MSG_DEBUG("Adding graph: " << graphName);
69  }
70  else {
71  ATH_MSG_FATAL("Failed to get an object with name " << graphName);
72  return StatusCode::FAILURE;
73  }
74 
75  // Calo TES: resolution
76  graphName = "tauRec/Graph_from_ResolutionEt_tauRec_" + m_decayModeNames[decayModeIndex] + "_" + m_etaBinNames[etaIndex];
77  graph = dynamic_cast<TGraph*> (calFile->Get(graphName.c_str()));
78  if(graph){
79  m_caloResMaxEt[decayModeIndex][etaIndex] = TMath::MaxElement(graph->GetN(), graph->GetX());
80  m_caloRes[decayModeIndex][etaIndex] = std::unique_ptr<TGraph>(graph);
81  ATH_MSG_DEBUG("Adding graph: " << graphName);
82  }
83  else {
84  ATH_MSG_FATAL("Failed to get an object with name " << graphName);
85  return StatusCode::FAILURE;
86  }
87 
88  // PanTau: relative bias
89  graphName = "ConstituentEt/Graph_from_MeanEt_ConstituentEt_" + m_decayModeNames[decayModeIndex] + "_" + m_etaBinNames[etaIndex];
90  graph = dynamic_cast<TGraph*> (calFile->Get(graphName.c_str()));
91  if(graph){
92  m_panTauRelBiasMaxEt[decayModeIndex][etaIndex] = TMath::MaxElement(graph->GetN(), graph->GetX());
93  m_panTauRelBias[decayModeIndex][etaIndex] = std::unique_ptr<TGraph>(graph);
94  ATH_MSG_DEBUG("Adding graph: " << graphName);
95  }
96  else {
97  ATH_MSG_FATAL("Failed to get an object with name " << graphName);
98  return StatusCode::FAILURE;
99  }
100 
101  // PanTau: resolution
102  graphName = "ConstituentEt/Graph_from_ResolutionEt_ConstituentEt_" + m_decayModeNames[decayModeIndex] + "_" + m_etaBinNames[etaIndex];
103  graph = dynamic_cast<TGraph*> (calFile->Get(graphName.c_str()));
104  if(graph){
105  m_panTauResMaxEt[decayModeIndex][etaIndex] = TMath::MaxElement(graph->GetN(), graph->GetX());
106  m_panTauRes[decayModeIndex][etaIndex] = std::unique_ptr<TGraph>(graph);
107  ATH_MSG_DEBUG("Adding graph: " << graphName);
108  }
109  else {
110  ATH_MSG_FATAL("Failed to get an object with name " << graphName);
111  return StatusCode::FAILURE;
112  }
113 
114  // MVA resolution, optional
115  if(m_useMvaResolution) {
116  graphName = "FinalCalib/Graph_from_ResolutionEt_FinalCalib_" + m_decayModeNames[decayModeIndex] + "_" + m_etaBinNames[etaIndex];
117  graph = dynamic_cast<TGraph*> (calFile->Get(graphName.c_str()));
118  if(graph){
119  m_mvaResMaxEt[decayModeIndex][etaIndex] = TMath::MaxElement(graph->GetN(), graph->GetX());
120  m_mvaRes[decayModeIndex][etaIndex] = std::unique_ptr<TGraph>(graph);
121  ATH_MSG_DEBUG("Adding graph: " << graphName);
122  }
123  else {
124  ATH_MSG_FATAL("Failed to get an object with name " << graphName);
125  return StatusCode::FAILURE;
126  }
127  }
128  }
129  }
130  calFile->Close();
131 
132  return StatusCode::SUCCESS;
133 }
134 
135 
136 
138  TLorentzVector combinedP4(tau.p4(xAOD::TauJetParameters::TauEnergyScale));
139 
140  // used to store immediate results
142 
143  // Parameterization is only valid for |eta| < 2.5, and decay modes of 1p0n, 1p1n, 1pXn, 3p0n, 3pXn
144  // If these variables of the given tau candidate are outside the range, we just use calo TES
145  if(isValid(tau)) {
146  combinedP4 = getCombinedP4(tau, variables);
147  }
148 
149  static const SG::AuxElement::Accessor<float> decPtCombined("ptCombined");
150  static const SG::AuxElement::Accessor<float> decEtaCombined("etaCombined");
151  static const SG::AuxElement::Accessor<float> decPhiCombined("phiCombined");
152  static const SG::AuxElement::Accessor<float> decMCombined("mCombined");
153 
154  decPtCombined(tau) = combinedP4.Pt();
155  decEtaCombined(tau) = combinedP4.Eta();
156  decPhiCombined(tau) = combinedP4.Phi();
157  decMCombined(tau) = combinedP4.M();
158 
160  static const SG::AuxElement::Accessor<float> decPtConstituent("pt_constituent");
161  static const SG::AuxElement::Accessor<float> decPtTauRecCalibrated("pt_tauRecCalibrated");
162  static const SG::AuxElement::Accessor<float> decPtWeighted("pt_weighted");
163  static const SG::AuxElement::Accessor<float> decWeightWeighted("weight_weighted");
164  static const SG::AuxElement::Accessor<float> decSigmaCompatibility("sigma_compatibility");
165  static const SG::AuxElement::Accessor<float> decSigmaTaurec("sigma_tauRec");
166  static const SG::AuxElement::Accessor<float> decSigmaConstituent("sigma_constituent");
167  static const SG::AuxElement::Accessor<float> decCorrelationCoefficient("correlation_coefficient");
168 
169  decPtConstituent(tau) = variables.pt_constituent;
170  decPtTauRecCalibrated(tau) = variables.pt_tauRecCalibrated;
171  decPtWeighted(tau) = variables.pt_weighted;
172  decWeightWeighted(tau) = variables.weight;
173  //decSigmaCombined(tau) = variables.sigma_combined;
174  decSigmaCompatibility(tau) = variables.sigma_compatibility;
175  decSigmaTaurec(tau) = variables.sigma_tauRec;
176  decSigmaConstituent(tau) = variables.sigma_constituent;
177  decCorrelationCoefficient(tau) = variables.corrcoeff;
178  }
179 
180  return StatusCode::SUCCESS;
181 }
182 
183 
184 
186  if (! isValid(tau)) return false;
187 
189  int decayModeIndex = getDecayModeIndex(decayMode);
190 
191  int etaIndex = getEtaIndex(tau.etaTauEnergyScale());
192 
193  double caloSigma = tau.ptTauEnergyScale() * getCaloResolution(tau.ptTauEnergyScale(), decayModeIndex, etaIndex);
194  double deltaEt = tau.ptFinalCalib() - tau.ptTauEnergyScale();
195 
196  bool useCaloPt = false;
197 
198  // FIXME: should we use combinedSigma here ??
199  if (std::abs(deltaEt) > 5 * caloSigma) {
200  useCaloPt = true;
201  }
202 
203  return useCaloPt;
204 }
205 
206 
207 
209  // It would be better to retrieve eta bins from the calibration file, e.g. for upgrade studies!
210  if (std::abs(eta) < 0.3) {
211  return 0;
212  }
213  if (std::abs(eta) < 0.8) {
214  return 1;
215  }
216  if (std::abs(eta) < 1.3) {
217  return 2;
218  }
219  if (std::abs(eta) < 1.6) {
220  return 3;
221  }
222  // slightly extend the tau eta range, as |eta|<2.5 applies to the seed jet
223  if (std::abs(eta) < 2.6) {
224  return 4;
225  }
226 
227  return 99;
228 }
229 
230 
231 
235 
236  return static_cast<xAOD::TauJetParameters::DecayMode>(decayMode);
237 }
238 
239 
240 
242  return static_cast<int>(decayMode);
243 }
244 
245 
246 
247 bool TauCombinedTES::isValid(const xAOD::TauJet& tau) const {
249  if (decayMode < xAOD::TauJetParameters::Mode_1p0n || decayMode > xAOD::TauJetParameters::Mode_3pXn) {
250  ATH_MSG_DEBUG("Decay mode is not supported !");
251  return false;
252  }
253 
254  int etaIndex = getEtaIndex(tau.etaTauEnergyScale());
255  if (etaIndex > 4) {
256  ATH_MSG_DEBUG("Eta is out of the supported range !");
257  return false;
258  }
259 
260  return true;
261 }
262 
263 
264 
265 double TauCombinedTES::getCorrelation(int decayModeIndex, int etaIndex) const {
266  return m_correlationHists[decayModeIndex]->GetBinContent(etaIndex);
267 }
268 
269 
270 
271 double TauCombinedTES::getCaloCalEt(double caloEt,
272  int decayModeIndex,
273  int etaIndex) const {
274  // ratio stored in the calibration graph equals (caloEt-truthEt)/caloEt
275  double ratio = 0.0;
276 
277  // FIXME: If caloEt is larger than max et, could we use the ratio at
278  // max et, instead of setting it to zero
279  if (caloEt <= m_caloRelBiasMaxEt[decayModeIndex][etaIndex]) {
280  ratio = m_caloRelBias[decayModeIndex][etaIndex]->Eval(caloEt);
281  }
282 
283  double caloCalEt = caloEt - ratio * caloEt;
284 
285  return caloCalEt;
286 }
287 
288 
289 
290 double TauCombinedTES::getPanTauCalEt(double panTauEt,
291  int decayModeIndex,
292  int etaIndex) const {
293  // ratio stored in the calibration graph equals (panTauEt-truthEt)/panTauEt
294  double ratio = 0.0;
295 
296  // Substructure is badly determined at high pt, as track momentum is pooryly measured
297  if (panTauEt <= m_panTauRelBiasMaxEt[decayModeIndex][etaIndex]) {
298  ratio = m_panTauRelBias[decayModeIndex][etaIndex]->Eval(panTauEt);
299  }
300 
301  double panTauCalEt = panTauEt - ratio * panTauEt;
302 
303  return panTauCalEt;
304 }
305 
306 
307 
309  // Assume the resolution to be 100% when no parametrisation is available
310  // "validity" criteria might have to be revised if such "invalid taus" end up in analyses
311  if (!isValid(tau) || !m_useMvaResolution) return 1.0;
312 
314  int decayModeIndex = getDecayModeIndex(decayMode);
315 
316  int etaIndex = getEtaIndex(tau.etaFinalCalib());
317 
318  double pt = std::min(tau.ptFinalCalib(), m_mvaResMaxEt[decayModeIndex][etaIndex]);
319  double resolution = m_mvaRes[decayModeIndex][etaIndex]->Eval(pt);
320 
321  return resolution;
322 }
323 
324 
325 
326 double TauCombinedTES::getCaloResolution(double et, int decayModeIndex, int etaIndex) const {
327  double x = std::min(et, m_caloResMaxEt[decayModeIndex][etaIndex]);
328  double resolution = m_caloRes[decayModeIndex][etaIndex]->Eval(x);
329 
330  return resolution;
331 }
332 
333 
334 
335 double TauCombinedTES::getPanTauResolution(double et, int decayModeIndex, int etaIndex) const {
336  double x = std::min(et, m_panTauResMaxEt[decayModeIndex][etaIndex]);
337  double resolution = m_panTauRes[decayModeIndex][etaIndex]->Eval(x);
338 
339  return resolution;
340 }
341 
342 
343 
344 double TauCombinedTES::getWeight(double caloSigma,
345  double panTauSigma,
346  double correlation) const {
347  double cov = correlation * caloSigma * panTauSigma;
348  double caloWeight = std::pow(panTauSigma, 2) - cov;
349  double panTauWeight = std::pow(caloSigma, 2) - cov;
350 
351  double weight = (caloWeight + panTauWeight !=0.) ? caloWeight/(caloWeight + panTauWeight) : 0.;
352  // enforce that the weight is within [0,1]
353  return std::clamp(weight, 0., 1.);
354 }
355 
356 
357 
358 double TauCombinedTES::getCombinedSigma(double caloSigma,
359  double panTauSigma,
360  double correlation) const {
361  double numerator = std::pow(caloSigma, 2) * std::pow(panTauSigma, 2) * (1 - std::pow(correlation, 2));
362  double denominator = std::pow(caloSigma, 2) + std::pow(panTauSigma, 2)
363  - 2 * correlation * caloSigma * panTauSigma;
364 
365  return std::sqrt(numerator/denominator);
366 }
367 
368 
369 
371  double panTauSigma,
372  double correlation) const {
373  double compatibilitySigma2 = std::pow(caloSigma, 2) + std::pow(panTauSigma, 2) - 2 * correlation * caloSigma * panTauSigma;
374 
375  return std::sqrt(compatibilitySigma2);
376 }
377 
378 
379 
380 double TauCombinedTES::getNsigmaCompatibility(double et, int decayModeIndex) const {
381  double nsigma = m_nSigmaCompatibility.at(decayModeIndex)->Eval(et);
382 
383  if (nsigma < 0.) return 0.;
384 
385  return nsigma;
386 }
387 
388 
389 
390 double TauCombinedTES::getCombinedEt(double caloEt,
391  double panTauEt,
393  float eta,
394  Variables& variables) const {
395  // Obtain the index of calibration graph
396  int decayModeIndex = getDecayModeIndex(decayMode);
397  int etaIndex = getEtaIndex(eta);
398 
399  // Obtain the calibration parameter based on the index
400  // -- Correlation between calo TES and PanTau
401  double correlation = getCorrelation(decayModeIndex, etaIndex);
402 
403  // -- Sigma of the difference between reconstruted et and truth et at calo TES
404  double caloSigma = caloEt * getCaloResolution(caloEt, decayModeIndex, etaIndex);
405  if (0. == caloSigma) {
406  ATH_MSG_WARNING("Calo TES: Et resolution at " << caloEt << " is 0");
407  m_caloRes[decayModeIndex][etaIndex]->Print("all");
408  return 0.;
409  }
410 
411  // -- Sigma of the difference between reconstruted et and truth et at PanTau
412  double panTauSigma = panTauEt * getPanTauResolution(panTauEt, decayModeIndex, etaIndex);
413  if (0. == panTauSigma) {
414  ATH_MSG_WARNING("PanTau: Et resolution at " << panTauEt << " is 0");
415  m_panTauRes[decayModeIndex][etaIndex]->Print("all");
416  return 0.;
417  }
418 
419  // -- Et at calo TES with bias corrected
420  double caloCalEt = getCaloCalEt(caloEt, decayModeIndex, etaIndex);
421 
422  // -- Et at PanTau with bias corrected
423  double panTauCalEt = getPanTauCalEt(panTauEt, decayModeIndex, etaIndex);
424 
425  // Combination of calo TES and PanTau
426  // FIXME: A more consistent way would be calculating the weight use bias corrected Et as input
427  double weight = getWeight(caloSigma, panTauSigma, correlation);
428  double weightedEt = weight * caloCalEt + (1 - weight) * panTauCalEt;
429  double compatibilitySigma = getCompatibilitySigma(caloSigma, panTauSigma, correlation);
430  //double combinedSigma = getCombinedSigma(caloSigma, panTauSigma, correlation);
431 
432  // FIXME: weighteEt will be updated in case the difference of calo TES and PanTau is too large
433  variables.pt_weighted = weightedEt;
434 
435  // If the difference of calo TES and PanTau is too large, the combined result
436  // may not be reliable
437  // FIXME: A more consistent way would be calculating the NsigmaCompatibility use caloCalEt
438  double deltaEt = caloCalEt - panTauCalEt;
439  if (std::abs(deltaEt) > getNsigmaCompatibility(caloEt, decayModeIndex) * compatibilitySigma) {
440  // FIXME: Why not use caloCalEt here ?
441  weightedEt = caloEt;
442  }
443 
444  // Store the results
445  variables.corrcoeff = correlation;
446  variables.sigma_tauRec = caloSigma;
447  variables.sigma_constituent = panTauSigma;
448  variables.pt_tauRecCalibrated = caloCalEt;
449  variables.pt_constituent = panTauCalEt;
450  variables.weight = weight;
451  variables.sigma_compatibility = compatibilitySigma;
452  //variables.sigma_combined = combinedSigma;
453 
454  ATH_MSG_DEBUG("Intermediate results\n" <<
455  "coff: " << correlation << " sigma(calo): " << caloSigma << " sigma(constituent): " << panTauSigma <<
456  "\ncalibrated et(calo): " << caloCalEt << " calibrated et(constituent): " << panTauCalEt <<
457  "\nweight:" << weight << " combined et: " << weightedEt << " compatibility sigma: " << compatibilitySigma);
458 
459  return weightedEt;
460 }
461 
462 
463 
464 TLorentzVector TauCombinedTES::getCombinedP4(const xAOD::TauJet& tau, Variables& variables) const {
465  TLorentzVector caloP4 = tau.p4(xAOD::TauJetParameters::TauEnergyScale);
466  TLorentzVector panTauP4 = tau.p4(xAOD::TauJetParameters::PanTauCellBased);
467 
468  ATH_MSG_DEBUG("Four momentum at calo TES, pt: " << caloP4.Pt() << " eta: " << caloP4.Eta() <<
469  " phi: " << caloP4.Phi() << " mass: " << caloP4.M());
470  ATH_MSG_DEBUG("Four momentum at PanTau, pt: " << panTauP4.Pt() << " eta: " << panTauP4.Eta() <<
471  " phi: " << panTauP4.Phi() << " mass: " << panTauP4.M());
472 
474 
475  double combinedEt = getCombinedEt(caloP4.Et(), panTauP4.Et(), decayMode, caloP4.Eta(), variables);
476 
477  // Et is the combination of calo TES and PanTau, but eta and phi is from PanTau
478  TLorentzVector combinedP4;
479  combinedP4.SetPtEtaPhiM(combinedEt, panTauP4.Eta(), panTauP4.Phi(), 0.);
480 
481  ATH_MSG_DEBUG("Combined four momentum, pt: " << combinedP4.Pt() << " eta: " << combinedP4.Eta() <<
482  " phi: " << combinedP4.Phi() << " mass: " << combinedP4.M());
483 
484  return combinedP4;
485 }
TauCombinedTES::getCaloCalEt
double getCaloCalEt(double et, int decayModeIndex, int etaIndex) const
Get the Et at the calo TES after calibration correction.
Definition: TauCombinedTES.cxx:271
xAOD::TauJetParameters::PanTau_DecayMode
@ PanTau_DecayMode
Definition: TauDefs.h:360
TauCombinedTES::getMvaEnergyResolution
double getMvaEnergyResolution(const xAOD::TauJet &tau) const
Get MVA Et resolution, invoked by METSignificance.
Definition: TauCombinedTES.cxx:308
TauCombinedTES::m_mvaResMaxEt
std::array< std::array< double, EtaBinning >, DecayModeBinning > m_mvaResMaxEt
Maximum Et of m_mvaRes.
Definition: TauCombinedTES.h:143
et
Extra patterns decribing particle interation process.
TauCombinedTES::getUseCaloPtFlag
bool getUseCaloPtFlag(const xAOD::TauJet &tau) const
Whether to use calo pt, invoked by TauSmearing tool.
Definition: TauCombinedTES.cxx:185
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
xAOD::TauJet_v3::etaTauEnergyScale
double etaTauEnergyScale() const
checkCoolLatestUpdate.variables
variables
Definition: checkCoolLatestUpdate.py:13
AddEmptyComponent.histName
string histName
Definition: AddEmptyComponent.py:64
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
SG::Accessor
Helper class to provide type-safe access to aux data.
Definition: Control/AthContainers/AthContainers/Accessor.h:66
TauCombinedTES::getDecayModeIndex
int getDecayModeIndex(xAOD::TauJetParameters::DecayMode decayMode) const
Get the index of decay mode in the calibration histogram.
Definition: TauCombinedTES.cxx:241
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
TauCombinedTES::EtaBinning
@ EtaBinning
Definition: TauCombinedTES.h:107
plotmaker.hist
hist
Definition: plotmaker.py:148
TauCombinedTES::isValid
bool isValid(const xAOD::TauJet &tau) const
Whether the tau candidate is valid for the calculation.
Definition: TauCombinedTES.cxx:247
TauCombinedTES::m_caloRelBiasMaxEt
std::array< std::array< double, EtaBinning >, DecayModeBinning > m_caloRelBiasMaxEt
Maximum Et of m_caloRelBias.
Definition: TauCombinedTES.h:119
xAOD::TauJet_v3::etaFinalCalib
double etaFinalCalib() const
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
TauRecToolBase
The base class for all tau tools.
Definition: TauRecToolBase.h:21
plotBeamSpotVxVal.cov
cov
Definition: plotBeamSpotVxVal.py:201
TauCombinedTES::getEtaIndex
int getEtaIndex(float eta) const
Get the index of eta in the calibration histogram.
Definition: TauCombinedTES.cxx:208
test_pyathena.pt
pt
Definition: test_pyathena.py:11
TauCombinedTES::initialize
virtual StatusCode initialize() override
Tool initializer.
Definition: TauCombinedTES.cxx:22
TauCombinedTES::DecayModeBinning
@ DecayModeBinning
Definition: TauCombinedTES.h:107
TauCombinedTES::m_nSigmaCompatibility
std::array< std::unique_ptr< TF1 >, DecayModeBinning > m_nSigmaCompatibility
Maximum tolerence in unit of combined sigma, as a function of calo Et.
Definition: TauCombinedTES.h:149
xAOD::TauJet_v3::panTauDetail
bool panTauDetail(TauJetParameters::PanTauDetails panTauDetail, int &value) const
Get and set values of pantau details variables via enum.
Definition: TauJet_v3.cxx:367
x
#define x
Dedxcorrection::resolution
double resolution[nGasTypes][nParametersResolution]
Definition: TRT_ToT_Corrections.h:46
TauCombinedTES::getCorrelation
double getCorrelation(int decayModeIndex, int etaIndex) const
Get correlation coefficient between the calo TES and PanTau.
Definition: TauCombinedTES.cxx:265
TauCombinedTES::getCombinedSigma
double getCombinedSigma(double caloSigma, double panTauSigma, double correlation) const
Get the combined sigma of calo TES and PanTau.
Definition: TauCombinedTES.cxx:358
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:200
xAOD::TauJetParameters::DecayMode
DecayMode
Definition: TauDefs.h:385
xAOD::TauJet_v3::ptTauEnergyScale
double ptTauEnergyScale() const
TauCombinedTES::Variables
Definition: TauCombinedTES.h:47
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TauCombinedTES::m_decayModeNames
const std::array< std::string, DecayModeBinning > m_decayModeNames
Decay mode binning in the calibration graph/hist.
Definition: TauCombinedTES.h:110
TauCombinedTES::getCaloResolution
double getCaloResolution(double et, int decayModeIndex, int etaIndex) const
Get the resolution of Et at the calo TES.
Definition: TauCombinedTES.cxx:326
xAOD::TauJet_v3
Class describing a tau jet.
Definition: TauJet_v3.h:41
TauCombinedTES::getCompatibilitySigma
double getCompatibilitySigma(double caloSigma, double panTauSigma, double correlation) const
Get the compatibility sigma of calo TES and PanTau.
Definition: TauCombinedTES.cxx:370
TauCombinedTES::m_correlationHists
std::array< std::unique_ptr< TH1F >, DecayModeBinning > m_correlationHists
Calibration histogram: correlation coefficient of calo TES and PanTau.
Definition: TauCombinedTES.h:146
TauCombinedTES::m_panTauRelBias
std::array< std::array< std::unique_ptr< TGraph >, EtaBinning >, DecayModeBinning > m_panTauRelBias
Calibration graph: mean of bias/panTauEt as a funtion of panTauEt.
Definition: TauCombinedTES.h:128
TauCombinedTES::m_etaBinNames
const std::array< std::string, EtaBinning > m_etaBinNames
Eta binning in the calibration graph.
Definition: TauCombinedTES.h:113
xAOD::TauJetParameters::PanTauCellBased
@ PanTauCellBased
Definition: TauDefs.h:344
TauCombinedTES::getWeight
double getWeight(double caloSigma, double panTauSigma, double correlatioon) const
Get the weight of calo TES.
Definition: TauCombinedTES.cxx:344
ReadTripsProbsFromCool.denominator
denominator
Definition: ReadTripsProbsFromCool.py:96
TauCombinedTES::getDecayMode
xAOD::TauJetParameters::DecayMode getDecayMode(const xAOD::TauJet &tau) const
Get the decay mode of the tau candidate.
Definition: TauCombinedTES.cxx:232
TauCombinedTES.h
xAOD::TauJetParameters::TauEnergyScale
@ TauEnergyScale
Definition: TauDefs.h:339
TauCombinedTES::execute
virtual StatusCode execute(xAOD::TauJet &xTau) const override
Execute - called for each tau candidate.
Definition: TauCombinedTES.cxx:137
min
#define min(a, b)
Definition: cfImp.cxx:40
TauCombinedTES::getPanTauResolution
double getPanTauResolution(double et, int decayModeIndex, int etaIndex) const
Get the resolution of Et at PanTau.
Definition: TauCombinedTES.cxx:335
TauCombinedTES::m_panTauRelBiasMaxEt
std::array< std::array< double, EtaBinning >, DecayModeBinning > m_panTauRelBiasMaxEt
Maximum Et of m_panTauRelBias.
Definition: TauCombinedTES.h:131
TauCombinedTES::getPanTauCalEt
double getPanTauCalEt(double panTauEt, int decayModeIndex, int etaIndex) const
Get the Et at PanTau after calibration correction.
Definition: TauCombinedTES.cxx:290
TauCombinedTES::getNsigmaCompatibility
double getNsigmaCompatibility(double caloEt, int decayModeIndex) const
Get the allowed difference between calo TES and PanTau.
Definition: TauCombinedTES.cxx:380
TauCombinedTES::m_calFileName
std::string m_calFileName
Name of the calibration file.
Definition: TauCombinedTES.h:41
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
TauRecToolBase::find_file
std::string find_file(const std::string &fname) const
Definition: TauRecToolBase.cxx:19
TauCombinedTES::TauCombinedTES
TauCombinedTES(const std::string &name="TauCombinedTES")
Definition: TauCombinedTES.cxx:13
TauCombinedTES::m_caloRelBias
std::array< std::array< std::unique_ptr< TGraph >, EtaBinning >, DecayModeBinning > m_caloRelBias
Calibration graph: mean of bias/caloEt as a function of caloEt.
Definition: TauCombinedTES.h:116
TauCombinedTES::m_caloResMaxEt
std::array< std::array< double, EtaBinning >, DecayModeBinning > m_caloResMaxEt
Maximum Et of m_caloRes.
Definition: TauCombinedTES.h:125
python.compareTCTs.ratio
ratio
Definition: compareTCTs.py:295
TH1F
Definition: rootspy.cxx:320
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
xAOD::TauJet_v3::p4
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition: TauJet_v3.cxx:97
xAOD::TauJetParameters::Mode_3pXn
@ Mode_3pXn
Definition: TauDefs.h:390
TauCombinedTES::m_caloRes
std::array< std::array< std::unique_ptr< TGraph >, EtaBinning >, DecayModeBinning > m_caloRes
Calibration graph: resolution at Calo TES as a function of caloEt.
Definition: TauCombinedTES.h:122
TauCombinedTES::m_panTauResMaxEt
std::array< std::array< double, EtaBinning >, DecayModeBinning > m_panTauResMaxEt
Maximum Et of m_panTauRes.
Definition: TauCombinedTES.h:137
xAOD::TauJetParameters::Mode_Error
@ Mode_Error
Definition: TauDefs.h:393
TauCombinedTES::getCombinedEt
double getCombinedEt(double caloEt, double et_substructure, xAOD::TauJetParameters::DecayMode decayMode, float eta, Variables &variables) const
Get the combined Et of calo TES and PanTau.
Definition: TauCombinedTES.cxx:390
TauCombinedTES::m_mvaRes
std::array< std::array< std::unique_ptr< TGraph >, EtaBinning >, DecayModeBinning > m_mvaRes
Calibration graph: MVA TES resolution as a function of MVA pt.
Definition: TauCombinedTES.h:140
TauCombinedTES::m_useMvaResolution
bool m_useMvaResolution
Use MVA TES resolution (for MET significance)
Definition: TauCombinedTES.h:44
TauCombinedTES::getCombinedP4
TLorentzVector getCombinedP4(const xAOD::TauJet &tau, Variables &variables) const
Get the weighted four momentum of calo TES and PanTau.
Definition: TauCombinedTES.cxx:464
xAOD::TauJet_v3::ptFinalCalib
double ptFinalCalib() const
TauCombinedTES::m_panTauRes
std::array< std::array< std::unique_ptr< TGraph >, EtaBinning >, DecayModeBinning > m_panTauRes
Calibration graph: resolution at PanTau as a function of panTauEt.
Definition: TauCombinedTES.h:134
TauCombinedTES::m_addCalibrationResultVariables
bool m_addCalibrationResultVariables
Switch for decorating the intermediate results, for combined TES tuning.
Definition: TauCombinedTES.h:38