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

#include <MapEta.h>

Collaboration diagram for MapEta:

Public Member Functions

 ~MapEta ()
 MapEta (int isampling)
void SetDirectory (const std::string &dir)
void Initialize (int isampling)
int Nx () const
int Ny () const
float Xmin () const
float Xmax () const
float Ymin () const
float Ymax () const
void GetData (double x, double y, double *resp, double *xt0, double *xt1, double *xt2) const
void GetData0 (double x, double y, double *resp) const

Private Attributes

std::string m_directory
int m_init
int m_nx
int m_ny
float m_xmin = 0.0F
float m_xmax = 0.0F
float m_ymin = 0.0F
float m_ymax = 0.0F
float m_deltax = 0.0F
float m_deltay = 0.0F
float * m_resp
float * m_xt0
float * m_xt1
float * m_xt2

Detailed Description

Definition at line 12 of file MapEta.h.

Constructor & Destructor Documentation

◆ ~MapEta()

MapEta::~MapEta ( )

Definition at line 29 of file MapEta.cxx.

30{
31 if (m_resp) delete [] m_resp;
32 if (m_xt0) delete [] m_xt0;
33 if (m_xt1) delete [] m_xt1;
34 if (m_xt2) delete [] m_xt2;
35}
float * m_xt2
Definition MapEta.h:22
float * m_xt0
Definition MapEta.h:20
float * m_resp
Definition MapEta.h:19
float * m_xt1
Definition MapEta.h:21

◆ MapEta()

MapEta::MapEta ( int isampling)

Definition at line 16 of file MapEta.cxx.

17 : m_directory ("/afs/cern.ch/atlas/offline/data/lar/calo_data"),
18 m_init (0),
19 m_nx (0),
20 m_ny (0),
21 m_resp (nullptr),
22 m_xt0 (nullptr),
23 m_xt1 (nullptr),
24 m_xt2 (nullptr)
25{
26 Initialize(isampling);
27}
int m_nx
Definition MapEta.h:16
void Initialize(int isampling)
Definition MapEta.cxx:43
int m_ny
Definition MapEta.h:16
std::string m_directory
Definition MapEta.h:14
int m_init
Definition MapEta.h:15

Member Function Documentation

◆ GetData()

void MapEta::GetData ( double x,
double y,
double * resp,
double * xt0,
double * xt1,
double * xt2 ) const

Definition at line 111 of file MapEta.cxx.

112{
113 *resp=1;
114 *xt0=1;
115 *xt1=0;
116 *xt2=0;
117 if (m_nx==0 || m_ny ==0) return;
118 if (x<m_xmin ) x=m_xmin+0.01*m_deltax;
119 if (x>=m_xmax) x=m_xmax-0.01*m_deltax;
120 if (y<m_ymin ) y=m_ymin+0.01*m_deltay;
121 if (y>=m_ymax) y=m_ymax-0.01*m_deltay;
122
123 int ix,iy;
124 ix = (int) ((x-m_xmin)/m_deltax);
125 iy = (int) ((y-m_ymin)/m_deltay);
126 float x0 = ((float) ix)*m_deltax+m_xmin;
127 float x1 = x0+m_deltax;
128 float y0 = ((float) iy)*m_deltay+m_ymin;
129 float y1 = y0+m_deltay;
130
131
132 if (ix<0 || ix+1 >= m_nx || iy<0 || iy+1 >= m_ny) {
133 std::cout << "MapEta: Out of range " << ix << " " << iy << std::endl;
134 return;
135 }
136 double w[4];
137 w[0]=(x1-x)*(y1-y);
138 w[1]=(x-x0)*(y1-y);
139 w[2]=(x1-x)*(y-y0);
140 w[3]=(x-x0)*(y-y0);
141
142 double sumw=0.;
143 *resp=0;
144 *xt0=0;
145 for (int i=0;i<2;i++) {
146 for (int j=0;j<2;j++) {
147 int n=ix+i+(iy+j)*m_nx;
148 int m=i+2*j;
149 sumw +=w[m];
150 *resp += m_resp[n]*w[m];
151 *xt0 += m_xt0[n]*w[m];
152 *xt1 += m_xt1[n]*w[m];
153 *xt2 += m_xt2[n]*w[m];
154 }
155 }
156 const double inv_sumw = 1. / sumw;
157 if (sumw>0.) {
158 *resp = *resp*inv_sumw;
159 *xt0 = *xt0*inv_sumw;
160 *xt1 = *xt1*inv_sumw;
161 *xt2 = *xt2*inv_sumw;
162 }
163
164}
#define y
#define x
float m_xmin
Definition MapEta.h:17
float m_deltax
Definition MapEta.h:18
float m_deltay
Definition MapEta.h:18
float m_ymin
Definition MapEta.h:17
float m_ymax
Definition MapEta.h:17
float m_xmax
Definition MapEta.h:17
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)

