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():
33 fTofPionTime(-100000.0),
34 fTofKaonTime(-100000.0),
35 fTofProtonTime(-100000.0),
64 fNominalTpcEntrancePoint(0,0,0),
65 fNominalTpcExitPoint(0,0,0),
68 // Default constructor
73 // cout << "Created track " << this << endl;
77 AliFemtoTrack::AliFemtoTrack(const AliFemtoTrack& t) :
85 fTofPionTime(-100000.0),
86 fTofKaonTime(-100000.0),
87 fTofProtonTime(-100000.0),
116 fNominalTpcEntrancePoint(0,0,0),
117 fNominalTpcExitPoint(0,0,0),
122 fPidProbElectron = t.fPidProbElectron;
123 fPidProbPion = t.fPidProbPion;
124 fPidProbKaon = t.fPidProbKaon;
125 fPidProbProton = t.fPidProbProton;
126 fPidProbMuon=t.fPidProbMuon;
127 fTofPionTime=t.fTofPionTime;
128 fTofKaonTime=t.fTofKaonTime;
129 fTofProtonTime=t.fTofProtonTime;
133 fTrackId = t.fTrackId;
145 fTPCnclsF=t.fTPCnclsF;
146 fTPCsignal=t.fTPCsignal;
147 fTPCsignalN=t.fTPCsignalN;
148 fTPCsignalS=t.fTPCsignalS;
150 fNSigmaTPCPi=t.fNSigmaTPCPi;
151 fNSigmaTPCK=t.fNSigmaTPCK;
152 fNSigmaTPCP=t.fNSigmaTPCP;
153 fNSigmaTOFPi=t.fNSigmaTOFPi;
154 fNSigmaTOFK=t.fNSigmaTOFK;
155 fNSigmaTOFP=t.fNSigmaTOFP;
156 fSigmaToVertex=t.fSigmaToVertex;
157 fClusters=t.fClusters;
159 fNominalTpcEntrancePoint=t.fNominalTpcEntrancePoint;
160 fNominalTpcExitPoint=t.fNominalTpcExitPoint;
161 if (t.ValidHiddenInfo())
162 fHiddenInfo = t.GetHiddenInfo()->Clone();
165 fKinkIndexes[0] = t.fKinkIndexes[0];
166 fKinkIndexes[1] = t.fKinkIndexes[1];
167 fKinkIndexes[2] = t.fKinkIndexes[2];
168 // cout << "Created track " << this << endl;
171 AliFemtoTrack& AliFemtoTrack::operator=(const AliFemtoTrack& aTrack)
173 // assignment operator
176 fCharge = aTrack.fCharge;
177 fPidProbElectron = aTrack.fPidProbElectron;
178 fPidProbPion = aTrack.fPidProbPion;
179 fPidProbKaon = aTrack.fPidProbKaon;
180 fPidProbProton = aTrack.fPidProbProton;
181 fPidProbMuon=aTrack.fPidProbMuon;
182 fTofPionTime=aTrack.fTofPionTime;
183 fTofKaonTime=aTrack.fTofKaonTime;
184 fTofProtonTime=aTrack.fTofProtonTime;
187 fHelix = aTrack.fHelix;
188 fTrackId = aTrack.fTrackId;
189 fFlags=aTrack.fFlags;
190 fLabel=aTrack.fLabel;
191 fImpactD=aTrack.fImpactD;
192 fImpactZ=aTrack.fImpactZ;
196 fITSchi2=aTrack.fITSchi2;
197 fITSncls=aTrack.fITSncls;
198 fTPCchi2=aTrack.fTPCchi2;
199 fTPCncls=aTrack.fTPCncls;
200 fTPCnclsF=aTrack.fTPCnclsF;
201 fTPCsignal=aTrack.fTPCsignal;
202 fTPCsignalN=aTrack.fTPCsignalN;
203 fTPCsignalS=aTrack.fTPCsignalS;
205 fNSigmaTPCPi=aTrack.fNSigmaTPCPi;
206 fNSigmaTPCK=aTrack.fNSigmaTPCK;
207 fNSigmaTPCP=aTrack.fNSigmaTPCP;
208 fNSigmaTOFPi=aTrack.fNSigmaTOFPi;
209 fNSigmaTOFK=aTrack.fNSigmaTOFK;
210 fNSigmaTOFP=aTrack.fNSigmaTOFP;
211 fClusters=aTrack.fClusters;
212 fShared=aTrack.fShared;
213 fNominalTpcEntrancePoint=aTrack.fNominalTpcEntrancePoint;
214 fNominalTpcExitPoint=aTrack.fNominalTpcExitPoint;
215 fKinkIndexes[0] = aTrack.fKinkIndexes[0];
216 fKinkIndexes[1] = aTrack.fKinkIndexes[1];
217 fKinkIndexes[2] = aTrack.fKinkIndexes[2];
218 if (ValidHiddenInfo())
220 if (aTrack.ValidHiddenInfo())
221 fHiddenInfo = aTrack.GetHiddenInfo()->Clone();
228 void AliFemtoTrack::SetCharge(const short& ch){fCharge=ch;}
230 void AliFemtoTrack::SetPidProbElectron(const float& x){fPidProbElectron = x;}
231 void AliFemtoTrack::SetPidProbPion(const float& x){fPidProbPion = x;}
232 void AliFemtoTrack::SetPidProbKaon(const float& x){fPidProbKaon = x;}
233 void AliFemtoTrack::SetPidProbProton(const float& x){fPidProbProton = x;}
234 void AliFemtoTrack::SetPidProbMuon(const float& x){fPidProbMuon = x;}
235 void AliFemtoTrack::SetTofExpectedTimes(const float& tpi, const float& tkn, const float& tpr){fTofPionTime = tpi; fTofKaonTime = tkn; fTofProtonTime = tpr; }
237 void AliFemtoTrack::SetP(const AliFemtoThreeVector& p){fP = p;}
238 void AliFemtoTrack::SetPt(const float& pt){fPt = pt;}
239 void AliFemtoTrack::SetHelix(const AliFmPhysicalHelixD& h){fHelix = h;}
240 void AliFemtoTrack::SetTrackId(const short & id) { fTrackId=id;}
241 void AliFemtoTrack::SetFlags(const long int &flags) {fFlags=flags;}
242 void AliFemtoTrack::SetLabel(const int &label) {fLabel=label;}
243 void AliFemtoTrack::SetImpactD(const float& aImpactD){fImpactD=aImpactD;}
244 void AliFemtoTrack::SetImpactZ(const float& aImpactZ){fImpactZ=aImpactZ;}
245 void AliFemtoTrack::SetCdd(const float& aCdd){fCdd=aCdd;}
246 void AliFemtoTrack::SetCdz(const float& aCdz){fCdz=aCdz;}
247 void AliFemtoTrack::SetCzz(const float& aCzz){fCzz=aCzz;}
248 void AliFemtoTrack::SetITSchi2(const float& aITSchi2){fITSchi2=aITSchi2;}
249 void AliFemtoTrack::SetITSncls(const int& aITSncls){fITSncls=aITSncls;}
250 void AliFemtoTrack::SetTPCchi2(const float& aTPCchi2){fTPCchi2=aTPCchi2;}
251 void AliFemtoTrack::SetTPCncls(const int& aTPCncls){fTPCncls=aTPCncls;}
252 void AliFemtoTrack::SetTPCnclsF(const short& aTPCnclsF){fTPCnclsF=aTPCnclsF;}
253 void AliFemtoTrack::SetTPCsignal(const float& aTPCsig){fTPCsignal=aTPCsig;}
254 void AliFemtoTrack::SetTPCsignalN(const short& aTPCsignalN){fTPCsignalN=aTPCsignalN;}
255 void AliFemtoTrack::SetTPCsignalS(const float& aTPCsignalS){fTPCsignalS=aTPCsignalS;}
256 void AliFemtoTrack::SetVTOF(const float& aVTOF){fVTOF=aVTOF;}
257 void AliFemtoTrack::SetNSigmaTPCPi(const float& aNSigmaTPCPi){fNSigmaTPCPi=aNSigmaTPCPi;}
258 void AliFemtoTrack::SetNSigmaTPCK(const float& aNSigmaTPCK){fNSigmaTPCK=aNSigmaTPCK;}
259 void AliFemtoTrack::SetNSigmaTPCP(const float& aNSigmaTPCP){fNSigmaTPCP=aNSigmaTPCP;}
260 void AliFemtoTrack::SetNSigmaTOFPi(const float& aNSigmaTOFPi){fNSigmaTOFPi=aNSigmaTOFPi;}
261 void AliFemtoTrack::SetNSigmaTOFK(const float& aNSigmaTOFK){fNSigmaTOFK=aNSigmaTOFK;}
262 void AliFemtoTrack::SetNSigmaTOFP(const float& aNSigmaTOFP){fNSigmaTOFP=aNSigmaTOFP;}
263 void AliFemtoTrack::SetSigmaToVertex(const float& aSigma){fSigmaToVertex=aSigma;}
266 short AliFemtoTrack::Charge() const {return fCharge;}
267 AliFemtoThreeVector AliFemtoTrack::P() const {return fP;}
268 float AliFemtoTrack::Pt() const {return fPt;}
269 const AliFmPhysicalHelixD& AliFemtoTrack::Helix() const {return fHelix;}
270 short AliFemtoTrack::TrackId() const { return fTrackId; }
271 long int AliFemtoTrack::Flags() const {return fFlags;}
272 int AliFemtoTrack::Label()const {return fLabel;}
273 float AliFemtoTrack::ImpactD()const{return fImpactD;}
274 float AliFemtoTrack::ImpactZ()const{return fImpactZ;}
275 float AliFemtoTrack::Cdd() const{return fCdd;}
276 float AliFemtoTrack::Cdz() const{return fCdz;}
277 float AliFemtoTrack::Czz() const{return fCzz;}
278 float AliFemtoTrack::ITSchi2() const{return fITSchi2;}
279 int AliFemtoTrack::ITSncls() const{return fITSncls;}
280 float AliFemtoTrack::TPCchi2() const{return fTPCchi2;}
281 int AliFemtoTrack::TPCncls() const{return fTPCncls;}
282 short AliFemtoTrack::TPCnclsF() const{return fTPCnclsF;}
283 float AliFemtoTrack::TPCsignal() const{return fTPCsignal;}
284 short AliFemtoTrack::TPCsignalN() const{return fTPCsignalN;}
285 float AliFemtoTrack::TPCsignalS() const{return fTPCsignalS;}
286 float AliFemtoTrack::VTOF() const{return fVTOF;}
287 float AliFemtoTrack::NSigmaTPCPi() const{return fNSigmaTPCPi;}
288 float AliFemtoTrack::NSigmaTPCK() const{return fNSigmaTPCK;}
289 float AliFemtoTrack::NSigmaTPCP() const{return fNSigmaTPCP;}
290 float AliFemtoTrack::NSigmaTOFPi() const{return fNSigmaTOFPi;}
291 float AliFemtoTrack::NSigmaTOFK() const{return fNSigmaTOFK;}
292 float AliFemtoTrack::NSigmaTOFP() const{return fNSigmaTOFP;}
293 float AliFemtoTrack::SigmaToVertex() const{return fSigmaToVertex;}
294 float AliFemtoTrack::TOFpionTime() const{return fTofPionTime;}
295 float AliFemtoTrack::TOFkaonTime() const{return fTofKaonTime;}
296 float AliFemtoTrack::TOFprotonTime() const{return fTofProtonTime;}
299 void AliFemtoTrack::SetHiddenInfo(AliFemtoHiddenInfo* aHiddenInfo) {fHiddenInfo=aHiddenInfo;}
300 bool AliFemtoTrack::ValidHiddenInfo() const { if (fHiddenInfo) return true; else return false; }
301 AliFemtoHiddenInfo* AliFemtoTrack::GetHiddenInfo() const {return fHiddenInfo;}
303 AliFemtoTrack::~AliFemtoTrack()
308 // cout << "Deleted track " << this << endl;
311 const TBits& AliFemtoTrack::TPCclusters() const {return fClusters;}
312 const TBits& AliFemtoTrack::TPCsharing() const {return fShared;}
314 void AliFemtoTrack::SetTPCcluster(const short& aNBit, const Bool_t& aValue)
316 fClusters.SetBitNumber(aNBit, aValue);
319 void AliFemtoTrack::SetTPCshared(const short& aNBit, const Bool_t& aValue)
321 fShared.SetBitNumber(aNBit, aValue);
324 void AliFemtoTrack::SetTPCClusterMap(const TBits& aBits)
328 void AliFemtoTrack::SetTPCSharedMap(const TBits& aBits)
333 void AliFemtoTrack::SetKinkIndexes(int points[3])
335 // Transfer the Kink indices
336 fKinkIndexes[0] = points[0];
337 fKinkIndexes[1] = points[1];
338 fKinkIndexes[2] = points[2];
341 int AliFemtoTrack::KinkIndex(int aIndex) const
344 if ((aIndex <3) && (aIndex>=0))
345 return fKinkIndexes[aIndex];
350 // void AliFemtoTrack::SetXTPC(const AliFemtoThreeVector& aXTPC)
355 // void AliFemtoTrack::SetXTPC(double *aXTPC)
357 // fXTPC.setX(aXTPC[0]);
358 // fXTPC.setY(aXTPC[1]);
359 // fXTPC.setZ(aXTPC[2]);
362 // AliFemtoThreeVector AliFemtoTrack::XTPC() const
367 const AliFemtoThreeVector& AliFemtoTrack::NominalTpcExitPoint() const
369 return fNominalTpcExitPoint;
371 const AliFemtoThreeVector& AliFemtoTrack::NominalTpcEntrancePoint() const
373 return fNominalTpcEntrancePoint;
376 void AliFemtoTrack::SetNominalTPCEntrancePoint(const AliFemtoThreeVector& aXTPC)
378 fNominalTpcEntrancePoint = aXTPC;
380 void AliFemtoTrack::SetNominalTPCEntrancePoint(double *aXTPC)
382 // Store the nominal TPC entrance point
383 fNominalTpcEntrancePoint.SetX(aXTPC[0]);
384 fNominalTpcEntrancePoint.SetY(aXTPC[1]);
385 fNominalTpcEntrancePoint.SetZ(aXTPC[2]);
388 void AliFemtoTrack::SetNominalTPCExitPoint(const AliFemtoThreeVector& aXTPC)
390 fNominalTpcExitPoint = aXTPC;
392 void AliFemtoTrack::SetNominalTPCExitPoint(double *aXTPC)
394 // Store the nominal TPC exit point
395 fNominalTpcExitPoint.SetX(aXTPC[0]);
396 fNominalTpcExitPoint.SetY(aXTPC[1]);
397 fNominalTpcExitPoint.SetZ(aXTPC[2]);