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

Inherits from eflowEEtaBinBase. More...

#include <eflowEEtaBinnedParameters.h>

Inheritance diagram for eflowEEtaBinnedParameters:
Collaboration diagram for eflowEEtaBinnedParameters:

Public Member Functions

 eflowEEtaBinnedParameters ()=default
void initialise (const std::vector< double > &eBinBounds, const std::vector< double > &etaBinBounds, bool useAbsEta=true)
void setFudgeMean (int energyBin, int etaBin, eflowFirstIntENUM j1st, double fudgeMean)
void setFudgeStdDev (int energyBin, int etaBin, eflowFirstIntENUM j1st, double fudgeStdDev)
void setShapeParam (int energyBin, int etaBin, eflowFirstIntENUM j1st, eflowCaloENUM layer, int paramNumber, double shapeParam)
double getInterpolation (const eflowParameters **bin1, const eflowParameters **bin2, double e, double eta, bool useLegacyEnergyBinIndexing) const
eflowFirstIntENUM adjustLFI (double e, double eta, eflowFirstIntENUM j1st, bool useLegacyEnergyBinIndexing) const
bool binExists (double e, double eta) const

Static Public Member Functions

static double getErrorReturnValue ()

Protected Member Functions

int getNumEBins () const
int getNumEtaBins () const
int getEBinIndexLegacy (double e) const
int getEBinIndex (double e) const
int getEtaBinIndex (double eta) const

Static Protected Member Functions

static int getBinIndex (double x, const std::vector< double > &binBounds)

Protected Attributes

bool m_useAbsEta {true}
std::vector< double > m_eBinBounds
std::vector< double > m_etaBinBounds

Static Protected Attributes

static const double m_errorReturnValue = -999.0

Private Attributes

std::vector< std::vector< std::unique_ptr< eflowParameters > > > m_bins

Detailed Description

Inherits from eflowEEtaBinBase.

This class adds the infrastructure to store data and its set methods are used in e.g. eflowCellEOverPTool_mc12_JetETMiss. It also calculates an interpolation weight for moving between bins.

Definition at line 56 of file eflowEEtaBinnedParameters.h.

Constructor & Destructor Documentation

◆ eflowEEtaBinnedParameters()

eflowEEtaBinnedParameters::eflowEEtaBinnedParameters ( )
default

Member Function Documentation

◆ adjustLFI()

eflowFirstIntENUM eflowEEtaBinnedParameters::adjustLFI ( double e,
double eta,
eflowFirstIntENUM j1st,
bool useLegacyEnergyBinIndexing ) const

Definition at line 109 of file eflowEEtaBinnedParameters.cxx.

110 {
111
112
113 int eBinIndex = 0;
114 if (useLegacyEnergyBinIndexing) {
115 eBinIndex = getEBinIndexLegacy(e);
116 } else {
117 eBinIndex = getEBinIndex(e);
118 }
119
120 //hard code this check - needs to be rechecked if ever remake e/p tables
121 //if e.g track extrapolation slightly off can have inconsistent j1st and eta (e.g eta = 1.52, j1st = EMB2) and hence fudgeMean is zero
122 if (0 <= eBinIndex && eBinIndex <= 5) {
123 if (fabs(eta) < 1.5) {
128 }
129 if (fabs(eta) >= 1.6) {
134 }
135
136 }
137
138 if (0 == eBinIndex || 1 == eBinIndex) {
139 if (fabs(eta) >= 1.0 && fabs(eta) < 1.1) {
141 }
142 else if (fabs(eta) >= 1.2 && fabs(eta) < 1.3) {
144 }
145 else if (fabs(eta) >= 1.5 && fabs(eta) < 1.6) {
147 }
148
149 } else if (2 == eBinIndex) {
150 if (fabs(eta) >= 1.5 && fabs(eta) < 1.6) {
152 }
153
154 } else if (3 == eBinIndex) {
155 if (fabs(eta) >= 1.5 && fabs(eta) < 1.6) {
158 }
159
160 } else if (4 == eBinIndex || 5 == eBinIndex) {
161 if (fabs(eta) >= 1.5 && fabs(eta) < 1.6) {
163 }
164 }
165
166 return j1st;
167}
Scalar eta() const
pseudorapidity method
int getEBinIndexLegacy(double e) const
int getEBinIndex(double e) const

◆ binExists()

bool eflowEEtaBinBase::binExists ( double e,
double eta ) const
inlineinherited

Definition at line 32 of file eflowEEtaBinBase.h.

32{ return (getEBinIndex(e) >= 0 && getEtaBinIndex(eta) >= 0); }
int getEtaBinIndex(double eta) const

◆ getBinIndex()

int eflowEEtaBinBase::getBinIndex ( double x,
const std::vector< double > & binBounds )
staticprotectedinherited

Definition at line 67 of file eflowEEtaBinBase.cxx.

