]>
Commit | Line | Data |
---|---|---|
d0e92d9a | 1 | /////////////////////////////////////////////////////////////////////////// |
2 | // // | |
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. // | |
8 | // // | |
9 | /////////////////////////////////////////////////////////////////////////// | |
10 | ||
11 | #include "AliFemtoTrack.h" | |
67427ff7 | 12 | #ifndef __NO_STAR_DEPENDENCE_ALLOWED__ |
13 | #ifdef __ROOT__ | |
14 | #include "StEvent/StEnumerations.h" | |
d0e92d9a | 15 | #include "AliFemtoAihongPid.h" |
67427ff7 | 16 | #include "StEventUtilities/StuProbabilityPidAlgorithm.h" |
17 | #endif | |
18 | #endif | |
19 | ||
d0e92d9a | 20 | #include "SystemOfUnits.h" // has "tesla" in it |
67427ff7 | 21 | //#include "AliFemtoParticleTypes.h" |
d0e92d9a | 22 | //#include "AliFemtoTTreeEvent.h" |
23 | //#include "AliFemtoTTreeTrack.h" | |
67427ff7 | 24 | |
25 | AliFemtoTrack::AliFemtoTrack(): | |
0215f606 | 26 | fCharge(0), |
27 | fPidProbElectron(0), | |
28 | fPidProbPion(0), | |
29 | fPidProbKaon(0), | |
30 | fPidProbProton(0), | |
31 | fPidProbMuon(0), | |
67427ff7 | 32 | fTrackId(0), |
b5f2928c | 33 | fTofPionTime(-100000.0), |
34 | fTofKaonTime(-100000.0), | |
35 | fTofProtonTime(-100000.0), | |
0215f606 | 36 | fP(0,0,0), |
37 | fPt(0), | |
38 | fHelix(), | |
67427ff7 | 39 | fFlags(0), |
40 | fLabel(0), | |
41 | fImpactD(0), | |
42 | fImpactZ(0), | |
43 | fCdd(0), | |
44 | fCdz(0), | |
45 | fCzz(0), | |
46 | fITSchi2(0), | |
47 | fITSncls(0), | |
48 | fTPCchi2(0), | |
49 | fTPCncls(0), | |
50 | fTPCnclsF(0), | |
8a21a731 | 51 | fTPCsignal(0), |
67427ff7 | 52 | fTPCsignalN(0), |
53 | fTPCsignalS(0), | |
1309aa0b | 54 | fVTOF(0), |
55 | fNSigmaTPCPi(0), | |
56 | fNSigmaTPCK(0), | |
57 | fNSigmaTPCP(0), | |
58 | fNSigmaTOFPi(0), | |
59 | fNSigmaTOFK(0), | |
60 | fNSigmaTOFP(0), | |
0b3bd1ac | 61 | fSigmaToVertex(0), |
67427ff7 | 62 | fClusters(159), |
0215f606 | 63 | fShared(159), |
0b3bd1ac | 64 | fNominalTpcEntrancePoint(0,0,0), |
65 | fNominalTpcExitPoint(0,0,0), | |
0215f606 | 66 | fHiddenInfo(0) |
67427ff7 | 67 | { |
d0e92d9a | 68 | // Default constructor |
67427ff7 | 69 | fHiddenInfo = NULL; |
ea77036b | 70 | fKinkIndexes[0] = 0; |
71 | fKinkIndexes[1] = 0; | |
72 | fKinkIndexes[2] = 0; | |
67427ff7 | 73 | // cout << "Created track " << this << endl; |
74 | } | |
75 | ||
76 | ||
0215f606 | 77 | AliFemtoTrack::AliFemtoTrack(const AliFemtoTrack& t) : |
78 | fCharge(0), | |
79 | fPidProbElectron(0), | |
80 | fPidProbPion(0), | |
81 | fPidProbKaon(0), | |
82 | fPidProbProton(0), | |
83 | fPidProbMuon(0), | |
84 | fTrackId(0), | |
b5f2928c | 85 | fTofPionTime(-100000.0), |
86 | fTofKaonTime(-100000.0), | |
87 | fTofProtonTime(-100000.0), | |
0215f606 | 88 | fP(0,0,0), |
89 | fPt(0), | |
90 | fHelix(), | |
91 | fFlags(0), | |
92 | fLabel(0), | |
93 | fImpactD(0), | |
94 | fImpactZ(0), | |
95 | fCdd(0), | |
96 | fCdz(0), | |
97 | fCzz(0), | |
98 | fITSchi2(0), | |
99 | fITSncls(0), | |
100 | fTPCchi2(0), | |
101 | fTPCncls(0), | |
102 | fTPCnclsF(0), | |
8a21a731 | 103 | fTPCsignal(0), |
0215f606 | 104 | fTPCsignalN(0), |
105 | fTPCsignalS(0), | |
1309aa0b | 106 | fVTOF(0), |
107 | fNSigmaTPCPi(0), | |
108 | fNSigmaTPCK(0), | |
109 | fNSigmaTPCP(0), | |
110 | fNSigmaTOFPi(0), | |
111 | fNSigmaTOFK(0), | |
112 | fNSigmaTOFP(0), | |
0b3bd1ac | 113 | fSigmaToVertex(0), |
0215f606 | 114 | fClusters(159), |
115 | fShared(159), | |
0b3bd1ac | 116 | fNominalTpcEntrancePoint(0,0,0), |
117 | fNominalTpcExitPoint(0,0,0), | |
0215f606 | 118 | fHiddenInfo(0) |
d0e92d9a | 119 | { |
120 | // copy constructor | |
67427ff7 | 121 | fCharge = t.fCharge; |
122 | fPidProbElectron = t.fPidProbElectron; | |
123 | fPidProbPion = t.fPidProbPion; | |
124 | fPidProbKaon = t.fPidProbKaon; | |
125 | fPidProbProton = t.fPidProbProton; | |
126 | fPidProbMuon=t.fPidProbMuon; | |
b5f2928c | 127 | fTofPionTime=t.fTofPionTime; |
128 | fTofKaonTime=t.fTofKaonTime; | |
129 | fTofProtonTime=t.fTofProtonTime; | |
67427ff7 | 130 | fP = t.fP; |
131 | fPt = t.fPt; | |
132 | fHelix = t.fHelix; | |
133 | fTrackId = t.fTrackId; | |
134 | fFlags=t.fFlags; | |
135 | fLabel=t.fLabel; | |
136 | fImpactD=t.fImpactD; | |
137 | fImpactZ=t.fImpactZ; | |
138 | fCdd=t.fCdd; | |
139 | fCdz=t.fCdz; | |
140 | fCzz=t.fCzz; | |
141 | fITSchi2=t.fITSchi2; | |
142 | fITSncls=t.fITSncls; | |
143 | fTPCchi2=t.fTPCchi2; | |
144 | fTPCncls=t.fTPCncls; | |
145 | fTPCnclsF=t.fTPCnclsF; | |
8a21a731 | 146 | fTPCsignal=t.fTPCsignal; |
67427ff7 | 147 | fTPCsignalN=t.fTPCsignalN; |
148 | fTPCsignalS=t.fTPCsignalS; | |
1309aa0b | 149 | fVTOF=t.fVTOF; |
150 | fNSigmaTPCPi=t.fNSigmaTPCPi; | |
151 | fNSigmaTPCK=t.fNSigmaTPCK; | |
152 | fNSigmaTPCP=t.fNSigmaTPCP; | |
153 | fNSigmaTOFPi=t.fNSigmaTOFPi; | |
154 | fNSigmaTOFK=t.fNSigmaTOFK; | |
155 | fNSigmaTOFP=t.fNSigmaTOFP; | |
0b3bd1ac | 156 | fSigmaToVertex=t.fSigmaToVertex; |
67427ff7 | 157 | fClusters=t.fClusters; |
158 | fShared=t.fShared; | |
0b3bd1ac | 159 | fNominalTpcEntrancePoint=t.fNominalTpcEntrancePoint; |
160 | fNominalTpcExitPoint=t.fNominalTpcExitPoint; | |
67427ff7 | 161 | if (t.ValidHiddenInfo()) |
d0e92d9a | 162 | fHiddenInfo = t.GetHiddenInfo()->Clone(); |
67427ff7 | 163 | else |
164 | fHiddenInfo = NULL; | |
ea77036b | 165 | fKinkIndexes[0] = t.fKinkIndexes[0]; |
166 | fKinkIndexes[1] = t.fKinkIndexes[1]; | |
167 | fKinkIndexes[2] = t.fKinkIndexes[2]; | |
67427ff7 | 168 | // cout << "Created track " << this << endl; |
ea77036b | 169 | } |
67427ff7 | 170 | |
0215f606 | 171 | AliFemtoTrack& AliFemtoTrack::operator=(const AliFemtoTrack& aTrack) |
172 | { | |
d0e92d9a | 173 | // assignment operator |
0215f606 | 174 | if (this == &aTrack) |
175 | return *this; | |
176 | fCharge = aTrack.fCharge; | |
177 | fPidProbElectron = aTrack.fPidProbElectron; | |
178 | fPidProbPion = aTrack.fPidProbPion; | |
179 | fPidProbKaon = aTrack.fPidProbKaon; | |
180 | fPidProbProton = aTrack.fPidProbProton; | |
181 | fPidProbMuon=aTrack.fPidProbMuon; | |
b5f2928c | 182 | fTofPionTime=aTrack.fTofPionTime; |
183 | fTofKaonTime=aTrack.fTofKaonTime; | |
184 | fTofProtonTime=aTrack.fTofProtonTime; | |
0215f606 | 185 | fP = aTrack.fP; |
186 | fPt = aTrack.fPt; | |
187 | fHelix = aTrack.fHelix; | |
188 | fTrackId = aTrack.fTrackId; | |
189 | fFlags=aTrack.fFlags; | |
190 | fLabel=aTrack.fLabel; | |
191 | fImpactD=aTrack.fImpactD; | |
192 | fImpactZ=aTrack.fImpactZ; | |
193 | fCdd=aTrack.fCdd; | |
194 | fCdz=aTrack.fCdz; | |
195 | fCzz=aTrack.fCzz; | |
196 | fITSchi2=aTrack.fITSchi2; | |
197 | fITSncls=aTrack.fITSncls; | |
198 | fTPCchi2=aTrack.fTPCchi2; | |
199 | fTPCncls=aTrack.fTPCncls; | |
8a21a731 | 200 | fTPCnclsF=aTrack.fTPCnclsF; |
201 | fTPCsignal=aTrack.fTPCsignal; | |
0215f606 | 202 | fTPCsignalN=aTrack.fTPCsignalN; |
203 | fTPCsignalS=aTrack.fTPCsignalS; | |
1309aa0b | 204 | fVTOF=aTrack.fVTOF; |
205 | fNSigmaTPCPi=aTrack.fNSigmaTPCPi; | |
206 | fNSigmaTPCK=aTrack.fNSigmaTPCK; | |
207 | fNSigmaTPCP=aTrack.fNSigmaTPCP; | |
208 | fNSigmaTOFPi=aTrack.fNSigmaTOFPi; | |
209 | fNSigmaTOFK=aTrack.fNSigmaTOFK; | |
210 | fNSigmaTOFP=aTrack.fNSigmaTOFP; | |
0215f606 | 211 | fClusters=aTrack.fClusters; |
212 | fShared=aTrack.fShared; | |
0b3bd1ac | 213 | fNominalTpcEntrancePoint=aTrack.fNominalTpcEntrancePoint; |
214 | fNominalTpcExitPoint=aTrack.fNominalTpcExitPoint; | |
ea77036b | 215 | fKinkIndexes[0] = aTrack.fKinkIndexes[0]; |
216 | fKinkIndexes[1] = aTrack.fKinkIndexes[1]; | |
217 | fKinkIndexes[2] = aTrack.fKinkIndexes[2]; | |
0215f606 | 218 | if (ValidHiddenInfo()) |
219 | delete fHiddenInfo; | |
220 | if (aTrack.ValidHiddenInfo()) | |
d0e92d9a | 221 | fHiddenInfo = aTrack.GetHiddenInfo()->Clone(); |
0215f606 | 222 | else |
223 | fHiddenInfo = NULL; | |
224 | ||
225 | return *this; | |
226 | } | |
227 | ||
67427ff7 | 228 | void AliFemtoTrack::SetCharge(const short& ch){fCharge=ch;} |
229 | ||
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;} | |
b5f2928c | 235 | void AliFemtoTrack::SetTofExpectedTimes(const float& tpi, const float& tkn, const float& tpr){fTofPionTime = tpi; fTofKaonTime = tkn; fTofProtonTime = tpr; } |
67427ff7 | 236 | |
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;} | |
9064872d | 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;} | |
8a21a731 | 253 | void AliFemtoTrack::SetTPCsignal(const float& aTPCsig){fTPCsignal=aTPCsig;} |
9064872d | 254 | void AliFemtoTrack::SetTPCsignalN(const short& aTPCsignalN){fTPCsignalN=aTPCsignalN;} |
255 | void AliFemtoTrack::SetTPCsignalS(const float& aTPCsignalS){fTPCsignalS=aTPCsignalS;} | |
1309aa0b | 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;} | |
9064872d | 263 | void AliFemtoTrack::SetSigmaToVertex(const float& aSigma){fSigmaToVertex=aSigma;} |
67427ff7 | 264 | |
265 | ||
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;} | |
8a21a731 | 283 | float AliFemtoTrack::TPCsignal() const{return fTPCsignal;} |
67427ff7 | 284 | short AliFemtoTrack::TPCsignalN() const{return fTPCsignalN;} |
285 | float AliFemtoTrack::TPCsignalS() const{return fTPCsignalS;} | |
1309aa0b | 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;} | |
0b3bd1ac | 293 | float AliFemtoTrack::SigmaToVertex() const{return fSigmaToVertex;} |
b5f2928c | 294 | float AliFemtoTrack::TOFpionTime() const{return fTofPionTime;} |
295 | float AliFemtoTrack::TOFkaonTime() const{return fTofKaonTime;} | |
296 | float AliFemtoTrack::TOFprotonTime() const{return fTofProtonTime;} | |
297 | ||
67427ff7 | 298 | |
299 | void AliFemtoTrack::SetHiddenInfo(AliFemtoHiddenInfo* aHiddenInfo) {fHiddenInfo=aHiddenInfo;} | |
300 | bool AliFemtoTrack::ValidHiddenInfo() const { if (fHiddenInfo) return true; else return false; } | |
d0e92d9a | 301 | AliFemtoHiddenInfo* AliFemtoTrack::GetHiddenInfo() const {return fHiddenInfo;} |
67427ff7 | 302 | |
303 | AliFemtoTrack::~AliFemtoTrack() | |
304 | { | |
0b3bd1ac | 305 | // destructor |
67427ff7 | 306 | if (fHiddenInfo) |
307 | delete fHiddenInfo; | |
308 | // cout << "Deleted track " << this << endl; | |
309 | } | |
310 | ||
311 | const TBits& AliFemtoTrack::TPCclusters() const {return fClusters;} | |
312 | const TBits& AliFemtoTrack::TPCsharing() const {return fShared;} | |
313 | ||
314 | void AliFemtoTrack::SetTPCcluster(const short& aNBit, const Bool_t& aValue) | |
315 | { | |
316 | fClusters.SetBitNumber(aNBit, aValue); | |
317 | } | |
318 | ||
319 | void AliFemtoTrack::SetTPCshared(const short& aNBit, const Bool_t& aValue) | |
320 | { | |
321 | fShared.SetBitNumber(aNBit, aValue); | |
322 | } | |
323 | ||
ea77036b | 324 | void AliFemtoTrack::SetTPCClusterMap(const TBits& aBits) |
325 | { | |
326 | fClusters = aBits; | |
327 | } | |
328 | void AliFemtoTrack::SetTPCSharedMap(const TBits& aBits) | |
329 | { | |
330 | fShared = aBits; | |
331 | } | |
332 | ||
333 | void AliFemtoTrack::SetKinkIndexes(int points[3]) | |
334 | { | |
0b3bd1ac | 335 | // Transfer the Kink indices |
ea77036b | 336 | fKinkIndexes[0] = points[0]; |
337 | fKinkIndexes[1] = points[1]; | |
338 | fKinkIndexes[2] = points[2]; | |
339 | } | |
340 | ||
341 | int AliFemtoTrack::KinkIndex(int aIndex) const | |
342 | { | |
0b3bd1ac | 343 | // Return Kink index |
ea77036b | 344 | if ((aIndex <3) && (aIndex>=0)) |
345 | return fKinkIndexes[aIndex]; | |
346 | else | |
347 | return 0; | |
348 | } | |
0b3bd1ac | 349 | |
350 | // void AliFemtoTrack::SetXTPC(const AliFemtoThreeVector& aXTPC) | |
351 | // { | |
352 | // fXTPC = aXTPC; | |
353 | // } | |
354 | ||
355 | // void AliFemtoTrack::SetXTPC(double *aXTPC) | |
356 | // { | |
357 | // fXTPC.setX(aXTPC[0]); | |
358 | // fXTPC.setY(aXTPC[1]); | |
359 | // fXTPC.setZ(aXTPC[2]); | |
360 | // } | |
361 | ||
362 | // AliFemtoThreeVector AliFemtoTrack::XTPC() const | |
363 | // { | |
364 | // return fXTPC; | |
365 | // } | |
366 | ||
367 | const AliFemtoThreeVector& AliFemtoTrack::NominalTpcExitPoint() const | |
368 | { | |
369 | return fNominalTpcExitPoint; | |
370 | } | |
371 | const AliFemtoThreeVector& AliFemtoTrack::NominalTpcEntrancePoint() const | |
372 | { | |
373 | return fNominalTpcEntrancePoint; | |
374 | } | |
375 | ||
376 | void AliFemtoTrack::SetNominalTPCEntrancePoint(const AliFemtoThreeVector& aXTPC) | |
377 | { | |
378 | fNominalTpcEntrancePoint = aXTPC; | |
379 | } | |
380 | void AliFemtoTrack::SetNominalTPCEntrancePoint(double *aXTPC) | |
381 | { | |
382 | // Store the nominal TPC entrance point | |
a19edcc9 | 383 | fNominalTpcEntrancePoint.SetX(aXTPC[0]); |
384 | fNominalTpcEntrancePoint.SetY(aXTPC[1]); | |
385 | fNominalTpcEntrancePoint.SetZ(aXTPC[2]); | |
0b3bd1ac | 386 | } |
387 | ||
388 | void AliFemtoTrack::SetNominalTPCExitPoint(const AliFemtoThreeVector& aXTPC) | |
389 | { | |
390 | fNominalTpcExitPoint = aXTPC; | |
391 | } | |
392 | void AliFemtoTrack::SetNominalTPCExitPoint(double *aXTPC) | |
393 | { | |
394 | // Store the nominal TPC exit point | |
a19edcc9 | 395 | fNominalTpcExitPoint.SetX(aXTPC[0]); |
396 | fNominalTpcExitPoint.SetY(aXTPC[1]); | |
397 | fNominalTpcExitPoint.SetZ(aXTPC[2]); | |
0b3bd1ac | 398 | } |