136 vector<BmnTrack> trackCombination;
137 vector<BmnTrack> bestCombination;
138 if (lTracks.size() != 0 && rTracks.size() != 0) {
141 for (
auto lTr : lTracks) {
142 for (
auto rTr : rTracks) {
143 trackCombination.push_back(lTr);
144 trackCombination.push_back(rTr);
147 if (
dist < minDist) {
150 bestCombination = trackCombination;
152 trackCombination.clear();
155 }
else if (lTracks.size() != 0 && rTracks.size() == 0) {
156 for (
auto lTr : lTracks) {
159 if (gl->GetUpstreamTrackIndex() == -1)
166 trackCombination.push_back(*mTr);
168 trackCombination.push_back(lTr);
171 if (
dist < minDist) {
174 bestCombination = trackCombination;
176 trackCombination.clear();
178 }
else if (rTracks.size() != 0 && lTracks.size() == 0) {
179 for (
auto rTr : rTracks) {
182 if (gl->GetUpstreamTrackIndex() == -1)
189 trackCombination.push_back(*mTr);
191 trackCombination.push_back(rTr);
194 if (
dist < minDist) {
197 bestCombination = trackCombination;
199 trackCombination.clear();
201 }
else if (rTracks.size() == 0 && lTracks.size() == 0) {
204 if (gl->GetUpstreamTrackIndex() == -1)
211 trackCombination.push_back(*mTr);
215 if (
dist < minDist) {
218 bestCombination = trackCombination;
220 trackCombination.clear();
224 if (minDist > 10.0) {
238 vx = ax * minVZ + bx;
239 vy = ay * minVZ + by;
246 for (
size_t iTr = 0; iTr < bestCombination.size(); ++iTr) {
247 BmnTrack track = bestCombination[iTr];
272 Int_t type = (isRight && isLeft) ? 10
273 : (isLeft && isFragm && isBeam) ? 11
274 : (isRight && isFragm && isBeam) ? 12
275 : (isBeam && isFragm) ? 13
294 vector<BmnTrack> trackCombination;
295 vector<BmnTrack> bestCombination;
296 if (lTracks.size() > 0 && rTracks.size() > 0) {
297 for (
auto lTr : lTracks) {
298 for (
auto rTr : rTracks) {
301 if (gl.GetUpstreamTrackIndex() != -1)
304 trackCombination.push_back(lTr);
305 trackCombination.push_back(rTr);
309 trackCombination.clear();
312 if (
dist < minDist) {
315 bestCombination = trackCombination;
317 trackCombination.clear();
320 }
else if (lTracks.size() == 0 && rTracks.size() > 0) {
321 for (
auto rTr : rTracks) {
324 if (gl.GetUpstreamTrackIndex() != -1)
327 trackCombination.push_back(rTr);
331 trackCombination.clear();
334 if (
dist < minDist) {
337 bestCombination = trackCombination;
339 trackCombination.clear();
341 }
else if (lTracks.size() > 0 && rTracks.size() == 0) {
342 for (
auto lTr : lTracks) {
345 if (gl.GetUpstreamTrackIndex() != -1)
348 trackCombination.push_back(lTr);
352 trackCombination.clear();
355 if (
dist < minDist) {
358 bestCombination = trackCombination;
360 trackCombination.clear();
363 if (minDist > 10.0) {
366 vector<Double_t> xHits;
367 vector<Double_t> yHits;
368 for (
size_t iTr = 0; iTr < bestCombination.size(); ++iTr) {
369 BmnTrack* track = &bestCombination[iTr];
370 FairTrackParam par0 =
373 if (
fKalman->TGeoTrackPropagate(&par0, minVZ, 2212,
nullptr, &len) ==
kBMNERROR) {
381 xHits.push_back(par0.GetX());
382 yHits.push_back(par0.GetY());
384 if (xHits.size() < 2) {
392 for (
size_t iTr = 0; iTr < bestCombination.size(); ++iTr) {
393 BmnTrack track = bestCombination[iTr];
412 Int_t type = (isRight && isLeft && isFragm) ? 10 : (isRight && isLeft) ? 11 : (isLeft && isFragm) ? 12 : 13;
454 const Int_t nPlanes = 5;
457 while (range >= 0.01) {
460 Float_t zStep = (zMax - zMin) / (nPlanes - 1);
462 vector<Double_t> xHits[nPlanes];
463 vector<Double_t> yHits[nPlanes];
467 for (
Int_t iPlane = 0; iPlane < nPlanes; ++iPlane)
468 zPlane[iPlane] = zMax - iPlane * zStep;
472 for (
size_t iTr = 0; iTr < tracks.size(); ++iTr) {
478 for (
Int_t iPlane = 0; iPlane < nPlanes; ++iPlane) {
479 if (
fKalman->TGeoTrackPropagate(&par0, zPlane[iPlane], 2212,
nullptr,
nullptr) ==
kBMNERROR) {
485 xTr[iPlane] = par0.GetX();
486 yTr[iPlane] = par0.GetY();
493 for (
Int_t iPlane = 0; iPlane < nPlanes; ++iPlane) {
494 xHits[iPlane].push_back(xTr[iPlane]);
495 yHits[iPlane].push_back(yTr[iPlane]);
506 for (
Int_t iPlane = 0; iPlane < nPlanes; ++iPlane) {
507 rRMS[iPlane] =
CalcMeanDist(xHits[iPlane], yHits[iPlane]);
515 minDist = a * minZ * minZ + b * minZ + c;
525 vector<Int_t> lTofHitIdx;
526 vector<Int_t> rTofHitIdx;
529 if (tHit->GetX() > 0)
530 lTofHitIdx.push_back(iTof);
532 rTofHitIdx.push_back(iTof);
538 vector<Int_t> lGemHitIdx;
539 vector<Int_t> rGemHitIdx;
544 if (gHit->GetX() > 0)
545 lGemHitIdx.push_back(iGem);
547 rGemHitIdx.push_back(iGem);
571 for (
auto gIdx : lGemHitIdx) {
572 for (
auto tIdx : lTofHitIdx) {
576 gx = gHit.GetX() + dxall;
577 gy = gHit.GetY() + dyall;
579 tx = tHit.GetX() + dxall;
580 ty = tHit.GetY() + dyall + dy_tl;
593 lTr.
SetB(tHit.GetTimeStamp());
594 lTracks.push_back(lTr);
597 for (
auto gIdx : rGemHitIdx) {
598 for (
auto tIdx : rTofHitIdx) {
602 gx = gHit.GetX() + dxall;
603 gy = gHit.GetY() + dyall;
605 tx = tHit.GetX() + dxall;
606 ty = tHit.GetY() + dyall + dy_tr;
619 rTr.
SetB(tHit.GetTimeStamp());
620 rTracks.push_back(rTr);
virtual TFitResultPtr Fit(const char *formula, Option_t *option="", Option_t *goption="", Axis_t xmin=0, Axis_t xmax=0)