]>
Commit | Line | Data |
---|---|---|
1 | #ifndef ALIGENCRT_H | |
2 | #define ALIGENCRT_H | |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | /* $Id$ */ | |
7 | ||
8 | #include "AliGenerator.h" | |
9 | #include "AliCRTConstants.h" | |
10 | ||
11 | class TClonesArray; | |
12 | class TF1; | |
13 | ||
14 | class AliGenCRT : public AliGenerator { | |
15 | public: | |
16 | AliGenCRT(); | |
17 | AliGenCRT(Int_t npart); | |
18 | AliGenCRT(const AliGenCRT& gen); | |
19 | virtual ~AliGenCRT(); | |
20 | ||
21 | AliGenCRT& operator= (const AliGenCRT& gen); | |
22 | ||
23 | virtual void Init(); | |
24 | virtual void Generate(); | |
25 | virtual void SetPart(Int_t part) {fIpart = part;} | |
26 | ||
27 | void SetMode(ECRMode mode) {fCRMode = mode;} | |
28 | const TString* GetMode() const {return fCRModeName;} | |
29 | ||
30 | void SetZenithalAngleRange(Float_t min,Float_t max=0) {fZenithMin=min;fZenithMax=max;} | |
31 | void SetAzimuthalAngleRange(Float_t min, Float_t max=0) {fAzimuthMin=min;fAzimuthMax=max;} | |
32 | ||
33 | void SetGridRange(Int_t nx,Float_t xwidth, Int_t nz, Float_t zwidth); | |
34 | const Float_t GetMomentumResolution() const {return fPResolution;} | |
35 | ||
36 | void SetMomentumDistrubutionFunction(TF1 *func) {fMomentumDist=func;} | |
37 | void SetZenithalDistributionFunction(TF1 *func) {fZenithDist = func;} | |
38 | void SetMomentumResolution(Float_t res=1.) {fPResolution=res;} | |
39 | ||
40 | const Float_t GetMomentum() const; | |
41 | const Float_t GetZenithAngle(Float_t mom) const; | |
42 | ||
43 | // The following methods are for testing pourpuses | |
44 | TF1* GetMomentumDistibution() const {return fMomentumDist;} | |
45 | TF1* GetUnfoldedDistribution() const {return fUnfoldedMomentumDist;} | |
46 | ||
47 | TClonesArray* GetArray() const {return fPDist;} | |
48 | ||
49 | protected: | |
50 | void InitApWeightFactors(); | |
51 | void InitMomentumGeneration(); | |
52 | void InitZenithalAngleGeneration(); | |
53 | void GenerateOneMuonBundle(); | |
54 | void GenerateOneSingleMuon(Bool_t withFlatMomentum=kFALSE); | |
55 | ||
56 | private: | |
57 | Int_t fIpart; //! Particle type. | |
58 | ECRMode fCRMode; //! Cosmic muons generation method flag | |
59 | TString* fCRModeName; //! Cosmic muons generation mode name | |
60 | ||
61 | Float_t fXwidth; //! X width of the grid | |
62 | Int_t fNx; //! Number of divisions in x | |
63 | Float_t fZwidth; //! Z widht of the grid | |
64 | Int_t fNz; //! Number of divisions in z | |
65 | Bool_t fMuonGrid; //! Flag for method (Muon-bundles) checkout | |
66 | ||
67 | Float_t fZenithMin; //! Minimum zenithal angle. | |
68 | Float_t fZenithMax; //! Maximum zenithal angle. | |
69 | ||
70 | Float_t fAzimuthMin; //! Minimum azimuthal angle. | |
71 | Float_t fAzimuthMax; //! Maximum azimuthal angle. | |
72 | ||
73 | Float_t fPRange; //! Cosmic muon momentum range width in GeVs. | |
74 | Float_t fPResolution; //! Momentum resolution in GeVs. | |
75 | ||
76 | TArrayF* fAp; //! a(p) correction factors for the ang. dist. | |
77 | ||
78 | TF1* fMomentumDist; //! Function to generate the momentum dist. | |
79 | TF1* fUnfoldedMomentumDist; //! | |
80 | TF1* fZenithDist; //! Function to generate the zenith angle dist. | |
81 | ||
82 | TClonesArray* fPDist; //! Array of fZenithDist, to be used by a(p). | |
83 | ||
84 | ClassDef(AliGenCRT, 1) // Generator for AliCRT class | |
85 | }; | |
86 | #endif // ALIGENCRT_H |