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();
91 if (e->IsRandomized() == kFALSE) Randomize(e);
94 /*********************************************************************/
96 AliAOD* AliHBTPositionRandomizer::GetEventRec() const
98 // gets from fReader and randomizes current track event
101 Error("GetEventRec","Reader is null");
104 AliAOD *e = fReader->GetEventRec();
105 if (fRandomizeTracks) if (e->IsRandomized() == kFALSE) Randomize(e);
108 /*********************************************************************/
110 AliAOD* AliHBTPositionRandomizer::GetEventSim(Int_t n)
113 if (fReader == 0x0) return 0x0;
114 AliAOD *e = fReader->GetEventSim(n);
115 if (e->IsRandomized() == kFALSE) Randomize(e);
119 /*********************************************************************/
120 void AliHBTPositionRandomizer::Randomize(AliAOD* event) const
122 // randomizes postions of all particles in the event
123 static const Double_t kfmtocm = 1.e-13;
124 if (AliVAODParticle::GetDebug() > 5) Info("Randomize(AliAOD*)","");
125 if (event == 0x0) return;
127 for (Int_t i = 0; i < event->GetNumberOfParticles(); i++)
129 AliVAODParticle* p = event->GetParticle(i);
130 Double_t x,y,z,t=0.0;
131 fRandomizer->Randomize(x,y,z,p);
133 Double_t nx = x*kfmtocm;
134 Double_t ny = y*kfmtocm;
135 Double_t nz = z*kfmtocm;
136 Double_t nt = t*kfmtocm;
138 if (fAddToExistingPos)
145 p->SetProductionVertex(nx,ny,nz,nt);
147 event->SetRandomized();
149 /*********************************************************************/
151 void AliHBTPositionRandomizer::SetGaussianBall(Double_t r)
153 //Sets Gaussian Ball Model
154 SetGaussianBall(r,r,r);
156 /*********************************************************************/
158 void AliHBTPositionRandomizer::SetGaussianBall(Double_t rx, Double_t ry, Double_t rz)
160 //Sets Gaussian Ball Model
162 fRandomizer = new AliHBTRndmGaussBall(rx,ry,rz);
164 /*********************************************************************/
166 void AliHBTPositionRandomizer::SetCyllinderSurface(Double_t r, Double_t l)
168 //Sets Cylinder Surface Model
170 fRandomizer = new AliHBTRndmCyllSurf(r,l);
172 /*********************************************************************/
174 void AliHBTPositionRandomizer::SetEventVertex(Double_t x, Double_t y,Double_t z)
176 //sets event vertex position
181 /*********************************************************************/
182 //_____________________________________________________________________
183 ///////////////////////////////////////////////////////////////////////
185 // class AliHBTRndmGaussBall //
187 ///////////////////////////////////////////////////////////////////////
189 AliHBTRndmGaussBall::AliHBTRndmGaussBall():
196 /*********************************************************************/
198 AliHBTRndmGaussBall::AliHBTRndmGaussBall(Float_t r):
205 /*********************************************************************/
207 AliHBTRndmGaussBall::AliHBTRndmGaussBall(Float_t rx, Float_t ry, Float_t rz):
214 /*********************************************************************/
216 void AliHBTRndmGaussBall::Randomize(Double_t& x,Double_t& y,Double_t&z, AliVAODParticle*/*particle*/) const
218 //randomizez gauss for each coordinate separately
219 x = gRandom->Gaus(0.0,fRx);
220 y = gRandom->Gaus(0.0,fRy);
221 z = gRandom->Gaus(0.0,fRz);
223 /*********************************************************************/
224 //_____________________________________________________________________
225 ///////////////////////////////////////////////////////////////////////
227 // class AliHBTRndmGaussBall //
229 ///////////////////////////////////////////////////////////////////////
231 void AliHBTRndmCyllSurf::Randomize(Double_t& x,Double_t& y,Double_t&z, AliVAODParticle* particle) const
234 Double_t r = fR + gRandom->Gaus(0.0, 1.0);
235 Double_t sf = r/particle->Pt();//scaling factor for position transformation ->
236 //we move direction of string momentum but legth defined by r
237 x = sf*particle->Px();
238 y = sf*particle->Py();
239 z = gRandom->Uniform(-fL,fL);