BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
Loading...
Searching...
No Matches
BmnMatchRecoToMC.cxx
Go to the documentation of this file.
1
#include "
BmnMatchRecoToMC.h
"
2
3
#include "BmnGlobalTrack.h"
4
#include "FairRootManager.h"
5
6
#include <
TStopwatch.h
>
7
8
static
Double_t
workTime
= 0.0;
9
10
BmnMatchRecoToMC::BmnMatchRecoToMC
()
11
:
FairTask
()
12
,
fStsHits
(nullptr)
13
,
fStsTracks
(nullptr)
14
,
fGemPoints
(nullptr)
15
,
fGemTracks
(nullptr)
16
,
fSilPoints
(nullptr)
17
,
fSilTracks
(nullptr)
18
,
fGlobalTracks
(nullptr)
19
,
fGlobalTrackMatches
(nullptr)
20
,
fInnerTrackBranchName
(
"StsTrack"
)
21
{}
22
23
BmnMatchRecoToMC::~BmnMatchRecoToMC
()
24
{
25
if
(
fGlobalTrackMatches
) {
26
fGlobalTrackMatches
->Delete();
27
delete
fGlobalTrackMatches
;
28
}
29
}
30
31
InitStatus
BmnMatchRecoToMC::Init
()
32
{
33
ReadAndCreateDataBranches
();
34
return
kSUCCESS;
35
}
36
37
void
BmnMatchRecoToMC::Exec
(
Option_t
* opt)
38
{
39
TStopwatch
sw;
40
sw.
Start
();
41
42
if
(
fGlobalTrackMatches
)
43
fGlobalTrackMatches
->Delete();
44
MatchGlobalTracks
();
45
46
sw.
Stop
();
47
workTime
+= sw.
RealTime
();
48
}
49
50
void
BmnMatchRecoToMC::Finish
()
51
{
52
printf(
"Work time of BmnMatchRecoToMC: %4.2f sec.\n"
,
workTime
);
53
}
54
55
void
BmnMatchRecoToMC::ReadAndCreateDataBranches
()
56
{
57
FairRootManager* ioman = FairRootManager::Instance();
58
if
(!ioman)
59
LOG(fatal) <<
"BmnMatchRecoToMC::ReadAndCreateDataBranches() nullptr FairRootManager."
;
60
61
fGlobalTracks
= (
TClonesArray
*)ioman->GetObject(
"BmnGlobalTrack"
);
62
63
// GEM
64
fGemPoints
= (
TClonesArray
*)ioman->GetObject(
"StsPoint"
);
65
fGemTracks
= (
TClonesArray
*)ioman->GetObject(
"BmnGemTrack"
);
66
67
// Sil
68
fSilPoints
= (
TClonesArray
*)ioman->GetObject(
"SiliconPoint"
);
69
fSilTracks
= (
TClonesArray
*)ioman->GetObject(
"BmnSiliconTrack"
);
70
71
// STS
72
fStsHits
= (
TClonesArray
*)ioman->GetObject(
"StsHit"
);
73
fStsTracks
= (
TClonesArray
*)ioman->GetObject(
fInnerTrackBranchName
);
74
75
fGlobalTrackMatches
=
new
TClonesArray
(
"BmnTrackMatch"
, 100);
76
ioman->Register(
"BmnGlobalTrackMatch"
,
"GLOBAL"
,
fGlobalTrackMatches
,
kTRUE
);
77
}
78
79
void
BmnMatchRecoToMC::MatchGlobalTracks
(
const
TClonesArray
* gemHitMatches,
80
const
TClonesArray
* silHitMatches,
81
const
TClonesArray
* ssdHitMatches,
82
const
TClonesArray
* gemPoints,
83
const
TClonesArray
* silPoints,
84
const
TClonesArray
* ssdPoints,
85
const
TClonesArray
* gemTracks,
86
const
TClonesArray
* silTracks,
87
const
TClonesArray
* ssdTracks,
88
const
TClonesArray
* globTracks,
89
TClonesArray
* trackMatches)
90
{
91
92
for
(
Int_t
iTrack = 0; iTrack < globTracks->
GetEntriesFast
(); ++iTrack) {
93
BmnGlobalTrack
* glTrack = (
BmnGlobalTrack
*)(globTracks->
At
(iTrack));
94
BmnTrackMatch
* trackMatch =
new
((*trackMatches)[iTrack])
BmnTrackMatch
();
95
Int_t
trueCounter = 0;
96
Int_t
wrongCounter = 0;
97
// GEM
98
if
(glTrack->
GetGemTrackIndex
() != -1) {
99
BmnGemTrack
* gemTr = (
BmnGemTrack
*)gemTracks->
At
(glTrack->
GetGemTrackIndex
());
100
for
(
Int_t
iHit = 0; iHit < gemTr->
GetNHits
(); ++iHit)
101
LinkToMC
(gemHitMatches, gemPoints, gemTr->
GetHitIndex
(iHit), trackMatch);
102
if
(!trackMatch->
GetNofLinks
())
103
continue
;
104
CalculateTrackQuality
(gemTr, trackMatch, gemHitMatches, gemPoints, trueCounter, wrongCounter);
105
}
106
// // SILICON
107
// if (glTrack->GetSilTrackIndex() != -1) {
108
// BmnGemTrack* silTr = (BmnGemTrack*)silTracks->At(glTrack->GetSilTrackIndex());
109
// for (Int_t iHit = 0; iHit < silTr->GetNHits(); ++iHit)
110
// LinkToMC(silHitMatches, silPoints, silTr->GetHitIndex(iHit), trackMatch);
111
// if (!trackMatch->GetNofLinks())
112
// continue;
113
// CalculateTrackQuality(silTr, trackMatch, silHitMatches, silPoints, trueCounter, wrongCounter);
114
// }
115
// // SSD
116
// if (glTrack->GetSsdTrackIndex() != -1) {
117
// BmnGemTrack* ssdTr = (BmnGemTrack*)ssdTracks->At(glTrack->GetSsdTrackIndex());
118
// for (Int_t iHit = 0; iHit < ssdTr->GetNHits(); ++iHit)
119
// LinkToMC(ssdHitMatches, ssdPoints, ssdTr->GetHitIndex(iHit), trackMatch);
120
// if (!trackMatch->GetNofLinks())
121
// continue;
122
// CalculateTrackQuality(ssdTr, trackMatch, ssdHitMatches, ssdPoints, trueCounter, wrongCounter);
123
// }
124
125
trackMatch->
SetNofTrueHits
(trueCounter);
126
trackMatch->
SetNofWrongHits
(wrongCounter);
127
}
128
}
129
130
void
BmnMatchRecoToMC::CalculateTrackQuality
(
BmnGemTrack
* locTr,
131
BmnTrackMatch
* trMatch,
132
const
TClonesArray
* hitMatches,
133
const
TClonesArray
* points,
134
Int_t
& trueCntr,
135
Int_t
& falseCntr)
136
{
137
// Calculate number of true and wrong hits
138
for
(
Int_t
iHit = 0; iHit < locTr->
GetNHits
(); iHit++) {
139
const
BmnMatch
* hitMatch = (
BmnMatch
*)(hitMatches->
At
(locTr->
GetHitIndex
(iHit)));
140
Int_t
nofLinks = hitMatch->
GetNofLinks
();
141
Bool_t
hasTrue =
kFALSE
;
142
for
(
Int_t
iLink = 0; iLink < nofLinks; iLink++) {
143
const
FairMCPoint
* point = (
const
FairMCPoint
*)(points->
At
(hitMatch->
GetLink
(iLink).
GetIndex
()));
144
if
(!point)
145
continue
;
146
if
(point->GetTrackID() == trMatch->
GetMatchedLink
().
GetIndex
()) {
147
hasTrue =
true
;
148
break
;
149
}
150
}
151
if
(hasTrue)
152
trueCntr++;
153
else
154
falseCntr++;
155
}
156
}
157
158
BmnStatus
BmnMatchRecoToMC::LinkToMC
(
const
TClonesArray
* hitMatchArr,
159
const
TClonesArray
* points,
160
Int_t
id
,
161
BmnTrackMatch
* trackMatch)
162
{
163
164
if
(
id
== -1)
165
return
kBMNERROR
;
166
const
BmnMatch
* hitMatch = (
BmnMatch
*)(hitMatchArr->
At
(
id
));
167
if
(hitMatch ==
nullptr
)
168
return
kBMNERROR
;
169
for
(
Int_t
iLink = 0; iLink < hitMatch->
GetNofLinks
(); ++iLink) {
170
const
FairMCPoint
* point = (
const
FairMCPoint
*)(points->
At
(hitMatch->
GetLink
(iLink).
GetIndex
()));
171
if
(
nullptr
== point)
172
return
kBMNERROR
;
173
trackMatch->
AddLink
(
BmnLink
(1, point->GetTrackID()));
174
}
175
return
kBMNSUCCESS
;
176
}
177
178
BmnStatus
BmnMatchRecoToMC::LinkToMC
(
Int_t
id
,
BmnTrackMatch
* trackMatch)
179
{
180
181
if
(
id
== -1)
182
return
kBMNERROR
;
183
const
CbmStsHit
* hit = (
CbmStsHit
*)(
fStsHits
->At(
id
));
184
if
(!hit)
185
return
kBMNERROR
;
186
187
FairMCPoint
* point =
nullptr
;
188
for
(
Int_t
iLink = 0; iLink < hit->GetNLinks(); ++iLink) {
189
if
(hit->
GetSystemId
() ==
kGEM
) {
190
point = (
FairMCPoint
*)(
fGemPoints
->At(hit->GetLink(iLink).GetIndex()));
191
}
else
if
(hit->
GetSystemId
() ==
kSILICON
) {
192
point = (
FairMCPoint
*)(
fSilPoints
->At(hit->GetLink(iLink).GetIndex()));
193
}
194
if
(!point)
195
return
kBMNERROR
;
196
trackMatch->
AddLink
(
BmnLink
(1, point->GetTrackID()));
197
}
198
return
kBMNSUCCESS
;
199
}
200
201
// L1 STS case
202
void
BmnMatchRecoToMC::MatchGlobalTracks
()
203
{
204
if
(!
fGlobalTracks
)
205
return
;
206
for
(
Int_t
iTrack = 0; iTrack <
fGlobalTracks
->GetEntriesFast(); ++iTrack) {
207
BmnGlobalTrack
* glTrack = (
BmnGlobalTrack
*)(
fGlobalTracks
->At(iTrack));
208
if
(!glTrack)
209
continue
;
210
BmnTrackMatch
* trackMatch =
new
((*fGlobalTrackMatches)[iTrack])
BmnTrackMatch
();
211
212
if
(glTrack->
GetGemTrackIndex
() == -1)
213
continue
;
// actually GemTrackIndex is StsTrackIndex
214
CbmStsTrack
* stsTr = (
CbmStsTrack
*)
fStsTracks
->At(glTrack->
GetGemTrackIndex
());
215
if
(!stsTr)
216
continue
;
217
for
(
Int_t
iHit = 0; iHit < stsTr->
GetNStsHits
(); ++iHit)
218
LinkToMC
(stsTr->
GetStsHitIndex
(iHit), trackMatch);
219
if
(trackMatch->
GetNofLinks
() == 0)
220
continue
;
221
CalculateTrackQuality
(stsTr, trackMatch);
222
223
Int_t
refId = (trackMatch->
GetTrueOverAllHitsRatio
() >= 0.6) ? trackMatch->
GetMatchedLink
().
GetIndex
() : -1;
224
stsTr->
SetTrkID
(refId);
225
}
226
}
227
228
void
BmnMatchRecoToMC::CalculateTrackQuality
(
CbmStsTrack
* locTr,
BmnTrackMatch
* trMatch)
229
{
230
// Calculate number of true and wrong hits
231
Int_t
trueCounter = 0;
232
Int_t
wrongCounter = 0;
233
for
(
Int_t
iHit = 0; iHit < locTr->
GetNStsHits
(); iHit++) {
234
CbmStsHit
* hit = (
CbmStsHit
*)(
fStsHits
->At(locTr->
GetStsHitIndex
(iHit)));
235
Bool_t
hasTrue =
kFALSE
;
236
for
(
Int_t
iLink = 0; iLink < hit->GetNLinks(); iLink++) {
237
FairMCPoint
* point =
nullptr
;
238
if
(hit->
GetSystemId
() ==
kGEM
) {
239
point = (
FairMCPoint
*)(
fGemPoints
->At(hit->GetLink(iLink).GetIndex()));
240
}
else
if
(hit->
GetSystemId
() ==
kSILICON
) {
241
point = (
FairMCPoint
*)(
fSilPoints
->At(hit->GetLink(iLink).GetIndex()));
242
}
243
if
(!point)
244
continue
;
245
if
(point->GetTrackID() == trMatch->
GetMatchedLink
().
GetIndex
()) {
246
hasTrue =
true
;
247
break
;
248
}
249
}
250
if
(hasTrue)
251
trueCounter++;
252
else
253
wrongCounter++;
254
}
255
256
trMatch->
SetNofTrueHits
(trueCounter);
257
trMatch->
SetNofWrongHits
(wrongCounter);
258
}
workTime
static Double_t workTime
Definition
BmnMatchRecoToMC.cxx:8
BmnMatchRecoToMC.h
Bool_t
bool Bool_t
Int_t
int Int_t
kFALSE
constexpr Bool_t kFALSE
Double_t
double Double_t
kTRUE
constexpr Bool_t kTRUE
Option_t
const char Option_t
TStopwatch.h
kSILICON
@ kSILICON
Definition
BmnDetectorList.h:25
kGEM
@ kGEM
Definition
BmnDetectorList.h:15
BmnStatus
BmnStatus
Define status code.
Definition
BmnEnums.h:93
kBMNERROR
@ kBMNERROR
Error.
Definition
BmnEnums.h:95
kBMNSUCCESS
@ kBMNSUCCESS
Success.
Definition
BmnEnums.h:94
BmnGemTrack
Definition
BmnGemTrack.h:10
BmnGlobalTrack
BmnGlobalTrack.h.
Definition
BmnGlobalTrack.h:14
BmnGlobalTrack::GetGemTrackIndex
Int_t GetGemTrackIndex() const
Accessors.
Definition
BmnGlobalTrack.h:34
BmnLink
Definition
BmnLink.h:20
BmnLink::GetIndex
Int_t GetIndex() const
Definition
BmnLink.h:40
BmnMatchRecoToMC::Finish
virtual void Finish()
Definition
BmnMatchRecoToMC.cxx:50
BmnMatchRecoToMC::fGemPoints
TClonesArray * fGemPoints
Definition
BmnMatchRecoToMC.h:58
BmnMatchRecoToMC::fGlobalTracks
TClonesArray * fGlobalTracks
Definition
BmnMatchRecoToMC.h:66
BmnMatchRecoToMC::ReadAndCreateDataBranches
void ReadAndCreateDataBranches()
Definition
BmnMatchRecoToMC.cxx:55
BmnMatchRecoToMC::CalculateTrackQuality
void CalculateTrackQuality(BmnGemTrack *locTr, BmnTrackMatch *trMatch, const TClonesArray *hitMatches, const TClonesArray *points, Int_t &trueCntr, Int_t &falseCntr)
Definition
BmnMatchRecoToMC.cxx:130
BmnMatchRecoToMC::fInnerTrackBranchName
TString fInnerTrackBranchName
Definition
BmnMatchRecoToMC.h:69
BmnMatchRecoToMC::Exec
virtual void Exec(Option_t *opt)
Definition
BmnMatchRecoToMC.cxx:37
BmnMatchRecoToMC::~BmnMatchRecoToMC
virtual ~BmnMatchRecoToMC()
Definition
BmnMatchRecoToMC.cxx:23
BmnMatchRecoToMC::MatchGlobalTracks
void MatchGlobalTracks()
Definition
BmnMatchRecoToMC.cxx:202
BmnMatchRecoToMC::fGlobalTrackMatches
TClonesArray * fGlobalTrackMatches
Definition
BmnMatchRecoToMC.h:67
BmnMatchRecoToMC::LinkToMC
BmnStatus LinkToMC(const TClonesArray *hitMatchArr, const TClonesArray *points, Int_t id, BmnTrackMatch *trackMatch)
Definition
BmnMatchRecoToMC.cxx:158
BmnMatchRecoToMC::fGemTracks
TClonesArray * fGemTracks
Definition
BmnMatchRecoToMC.h:59
BmnMatchRecoToMC::Init
virtual InitStatus Init()
Definition
BmnMatchRecoToMC.cxx:31
BmnMatchRecoToMC::fStsHits
TClonesArray * fStsHits
Definition
BmnMatchRecoToMC.h:54
BmnMatchRecoToMC::BmnMatchRecoToMC
BmnMatchRecoToMC()
Definition
BmnMatchRecoToMC.cxx:10
BmnMatchRecoToMC::fSilTracks
TClonesArray * fSilTracks
Definition
BmnMatchRecoToMC.h:63
BmnMatchRecoToMC::fSilPoints
TClonesArray * fSilPoints
Definition
BmnMatchRecoToMC.h:62
BmnMatchRecoToMC::fStsTracks
TClonesArray * fStsTracks
Definition
BmnMatchRecoToMC.h:55
BmnMatch
Definition
BmnMatch.h:25
BmnMatch::GetLink
const BmnLink & GetLink(Int_t i) const
Definition
BmnMatch.h:38
BmnMatch::AddLink
void AddLink(const BmnMatch &match)
Definition
BmnMatch.cxx:40
BmnMatch::GetMatchedLink
const BmnLink & GetMatchedLink() const
Definition
BmnMatch.h:40
BmnMatch::GetNofLinks
Int_t GetNofLinks() const
Definition
BmnMatch.h:41
BmnTrackMatch
Definition
BmnTrackMatch.h:20
BmnTrackMatch::SetNofTrueHits
void SetNofTrueHits(Int_t nofTrueHits)
Definition
BmnTrackMatch.h:48
BmnTrackMatch::SetNofWrongHits
void SetNofWrongHits(Int_t nofWrongHits)
Definition
BmnTrackMatch.h:49
BmnTrackMatch::GetTrueOverAllHitsRatio
Double_t GetTrueOverAllHitsRatio() const
Definition
BmnTrackMatch.h:36
BmnTrack::GetNHits
Int_t GetNHits() const
Accessors.
Definition
BmnTrack.h:49
BmnTrack::GetHitIndex
Int_t GetHitIndex(Int_t iHit) const
Definition
BmnTrack.h:51
CbmStsHit
Definition
CbmStsHit.h:27
CbmStsHit::GetSystemId
Int_t GetSystemId() const
Accessors.
Definition
CbmStsHit.h:66
CbmStsTrack
Definition
CbmStsTrack.h:28
CbmStsTrack::GetNStsHits
Int_t GetNStsHits() const
Accessors.
Definition
CbmStsTrack.h:60
CbmStsTrack::SetTrkID
void SetTrkID(int id)
Definition
CbmStsTrack.h:78
CbmStsTrack::GetStsHitIndex
Int_t GetStsHitIndex(Int_t iHit) const
Definition
CbmStsTrack.h:62
FairMCPoint
FairTask
TClonesArray
TObjArray::GetEntriesFast
Int_t GetEntriesFast() const
TObjArray::At
TObject * At(Int_t idx) const override
TStopwatch
TStopwatch::RealTime
Double_t RealTime()
TStopwatch::Start
void Start(Bool_t reset=kTRUE)
TStopwatch::Stop
void Stop()
QA
BmnMatchRecoToMC.cxx
Generated on
for BmnRoot by
1.17.0