]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/FEMTOSCOPY/AliFemto/AliFemtoModelGausLCMSFreezeOutGenerator.cxx
Adding support for momentum resolution studies in HBT code
[u/mrichter/AliRoot.git] / PWGCF / 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 #include <TMath.h>
17
18 //_______________________
19 AliFemtoModelGausLCMSFreezeOutGenerator::AliFemtoModelGausLCMSFreezeOutGenerator() :
20   fSizeOut(0), fSizeSide(0), fSizeLong(0)
21 {
22   // Default constructor
23   fRandom = new TRandom2();
24 }
25
26 //_______________________
27 AliFemtoModelGausLCMSFreezeOutGenerator::AliFemtoModelGausLCMSFreezeOutGenerator(const AliFemtoModelGausLCMSFreezeOutGenerator &aModel):
28   AliFemtoModelFreezeOutGenerator(aModel),
29   fSizeOut(0), fSizeSide(0), fSizeLong(0)
30 {
31   // Copy constructor
32   fRandom = new TRandom2();
33   SetSizeOut(aModel.GetSizeOut());
34   SetSizeSide(aModel.GetSizeSide());
35   SetSizeLong(aModel.GetSizeLong());
36 }
37 //_______________________
38 AliFemtoModelGausLCMSFreezeOutGenerator::~AliFemtoModelGausLCMSFreezeOutGenerator()
39 {
40   if (fRandom) delete fRandom;
41 }
42 //_______________________
43 AliFemtoModelGausLCMSFreezeOutGenerator& AliFemtoModelGausLCMSFreezeOutGenerator::operator=(const AliFemtoModelGausLCMSFreezeOutGenerator &aModel)
44 {
45   if (this != &aModel) {
46     fRandom = new TRandom2();
47     SetSizeOut(aModel.GetSizeOut());
48     SetSizeSide(aModel.GetSizeSide());
49     SetSizeLong(aModel.GetSizeLong());
50   }
51
52   return *this;
53 }
54 //_______________________
55 void AliFemtoModelGausLCMSFreezeOutGenerator::GenerateFreezeOut(AliFemtoPair *aPair)
56 {
57   // Generate two particle emission points with respect
58   // to their pair momentum 
59   // The source is the 3D Gaussian ellipsoid in the LCMS frame
60   //AliFemtoModelHiddenInfo *inf1 = (AliFemtoModelHiddenInfo *) aPair->Track1()->HiddenInfo();
61   //AliFemtoModelHiddenInfo *inf2 = (AliFemtoModelHiddenInfo *) aPair->Track2()->HiddenInfo();
62   AliFemtoTrack *inf1 = (AliFemtoTrack *) aPair->Track1()->Track();
63   AliFemtoTrack *inf2 = (AliFemtoTrack *) aPair->Track2()->Track();
64
65   if ((!inf1) || (!inf2)) { cout << "Hidden info not created! "  << endl; exit(kFALSE); }
66
67   Double_t tPx = inf1->GetTrueMomentum()->x() + inf2->GetTrueMomentum()->x();
68   Double_t tPy = inf1->GetTrueMomentum()->y() + inf2->GetTrueMomentum()->y();
69   Double_t tPz = inf1->GetTrueMomentum()->z() + inf2->GetTrueMomentum()->z();
70   Double_t tM1 = inf1->GetMass();
71   Double_t tM2 = inf2->GetMass();
72   Double_t tE1 = sqrt(tM1*tM1 + inf1->GetTrueMomentum()->Mag2());
73   Double_t tE2 = sqrt(tM2*tM2 + inf2->GetTrueMomentum()->Mag2());
74   Double_t tEs = tE1 + tE2;
75
76   Double_t tPt = sqrt(tPx*tPx + tPy*tPy);
77
78   Double_t tRout = fRandom->Gaus(0.0, fSizeOut);
79   Double_t tRside = fRandom->Gaus(0.0, fSizeSide);
80   Double_t tRlong = fRandom->Gaus(0.0, fSizeLong);
81   
82   Double_t tXout = (tPx * tRout + tPy * tRside)/tPt;
83   Double_t tXside = (tPy * tRout - tPx * tRside)/tPt;
84
85   Double_t tBetaz = tPz/tEs;
86   Double_t tGammaz = 1.0/TMath::Sqrt(1-tBetaz*tBetaz);
87   
88   Double_t tXlong = tGammaz * (tRlong + tBetaz * 0);
89   Double_t tXtime = tGammaz * (0 + tBetaz * tRlong);
90   
91   if (!(inf1->GetEmissionPoint())) {
92     AliFemtoLorentzVector *tPos = new AliFemtoLorentzVector(0,0,0,0);
93     inf1->SetEmissionPoint(tPos);
94     delete tPos;
95   }
96   else
97     inf1->SetEmissionPoint(0,0,0,0);
98   if (!(inf2->GetEmissionPoint())) {
99     AliFemtoLorentzVector *tPos = new AliFemtoLorentzVector(tXout,tXside,tXlong,tXtime);
100     inf2->SetEmissionPoint(tPos);
101     delete tPos;
102   }
103   else
104     inf2->SetEmissionPoint(tXout, tXside, tXlong, tXtime);
105 }
106
107 //_______________________
108 void AliFemtoModelGausLCMSFreezeOutGenerator::SetSizeOut(Double_t aSizeOut)
109 {
110   fSizeOut = aSizeOut;
111 }
112 //_______________________
113 void AliFemtoModelGausLCMSFreezeOutGenerator::SetSizeSide(Double_t aSizeSide)
114 {
115   fSizeSide = aSizeSide;
116 }
117 //_______________________
118 void AliFemtoModelGausLCMSFreezeOutGenerator::SetSizeLong(Double_t aSizeLong)
119 {
120   fSizeLong = aSizeLong;
121 }
122
123 //_______________________
124 Double_t AliFemtoModelGausLCMSFreezeOutGenerator::GetSizeOut() const
125 {
126   return fSizeOut;
127 }
128 //_______________________
129 Double_t AliFemtoModelGausLCMSFreezeOutGenerator::GetSizeSide() const
130 {
131   return fSizeSide;
132 }
133 //_______________________
134 Double_t AliFemtoModelGausLCMSFreezeOutGenerator::GetSizeLong() const
135 {
136   return fSizeLong;
137 }
138 //_______________________
139 AliFemtoModelFreezeOutGenerator* AliFemtoModelGausLCMSFreezeOutGenerator::Clone() const
140
141   return GetGenerator(); 
142 }
143 //_______________________
144 AliFemtoModelFreezeOutGenerator* AliFemtoModelGausLCMSFreezeOutGenerator::GetGenerator() const 
145
146   AliFemtoModelFreezeOutGenerator* tModel = new AliFemtoModelGausLCMSFreezeOutGenerator(*this); return tModel; 
147 }