Bug Corrected
[u/mrichter/AliRoot.git] / HBTAN / AliHBTPositionRandomizer.cxx
index 7fa85b490dcc5e9954e4a6899c890ecefb10cb06..5b72bc5117eda9d44a9285f4067c7dbf0f0b4e13 100644 (file)
@@ -1,8 +1,17 @@
 #include "AliHBTPositionRandomizer.h"
+//___________________________________________________
+////////////////////////////////////////////////////////////////////////////////
+// 
+// class AliHBTPositionRandomizer
+//
+// These class randomizes particle vertex positions
+// Piotr.Skowronski@cern.ch
+//
+////////////////////////////////////////////////////////////////////////////////
+
 #include <TRandom.h>
-#include "AliHBTRun.h"
-#include "AliHBTEvent.h"
-#include "AliHBTParticle.h"
+#include "AliAOD.h"
+#include "AliVAODParticle.h"
 
 
 ClassImp(AliHBTPositionRandomizer)
@@ -15,6 +24,7 @@ AliHBTPositionRandomizer::AliHBTPositionRandomizer():
  fModel(0),
  fAddToExistingPos(kFALSE),
  fOnlyParticlesFromVertex(kFALSE),
+ fRandomizeTracks(kFALSE),
  fVX(0.0),
  fVY(0.0),
  fVZ(0.0)
@@ -23,12 +33,13 @@ AliHBTPositionRandomizer::AliHBTPositionRandomizer():
 }
 /*********************************************************************/
 
-AliHBTPositionRandomizer::AliHBTPositionRandomizer(AliHBTReader* reader):
+AliHBTPositionRandomizer::AliHBTPositionRandomizer(AliReader* reader):
  fReader(reader),
  fRandomizer(new AliHBTRndmGaussBall(8.0)),
  fModel(0),
  fAddToExistingPos(kFALSE),
  fOnlyParticlesFromVertex(kFALSE),
+ fRandomizeTracks(kFALSE),
  fVX(0.0),
  fVY(0.0),
  fVZ(0.0)
@@ -37,73 +48,101 @@ AliHBTPositionRandomizer::AliHBTPositionRandomizer(AliHBTReader* reader):
 } 
 /*********************************************************************/
 
-AliHBTEvent* AliHBTPositionRandomizer::GetParticleEvent() 
+AliHBTPositionRandomizer::AliHBTPositionRandomizer(const AliHBTPositionRandomizer& in):
+ AliReader(in),
+ fReader(),
+ fRandomizer(0x0),
+ fModel(0),
+ fAddToExistingPos(kFALSE),
+ fOnlyParticlesFromVertex(kFALSE),
+ fRandomizeTracks(kFALSE),
+ fVX(0.0),
+ fVY(0.0),
+ fVZ(0.0)
 {
- // gets from fReader and randomizes current particle event
- if (fReader == 0x0) return 0x0;
- AliHBTEvent *e =  fReader->GetParticleEvent();
- if (e->IsRandomized() == kFALSE) Randomize(e);
- return e;
+  //cpy constructor
+  in.Copy(*this);
+}
+/*********************************************************************/
+AliHBTPositionRandomizer::~AliHBTPositionRandomizer()
+{
+  //dtor
+  delete fReader;
+  delete fRandomizer;
+}
+/*********************************************************************/
+AliHBTPositionRandomizer& AliHBTPositionRandomizer::operator=(const AliHBTPositionRandomizer& in)
+{
+  //assigment operator
+  in.Copy(*this);
+  return *this;
 }
 /*********************************************************************/
 
-AliHBTEvent* AliHBTPositionRandomizer::GetTrackEvent() 
+AliAOD* AliHBTPositionRandomizer::GetEventSim() const
 {
- // gets from fReader and randomizes current track event
- if (fReader == 0x0) return 0x0;
- AliHBTEvent *e =  fReader->GetTrackEvent();
+ // gets from fReader and randomizes current particle event
+ if (fReader == 0x0) 
+  {
+    Error("GetEventSim","Reader is null");
+    return 0x0;
+  } 
+ AliAOD *e =  fReader->GetEventSim();
  if (e->IsRandomized() == kFALSE) Randomize(e);
  return e;
 }
 /*********************************************************************/
 
-Int_t AliHBTPositionRandomizer::Read(AliHBTRun* particles, AliHBTRun *tracks)
+AliAOD* AliHBTPositionRandomizer::GetEventRec() const
 {
-  //Reads all available events and randomizes them
-  if (fReader == 0x0) return 1;
-  Info("Randomize(AliHBTRun*)","");
-  Int_t err = fReader->Read(particles,tracks);
-  if (err) return err;
-  Randomize(particles);
-  return 0;
+ // gets from fReader and randomizes current track event
+ if (fReader == 0x0) 
+  {
+    Error("GetEventRec","Reader is null");
+    return 0x0;
+  }  
+ AliAOD *e =  fReader->GetEventRec();
+ if (fRandomizeTracks) if (e->IsRandomized() == kFALSE) Randomize(e);
+ return e;
 }
 /*********************************************************************/
 
