10 #include <TMatrixDSym.h>
11 #include "TClonesArray.h"
17 #include "FairBaseParSet.h"
19 #include "FairRootManager.h"
21 #include "FairRunAna.h"
22 #include "FairRuntimeDb.h"
23 #include "FairTrackParH.h"
24 #include "FairTrackParP.h"
29 #include "TDatabasePDG.h"
42 : FairTask(
"Geane Task for PANDA Lmd"), fEventNr(0), fUseMVDPoint(false) {
49 : FairTask(
"Geane Task for PANDA Lmd"), fEventNr(0), fUseMVDPoint(false) {
52 cout <<
"Beam Momentum for particle with PDGid#" <<
fPDGid <<
" this run is "
55 cout <<
"Interaction Point:" << endl;
70 FairRootManager* ioman = FairRootManager::Instance();
72 std::cout <<
"-E- PndLmdGeaneTask::Init: "
73 <<
"RootManager not instantiated!" << std::endl;
80 std::cout <<
"-W- PndLmdGeaneTask::Init: "
82 <<
" array!" << std::endl;
90 ioman->Register(
"GeaneTrackIni",
"Geane",
fTrackParIni, kTRUE);
93 ioman->Register(
"GeaneTrackFinal",
"Geane",
fTrackParFinal, kTRUE);
95 fDetName =
new TClonesArray(
"TObjString");
96 ioman->Register(
"DetName",
"Geane",
fDetName, kTRUE);
98 fPro =
new FairGeanePro();
104 pndField = FairRunAna::Instance()->GetField();
119 cout <<
" ---- Info: " <<
fEventNr << endl;
123 Int_t PDGCode = -2212;
126 int glI =
fTracks->GetEntriesFast();
128 Int_t counterGeaneTrk = 0;
130 for (Int_t
i = 0;
i < glI;
i++) {
131 TVector3 StartPos, StartPosErr, StartMom, StartMomErr, StartO, StartU,
137 TVector3 PosRecLMD(fFittedTrkP.GetX(), fFittedTrkP.GetY(),
139 if (fFittedTrkP.GetZ() > 1130)
141 TVector3 MomRecLMD(fFittedTrkP.GetPx(), fFittedTrkP.GetPy(),
142 fFittedTrkP.GetPz());
145 fFittedTrkP.SetPx(MomRecLMD.X());
146 fFittedTrkP.SetPy(MomRecLMD.Y());
147 fFittedTrkP.SetPz(MomRecLMD.Z());
148 double covMARS[6][6];
149 fFittedTrkP.GetMARSCov(covMARS);
150 TVector3 errMomRecLMD(
sqrt(covMARS[0][0]),
sqrt(covMARS[1][1]),
151 sqrt(covMARS[2][2]));
152 TVector3 errPosRecLMD(
sqrt(covMARS[3][3]),
sqrt(covMARS[4][4]),
153 sqrt(covMARS[5][5]));
155 StartPos = PosRecLMD;
156 StartPosErr = errPosRecLMD;
157 StartMom = MomRecLMD;
158 StartMomErr = errMomRecLMD;
165 double zbend[nstep] = {661, 660.5, 660., 659,
168 cout <<
"------------------------------------------" << endl;
169 cout <<
"StartPos:" << endl;
171 cout <<
"StartPosErr:" << endl;
174 cout <<
"StartMom: " << StartMom.Mag() << endl;
176 cout <<
"StartMomErr: " << StartMomErr.Mag() << endl;
181 Int_t size1 = clref1.GetEntriesFast();
183 FairTrackParP* fStartPst =
new FairTrackParP(fFittedTrkP);
184 for (
int js = 1; js < nstep; js++) {
187 FairTrackParP* fResPst =
200 FairTrackParH* fStart =
new (clref1[size1]) FairTrackParH(fStartPst, ierr);
202 Int_t size = clref.GetEntriesFast();
204 FairTrackParH* fRes =
new (clref[size]) FairTrackParH();
206 fPro->PropagateToPCA(1, -1);
207 Bool_t isProp =
fPro->Propagate(fStart, fRes, PDGCode);
226 TVector3 gPos(fRes->GetX(), fRes->GetY(), fRes->GetZ());
227 TVector3 gMom(fRes->GetPx(), fRes->GetPy(), fRes->GetPz());
229 TVector3 gErrPos(fRes->GetDX(), fRes->GetDY(), fRes->GetDZ());
230 TVector3 gErrMom(fRes->GetDPx(), fRes->GetDPy(), fRes->GetDPz());
235 cout <<
"gPos:" << endl;
239 cout <<
"gErrPos:" << endl;
244 cout <<
"gMom: " << gMom.Mag() << endl;
248 cout <<
"gErrMom: " << gErrMom.Mag() << endl;
253 cout <<
"================= %%%% ====================" << endl;
257 if (isProp == kTRUE) {
258 new ((*fTrackParFinal)[counterGeaneTrk])
259 FairTrackParH(*(fRes));
263 if (
fVerbose > 2) cout <<
"***** isProp TRUE *****" << endl;
266 cout <<
"!!! Back-propagation with GEANE didn't return result !!!"
268 cout <<
"StartPos:" << endl;
270 cout <<
"StartPosErr:" << endl;
273 cout <<
"StartMom: " << StartMom.Mag() << endl;
275 cout <<
"StartMomErr: " << StartMomErr.Mag() << endl;
278 new ((*fTrackParFinal)[counterGeaneTrk]) FairTrackParH();
286 if (
fVerbose > 2) cout <<
"PndLmdGeaneTask::Exec END!" << endl;
294 double zpos,
int dir,
296 TVector3 stStartPos(fStartPst->GetX(), fStartPst->GetY(), fStartPst->GetZ());
299 TVector3 MomStartPos(fStartPst->GetPx(), fStartPst->GetPy(),
301 MomStartPos *=
fPbeam / MomStartPos.Mag();
302 fStartPst->SetPx(MomStartPos.X());
303 fStartPst->SetPy(MomStartPos.Y());
304 fStartPst->SetPz(MomStartPos.Z());
307 TVector3 ist(fStartPst->GetIVer());
308 TVector3 jst(fStartPst->GetJVer());
309 TVector3 kst(fStartPst->GetKVer());
310 TVector3 oc(0, 0, zpos);
311 TVector3 dj(1., 0., 0.);
312 TVector3 dk(0., 1., 0.);
315 fPro->PropagateFromPlane(jst, kst);
316 fPro->PropagateToPlane(oc, dj, dk);
317 if (dir < 0)
fPro->setBackProp();
318 FairTrackParP* fResPst =
new FairTrackParP();
319 isProp =
fPro->Propagate(fStartPst, fResPst,
fPDGid);
virtual void SetParContainers()
friend F32vec4 sqrt(const F32vec4 &a)
virtual InitStatus Init()
virtual void Exec(Option_t *opt)
static PndGeoHandling * Instance()
TClonesArray * fTrackParGeane
TClonesArray * fTrackParIni
TClonesArray * fTrackParFinal
std::string track_branch_name
FairTrackParP * PropToPlane(FairTrackParP *fStartPst, double zpos, int dir, bool &isProp)
FairTrackParP GetParamFirst()