1 ///////////////////////////////////////////////////////////////////////////
3 // AliFemtoTrack: main class holding all the necessary information //
4 // about a track (before the identification) that is required during //
5 // femtoscopic analysis. This class is filled with information from the //
6 // input stream by the reader. A particle has a link back to the Track //
7 // it was created from, so we do not copy the information. //
9 ///////////////////////////////////////////////////////////////////////////
11 #include "AliFemtoTrack.h"
12 #ifndef __NO_STAR_DEPENDENCE_ALLOWED__
14 #include "StEvent/StEnumerations.h"
15 #include "AliFemtoAihongPid.h"
16 #include "StEventUtilities/StuProbabilityPidAlgorithm.h"
20 #include "SystemOfUnits.h" // has "tesla" in it
21 //#include "AliFemtoParticleTypes.h"
22 //#include "AliFemtoTTreeEvent.h"
23 //#include "AliFemtoTTreeTrack.h"
25 AliFemtoTrack::AliFemtoTrack():
54 fNominalTpcEntrancePoint(0,0,0),
55 fNominalTpcExitPoint(0,0,0),
58 // Default constructor
63 // cout << "Created track " << this << endl;
67 AliFemtoTrack::AliFemtoTrack(const AliFemtoTrack& t) :
96 fNominalTpcEntrancePoint(0,0,0),
97 fNominalTpcExitPoint(0,0,0),
102 fPidProbElectron = t.fPidProbElectron;
103 fPidProbPion = t.fPidProbPion;
104 fPidProbKaon = t.fPidProbKaon;
105 fPidProbProton = t.fPidProbProton;
106 fPidProbMuon=t.fPidProbMuon;
110 fTrackId = t.fTrackId;
122 fTPCnclsF=t.fTPCnclsF;
123 fTPCsignal=t.fTPCsignal;
124 fTPCsignalN=t.fTPCsignalN;
125 fTPCsignalS=t.fTPCsignalS;
126 fSigmaToVertex=t.fSigmaToVertex;
127 fClusters=t.fClusters;
129 fNominalTpcEntrancePoint=t.fNominalTpcEntrancePoint;
130 fNominalTpcExitPoint=t.fNominalTpcExitPoint;
131 if (t.ValidHiddenInfo())
132 fHiddenInfo = t.GetHiddenInfo()->Clone();
135 fKinkIndexes[0] = t.fKinkIndexes[0];
136 fKinkIndexes[1] = t.fKinkIndexes[1];
137 fKinkIndexes[2] = t.fKinkIndexes[2];
138 // cout << "Created track " << this << endl;
141 AliFemtoTrack& AliFemtoTrack::operator=(const AliFemtoTrack& aTrack)
143 // assignment operator
146 fCharge = aTrack.fCharge;
147 fPidProbElectron = aTrack.fPidProbElectron;
148 fPidProbPion = aTrack.fPidProbPion;
149 fPidProbKaon = aTrack.fPidProbKaon;
150 fPidProbProton = aTrack.fPidProbProton;
151 fPidProbMuon=aTrack.fPidProbMuon;
154 fHelix = aTrack.fHelix;
155 fTrackId = aTrack.fTrackId;
156 fFlags=aTrack.fFlags;
157 fLabel=aTrack.fLabel;
158 fImpactD=aTrack.fImpactD;
159 fImpactZ=aTrack.fImpactZ;
163 fITSchi2=aTrack.fITSchi2;
164 fITSncls=aTrack.fITSncls;
165 fTPCchi2=aTrack.fTPCchi2;
166 fTPCncls=aTrack.fTPCncls;
167 fTPCnclsF=aTrack.fTPCnclsF;
168 fTPCsignal=aTrack.fTPCsignal;
169 fTPCsignalN=aTrack.fTPCsignalN;
170 fTPCsignalS=aTrack.fTPCsignalS;
171 fClusters=aTrack.fClusters;
172 fShared=aTrack.fShared;
173 fNominalTpcEntrancePoint=aTrack.fNominalTpcEntrancePoint;
174 fNominalTpcExitPoint=aTrack.fNominalTpcExitPoint;
175 fKinkIndexes[0] = aTrack.fKinkIndexes[0];
176 fKinkIndexes[1] = aTrack.fKinkIndexes[1];
177 fKinkIndexes[2] = aTrack.fKinkIndexes[2];
178 if (ValidHiddenInfo())
180 if (aTrack.ValidHiddenInfo())
181 fHiddenInfo = aTrack.GetHiddenInfo()->Clone();
188 void AliFemtoTrack::SetCharge(const short& ch){fCharge=ch;}
190 void AliFemtoTrack::SetPidProbElectron(const float& x){fPidProbElectron = x;}
191 void AliFemtoTrack::SetPidProbPion(const float& x){fPidProbPion = x;}
192 void AliFemtoTrack::SetPidProbKaon(const float& x){fPidProbKaon = x;}
193 void AliFemtoTrack::SetPidProbProton(const float& x){fPidProbProton = x;}
194 void AliFemtoTrack::SetPidProbMuon(const float& x){fPidProbMuon = x;}
196 void AliFemtoTrack::SetP(const AliFemtoThreeVector& p){fP = p;}
197 void AliFemtoTrack::SetPt(const float& pt){fPt = pt;}
198 void AliFemtoTrack::SetHelix(const AliFmPhysicalHelixD& h){fHelix = h;}
199 void AliFemtoTrack::SetTrackId(const short & id) { fTrackId=id;}
200 void AliFemtoTrack::SetFlags(const long int &flags) {fFlags=flags;}
201 void AliFemtoTrack::SetLabel(const int &label) {fLabel=label;}
202 void AliFemtoTrack::SetImpactD(const float& aImpactD){fImpactD=aImpactD;}
203 void AliFemtoTrack::SetImpactZ(const float& aImpactZ){fImpactZ=aImpactZ;}
204 void AliFemtoTrack::SetCdd(const float& aCdd){fCdd=aCdd;}
205 void AliFemtoTrack::SetCdz(const float& aCdz){fCdz=aCdz;}
206 void AliFemtoTrack::SetCzz(const float& aCzz){fCzz=aCzz;}
207 void AliFemtoTrack::SetITSchi2(const float& aITSchi2){fITSchi2=aITSchi2;}
208 void AliFemtoTrack::SetITSncls(const int& aITSncls){fITSncls=aITSncls;}
209 void AliFemtoTrack::SetTPCchi2(const float& aTPCchi2){fTPCchi2=aTPCchi2;}
210 void AliFemtoTrack::SetTPCncls(const int& aTPCncls){fTPCncls=aTPCncls;}
211 void AliFemtoTrack::SetTPCnclsF(const short& aTPCnclsF){fTPCnclsF=aTPCnclsF;}
212 void AliFemtoTrack::SetTPCsignal(const float& aTPCsig){fTPCsignal=aTPCsig;}
213 void AliFemtoTrack::SetTPCsignalN(const short& aTPCsignalN){fTPCsignalN=aTPCsignalN;}
214 void AliFemtoTrack::SetTPCsignalS(const float& aTPCsignalS){fTPCsignalS=aTPCsignalS;}
215 void AliFemtoTrack::SetSigmaToVertex(const float& aSigma){fSigmaToVertex=aSigma;}
218 short AliFemtoTrack::Charge() const {return fCharge;}
219 AliFemtoThreeVector AliFemtoTrack::P() const {return fP;}
220 float AliFemtoTrack::Pt() const {return fPt;}
221 const AliFmPhysicalHelixD& AliFemtoTrack::Helix() const {return fHelix;}
222 short AliFemtoTrack::TrackId() const { return fTrackId; }
223 long int AliFemtoTrack::Flags() const {return fFlags;}
224 int AliFemtoTrack::Label()const {return fLabel;}
225 float AliFemtoTrack::ImpactD()const{return fImpactD;}
226 float AliFemtoTrack::ImpactZ()const{return fImpactZ;}
227 float AliFemtoTrack::Cdd() const{return fCdd;}
228 float AliFemtoTrack::Cdz() const{return fCdz;}
229 float AliFemtoTrack::Czz() const{return fCzz;}
230 float AliFemtoTrack::ITSchi2() const{return fITSchi2;}
231 int AliFemtoTrack::ITSncls() const{return fITSncls;}
232 float AliFemtoTrack::TPCchi2() const{return fTPCchi2;}
233 int AliFemtoTrack::TPCncls() const{return fTPCncls;}
234 short AliFemtoTrack::TPCnclsF() const{return fTPCnclsF;}
235 float AliFemtoTrack::TPCsignal() const{return fTPCsignal;}
236 short AliFemtoTrack::TPCsignalN() const{return fTPCsignalN;}
237 float AliFemtoTrack::TPCsignalS() const{return fTPCsignalS;}
238 float AliFemtoTrack::SigmaToVertex() const{return fSigmaToVertex;}
240 void AliFemtoTrack::SetHiddenInfo(AliFemtoHiddenInfo* aHiddenInfo) {fHiddenInfo=aHiddenInfo;}
241 bool AliFemtoTrack::ValidHiddenInfo() const { if (fHiddenInfo) return true; else return false; }
242 AliFemtoHiddenInfo* AliFemtoTrack::GetHiddenInfo() const {return fHiddenInfo;}
244 AliFemtoTrack::~AliFemtoTrack()
249 // cout << "Deleted track " << this << endl;
252 const TBits& AliFemtoTrack::TPCclusters() const {return fClusters;}
253 const TBits& AliFemtoTrack::TPCsharing() const {return fShared;}
255 void AliFemtoTrack::SetTPCcluster(const short& aNBit, const Bool_t& aValue)
257 fClusters.SetBitNumber(aNBit, aValue);
260 void AliFemtoTrack::SetTPCshared(const short& aNBit, const Bool_t& aValue)
262 fShared.SetBitNumber(aNBit, aValue);
265 void AliFemtoTrack::SetTPCClusterMap(const TBits& aBits)
269 void AliFemtoTrack::SetTPCSharedMap(const TBits& aBits)
274 void AliFemtoTrack::SetKinkIndexes(int points[3])
276 // Transfer the Kink indices
277 fKinkIndexes[0] = points[0];
278 fKinkIndexes[1] = points[1];
279 fKinkIndexes[2] = points[2];
282 int AliFemtoTrack::KinkIndex(int aIndex) const
285 if ((aIndex <3) && (aIndex>=0))
286 return fKinkIndexes[aIndex];
291 // void AliFemtoTrack::SetXTPC(const AliFemtoThreeVector& aXTPC)
296 // void AliFemtoTrack::SetXTPC(double *aXTPC)
298 // fXTPC.setX(aXTPC[0]);
299 // fXTPC.setY(aXTPC[1]);
300 // fXTPC.setZ(aXTPC[2]);
303 // AliFemtoThreeVector AliFemtoTrack::XTPC() const
308 const AliFemtoThreeVector& AliFemtoTrack::NominalTpcExitPoint() const
310 return fNominalTpcExitPoint;
312 const AliFemtoThreeVector& AliFemtoTrack::NominalTpcEntrancePoint() const
314 return fNominalTpcEntrancePoint;
317 void AliFemtoTrack::SetNominalTPCEntrancePoint(const AliFemtoThreeVector& aXTPC)
319 fNominalTpcEntrancePoint = aXTPC;
321 void AliFemtoTrack::SetNominalTPCEntrancePoint(double *aXTPC)
323 // Store the nominal TPC entrance point
324 fNominalTpcEntrancePoint.SetX(aXTPC[0]);
325 fNominalTpcEntrancePoint.SetY(aXTPC[1]);
326 fNominalTpcEntrancePoint.SetZ(aXTPC[2]);
329 void AliFemtoTrack::SetNominalTPCExitPoint(const AliFemtoThreeVector& aXTPC)
331 fNominalTpcExitPoint = aXTPC;
333 void AliFemtoTrack::SetNominalTPCExitPoint(double *aXTPC)
335 // Store the nominal TPC exit point
336 fNominalTpcExitPoint.SetX(aXTPC[0]);
337 fNominalTpcExitPoint.SetY(aXTPC[1]);
338 fNominalTpcExitPoint.SetZ(aXTPC[2]);