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

Dead material correction coefficients. More...

#include <CaloHadDMCoeff2.h>

Collaboration diagram for CaloHadDMCoeff2:

Classes

struct  HadDMArea
struct  HadDMDimension

Public Types

enum  key_dim_type { kDIM_FLAT , kDIM_HAND }
enum  key_area_type { kAREA_PROF , kAREA_LOOKUP , kAREA_SMPW }
typedef std::vector< float > HadDMCoeff

Public Member Functions

 CaloHadDMCoeff2 ()
 CaloHadDMCoeff2 (const CaloHadDMCoeff2 &other)
CaloHadDMCoeff2operator= (const CaloHadDMCoeff2 &other)
int getSizeDMAreaSet () const
void addHadDMArea (const HadDMArea &theArea)
void setHadDMArea (const int n_area, const HadDMArea &theArea)
const HadDMAreagetHadDMArea (int n_area) const
int getSizeDMCoeffSet () const
void addHadDMCoeff (const HadDMCoeff &theData)
void setHadDMCoeff (const int iBin, const HadDMCoeff &theData)
const HadDMCoeffgetHadDMCoeff (const int &iBin) const
const HadDMCoeffgetHadDMCoeff (const int &n_area, const float &cls_emfrac, const float &cls_ener, const float &cls_lambda, const float &cls_eta) const
int getBinFrac (const int dm_area, const float &cls_frac) const
int getBinEner (const int dm_area, const float &cls_ener) const
int getBinLambda (const int dm_area, const float &cls_lambda) const
int getBinEta (const int dm_area, const float &cls_eta) const
int getBin (const int n_area, const float &cls_em_frac, const float &cls_energy, const float &cls_lambda, const float &cls_eta) const
void PrintData (std::ostream &ff) const
int bin2indexes (const int iBin, std::vector< int > &v_dim_indx) const

Private Attributes

std::vector< HadDMCoeffm_DMCoeffSet
std::vector< HadDMAream_DMAreaSet
std::vector< int > m_area_offsets

Detailed Description

Dead material correction coefficients.

Author
Gennady Pospelov guenn.nosp@m.adi..nosp@m.pospe.nosp@m.lov@.nosp@m.cern..nosp@m.ch
Date
21-November-2007

Holds dead material correction coefficients for using in Local Hadronic Correction Procedure (DeadMaterialCorrrection tool)

Definition at line 23 of file CaloHadDMCoeff2.h.

Member Typedef Documentation

◆ HadDMCoeff

typedef std::vector<float> CaloHadDMCoeff2::HadDMCoeff

Definition at line 54 of file CaloHadDMCoeff2.h.

Member Enumeration Documentation

◆ key_area_type

Enumerator
kAREA_PROF 
kAREA_LOOKUP 
kAREA_SMPW 

Definition at line 26 of file CaloHadDMCoeff2.h.

◆ key_dim_type

Enumerator
kDIM_FLAT 
kDIM_HAND 

Definition at line 25 of file CaloHadDMCoeff2.h.

Constructor & Destructor Documentation

◆ CaloHadDMCoeff2() [1/2]

CaloHadDMCoeff2::CaloHadDMCoeff2 ( )
default

◆ CaloHadDMCoeff2() [2/2]

CaloHadDMCoeff2::CaloHadDMCoeff2 ( const CaloHadDMCoeff2 & other)
default

Member Function Documentation

◆ addHadDMArea()

void CaloHadDMCoeff2::addHadDMArea ( const HadDMArea & theArea)

Definition at line 39 of file CaloHadDMCoeff2.cxx.

40{
41 m_DMAreaSet.push_back(theArea);
42 m_area_offsets.push_back(theArea.m_offset);
43}
std::vector< HadDMArea > m_DMAreaSet
std::vector< int > m_area_offsets

◆ addHadDMCoeff()

void CaloHadDMCoeff2::addHadDMCoeff ( const HadDMCoeff & theData)

Definition at line 63 of file CaloHadDMCoeff2.cxx.

64{
65 m_DMCoeffSet.push_back(theData);
66}
std::vector< HadDMCoeff > m_DMCoeffSet

◆ bin2indexes()

int CaloHadDMCoeff2::bin2indexes ( const int iBin,
std::vector< int > & v_dim_indx ) const

Definition at line 168 of file CaloHadDMCoeff2.cxx.

