8#include "TGraphAsymmErrors.h"
52 for (
int i = 0; i < 3; i++) {
54 for (
int j = 0; j < 2; j++)
73 return StatusCode::SUCCESS;
82 float corrected_isolation = input.isolationValue(isol) -
GetPtCorrection(input, isol);
83 return corrected_isolation;
106 float isolation_ptcorrection = 0;
110 if (input.caloCluster() ==
nullptr) {
111 ATH_MSG_WARNING(
"The associated cluster of the object does not exist ! Maybe the thinning was too agressive... No leakage correction computed.");
115 energy = input.caloCluster()->energyBE(1) + input.caloCluster()->energyBE(2) + input.caloCluster()->energyBE(3);
117 energy = input.caloCluster()->e();
121 bool convFlag =
false;
123 float etaS2 = input.caloCluster()->etaBE(2);
124 float etaS1 = input.caloCluster()->etaBE(1);
125 float etaCluster = input.caloCluster()->eta();
126 float phiCluster = input.caloCluster()->phi();
131 if(fabs(etaS1) > 2.5)
return 0.;
132 if(fabs(phiCluster) >
float(
M_PI))
return 0.;
135 ATH_MSG_VERBOSE(
"Electron ? " << (part_type ==
IsolationCorrection::ELECTRON) <<
" Input E = " << input.caloCluster()->e() <<
" E used " << energy <<
" author = " << input.author() <<
" pT = " << input.pt() <<
" phi = " << input.phi());
137 int convFlag_int = 0;
138 float conv_radius = 0.;
139 float conv_ratio = 0.;
145 if(convFlag_int == 3 ) convFlag_int = 2;
146 else if(convFlag_int != 0) convFlag_int = 1;
148 if(convFlag_int != 0) convFlag =
true;
151 if(convFlag_int == 2){
159 float pt1conv, pt2conv;
161 pt1conv = accPt1(*phVertex);
162 pt2conv = accPt2(*phVertex);
168 if(pt1conv > pt2conv) conv_ratio = pt2conv/pt1conv;
169 else conv_ratio = pt1conv/pt2conv;
172 int author = input.author();
183 auto etaPointing =
m_shower->getCaloPointingEta(etaS1, etaS2, phiCluster, is_mc);
184 if (!etaPointing.has_value())
return 0.;
215 return isolation_ptcorrection;
231 ATH_MSG_WARNING(
"IsolationCorrection::GetDDCorrection " << year <<
", unknown correction file name.\nNo correction is applied.\n");
232 return StatusCode::FAILURE;
235 int ii = year ==
"2017" ? 2 : (year ==
"2015_2016" ? 1 : 0);
239 return StatusCode::SUCCESS;
241 ATH_MSG_VERBOSE(
"Will setup the tool to retrieve " << year <<
" DD corrections");
244 if (year ==
"2015") {
251 }
else if (year ==
"2015_2016") {
258 }
else if (year ==
"2017") {
266 ATH_MSG_WARNING(
"Year " << year <<
" is not known in IsolationCorrection ! Check your input ! No correction is applied");
267 return StatusCode::FAILURE;
272 ATH_MSG_VERBOSE(
"DD corrections for year " << year <<
" not loaded yet. Doing it know");
274 std::unique_ptr< TFile > file_ptleakagecorr( TFile::Open(
m_corr_ddshift_file.c_str(),
"READ" ) );
275 if (!file_ptleakagecorr) {
277 return StatusCode::FAILURE;
279 TString baseN = year +
"/" + (
m_AFII_corr ?
"AF2/" :
"FullSim/");
280 TVector *veta = (TVector*)file_ptleakagecorr->Get(baseN+
"/etaBinning");
282 for (
int ieta = 0; ieta < veta->GetNrows(); ieta++)
m_feta_bins_dd->at(ieta) = (*veta)[ieta];
283 TTree *tbinLabel = (TTree*)file_ptleakagecorr->Get(baseN+
"tbinLabel");
284 TBranch *bbinLabel(
nullptr);
285 TString *binLabel(
nullptr); tbinLabel->SetBranchAddress(
"binLabel",&binLabel,&bbinLabel);
286 for (
unsigned int ieta = 0; ieta <
m_feta_bins_dd->size()-2; ieta++) {
287 tbinLabel->GetEntry(ieta);
288 TString gN =
"topoETcone40_DataDriven_unconverted_photon_eta_";
291 gN =
"topoETcone40_DataDriven_converted_photon_eta_";
294 gN =
"topoETcone20_DataDriven_unconverted_photon_eta_";
297 gN =
"topoETcone20_DataDriven_converted_photon_eta_";
310 return StatusCode::SUCCESS;
316 if (
setupDD(year) == StatusCode::FAILURE) {
326 bool converted =
false;
327 if(convFlag_int > 0) converted =
true;
329 float etaS2 = input.eta();
332 double feta = fabs(etaS2);
334 if (feta >=
m_feta_bins_dd->at(i) && feta < m_feta_bins_dd->at(i+1))
343 ATH_MSG_WARNING(
"Strange cluster S2 eta for photon isolation DD correction ! eta = " << etaS2 <<
". No correction");
347 if (input.pt() > 25e3)
349 <<
" eta: " << etaS2 <<
" etabin: " << eta_bin);
351 float pt_gev = input.pt()*0.001;
352 if (pt_gev > 999.) pt_gev = 999. ;
354 float isolation_ddcorrection = 0;
357 isolation_ddcorrection = 1e3*(*m_graph_dd_cone40_unconv_photon_shift)[eta_bin]->Eval(pt_gev);
359 isolation_ddcorrection = 1e3*(*m_graph_dd_cone40_conv_photon_shift)[eta_bin]->Eval(pt_gev);
362 isolation_ddcorrection = 1e3*(*m_graph_dd_cone20_unconv_photon_shift)[eta_bin]->Eval(pt_gev);
364 isolation_ddcorrection = 1e3*(*m_graph_dd_cone20_conv_photon_shift)[eta_bin]->Eval(pt_gev);
367 return isolation_ddcorrection;
371 if (input->caloCluster() ==
nullptr) {
372 ATH_MSG_WARNING(
"The associated cluster of the object does not exist ! Maybe the thinning was too agressive... use object eta for eta (instead of etaS2 or pointing).");
375 float etaS1 = input->caloCluster()->etaBE(1);
376 float etaS2 = input->caloCluster()->etaBE(2);
377 float phiCluster = input->caloCluster()->phi();
382 if(fabs(etaS1) > 2.5)
return 0.;
383 if(fabs(phiCluster) > 3.2)
return 0.;
385 auto etaPointing =
m_shower->getCaloPointingEta(etaS1, etaS2, phiCluster);
387 return etaPointing.value_or(0.);
421 m_eta_bins_fine = {0.0, 0.10, 0.60, 0.80, 1.15, 1.37, 1.52, 1.81, 2.01, 2.37, 2.47};
490 ATH_MSG_WARNING(
"Correction file for 2017 data/mc not specified, tool not initialized for 2017 corrections\n");
495 std::unique_ptr<TFile> file_ptleakagecorr(TFile::Open(
m_corr_file.c_str(),
"READ"));
496 if(!file_ptleakagecorr){
497 ATH_MSG_WARNING(
"Correction file for 2012 data/mc not found, tool not initialized for 2012 corrections\n");
523 m_graph_cone40_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone40_electron_etabin0_extrap") );
524 m_graph_cone40_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone40_electron_etabin1_extrap") );
525 m_graph_cone40_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone40_electron_etabin2_extrap") );
526 m_graph_cone40_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone40_electron_etabin3_extrap") );
527 m_graph_cone40_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone40_electron_etabin4_extrap") );
528 m_graph_cone40_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone40_electron_etabin5_extrap") );
529 m_graph_cone40_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone40_electron_etabin6_extrap") );
530 m_graph_cone40_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone40_electron_etabin7_extrap") );
531 m_graph_cone40_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone40_electron_etabin8_extrap") );
532 m_graph_cone40_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone40_electron_etabin9_extrap") );
556 m_graph_cone30_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone30_electron_etabin0_extrap") );
557 m_graph_cone30_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone30_electron_etabin1_extrap") );
558 m_graph_cone30_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone30_electron_etabin2_extrap") );
559 m_graph_cone30_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone30_electron_etabin3_extrap") );
560 m_graph_cone30_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone30_electron_etabin4_extrap") );
561 m_graph_cone30_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone30_electron_etabin5_extrap") );
562 m_graph_cone30_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone30_electron_etabin6_extrap") );
563 m_graph_cone30_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone30_electron_etabin7_extrap") );
564 m_graph_cone30_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone30_electron_etabin8_extrap") );
565 m_graph_cone30_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone30_electron_etabin9_extrap") );
589 m_graph_cone20_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone20_electron_etabin0_extrap") );
590 m_graph_cone20_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone20_electron_etabin1_extrap") );
591 m_graph_cone20_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone20_electron_etabin2_extrap") );
592 m_graph_cone20_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone20_electron_etabin3_extrap") );
593 m_graph_cone20_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone20_electron_etabin4_extrap") );
594 m_graph_cone20_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone20_electron_etabin5_extrap") );
595 m_graph_cone20_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone20_electron_etabin6_extrap") );
596 m_graph_cone20_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone20_electron_etabin7_extrap") );
597 m_graph_cone20_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone20_electron_etabin8_extrap") );
598 m_graph_cone20_electron.push_back( (TGraph*) file_ptleakagecorr->Get(
"graph_cone20_electron_etabin9_extrap") );
606 ATH_MSG_WARNING(
"Correction file for 2015 data/mc not specified, tool not initialized for 2015 corrections\n");
611 std::unique_ptr<TFile> file_ptleakagecorr(TFile::Open(
m_corr_file.c_str(),
"READ"));
612 if(!file_ptleakagecorr){
613 ATH_MSG_WARNING(
"Correction file for 2015 data/mc not found, "<<
m_corr_file<<
". tool not initialized for 2015 corrections\n");
616 if(!file_ptleakagecorr->GetListOfKeys()->Contains(
"mean_f_topoetcone40_eta_1.15_1.37_converted_ok")){
617 ATH_MSG_ERROR(
"Correction file for 2015 data/mc is not right, "<<
m_corr_file<<
". Tool not initialized for 2015 corrections\n");
625 static const int nEta = 10;
626 static const TString etaLab[nEta] = {
"0.0_0.1",
"0.1_0.6",
"0.6_0.8",
"0.8_1.15",
"1.15_1.37",
"1.37_1.52",
"1.52_1.81",
"1.81_2.01",
"2.01_2.37",
"2.37_2.47" };
627 static const TString pLab[5] = {
"_unconverted",
"_converted_ok",
"_converted_trouble",
"_author_1_electron",
"_author_16_electron" };
628 static const TString dRLab[3] = {
"20",
"30",
"40" };
657 for (
int iPart = 0; iPart < 5; iPart++) {
662 if (iPart < 3 && (
iEta == 5 ||
iEta == 9))
665 for (
int idR = 0; idR < 3; idR++) {
667 TString fN = (
m_useLogLogFit && iPart < 2) ?
"mean_flog_histo_topoetcone" :
"mean_f_topoetcone";
668 fN += dRLab[idR]; fN +=
"_eta_"; fN += etaLab[
iEta]; fN += pLab[iPart];
673 gN =
"mean_g_histo_topoetcone"; gN += dRLab[idR]; gN +=
"_eta_"; gN += etaLab[
iEta]; gN += pLab[iPart];
679 }
else if (iPart == 1) {
682 }
else if (iPart == 2) {
689 }
else if (iPart == 3) {
692 }
else if (iPart == 4) {
701 }
else if (idR == 1) {
705 }
else if (iPart == 1) {
708 }
else if (iPart == 2) {
715 }
else if (iPart == 3) {
718 }
else if (iPart == 4) {
731 }
else if (iPart == 1) {
734 }
else if (iPart == 2) {
741 }
else if (iPart == 3) {
744 }
else if (iPart == 4) {
768 ATH_MSG_WARNING(
"Data-driven correction files not specified, tool not initialized for data-driven corrections\n");
773 std::unique_ptr< TFile > file_ddshift_corr( TFile::Open(
m_corr_ddshift_file.c_str(),
"READ" ) );
776 if(!file_ddshift_corr || !file_ddsmearingcorr){
777 ATH_MSG_WARNING(
"Correction file for data-driven corrections not found, tool not initialized for data-driven corrections\n");
788 std::vector< std::shared_ptr<TGraphAsymmErrors> > graph_shift;
790 std::vector< std::shared_ptr<TGraphAsymmErrors> > graph_smearing;
791 for (
int ig = 0; ig <= 13; ig++) {
792 graph_shift.emplace_back(
dynamic_cast<TGraphAsymmErrors*
>(file_ddshift_corr->Get(Form(
"graph_%i",ig))) );
793 graph_smearing.emplace_back(
dynamic_cast<TGraphAsymmErrors*
>(file_ddsmearingcorr->Get(Form(
"graph_%i",ig))) );
795 for (
int ig = 0; ig <= 13; ig++) {
803 for (
const auto&
gr : graph_shift) {
805 ATH_MSG_ERROR(
"Null pointer for one of the DD correction graphs");
807 for (
const auto&
gr : graph_smearing) {
809 ATH_MSG_ERROR(
"Null pointer for one of the smearing graphs");
816 for (
typename T::iterator it = cntr.begin();
817 it != cntr.end(); ++it ) {
820 ATH_MSG_DEBUG(
"Deleting " << *it <<
" " <<
typeid(*it).name());
964 float pt_correction =
GetPtCorrection(energy, etaS2, etaPointing, etaCluster, radius, is_mc, isConversion, parttype);
965 return Etcone_value - pt_correction;
984 float pt_correction =
GetPtCorrectionTopo(energy, etaS2, etaPointing, etaCluster, radius, is_mc, isConversion, parttype, ver);
985 return Etcone_value - pt_correction;
1001 float etaS2,
float etaPointing,
float etaCluster,
1007 std::vector<float> mc_correction_slopes_ptr;
1008 std::vector<float> mc_correction_offsets_ptr;
1009 std::vector<float> data_correction_slopes_ptr;
1015 if (parttype ==
PHOTON) {
1033 if (parttype ==
PHOTON) {
1051 if (parttype ==
PHOTON) {
1069 ATH_MSG_WARNING(
"Unable to retrieve leakage correction for topoIso cone with radius = " << radius <<
".\n--- Radii must be one of {.20, .30, .40} OR {20, 30, 40}.\n");
1073 float scale_factor =
GetPtCorrectionFactor(etaS2, mc_correction_slopes_ptr, data_correction_slopes_ptr);
1075 if (!mc_correction_offsets_ptr.empty()) offset =
GetPtCorrectionFactor(etaS2, mc_correction_offsets_ptr);
1078 if(is_mc) is_mc =
true;
1089 float etaS2,
float etaPointing,
float etaCluster,
1093 int convFlag_int,
int author,
float conv_radius,
float conv_ratio)
const {
1094 double correction_value = 0.;
1101 return correction_value;
1112 if(radius < 1) newrad = (
int)(radius * 100 + 0.1);
1113 else newrad = (
int)radius;
1125 float fabs_eta = fabs(
eta);
1143 float fabs_eta = fabs(
eta);
1159 const std::vector<float>& mc_leakage_corrections_ptr,
1160 const std::vector<float>& data_leakage_corrections_ptr)
const {
1161 if(mc_leakage_corrections_ptr.empty() && data_leakage_corrections_ptr.empty())
1167 float correction = 0.;
1168 if (!mc_leakage_corrections_ptr.empty() && (eta_bin_fine >= 0)) correction += mc_leakage_corrections_ptr[eta_bin_fine];
1169 if (!data_leakage_corrections_ptr.empty() && (eta_bin_coarse >= 0)) correction += data_leakage_corrections_ptr[eta_bin_coarse];
1180 double etaForPt = ((fabs(etaPointing - etaCluster) < 0.15) ? etaPointing : etaCluster);
1181 double et = (fabs(etaForPt)<99.) ? energy/cosh(etaForPt) : 0.;
1183 return scale_factor *
et;
1195 double etaForPt = ((fabs(etaPointing - etaCluster) < 0.15) ? etaPointing : etaCluster);
1196 double et = (fabs(etaForPt)<99.) ? energy/cosh(etaForPt) : 0.;
1199 ATH_MSG_WARNING(
"IsolationCorrection::GetPtCorrection_FromGraph: the file containing the isolation leakage corrections is not initialized.\nNo correction is applied.\n");
1202 if (etabin < 0)
return 0;
1204 if( (etabin == 9 || etabin == 5) && parttype ==
PHOTON ){
1208 double correction_value_mev = -1e6;
1232 ATH_MSG_WARNING(
"Unable to retrieve leakage correction for topoIso cone with radius = " << radius <<
".\n--- Radii must be one of {.20, .30, .40} OR {20, 30, 40}.\n");
1235 return correction_value_mev;
1246 if(conversion_flag == 0)
return 0;
1248 if( (conversion_flag == 1) || ((conversion_flag == 2 && conv_ratio > 0.3) || (conversion_flag == 2 && conv_ratio < 0.3 && conv_radius > 140.)) )
return 1;
1250 if(conversion_flag == 2 && conv_radius < 140.)
return 2;
1256 double etaForPt = etaS2;
1257 double et = energy/cosh(etaForPt);
1260 int conversion_type = 0;
1264 if (
m_forcePartType && parttype ==
PHOTON) conversion_type = conv_radius > 800 ? 0 : (conv_radius > 140 ? 1 : 2);
1267 ATH_MSG_WARNING(
"In IsolationCorrection::GetPtCorrection_FromGraph_2015: the file containing the isolation leakage corrections is not initialized.\nNo correction is applied.\n");
1271 if (etabin < 0)
return 0;
1272 if(parttype ==
PHOTON)
if( (etabin == 9 || etabin == 5) )
return 0;
1274 double correction_value_mev = 0;
1276 float pt_threshold = 250000.;
1292 if(conversion_type == 2){
1308 if(conversion_type == 2){
1324 if(conversion_type == 2){
1331 ATH_MSG_WARNING(
"Unable to retrieve leakage correction for topoIso cone with radius = " << radius <<
".\n--- Radii must be one of {.20, .30, .40} OR {20, 30, 40}.\n");
1336 ATH_MSG_VERBOSE(
"Electron ? " << (parttype ==
ELECTRON) <<
" author / conversion type = " << (parttype ==
ELECTRON ? author : conversion_type) <<
" et = " <<
et <<
" eta = " << etaS2 <<
" etabin = " << etabin <<
" correction: "<< correction_value_mev);
1337 return correction_value_mev;
1341 ATH_MSG_INFO(
"Print properties of the parametrisation");
Scalar eta() const
pseudorapidity method
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
std::vector< TF1 * > m_function_2015_cone40_photon_unconverted
void SetDataMC(bool is_mc)
void SetTroubleCategories(bool trouble_categories)
std::vector< TF1 * > m_function_2015_cone30_author_1_electron
std::vector< TF1 * > m_graph_dd_cone40_photon_shift
std::vector< TGraph * > * m_graph_dd_cone40_unconv_photon_shift
std::vector< TGraph * > * m_graph_dd_cone20_conv_photon_shift
std::vector< TGraph * > m_graph_cone40_photon_unconverted
std::vector< float > m_feta_bins_dd_2015
float GetPtCorrection(const xAOD::Egamma &, const xAOD::Iso::IsolationType) const
IsolationCorrection(const std::string &name)
float GetPtCorrectionFactor(float eta, const std::vector< float > &mc_leakage_corrections_ptr=std::vector< float >(), const std::vector< float > &data_leakage_corrections_ptr=std::vector< float >()) const
std::vector< float > m_mc_rel17_leakage_correction_offsets_photon_converted_35
std::vector< float > m_mc_rel17_leakage_correction_slopes_photon_converted_30
std::vector< float > m_mc_rel17_leakage_correction_slopes_photon_converted_20
std::vector< TF1 * > m_function_2015_cone40_author_16_electron
std::vector< TGraph * > m_graph_histoMean_2015_cone20_author_16_electron
std::vector< TGraph * > m_graph_dd_2015_2016_cone40_unconv_photon_shift
std::vector< float > m_mc_rel17_leakage_correction_slopes_photon_converted_15
float GetPtCorrectionTopo(float energy, float etaS2, float etaPointing, float etaCluster, float radius, bool is_mc=true, bool isConversion=false, ParticleType parttype=ELECTRON, Version ver=REL17_2, int convFlag_int=0, int author=0, float conv_radius=0., float conv_ratio=0.) const
std::vector< float > m_mc_rel17_leakage_correction_offsets_electron_40
std::string m_previousYear
std::vector< float > m_mc_rel17_leakage_correction_offsets_electron_35
std::vector< TGraph * > m_graph_dd_2015_cone40_unconv_photon_shift
void SetToolVer(CP::IsolationCorrection::Version)
static int GetConversionType(int conversion_flag, float conv_radius, float conv_ratio)
void SetAFII(bool AFII_corr)
std::vector< float > m_mc_rel17_leakage_correction_offsets_electron_20
std::vector< TGraph * > m_graph_afIIdd_2015_2016_cone40_unconv_photon_shift
std::vector< TGraph * > m_graph_dd_2017_cone40_conv_photon_shift
std::vector< float > m_mc_rel17_leakage_correction_slopes_photon_converted_25
std::vector< float > m_mc_rel17_leakage_correction_offsets_photon_converted_30
std::vector< TF1 * > m_function_2015_cone40_author_1_electron
std::vector< float > m_mc_rel17_leakage_correction_slopes_photon_unconverted_15
std::vector< float > m_mc_rel17_leakage_correction_slopes_photon_unconverted_20
std::vector< float > m_mc_rel17_leakage_correction_offsets_photon_converted_20
std::vector< float > m_mc_rel17_leakage_correction_offsets_photon_unconverted_25
float GetPtCorrectedTopoIsolation(float energy, float etaS2, float etaPointing, float etaCluster, float radius, bool is_mc, float Etcone_value, bool isConversion=false, ParticleType parttype=ELECTRON, Version ver=REL17_2)
std::vector< float > m_mc_rel17_leakage_correction_offsets_photon_unconverted_35
std::vector< TGraph * > m_graph_cone30_photon_converted
std::vector< TGraph * > * m_graph_dd_cone20_unconv_photon_shift
std::vector< TGraph * > m_graph_histoMean_2015_cone30_photon_converted_trouble
std::vector< TGraph * > m_graph_histoMean_2015_cone30_author_16_electron
std::vector< float > m_mc_rel17_leakage_correction_slopes_photon_unconverted_35
std::vector< TGraph * > m_graph_afIIdd_2015_2016_cone20_conv_photon_shift
std::vector< TGraph * > m_graph_cone40_photon_converted
std::vector< TGraph * > m_graph_dd_2015_cone20_unconv_photon_shift
StatusCode setupDD(const std::string &year)
std::vector< TGraph * > m_graph_afIIdd_2015_2016_cone40_conv_photon_shift
std::vector< float > m_mc_rel17_leakage_correction_offsets_electron_15
std::vector< TF1 * > m_function_2015_cone40_photon_converted_ok
std::vector< float > m_mc_rel17_leakage_correction_slopes_photon_unconverted_25
std::vector< TF1 * > m_function_2015_cone30_photon_unconverted
std::vector< float > m_mc_rel17_leakage_correction_slopes_photon_converted_40
std::vector< float > m_mc_rel17_leakage_correction_offsets_photon_unconverted_40
std::vector< float > m_mc_rel17_leakage_correction_slopes_electron_30
std::vector< float > m_mc_rel17_leakage_correction_slopes_electron_25
std::vector< float > m_mc_rel17_leakage_correction_slopes_electron_15
const unsigned int m_nBinsEtaCoarse
std::vector< TGraph * > m_graph_dd_2017_cone40_unconv_photon_shift
std::vector< TF1 * > m_function_2015_cone40_photon_converted_trouble
std::vector< float > m_eta_bins_fine
std::vector< TGraph * > m_graph_cone40_electron
std::vector< TGraph * > m_graph_dd_2015_2016_cone20_unconv_photon_shift
std::vector< TGraph * > m_graph_cone30_electron
std::vector< TGraph * > m_graph_afIIdd_2015_2016_cone20_unconv_photon_shift
std::vector< TF1 * > m_function_2015_cone20_photon_converted_ok
std::vector< float > m_mc_rel17_leakage_correction_slopes_electron_20
int GetEtaBinFine(float eta) const
std::vector< TF1 * > m_function_2015_cone30_photon_converted_trouble
std::vector< TGraph * > m_graph_dd_2015_2016_cone40_conv_photon_shift
std::vector< TF1 * > m_function_2015_cone30_author_16_electron
std::vector< TGraph * > m_graph_histoMean_2015_cone40_photon_converted_trouble
std::vector< float > m_mc_rel17_leakage_correction_offsets_photon_converted_40
std::vector< float > m_mc_rel17_leakage_correction_offsets_photon_unconverted_20
std::string m_corr_ddshift_file
std::vector< float > m_mc_rel17_leakage_correction_offsets_photon_converted_15
const unsigned int m_nBinsEtaFine
float GetPtCorrectedIsolation(const xAOD::Egamma &, const xAOD::Iso::IsolationType) const
std::vector< TGraph * > m_graph_dd_2015_cone40_conv_photon_shift
std::vector< TGraph * > m_graph_afIIdd_2017_cone20_conv_photon_shift
std::vector< TGraph * > m_graph_dd_2017_cone20_conv_photon_shift
std::vector< TGraph * > * m_graph_dd_cone40_conv_photon_shift
std::vector< float > m_mc_rel17_leakage_correction_offsets_photon_converted_25
std::vector< float > m_mc_rel17_leakage_correction_slopes_photon_unconverted_40
std::vector< float > m_mc_rel17_leakage_correction_slopes_photon_unconverted_30
std::vector< TF1 * > m_graph_dd_cone40_photon_smearing
void SetCorrectionFile(const std::string &corr_file, const std::string &corr_ddshift_file, const std::string &corr_ddsmearing_file)
std::vector< TF1 * > m_function_2015_cone20_photon_converted_trouble
float GetDDCorrection(const xAOD::Egamma &, const xAOD::Iso::IsolationType, const std::string &year)
std::vector< TGraph * > m_graph_dd_2015_2016_cone20_conv_photon_shift
std::vector< TGraph * > m_graph_cone20_photon_unconverted
std::vector< TGraph * > m_graph_afIIdd_2017_cone40_conv_photon_shift
void SetCorrectEtcone(bool correct_etcone)
int GetEtaBinCoarse(float eta) const
bool m_corrInitialized[3][2]
std::vector< float > m_feta_bins_dd_2017
std::vector< TGraph * > m_graph_dd_2015_cone20_conv_photon_shift
std::vector< TGraph * > m_graph_afIIdd_2017_cone40_unconv_photon_shift
std::string m_corr_ddsmearing_file
std::vector< float > m_eta_bins_coarse
std::vector< float > m_mc_rel17_leakage_correction_slopes_photon_converted_35
float GetPtCorrection_FromGraph(float energy, float etaS2, float etaPointing, float etaCluster, float radius, bool isConversion, ParticleType parttype) const
float GetEtaPointing(const xAOD::Egamma *)
std::vector< TGraph * > m_graph_afIIdd_2017_cone20_unconv_photon_shift
std::vector< float > m_mc_rel17_leakage_correction_slopes_electron_40
std::vector< TGraph * > m_graph_cone20_electron
std::vector< TF1 * > m_function_2015_cone30_photon_converted_ok
std::vector< TF1 * > m_function_2015_cone20_author_1_electron
static float getPtAtFirstMeasurement(const xAOD::TrackParticle *tp)
CP::ShowerDepthUtil * m_shower
std::vector< float > m_mc_rel17_leakage_correction_offsets_photon_unconverted_15
static int GetRadius(float radius)
std::vector< TGraph * > m_graph_cone30_photon_unconverted
CP::IsolationCorrection::Version m_tool_ver
bool m_trouble_categories
std::vector< TGraph * > m_graph_dd_2017_cone20_unconv_photon_shift
std::vector< float > m_mc_rel17_leakage_correction_offsets_electron_30
std::vector< TF1 * > m_function_2015_cone20_author_16_electron
static float GetPtCorrectionValue(float energy, float etaPointing, float etaCluster, float scale_factor)
float GetPtCorrection_FromGraph_2015(float energy, float etaS2, float radius, int conversion_flag, int author, float conv_radius, float conv_ratio, ParticleType parttype) const
std::vector< TGraph * > m_graph_histoMean_2015_cone20_photon_converted_trouble
std::vector< float > m_mc_rel17_leakage_correction_slopes_electron_35
std::vector< TGraph * > m_graph_cone20_photon_converted
std::vector< float > m_mc_rel17_leakage_correction_offsets_photon_unconverted_30
std::vector< float > m_mc_rel17_leakage_correction_offsets_electron_25
std::vector< TF1 * > m_function_2015_cone20_photon_unconverted
std::vector< float > * m_feta_bins_dd
std::vector< TGraph * > m_graph_histoMean_2015_cone40_author_16_electron
SG::Accessor< T, ALLOC > Accessor
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
AsgMessaging(const std::string &name)
Constructor with a name.
bool msgLvl(const MSG::Level lvl) const
Test the output level of the object.
bool eventType(EventType type) const
Check for one particular bitmask value.
@ IS_SIMULATION
true: simulation, false: data
const xAOD::Vertex * vertex(size_t index=0) const
Pointer to the xAOD::Vertex/es that match the photon candidate.
float parameterPX(unsigned int index) const
Returns the parameter x momentum component, for 'index'.
float parameterPY(unsigned int index) const
Returns the parameter y momentum component, for 'index'.
xAOD::ParameterPosition parameterPosition(unsigned int index) const
Return the ParameterPosition of the parameters at 'index'.
size_t numberOfParameters() const
Returns the number of additional parameters stored in the TrackParticle.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
const TrackParticle * trackParticle(size_t i) const
Get the pointer to a given track that was used in vertex reco.
Select isolated Photons, Electrons and Muons.
@ Electron
The object is an electron.
xAOD::EgammaParameters::ConversionType conversionType(const xAOD::Photon *ph)
return the photon conversion type (see EgammaEnums)
float conversionRadius(const xAOD::Vertex *vx)
return the conversion radius or 9999.
IsolationFlavour isolationFlavour(IsolationType type)
convert Isolation Type into Isolation Flavour
IsolationType
Overall enumeration for isolation types in xAOD files.
@ topoetcone20
Topo-cluster ET-sum.
@ topoetcone
Topo-cluster ET-sum.
float coneSize(IsolationConeSize type)
convert Isolation Size into cone size
setScale setgFexType iEta
EventInfo_v1 EventInfo
Definition of the latest event info version.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.
Egamma_v1 Egamma
Definition of the current "egamma version".
Photon_v1 Photon
Definition of the current "egamma version".
@ FirstMeasurement
Parameter defined at the position of the 1st measurement.