1 #include "AliHBTPositionRandomizer.h"
4 #include "AliHBTEvent.h"
5 #include "AliHBTParticle.h"
8 ClassImp(AliHBTPositionRandomizer)
10 /*********************************************************************/
12 AliHBTPositionRandomizer::AliHBTPositionRandomizer():
16 fAddToExistingPos(kFALSE),
17 fOnlyParticlesFromVertex(kFALSE),
24 /*********************************************************************/
26 AliHBTPositionRandomizer::AliHBTPositionRandomizer(AliHBTReader* reader):
28 fRandomizer(new AliHBTRndmGaussBall(8.0)),
30 fAddToExistingPos(kFALSE),
31 fOnlyParticlesFromVertex(kFALSE),
38 /*********************************************************************/
40 Int_t AliHBTPositionRandomizer::Read(AliHBTRun* particles, AliHBTRun *tracks)
42 if (fReader == 0x0) return 1;
43 Info("Randomize(AliHBTRun*)","");
44 Int_t err = fReader->Read(particles,tracks);
49 /*********************************************************************/
51 AliHBTEvent* AliHBTPositionRandomizer::GetParticleEvent(Int_t n)
54 if (fReader == 0x0) return 0x0;
55 AliHBTEvent *e = fReader->GetParticleEvent(n);
56 if (e->IsRandomized() == kFALSE) Randomize(e);
60 /*********************************************************************/
62 void AliHBTPositionRandomizer::Randomize(AliHBTRun* run)
64 // randomizes postions of all particles in the run
65 if (run == 0x0) return;
66 Info("Randomize(AliHBTRun*)","");
67 for (Int_t i = 0; i < run->GetNumberOfEvents(); i++)
69 Randomize(run->GetEvent(i));
72 /*********************************************************************/
73 void AliHBTPositionRandomizer::Randomize(AliHBTEvent* event)
75 // randomizes postions of all particles in the event
76 static const Double_t fmtocm = 1.e-13;
77 Info("Randomize(AliHBTEvent*)","");
78 if (event == 0x0) return;
80 for (Int_t i = 0; i < event->GetNumberOfParticles(); i++)
82 AliHBTParticle* p = event->GetParticle(i);
84 fRandomizer->Randomize(x,y,z,p);
85 p->SetProductionVertex(x*fmtocm,y*fmtocm,z*fmtocm,t*fmtocm);
87 event->SetRandomized();
89 /*********************************************************************/
91 void AliHBTPositionRandomizer::SetGaussianBall(Double_t r)
93 SetGaussianBall(r,r,r);
95 /*********************************************************************/
97 void AliHBTPositionRandomizer::SetGaussianBall(Double_t rx, Double_t ry, Double_t rz)
100 fRandomizer = new AliHBTRndmGaussBall(rx,ry,rz);
102 /*********************************************************************/
104 void AliHBTPositionRandomizer::SetCyllinderSurface(Double_t r, Double_t l)
107 fRandomizer = new AliHBTRndmCyllSurf(r,l);
109 /*********************************************************************/
111 void AliHBTPositionRandomizer::SetEventVertex(Double_t x, Double_t y,Double_t z)
113 //sets event vertex position
118 /*********************************************************************/
119 //_____________________________________________________________________
120 ///////////////////////////////////////////////////////////////////////
122 // class AliHBTRndmGaussBall //
124 ///////////////////////////////////////////////////////////////////////
126 AliHBTRndmGaussBall::AliHBTRndmGaussBall():
133 /*********************************************************************/
135 AliHBTRndmGaussBall::AliHBTRndmGaussBall(Float_t r):
142 /*********************************************************************/
144 AliHBTRndmGaussBall::AliHBTRndmGaussBall(Float_t rx, Float_t ry, Float_t rz):
151 /*********************************************************************/
153 void AliHBTRndmGaussBall::Randomize(Double_t& x,Double_t& y,Double_t&z, AliHBTParticle*p)
155 //randomizez gauss for each coordinate separately
156 x = gRandom->Gaus(0.0,fRx);
157 y = gRandom->Gaus(0.0,fRy);
158 z = gRandom->Gaus(0.0,fRz);
160 /*********************************************************************/
161 //_____________________________________________________________________
162 ///////////////////////////////////////////////////////////////////////
164 // class AliHBTRndmGaussBall //
166 ///////////////////////////////////////////////////////////////////////
168 void AliHBTRndmCyllSurf::Randomize(Double_t& x,Double_t& y,Double_t&z, AliHBTParticle*p)
170 Double_t sf = fR/p->Pt();//scaling factor for position transformation ->
171 //we move direction of string momentum but legth defined by r
174 z = gRandom->Uniform(-fL,fL);