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 || fFittedTrkP.GetZ() < 1000 )
 
  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
ClassImp(PndLmdGeaneTask)
TClonesArray * fTrackParIni
TClonesArray * fTrackParFinal
std::string track_branch_name
FairTrackParP * PropToPlane(FairTrackParP *fStartPst, double zpos, int dir, bool &isProp)
FairTrackParP GetParamFirst()