210 std::map<int, std::vector<int> > mcHitMap;
219 cout <<
" ---- Info: " <<
fEventNr << endl;
223 Int_t PDGCode = -2212;
225 TDatabasePDG *fdbPDG = TDatabasePDG::Instance();
226 TParticlePDG *
fParticle = fdbPDG->GetParticle(PDGCode);
227 Double_t fCharge = fParticle->Charge() / 3.;
231 int glI =
fTracks->GetEntriesFast();
233 Int_t counterGeaneTrk = 0;
235 for (Int_t
i = 0;
i < glI;
i++) {
237 TVector3 StartPos, StartPosErr, StartMom, StartMomErr, StartO, StartU,
244 TVector3 PosRecLMD(fFittedTrkP.GetX(), fFittedTrkP.GetY(),
246 if (fFittedTrkP.GetZ() > 1130)
248 TVector3 MomRecLMD(fFittedTrkP.GetPx(), fFittedTrkP.GetPy(),
249 fFittedTrkP.GetPz());
250 MomRecLMD *=
fPbeam / MomRecLMD.Mag();
252 fFittedTrkP.SetPx(MomRecLMD.X());
253 fFittedTrkP.SetPy(MomRecLMD.Y());
254 fFittedTrkP.SetPz(MomRecLMD.Z());
255 double covMARS[6][6];
256 fFittedTrkP.GetMARSCov(covMARS);
257 TVector3 errMomRecLMD(
sqrt(covMARS[0][0]),
sqrt(covMARS[1][1]),
258 sqrt(covMARS[2][2]));
259 TVector3 errPosRecLMD(
sqrt(covMARS[3][3]),
sqrt(covMARS[4][4]),
260 sqrt(covMARS[5][5]));
262 StartPos = PosRecLMD;
263 StartPosErr = errPosRecLMD;
264 StartMom = MomRecLMD;
265 StartMomErr = errMomRecLMD;
268 FairTrackParP *fStartMCLMD =
new FairTrackParP();
277 int mcreftop = myHit->GetRefIndex();
286 double pxTrue = MCPointHit->GetPx();
287 double pyTrue = MCPointHit->GetPy();
288 double pzTrue = MCPointHit->GetPz();
289 TVector3 MomMClmd(pxTrue, pyTrue, pzTrue);
290 TVector3 dirMClmd = MomMClmd;
291 dirMClmd *= 1. / (MomMClmd.Mag());
292 MomMClmd *=
fPbeam / (MomMClmd.Mag());
293 double xMClmdNew = PosMClmd.X() - (dirMClmd.X() * 0.010);
294 double yMClmdNew = PosMClmd.Y() - (dirMClmd.Y() * 0.010);
295 double zMClmdNew = PosMClmd.Z() - (dirMClmd.Z() * 0.010);
296 PosMClmd.SetXYZ(xMClmdNew, yMClmdNew, zMClmdNew);
300 TVector3 ocMC(0, 0, 0);
301 TVector3 djMC(1., 0., 0.);
302 TVector3 dkMC(0., 1., 0.);
303 TVector3 PosMClmderr(0., 0., 0.);
304 TVector3 MomMClmderr(0., 0., 0.);
305 fStartMCLMD =
new FairTrackParP(PosMClmd, MomMClmd, PosMClmderr,
306 MomMClmderr, fCharge, ocMC, djMC, dkMC);
327 const int nstep0 = 10;
330 double zbend0[nstep0] = {fFittedTrkP.GetZ(),
341 const int nintstep = 100;
342 const int nstep = nstep0 * nintstep;
344 for (
int is = 1;
is <= nstep0;
is++) {
345 const double z0 = zbend0[
is - 1];
346 const double z1 = zbend0[
is];
347 const double zstep = (z0 - z1) / nintstep;
350 for (
int js = 0; js < nintstep; js++) {
351 int curint = (
is - 1) * nintstep + js;
352 zbend[curint] = z0 - zstep * js;
357 vector<double> vxmc(nstep), vymc(nstep), vxmc_err(nstep), vymc_err(nstep),
358 vzmc(nstep), vthetamc(nstep), vphimc(nstep), vpmc(nstep), vvmc(nstep),
359 vwmc(nstep), vtvmc(nstep), vtwmc(nstep), vvmc_err(nstep),
360 vwmc_err(nstep), vtvmc_err(nstep), vtwmc_err(nstep);
361 FairTrackParP *fStartMC =
new FairTrackParP();
363 cout <<
"------------------------------------------" << endl;
364 cout <<
"StartPos:" << endl;
366 cout <<
"StartPosErr:" << endl;
369 cout <<
"StartMom: " << StartMom.Mag() << endl;
371 cout <<
"StartMomErr: " << StartMomErr.Mag() << endl;
379 FairTrackParP *fStartPst =
new FairTrackParP(fFittedTrkP);
380 TVector3 istLMD(fStartPst->GetIVer());
381 TVector3 jstLMD(fStartPst->GetJVer());
382 TVector3 kstLMD(fStartPst->GetKVer());
389 TVector3 ocMC(0, 0, 0);
390 TVector3 djMC(1., 0., 0.);
391 TVector3 dkMC(0., 1., 0.);
398 TVector3 MomMCerr(0., 0., 0.);
399 TVector3 PosMCerr(0., 0., 0.);
402 cout <<
"!!! Achtung: " << PosMC.Z() << endl;
406 fStartMC =
new FairTrackParP(PosMC, MomMC, PosMCerr, MomMCerr, fCharge,
408 for (
int sj = nstep - 1; sj > -1; sj--) {
411 FairTrackParP *fResMC =
PropToPlane(fStartMC, zbend[sj], +1,
416 vxmc[sj] = fResMC->GetX();
417 vxmc_err[sj] = fResMC->GetDX();
418 vymc_err[sj] = fResMC->GetDY();
419 vymc[sj] = fResMC->GetY();
420 vzmc[sj] = fResMC->GetZ();
421 TVector3 finDirMC(fResMC->GetPx(), fResMC->GetPy(),
423 vpmc[sj] = finDirMC.Mag();
424 vthetamc[sj] = finDirMC.Theta();
425 vphimc[sj] = finDirMC.Phi();
427 vvmc[sj] = fResMC->GetV();
428 vwmc[sj] = fResMC->GetW();
429 vtvmc[sj] = fResMC->GetTV();
430 vtwmc[sj] = fResMC->GetTW();
431 vvmc_err[sj] = fResMC->GetDV();
432 vwmc_err[sj] = fResMC->GetDW();
433 vtvmc_err[sj] = fResMC->GetDTV();
434 vtwmc_err[sj] = fResMC->GetDTW();
441 if (abs(fStartMC->GetZ() - fFittedTrkP.GetZ()) > 10 &&
fVerbose > 5)
444 Int_t size1 = clref1.GetEntriesFast();
446 FairTrackParP *fStartPst =
new FairTrackParP(fFittedTrkP);
447 FairTrackParP *fStartPstMCLMD =
448 new FairTrackParP(*fStartMCLMD);
449 for (
int js = 1; js < nstep; js++) {
453 FairTrackParP *fResPst =
461 fStartPstMCLMD, zbend[js], -1, isPropMClmd);
463 TVector3 finPosMCLMD(fResPstMCLMD->GetX(), fResPstMCLMD->GetY(),
464 fResPstMCLMD->GetZ());
465 TVector3 finDirMCLMD(fResPstMCLMD->GetPx(), fResPstMCLMD->GetPy(),
466 fResPstMCLMD->GetPz());
468 TVector3 finPos(fResPst->GetX(), fResPst->GetY(), fResPst->GetZ());
469 TVector3 finDir(fResPst->GetPx(), fResPst->GetPy(),
474 double pnt[3] = {vxmc[js], vymc[js], vzmc[js]};
486 fprec = finDir.Mag();
516 fvrec = fResPst->GetV();
517 fwrec = fResPst->GetW();
518 ftvrec = fResPst->GetTV();
519 ftwrec = fResPst->GetTW();
525 fvmclmd = fResPstMCLMD->GetV();
526 fwmclmd = fResPstMCLMD->GetW();
535 delete fStartPstMCLMD;
536 fStartPstMCLMD = fResPstMCLMD;
547 FairTrackParH *fStart =
new (clref1[size1]) FairTrackParH(fStartPst, ierr);
549 Int_t size = clref.GetEntriesFast();
550 FairTrackParH *fRes =
new (clref[size]) FairTrackParH();
552 fPro->PropagateToPCA(1, -1);
553 Bool_t isProp =
fPro->Propagate(fStart, fRes, PDGCode);
561 TVector3 gPos(fRes->GetX(), fRes->GetY(), fRes->GetZ());
562 TVector3 gMom(fRes->GetPx(), fRes->GetPy(), fRes->GetPz());
564 TVector3 gErrPos(fRes->GetDX(), fRes->GetDY(), fRes->GetDZ());
565 TVector3 gErrMom(fRes->GetDPx(), fRes->GetDPy(), fRes->GetDPz());
570 cout <<
"gPos:" << endl;
574 cout <<
"gErrPos:" << endl;
579 cout <<
"gMom: " << gMom.Mag() << endl;
583 cout <<
"gErrMom: " << gErrMom.Mag() << endl;
590 if (motherID >= 0)
break;
598 double pnt[3] = {PosMC.X(), PosMC.Y(),
621 FairTrackParH *fStartMClmd =
new FairTrackParH(fStartPstMCLMD, ierr);
623 fPro->PropagateToPCA(1, -1);
624 FairTrackParH *fResMCLMD =
new FairTrackParH();
626 fStartMClmd, fResMCLMD,
628 TVector3 gPosMC(fResMCLMD->GetX(), fResMCLMD->GetY(),
630 TVector3 gMomMC(fResMCLMD->GetPx(), fResMCLMD->GetPy(),
639 delete fStartPstMCLMD;
641 cout <<
"================= %%%% ====================" << endl;
645 if (isProp == kTRUE) {
646 new ((*fTrackParFinal)[counterGeaneTrk])
647 FairTrackParH(*(fRes));
651 if (
fVerbose > 2) cout <<
"***** isProp TRUE *****" << endl;
654 cout <<
"!!! Back-propagation with GEANE didn't return result !!!"
656 cout <<
"StartPos:" << endl;
658 cout <<
"StartPosErr:" << endl;
661 cout <<
"StartMom: " << StartMom.Mag() << endl;
663 cout <<
"StartMomErr: " << StartMomErr.Mag() << endl;
666 new ((*fTrackParFinal)[counterGeaneTrk]) FairTrackParH();
674 if (
fVerbose > 2) cout <<
"PndLmdBPtestTask::Exec END!" << endl;
TClonesArray * fTrackParFinal
friend F32vec4 sqrt(const F32vec4 &a)
PndTrackCandHit GetSortedHit(UInt_t i)
TVector3 GetMomentum() const
std::map< int, std::vector< int > > AssignHitsToTracks()
TVector3 GetPosition() const
Int_t GetSecondMCHit() const
TClonesArray * fTrackParIni
TClonesArray * fTrackParGeane
Int_t GetRefIndex() const
TVector3 GetStartVertex() const
Int_t GetMotherID() const
TClonesArray * fRecCandTracks
FairTrackParP GetParamFirst()
FairTrackParP * PropToPlane(FairTrackParP *fStartPst, double zpos, int dir, bool &isProp)