1 #ifndef ALIHBTPOSITIONRANDOMIZER_H
2 #define ALIHBTPOSITIONRANDOMIZER_H
3 //___________________________________________________
4 ////////////////////////////////////////////////////////////////////////////////
6 // class AliHBTPositionRandomizer
8 // These class randomizes particle vertex positions
9 // Piotr.Skowronski@cern.ch
11 ////////////////////////////////////////////////////////////////////////////////
13 #include "AliReader.h"
17 class AliHBTPositionRandomizer: public AliReader
20 enum EModelTypes{kGausBall,kCylinder,kCylinderSurf,kEllipse};
21 AliHBTPositionRandomizer();
22 AliHBTPositionRandomizer(AliReader* reader);
23 AliHBTPositionRandomizer(const AliHBTPositionRandomizer& in);
25 virtual ~AliHBTPositionRandomizer();
27 AliHBTPositionRandomizer& operator=(const AliHBTPositionRandomizer& in);
29 Int_t Next(){return (fReader)?fReader->Next():1;}
30 void Rewind(){if(fReader) fReader->Rewind();}
32 Bool_t ReadsRec() const {return (fReader)?fReader->ReadsRec():kFALSE;}
33 Bool_t ReadsSim() const {return (fReader)?fReader->ReadsSim():kFALSE;}
35 AliAOD* GetEventSim() const ;
36 AliAOD* GetEventRec() const ;
38 AliAOD* GetEventSim(Int_t n);
39 AliAOD* GetEventRec(Int_t n){return (fReader)?fReader->GetEventRec(n):0x0;}
41 Int_t GetNumberOfSimEvents(){return (fReader)?fReader->GetNumberOfSimEvents():0;}
42 Int_t GetNumberOfRecEvents(){return (fReader)?fReader->GetNumberOfRecEvents():0;}
43 virtual TH1I* GetTrackCounter() const {return (fReader)?fReader->GetTrackCounter():0x0;}
44 virtual void WriteTrackCounter() const {if(fReader) fReader->WriteTrackCounter();}
46 void Randomize(AliAOD* event) const;
47 void SetEventVertex(Double_t x, Double_t y,Double_t z);
49 void SetGaussianBall(Double_t r);
50 void SetGaussianBall(Double_t rx, Double_t ry, Double_t rz);
51 void SetCyllinderSurface(Double_t r, Double_t l);
52 void SetEllipse(Double_t rmin, Double_t rmax);
54 void AddToPosition(Bool_t flag){fAddToExistingPos = flag;}
55 void RandomizeTracks(Bool_t flag){fRandomizeTracks = flag;}
59 void Randomize(Double_t& x,Double_t& y,Double_t&z,AliVAODParticle*p);
60 Int_t ReadNext(){return (fReader)?fReader->Next():1;}
63 AliReader* fReader; // Pointer to reader
64 AliHBTRndm* fRandomizer; // Pointer to class that performs randomization according to some model
66 Int_t fModel; //Defines what model is used
68 Bool_t fAddToExistingPos; //Determines if randomized position should be added to previous one, or overwrite old one
69 Bool_t fOnlyParticlesFromVertex; //Determines if randomization should be performed for particles from vertex
71 Bool_t fRandomizeTracks; //Determines if tracks should also be randimized
73 Double_t fVX; //vertex position
74 Double_t fVY; //vertex position
75 Double_t fVZ; //vertex position
77 ClassDef(AliHBTPositionRandomizer,1)
80 class AliHBTRndm: public TObject
84 virtual ~AliHBTRndm(){}
85 virtual void Randomize(Double_t& x,Double_t& y,Double_t&z, AliVAODParticle*p) const = 0;
86 ClassDef(AliHBTRndm,1)
89 class AliHBTRndmGaussBall: public AliHBTRndm
92 AliHBTRndmGaussBall();
93 AliHBTRndmGaussBall(Float_t r);
94 AliHBTRndmGaussBall(Float_t rx, Float_t ry, Float_t rz);
95 virtual ~AliHBTRndmGaussBall(){}
96 void Randomize(Double_t& x,Double_t& y,Double_t&z, AliVAODParticle*/*particle*/) const;
98 Float_t fRx; //Dispertion in x
99 Float_t fRy; //Dispertion in y
100 Float_t fRz; //Dispertion in z
101 ClassDef(AliHBTRndmGaussBall,1)
104 class AliHBTRndmCyllSurf: public AliHBTRndm
107 AliHBTRndmCyllSurf():fR(0.0){}
108 AliHBTRndmCyllSurf(Float_t r, Float_t l):fR(r),fL(l){}
109 virtual ~AliHBTRndmCyllSurf(){}
111 void Randomize(Double_t& x,Double_t& y,Double_t&z, AliVAODParticle* particle) const;
113 Float_t fR; //Redius of cylinder
114 Float_t fL; //Length of cylinder
116 ClassDef(AliHBTRndmCyllSurf,1)
119 class AliHBTRndmEllipse: public AliHBTRndm
122 AliHBTRndmEllipse():fRmin(0.),fRmax(0.){};
123 AliHBTRndmEllipse(Float_t rmin, Float_t rmax);
124 virtual ~AliHBTRndmEllipse(){}
126 void Randomize(Double_t& x,Double_t& y, Double_t& z, AliVAODParticle* particle) const;
128 Float_t fRmin; //Radius in x direction
129 Float_t fRmax; //Radius in y direction
131 ClassDef(AliHBTRndmEllipse,1)