]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/FEMTOSCOPY/AliFemto/Infrastructure/AliFemtoPair.h
Fixing Effective C++ warnings
[u/mrichter/AliRoot.git] / PWG2 / FEMTOSCOPY / AliFemto / Infrastructure / AliFemtoPair.h
CommitLineData
67427ff7 1/***************************************************************************
2 *
3 * $Id: AliFemtoPair.h,v 1.17
4 *
5 * Author: Brian Laziuk, Yale University
6 * slightly modified by Mike Lisa
7 ***************************************************************************
8 *
9 * Description: part of STAR HBT Framework: AliFemtoMaker package
10 * the Pair object is passed to the PairCuts for verification, and
11 * then to the AddRealPair and AddMixedPair methods of the
12 * Correlation Functions
13 *
14 ***************************************************************************
15 *
16 * $Log$
0215f606 17 * Revision 1.1.1.1 2007/04/25 15:38:41 panos
18 * Importing the HBT code dir
19 *
67427ff7 20 * Revision 1.1.1.1 2007/03/07 10:14:49 mchojnacki
21 * First version on CVS
22 *
23 * Revision 1.19 2003/01/14 09:44:00 renault
24 * corrections on average separation calculation for tracks which doesn't cross
25 * all 45 padrows.
26 *
27 * Revision 1.18 2002/11/19 23:33:18 renault
28 * Enable average separation calculation for all combinaisons of
29 * V0 daughters and tracks
30 *
31 * Revision 1.16 2002/02/28 14:18:36 rcwells
32 * Added emissionAngle function to AliFemtoPair
33 *
34 * Revision 1.15 2001/12/14 23:11:30 fretiere
35 * Add class HitMergingCut. Add class fabricesPairCut = HitMerginCut + pair purity cuts. Add TpcLocalTransform function which convert to local tpc coord (not pretty). Modify AliFemtoTrack, AliFemtoParticle, AliFemtoHiddenInfo, AliFemtoPair to handle the hit information and cope with my code
36 *
37 * Revision 1.14 2001/04/03 21:04:36 kisiel
38 *
39 *
40 * Changes needed to make the Theoretical code
41 * work. The main code is the ThCorrFctn directory.
42 * The most visible change is the addition of the
43 * HiddenInfo to AliFemtoPair.
44 *
45 * Revision 1.13 2001/03/28 22:35:23 flierl
46 * changes and bugfixes in qYKP*
47 * add pairrapidity
48 *
49 * Revision 1.12 2001/01/22 22:56:40 laue
50 * Yano-Koonin-Podgoretskii Parametrisation added
51 *
52 * Revision 1.11 2000/10/26 16:09:16 lisa
53 * Added OpeningAngle PairCut class and method to AliFemtoPair
54 *
55 * Revision 1.10 2000/10/05 23:09:05 lisa
56 * Added kT-dependent radii to mixed-event simulator AND implemented AverageSeparation Cut and CorrFctn
57 *
58 * Revision 1.9 2000/07/17 20:03:17 lisa
59 * Implemented tools for addressing and assessing trackmerging
60 *
61 * Revision 1.8 2000/04/04 16:13:09 lisa
62 * AliFemtoPair:quality() now returns normalized value (and so is double) and add a CorrFctn which looks at quality()
63 *
64 * Revision 1.7 2000/04/03 22:09:12 rcwells
65 * Add member function ... quality().
66 *
67 * Revision 1.6 2000/02/13 21:13:34 lisa
68 * changed ambiguous AliFemtoPair::fourMomentum() to fourMomentumSum() and fourMomentumDiff() and fixed related bug in QvecCorrFctn
69 *
70 * Revision 1.5 2000/01/25 17:35:17 laue
71 * I. In order to run the stand alone version of the AliFemtoMaker the following
72 * changes have been done:
73 * a) all ClassDefs and ClassImps have been put into #ifdef __ROOT__ statements
74 * b) unnecessary includes of StMaker.h have been removed
75 * c) the subdirectory AliFemtoMaker/doc/Make has been created including everything
76 * needed for the stand alone version
77 *
78 * II. To reduce the amount of compiler warning
79 * a) some variables have been type casted
80 * b) some destructors have been declared as virtual
81 *
82 * Revision 1.4 1999/07/29 16:16:34 lisa
83 * Selemons upgrade of AliFemtoPair class
84 *
85 * Revision 1.3 1999/07/22 18:49:10 lisa
86 * Implement idea of Fabrice to not create and delete AliFemtoPair all the time
87 *
88 * Revision 1.2 1999/07/06 22:33:22 lisa
89 * Adjusted all to work in pro and new - dev itself is broken
90 *
91 * Revision 1.1.1.1 1999/06/29 16:02:57 lisa
92 * Installation of AliFemtoMaker
93 *
94 **************************************************************************/
95
96#ifndef ST_HBT_PAIR_HH
97#define ST_HBT_PAIR_HH
98
99#include <utility>
100
101#include "Infrastructure/AliFemtoParticle.h"
102#include "Infrastructure/AliFemtoTypes.h"
103
104class AliFemtoPair {
105public:
106 AliFemtoPair();
0215f606 107 AliFemtoPair(const AliFemtoPair& aPair);
67427ff7 108 AliFemtoPair(AliFemtoParticle*, AliFemtoParticle*);
67427ff7 109 ~AliFemtoPair();
0215f606 110 AliFemtoPair& operator=(const AliFemtoPair& aPair);
67427ff7 111
112 // track Gets:
113 AliFemtoParticle* track1() const;
114 AliFemtoParticle* track2() const;
115 // track Sets:
116 void SetTrack1(const AliFemtoParticle* trkPtr);
117 void SetTrack2(const AliFemtoParticle* trkPtr);
118
119 AliFemtoLorentzVector fourMomentumDiff() const;
120 AliFemtoLorentzVector fourMomentumSum() const;
121 double qInv() const;
122 double kT() const;
123 double mInv() const;
124 // pair rapidity
125 double rap() const;
126 double emissionAngle() const;
127
128 // Bertsch-Pratt momentum components in Pair Frame - written by Bekele/Humanic
129 double qSidePf() const;
130 double qOutPf() const;
131 double qLongPf() const;
132
133 // Bertsch-Pratt momentum components in Local CMS (longitudinally comoving) frame
134 // - written by Bekele/Humanic
135 double qSideCMS() const;
136 double qOutCMS() const;
137 double qLongCMS() const;
138
139 double dKSide() const;
140 double dKOut() const;
141 double dKLong() const;
142
143 // Bertsch-Pratt momentum components in a longitudinally boosted frame
144 // the argument is the beta of the longitudinal boost (default is 0.0, meaning lab frame)
145 // - written by Bekele/Humanic
146 double qSideBf(double beta=0.0) const;
147 double qOutBf(double beta=0.0) const;
148 double qLongBf(double beta=0.0) const;
149
150 // Yano-Koonin-Podgoretskii Parametrisation
151 // source rest frame (usually lab frame)
152 void qYKPCMS(double& qP, double& qT, double& q0) const ;
153 // longitudinal comoving frame
154 void qYKPLCMS(double& qP, double& qT, double& q0) const ;
155 // pair rest frame
156 void qYKPPF(double& qP, double& qT, double& q0) const ;
157
158
159 double quality() const;
160
161 // the following two methods calculate the "nominal" separation of the tracks
162 // at the inner field cage (EntranceSeparation) and when they exit the TPC,
163 // which may be at the outer field cage, or at the endcaps.
164 // "nominal" means that the tracks are assumed to start at (0,0,0). Making this
165 // assumption is important for the Event Mixing-- it is not a mistake. - MALisa
166 double NominalTpcExitSeparation() const;
167 double NominalTpcEntranceSeparation() const;
168 double NominalTpcAverageSeparation() const;
169 // adapted calculation of Entrance/Exit/Average Tpc separation to V0 daughters
170 double TpcExitSeparationTrackV0Pos() const;
171 double TpcEntranceSeparationTrackV0Pos() const;
172 double TpcAverageSeparationTrackV0Pos() const;
173
174 double TpcExitSeparationTrackV0Neg() const;
175 double TpcEntranceSeparationTrackV0Neg() const;
176 double TpcAverageSeparationTrackV0Neg() const;
177
178 double TpcExitSeparationV0PosV0Pos() const;
179 double TpcEntranceSeparationV0PosV0Pos() const;
180 double TpcAverageSeparationV0PosV0Pos() const;
181
182 double TpcExitSeparationV0PosV0Neg() const;
183 double TpcEntranceSeparationV0PosV0Neg() const;
184 double TpcAverageSeparationV0PosV0Neg() const;
185
186 double TpcExitSeparationV0NegV0Pos() const;
187 double TpcEntranceSeparationV0NegV0Pos() const;
188 double TpcAverageSeparationV0NegV0Pos() const;
189
190 double TpcExitSeparationV0NegV0Neg() const;
191 double TpcEntranceSeparationV0NegV0Neg() const;
192 double TpcAverageSeparationV0NegV0Neg() const;
193
194 double pInv() const;
195 double KStar() const;
196 double KStarFlipped() const;
197 double CVK() const;
198 double CVKFlipped() const;
199 double qInvFlippedXY() const;
200
201 double OpeningAngle() const;
202
203 // Fabrice Private <<<
204 double KStarSide() const;
205 double KStarOut() const;
206 double KStarLong() const;
207
208 float PionPairProbability() const;
209 float ElectronPairProbability() const;
210 float KaonPairProbability() const;
211 float ProtonPairProbability() const;
212 float KaonPionPairProbability() const;
213
214 double dcaInsideTpc() const;
215 double quality2() const;
216
217 /* double KStarGlobal() const;
218 double CVKGlobal() const;
219 double KStarSideGlobal() const;
220 double KStarOutGlobal() const;
221 double KStarLongGlobal() const;*/
222
223 void setMergingPar(double aMaxDuInner, double aMaxDzInner,
224 double aMaxDuOuter, double aMaxDzOuter);
225 void setDefaultHalfFieldMergingPar();
226 void setDefaultFullFieldMergingPar();
227 double getFracOfMergedRow() const;
228 double getClosestRowAtDCA() const;
229 double getWeightedAvSep() const;
230 // >>>
231 double getFracOfMergedRowTrkV0Pos() const;
232 double getClosestRowAtDCATrkV0Pos() const;
233
234 double getFracOfMergedRowTrkV0Neg() const;
235 double getClosestRowAtDCATrkV0Neg() const;
236
237 double getFracOfMergedRowV0PosV0Neg() const;
238 double getFracOfMergedRowV0NegV0Pos() const;
239 double getFracOfMergedRowV0PosV0Pos() const;
240 double getFracOfMergedRowV0NegV0Neg() const;
241
242private:
243 AliFemtoParticle* fTrack1;
244 AliFemtoParticle* fTrack2;
245
246 mutable short fNonIdParNotCalculated;
247 mutable double fDKSide;
248 mutable double fDKOut;
249 mutable double fDKLong;
250 mutable double fCVK;
251 mutable double kStarCalc;
252 void calcNonIdPar() const;
253
254 mutable short fNonIdParNotCalculatedGlobal;
255 /* mutable double fDKSideGlobal;
256 mutable double fDKOutGlobal;
257 mutable double fDKLongGlobal;
258 mutable double kStarCalcGlobal;
259 mutable double fCVKGlobal;*/
260 //void calcNonIdParGlobal() const;
261
262 mutable short fMergingParNotCalculated;
263 mutable double fWeightedAvSep;
264 mutable double fFracOfMergedRow;
265 mutable double fClosestRowAtDCA;
266
267 mutable short fMergingParNotCalculatedTrkV0Pos;
268 mutable double fFracOfMergedRowTrkV0Pos;
269 mutable double fClosestRowAtDCATrkV0Pos;
270
271 mutable short fMergingParNotCalculatedTrkV0Neg;
272 mutable double fFracOfMergedRowTrkV0Neg;
273 mutable double fClosestRowAtDCATrkV0Neg;
274
275 mutable short fMergingParNotCalculatedV0PosV0Neg;
276 mutable double fFracOfMergedRowV0PosV0Neg;
277 mutable double fClosestRowAtDCAV0PosV0Neg;
278
279 mutable short fMergingParNotCalculatedV0NegV0Pos;
280 mutable double fFracOfMergedRowV0NegV0Pos;
281 mutable double fClosestRowAtDCAV0NegV0Pos;
282
283 mutable short fMergingParNotCalculatedV0PosV0Pos;
284 mutable double fFracOfMergedRowV0PosV0Pos;
285 mutable double fClosestRowAtDCAV0PosV0Pos;
286
287 mutable short fMergingParNotCalculatedV0NegV0Neg;
288 mutable double fFracOfMergedRowV0NegV0Neg;
289 mutable double fClosestRowAtDCAV0NegV0Neg;
290
291 static double fMaxDuInner;
292 static double fMaxDzInner;
293 static double fMaxDuOuter;
294 static double fMaxDzOuter;
295 void calcMergingPar() const;
296
297 void CalcMergingParFctn(short* tmpMergingParNotCalculatedFctn,
298 float* tmpZ1,float* tmpU1,
299 float* tmpZ2,float* tmpU2,
300 int *tmpSect1,int *tmpSect2,
301 double* tmpFracOfMergedRow,
302 double* tmpClosestRowAtDCA
303 ) const;
304
305 void resetParCalculated();
306};
307
308inline void AliFemtoPair::resetParCalculated(){
309 fNonIdParNotCalculated=1;
310 fNonIdParNotCalculatedGlobal=1;
311 fMergingParNotCalculated=1;
312 fMergingParNotCalculatedTrkV0Pos=1;
313 fMergingParNotCalculatedTrkV0Neg=1;
314 fMergingParNotCalculatedV0PosV0Pos=1;
315 fMergingParNotCalculatedV0NegV0Pos=1;
316 fMergingParNotCalculatedV0PosV0Neg=1;
317 fMergingParNotCalculatedV0NegV0Neg=1;
318}
319
320inline void AliFemtoPair::SetTrack1(const AliFemtoParticle* trkPtr){
321 fTrack1=(AliFemtoParticle*)trkPtr;
322 resetParCalculated();
323}
324inline void AliFemtoPair::SetTrack2(const AliFemtoParticle* trkPtr){
325 fTrack2=(AliFemtoParticle*)trkPtr;
326 resetParCalculated();
327}
328
329inline AliFemtoParticle* AliFemtoPair::track1() const {return fTrack1;}
330inline AliFemtoParticle* AliFemtoPair::track2() const {return fTrack2;}
331
332inline double AliFemtoPair::dKSide() const{
333 if(fNonIdParNotCalculated) calcNonIdPar();
334 return fDKSide;
335}
336inline double AliFemtoPair::dKOut() const{
337 if(fNonIdParNotCalculated) calcNonIdPar();
338 return fDKOut;
339}
340inline double AliFemtoPair::dKLong() const{
341 if(fNonIdParNotCalculated) calcNonIdPar();
342 return fDKLong;
343}
344inline double AliFemtoPair::KStar() const{
345 if(fNonIdParNotCalculated) calcNonIdPar();
346 return kStarCalc;
347}
348inline double AliFemtoPair::qInv() const {
349 AliFemtoLorentzVector tDiff = (fTrack1->FourMomentum()-fTrack2->FourMomentum());
350 return ( -1.* tDiff.m());
351}
352
353// Fabrice private <<<
354inline double AliFemtoPair::KStarSide() const{
355 if(fNonIdParNotCalculated) calcNonIdPar();
356 return fDKSide;//mKStarSide;
357}
358inline double AliFemtoPair::KStarOut() const{
359 if(fNonIdParNotCalculated) calcNonIdPar();
360 return fDKOut;//mKStarOut;
361}
362inline double AliFemtoPair::KStarLong() const{
363 if(fNonIdParNotCalculated) calcNonIdPar();
364 return fDKLong;//mKStarLong;
365}
366inline double AliFemtoPair::CVK() const{
367 if(fNonIdParNotCalculated) calcNonIdPar();
368 return fCVK;
369}
370
371/*inline double AliFemtoPair::KStarGlobal() const{
372 if(fNonIdParNotCalculatedGlobal) calcNonIdParGlobal();
373 return kStarCalcGlobal;
374}
375inline double AliFemtoPair::KStarSideGlobal() const{
376 if(fNonIdParNotCalculatedGlobal) calcNonIdParGlobal();
377 return fDKSideGlobal;//mKStarSide;
378}
379inline double AliFemtoPair::KStarOutGlobal() const{
380 if(fNonIdParNotCalculatedGlobal) calcNonIdParGlobal();
381 return fDKOutGlobal;//mKStarOut;
382}
383inline double AliFemtoPair::KStarLongGlobal() const{
384 if(fNonIdParNotCalculatedGlobal) calcNonIdParGlobal();
385 return fDKLongGlobal;//mKStarLong;
386}
387inline double AliFemtoPair::CVKGlobal() const{
388 if(fNonIdParNotCalculatedGlobal) calcNonIdParGlobal();
389 return fCVKGlobal;
390}*/
391
392
393inline float AliFemtoPair::PionPairProbability() const{
394 return (fTrack1->Track()->PidProbPion()) *
395 (fTrack2->Track()->PidProbPion());
396}
397inline float AliFemtoPair::ElectronPairProbability() const{
398 return (fTrack1->Track()->PidProbElectron()) *
399 (fTrack2->Track()->PidProbElectron());
400}
401inline float AliFemtoPair::KaonPairProbability() const{
402 return (fTrack1->Track()->PidProbKaon()) *
403 (fTrack2->Track()->PidProbKaon());
404}
405inline float AliFemtoPair::ProtonPairProbability() const{
406 return (fTrack1->Track()->PidProbProton()) *
407 (fTrack2->Track()->PidProbProton());
408}
409inline float AliFemtoPair::KaonPionPairProbability() const{
410 return (fTrack1->Track()->PidProbKaon()) *
411 (fTrack2->Track()->PidProbPion());
412}
413
414inline double AliFemtoPair::getFracOfMergedRow() const{
415 if(fMergingParNotCalculated) calcMergingPar();
416 return fFracOfMergedRow;
417}
418inline double AliFemtoPair::getClosestRowAtDCA() const {
419 if(fMergingParNotCalculated) calcMergingPar();
420 return fClosestRowAtDCA;
421}
422inline double AliFemtoPair::getWeightedAvSep() const {
423 if(fMergingParNotCalculated) calcMergingPar();
424 return fWeightedAvSep;
425}
426
427
428inline double AliFemtoPair::getFracOfMergedRowTrkV0Pos() const{
429 if(fMergingParNotCalculatedTrkV0Pos)
430 CalcMergingParFctn(&fMergingParNotCalculatedTrkV0Pos,
431 &(fTrack1->fZ[0]),&(fTrack1->fU[0]),
432 &(fTrack2->fZ[0]),&(fTrack2->fU[0]),
433 &(fTrack1->fSect[0]),&(fTrack2->fSect[0]),
434 &(fFracOfMergedRowTrkV0Pos),&(fClosestRowAtDCATrkV0Pos)
435 );
436 return fFracOfMergedRowTrkV0Pos;
437}
438inline double AliFemtoPair::getClosestRowAtDCATrkV0Pos() const{
439 if(fMergingParNotCalculatedTrkV0Pos)
440 CalcMergingParFctn(&fMergingParNotCalculatedTrkV0Pos,
441 &(fTrack1->fZ[0]),&(fTrack1->fU[0]),
442 &(fTrack2->fZ[0]),&(fTrack2->fU[0]),
443 &(fTrack1->fSect[0]),&(fTrack2->fSect[0]),
444 &fFracOfMergedRowTrkV0Pos,&fClosestRowAtDCATrkV0Pos
445 );
446 return fClosestRowAtDCATrkV0Pos;
447}
448inline double AliFemtoPair::getFracOfMergedRowTrkV0Neg() const{
449 if(fMergingParNotCalculatedTrkV0Neg)
450 CalcMergingParFctn(&fMergingParNotCalculatedTrkV0Neg,
451 &(fTrack1->fZ[0]),&(fTrack1->fU[0]),
452 &(fTrack2->fV0NegZ[0]),&(fTrack2->fV0NegU[0]),
453 &(fTrack1->fSect[0]),&(fTrack2->fV0NegSect[0]),
454 &(fFracOfMergedRowTrkV0Neg),&(fClosestRowAtDCATrkV0Neg)
455 );
456 return fFracOfMergedRowTrkV0Neg;
457}
458inline double AliFemtoPair::getClosestRowAtDCATrkV0Neg() const{
459 if(fMergingParNotCalculatedTrkV0Neg)
460 CalcMergingParFctn(&fMergingParNotCalculatedTrkV0Neg,
461 &(fTrack1->fZ[0]),&(fTrack1->fU[0]),
462 &(fTrack2->fV0NegZ[0]),&(fTrack2->fV0NegU[0]),
463 &(fTrack1->fSect[0]),&(fTrack2->fV0NegSect[0]),
464 &fFracOfMergedRowTrkV0Neg,&fClosestRowAtDCATrkV0Neg
465 );
466 return fClosestRowAtDCATrkV0Neg;
467}
468inline double AliFemtoPair::getFracOfMergedRowV0PosV0Neg() const{
469 if(fMergingParNotCalculatedV0PosV0Neg)
470 CalcMergingParFctn(&fMergingParNotCalculatedV0PosV0Neg,
471 &(fTrack1->fZ[0]),&(fTrack1->fU[0]),
472 &(fTrack2->fV0NegZ[0]),&(fTrack2->fV0NegU[0]),
473 &(fTrack1->fSect[0]),&(fTrack2->fV0NegSect[0]),
474 &(fFracOfMergedRowV0PosV0Neg),
475 &(fClosestRowAtDCAV0PosV0Neg)
476 );
477 return fFracOfMergedRowV0PosV0Neg;
478}
479inline double AliFemtoPair::getFracOfMergedRowV0NegV0Pos() const{
480 if(fMergingParNotCalculatedV0NegV0Pos)
481 CalcMergingParFctn(&fMergingParNotCalculatedV0NegV0Pos,
482 &(fTrack1->fV0NegZ[0]),&(fTrack1->fV0NegU[0]),
483 &(fTrack2->fZ[0]),&(fTrack2->fU[0]),
484 &(fTrack1->fV0NegSect[0]),
485 &(fTrack2->fSect[0]),
486 &(fFracOfMergedRowV0NegV0Pos),
487 &(fClosestRowAtDCAV0NegV0Pos)
488 );
489 return fFracOfMergedRowV0NegV0Pos;
490}
491inline double AliFemtoPair::getFracOfMergedRowV0PosV0Pos() const{
492 if(fMergingParNotCalculatedV0PosV0Pos)
493 CalcMergingParFctn(&fMergingParNotCalculatedV0PosV0Pos,
494 &(fTrack1->fZ[0]),&(fTrack1->fU[0]),
495 &(fTrack2->fZ[0]),&(fTrack2->fU[0]),
496 &(fTrack1->fSect[0]),
497 &(fTrack2->fSect[0]),
498 &(fFracOfMergedRowV0PosV0Pos),
499 &(fClosestRowAtDCAV0PosV0Pos)
500 );
501 return fFracOfMergedRowV0PosV0Pos;
502}
503inline double AliFemtoPair::getFracOfMergedRowV0NegV0Neg() const{
504 if(fMergingParNotCalculatedV0NegV0Neg)
505 CalcMergingParFctn(&fMergingParNotCalculatedV0NegV0Neg,
506 &(fTrack1->fV0NegZ[0]),&(fTrack1->fV0NegU[0]),
507 &(fTrack2->fV0NegZ[0]),&(fTrack2->fV0NegU[0]),
508 &(fTrack1->fV0NegSect[0]),
509 &(fTrack2->fV0NegSect[0]),
510 &(fFracOfMergedRowV0NegV0Neg),
511 &(fClosestRowAtDCAV0NegV0Neg)
512 );
513 return fFracOfMergedRowV0NegV0Neg;
514}
515
516#endif