1 #include "AliHBTPositionRandomizer.h"
2 //___________________________________________________
3 ////////////////////////////////////////////////////////////////////////////////
5 // class AliHBTPositionRandomizer
7 // These class randomizes particle vertex positions
8 // Piotr.Skowronski@cern.ch
10 ////////////////////////////////////////////////////////////////////////////////
13 #include "AliHBTRun.h"
14 #include "AliHBTEvent.h"
15 #include "AliHBTParticle.h"
18 ClassImp(AliHBTPositionRandomizer)
20 /*********************************************************************/
22 AliHBTPositionRandomizer::AliHBTPositionRandomizer():
26 fAddToExistingPos(kFALSE),
27 fOnlyParticlesFromVertex(kFALSE),
28 fRandomizeTracks(kFALSE),
35 /*********************************************************************/
37 AliHBTPositionRandomizer::AliHBTPositionRandomizer(AliHBTReader* reader):
39 fRandomizer(new AliHBTRndmGaussBall(8.0)),
41 fAddToExistingPos(kFALSE),
42 fOnlyParticlesFromVertex(kFALSE),
43 fRandomizeTracks(kFALSE),
50 /*********************************************************************/
52 AliHBTPositionRandomizer::AliHBTPositionRandomizer(const AliHBTPositionRandomizer& in):
57 fAddToExistingPos(kFALSE),
58 fOnlyParticlesFromVertex(kFALSE),
59 fRandomizeTracks(kFALSE),
67 /*********************************************************************/
68 AliHBTPositionRandomizer::~AliHBTPositionRandomizer()
74 /*********************************************************************/
75 AliHBTPositionRandomizer& AliHBTPositionRandomizer::operator=(const AliHBTPositionRandomizer& in)
81 /*********************************************************************/
83 AliHBTEvent* AliHBTPositionRandomizer::GetParticleEvent()
85 // gets from fReader and randomizes current particle event
86 if (fReader == 0x0) return 0x0;
87 AliHBTEvent *e = fReader->GetParticleEvent();
88 if (e->IsRandomized() == kFALSE) Randomize(e);
91 /*********************************************************************/
93 AliHBTEvent* AliHBTPositionRandomizer::GetTrackEvent()
95 // gets from fReader and randomizes current track event
96 if (fReader == 0x0) return 0x0;
97 AliHBTEvent *e = fReader->GetTrackEvent();
98 if (fRandomizeTracks) if (e->IsRandomized() == kFALSE) Randomize(e);
101 /*********************************************************************/
103 Int_t AliHBTPositionRandomizer::Read(AliHBTRun* particles, AliHBTRun *tracks)
105 //Reads all available events and randomizes them
106 if (fReader == 0x0) return 1;
107 if (AliHBTParticle::GetDebug() > 5) Info("Randomize(AliHBTRun*)","");
108 Int_t err = fReader->Read(particles,tracks);
110 Randomize(particles);
111 if (fRandomizeTracks) Randomize(tracks);
114 /*********************************************************************/
116 AliHBTEvent* AliHBTPositionRandomizer::GetParticleEvent(Int_t n)
119 if (fReader == 0x0) return 0x0;
120 AliHBTEvent *e = fReader->GetParticleEvent(n);
121 if (e->IsRandomized() == kFALSE) Randomize(e);
125 /*********************************************************************/
127 void AliHBTPositionRandomizer::Randomize(AliHBTRun* run) const
129 // randomizes postions of all particles in the run
130 if (run == 0x0) return;
131 if (AliHBTParticle::GetDebug() > 5) Info("Randomize(AliHBTRun*)","");
132 for (Int_t i = 0; i < run->GetNumberOfEvents(); i++)
134 Randomize(run->GetEvent(i));
137 /*********************************************************************/
138 void AliHBTPositionRandomizer::Randomize(AliHBTEvent* event) const
140 // randomizes postions of all particles in the event
141 static const Double_t kfmtocm = 1.e-13;
142 if (AliHBTParticle::GetDebug() > 5) Info("Randomize(AliHBTEvent*)","");
143 if (event == 0x0) return;
145 for (Int_t i = 0; i < event->GetNumberOfParticles(); i++)
147 AliHBTParticle* p = event->GetParticle(i);
148 Double_t x,y,z,t=0.0;
149 fRandomizer->Randomize(x,y,z,p);
151 Double_t nx = x*kfmtocm;
152 Double_t ny = y*kfmtocm;
153 Double_t nz = z*kfmtocm;
154 Double_t nt = t*kfmtocm;
156 if (fAddToExistingPos)
163 p->SetProductionVertex(nx,ny,nz,nt);
165 event->SetRandomized();
167 /*********************************************************************/
169 void AliHBTPositionRandomizer::SetGaussianBall(Double_t r)
171 //Sets Gaussian Ball Model
172 SetGaussianBall(r,r,r);
174 /*********************************************************************/
176 void AliHBTPositionRandomizer::SetGaussianBall(Double_t rx, Double_t ry, Double_t rz)
178 //Sets Gaussian Ball Model
180 fRandomizer = new AliHBTRndmGaussBall(rx,ry,rz);
182 /*********************************************************************/
184 void AliHBTPositionRandomizer::SetCyllinderSurface(Double_t r, Double_t l)
186 //Sets Cylinder Surface Model
188 fRandomizer = new AliHBTRndmCyllSurf(r,l);
190 /*********************************************************************/
192 void AliHBTPositionRandomizer::SetEventVertex(Double_t x, Double_t y,Double_t z)
194 //sets event vertex position
199 /*********************************************************************/
200 //_____________________________________________________________________
201 ///////////////////////////////////////////////////////////////////////
203 // class AliHBTRndmGaussBall //
205 ///////////////////////////////////////////////////////////////////////
207 AliHBTRndmGaussBall::AliHBTRndmGaussBall():
214 /*********************************************************************/
216 AliHBTRndmGaussBall::AliHBTRndmGaussBall(Float_t r):
223 /*********************************************************************/
225 AliHBTRndmGaussBall::AliHBTRndmGaussBall(Float_t rx, Float_t ry, Float_t rz):
232 /*********************************************************************/
234 void AliHBTRndmGaussBall::Randomize(Double_t& x,Double_t& y,Double_t&z, AliHBTParticle*/*particle*/) const
236 //randomizez gauss for each coordinate separately
237 x = gRandom->Gaus(0.0,fRx);
238 y = gRandom->Gaus(0.0,fRy);
239 z = gRandom->Gaus(0.0,fRz);
241 /*********************************************************************/
242 //_____________________________________________________________________
243 ///////////////////////////////////////////////////////////////////////
245 // class AliHBTRndmGaussBall //
247 ///////////////////////////////////////////////////////////////////////
249 void AliHBTRndmCyllSurf::Randomize(Double_t& x,Double_t& y,Double_t&z, AliHBTParticle* particle) const
252 Double_t r = fR + gRandom->Gaus(0.0, 1.0);
253 Double_t sf = r/particle->Pt();//scaling factor for position transformation ->
254 //we move direction of string momentum but legth defined by r
255 x = sf*particle->Px();
256 y = sf*particle->Py();
257 z = gRandom->Uniform(-fL,fL);