1 #include "AliHBTPositionRandomizer.h"
2 //___________________________________________________
3 ////////////////////////////////////////////////////////////////////////////////
5 // class AliHBTPositionRandomizer
7 // These class randomizes particle vertex positions
8 // Piotr.Skowronski@cern.ch
10 ////////////////////////////////////////////////////////////////////////////////
14 #include "AliVAODParticle.h"
17 ClassImp(AliHBTPositionRandomizer)
19 /*********************************************************************/
21 AliHBTPositionRandomizer::AliHBTPositionRandomizer():
25 fAddToExistingPos(kFALSE),
26 fOnlyParticlesFromVertex(kFALSE),
27 fRandomizeTracks(kFALSE),
34 /*********************************************************************/
36 AliHBTPositionRandomizer::AliHBTPositionRandomizer(AliReader* reader):
38 fRandomizer(new AliHBTRndmGaussBall(8.0)),
40 fAddToExistingPos(kFALSE),
41 fOnlyParticlesFromVertex(kFALSE),
42 fRandomizeTracks(kFALSE),
49 /*********************************************************************/
51 AliHBTPositionRandomizer::AliHBTPositionRandomizer(const AliHBTPositionRandomizer& in):
56 fAddToExistingPos(kFALSE),
57 fOnlyParticlesFromVertex(kFALSE),
58 fRandomizeTracks(kFALSE),
66 /*********************************************************************/
67 AliHBTPositionRandomizer::~AliHBTPositionRandomizer()
73 /*********************************************************************/
74 AliHBTPositionRandomizer& AliHBTPositionRandomizer::operator=(const AliHBTPositionRandomizer& in)
80 /*********************************************************************/
82 AliAOD* AliHBTPositionRandomizer::GetEventSim() const
84 // gets from fReader and randomizes current particle event
87 Error("GetEventSim","Reader is null");
90 AliAOD *e = fReader->GetEventSim();
92 if (e->IsRandomized() == kFALSE)
96 /*********************************************************************/
98 AliAOD* AliHBTPositionRandomizer::GetEventRec() const
100 // gets from fReader and randomizes current track event
103 Error("GetEventRec","Reader is null");
106 AliAOD *e = fReader->GetEventRec();
107 if (fRandomizeTracks && e) if (e->IsRandomized() == kFALSE) Randomize(e);
110 /*********************************************************************/
112 AliAOD* AliHBTPositionRandomizer::GetEventSim(Int_t n)
115 if (fReader == 0x0) return 0x0;
116 AliAOD *e = fReader->GetEventSim(n);
117 if (e->IsRandomized() == kFALSE) Randomize(e);
121 /*********************************************************************/
122 void AliHBTPositionRandomizer::Randomize(AliAOD* event) const
124 // randomizes postions of all particles in the event
125 static const Double_t kfmtocm = 1.e-13;
126 if (AliVAODParticle::GetDebug() > 5) Info("Randomize(AliAOD*)","");
127 if (event == 0x0) return;
129 for (Int_t i = 0; i < event->GetNumberOfParticles(); i++)
131 AliVAODParticle* p = event->GetParticle(i);
132 Double_t x,y,z,t=0.0;
133 fRandomizer->Randomize(x,y,z,p);
135 Double_t nx = x*kfmtocm;
136 Double_t ny = y*kfmtocm;
137 Double_t nz = z*kfmtocm;
138 Double_t nt = t*kfmtocm;
140 if (fAddToExistingPos)
147 p->SetProductionVertex(nx,ny,nz,nt);
149 event->SetRandomized();
151 /*********************************************************************/
153 void AliHBTPositionRandomizer::SetGaussianBall(Double_t r)
155 //Sets Gaussian Ball Model
156 SetGaussianBall(r,r,r);
158 /*********************************************************************/
160 void AliHBTPositionRandomizer::SetGaussianBall(Double_t rx, Double_t ry, Double_t rz)
162 //Sets Gaussian Ball Model
164 fRandomizer = new AliHBTRndmGaussBall(rx,ry,rz);
166 /*********************************************************************/
168 void AliHBTPositionRandomizer::SetCyllinderSurface(Double_t r, Double_t l)
170 //Sets Cylinder Surface Model
172 fRandomizer = new AliHBTRndmCyllSurf(r,l);
174 /*********************************************************************/
176 void AliHBTPositionRandomizer::SetEventVertex(Double_t x, Double_t y,Double_t z)
178 //sets event vertex position
183 /*********************************************************************/
184 //_____________________________________________________________________
185 ///////////////////////////////////////////////////////////////////////
187 // class AliHBTRndmGaussBall //
189 ///////////////////////////////////////////////////////////////////////
191 AliHBTRndmGaussBall::AliHBTRndmGaussBall():
198 /*********************************************************************/
200 AliHBTRndmGaussBall::AliHBTRndmGaussBall(Float_t r):
207 /*********************************************************************/
209 AliHBTRndmGaussBall::AliHBTRndmGaussBall(Float_t rx, Float_t ry, Float_t rz):
216 /*********************************************************************/
218 void AliHBTRndmGaussBall::Randomize(Double_t& x,Double_t& y,Double_t&z, AliVAODParticle*/*particle*/) const
220 //randomizez gauss for each coordinate separately
221 x = gRandom->Gaus(0.0,fRx);
222 y = gRandom->Gaus(0.0,fRy);
223 z = gRandom->Gaus(0.0,fRz);
225 /*********************************************************************/
226 //_____________________________________________________________________
227 ///////////////////////////////////////////////////////////////////////
229 // class AliHBTRndmGaussBall //
231 ///////////////////////////////////////////////////////////////////////
233 void AliHBTRndmCyllSurf::Randomize(Double_t& x,Double_t& y,Double_t&z, AliVAODParticle* particle) const
236 Double_t r = fR + gRandom->Gaus(0.0, 1.0);
237 Double_t sf = r/particle->Pt();//scaling factor for position transformation ->
238 //we move direction of string momentum but legth defined by r
239 x = sf*particle->Px();
240 y = sf*particle->Py();
241 z = gRandom->Uniform(-fL,fL);