169{
170 int i_area = 0;
171 int narea = (int)m_area_offsets.size();
172 for(i_area=0; i_area<narea; i_area++) {
173 if( iBin < m_area_offsets[i_area] ) break;
174 if( iBin >= m_area_offsets[i_area] && (i_area == narea-1 || iBin < m_area_offsets[i_area+1]) ) break;
175 }
176 const HadDMArea *theArea = &m_DMAreaSet[i_area];
177 std::vector<HadDMDimension > v_dims;
178 v_dims.resize(4);
179 v_dims[0] = theArea->m_dimFrac;
180 v_dims[1] = theArea->m_dimEner;
181 v_dims[2] = theArea->m_dimLambda;
182 v_dims[3] = theArea->m_dimEta;
183 int ndim = (int) v_dims.size();
184 v_dim_indx.resize(ndim,0);
185 for(int i_dim=0; i_dim<ndim; i_dim++){
186 int x0 = 0;
187 for(int j=0; j<i_dim; j++){
188 x0 += v_dim_indx[j]*v_dims[j].xloc;
189 }
190 v_dim_indx[i_dim] = (iBin-theArea->m_offset-x0)/v_dims[i_dim].xloc;
191 }
192 return 0;
193}

◆ getBin()

int CaloHadDMCoeff2::getBin ( const int n_area,
const float & cls_em_frac,
const float & cls_energy,
const float & cls_lambda,
const float & cls_eta ) const

Definition at line 126 of file CaloHadDMCoeff2.cxx.

127{
128 if(n_dm_area < 0 || n_dm_area >= (int)m_DMAreaSet.size()) {
129 std::cout << " WARNING CaloHadDMCoeff::getBin -> wrong n_area: " << n_dm_area << std::endl;
130 return (-1);
131 }
132 int iBin = -1;
133 const HadDMArea *dmArea = &m_DMAreaSet[n_dm_area];
134 int ifrac = -1, iener = -1, ilambda = -1, ieta = -1;
135 ifrac = getBinFrac(n_dm_area, cls_emfrac);
136 if( ifrac != -1 ) {
137 iener = getBinEner(n_dm_area, cls_ener);
138 if( iener != -1 ) {
139 ilambda = getBinLambda(n_dm_area, cls_lambda);
140 if( ilambda != -1 ) {
141 ieta = getBinEta(n_dm_area, cls_eta);
142 if ( ieta != -1 ) {
143 iBin = ieta + ilambda*dmArea->m_dimEta.m_nbins
144 + iener*dmArea->m_dimEta.m_nbins*dmArea->m_dimLambda.m_nbins
145 + ifrac*dmArea->m_dimEta.m_nbins*dmArea->m_dimLambda.m_nbins*dmArea->m_dimEner.m_nbins
146 + dmArea->m_offset;
147 } // ieta
148 }// ilambda
149 } // iener
150 } // ifrac
151 return iBin;
152}
int getBinEner(const int dm_area, const float &cls_ener) const
int getBinLambda(const int dm_area, const float &cls_lambda) const
int getBinEta(const int dm_area, const float &cls_eta) const
int getBinFrac(const int dm_area, const float &cls_frac) const

◆ getBinEner()

int CaloHadDMCoeff2::getBinEner ( const int dm_area,
const float & cls_ener ) const

Definition at line 96 of file CaloHadDMCoeff2.cxx.

97{
98 const HadDMArea *dmArea = &m_DMAreaSet[n_area];
99 if( cls_ener < dmArea->m_dimEner.m_vMin || cls_ener >= dmArea->m_dimEner.m_vMax ) return (-1);
100 int iener;
101 for (iener=0; iener<dmArea->m_dimEner.m_nbins; iener++) {
102 if( cls_ener < dmArea->m_dimEner.m_vBins[iener] ) break;
103 if( cls_ener >= dmArea->m_dimEner.m_vBins[iener] && (iener == dmArea->m_dimEner.m_nbins-1 || cls_ener < dmArea->m_dimEner.m_vBins[iener+1]) ) break;
104 }
105 return iener;
106}

◆ getBinEta()

int CaloHadDMCoeff2::getBinEta ( const int dm_area,
const float & cls_eta ) const

Definition at line 117 of file CaloHadDMCoeff2.cxx.

