105 Bool_t warn = kFALSE;
114 FairMCPoint* point = NULL;
127 Int_t nMCTrackSum = 0;
128 map<Int_t, Int_t>::iterator it;
131 Int_t nTracks = fTracks->GetEntriesFast();
132 for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
135 cout <<
"-W- BmnStsMatchTracks::Exec: Empty StsTrack at " << iTrack << endl;
140 nAll = nTrue = nWrong = nFake = nMCTracks = 0;
143 cout << endl <<
"Track " << iTrack <<
", Hits " << nHits << endl;
146 for (Int_t iHit = 0; iHit < nHits; iHit++) {
149 cout <<
"-E- BmnStsMatchTracks::Exec: "
150 <<
"No StsHit " << iHit <<
" for track " << iTrack << endl;
155 iPoint = hit->GetRefIndex();
162 point = (FairMCPoint*)fSilPoints->At(iPoint);
164 point = (FairMCPoint*)fGemPoints->At(iPoint);
167 cout <<
"-E- CbmStsMatchTracks::Exec: "
168 <<
"Empty MCPoint " << iPoint <<
" from MapsHit " << iHit <<
" (track " << iTrack <<
")" << endl;
172 iMCTrack = point->GetTrackID();
174 cout <<
"Track " << iTrack <<
", MAPS hit " << track->
GetStsHitIndex(iHit) <<
", StsPoint " << iPoint
175 <<
", MCTrack " << iMCTrack << endl;
176 fMatchMap[iMCTrack]++;
199 for (it = fMatchMap.begin(); it != fMatchMap.end(); it++) {
201 cout << it->second <<
" common points wth MCtrack " << it->first << endl;
204 if (it->second > nTrue) {
205 iMCTrack = it->first;
209 nWrong = nAll - nTrue;
211 cout <<
"-I- BmnStsMatchTracks: StsTrack " << iTrack <<
", MCTrack " << iMCTrack <<
", true " << nTrue
212 <<
", wrong " << nWrong <<
", fake " << nFake <<
", #MCTracks " << nMCTracks << endl;
215 new ((*fMatches)[iTrack])
CbmTrackMatch(iMCTrack, nTrue, nWrong, nFake, nMCTracks);
222 nMCTrackSum += nMCTracks;
230 qTrue = Double_t(nTrueSum) / Double_t(nHitSum) * 100.;
232 Double_t qWrong = Double_t(nWrongSum) / Double_t(nHitSum) * 100.;
233 Double_t qFake = Double_t(nFakeSum) / Double_t(nHitSum) * 100.;
234 Double_t qMC = Double_t(nMCTrackSum) / Double_t(nTracks);
236 cout <<
"-------------------------------------------------------" << endl;
237 cout <<
"-I- Sts Track Matching -I-" << endl;
238 cout <<
"Reconstructed StsTracks : " << nTracks << endl;
240 cout <<
"True hit assignments : " << qTrue <<
" %" << endl;
241 cout <<
"Wrong hit assignments : " << qWrong <<
" %" << endl;
242 cout <<
"Fake hit assignments : " << qFake <<
" %" << endl;
243 cout <<
"MCTracks per StsTrack : " << qMC << endl;
244 cout <<
"--------------------------------------------------------" << endl;
251 cout << setw(15) << left << fName <<
": " << setprecision(4) << setw(8) << fixed << right << fTimer.RealTime()
252 <<
" s, matches " << nTracks <<
", hit quota " << qTrue <<
" %" << endl;
260 fTime += fTimer.RealTime();
261 fNTrackMatches += Double_t(nTracks);
262 fNAllHits += Double_t(nHitSum);
263 fNTrueHits += Double_t(nTrueSum);
273 FairRootManager* ioman = FairRootManager::Instance();
275 cout <<
"-E- BmnStsMatchTracks::Init: "
276 <<
"RootManager not instantised!" << endl;
281 fHits = (TClonesArray*)ioman->GetObject(
"StsHit");
283 cout <<
"-W- BmnStsMatchTracks::Init: No StsHit array!" << endl;
289 fTracks = (TClonesArray*)ioman->GetObject(
"StsTrack");
291 fTracks = (TClonesArray*)ioman->GetObject(fTrBranch);
294 cout <<
"-E- BmnStsMatchTracks::Init: No StsTrack array!" << endl;
299 fGemPoints = (TClonesArray*)ioman->GetObject(
"StsPoint");
305 fSilPoints = (TClonesArray*)ioman->GetObject(
"SiliconPoint");
312 fMatches =
new TClonesArray(
"CbmTrackMatch", 100);
313 ioman->Register(
"StsTrackMatch",
"STS", fMatches, kTRUE);
324 cout <<
"============================================================" << endl;
325 cout <<
"===== " << GetName() <<
": Run summary " << endl;
326 cout <<
"===== " << endl;
327 cout <<
"===== Good events : " << setw(6) << fNEvents << endl;
328 cout <<
"===== Failed events : " << setw(6) << fNEventsFailed << endl;
329 cout <<
"===== Average time : " << setprecision(4) << setw(8) << right << fTime / Double_t(fNEvents) <<
" s"
331 cout <<
"===== " << endl;
332 cout <<
"===== Tracks per event : " << fixed << setprecision(0) << fNTrackMatches / Double_t(fNEvents) << endl;
333 cout << setprecision(2);
334 cout <<
"===== True hits : " << fixed << setw(6) << right << fNTrueHits / fNAllHits * 100. <<
" %" << endl;
335 cout <<
"============================================================" << endl;