69 cout <<
" **************************************************" << endl;
71 cout <<
" *** Using Much tracks for Stt tracking *** " << endl;
73 cout <<
" *** Using Sts tracks for Stt tracking *** " << endl;
74 cout <<
" **************************************************" << endl;
88 const int MaxBranches = 50;
90 static bool first = 1;
92 static int EventCounter = 0;
94 cout <<
" SttRec event " << EventCounter << endl;
105 fhNBranches =
new TH1F(
"NBranches",
"N Branches", MaxBranches, 0, MaxBranches);
109 int NHits =
fSttHits->GetEntriesFast();
110 vector<CbmL1SttHit> vSttHits;
112 for (
int ih = 0; ih < NHits; ++ih) {
113 CbmSttHit* h = (CbmSttHit*)
fSttHits->UncheckedAt(ih);
115 vSttHits.push_back(
m);
118 vector<CbmL1SttTrack> vTracks;
127 cout <<
" Seed tracks: " << nStsTracks << endl;
130 Double_t scatAng[MaxBranches] = {0.};
132 for (
int itr = 0; itr < nStsTracks; ++itr) {
157 itr1 = ((CbmMuchTrack*)sts)->GetStsTrackID();
161 Int_t mcTrackID =
m->GetMCTrackId();
168 for (
Int_t i = 0;
i < nStations; ++
i)
170 for (
int ih = 0; ih < NHits; ++ih) {
173 CbmSttPoint* p = (CbmSttPoint*)
fSttPoints->UncheckedAt(hit->GetRefIndex());
174 if (p->GetTrackID() != mcTrackID)
176 if (p->GetStationNo() == 1 &&
TMath::Sqrt(p->GetX() * p->GetX() + p->GetY() * p->GetY()) > 220)
186 if (itr < MaxBranches)
189 if (nOK < nStations) {
201 Branches[0].
StsID = itr;
202 Branches[0].
NHits = 0;
207 Branches[0].
vHits.clear();
209 for (
Int_t ist = 0; ist < nStations; ++ist) {
211 int NBranchesOld = NBranches;
213 for (
Int_t ibr = 0; ibr < NBranchesOld; ++ibr) {
223 if (
fabs(tr.
T[4]) > 100.)
225 if (1. < 0.5 *
fabs(tr.
T[4]))
242 for (
int ih = 0; ih < NHits; ++ih) {
281 NewHits.push_back(ih);
284 int nnew = NewHits.size();
285 for (
int ih = 1; ih < nnew; ++ih) {
286 if (NBranches >= MaxBranches)
291 t.
vHits.push_back(&h);
298 tr.
vHits.push_back(&h);
300 double qp0 = tr.
T[4];
307 for (
int ibr = 1; ibr < NBranches; ++ibr) {
308 if ((Branches[ibr].NHits > Branches[bestbr].NHits)
309 || (Branches[ibr].NHits == Branches[bestbr].NHits) && (Branches[ibr].chi2 < Branches[bestbr].chi2))
312 vTracks.push_back(Branches[bestbr]);
325 if (nOK == nStations)
328 (vTracks.back()).ok =
kFALSE;
332 int NTracks = vTracks.size();
333 cout <<
"NTracks=" << NTracks << endl;
336 vector<CbmL1SttTrack*> vpTracks;
337 for (
int i = 0;
i < NTracks; ++
i)
338 vpTracks.push_back(&(vTracks[
i]));
343 for (
int it = 0; it < NTracks; ++it) {
350 for (
int ih = 0; ih < tr.
NHits; ++ih)
351 if (tr.
vHits[ih]->busy)
353 if (0 && nbusy > 2) {
358 Int_t nDoubl[20] = {0};
365 for (
Int_t i = 0;
i < nStations / 2; ++
i)
367 if (nHit < nStations / 2)
373 new ((*fTrackCollection)[NOutTracks]) CbmSttTrack();
379 track->SetSttTrack(&tp);
380 track->SetStsTrackID(tr.
StsID);
382 for (vector<CbmL1SttHit*>::iterator
i = tr.
vHits.begin();
i != tr.
vHits.end();
i++) {
385 track->AddHitIndex((*i)->index);
387 track->SetNMissedHits(tr.
NMissed);
389 if (tr.
StsID < MaxBranches)
390 track->SetScatAng(scatAng[tr.
StsID]);
392 for (
int ih = 0; ih < tr.
NHits; ++ih)
393 tr.
vHits[ih]->busy = 1;
396 if (EventCounter < 100 && EventCounter % 10 == 0 || EventCounter >= 100 && EventCounter % 100 == 0)