127 std::map<int, std::vector<int> > mcHitMap;
137 Int_t PDGCode = -2212;
139 TDatabasePDG* fdbPDG = TDatabasePDG::Instance();
140 TParticlePDG*
fParticle = fdbPDG->GetParticle(PDGCode);
141 Double_t fCharge = fParticle->Charge() / 3.;
145 int glI =
fTracks->GetEntriesFast();
146 Int_t counterGeaneTrk = 0;
147 for (Int_t
i = 0;
i < glI;
i++) {
148 TVector3 StartPos, StartPosErr, StartMom, StartMomErr, StartO, StartU,
170 TVector3 PosRecLMD(fFittedTrkP.GetX(), fFittedTrkP.GetY(),
172 TVector3 MomRecLMD(fFittedTrkP.GetPx(), fFittedTrkP.GetPy(),
173 fFittedTrkP.GetPz());
174 MomRecLMD *=
fPbeam / MomRecLMD.Mag();
175 double covMARS[6][6];
176 fFittedTrkP.GetMARSCov(covMARS);
177 TVector3 errMomRecLMD(
sqrt(covMARS[0][0]),
sqrt(covMARS[1][1]),
178 sqrt(covMARS[2][2]));
179 TVector3 errPosRecLMD(
sqrt(covMARS[3][3]),
sqrt(covMARS[4][4]),
180 sqrt(covMARS[5][5]));
182 StartPos = PosRecLMD;
183 StartPosErr = errPosRecLMD;
184 StartMom = MomRecLMD;
185 StartMomErr = errMomRecLMD;
188 cout <<
"------------------------------------------" << endl;
189 cout <<
"StartPos:" << endl;
191 cout <<
"StartPosErr:" << endl;
194 cout <<
"StartMom: " << StartMom.Mag() << endl;
196 cout <<
"StartMomErr: " << StartMomErr.Mag() << endl;
200 Int_t size1 = clref1.GetEntriesFast();
269 TVector3 g3Pos = StartPos;
270 TVector3 g3Mom = StartMom;
271 TVector3 g3ErrPos = StartPosErr;
272 TVector3 g3ErrMom = StartMomErr;
273 TVector3 gErrPos, gErrMom;
278 double zbend[nstep] = {661, 660.5, 660., 659,
280 for (
int js = 0; js < nstep; js++) {
282 cout <<
"current : step#" << js << endl;
283 cout <<
"We start from:" << endl;
288 new RKTrackRep(g3Pos, g3Mom, g3ErrPos, g3ErrMom, PDGCode);
289 double znew = zbend[js];
290 TVector3 vtx2(0, 0, znew);
295 TMatrixT<double> cov2;
296 TVector3 g2Pos, g2Mom;
297 TVector3 g2ErrPos, g2ErrMom;
301 if (cov2[0][0] != 0) {
302 g2ErrPos.SetXYZ(
sqrt(cov2[0][0]),
sqrt(cov2[1][1]),
sqrt(cov2[2][2]));
303 g2ErrMom.SetXYZ(
sqrt(cov2[3][3]),
sqrt(cov2[4][4]),
sqrt(cov2[5][5]));
304 if (cov2[2][2] == 0) g2ErrPos.SetZ(StartPosErr.Z());
307 g2ErrPos = StartPosErr;
308 g2ErrMom = StartMomErr;
346 new RKTrackRep(g3Pos, g3Mom, g3ErrPos, g3ErrMom, PDGCode);
348 TMatrixT<double> gCov(7, 7);
356 TVector3 gDir = gMom;
357 gDir *= (1. / gMom.Mag());
360 gErrPos.SetXYZ(
sqrt(gCov[0][0]),
sqrt(gCov[1][1]),
sqrt(gCov[2][2]));
361 gErrMom.SetXYZ(
sqrt(gCov[3][3]),
sqrt(gCov[4][4]),
sqrt(gCov[5][5]));
364 FairTrackParH* fRes =
new (clref1[size1])
365 FairTrackParH(gPos, gMom, gErrPos, gErrMom, fCharge);
371 cout <<
"gPos:" << endl;
375 cout <<
"gErrPos:" << endl;
379 cout <<
"gMom: " << gMom.Mag() << endl;
383 cout <<
"gErrMom: " << gErrMom.Mag() << endl;
393 if (isProp == kTRUE) {
394 new ((*fTrackParFinal)[counterGeaneTrk])
395 FairTrackParH(*(fRes));
402 cout <<
"!!! Back-propagation with Runge-Kutta didn't return result !!!"
404 cout <<
"StartPos:" << endl;
406 cout <<
"StartPosErr:" << endl;
409 cout <<
"StartMom: " << StartMom.Mag() << endl;
411 cout <<
"StartMomErr: " << StartMomErr.Mag() << endl;
414 new ((*fTrackParFinal)[counterGeaneTrk]) FairTrackParH();
420 if (
fVerbose > 2) cout <<
"PndLmdBPRungeKuttaTask::Exec END!" << endl;
TClonesArray * fTrackParIni
Detector plane genfit geometry class.
friend F32vec4 sqrt(const F32vec4 &a)
std::map< int, std::vector< int > > AssignHitsToTracks()
Track Representation module based on a Runge-Kutta algorithm including a full material model...
TClonesArray * fTrackParGeane
void getPosMomCov(const GFDetPlane &pl, TVector3 &pos, TVector3 &mom, TMatrixT< double > &cov)
method which gets position, momentum and 6x6 covariance matrix
void extrapolateToPoint(const TVector3 &pos, TVector3 &poca, TVector3 &dirInPoca)
This method is to extrapolate the track to point of closest approach to a point in space...
virtual void Print() const
FairTrackParP GetParamFirst()
TClonesArray * fTrackParFinal