67 {
68 int nBins = binBounds.size() - 1;
69 int bin = -1;
70 for (int i = 0; i < nBins; i++) {
71 if (x >= binBounds[i] && x < binBounds[i+1]) {
72 bin = i;
73 break;
74 }
75 }
76 return bin;
77}
#define x

◆ getEBinIndex()

int eflowEEtaBinBase::getEBinIndex ( double e) const
protectedinherited

Definition at line 28 of file eflowEEtaBinBase.cxx.

28 {
29 int nEBins = getNumEBins();
30 for (int i = 0; i < (nEBins-1); i++) {
31 if (e > m_eBinBounds[i] && e < m_eBinBounds[i + 1]) return i;
32 }
33 //for the final bin we simply check if the track energy is greater than the lower bound
34 if ( !m_eBinBounds.empty() && e > m_eBinBounds.back() ) return nEBins-1;
35 return 0;
36}
int getNumEBins() const
std::vector< double > m_eBinBounds

◆ getEBinIndexLegacy()

int eflowEEtaBinBase::getEBinIndexLegacy ( double e) const
protectedinherited

Definition at line 38 of file eflowEEtaBinBase.cxx.

38 {
39
40 int nEBins = getNumEBins();
41 int bin = 0;
42 for (int i = nEBins - 1; i > 0; i--) {
43 if (e > sqrt(m_eBinBounds[i - 1] * m_eBinBounds[i])) {
44 bin = i;
45 break;
46 }
47 }
48 return bin;
49
50}

◆ getErrorReturnValue()

double eflowEEtaBinBase::getErrorReturnValue ( )
inlinestaticinherited

Definition at line 34 of file eflowEEtaBinBase.h.

34{return m_errorReturnValue;}
static const double m_errorReturnValue

◆ getEtaBinIndex()

int eflowEEtaBinBase::getEtaBinIndex ( double eta) const
protectedinherited

Definition at line 52 of file eflowEEtaBinBase.cxx.

52 {
53 if (m_useAbsEta) eta = fabs(eta);
54
55 /* If eta is outside bin range, return highest/lowest bin to avoid binning failures
56 * (in practice we always use absEta, so it can only be too high) */
57 if (eta > m_etaBinBounds.back()) {
58 return m_etaBinBounds.size()-2; // Yes, it's minus *two* --> we need to return the index of the *low* edge of the bin
59 }
60 if (eta < m_etaBinBounds[0]){
61 return 0;
62 }
63
65}
std::vector< double > m_etaBinBounds
static int getBinIndex(double x, const std::vector< double > &binBounds)

◆ getInterpolation()

double eflowEEtaBinnedParameters::getInterpolation ( const eflowParameters ** bin1,
const eflowParameters ** bin2,
double e,
double eta,
bool useLegacyEnergyBinIndexing ) const

Definition at line 52 of file eflowEEtaBinnedParameters.cxx.

54 {
55 double weight;
56 int eBin = 0;
57 if (useLegacyEnergyBinIndexing) {
58 eBin = getEBinIndexLegacy(e);
59 } else {
60 eBin = getEBinIndex(e);
61 }
63
64 /* Check for invalid bins */
65 if (eBin < 0 || etaBin < 0) {
66 *bin1 = nullptr;
67 *bin2 = nullptr;
68 weight = -1.0;
69 return weight;
70 }
71
72 if ((0 == eBin && e <= m_eBinBounds[eBin]) ||
73 (eBin == getNumEBins() - 1 && e >= m_eBinBounds[getNumEBins() - 1])) {
74 /* If e is below the lowest (above the highest) pinpoint, just return the lowest (highest) bin; no interpolation in this case. */
75 *bin1 = m_bins[eBin][etaBin].get();
76 *bin2 = m_bins[eBin][etaBin].get();
77 weight = 1.0;
78 } else {
79 /* The "normal" case: interpolate between two energies */
80 int lowEBin = eBin;
81 int highEBin = eBin;
82
83 if (e >= m_eBinBounds[eBin]) {
84 highEBin = eBin + 1;
85 } else {
86 lowEBin = eBin - 1;
87 }
88 auto outOfRange = [this](int bin)->bool{
89 return (bin<0) or (bin>=std::ssize(m_bins));
90 };
91
92 if (outOfRange(lowEBin) or outOfRange(highEBin)){
93 throw std::out_of_range("Attempt to access element out of range in eflowEEtaBinnedParameters::getInterpolation");
94 }
95 *bin1 = m_bins[lowEBin][etaBin].get();
96 *bin2 = m_bins[highEBin][etaBin].get();
97
98 double higherEBound = m_eBinBounds[highEBin];
99 double lowerEBound = m_eBinBounds[lowEBin];
100 //deals with e = 0 bin to avoid dividing by zero
101 if (lowerEBound < FLT_MIN) lowerEBound = FLT_MIN;
102
103 weight = log(higherEBound / e) / log(higherEBound / lowerEBound);
104 }
105 return weight;
106}
std::vector< std::vector< std::unique_ptr< eflowParameters > > > m_bins
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap etaBin

