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);
60 void Randomize(Double_t& x,Double_t& y,Double_t&z, AliHBTParticle*p);
61 Int_t ReadNext(){return (fReader)?fReader->Next():1;}
64 AliHBTReader* fReader; // Pointer to reader
65 AliHBTRndm* fRandomizer; // Pointer to class that performs randomization according to some model
67 Int_t fModel; //Defines what model is used
69 Bool_t fAddToExistingPos; //Determines if randomized position should be added to previous one, or overwrite old one
70 Bool_t fOnlyParticlesFromVertex; //Determines if randomization should be performed for particles from vertex
72 Double_t fVX; //vertex position
73 Double_t fVY; //vertex position
74 Double_t fVZ; //vertex position
76 ClassDef(AliHBTPositionRandomizer,1)
79 class AliHBTRndm: public TObject
83 virtual ~AliHBTRndm(){}
84 virtual void Randomize(Double_t& x,Double_t& y,Double_t&z, AliHBTParticle*p) const = 0;
85 ClassDef(AliHBTRndm,1)
88 class AliHBTRndmGaussBall: public AliHBTRndm
91 AliHBTRndmGaussBall();
92 AliHBTRndmGaussBall(Float_t r);
93 AliHBTRndmGaussBall(Float_t rx, Float_t ry, Float_t rz);
94 virtual ~AliHBTRndmGaussBall(){}
95 void Randomize(Double_t& x,Double_t& y,Double_t&z, AliHBTParticle*/*particle*/) const;
97 Float_t fRx; //Dispertion in x
98 Float_t fRy; //Dispertion in y
99 Float_t fRz; //Dispertion in z
100 ClassDef(AliHBTRndmGaussBall,1)
103 class AliHBTRndmCyllSurf: public AliHBTRndm
106 AliHBTRndmCyllSurf():fR(0.0){}
107 AliHBTRndmCyllSurf(Float_t r, Float_t l):fR(r),fL(l){}
108 virtual ~AliHBTRndmCyllSurf(){}
110 void Randomize(Double_t& x,Double_t& y,Double_t&z, AliHBTParticle* particle) const;
112 Float_t fR; //Redius of cylinder
113 Float_t fL; //Length of cylinder
115 ClassDef(AliHBTRndmCyllSurf,1)