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),
34 /*********************************************************************/
36 AliHBTPositionRandomizer::AliHBTPositionRandomizer(AliHBTReader* reader):
38 fRandomizer(new AliHBTRndmGaussBall(8.0)),
40 fAddToExistingPos(kFALSE),
41 fOnlyParticlesFromVertex(kFALSE),
48 /*********************************************************************/
50 AliHBTPositionRandomizer::AliHBTPositionRandomizer(const AliHBTPositionRandomizer& in):
55 fAddToExistingPos(kFALSE),
56 fOnlyParticlesFromVertex(kFALSE),
64 /*********************************************************************/
65 AliHBTPositionRandomizer::~AliHBTPositionRandomizer()
71 /*********************************************************************/
72 const AliHBTPositionRandomizer& AliHBTPositionRandomizer::operator=(const AliHBTPositionRandomizer& in)
78 /*********************************************************************/
80 AliHBTEvent* AliHBTPositionRandomizer::GetParticleEvent()
82 // gets from fReader and randomizes current particle event
83 if (fReader == 0x0) return 0x0;
84 AliHBTEvent *e = fReader->GetParticleEvent();
85 if (e->IsRandomized() == kFALSE) Randomize(e);
88 /*********************************************************************/
90 AliHBTEvent* AliHBTPositionRandomizer::GetTrackEvent()
92 // gets from fReader and randomizes current track event
93 if (fReader == 0x0) return 0x0;
94 AliHBTEvent *e = fReader->GetTrackEvent();
95 if (e->IsRandomized() == kFALSE) Randomize(e);
98 /*********************************************************************/
100 Int_t AliHBTPositionRandomizer::Read(AliHBTRun* particles, AliHBTRun *tracks)
102 //Reads all available events and randomizes them
103 if (fReader == 0x0) return 1;
104 Info("Randomize(AliHBTRun*)","");
105 Int_t err = fReader->Read(particles,tracks);
107 Randomize(particles);
110 /*********************************************************************/
112 AliHBTEvent* AliHBTPositionRandomizer::GetParticleEvent(Int_t n)
115 if (fReader == 0x0) return 0x0;
116 AliHBTEvent *e = fReader->GetParticleEvent(n);
117 if (e->IsRandomized() == kFALSE) Randomize(e);
121 /*********************************************************************/
123 void AliHBTPositionRandomizer::Randomize(AliHBTRun* run) const
125 // randomizes postions of all particles in the run
126 if (run == 0x0) return;
127 Info("Randomize(AliHBTRun*)","");
128 for (Int_t i = 0; i < run->GetNumberOfEvents(); i++)
130 Randomize(run->GetEvent(i));
133 /*********************************************************************/
134 void AliHBTPositionRandomizer::Randomize(AliHBTEvent* event) const
136 // randomizes postions of all particles in the event
137 static const Double_t kfmtocm = 1.e-13;
138 Info("Randomize(AliHBTEvent*)","");
139 if (event == 0x0) return;
141 for (Int_t i = 0; i < event->GetNumberOfParticles(); i++)
143 AliHBTParticle* p = event->GetParticle(i);
144 Double_t x,y,z,t=0.0;
145 fRandomizer->Randomize(x,y,z,p);
146 p->SetProductionVertex(x*kfmtocm,y*kfmtocm,z*kfmtocm,t*kfmtocm);
148 event->SetRandomized();
150 /*********************************************************************/
152 void AliHBTPositionRandomizer::SetGaussianBall(Double_t r)
154 //Sets Gaussian Ball Model
155 SetGaussianBall(r,r,r);
157 /*********************************************************************/
159 void AliHBTPositionRandomizer::SetGaussianBall(Double_t rx, Double_t ry, Double_t rz)
161 //Sets Gaussian Ball Model
163 fRandomizer = new AliHBTRndmGaussBall(rx,ry,rz);
165 /*********************************************************************/
167 void AliHBTPositionRandomizer::SetCyllinderSurface(Double_t r, Double_t l)
169 //Sets Cylinder Surface Model
171 fRandomizer = new AliHBTRndmCyllSurf(r,l);
173 /*********************************************************************/
175 void AliHBTPositionRandomizer::SetEventVertex(Double_t x, Double_t y,Double_t z)
177 //sets event vertex position
182 /*********************************************************************/
183 //_____________________________________________________________________
184 ///////////////////////////////////////////////////////////////////////
186 // class AliHBTRndmGaussBall //
188 ///////////////////////////////////////////////////////////////////////
190 AliHBTRndmGaussBall::AliHBTRndmGaussBall():
197 /*********************************************************************/
199 AliHBTRndmGaussBall::AliHBTRndmGaussBall(Float_t r):
206 /*********************************************************************/
208 AliHBTRndmGaussBall::AliHBTRndmGaussBall(Float_t rx, Float_t ry, Float_t rz):
215 /*********************************************************************/
217 void AliHBTRndmGaussBall::Randomize(Double_t& x,Double_t& y,Double_t&z, AliHBTParticle*/*particle*/) const
219 //randomizez gauss for each coordinate separately
220 x = gRandom->Gaus(0.0,fRx);
221 y = gRandom->Gaus(0.0,fRy);
222 z = gRandom->Gaus(0.0,fRz);
224 /*********************************************************************/
225 //_____________________________________________________________________
226 ///////////////////////////////////////////////////////////////////////
228 // class AliHBTRndmGaussBall //
230 ///////////////////////////////////////////////////////////////////////
232 void AliHBTRndmCyllSurf::Randomize(Double_t& x,Double_t& y,Double_t&z, AliHBTParticle* particle) const
235 Double_t r = fR + gRandom->Gaus(0.0, 1.0);
236 Double_t sf = r/particle->Pt();//scaling factor for position transformation ->
237 //we move direction of string momentum but legth defined by r
238 x = sf*particle->Px();
239 y = sf*particle->Py();
240 z = gRandom->Uniform(-fL,fL);