ATLAS Offline Software
Loading...
Searching...
No Matches
get_MaterialResolutionEffect Class Reference

get resolution systematics from material effect (mc12c setup, MVA calibration) More...

#include <get_MaterialResolutionEffect.h>

Inheritance diagram for get_MaterialResolutionEffect:
Collaboration diagram for get_MaterialResolutionEffect:

Public Member Functions

 get_MaterialResolutionEffect ()
 constructor (initialization done there reading root files with resolution fit parameters
 ~get_MaterialResolutionEffect ()
double getDelta (int particle_type, double energy, double eta, int response_type, int isyst) const
 get material effect on resolution from distorted geometry as difference to 40 GeV Et electrons smearing
void store_IBL_PP0_YProjections ()
void setInterpolate (bool interpolate)
void setLevel (MSG::Level lvl)
 Change the current logging level.
Functions providing the same interface as AthMessaging
bool msgLvl (const MSG::Level lvl) const
 Test the output level of the object.
MsgStream & msg () const
 The standard message stream.
MsgStream & msg (const MSG::Level lvl) const
 The standard message stream.

Static Public Member Functions

static double interpolateTH1 (TH1 *hist, double x, bool abs_bins)

Private Member Functions

void initMessaging () const
 Initialize our message level and MessageSvc.

Private Attributes

std::array< std::array< std::array< std::unique_ptr< TH1 >, 3 >, s_nEtaBins >, s_nSysm_hSystPeak
std::array< std::array< std::array< std::unique_ptr< TH1 >, 3 >, s_nEtaBins >, s_nSysm_hSystResol
std::array< std::unique_ptr< TH2 >, 3 > m_hsyst_IBL_PP0
std::array< std::vector< std::unique_ptr< TH1 > >, 3 > m_hsyst_IBL_PP0_ProjectionY
bool m_interpolate = false
const TArrayD * m_etBins
std::string m_nm
 Message source name.
boost::thread_specific_ptr< MsgStream > m_msg_tls
 MsgStream instance (a std::cout like with print-out levels)
std::atomic< IMessageSvc * > m_imsg { nullptr }
 MessageSvc pointer.
std::atomic< MSG::Level > m_lvl { MSG::NIL }
 Current logging level.
std::atomic_flag m_initialized ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
 Messaging initialized (initMessaging)

Static Private Attributes

static const int s_nEtaBins = 8
static const int s_nSys = 4

Detailed Description

get resolution systematics from material effect (mc12c setup, MVA calibration)

Different parameterizations (gaussian core, sigma eff 90% and 80% from crystal ball fits) are available

Definition at line 28 of file get_MaterialResolutionEffect.h.

Constructor & Destructor Documentation

◆ get_MaterialResolutionEffect()

get_MaterialResolutionEffect::get_MaterialResolutionEffect ( )

constructor (initialization done there reading root files with resolution fit parameters

Definition at line 36 of file get_MaterialResolutionEffect.cxx.

37 : asg::AsgMessaging("get_MaterialResolutionEffect") {
38
39 const std::string pType[3] = {"Elec", "Unconv", "Conv"};
40 const std::string sType[s_nSys] = {"A", "CD", "EL", "FMX"};
41
42 const std::string filename = PathResolverFindCalibFile(
43 "ElectronPhotonFourMomentumCorrection/v8/"
44 "histos-systematics-material.root");
45
46 std::unique_ptr<TFile> file0(TFile::Open(filename.c_str(), "READ"));
47
48 for (Int_t isys = 0; isys < s_nSys; isys++) { // 0=A, 1=CD, 2=EL, 3=FMX
49 for (Int_t ieta = 0; ieta < s_nEtaBins; ieta++) {
50 for (Int_t iconv = 0; iconv < 3;
51 iconv++) { // 0=electron, 1=unconverted, 2=converted
52 char name[31];
53 sprintf(name, "syst%s_%s_etaBin_%d", pType[iconv].c_str(),
54 sType[isys].c_str(), ieta);
55 m_hSystPeak.at(isys).at(ieta).at(iconv).reset(
56 checked_cast<TH1*>(file0->Get(name)));
57 m_hSystPeak.at(isys).at(ieta).at(iconv)->SetDirectory(nullptr);
58
59 sprintf(name, "syst%s_sigmaG_%s_etaBin_%d", pType[iconv].c_str(),
60 sType[isys].c_str(), ieta);
61 m_hSystResol.at(isys).at(ieta).at(iconv).reset(
62 checked_cast<TH1*>(file0->Get(name)));
63 m_hSystResol.at(isys).at(ieta).at(iconv)->SetDirectory(nullptr);
64 }
65 }
66 }
67
68 // IBL+PP0 material systematics stored in 2D histograms
69 m_hsyst_IBL_PP0.at(0).reset(
70 checked_cast<TH2*>(file0->Get("systElec_IBLPP0")));
71 m_hsyst_IBL_PP0.at(0)->SetDirectory(nullptr);
72
73 m_hsyst_IBL_PP0.at(1).reset(
74 checked_cast<TH2*>(file0->Get("systUnconv_IBLPP0")));
75 m_hsyst_IBL_PP0.at(1)->SetDirectory(nullptr);
76
77 m_hsyst_IBL_PP0.at(2).reset(
78 checked_cast<TH2*>(file0->Get("systConv_IBLPP0")));
79 m_hsyst_IBL_PP0.at(2)->SetDirectory(nullptr);
80
81 m_etBins = m_hSystResol.at(0).at(0).at(1)->GetXaxis()->GetXbins();
82}
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
std::array< std::array< std::array< std::unique_ptr< TH1 >, 3 >, s_nEtaBins >, s_nSys > m_hSystPeak
std::array< std::unique_ptr< TH2 >, 3 > m_hsyst_IBL_PP0
std::array< std::array< std::array< std::unique_ptr< TH1 >, 3 >, s_nEtaBins >, s_nSys > m_hSystResol

◆ ~get_MaterialResolutionEffect()

get_MaterialResolutionEffect::~get_MaterialResolutionEffect ( )
default

Member Function Documentation

◆ getDelta()

double get_MaterialResolutionEffect::getDelta ( int particle_type,
double energy,
double eta,
int response_type,
int isyst ) const

get material effect on resolution from distorted geometry as difference to 40 GeV Et electrons smearing

particle_type: 0=electron, 1=reco unconverted photon, 2=reco converted photon

energy : energy in MeV

eta : eta

response_type: 0=gaussian core, 1=sigma eff 80%, 2=sigma eff 90%

isyst : 0 configA, 1 configCD, 2 configE, 3 configFMX

returned value is sigmaE/E change in quadrature to resolution

Definition at line 96 of file get_MaterialResolutionEffect.cxx.

98 {
99
100 // cout << " in getDelta " << endl;
101 if (particle_type < 0 || particle_type > 2)
102 return -999;
103 if (response_type < 0 || response_type > 1)
104 return -999;
105
106 float aeta = std::fabs(eta);
107 double energyGeV = energy * 0.001;
108 double et = energyGeV / cosh(eta);
109
110 // IBL+PP0
111 if (isyst == 5) {
112 double et2 = et;
113 if (et < 5.) {
114 et2 = 5.1;
115 }
116 if (et > 2000) {
117 et2 = 1999.;
118 }
119 if (aeta>=2.5) aeta=2.49;
120
121 int ieta = m_hsyst_IBL_PP0.at(particle_type)->GetXaxis()->FindBin(aeta);
122 int iet = m_hsyst_IBL_PP0.at(particle_type)->GetYaxis()->FindBin(et2);
123 if (m_interpolate) {
124 return 0.01*interpolateTH1(m_hsyst_IBL_PP0_ProjectionY[particle_type][ieta - 1].get(), et2, true);
125 }
126 else {
127 return 0.01*m_hsyst_IBL_PP0.at(particle_type)->GetBinContent(ieta, iet);
128 }
129 }
130
131 int ieta = 0;
132 if (aeta < 0.4) {
133 ieta = 0;
134 } else if (aeta < 0.8) {
135 ieta = 1;
136 } else if (aeta < 1.1) {
137 ieta = 2;
138 } else if (aeta < 1.37) {
139 ieta = 3;
140 } else if (aeta < 1.52) {
141 ieta = 4;
142 } else if (aeta < 1.80) {
143 ieta = 5;
144 } else if (aeta < 2.10) {
145 ieta = 6;
146 } else {
147 ieta = 7;
148 }
149
150 int ibinEt = m_etBins->GetSize() - 2;
151 for (int i = 1; i < m_etBins->GetSize(); i++) {
152 if (et < m_etBins->GetAt(i)) {
153 ibinEt = i - 1;
154 break;
155 }
156 }
157
158 const auto& hist = response_type==0 ? m_hSystPeak : m_hSystResol;
159 if (m_interpolate) {
160 return 0.01*interpolateTH1(hist.at(isyst).at(ieta).at(particle_type).get(), et, true);
161 }
162 else {
163 return 0.01*hist.at(isyst).at(ieta).at(particle_type)->GetBinContent(ibinEt+1);
164 }
165
166}
Scalar eta() const
pseudorapidity method
float et(const xAOD::jFexSRJetRoI *j)
static double interpolateTH1(TH1 *hist, double x, bool abs_bins)
std::array< std::vector< std::unique_ptr< TH1 > >, 3 > m_hsyst_IBL_PP0_ProjectionY
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:130

◆ initMessaging()

void AthMessaging::initMessaging ( ) const
privateinherited

Initialize our message level and MessageSvc.

This method should only be called once.

Definition at line 39 of file AthMessaging.cxx.

40{
42 // If user did not set an explicit level, set a default
43 if (m_lvl == MSG::NIL) {
44 m_lvl = m_imsg ?
45 static_cast<MSG::Level>( m_imsg.load()->outputLevel(m_nm) ) :
46 MSG::INFO;
47 }
48}
std::string m_nm
Message source name.
std::atomic< IMessageSvc * > m_imsg
MessageSvc pointer.
std::atomic< MSG::Level > m_lvl
Current logging level.
IMessageSvc * getMessageSvc(bool quiet=false)

◆ interpolateTH1()

double get_MaterialResolutionEffect::interpolateTH1 ( TH1 * hist,
double x,
bool abs_bins )
static

Definition at line 185 of file get_MaterialResolutionEffect.cxx.

186{
187 if (!hist) return 0.;
188 int nbins = hist->GetNbinsX();
189
190 if(x<=hist->GetBinCenter(1)) {
191 return abs_bins? std::abs(hist->GetBinContent(1)) : hist->GetBinContent(1);
192 }
193 else if(x>=hist->GetBinCenter(nbins)) {
194 return abs_bins? std::abs(hist->GetBinContent(nbins)) : hist->GetBinContent(nbins);
195 }
196 else {
197 int xbin = hist->FindBin(x);
198 int xbin0, xbin1;
199 if(x<=hist->GetBinCenter(xbin)) {
200 xbin0 = xbin - 1;
201 xbin1 = xbin;
202 }
203 else {
204 xbin0 = xbin;
205 xbin1 = xbin + 1;
206 }
207 double y0 = abs_bins? std::abs(hist->GetBinContent(xbin0)) : hist->GetBinContent(xbin0);
208 double x0 = hist->GetBinCenter(xbin0);
209 double y1 = abs_bins? std::abs(hist->GetBinContent(xbin1)) : hist->GetBinContent(xbin1);
210 double x1 = hist->GetBinCenter(xbin1);
211 return y0 + (x-x0)*((y1-y0)/(x1-x0));
212 }
213}
#define x

◆ msg() [1/2]

MsgStream & asg::AsgMessaging::msg ( ) const
inherited

The standard message stream.

Returns
A reference to the default message stream of this object.

Definition at line 49 of file AsgMessaging.cxx.

49 {
50#ifndef XAOD_STANDALONE
51 return ::AthMessaging::msg();
52#else // not XAOD_STANDALONE
53 return m_msg;
54#endif // not XAOD_STANDALONE
55 }

◆ msg() [2/2]

MsgStream & asg::AsgMessaging::msg ( const MSG::Level lvl) const
inherited

The standard message stream.

Parameters
lvlThe message level to set the stream to
Returns
A reference to the default message stream, set to level "lvl"

Definition at line 57 of file AsgMessaging.cxx.

57 {
58#ifndef XAOD_STANDALONE
59 return ::AthMessaging::msg( lvl );
60#else // not XAOD_STANDALONE
61 m_msg << lvl;
62 return m_msg;
63#endif // not XAOD_STANDALONE
64 }

◆ msgLvl()

bool asg::AsgMessaging::msgLvl ( const MSG::Level lvl) const
inherited

Test the output level of the object.

Parameters
lvlThe message level to test against
Returns
boolean Indicting if messages at given level will be printed
true If messages at level "lvl" will be printed

Definition at line 41 of file AsgMessaging.cxx.

41 {
42#ifndef XAOD_STANDALONE
43 return ::AthMessaging::msgLvl( lvl );
44#else // not XAOD_STANDALONE
45 return m_msg.msgLevel( lvl );
46#endif // not XAOD_STANDALONE
47 }

◆ setInterpolate()

void get_MaterialResolutionEffect::setInterpolate ( bool interpolate)
inline

Definition at line 50 of file get_MaterialResolutionEffect.h.

50 {
53 }
float interpolate(const CaloRec::Array< 2 > &a, float x, unsigned int degree, unsigned int ycol=1, const CaloRec::Array< 1 > &regions=CaloRec::Array< 1 >(), int n_points=-1, bool fixZero=false)
Polynomial interpolation in a table.

◆ setLevel()

void AthMessaging::setLevel ( MSG::Level lvl)
inherited

Change the current logging level.

Use this rather than msg().setLevel() for proper operation with MT.

Definition at line 28 of file AthMessaging.cxx.

29{
30 m_lvl = lvl;
31}

◆ store_IBL_PP0_YProjections()

void get_MaterialResolutionEffect::store_IBL_PP0_YProjections ( )

Definition at line 168 of file get_MaterialResolutionEffect.cxx.

169{
170 for (size_t i = 0; i < m_hsyst_IBL_PP0.size(); i++) {
171 if (m_hsyst_IBL_PP0[i]) {
172 int nEtaBins = m_hsyst_IBL_PP0[i]->GetNbinsX();
173 // Resize the inner vector to match the size of TH2 x-axis bins
174 m_hsyst_IBL_PP0_ProjectionY[i].resize(nEtaBins);
175 for (int ieta : std::views::iota(1, nEtaBins + 1)) {
176 std::string histName = std::format("h1d_IBL_PP0_ptype{}_EtaBin_{}", i, ieta);
177 m_hsyst_IBL_PP0_ProjectionY[i][ieta - 1].reset( dynamic_cast<TH1*>(m_hsyst_IBL_PP0[i]->ProjectionY(histName.c_str(), ieta, ieta)) );
178 m_hsyst_IBL_PP0_ProjectionY[i][ieta - 1]->SetDirectory( nullptr );
179 }
180 }
181 }
182}
constexpr unsigned nEtaBins

Member Data Documentation

◆ ATLAS_THREAD_SAFE

std::atomic_flag m_initialized AthMessaging::ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
mutableprivateinherited

Messaging initialized (initMessaging)

Definition at line 141 of file AthMessaging.h.

◆ m_etBins

const TArrayD* get_MaterialResolutionEffect::m_etBins
private

Definition at line 66 of file get_MaterialResolutionEffect.h.

◆ m_hsyst_IBL_PP0

std::array<std::unique_ptr<TH2>, 3> get_MaterialResolutionEffect::m_hsyst_IBL_PP0
private

Definition at line 61 of file get_MaterialResolutionEffect.h.

◆ m_hsyst_IBL_PP0_ProjectionY

std::array<std::vector<std::unique_ptr<TH1> >, 3> get_MaterialResolutionEffect::m_hsyst_IBL_PP0_ProjectionY
private

Definition at line 64 of file get_MaterialResolutionEffect.h.

◆ m_hSystPeak

std::array<std::array<std::array<std::unique_ptr<TH1>, 3>, s_nEtaBins>, s_nSys> get_MaterialResolutionEffect::m_hSystPeak
private

Definition at line 59 of file get_MaterialResolutionEffect.h.

◆ m_hSystResol

std::array<std::array<std::array<std::unique_ptr<TH1>, 3>, s_nEtaBins>, s_nSys> get_MaterialResolutionEffect::m_hSystResol
private

Definition at line 60 of file get_MaterialResolutionEffect.h.

◆ m_imsg

std::atomic<IMessageSvc*> AthMessaging::m_imsg { nullptr }
mutableprivateinherited

MessageSvc pointer.

Definition at line 135 of file AthMessaging.h.

135{ nullptr };

◆ m_interpolate

bool get_MaterialResolutionEffect::m_interpolate = false
private

Definition at line 65 of file get_MaterialResolutionEffect.h.

◆ m_lvl

std::atomic<MSG::Level> AthMessaging::m_lvl { MSG::NIL }
mutableprivateinherited

Current logging level.

Definition at line 138 of file AthMessaging.h.

138{ MSG::NIL };

◆ m_msg_tls

boost::thread_specific_ptr<MsgStream> AthMessaging::m_msg_tls
mutableprivateinherited

MsgStream instance (a std::cout like with print-out levels)

Definition at line 132 of file AthMessaging.h.

◆ m_nm

std::string AthMessaging::m_nm
privateinherited

Message source name.

Definition at line 129 of file AthMessaging.h.

◆ s_nEtaBins

const int get_MaterialResolutionEffect::s_nEtaBins = 8
staticprivate

Definition at line 57 of file get_MaterialResolutionEffect.h.

◆ s_nSys

const int get_MaterialResolutionEffect::s_nSys = 4
staticprivate

Definition at line 58 of file get_MaterialResolutionEffect.h.


The documentation for this class was generated from the following files: