BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
Loading...
Searching...
No Matches
CbmGlobalTrackFitterKF.cxx
Go to the documentation of this file.
1
// ------------------------------------------------------------------
2
// ----- CbmGlobalTrackFitterKF -----
3
// ----- Created 07/03/2006 by D.Kresan -----
4
// ------------------------------------------------------------------
5
#include "
CbmGlobalTrackFitterKF.h
"
6
7
#include "CbmGlobalTrack.h"
8
#include "
CbmKFStsHit.h
"
9
#include "
CbmKFTrack.h
"
10
#include "CbmKFTrdHit.h"
11
#include "CbmStsHit.h"
12
#include "CbmStsTrack.h"
13
#include "CbmTofHit.h"
14
#include "CbmTrdHit.h"
15
#include "CbmTrdTrack.h"
16
#include "CbmVertex.h"
17
#include "FairRootManager.h"
18
#include "
TClonesArray.h
"
19
#include "
TMath.h
"
20
21
#include <iostream>
22
23
using
std::cout;
24
using
std::endl;
25
using
std::vector;
26
27
//___________________________________________________________________
28
//
29
// CbmGlobalTrackFitterKF
30
//
31
// Concrete implementation of global track fitting based on the
32
// Kalman filter
33
//
34
35
// ------------------------------------------------------------------
36
CbmGlobalTrackFitterKF::CbmGlobalTrackFitterKF
()
37
:
fArrayStsHit
(NULL)
38
,
fArrayTrdHit
(NULL)
39
,
fArrayTofHit
(NULL)
40
,
fArrayStsTrack
(NULL)
41
,
fArrayTrdTrack
(NULL)
42
,
fPrimVertex
(NULL)
43
,
fKfTrack
(NULL)
44
{
45
// Default constructor
46
47
fKfTrack
=
new
CbmKFTrack
();
48
// Set mass hypothesis
49
fKfTrack
->SetPID(211);
50
fVerbose = 0;
51
}
52
// ------------------------------------------------------------------
53
54
// ------------------------------------------------------------------
55
CbmGlobalTrackFitterKF::~CbmGlobalTrackFitterKF
()
56
{
57
// Destructor
58
delete
fKfTrack
;
59
}
60
// ------------------------------------------------------------------
61
62
// ------------------------------------------------------------------
63
void
CbmGlobalTrackFitterKF::Init
()
64
{
65
// Initialisation
66
67
// Get pointer to the ROOT I/O manager
68
FairRootManager* rootMgr = FairRootManager::Instance();
69
if
(NULL == rootMgr) {
70
cout <<
"-E- CbmGlobalTrackFitterKF::Init :"
71
<<
" ROOT manager is not instantiated"
<< endl;
72
return
;
73
}
74
// Get hit arrays
75
fArrayStsHit
= (
TClonesArray
*)rootMgr->GetObject(
"StsHit"
);
76
if
(NULL ==
fArrayStsHit
) {
77
cout <<
"-W- CbmGlobalTrackFitterKF::Init :"
78
<<
" no Sts hit array"
<< endl;
79
}
80
fArrayTrdHit
= (
TClonesArray
*)rootMgr->GetObject(
"TrdHit"
);
81
if
(NULL ==
fArrayTrdHit
) {
82
cout <<
"-W- CbmGlobalTrackFitterKF::Init :"
83
<<
" no TRD hit array"
<< endl;
84
}
85
fArrayTofHit
= (
TClonesArray
*)rootMgr->GetObject(
"TofHit"
);
86
if
(NULL ==
fArrayTofHit
) {
87
cout <<
"-W- CbmGlobalTrackFitterKF::Init :"
88
<<
" no TOF hit array"
<< endl;
89
}
90
// Get track arrays
91
fArrayStsTrack
= (
TClonesArray
*)rootMgr->GetObject(
"StsTrack"
);
92
if
(NULL ==
fArrayStsTrack
) {
93
cout <<
"-W- CbmGlobalTrackFitterKF::Init : "
94
<<
"no STS track array!"
<< endl;
95
}
96
fArrayTrdTrack
= (
TClonesArray
*)rootMgr->GetObject(
"TrdTrack"
);
97
if
(NULL ==
fArrayTrdTrack
) {
98
cout <<
"-W- CbmGlobalTrackFitterKF::Init : "
99
<<
"no TRD track array!"
<< endl;
100
}
101
fPrimVertex
= (
CbmVertex
*)rootMgr->GetObject(
"PrimaryVertex"
);
102
if
(NULL ==
fPrimVertex
) {
103
cout <<
"-W- CbmGlobalTrackFitterKF::Init : "
104
<<
"no Primary Vertex!"
<< endl;
105
}
106
}
107
// ------------------------------------------------------------------
108
109
// ------------------------------------------------------------------
110
void
CbmGlobalTrackFitterKF::DoFit
(
CbmGlobalTrack
* glbTrack)
111
{
112
// Implementation of the fitting algorithm
113
if
(NULL == glbTrack || NULL ==
fArrayStsTrack
|| NULL ==
fArrayTrdTrack
|| NULL ==
fArrayStsHit
114
|| NULL ==
fArrayTrdHit
|| NULL ==
fPrimVertex
)
115
return
;
116
117
Double_t
x_old;
118
Double_t
y_old;
119
Double_t
z_old;
120
Double_t
x_new;
121
Double_t
y_new;
122
Double_t
z_new;
123
Double_t
z =
fPrimVertex
->GetZ();
124
Double_t
length = 0.;
125
126
// Get STS track index
127
Int_t
stsTrackIndex = glbTrack->
GetStsTrackIndex
();
128
if
(-1 == stsTrackIndex) {
129
return
;
130
}
131
// Get STS track
132
CbmStsTrack
* stsTrack = (
CbmStsTrack
*)
fArrayStsTrack
->At(stsTrackIndex);
133
if
(NULL == stsTrack) {
134
return
;
135
}
136
FairTrackParam* paramFirst;
137
paramFirst = stsTrack->
GetParamFirst
();
138
fKfTrack
->SetTrackParam(*paramFirst);
139
fKfTrack
->Extrapolate(z);
140
x_old =
fKfTrack
->GetTrack()[0];
141
y_old =
fKfTrack
->GetTrack()[1];
142
z_old = z;
143
Double_t
p = 1.;
144
if
(paramFirst->GetQp()) {
145
p =
TMath::Abs
(1. / paramFirst->GetQp());
146
}
147
148
// Int_t stsHitIndex;
149
// CbmStsHit* stsHit;
150
// // Loop over hits of the STS track
151
// for(Int_t iHit = 0; iHit < stsTrack->GetNStsHits(); iHit++) {
152
// // Get hit index
153
// stsHitIndex = stsTrack->GetStsHitIndex(iHit);
154
// // Get hit
155
// stsHit = (CbmStsHit*) fArrayStsHit->At(stsHitIndex);
156
// x_new = stsHit->GetX();
157
// y_new = stsHit->GetY();
158
// z_new = stsHit->GetZ();
159
// length += TMath::Sqrt(TMath::Power(x_new-x_old, 2) +
160
// TMath::Power(y_new-y_old, 2) +
161
// TMath::Power(z_new-z_old, 2));
162
// // cout << z_old << " -> " << z_new << " => " << length << endl;
163
// x_old = x_new;
164
// y_old = y_new;
165
// z_old = z_new;
166
// }
167
168
// Get TRD track index
169
Int_t
trdTrackIndex = glbTrack->
GetTrdTrackIndex
();
170
if
(-1 == trdTrackIndex) {
171
return
;
172
}
173
// Get TRD track
174
CbmTrdTrack* trdTrack = (CbmTrdTrack*)
fArrayTrdTrack
->At(trdTrackIndex);
175
if
(NULL == trdTrack) {
176
return
;
177
}
178
if
(trdTrack->GetNofHits() < 2) {
179
return
;
180
}
181
Int_t
trdHitIndex = trdTrack->GetHitIndex(0);
182
CbmTrdHit* trdHit = (CbmTrdHit*)
fArrayTrdHit
->At(trdHitIndex);
183
184
while
(z < (trdHit->GetZ() - 2.)) {
185
z += p * 1.;
186
187
fKfTrack
->Extrapolate(z);
188
x_new =
fKfTrack
->GetTrack()[0];
189
y_new =
fKfTrack
->GetTrack()[1];
190
z_new = z;
191
192
length +=
TMath::Sqrt
(
TMath::Power
(x_new - x_old, 2) +
TMath::Power
(y_new - y_old, 2)
193
+
TMath::Power
(z_new - z_old, 2));
194
x_old = x_new;
195
y_old = y_new;
196
z_old = z_new;
197
}
198
199
// Loop over hits of the TRD track
200
for
(
Int_t
iTrd = 1; iTrd < trdTrack->GetNofHits(); iTrd++) {
201
// Get hit index
202
trdHitIndex = trdTrack->GetHitIndex(iTrd);
203
// Get hit
204
trdHit = (CbmTrdHit*)
fArrayTrdHit
->At(trdHitIndex);
205
z = trdHit->GetZ();
206
fKfTrack
->Extrapolate(z);
207
if
(trdHit->GetDx() > trdHit->GetDy()) {
208
x_new =
fKfTrack
->GetTrack()[0];
209
y_new = trdHit->GetY();
210
}
else
{
211
x_new = trdHit->GetX();
212
y_new =
fKfTrack
->GetTrack()[1];
213
}
214
z_new = z;
215
length +=
TMath::Sqrt
(
TMath::Power
(x_new - x_old, 2) +
TMath::Power
(y_new - y_old, 2)
216
+
TMath::Power
(z_new - z_old, 2));
217
x_old = x_new;
218
y_old = y_new;
219
z_old = z_new;
220
}
221
222
Int_t
tofIndex = glbTrack->
GetTofHitIndex
();
223
if
(-1 == tofIndex) {
224
return
;
225
}
226
CbmTofHit
* tofHit = (
CbmTofHit
*)
fArrayTofHit
->At(tofIndex);
227
x_new = tofHit->GetX();
228
y_new = tofHit->GetY();
229
z_new = tofHit->GetZ();
230
length +=
231
TMath::Sqrt
(
TMath::Power
(x_new - x_old, 2) +
TMath::Power
(y_new - y_old, 2) +
TMath::Power
(z_new - z_old, 2));
232
233
glbTrack->
SetLength
(length);
234
}
235
// ------------------------------------------------------------------
CbmGlobalTrackFitterKF.h
Int_t
int Int_t
Double_t
double Double_t
TClonesArray.h
TMath.h
CbmGlobalTrackFitterKF::CbmGlobalTrackFitterKF
CbmGlobalTrackFitterKF()
Definition
CbmGlobalTrackFitterKF.cxx:36
CbmGlobalTrackFitterKF::fKfTrack
CbmKFTrack * fKfTrack
Definition
CbmGlobalTrackFitterKF.h:24
CbmGlobalTrackFitterKF::fArrayTofHit
TClonesArray * fArrayTofHit
Definition
CbmGlobalTrackFitterKF.h:20
CbmGlobalTrackFitterKF::~CbmGlobalTrackFitterKF
virtual ~CbmGlobalTrackFitterKF()
Definition
CbmGlobalTrackFitterKF.cxx:55
CbmGlobalTrackFitterKF::fArrayStsTrack
TClonesArray * fArrayStsTrack
Definition
CbmGlobalTrackFitterKF.h:21
CbmGlobalTrackFitterKF::fPrimVertex
CbmVertex * fPrimVertex
Definition
CbmGlobalTrackFitterKF.h:23
CbmGlobalTrackFitterKF::Init
void Init()
Definition
CbmGlobalTrackFitterKF.cxx:63
CbmGlobalTrackFitterKF::fArrayStsHit
TClonesArray * fArrayStsHit
Definition
CbmGlobalTrackFitterKF.h:18
CbmGlobalTrackFitterKF::DoFit
void DoFit(CbmGlobalTrack *glbTrack)
Definition
CbmGlobalTrackFitterKF.cxx:110
CbmGlobalTrackFitterKF::fArrayTrdTrack
TClonesArray * fArrayTrdTrack
Definition
CbmGlobalTrackFitterKF.h:22
CbmGlobalTrackFitterKF::fArrayTrdHit
TClonesArray * fArrayTrdHit
Definition
CbmGlobalTrackFitterKF.h:19
CbmGlobalTrack
CbmGlobalTrack.h.
Definition
CbmGlobalTrack.h:23
CbmGlobalTrack::GetTrdTrackIndex
Int_t GetTrdTrackIndex() const
Definition
CbmGlobalTrack.h:34
CbmGlobalTrack::SetLength
void SetLength(Double_t length)
Definition
CbmGlobalTrack.h:62
CbmGlobalTrack::GetTofHitIndex
Int_t GetTofHitIndex() const
Definition
CbmGlobalTrack.h:37
CbmGlobalTrack::GetStsTrackIndex
Int_t GetStsTrackIndex() const
Accessors.
Definition
CbmGlobalTrack.h:33
CbmKFTrack
Definition
CbmKFTrack.h:22
CbmStsTrack
Definition
CbmStsTrack.h:28
CbmStsTrack::GetParamFirst
FairTrackParam * GetParamFirst()
Definition
CbmStsTrack.h:69
CbmTofHit
Definition
CbmTofHit.h:17
CbmVertex
CbmVertex.h.
Definition
CbmVertex.h:21
TClonesArray
TMath::Power
Double_t Power(Double_t x, Double_t y)
TMath::Sqrt
Double_t Sqrt(Double_t x)
TMath::Abs
Double_t Abs(Double_t d)
CbmKFStsHit.h
CbmKFTrack.h
reconstruction
KF
Interface
CbmGlobalTrackFitterKF.cxx
Generated on
for BmnRoot by
1.17.0