First version, generation of cosmic muons on the surface
[u/mrichter/AliRoot.git] / CRT / AliGenCRT.h
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 <TF2.h>
9 #include <TClonesArray.h>
10
11 #include "AliGenerator.h"
12 #include "AliCRTConstants.h"
13
14 class AliGenCRT : public AliGenerator {
15
16 public:
17   AliGenCRT();
18   AliGenCRT(Int_t npart);
19   AliGenCRT(const AliGenCRT& gen);
20   AliGenCRT& operator= (const AliGenCRT& gen);
21   virtual ~AliGenCRT();
22
23   // Overloaded methods.
24   virtual void Init();
25   virtual void Generate();
26   virtual void SetPart(Int_t part) {fIpart = part;}
27
28   // Local methods.
29   void SetMode(ECRMode mode) {fCRMode = mode;}
30   const TString*  GetMode() const {return fCRModeName;}
31   
32   void SetZenithalAngleRange(Float_t min,Float_t max=0) {fZenithMin=min;fZenithMax=max;}
33   void SetAzimuthalAngleRange(Float_t min, Float_t max=0) {fAzimuthMin=min;fAzimuthMax=max;}
34   
35   void SetGridRange(Int_t nx,Float_t xwidth, Int_t nz, Float_t zwidth);
36   const Float_t GetMomentumResolution() const {return fPResolution;}
37   
38   void SetMomentumDistrubutionFunction(TF1 *func) {fMomentumDist=func;}
39   void SetZenithalDistributionFunction(TF1 *func) {fZenithDist = func;}
40   void SetMomentumResolution(Float_t res=1.) {fPResolution=res;}
41   
42   const Float_t GetMomentum() {return fMomentumDist->GetRandom();}
43   const Float_t GetZenithAngle(Float_t mom=0.);
44
45   // The following methods are for testing pourpuses
46   TF1* GetMomentumDistibution() {return fMomentumDist;}
47   TF1* GetUnfoldedDistribution() {return fUnfoldedMomentumDist;}
48
49 protected:
50   void InitApWeightFactors();
51   void InitMomentumGeneration();
52   void InitZenithalAngleGeneration();
53
54   Int_t    fIpart;              // Particle type.
55   ECRMode  fCRMode;             // Cosmic muons generation method flag
56   TString* fCRModeName;         // Cosmic muons generation mode name
57
58   Float_t  fXwidth;             // X width of the grid
59   Int_t    fNx;                 // Number of divisions in x
60   Float_t  fZwidth;             // Z widht of the  grid
61   Int_t    fNz;                 // Number of divisions in z
62   Bool_t   fMuonGrid;           // Flag for method (Muon-bundles) checkout
63
64   Float_t  fZenithMin;          // Minimum zenithal angle.
65   Float_t  fZenithMax;          // Maximum zenithal angle.
66
67   Float_t  fAzimuthMin;         // Minimum azimuthal angle.
68   Float_t  fAzimuthMax;         // Maximum azimuthal angle.
69
70   Float_t  fPRange;             // Cosmic muon momentum range width in GeVs.
71   Float_t  fPResolution;        // Momentum resolution in GeVs.
72
73   TArrayF* fAp;                 // a(p) weught factors for the ang. dist.
74
75   TF1*     fMomentumDist;       // Function to generate the momentum dist.
76   TF1*     fUnfoldedMomentumDist;
77   TF1*     fZenithDist;         // Function to generate the zenith angle dist.
78
79   TClonesArray* fPDist;         // Array of fZenithDist, to be used by a(p).
80
81 private:
82   ClassDef(AliGenCRT, 0) // Generator for AliCRT class
83 };
84 #endif // ALIGENCRT_H