99 Bool_t success = kTRUE;
102 if ( !fMCTrackArray ) {
103 cout <<
"-E- " << fName <<
"::DoFind: "
104 <<
"MCTrack array missing! " << endl;
107 if ( !fMCPointArray ) {
108 cout <<
"-E- " << fName <<
"::DoFind: "
109 <<
"MCPoint array missing! " << endl;
114 cout <<
"-E- " << fName <<
"::DoFind: "
115 <<
"Hit array missing! " << endl;
120 cout <<
"-E- " << fName <<
"::DoFind: "
121 <<
"Track array missing! " << endl;
126 Int_t nNoMCTrack = 0;
128 Int_t nNoStsPoint = 0;
133 FairMCPoint* pMCpt = NULL;
138 Int_t nHits =
fStsHits->GetEntriesFast();;
142 Int_t mcTrackIndex = 0;
143 Int_t trackIndex = 0;
147 map<Int_t, Int_t> hitMap;
150 for (Int_t iHit = 0; iHit<nHits; iHit++) {
152 if ( ! pHit )
continue;
153 ptIndex = pHit->GetRefIndex();
154 if (ptIndex < 0)
continue;
155 pMCpt = (FairMCPoint*) (fMCPointArray->At(ptIndex));
156 if ( ! pMCpt )
continue;
157 mcTrackIndex = pMCpt->GetTrackID();
158 hitMap[mcTrackIndex]++;
162 map<Int_t, Int_t> trackMap;
167 Int_t nMCTracks = fMCTrackArray->GetEntriesFast();
168 for (Int_t iMCTrack=0; iMCTrack<nMCTracks; iMCTrack++) {
169 pMCtr = (
CbmMCTrack*) fMCTrackArray->At(iMCTrack);
170 if ( ! pMCtr )
continue;
173 if ( hitMap[iMCTrack] < 3 )
continue;
175 if (
fVerbose>1) cout <<
"-I- " << fName <<
": StsTrack "
176 << nTracks <<
" created from MCTrack "
178 <<
" StsPoints)" << endl;
179 trackMap[iMCTrack] = nTracks++;
182 if (
fVerbose>2) cout <<
"-I- " << GetName() <<
": " << endl;
185 for (Int_t iHit = 0; iHit<nHits; iHit++) {
188 cout <<
"-E- " << fName <<
"::DoFind: Empty slot "
189 <<
"in StsHitArray at position " << iHit << endl;
194 ptIndex = pHit->GetRefIndex();
195 if (ptIndex < 0)
continue;
196 pMCpt = (FairMCPoint*) (fMCPointArray->At(ptIndex));
198 cout <<
"-E- " << fName <<
"::DoFind: No reference "
199 <<
"MCPoint " << ptIndex <<
" for hit " << iHit << endl;
204 mcTrackIndex = pMCpt->GetTrackID();
205 if (mcTrackIndex<0 || mcTrackIndex>nMCTracks) {
206 cout <<
"-E- " << fName <<
"::DoFind: "
207 <<
"MCTrack index out of range. " << mcTrackIndex <<
" "
208 << nMCTracks << endl;
213 if (trackMap.find(mcTrackIndex) == trackMap.end())
continue;
214 trackIndex = trackMap[mcTrackIndex];
217 cout <<
"-E- " << fName <<
"::DoFind: "
218 <<
"No StsTrack pointer. " << iHit <<
" " << ptIndex
219 <<
" " << mcTrackIndex <<
" " << trackIndex << endl;
225 if (
fVerbose>2) cout <<
"Sts Hit " << iHit <<
" from StsPoint "
226 << ptIndex <<
" (MCTrack "
227 << mcTrackIndex <<
") added to StsTrack "
228 << trackIndex << endl;
234 cout <<
"-------------------------------------------------------"
236 cout <<
"-I- " << fName << endl;
237 cout <<
"Sts hits: " << nHits << endl;
238 cout <<
"MCTracks: total " << nMCTracks <<
", accepted " << nMCacc
239 <<
", reconstructable: " << nTracks << endl;
240 if (nNoStsHit) cout <<
"StsHits not found : "
241 << nNoStsHit << endl;
242 if (nNoStsPoint) cout <<
"StsPoints not found : "
243 << nNoStsPoint << endl;
244 if (nNoMCTrack) cout <<
"MCTracks not found : "
245 << nNoMCTrack << endl;
246 if (nNoTrack) cout <<
"StsTracks not found : "
248 cout <<
"-------------------------------------------------------"
252 if ( success ) cout <<
"+ ";
254 cout << setw(15) << left << fName <<
": "
255 << nMCTracks <<
", acc. " << nMCacc <<
", rec. " << nTracks << endl;