BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
Loading...
Searching...
No Matches
CbmKFMaterial.cxx
Go to the documentation of this file.
1
#include "
CbmKFMaterial.h
"
2
3
#include "
CbmKF.h
"
4
#include "
CbmKFMath.h
"
5
#include "
TString.h
"
6
7
#include <cmath>
8
9
using
std::fabs;
10
11
TString
CbmKFMaterial::Info
()
const
12
{
13
char
tmp[255];
14
sprintf(tmp,
" ( id, z, dz, RadL )= ( %i, %f, %f, %f )"
,
ID
,
ZReference
,
ZThickness
,
RadLength
);
15
return
tmp;
16
}
17
18
Int_t
CbmKFMaterial::Pass
(
Double_t
ZCross,
19
Double_t
ZThick,
20
CbmKFTrackInterface
& track,
21
Bool_t
downstream,
22
Double_t
& QP0)
23
{
24
Bool_t
err = 0;
25
Double_t
* T = track.
GetTrack
();
26
Double_t
* C = track.
GetCovMatrix
();
27
err = err ||
CbmKF::Instance
()->
Propagate
(T, C, ZCross, QP0);
28
if
(err)
29
return
err;
30
if
(
IsOutside
(T[0], T[1]))
31
return
0;
32
Double_t
Q5, Q8, Q9, Ecor;
33
err = err
34
||
CbmKFMath::GetNoise
(ZThick /
RadLength
,
F
,
Fe
, T[2], T[3], QP0, track.
GetMass
(), track.
IsElectron
(),
35
downstream, &Q5, &Q8, &Q9, &Ecor);
36
if
(err)
37
return
err;
38
C[5] += Q5;
39
C[8] += Q8;
40
C[9] += Q9;
41
QP0 *= Ecor;
42
T[4] *= Ecor;
43
C[10] *= Ecor;
44
C[11] *= Ecor;
45
C[12] *= Ecor;
46
C[13] *= Ecor;
47
C[14] *= Ecor * Ecor;
48
return
0;
49
}
50
51
CbmKFTube::CbmKFTube
(
Int_t
ID_,
52
Double_t
x_,
53
Double_t
y_,
54
Double_t
z_,
55
Double_t
dz_,
56
Double_t
r_,
57
Double_t
R_,
58
Double_t
radL_)
59
:
x
(x_)
60
,
y
(y_)
61
,
z
(z_)
62
,
dz
(dz_)
63
,
r
(r_)
64
,
R
(R_)
65
,
rr
(r_ * r_)
66
,
RR
(R_ * R_)
67
{
68
ID
= ID_;
69
ZReference
= z_;
70
ZThickness
= dz_;
71
RadLength
= radL_;
72
F
= 1;
73
}
74
75
TString
CbmKFTube::Info
()
const
76
{
77
char
tmp[255];
78
sprintf(tmp,
" tube ( id, x,y,z, dz, r, R, RadL )= ( %i, %f, %f, %f, %f, %f, %f, %f )"
,
ID
,
x
,
y
,
z
,
dz
,
r
,
R
,
79
RadLength
);
80
return
tmp;
81
}
82
83
CbmKFBox::CbmKFBox
(
Int_t
ID_,
84
Double_t
x_,
85
Double_t
y_,
86
Double_t
z_,
87
Double_t
dx_,
88
Double_t
dy_,
89
Double_t
dz_,
90
Double_t
radL_)
91
:
x
(x_)
92
,
y
(y_)
93
,
z
(z_)
94
,
dx05
(dx_ / 2)
95
,
dy05
(dy_ / 2)
96
,
dz
(dz_)
97
{
98
ID
= ID_;
99
ZReference
= z_;
100
ZThickness
= dz_;
101
RadLength
= radL_;
102
F
= 1;
103
}
104
105
Bool_t
CbmKFBox::IsOutside
(
Double_t
X,
Double_t
Y)
106
{
107
return
(
TMath::Abs
(X -
x
) >
dx05
||
TMath::Abs
(Y -
y
) >
dy05
);
108
}
109
110
TString
CbmKFBox::Info
()
const
111
{
112
char
tmp[255];
113
sprintf(tmp,
" box ( id, x,y,z, dx, dy, dz, RadL )= ( %i, %f, %f, %f, %f, %f, %f, %f )"
,
ID
,
x
,
y
,
z
,
dx05
* 2,
114
dy05
* 2,
dz
,
RadLength
);
115
return
tmp;
116
}
117
118
Int_t
CbmKFCone::Pass
(
Double_t
ZCross,
Double_t
ZThick,
CbmKFTrackInterface
& track,
Bool_t
downstream,
Double_t
& QP0)
119
{
120
121
Bool_t
err = 0;
122
CbmKF
* KF =
CbmKF::Instance
();
123
Double_t
* T = track.
GetTrack
();
124
Double_t
* C = track.
GetCovMatrix
();
125
126
Double_t
zthick =
ZThickness
, zcross =
ZReference
;
127
Double_t
T_tmp[6];
128
for
(
Int_t
j = 0; j < 6; j++)
129
T_tmp[j] = T[j];
130
err = err || KF->
Propagate
(T_tmp, 0,
ZReference
, QP0);
131
if
(err)
132
return
err;
133
Double_t
cz1, ct1, cz2, ct2;
134
{
135
Double_t
iz1, iz2, iZ1, iZ2;
136
Bool_t
err1 =
CbmKFMath::intersectCone
(
z1
,
z2
,
r1
,
r2
, T_tmp, &iz1, &iz2);
137
Bool_t
err2 =
CbmKFMath::intersectCone
(
z1
,
z2
,
R1
,
R2
, T_tmp, &iZ1, &iZ2);
138
if
(err1 || iz1 < z1 || iz1 >
z2
)
139
iz1 = -200;
140
if
(err1 || iz2 < z1 || iz2 >
z2
)
141
iz2 = -200;
142
if
(err2 || iZ1 < z1 || iZ1 >
z2
)
143
iZ1 = -200;
144
if
(err2 || iZ2 < z1 || iZ2 >
z2
)
145
iZ2 = -200;
146
147
if
(iz1 > -200 && iZ1 > -200) {
148
cz1 = (iz1 + iZ1) / 2;
149
ct1 =
fabs
(iZ1 - iz1);
150
}
else
{
151
cz1 = ZCross;
// TODO Check me
152
ct1 = 0;
153
}
154
155
if
(iz2 > -200 && iZ2 > -200) {
156
cz2 = (iz2 + iZ2) / 2;
157
ct2 =
fabs
(iZ2 - iz2);
158
}
else
{
159
cz2 = ZCross;
// TODO Check me
160
ct2 = 0;
161
}
162
163
if
(iz1 <= -200 && iz2 <= -200 && iZ1 > -200 && iZ2 > -200) {
164
cz1 = (iZ1 + iZ2) / 2;
165
ct1 =
fabs
(iZ2 - iZ1);
166
cz2 = ZCross;
// TODO Check me
167
ct2 = 0;
168
}
169
}
170
Double_t
dz1 = cz1 - T[5];
171
Double_t
dz2 = cz2 - T[5];
172
if
(
fabs
(dz1) <
fabs
(dz2)) {
173
zthick = ct1;
174
zcross = cz1;
175
}
else
{
176
zthick = ct2;
177
zcross = cz2;
178
}
179
180
err = err || KF->
Propagate
(T, C, zcross, QP0);
181
182
Double_t
Q5, Q8, Q9, Ecor;
183
err = err
184
||
CbmKFMath::GetNoise
(zthick /
RadLength
,
F
,
Fe
, T[2], T[3], QP0, track.
GetMass
(), track.
IsElectron
(),
185
downstream, &Q5, &Q8, &Q9, &Ecor);
186
if
(err)
187
return
err;
188
C[5] += Q5;
189
C[8] += Q8;
190
C[9] += Q9;
191
QP0 *= Ecor;
192
T[4] *= Ecor;
193
C[10] *= Ecor;
194
C[11] *= Ecor;
195
C[12] *= Ecor;
196
C[13] *= Ecor;
197
C[14] *= Ecor * Ecor;
198
return
0;
199
}
fabs
friend F32vec4 fabs(const F32vec4 &a)
Definition
P4_F32vec4.h:52
Bool_t
bool Bool_t
Int_t
int Int_t
Double_t
double Double_t
TString.h
CbmKFBox::CbmKFBox
CbmKFBox()
Definition
CbmKFMaterial.h:105
CbmKFBox::x
Double_t x
Definition
CbmKFMaterial.h:118
CbmKFBox::z
Double_t z
Definition
CbmKFMaterial.h:118
CbmKFBox::Info
TString Info() const
Definition
CbmKFMaterial.cxx:110
CbmKFBox::IsOutside
Bool_t IsOutside(Double_t X, Double_t Y)
Definition
CbmKFMaterial.cxx:105
CbmKFBox::dx05
Double_t dx05
Definition
CbmKFMaterial.h:118
CbmKFBox::y
Double_t y
Definition
CbmKFMaterial.h:118
CbmKFBox::dz
Double_t dz
Definition
CbmKFMaterial.h:118
CbmKFBox::dy05
Double_t dy05
Definition
CbmKFMaterial.h:118
CbmKFCone::R2
Double_t R2
Definition
CbmKFMaterial.h:138
CbmKFCone::z2
Double_t z2
Definition
CbmKFMaterial.h:137
CbmKFCone::R1
Double_t R1
Definition
CbmKFMaterial.h:138
CbmKFCone::r1
Double_t r1
Definition
CbmKFMaterial.h:138
CbmKFCone::r2
Double_t r2
Definition
CbmKFMaterial.h:138
CbmKFCone::Pass
Int_t Pass(Double_t ZCross, Double_t ZThick, CbmKFTrackInterface &track, Bool_t downstream, Double_t &QP0)
Definition
CbmKFMaterial.cxx:118
CbmKFCone::z1
Double_t z1
Definition
CbmKFMaterial.h:137
CbmKFMaterial::IsOutside
virtual Bool_t IsOutside(Double_t x, Double_t y)
Definition
CbmKFMaterial.h:36
CbmKFMaterial::ZReference
Double_t ZReference
Definition
CbmKFMaterial.h:31
CbmKFMaterial::Fe
Double_t Fe
Definition
CbmKFMaterial.h:35
CbmKFMaterial::Pass
virtual Int_t Pass(Double_t ZCross, Double_t ZThick, CbmKFTrackInterface &track, Bool_t downstream, Double_t &QP0)
Definition
CbmKFMaterial.cxx:18
CbmKFMaterial::Info
virtual TString Info() const
Definition
CbmKFMaterial.cxx:11
CbmKFMaterial::RadLength
Double_t RadLength
Definition
CbmKFMaterial.h:33
CbmKFMaterial::F
Double_t F
Definition
CbmKFMaterial.h:34
CbmKFMaterial::ZThickness
Double_t ZThickness
Definition
CbmKFMaterial.h:32
CbmKFMaterial::ID
Int_t ID
Definition
CbmKFMaterial.h:30
CbmKFMath::intersectCone
static Bool_t intersectCone(Double_t zCone, Double_t ZCone, Double_t rCone, Double_t RCone, const Double_t x[], Double_t *z1, Double_t *z2)
Definition
CbmKFMath.cxx:13
CbmKFMath::GetNoise
static Int_t GetNoise(Double_t Lrl, Double_t F, Double_t Fe, Double_t tx, Double_t ty, Double_t qp, Double_t mass, Bool_t is_electron, Bool_t downstream_direction, Double_t *Q5, Double_t *Q8, Double_t *Q9, Double_t *Ecor)
Definition
CbmKFMath.cxx:719
CbmKFTrackInterface
Definition
CbmKFTrackInterface.h:26
CbmKFTrackInterface::GetTrack
virtual Double_t * GetTrack()
Is it electron.
Definition
CbmKFTrackInterface.cxx:31
CbmKFTrackInterface::GetCovMatrix
virtual Double_t * GetCovMatrix()
array[6] of track parameters(x,y,tx,ty,qp,z)
Definition
CbmKFTrackInterface.cxx:35
CbmKFTrackInterface::GetMass
virtual Double_t GetMass()
Information not to be changed.
Definition
CbmKFTrackInterface.h:37
CbmKFTrackInterface::IsElectron
virtual Bool_t IsElectron()
Mass hypothesis.
Definition
CbmKFTrackInterface.h:38
CbmKFTube::R
Double_t R
Definition
CbmKFMaterial.h:90
CbmKFTube::CbmKFTube
CbmKFTube()
Definition
CbmKFMaterial.h:74
CbmKFTube::rr
Double_t rr
Definition
CbmKFMaterial.h:90
CbmKFTube::RR
Double_t RR
Definition
CbmKFMaterial.h:90
CbmKFTube::x
Double_t x
Definition
CbmKFMaterial.h:89
CbmKFTube::Info
TString Info() const
Definition
CbmKFMaterial.cxx:75
CbmKFTube::r
Double_t r
Definition
CbmKFMaterial.h:90
CbmKFTube::dz
Double_t dz
Definition
CbmKFMaterial.h:89
CbmKFTube::y
Double_t y
Definition
CbmKFMaterial.h:89
CbmKFTube::z
Double_t z
Definition
CbmKFMaterial.h:89
CbmKF
The CbmKF Kalman Filter algorithm.
Definition
CbmKF.h:28
CbmKF::Propagate
Int_t Propagate(Double_t *T, Double_t *C, Double_t z_out, Double_t QP0, Bool_t line=false)
Propagation of (T, C) to z_out without material, using linearisation at qp0.
Definition
CbmKF.cxx:747
CbmKF::Instance
static CbmKF * Instance()
Definition
CbmKF.h:34
TString
TMath::Abs
Double_t Abs(Double_t d)
CbmKFMaterial.h
CbmKFMath.h
CbmKF.h
reconstruction
KF
CbmKFMaterial.cxx
Generated on
for BmnRoot by
1.17.0