118{
119 const HadDMArea *dmArea = &m_DMAreaSet[n_area];
120 float cls_abseta = std::abs(cls_eta);
121 if(cls_abseta < dmArea->m_dimEta.m_vMin || cls_abseta >= dmArea->m_dimEta.m_vMax) return (-1);
122 return (int)((cls_abseta - dmArea->m_dimEta.m_vMin)/dmArea->m_dimEta.m_bin_size);
123}

◆ getBinFrac()

int CaloHadDMCoeff2::getBinFrac ( const int dm_area,
const float & cls_frac ) const

Definition at line 88 of file CaloHadDMCoeff2.cxx.

89{
90 const HadDMArea *dmArea = &m_DMAreaSet[n_area];
91 if(cls_emfrac < dmArea->m_dimFrac.m_vMin || cls_emfrac >= dmArea->m_dimFrac.m_vMax) return (-1);
92 return (int)((cls_emfrac - dmArea->m_dimFrac.m_vMin)/dmArea->m_dimFrac.m_bin_size);
93}

◆ getBinLambda()

int CaloHadDMCoeff2::getBinLambda ( const int dm_area,
const float & cls_lambda ) const

Definition at line 109 of file CaloHadDMCoeff2.cxx.

110{
111 const HadDMArea *dmArea = &m_DMAreaSet[n_area];
112 if(cls_lambda < dmArea->m_dimLambda.m_vMin || cls_lambda >= dmArea->m_dimLambda.m_vMax) return (-1);
113 return (int)((cls_lambda - dmArea->m_dimLambda.m_vMin)/dmArea->m_dimLambda.m_bin_size);
114}

◆ getHadDMArea()

const CaloHadDMCoeff2::HadDMArea * CaloHadDMCoeff2::getHadDMArea ( int n_area) const

Definition at line 50 of file CaloHadDMCoeff2.cxx.

51{
52 if(n_area >= 0 && n_area<(int)m_DMAreaSet.size() ) {
53 return &(m_DMAreaSet[n_area]);
54 } else {
55 return nullptr;
56 }
57}

◆ getHadDMCoeff() [1/2]

const CaloHadDMCoeff2::HadDMCoeff * CaloHadDMCoeff2::getHadDMCoeff ( const int & iBin) const

Definition at line 73 of file CaloHadDMCoeff2.cxx.

74{
75 if ( iBin > -1 && iBin < (int)m_DMCoeffSet.size() ) {
76 return (& m_DMCoeffSet[iBin]);
77 }else{
78 return nullptr;
79 }
80}

◆ getHadDMCoeff() [2/2]

const CaloHadDMCoeff2::HadDMCoeff * CaloHadDMCoeff2::getHadDMCoeff ( const int & n_area,
const float & cls_emfrac,
const float & cls_ener,
const float & cls_lambda,
const float & cls_eta ) const

Definition at line 155 of file CaloHadDMCoeff2.cxx.

156{
157 int iBin = getBin(n_area, cls_emfrac, cls_ener, cls_lambda, cls_eta);
158 return getHadDMCoeff(iBin);
159}
const HadDMCoeff * getHadDMCoeff(const int &iBin) const
int getBin(const int n_area, const float &cls_em_frac, const float &cls_energy, const float &cls_lambda, const float &cls_eta) const

◆ getSizeDMAreaSet()

int CaloHadDMCoeff2::getSizeDMAreaSet ( ) const
inline

Definition at line 62 of file CaloHadDMCoeff2.h.

62{ return (int)m_DMAreaSet.size(); }

◆ getSizeDMCoeffSet()

int CaloHadDMCoeff2::getSizeDMCoeffSet ( ) const
inline

Definition at line 68 of file CaloHadDMCoeff2.h.

68{ return (int)m_DMCoeffSet.size(); }

◆ operator=()

CaloHadDMCoeff2 & CaloHadDMCoeff2::operator= ( const CaloHadDMCoeff2 & other)

Definition at line 25 of file CaloHadDMCoeff2.cxx.

26{
27 if (this != &other) {
28 m_DMCoeffSet = other.m_DMCoeffSet;
29 m_DMAreaSet = other.m_DMAreaSet;
30 m_area_offsets = other.m_area_offsets;
31 }
32 return *this;
33}

◆ PrintData()

void CaloHadDMCoeff2::PrintData ( std::ostream & ff) const

