ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
EFTracking
FPGATrackSim
FPGATrackSimObjects
FPGATrackSimObjects
FPGATrackSimVectors.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#ifndef FPGATrackSimVECTORS_H
6
#define FPGATrackSimVECTORS_H
7
14
15
16
#include <vector>
17
#include <stdexcept>
18
19
// #define DEBUG_FPGATrackSimVECTORS
20
21
#ifdef DEBUG_FPGATrackSimVECTORS
22
#include <sstream>
23
#endif
24
25
26
template
<
typename
T>
27
class
vector2D
28
{
29
private
:
30
31
size_t
m_d1
,
m_d2
;
32
std::vector<T>
m_data
;
33
34
public
:
35
36
vector2D
() :
37
m_d1
(0),
m_d2
(0)
38
{}
39
40
vector2D
(
size_t
d1,
size_t
d2, T
const
& t=T()) :
41
m_d1
(d1),
m_d2
(d2),
m_data
(d1*d2, t)
42
{}
43
44
size_t
size
(
int
dim)
const
45
{
46
if
(dim == 0)
return
m_d1
;
47
if
(dim == 1)
return
m_d2
;
48
else
throw
std::range_error(
"vector2D: Argument to size() must be 0 or 1"
);
49
}
50
51
void
resize
(
size_t
x1,
size_t
x2, T
const
& t=T())
52
{
53
m_d1
= x1;
54
m_d2
= x2;
55
m_data
.resize(x1*x2, t);
56
}
57
58
T &
operator()
(
size_t
i,
size_t
j)
59
{
60
#ifdef DEBUG_FPGATrackSimVECTORS
61
if
(i >=
m_d1
|| j >=
m_d2
)
62
{
63
std::stringstream s;
64
s <<
"vector2D out of bounds: request ("
<< i <<
","
<< j <<
") size ("
<<
m_d1
<<
","
<<
m_d2
<<
")"
;
65
throw
std::range_error(s.str());
66
}
67
#endif
68
return
m_data
[i*
m_d2
+ j];
69
}
70
71
T
const
&
operator()
(
size_t
i,
size_t
j)
const
72
{
73
#ifdef DEBUG_FPGATrackSimVECTORS
74
if
(i >=
m_d1
|| j >=
m_d2
)
75
{
76
std::stringstream s;
77
s <<
"vector2D out of bounds: request ("
<< i <<
","
<< j <<
") size ("
<<
m_d1
<<
","
<<
m_d2
<<
")"
;
78
throw
std::range_error(s.str());
79
}
80
#endif
81
return
m_data
[i*
m_d2
+ j];
82
}
83
84
T*
operator[]
(
size_t
i)
85
{
86
#ifdef DEBUG_FPGATrackSimVECTORS
87
if
(i >=
m_d1
)
88
{
89
std::stringstream s;
90
s <<
"vector2D out of bounds: request "
<< i <<
" size ("
<<
m_d1
<<
","
<<
m_d2
<<
")"
;
91
throw
std::range_error(s.str());
92
}
93
#endif
94
return
m_data
.data() + (i *
m_d2
);
95
}
96
97
const
T*
operator[]
(
size_t
i)
const
98
{
99
#ifdef DEBUG_FPGATrackSimVECTORS
100
if
(i >=
m_d1
)
101
{
102
std::stringstream s;
103
s <<
"vector2D out of bounds: request "
<< i <<
" size ("
<<
m_d1
<<
","
<<
m_d2
<<
")"
;
104
throw
std::range_error(s.str());
105
}
106
#endif
107
return
m_data
.data() + (i *
m_d2
);
108
}
109
110
T*
data
()
111
{
112
return
m_data
.data();
113
}
114
115
const
T*
data
()
const
116
{
117
return
m_data
.data();
118
}
119
};
120
121
122
template
<
typename
T>
123
class
vector3D
124
{
125
private
:
126
127
size_t
m_d1
,
m_d2
,
m_d3
;
128
std::vector<T>
m_data
;
129
130
public
:
131
132
vector3D
() :
133
m_d1
(0),
m_d2
(0),
m_d3
(0)
134
{}
135
136
vector3D
(
size_t
d1,
size_t
d2,
size_t
d3, T
const
& t=T()) :
137
m_d1
(d1),
m_d2
(d2),
m_d3
(d3),
m_data
(d1*d2*d3, t)
138
{}
139
140
T &
operator()
(
size_t
i,
size_t
j,
size_t
k)
141
{
142
#ifdef DEBUG_FPGATrackSimVECTORS
143
if
(i >=
m_d1
|| j >=
m_d2
|| k >=
m_d3
)
144
{
145
std::stringstream s;
146
s <<
"vector3D out of bounds: request ("
<< i <<
","
<< j <<
","
<< k <<
") size ("
<<
m_d1
<<
","
<<
m_d2
<<
","
<<
m_d3
<<
")"
;
147
throw
std::range_error(s.str());
148
}
149
#endif
150
return
m_data
[i*
m_d2
*
m_d3
+ j*
m_d3
+ k];
151
}
152
153
T
const
&
operator()
(
size_t
i,
size_t
j,
size_t
k)
const
154
{
155
#ifdef DEBUG_FPGATrackSimVECTORS
156
if
(i >=
m_d1
|| j >=
m_d2
|| k >=
m_d3
)
157
{
158
std::stringstream s;
159
s <<
"vector3D out of bounds: request ("
<< i <<
","
<< j <<
","
<< k <<
") size ("
<<
m_d1
<<
","
<<
m_d2
<<
","
<<
m_d3
<<
")"
;
160
throw
std::range_error(s.str());
161
}
162
#endif
163
return
m_data
[i*
m_d2
*
m_d3
+ j*
m_d3
+ k];
164
}
165
166
void
resize
(
size_t
x1,
size_t
x2,
size_t
x3, T
const
& t=T())
167
{
168
m_d1
= x1;
169
m_d2
= x2;
170
m_d3
= x3;
171
m_data
.resize(x1*x2*x3, t);
172
}
173
174
T*
data
()
175
{
176
return
m_data
.data();
177
}
178
};
179
180
181
#endif
vector2D::resize
void resize(size_t x1, size_t x2, T const &t=T())
Definition
FPGATrackSimVectors.h:51
vector2D::vector2D
vector2D(size_t d1, size_t d2, T const &t=T())
Definition
FPGATrackSimVectors.h:40
vector2D::vector2D
vector2D()
Definition
FPGATrackSimVectors.h:36
vector2D::operator[]
const T * operator[](size_t i) const
Definition
FPGATrackSimVectors.h:97
vector2D::operator[]
T * operator[](size_t i)
Definition
FPGATrackSimVectors.h:84
vector2D::operator()
T & operator()(size_t i, size_t j)
Definition
FPGATrackSimVectors.h:58
vector2D::size
size_t size(int dim) const
Definition
FPGATrackSimVectors.h:44
vector2D::data
T * data()
Definition
FPGATrackSimVectors.h:110
vector2D< std::pair< int, std::unordered_set< std::shared_ptr< const FPGATrackSimHit > > > >::m_data
std::vector< std::pair< int, std::unordered_set< std::shared_ptr< const FPGATrackSimHit > > > > m_data
Definition
FPGATrackSimVectors.h:32
vector2D::data
const T * data() const
Definition
FPGATrackSimVectors.h:115
vector2D< std::pair< int, std::unordered_set< std::shared_ptr< const FPGATrackSimHit > > > >::m_d1
size_t m_d1
Definition
FPGATrackSimVectors.h:31
vector2D::operator()
T const & operator()(size_t i, size_t j) const
Definition
FPGATrackSimVectors.h:71
vector2D< std::pair< int, std::unordered_set< std::shared_ptr< const FPGATrackSimHit > > > >::m_d2
size_t m_d2
Definition
FPGATrackSimVectors.h:31
vector3D::m_d1
size_t m_d1
Definition
FPGATrackSimVectors.h:127
vector3D::data
T * data()
Definition
FPGATrackSimVectors.h:174
vector3D::vector3D
vector3D(size_t d1, size_t d2, size_t d3, T const &t=T())
Definition
FPGATrackSimVectors.h:136
vector3D::m_data
std::vector< T > m_data
Definition
FPGATrackSimVectors.h:128
vector3D::m_d2
size_t m_d2
Definition
FPGATrackSimVectors.h:127
vector3D::vector3D
vector3D()
Definition
FPGATrackSimVectors.h:132
vector3D::m_d3
size_t m_d3
Definition
FPGATrackSimVectors.h:127
vector3D::operator()
T const & operator()(size_t i, size_t j, size_t k) const
Definition
FPGATrackSimVectors.h:153
vector3D::operator()
T & operator()(size_t i, size_t j, size_t k)
Definition
FPGATrackSimVectors.h:140
vector3D::resize
void resize(size_t x1, size_t x2, size_t x3, T const &t=T())
Definition
FPGATrackSimVectors.h:166
Generated on
for ATLAS Offline Software by
1.17.0