-AliHBTEvent* AliHBTPositionRandomizer::GetParticleEvent(Int_t n)
+AliAOD* AliHBTPositionRandomizer::GetEventSim(Int_t n)
 {
 //returns event n
  if (fReader == 0x0) return 0x0;
- AliHBTEvent *e =  fReader->GetParticleEvent(n);
+ AliAOD *e =  fReader->GetEventSim(n);
  if (e->IsRandomized() == kFALSE) Randomize(e);
  return e;
 }
 
 /*********************************************************************/
-
-void AliHBTPositionRandomizer::Randomize(AliHBTRun* run)
-{
-// randomizes postions of all particles in the run
-  if (run == 0x0) return;
-  Info("Randomize(AliHBTRun*)","");
-  for (Int_t i = 0; i < run->GetNumberOfEvents(); i++)
-   {
-     Randomize(run->GetEvent(i));
-   }
-}
-/*********************************************************************/
-void AliHBTPositionRandomizer::Randomize(AliHBTEvent* event)
+void AliHBTPositionRandomizer::Randomize(AliAOD* event) const
 {
 // randomizes postions of all particles in the event
-  static const Double_t fmtocm = 1.e-13;
-  Info("Randomize(AliHBTEvent*)","");
+  static const Double_t kfmtocm = 1.e-13;
+  if (AliVAODParticle::GetDebug() > 5) Info("Randomize(AliAOD*)","");
   if (event == 0x0) return;
 
   for (Int_t i = 0; i < event->GetNumberOfParticles(); i++)
    {
-     AliHBTParticle* p = event->GetParticle(i);
+     AliVAODParticle* p = event->GetParticle(i);
      Double_t x,y,z,t=0.0;
      fRandomizer->Randomize(x,y,z,p);
-     p->SetProductionVertex(x*fmtocm,y*fmtocm,z*fmtocm,t*fmtocm);
+     
+     Double_t nx = x*kfmtocm;
+     Double_t ny = y*kfmtocm;
+     Double_t nz = z*kfmtocm;
+     Double_t nt = t*kfmtocm;
+     
+     if (fAddToExistingPos)
+      {
+       nx += p->Vx();
+       ny += p->Vy();
+       nz += p->Vz();
+       nt += p->T();
+      }
+     p->SetProductionVertex(nx,ny,nz,nt); 
    }
   event->SetRandomized();
 }
@@ -111,12 +150,14 @@ void AliHBTPositionRandomizer::Randomize(AliHBTEvent* event)
 
 void AliHBTPositionRandomizer::SetGaussianBall(Double_t r)
 {
+ //Sets Gaussian Ball Model
   SetGaussianBall(r,r,r);
 }
 /*********************************************************************/
 
 void AliHBTPositionRandomizer::SetGaussianBall(Double_t rx, Double_t ry, Double_t rz)
 {
+ //Sets Gaussian Ball Model
   delete fRandomizer;
   fRandomizer = new AliHBTRndmGaussBall(rx,ry,rz);
 }
@@ -124,6 +165,7 @@ void AliHBTPositionRandomizer::SetGaussianBall(Double_t rx, Double_t ry, Double_
 
 void AliHBTPositionRandomizer::SetCyllinderSurface(Double_t r, Double_t l)
 {
+ //Sets Cylinder Surface Model
   delete fRandomizer;
   fRandomizer = new  AliHBTRndmCyllSurf(r,l);
 }
@@ -171,7 +213,7 @@ AliHBTRndmGaussBall::AliHBTRndmGaussBall(Float_t rx, Float_t ry, Float_t rz):
 }
 /*********************************************************************/
 
-void AliHBTRndmGaussBall::Randomize(Double_t& x,Double_t& y,Double_t&z, AliHBTParticle*/*particle*/)
+void AliHBTRndmGaussBall::Randomize(Double_t& x,Double_t& y,Double_t&z, AliVAODParticle*/*particle*/) const
 {
 //randomizez gauss for each coordinate separately
   x = gRandom->Gaus(0.0,fRx);
@@ -186,13 +228,13 @@ void AliHBTRndmGaussBall::Randomize(Double_t& x,Double_t& y,Double_t&z, AliHBTPa
 //                                                                   //
 ///////////////////////////////////////////////////////////////////////
 
-void AliHBTRndmCyllSurf::Randomize(Double_t& x,Double_t& y,Double_t&z, AliHBTParticle* particle)
+void AliHBTRndmCyllSurf::Randomize(Double_t& x,Double_t& y,Double_t&z, AliVAODParticle* particle) const
 {
+//Randomizes x,y,z
    Double_t r = fR + gRandom->Gaus(0.0, 1.0);
    Double_t sf = r/particle->Pt();//scaling factor for position transformation ->
                              //we move direction of string momentum but legth defined by r
    x = sf*particle->Px();
    y = sf*particle->Py();
    z = gRandom->Uniform(-fL,fL);
-  
 }