Definition at line 199 of file CaloHadDMCoeff2.cxx.

200{
201 const char *comments =
202 {
203 "# Coeffs for Dead Material corrections in DeadMaterialCorrectionTool2 tool.\n\n"
204 };
205 fout << comments << std::endl;
206 char line[1024];
207
208 // loop over DM areas
209 for(int i_zone=0; i_zone < (int)m_DMAreaSet.size(); i_zone++){
210 const HadDMArea *area = &m_DMAreaSet[i_zone];
211 fout << "zone " << area->m_indx << " " << area->m_is_on << " " << area->m_title << std::endl;
212 std::vector<CaloHadDMCoeff2::HadDMDimension > v_dims;
213 v_dims.resize(4);
214 v_dims[0] = area->m_dimFrac;
215 v_dims[1] = area->m_dimEner;
216 v_dims[2] = area->m_dimLambda;
217 v_dims[3] = area->m_dimEta;
218 for(unsigned int i_dim=0; i_dim<v_dims.size(); i_dim++){
219 CaloHadDMCoeff2::HadDMDimension dim = v_dims[i_dim];
220 sprintf(line,"%-6s %2d %6.3f %12.3f ",dim.m_title.c_str(), dim.m_nbins, dim.m_vMin, dim.m_vMax);
221 std::string sline(line);
222 if(dim.m_type == CaloHadDMCoeff2::kDIM_FLAT) {
223 sline += "flat";
224 }else if(dim.m_type == CaloHadDMCoeff2::kDIM_HAND) {
225 sline += "hand";
226 } else {
227 std::cout << "CaloHadDMCoeff2::PrintData2() -> Error! p1." << std::endl;
228 }
229 fout << sline;
230 if(dim.m_type == CaloHadDMCoeff2::kDIM_HAND) {
231 for(unsigned int i=0; i<dim.m_vBins.size(); i++){
232 fout << " " << dim.m_vBins[i];
233 }
234 }
235 fout << std::endl;
236 }
237 fout << "npars " << area->m_nPars << std::endl;
238 // now printing the data
239 for(int i_data=0; i_data<area->m_length; i_data++) {
240 int indx = area->m_offset + i_data;
241 const HadDMCoeff *pars = getHadDMCoeff(indx);
242 fout << std::setw(5) << indx << " ";
243 std::vector<int > v_dim_indexes;
244 bin2indexes(indx, v_dim_indexes);
245 for(unsigned int i_dim=0; i_dim<v_dim_indexes.size(); i_dim++){
246 fout << std::setw(4) << v_dim_indexes[i_dim] << " ";
247 }
248 fout << " ";
249 for(int i_par=0; i_par<area->m_nPars; i_par++){
250 std::stringstream foutx;
251 foutx << std::fixed << std::setprecision(5) << std::setw(12) << (*pars)[i_par] << " ";
252 fout<<foutx.str();
253 }
254 fout << std::endl;
255 }
256 // end of DM area
257 fout << std::endl;
258 }
259 // printing title strin
260}
double area(double R)
int bin2indexes(const int iBin, std::vector< int > &v_dim_indx) const
std::vector< float > HadDMCoeff
static TFile * fout
Definition listroot.cxx:40

◆ setHadDMArea()

void CaloHadDMCoeff2::setHadDMArea ( const int n_area,
const HadDMArea & theArea )

Definition at line 45 of file CaloHadDMCoeff2.cxx.

46{
47 m_DMAreaSet[n_area] = theArea;
48}

◆ setHadDMCoeff()

void CaloHadDMCoeff2::setHadDMCoeff ( const int iBin,
const HadDMCoeff & theData )

Definition at line 68 of file CaloHadDMCoeff2.cxx.

69{
70 m_DMCoeffSet[iBin] = theData;
71}

Member Data Documentation

◆ m_area_offsets

std::vector<int > CaloHadDMCoeff2::m_area_offsets
private

Definition at line 88 of file CaloHadDMCoeff2.h.

◆ m_DMAreaSet

std::vector<HadDMArea> CaloHadDMCoeff2::m_DMAreaSet
private

Definition at line 87 of file CaloHadDMCoeff2.h.

◆ m_DMCoeffSet

std::vector<HadDMCoeff> CaloHadDMCoeff2::m_DMCoeffSet
private

Definition at line 86 of file CaloHadDMCoeff2.h.


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