◆ getNumEBins()

int eflowEEtaBinBase::getNumEBins ( ) const
inlineprotectedinherited

Definition at line 38 of file eflowEEtaBinBase.h.

38{ return m_eBinBounds.size(); }

◆ getNumEtaBins()

int eflowEEtaBinBase::getNumEtaBins ( ) const
inlineprotectedinherited

Definition at line 39 of file eflowEEtaBinBase.h.

39{ return m_etaBinBounds.size(); }

◆ initialise()

void eflowEEtaBinnedParameters::initialise ( const std::vector< double > & eBinBounds,
const std::vector< double > & etaBinBounds,
bool useAbsEta = true )

Definition at line 33 of file eflowEEtaBinnedParameters.cxx.

33 {
34 m_useAbsEta = useAbsEta;
35 m_eBinBounds = eBinBounds;
36 m_etaBinBounds = etaBinBounds;
37
38 /* Create all the bins */
39 int nEBins = getNumEBins();
40 int nEtaBins = getNumEtaBins()-1;
41 m_bins.reserve(nEBins);
42 for (int iEBin = 0; iEBin < nEBins; iEBin++) {
43 std::vector<std::unique_ptr<eflowParameters> > tempVector;
44 tempVector.reserve(nEtaBins);
45 for (int iEtaBin = 0; iEtaBin < nEtaBins; iEtaBin++) {
46 tempVector.push_back(std::make_unique<eflowParameters>());
47 }
48 m_bins.push_back(std::move(tempVector));
49 }
50}
int getNumEtaBins() const
constexpr unsigned nEtaBins

◆ setFudgeMean()

void eflowEEtaBinnedParameters::setFudgeMean ( int energyBin,
int etaBin,
eflowFirstIntENUM j1st,
double fudgeMean )
inline

Definition at line 63 of file eflowEEtaBinnedParameters.h.

63 {
64 if (m_bins[energyBin][etaBin]) {
65 eflowFirstIntParameters* j1stBin = m_bins[energyBin][etaBin]->getFirstIntBin(j1st);
66 if (j1stBin) j1stBin->setFudgeMean(fudgeMean);
67 }
68 }
void setFudgeMean(double fudgeMean)

◆ setFudgeStdDev()

void eflowEEtaBinnedParameters::setFudgeStdDev ( int energyBin,
int etaBin,
eflowFirstIntENUM j1st,
double fudgeStdDev )
inline

Definition at line 69 of file eflowEEtaBinnedParameters.h.

69 {
70 if (m_bins[energyBin][etaBin]) {
71 eflowFirstIntParameters* j1stBin = m_bins[energyBin][etaBin]->getFirstIntBin(j1st);
72 if (j1stBin) j1stBin->setFudgeStdDev(fudgeStdDev);
73 }
74 }
void setFudgeStdDev(double fudgeStdDev)

◆ setShapeParam()

void eflowEEtaBinnedParameters::setShapeParam ( int energyBin,
int etaBin,
eflowFirstIntENUM j1st,
eflowCaloENUM layer,
int paramNumber,
double shapeParam )
inline

Definition at line 75 of file eflowEEtaBinnedParameters.h.

76 {
77 if (m_bins[energyBin][etaBin]) {
78 eflowFirstIntParameters* j1stBin = m_bins[energyBin][etaBin]->getFirstIntBin(j1st);
79 if (j1stBin) j1stBin->setShapeParameter(layer, paramNumber, shapeParam);
80 }
81 }
void setShapeParameter(eflowCaloENUM layer, int paramNumber, double shapeParam)

Member Data Documentation

◆ m_bins

std::vector< std::vector<std::unique_ptr<eflowParameters> > > eflowEEtaBinnedParameters::m_bins
private

Definition at line 90 of file eflowEEtaBinnedParameters.h.

◆ m_eBinBounds

std::vector<double> eflowEEtaBinBase::m_eBinBounds
protectedinherited

Definition at line 49 of file eflowEEtaBinBase.h.

◆ m_errorReturnValue

const double eflowEEtaBinBase::m_errorReturnValue = -999.0
staticprotectedinherited

Definition at line 46 of file eflowEEtaBinBase.h.

◆ m_etaBinBounds

std::vector<double> eflowEEtaBinBase::m_etaBinBounds
protectedinherited

Definition at line 50 of file eflowEEtaBinBase.h.

◆ m_useAbsEta

bool eflowEEtaBinBase::m_useAbsEta {true}
protectedinherited

Definition at line 48 of file eflowEEtaBinBase.h.

48{true};

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