◆ GetData0()

void MapEta::GetData0 ( double x,
double y,
double * resp ) const

Definition at line 165 of file MapEta.cxx.

166{
167 *resp=1;
168 if (m_nx==0 || m_ny ==0) return;
169 if (x<m_xmin ) x=m_xmin+0.01*m_deltax;
170 if (x>=m_xmax) x=m_xmax-0.01*m_deltax;
171 if (y<m_ymin ) y=m_ymin+0.01*m_deltay;
172 if (y>=m_ymax) y=m_ymax-0.01*m_deltay;
173
174 int ix,iy;
175 ix = (int) ((x-m_xmin)/m_deltax);
176 iy = (int) ((y-m_ymin)/m_deltay);
177 float x0 = ((float) ix)*m_deltax+m_xmin;
178 float x1 = x0+m_deltax;
179 float y0 = ((float) iy)*m_deltay+m_ymin;
180 float y1 = y0+m_deltay;
181
182 if (ix<0 || ix+1 >= m_nx || iy<0 || iy+1 >= m_ny) {
183 std::cout << "MapEta: Out of range " << ix << " " << iy << std::endl;
184 return;
185 }
186 double w[4];
187 w[0]=(x1-x)*(y1-y);
188 w[1]=(x-x0)*(y1-y);
189 w[2]=(x1-x)*(y-y0);
190 w[3]=(x-x0)*(y-y0);
191
192 double sumw=0.;
193 *resp = 0;
194 for (int i=0;i<2;i++) {
195 for (int j=0;j<2;j++) {
196 int n=ix+i+(iy+j)*m_nx;
197 int m=i+2*j;
198 sumw +=w[m];
199 *resp += m_resp[n]*w[m];
200 }
201 }
202 if (sumw>0.) *resp = *resp/sumw;
203 else *resp = 1;
204
205}

◆ Initialize()

void MapEta::Initialize ( int isampling)

Definition at line 43 of file MapEta.cxx.

