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()
84 // gets from fReader and randomizes current particle event
85 if (fReader == 0x0) return 0x0;
86 AliAOD *e = fReader->GetEventSim();
87 if (e->IsRandomized() == kFALSE) Randomize(e);
90 /*********************************************************************/
92 AliAOD* AliHBTPositionRandomizer::GetEventRec()
94 // gets from fReader and randomizes current track event
95 if (fReader == 0x0) return 0x0;
96 AliAOD *e = fReader->GetEventRec();
97 if (fRandomizeTracks) if (e->IsRandomized() == kFALSE) Randomize(e);
100 /*********************************************************************/
102 AliAOD* AliHBTPositionRandomizer::GetEventSim(Int_t n)
105 if (fReader == 0x0) return 0x0;
106 AliAOD *e = fReader->GetEventSim(n);
107 if (e->IsRandomized() == kFALSE) Randomize(e);
111 /*********************************************************************/
112 void AliHBTPositionRandomizer::Randomize(AliAOD* event) const
114 // randomizes postions of all particles in the event
115 static const Double_t kfmtocm = 1.e-13;
116 if (AliVAODParticle::GetDebug() > 5) Info("Randomize(AliAOD*)","");
117 if (event == 0x0) return;
119 for (Int_t i = 0; i < event->GetNumberOfParticles(); i++)
121 AliVAODParticle* p = event->GetParticle(i);
122 Double_t x,y,z,t=0.0;
123 fRandomizer->Randomize(x,y,z,p);
125 Double_t nx = x*kfmtocm;
126 Double_t ny = y*kfmtocm;
127 Double_t nz = z*kfmtocm;
128 Double_t nt = t*kfmtocm;
130 if (fAddToExistingPos)
137 p->SetProductionVertex(nx,ny,nz,nt);
139 event->SetRandomized();
141 /*********************************************************************/
143 void AliHBTPositionRandomizer::SetGaussianBall(Double_t r)
145 //Sets Gaussian Ball Model
146 SetGaussianBall(r,r,r);
148 /*********************************************************************/
150 void AliHBTPositionRandomizer::SetGaussianBall(Double_t rx, Double_t ry, Double_t rz)
152 //Sets Gaussian Ball Model
154 fRandomizer = new AliHBTRndmGaussBall(rx,ry,rz);
156 /*********************************************************************/
158 void AliHBTPositionRandomizer::SetCyllinderSurface(Double_t r, Double_t l)
160 //Sets Cylinder Surface Model
162 fRandomizer = new AliHBTRndmCyllSurf(r,l);
164 /*********************************************************************/
166 void AliHBTPositionRandomizer::SetEventVertex(Double_t x, Double_t y,Double_t z)
168 //sets event vertex position
173 /*********************************************************************/
174 //_____________________________________________________________________
175 ///////////////////////////////////////////////////////////////////////
177 // class AliHBTRndmGaussBall //
179 ///////////////////////////////////////////////////////////////////////
181 AliHBTRndmGaussBall::AliHBTRndmGaussBall():
188 /*********************************************************************/
190 AliHBTRndmGaussBall::AliHBTRndmGaussBall(Float_t r):
197 /*********************************************************************/
199 AliHBTRndmGaussBall::AliHBTRndmGaussBall(Float_t rx, Float_t ry, Float_t rz):
206 /*********************************************************************/
208 void AliHBTRndmGaussBall::Randomize(Double_t& x,Double_t& y,Double_t&z, AliVAODParticle*/*particle*/) const
210 //randomizez gauss for each coordinate separately
211 x = gRandom->Gaus(0.0,fRx);
212 y = gRandom->Gaus(0.0,fRy);
213 z = gRandom->Gaus(0.0,fRz);
215 /*********************************************************************/
216 //_____________________________________________________________________
217 ///////////////////////////////////////////////////////////////////////
219 // class AliHBTRndmGaussBall //
221 ///////////////////////////////////////////////////////////////////////
223 void AliHBTRndmCyllSurf::Randomize(Double_t& x,Double_t& y,Double_t&z, AliVAODParticle* particle) const
226 Double_t r = fR + gRandom->Gaus(0.0, 1.0);
227 Double_t sf = r/particle->Pt();//scaling factor for position transformation ->
228 //we move direction of string momentum but legth defined by r
229 x = sf*particle->Px();
230 y = sf*particle->Py();
231 z = gRandom->Uniform(-fL,fL);