]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/FEMTOSCOPY/AliFemto/AliFemtoModelGausLCMSFreezeOutGenerator.cxx
Fix Gamma calculation^CliFemtoModelGausLCMSFreezeOutGenerator.cxx
[u/mrichter/AliRoot.git] / PWG2 / FEMTOSCOPY / AliFemto / AliFemtoModelGausLCMSFreezeOutGenerator.cxx
1 ////////////////////////////////////////////////////////////////////////////////
2 ///                                                                          ///
3 /// AliFemtoModelGausLCMSFreezeOutGenerator - freeze-out                     ///
4 /// coordinates generator, generating a 3D gaussian ellipsoid in LCMS        ///
5 /// Authors: Adam Kisiel kisiel@mps.ohio-state.edu                           ///
6 ///                                                                          ///
7 ////////////////////////////////////////////////////////////////////////////////
8 #ifdef __ROOT__
9   ClassImp(AliFemtoModelGausLCMSFreezeOutGenerator, 1)
10 #endif
11
12 #include "math.h"
13 #include "AliFemtoModelGausLCMSFreezeOutGenerator.h"
14 #include "AliFemtoModelHiddenInfo.h"
15 #include "AliFemtoLorentzVector.h"
16
17 //_______________________
18 AliFemtoModelGausLCMSFreezeOutGenerator::AliFemtoModelGausLCMSFreezeOutGenerator() :
19   fSizeOut(0), fSizeSide(0), fSizeLong(0)
20 {
21   // Default constructor
22   fRandom = new TRandom2();
23 }
24
25 //_______________________
26 AliFemtoModelGausLCMSFreezeOutGenerator::AliFemtoModelGausLCMSFreezeOutGenerator(const AliFemtoModelGausLCMSFreezeOutGenerator &aModel):
27   AliFemtoModelFreezeOutGenerator(aModel),
28   fSizeOut(0), fSizeSide(0), fSizeLong(0)
29 {
30   // Copy constructor
31   fRandom = new TRandom2();
32   SetSizeOut(aModel.GetSizeOut());
33   SetSizeSide(aModel.GetSizeSide());
34   SetSizeLong(aModel.GetSizeLong());
35 }
36 //_______________________
37 AliFemtoModelGausLCMSFreezeOutGenerator::~AliFemtoModelGausLCMSFreezeOutGenerator()
38 {
39   if (fRandom) delete fRandom;
40 }
41 //_______________________
42 void AliFemtoModelGausLCMSFreezeOutGenerator::GenerateFreezeOut(AliFemtoPair *aPair)
43 {
44   // Generate two particle emission points with respect
45   // to their pair momentum 
46   // The source is the 3D Gaussian ellipsoid in the LCMS frame
47   AliFemtoModelHiddenInfo *inf1 = (AliFemtoModelHiddenInfo *) aPair->Track1()->HiddenInfo();
48   AliFemtoModelHiddenInfo *inf2 = (AliFemtoModelHiddenInfo *) aPair->Track2()->HiddenInfo();
49
50   if ((!inf1) || (!inf2)) { cout << "Hidden info not created! "  << endl; exit(kFALSE); }
51
52   Double_t tPx = inf1->GetTrueMomentum()->x() + inf2->GetTrueMomentum()->x();
53   Double_t tPy = inf1->GetTrueMomentum()->y() + inf2->GetTrueMomentum()->y();
54   Double_t tPz = inf1->GetTrueMomentum()->z() + inf2->GetTrueMomentum()->z();
55   Double_t tM1 = inf1->GetMass();
56   Double_t tM2 = inf2->GetMass();
57   Double_t tE1 = sqrt(tM1*tM1 + inf1->GetTrueMomentum()->mag2());
58   Double_t tE2 = sqrt(tM2*tM2 + inf2->GetTrueMomentum()->mag2());
59   Double_t tEs = tE1 + tE2;
60
61   Double_t tPt = sqrt(tPx*tPx + tPy*tPy);
62
63   Double_t tRout = fRandom->Gaus(0.0, fSizeOut);
64   Double_t tRside = fRandom->Gaus(0.0, fSizeSide);
65   Double_t tRlong = fRandom->Gaus(0.0, fSizeLong);
66   
67   Double_t tXout = (tPx * tRout + tPy * tRside)/tPt;
68   Double_t tXside = (tPy * tRout - tPx * tRside)/tPt;
69
70   Double_t tBetaz = tPz/tEs;
71   Double_t tGammaz = 1.0/TMath::Sqrt(1-tBetaz*tBetaz);
72   
73   Double_t tXlong = tGammaz * (tRlong + tBetaz * 0);
74   Double_t tXtime = tGammaz * (0 + tBetaz * tRlong);
75   
76   if (!(inf1->GetEmissionPoint())) {
77     AliFemtoLorentzVector *tPos = new AliFemtoLorentzVector(0,0,0,0);
78     inf1->SetEmissionPoint(tPos);
79   }
80   else
81     inf1->SetEmissionPoint(0,0,0,0);
82   if (!(inf2->GetEmissionPoint())) {
83     AliFemtoLorentzVector *tPos = new AliFemtoLorentzVector(tXout,tXside,tXlong,tXtime);
84     inf2->SetEmissionPoint(tPos);
85   }
86   else
87     inf2->SetEmissionPoint(tXout, tXside, tXlong, tXtime);
88 }
89
90 //_______________________
91 void AliFemtoModelGausLCMSFreezeOutGenerator::SetSizeOut(Double_t aSizeOut)
92 {
93   fSizeOut = aSizeOut;
94 }
95 //_______________________
96 void AliFemtoModelGausLCMSFreezeOutGenerator::SetSizeSide(Double_t aSizeSide)
97 {
98   fSizeSide = aSizeSide;
99 }
100 //_______________________
101 void AliFemtoModelGausLCMSFreezeOutGenerator::SetSizeLong(Double_t aSizeLong)
102 {
103   fSizeLong = aSizeLong;
104 }
105
106 //_______________________
107 Double_t AliFemtoModelGausLCMSFreezeOutGenerator::GetSizeOut() const
108 {
109   return fSizeOut;
110 }
111 //_______________________
112 Double_t AliFemtoModelGausLCMSFreezeOutGenerator::GetSizeSide() const
113 {
114   return fSizeSide;
115 }
116 //_______________________
117 Double_t AliFemtoModelGausLCMSFreezeOutGenerator::GetSizeLong() const
118 {
119   return fSizeLong;
120 }
121 //_______________________
122 AliFemtoModelFreezeOutGenerator* AliFemtoModelGausLCMSFreezeOutGenerator::Clone() const
123
124   return GetGenerator(); 
125 }
126 //_______________________
127 AliFemtoModelFreezeOutGenerator* AliFemtoModelGausLCMSFreezeOutGenerator::GetGenerator() const 
128
129   AliFemtoModelFreezeOutGenerator* tModel = new AliFemtoModelGausLCMSFreezeOutGenerator(*this); return tModel; 
130 }