Line data Source code
1 : #ifndef ALIGENACORDE_H
2 : #define ALIGENACORDE_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 "AliACORDEConstants.h"
10 :
11 : class TClonesArray;
12 : class TF1;
13 :
14 : class AliGenACORDE : public AliGenerator {
15 : public:
16 : AliGenACORDE();
17 : AliGenACORDE(Int_t npart);
18 : virtual ~AliGenACORDE();
19 :
20 : virtual void Init();
21 : virtual void Generate();
22 0 : virtual void SetPart(Int_t part) {fIpart = part;}
23 :
24 0 : void SetMode(ECRMode mode) {fCRMode = mode;}
25 0 : const TString* GetMode() const {return fCRModeName;}
26 :
27 0 : void SetZenithalAngleRange(Float_t min,Float_t max=0) {fZenithMin=min;fZenithMax=max;}
28 0 : void SetAzimuthalAngleRange(Float_t min, Float_t max=0) {fAzimuthMin=min;fAzimuthMax=max;}
29 :
30 : void SetGridRange(Int_t nx,Float_t xwidth, Int_t nz, Float_t zwidth);
31 0 : Float_t GetMomentumResolution() const {return fPResolution;}
32 :
33 0 : void SetMomentumDistrubutionFunction(TF1 *func) {fMomentumDist=func;}
34 0 : void SetZenithalDistributionFunction(TF1 *func) {fZenithDist = func;}
35 0 : void SetMomentumResolution(Float_t res=1.) {fPResolution=res;}
36 :
37 : Float_t GetMomentum() const;
38 : Float_t GetZenithAngle(Float_t mom) const;
39 :
40 :
41 0 : void SetNumberOfParticles(Int_t nParticles) {fNParticles = nParticles;}
42 :
43 : // The following methods are for testing pourpuses
44 0 : TF1* GetMomentumDistibution() const {return fMomentumDist;}
45 0 : TF1* GetUnfoldedDistribution() const {return fUnfoldedMomentumDist;}
46 :
47 0 : 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 : AliGenACORDE(const AliGenACORDE& gen);
58 : AliGenACORDE& operator= (const AliGenACORDE& gen);
59 :
60 : Int_t fIpart; //! Particle type.
61 : ECRMode fCRMode; //! Cosmic muons generation method flag
62 : TString* fCRModeName; //! Cosmic muons generation mode name
63 :
64 : Float_t fXwidth; //! X width of the grid
65 : Int_t fNx; //! Number of divisions in x
66 : Float_t fZwidth; //! Z widht of the grid
67 : Int_t fNz; //! Number of divisions in z
68 : Bool_t fMuonGrid; //! Flag for method (Muon-bundles) checkout
69 :
70 : Float_t fZenithMin; //! Minimum zenithal angle.
71 : Float_t fZenithMax; //! Maximum zenithal angle.
72 :
73 : Float_t fAzimuthMin; //! Minimum azimuthal angle.
74 : Float_t fAzimuthMax; //! Maximum azimuthal angle.
75 :
76 : Float_t fPRange; //! Cosmic muon momentum range width in GeVs.
77 : Float_t fPResolution; //! Momentum resolution in GeVs.
78 :
79 : TArrayF* fAp; //! a(p) correction factors for the ang. dist.
80 :
81 : TF1* fMomentumDist; //! Function to generate the momentum dist.
82 : TF1* fUnfoldedMomentumDist; //!
83 : TF1* fZenithDist; //! Function to generate the zenith angle dist.
84 :
85 : TClonesArray* fPDist; //! Array of fZenithDist, to be used by a(p).
86 :
87 : Int_t fNParticles; //! Fixed number of particles per event
88 :
89 12 : ClassDef(AliGenACORDE, 1) // Generator for AliACORDE class
90 : };
91 :
92 : typedef AliGenACORDE AliGenCRT; // for backward compatibility
93 :
94 : #endif // ALIGENACORDE_H
|