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 "AliHBTReader.h"
21 class AliHBTPositionRandomizer: public AliHBTReader
24 enum EModelTypes{kGausBall,kCylinder,kCylinderSurf};
25 AliHBTPositionRandomizer();
26 AliHBTPositionRandomizer(AliHBTReader* reader);
27 AliHBTPositionRandomizer(const AliHBTPositionRandomizer& in);
29 virtual ~AliHBTPositionRandomizer();
31 AliHBTPositionRandomizer& operator=(const AliHBTPositionRandomizer& in);
33 Int_t Next(){return (fReader)?fReader->Next():1;}
34 void Rewind(){if(fReader) fReader->Rewind();}
36 Bool_t ReadsTracks() const {return (fReader)?fReader->ReadsTracks():kFALSE;}
37 Bool_t ReadsParticles() const {return (fReader)?fReader->ReadsParticles():kFALSE;}
39 Int_t Read(AliHBTRun* particles, AliHBTRun *tracks);
41 AliHBTEvent* GetParticleEvent() ;
42 AliHBTEvent* GetTrackEvent() ;
44 AliHBTEvent* GetParticleEvent(Int_t n);
45 AliHBTEvent* GetTrackEvent(Int_t n){return (fReader)?fReader->GetTrackEvent(n):0x0;}
46 Int_t GetNumberOfPartEvents(){return (fReader)?fReader->GetNumberOfPartEvents():0;}
47 Int_t GetNumberOfTrackEvents(){return (fReader)?fReader->GetNumberOfTrackEvents():0;}
48 virtual TH1I* GetTrackCounter() const {return (fReader)?fReader->GetTrackCounter():0x0;}
49 virtual void WriteTrackCounter() const {if(fReader) fReader->WriteTrackCounter();}
51 void Randomize(AliHBTEvent* event) const;
52 void Randomize(AliHBTRun* run) const;
53 void SetEventVertex(Double_t x, Double_t y,Double_t z);
55 void SetGaussianBall(Double_t r);
56 void SetGaussianBall(Double_t rx, Double_t ry, Double_t rz);
57 void SetCyllinderSurface(Double_t r, Double_t l);
59 void AddToPosition(Bool_t flag){fAddToExistingPos = flag;}
60 void RandomizeTracks(Bool_t flag){fRandomizeTracks = flag;}
64 void Randomize(Double_t& x,Double_t& y,Double_t&z, AliHBTParticle*p);
65 Int_t ReadNext(){return (fReader)?fReader->Next():1;}
68 AliHBTReader* fReader; // Pointer to reader
69 AliHBTRndm* fRandomizer; // Pointer to class that performs randomization according to some model
71 Int_t fModel; //Defines what model is used
73 Bool_t fAddToExistingPos; //Determines if randomized position should be added to previous one, or overwrite old one
74 Bool_t fOnlyParticlesFromVertex; //Determines if randomization should be performed for particles from vertex
76 Bool_t fRandomizeTracks; //Determines if tracks should also be randimized
78 Double_t fVX; //vertex position
79 Double_t fVY; //vertex position
80 Double_t fVZ; //vertex position
82 ClassDef(AliHBTPositionRandomizer,1)
85 class AliHBTRndm: public TObject
89 virtual ~AliHBTRndm(){}
90 virtual void Randomize(Double_t& x,Double_t& y,Double_t&z, AliHBTParticle*p) const = 0;
91 ClassDef(AliHBTRndm,1)
94 class AliHBTRndmGaussBall: public AliHBTRndm
97 AliHBTRndmGaussBall();
98 AliHBTRndmGaussBall(Float_t r);
99 AliHBTRndmGaussBall(Float_t rx, Float_t ry, Float_t rz);
100 virtual ~AliHBTRndmGaussBall(){}
101 void Randomize(Double_t& x,Double_t& y,Double_t&z, AliHBTParticle*/*particle*/) const;
103 Float_t fRx; //Dispertion in x
104 Float_t fRy; //Dispertion in y
105 Float_t fRz; //Dispertion in z
106 ClassDef(AliHBTRndmGaussBall,1)
109 class AliHBTRndmCyllSurf: public AliHBTRndm
112 AliHBTRndmCyllSurf():fR(0.0){}
113 AliHBTRndmCyllSurf(Float_t r, Float_t l):fR(r),fL(l){}
114 virtual ~AliHBTRndmCyllSurf(){}
116 void Randomize(Double_t& x,Double_t& y,Double_t&z, AliHBTParticle* particle) const;
118 Float_t fR; //Redius of cylinder
119 Float_t fL; //Length of cylinder
121 ClassDef(AliHBTRndmCyllSurf,1)