44{
45 if (m_init==1) return;
46 if (isampling < 1 || isampling >3) return;
47 std::string filename{};
48 if (isampling==1) filename = "deta_strip.map";
49 if (isampling==2) filename = "deta_middle.map";
50 if (isampling==3) filename = "eta_trans.map";
51 std::string fileLocation;
52#ifdef LARG4_STAND_ALONE
53 // The stand-alone program expects to find the file via AFS.
54 fileLocation = m_directory + "/" + filename;
55#else
56 // In Athena, the PathResolver tool will find the file for us.
57 std::cout << "filename " << filename << std::endl;
58 //std::string larLocation = PathResolver::find_directory("lar","DATAPATH");
59 //fileLocation=larLocation+"/calo_data/"+filename;
60 std::string larLocation = PathResolver::find_directory("LArG4Barrel","ATLASCALDATA");
61 fileLocation=larLocation+"/"+filename;
62 std::cout << "fileLocation " << fileLocation << std::endl;
63#endif
64
65 std::ifstream in(fileLocation);
66 if (in)
67 {
68#ifndef LARG4_STAND_ALONE
69 // Tell clang to optimize assuming that FP operations may trap.
71#endif
72
74 if(m_nx>0 && m_ny>0 && m_nx<10000 && m_ny<10000){//coverity issue. This is a tainted variable protection, 10000 can be changed if required.
75 m_deltax=(m_xmax-m_xmin)/((float) m_nx);
76 m_deltay=(m_ymax-m_ymin)/((float) m_ny);
77 // what is written as xmax in the map is x of last point + delta x
78 // (such that npoint = (xmax-xmin)/deltax
79 // to get the real last point in the map we should subtract deltax
82 m_resp = new float[m_ny*m_nx];
83 m_xt0 = new float[m_ny*m_nx];
84 m_xt1 = new float[m_ny*m_nx];
85 m_xt2 = new float[m_ny*m_nx];
86 int ii,jj;
87 for (int ix=0;ix<m_nx;ix++) {
88 for (int iy=0;iy<m_ny;iy++) {
89 in>>ii>>jj>>m_resp[ix+iy*m_nx]>>m_xt0[ix+iy*m_nx]>>m_xt1[ix+iy*m_nx]>>m_xt2[ix+iy*m_nx];
90 if (ii != ix || jj != iy) std::cout << "MapEta: inconsistency when reading map..." << std::endl;
91 }
92 }
93
94 std::cout << "Eta Map read " << " Nbins " << m_nx << " " << m_ny
95 << " bin size*1000 " << 1000*m_deltax << " " << 1000*m_deltay
96 << " X range " << m_xmin << " " << m_xmax
97 << " Y range " << m_ymin << " " << m_ymax << std::endl;
98 m_init=1;
99 }
100 else{
101 std::cout << "Error in MapEta::Initialize: nx or ny out of limits." << std::endl;
102 return;
103 }
104 }
105 else{
106 std::cout << "Error in MapEta::Initialize: The file could not be open." << std::endl;
107 return;
108 }
109}
static std::string find_directory(const std::string &logical_file_name, const std::string &search_path)
#define CXXUTILS_TRAPPING_FP
Definition trapping_fp.h:24

◆ Nx()

int MapEta::Nx ( ) const
inline

Definition at line 28 of file MapEta.h.

28{return m_nx;}

◆ Ny()

int MapEta::Ny ( ) const
inline

Definition at line 29 of file MapEta.h.

29{return m_ny;}

◆ SetDirectory()

void MapEta::SetDirectory ( const std::string & dir)

Definition at line 38 of file MapEta.cxx.

39{
41}

◆ Xmax()

float MapEta::Xmax ( ) const
inline

Definition at line 31 of file MapEta.h.

31{return m_xmax;}

◆ Xmin()

float MapEta::Xmin ( ) const
inline

Definition at line 30 of file MapEta.h.

30{return m_xmin;}

◆ Ymax()

float MapEta::Ymax ( ) const
inline

Definition at line 33 of file MapEta.h.

33{return m_ymax;}

◆ Ymin()

float MapEta::Ymin ( ) const
inline

Definition at line 32 of file MapEta.h.

32{return m_ymin;}

Member Data Documentation

◆ m_deltax

float MapEta::m_deltax = 0.0F
private

Definition at line 18 of file MapEta.h.

◆ m_deltay

float MapEta::m_deltay = 0.0F
private

Definition at line 18 of file MapEta.h.

◆ m_directory

std::string MapEta::m_directory
private

Definition at line 14 of file MapEta.h.

◆ m_init

int MapEta::m_init
private

Definition at line 15 of file MapEta.h.

◆ m_nx

int MapEta::m_nx
private

Definition at line 16 of file MapEta.h.

◆ m_ny

int MapEta::m_ny
private

Definition at line 16 of file MapEta.h.

◆ m_resp

float* MapEta::m_resp
private

Definition at line 19 of file MapEta.h.

◆ m_xmax

float MapEta::m_xmax = 0.0F
private

Definition at line 17 of file MapEta.h.

◆ m_xmin

float MapEta::m_xmin = 0.0F
private

Definition at line 17 of file MapEta.h.

◆ m_xt0

float* MapEta::m_xt0
private

Definition at line 20 of file MapEta.h.

◆ m_xt1

float* MapEta::m_xt1
private

Definition at line 21 of file MapEta.h.

◆ m_xt2

float* MapEta::m_xt2
private

Definition at line 22 of file MapEta.h.

◆ m_ymax

float MapEta::m_ymax = 0.0F
private

Definition at line 17 of file MapEta.h.

◆ m_ymin

float MapEta::m_ymin = 0.0F
private

Definition at line 17 of file MapEta.h.


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