BmnRoot
Loading...
Searching...
No Matches
CbmStsTrackFitterIdeal.cxx
Go to the documentation of this file.
1// -------------------------------------------------------------------------
2// ----- CbmStsTrackFitterIdeal source file -----
3// ----- Created 12/05/06 by D. Kresan -----
4// -------------------------------------------------------------------------
5
7
8#include "CbmStsPoint.h"
9#include "CbmStsHit.h"
10#include "CbmStsTrack.h"
11
12#include "FairRootManager.h"
13#include "CbmMCTrack.h"
14
15#include "TClonesArray.h"
16#include "TVector3.h"
17#include "TParticlePDG.h"
18
19#include <iostream>
20
21using std::cout;
22using std::cerr;
23using std::endl;
24
25// ---------------------------- Constructor --------------------------------
27: fArrayMCTrack(NULL),
28 fArrayStsPoint(NULL),
29 fArrayStsHit(NULL),
30 dbPDG()
31{
32}
33// -------------------------------------------------------------------------
34
35
36// ---------------------------- Destructor ---------------------------------
41// -------------------------------------------------------------------------
42
43
44// -------------------------- Initialisation -------------------------------
46{
47 dbPDG = TDatabasePDG::Instance();
48 if(NULL == dbPDG) {
49 cout << "-W- CbmStsTrackFitterIdeal::Init : "
50 << "Database PDG is not instantiated!" << endl;
51 }
52
53 FairRootManager* rootMgr = FairRootManager::Instance();
54 if(NULL == rootMgr) {
55 cerr << "-E- CbmStsTrackFitterIdeal::Init : "
56 << "ROOT manager is not instantiated!" << endl;
57 return;
58 }
59
60 fArrayMCTrack = (TClonesArray*) rootMgr->GetObject("MCTrack");
61 if(NULL == fArrayMCTrack) {
62 cout << "-W- CbmStsTrackFitterIdeal::Init : "
63 << "no MC track array!" << endl;
64 }
65
66 fArrayStsPoint = (TClonesArray*) rootMgr->GetObject("StsPoint");
67 if(NULL == fArrayStsPoint) {
68 cout << "-W- CbmStsTrackFitterIdeal::Init : "
69 << "no STS point array!" << endl;
70 }
71
72 fArrayStsHit = (TClonesArray*) rootMgr->GetObject("StsHit");
73 if(NULL == fArrayStsHit) {
74 cout << "-W- CbmStsTrackFitterIdeal::Init : "
75 << "no STS hit array!" << endl;
76 }
77
78}
79// -------------------------------------------------------------------------
80
81
82
83// ------------------------ Fitting algorithm ------------------------------
84Int_t CbmStsTrackFitterIdeal::DoFit(CbmStsTrack* pTrack, Int_t pidHypo)
85{
86 if(NULL == fArrayStsPoint || NULL == fArrayStsHit ) return 0;
87
88 // Parameters at the first plane
89 Int_t hitIndex = -1;
90 CbmStsHit* hit;
91 Int_t pointIndex;
92 if(pTrack->GetNStsHits() > 0) {
93 hitIndex = pTrack->GetStsHitIndex(0);
94 if(hitIndex < 0) return 0;
95 hit = (CbmStsHit*) fArrayStsHit->At(hitIndex);
96 if(NULL == hit) return 0;
97 pointIndex = hit->GetRefIndex();
98 }
99 if(pointIndex < 0) return 0;
100 CbmStsPoint* point = (CbmStsPoint*) fArrayStsPoint->At(pointIndex);
101 if(NULL == point) return 0;
102 SetTrackParam(point, pTrack->GetParamFirst());
103
104 // Parameters at the last plane
105 if(pTrack->GetNStsHits() > 0) {
106 hitIndex = pTrack->GetStsHitIndex( pTrack->GetNStsHits()-1 );
107 if(hitIndex < 0) return 0;
108 hit = (CbmStsHit*) fArrayStsHit->At(hitIndex);
109 if(NULL == hit) return 0;
110 pointIndex = hit->GetRefIndex();
111 }
112 if(pointIndex < 0) return 0;
113 point = (CbmStsPoint*) fArrayStsPoint->At(pointIndex);
114 if(NULL == point) return 0;
115 SetTrackParam(point, pTrack->GetParamLast(), 1);
116
117 return 1;
118}
119// -------------------------------------------------------------------------
120
121
122// -------------------------- Set track parameters -------------------------
123void CbmStsTrackFitterIdeal::SetTrackParam(CbmStsPoint* point, FairTrackParam* trackParam, Int_t out)
124{
125 TVector3 pos;
126 TVector3 mom;
127 if(0 == out) {
128 point->Position(pos);
129 point->Momentum(mom);
130 } else {
131 point->PositionOut(pos);
132 point->MomentumOut(mom);
133 }
134 trackParam->SetX(pos.X());
135 trackParam->SetY(pos.Y());
136 trackParam->SetZ(pos.Z());
137 trackParam->SetTx(mom.X()/mom.Z());
138 trackParam->SetTy(mom.Y()/mom.Z());
139 Int_t mcTrackIndex = point->GetTrackID();
140 if(mcTrackIndex < 0) return;
141 CbmMCTrack* mcTrack = (CbmMCTrack*) fArrayMCTrack->At(mcTrackIndex);
142 if(NULL == mcTrack) return;
143 Int_t pdgCode = mcTrack->GetPdgCode();
144 TParticlePDG* particle = dbPDG->GetParticle(pdgCode);
145 if(NULL == particle) return;
146 trackParam->SetQp(particle->Charge() / mom.Mag());
147}
148// -------------------------------------------------------------------------
Int_t GetPdgCode() const
Definition CbmMCTrack.h:56
void PositionOut(TVector3 &pos)
Definition CbmStsPoint.h:79
void MomentumOut(TVector3 &mom)
Definition CbmStsPoint.h:80
void SetTrackParam(CbmStsPoint *point, FairTrackParam *trackParam, Int_t out=0)
Int_t DoFit(CbmStsTrack *pTrack, Int_t pidHypo=211)
FairTrackParam * GetParamLast()
Definition CbmStsTrack.h:70
Int_t GetNStsHits() const
Definition CbmStsTrack.h:60
Int_t GetStsHitIndex(Int_t iHit) const
Definition CbmStsTrack.h:62
FairTrackParam * GetParamFirst()
Definition CbmStsTrack.h:69