ATLAS Offline Software
Loading...
Searching...
No Matches
e1hg_systematics.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7#include <cmath>
8#include <cstdlib>
9
11#include "Riostream.h"
12#include "TAxis.h"
13
14e1hg_systematics::e1hg_systematics(const std::string& filename) {
15
16 m_file0 = TFile::Open(filename.c_str());
17
18 for (Int_t ieta = 0; ieta < 8; ieta++) {
19 char name[60];
20 sprintf(name, "elec_%d", ieta);
21 m_helec[ieta] = (TH1D*)m_file0->Get(name);
22 sprintf(name, "unconv_%d", ieta);
23 m_hphot[ieta] = (TH1D*)m_file0->Get(name);
24 sprintf(name, "conv_%d", ieta);
25 m_hphot2[ieta] = (TH1D*)m_file0->Get(name);
26 }
27
28 TAxis* aa = m_helec[0]->GetXaxis();
29 m_etBins = aa->GetXbins();
30}
31
32//=========================================================================
36
37//============================================================================
38// inputs are particle_type (0=elec, 1=reco unconv photon, 2=reco conv photon)
39// energy in MeV
40// eta
41//
42// returned value is alpha = DeltaE / E
43//
44double e1hg_systematics::getAlpha(int particle_type, double energy, double eta,
45 bool interpolate) const {
46
47 // cout << " in getDelta " << endl;
48 if (particle_type < 0 || particle_type > 2)
49 return 0.;
50
51 float aeta = fabs(eta);
52 int ieta = 0;
53 if (aeta < 0.4)
54 ieta = 0;
55 else if (aeta < 0.8)
56 ieta = 1;
57 else if (aeta < 1.1)
58 ieta = 2;
59 else if (aeta < 1.37)
60 ieta = 3;
61 else if (aeta < 1.52)
62 ieta = 4;
63 else if (aeta < 1.80)
64 ieta = 5;
65 else if (aeta < 2.10)
66 ieta = 6;
67 else
68 ieta = 7;
69
70 double energyGeV = energy * 0.001;
71 double et = energyGeV / std::cosh(eta);
72
73 int ibinEt = m_etBins->GetSize() - 2;
74 for (int i = 1; i < m_etBins->GetSize(); i++) {
75 if (et < m_etBins->GetAt(i)) {
76 ibinEt = i - 1;
77 break;
78 }
79 }
80
81 // cout << " energy, et , ibinEt " << energyGeV << " " << et << " " <<
82 // ibinEt << endl;
83
84 Double_t scale = 0.;
85 // HACK: some ES model dependency needs to be introduced
86 /*Default up to es2017_summer
87 if (aeta<1.80) scale=0.;
88 else if (aeta<2.3) scale = 0.050*(aeta-1.8)/0.4 /0.05;
89 else scale=0.025/0.05;
90 */
91
92 if (aeta < 1.80)
93 scale = 0.;
94 else if (aeta < 2.3)
95 scale = (0.050 * (aeta - 1.8) / 0.4 + 0.025) / 0.05;
96 else
97 scale = 0.05 / 0.05;
98
99 if (!interpolate) {
100 if (particle_type == 0)
101 return scale * m_helec[ieta]->GetBinContent(ibinEt + 1);
102 else if (particle_type == 1)
103 return scale * m_hphot[ieta]->GetBinContent(ibinEt + 1);
104 else
105 return scale * m_hphot2[ieta]->GetBinContent(
106 ibinEt + 1); // This is 2, since if particle_type is
107 // not 0,1,2 we have returned 0 above
108 } else {
109 if (particle_type == 0)
110 return scale * m_helec[ieta]->Interpolate(et);
111 else if (particle_type == 1)
112 return scale * m_hphot[ieta]->Interpolate(et);
113 else
114 return scale * m_hphot2[ieta]->Interpolate(
115 et); // This is 2, since if particle_type is not 0,1,2
116 // we have returned 0
117 }
118}
Scalar eta() const
pseudorapidity method
float et(const xAOD::jFexSRJetRoI *j)
const TArrayD * m_etBins
double getAlpha(int particle_type, double energy, double eta, bool interpolate=false) const
particle_type = 0 (electrons), 1 (unconv photons), 2 (conv photons)
e1hg_systematics(const std::string &filename)
constructor (initialization done there reading root files)
Extra patterns decribing particle interation process.