BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
Loading...
Searching...
No Matches
L1Field.h
Go to the documentation of this file.
1
#ifndef L1Field_h
2
#define L1Field_h 1
3
4
#include "
CbmL1Def.h
"
5
6
#include <iostream>
7
using
std::cout;
8
using
std::endl;
9
using
std::ostream;
10
11
class
L1FieldValue
12
{
13
14
public
:
15
L1FieldValue
()
16
:
x
(0)
17
,
y
(0)
18
,
z
(0) {};
19
20
fvec
x
,
y
,
z
;
21
22
void
Combine
(
L1FieldValue
& B,
fvec
w)
23
{
24
x
+= w * (B.
x
-
x
);
25
y
+= w * (B.
y
-
y
);
26
z
+= w * (B.
z
-
z
);
27
}
28
29
friend
ostream&
operator<<
(ostream& out,
L1FieldValue
& B)
30
{
31
return
out << B.
x
[0] <<
" | "
<< B.
y
[0] <<
" | "
<< B.
z
[0];
32
};
33
}
_fvecalignment
;
34
35
class
L1FieldSlice
36
{
37
38
public
:
39
fvec
cx
[21],
cy
[21],
cz
[21];
// polinom coeff.
40
41
L1FieldSlice
()
42
{
43
for
(
int
i
= 0;
i
< 21;
i
++)
44
cx
[
i
] =
cy
[
i
] =
cz
[
i
] = 0;
45
}
46
47
void
GetFieldValue
(
const
fvec
& x,
const
fvec
& y,
L1FieldValue
& B)
const
48
{
49
fvec
x2 = x * x;
50
fvec
y2 = y * y;
51
fvec
xy = x * y;
52
53
fvec
x3 = x2 * x;
54
fvec
y3 = y2 * y;
55
fvec
xy2 = x * y2;
56
fvec
x2y = x2 * y;
57
58
fvec
x4 = x3 * x;
59
fvec
y4 = y3 * y;
60
fvec
xy3 = x * y3;
61
fvec
x2y2 = x2 * y2;
62
fvec
x3y = x3 * y;
63
64
fvec
x5 = x4 * x;
65
fvec
y5 = y4 * y;
66
fvec
xy4 = x * y4;
67
fvec
x2y3 = x2 * y3;
68
fvec
x3y2 = x3 * y2;
69
fvec
x4y = x4 * y;
70
71
B.
x
=
cx
[0] +
cx
[1] * x +
cx
[2] * y +
cx
[3] * x2 +
cx
[4] * xy +
cx
[5] * y2 +
cx
[6] * x3 +
cx
[7] * x2y
72
+
cx
[8] * xy2 +
cx
[9] * y3 +
cx
[10] * x4 +
cx
[11] * x3y +
cx
[12] * x2y2 +
cx
[13] * xy3 +
cx
[14] * y4
73
+
cx
[15] * x5 +
cx
[16] * x4y +
cx
[17] * x3y2 +
cx
[18] * x2y3 +
cx
[19] * xy4 +
cx
[20] * y5;
74
75
B.
y
=
cy
[0] +
cy
[1] * x +
cy
[2] * y +
cy
[3] * x2 +
cy
[4] * xy +
cy
[5] * y2 +
cy
[6] * x3 +
cy
[7] * x2y
76
+
cy
[8] * xy2 +
cy
[9] * y3 +
cy
[10] * x4 +
cy
[11] * x3y +
cy
[12] * x2y2 +
cy
[13] * xy3 +
cy
[14] * y4
77
+
cy
[15] * x5 +
cy
[16] * x4y +
cy
[17] * x3y2 +
cy
[18] * x2y3 +
cy
[19] * xy4 +
cy
[20] * y5;
78
79
B.
z
=
cz
[0] +
cz
[1] * x +
cz
[2] * y +
cz
[3] * x2 +
cz
[4] * xy +
cz
[5] * y2 +
cz
[6] * x3 +
cz
[7] * x2y
80
+
cz
[8] * xy2 +
cz
[9] * y3 +
cz
[10] * x4 +
cz
[11] * x3y +
cz
[12] * x2y2 +
cz
[13] * xy3 +
cz
[14] * y4
81
+
cz
[15] * x5 +
cz
[16] * x4y +
cz
[17] * x3y2 +
cz
[18] * x2y3 +
cz
[19] * xy4 +
cz
[20] * y5;
82
}
83
}
_fvecalignment
;
84
85
class
L1FieldRegion
86
{
87
88
public
:
89
L1FieldRegion
()
90
:
cx0
(0)
91
,
cx1
(0)
92
,
cx2
(0)
93
,
cy0
(0)
94
,
cy1
(0)
95
,
cy2
(0)
96
,
cz0
(0)
97
,
cz1
(0)
98
,
cz2
(0)
99
,
z0
(0)
100
{}
101
102
L1FieldRegion
(
float
reg[10])
103
:
cx0
(reg[0])
104
,
cx1
(reg[1])
105
,
cx2
(reg[2])
106
,
cy0
(reg[3])
107
,
cy1
(reg[4])
108
,
cy2
(reg[5])
109
,
cz0
(reg[6])
110
,
cz1
(reg[7])
111
,
cz2
(reg[8])
112
,
z0
(reg[9])
113
{}
114
115
fvec
cx0
,
cx1
,
cx2
;
// Bx(z) = cx0 + cx1*(z-z0) + cx2*(z-z0)^2
116
fvec
cy0
,
cy1
,
cy2
;
// By(z) = cy0 + cy1*(z-z0) + cy2*(z-z0)^2
117
fvec
cz0
,
cz1
,
cz2
;
// Bz(z) = cz0 + cz1*(z-z0) + cz2*(z-z0)^2
118
fvec
z0
;
119
120
L1FieldValue
Get
(
const
fvec
z)
121
{
122
fvec
dz = (z -
z0
);
123
fvec
dz2 = dz * dz;
124
L1FieldValue
B;
125
B.
x
=
cx0
+
cx1
* dz +
cx2
* dz2;
126
B.
y
=
cy0
+
cy1
* dz +
cy2
* dz2;
127
B.
z
=
cz0
+
cz1
* dz +
cz2
* dz2;
128
return
B;
129
}
130
131
void
Set
(
const
L1FieldValue
& B0,
132
const
fvec
B0z,
133
const
L1FieldValue
&
B1
,
134
const
fvec
B1z,
135
const
L1FieldValue
& B2,
136
const
fvec
B2z)
137
{
138
z0
= B0z;
139
fvec
dz1 = B1z - B0z, dz2 = B2z - B0z;
140
fvec
det =
rcp
(
fvec
(dz1 * dz2 * (dz2 - dz1)));
141
fvec
w21 = -dz2 * det;
142
fvec
w22 = dz1 * det;
143
fvec
w11 = -dz2 * w21;
144
fvec
w12 = -dz1 * w22;
145
146
fvec
dB1 =
B1
.x - B0.
x
;
147
fvec
dB2 = B2.
x
- B0.
x
;
148
cx0
= B0.
x
;
149
cx1
= dB1 * w11 + dB2 * w12;
150
cx2
= dB1 * w21 + dB2 * w22;
151
152
dB1 =
B1
.y - B0.
y
;
153
dB2 = B2.
y
- B0.
y
;
154
cy0
= B0.
y
;
155
cy1
= dB1 * w11 + dB2 * w12;
156
cy2
= dB1 * w21 + dB2 * w22;
157
158
dB1 =
B1
.z - B0.
z
;
159
dB2 = B2.
z
- B0.
z
;
160
cz0
= B0.
z
;
161
cz1
= dB1 * w11 + dB2 * w12;
162
cz2
= dB1 * w21 + dB2 * w22;
163
}
164
165
void
Set
(
const
L1FieldValue
& B0,
const
fvec
B0z,
const
L1FieldValue
&
B1
,
const
fvec
B1z)
166
{
167
z0
= B0z[0];
168
fvec
dzi =
rcp
(
fvec
(B1z - B0z));
169
cx0
= B0.
x
;
170
cy0
= B0.
y
;
171
cz0
= B0.
z
;
172
cx1
= (
B1
.x - B0.
x
) * dzi;
173
cy1
= (
B1
.y - B0.
y
) * dzi;
174
cz1
= (
B1
.z - B0.
z
) * dzi;
175
cx2
=
cy2
=
cz2
= 0;
176
}
177
178
void
Shift
(
fvec
z)
179
{
180
fvec
dz = z -
z0
;
181
fvec
cx2dz =
cx2
* dz;
182
fvec
cy2dz =
cy2
* dz;
183
fvec
cz2dz =
cz2
* dz;
184
z0
= z[0];
185
cx0
+= (
cx1
+ cx2dz) * dz;
186
cy0
+= (
cy1
+ cy2dz) * dz;
187
cz0
+= (
cz1
+ cz2dz) * dz;
188
cx1
+= cx2dz + cx2dz;
189
cy1
+= cy2dz + cy2dz;
190
cz1
+= cz2dz + cz2dz;
191
}
192
193
void
SetOneEntry
(
const
int
i0,
const
L1FieldRegion
& f1,
const
int
i1)
194
{
195
cx0
[i0] = f1.
cx0
[i1];
196
cx1
[i0] = f1.
cx1
[i1];
197
cx2
[i0] = f1.
cx2
[i1];
198
cy0
[i0] = f1.
cy0
[i1];
199
cy1
[i0] = f1.
cy1
[i1];
200
cy2
[i0] = f1.
cy2
[i1];
201
cz0
[i0] = f1.
cz0
[i1];
202
cz1
[i0] = f1.
cz1
[i1];
203
cz2
[i0] = f1.
cz2
[i1];
204
z0
[i0] = f1.
z0
[i1];
205
}
206
207
void
SetOneEntry
(
const
L1FieldRegion
& f1,
const
int
i1)
208
{
209
cx0
= f1.
cx0
[i1];
210
cx1
= f1.
cx1
[i1];
211
cx2
= f1.
cx2
[i1];
212
cy0
= f1.
cy0
[i1];
213
cy1
= f1.
cy1
[i1];
214
cy2
= f1.
cy2
[i1];
215
cz0
= f1.
cz0
[i1];
216
cz1
= f1.
cz1
[i1];
217
cz2
= f1.
cz2
[i1];
218
z0
= f1.
z0
[i1];
219
}
220
221
void
GetOneEntry
(
float
reg[10],
const
int
iVec)
222
{
223
reg[0] =
cx0
[iVec];
224
reg[1] =
cx1
[iVec];
225
reg[2] =
cx2
[iVec];
226
reg[3] =
cy0
[iVec];
227
reg[4] =
cy1
[iVec];
228
reg[5] =
cy2
[iVec];
229
reg[6] =
cz0
[iVec];
230
reg[7] =
cz1
[iVec];
231
reg[8] =
cz2
[iVec];
232
reg[9] =
z0
[iVec];
233
}
234
}
_fvecalignment
;
235
236
#endif
CbmL1Def.h
_fvecalignment
#define _fvecalignment
Definition
P4_F32vec4.h:236
i
int i
Definition
P4_F32vec4.h:22
rcp
friend F32vec4 rcp(const F32vec4 &a)
Definition
P4_F32vec4.h:45
fvec
F32vec4 fvec
Definition
P4_F32vec4.h:231
B1
L1FieldRegion::cz1
fvec cz1
Definition
L1Field.h:117
L1FieldRegion::cx2
fvec cx2
Definition
L1Field.h:115
L1FieldRegion::cx1
fvec cx1
Definition
L1Field.h:115
L1FieldRegion::Shift
void Shift(fvec z)
Definition
L1Field.h:178
L1FieldRegion::cx0
fvec cx0
Definition
L1Field.h:115
L1FieldRegion::L1FieldRegion
L1FieldRegion(float reg[10])
Definition
L1Field.h:102
L1FieldRegion::SetOneEntry
void SetOneEntry(const L1FieldRegion &f1, const int i1)
Definition
L1Field.h:207
L1FieldRegion::cz0
fvec cz0
Definition
L1Field.h:117
L1FieldRegion::SetOneEntry
void SetOneEntry(const int i0, const L1FieldRegion &f1, const int i1)
Definition
L1Field.h:193
L1FieldRegion::cz2
fvec cz2
Definition
L1Field.h:117
L1FieldRegion::z0
fvec z0
Definition
L1Field.h:118
L1FieldRegion::Get
L1FieldValue Get(const fvec z)
Definition
L1Field.h:120
L1FieldRegion::GetOneEntry
void GetOneEntry(float reg[10], const int iVec)
Definition
L1Field.h:221
L1FieldRegion::Set
void Set(const L1FieldValue &B0, const fvec B0z, const L1FieldValue &B1, const fvec B1z, const L1FieldValue &B2, const fvec B2z)
Definition
L1Field.h:131
L1FieldRegion::cy0
fvec cy0
Definition
L1Field.h:116
L1FieldRegion::Set
void Set(const L1FieldValue &B0, const fvec B0z, const L1FieldValue &B1, const fvec B1z)
Definition
L1Field.h:165
L1FieldRegion::cy1
fvec cy1
Definition
L1Field.h:116
L1FieldRegion::cy2
fvec cy2
Definition
L1Field.h:116
L1FieldRegion::L1FieldRegion
L1FieldRegion()
Definition
L1Field.h:89
L1FieldSlice::GetFieldValue
void GetFieldValue(const fvec &x, const fvec &y, L1FieldValue &B) const
Definition
L1Field.h:47
L1FieldSlice::cy
fvec cy[21]
Definition
L1Field.h:39
L1FieldSlice::cx
fvec cx[21]
Definition
L1Field.h:39
L1FieldSlice::L1FieldSlice
L1FieldSlice()
Definition
L1Field.h:41
L1FieldSlice::cz
fvec cz[21]
Definition
L1Field.h:39
L1FieldValue
Definition
L1Field.h:12
L1FieldValue::L1FieldValue
L1FieldValue()
Definition
L1Field.h:15
L1FieldValue::y
fvec y
Definition
L1Field.h:20
L1FieldValue::z
fvec z
Definition
L1Field.h:20
L1FieldValue::operator<<
friend ostream & operator<<(ostream &out, L1FieldValue &B)
Definition
L1Field.h:29
L1FieldValue::x
fvec x
Definition
L1Field.h:20
L1FieldValue::Combine
void Combine(L1FieldValue &B, fvec w)
Definition
L1Field.h:22
reconstruction
cat
L1Algo
L1Field.h
Generated on
for BmnRoot by
1.17.0