ROOT logo
#ifndef ALIGENACORDE_H
#define ALIGENACORDE_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

#include "AliGenerator.h"
#include "AliACORDEConstants.h"

class TClonesArray;
class TF1;

class AliGenACORDE : public AliGenerator {
 public:
  AliGenACORDE();
  AliGenACORDE(Int_t npart);
  virtual ~AliGenACORDE();

  virtual void Init();
  virtual void Generate();
  virtual void SetPart(Int_t part) {fIpart = part;}

  void SetMode(ECRMode mode) {fCRMode = mode;}
  const TString*  GetMode() const {return fCRModeName;}

  void SetZenithalAngleRange(Float_t min,Float_t max=0) {fZenithMin=min;fZenithMax=max;}
  void SetAzimuthalAngleRange(Float_t min, Float_t max=0) {fAzimuthMin=min;fAzimuthMax=max;}

  void SetGridRange(Int_t nx,Float_t xwidth, Int_t nz, Float_t zwidth);
  Float_t GetMomentumResolution() const {return fPResolution;}

  void SetMomentumDistrubutionFunction(TF1 *func) {fMomentumDist=func;}
  void SetZenithalDistributionFunction(TF1 *func) {fZenithDist = func;}
  void SetMomentumResolution(Float_t res=1.) {fPResolution=res;}

  Float_t GetMomentum() const;
  Float_t GetZenithAngle(Float_t mom) const;


  void SetNumberOfParticles(Int_t nParticles) {fNParticles = nParticles;}

  // The following methods are for testing pourpuses
  TF1* GetMomentumDistibution() const {return fMomentumDist;}
  TF1* GetUnfoldedDistribution() const {return fUnfoldedMomentumDist;}

  TClonesArray* GetArray() const {return fPDist;}

 protected:
  void InitApWeightFactors();
  void InitMomentumGeneration();
  void InitZenithalAngleGeneration();
  void GenerateOneMuonBundle();
  void GenerateOneSingleMuon(Bool_t withFlatMomentum=kFALSE);

 private:
  AliGenACORDE(const AliGenACORDE& gen);
  AliGenACORDE& operator= (const AliGenACORDE& gen);

  Int_t    fIpart;              //! Particle type.
  ECRMode  fCRMode;             //! Cosmic muons generation method flag
  TString* fCRModeName;         //! Cosmic muons generation mode name

  Float_t  fXwidth;             //! X width of the grid
  Int_t    fNx;                 //! Number of divisions in x
  Float_t  fZwidth;             //! Z widht of the  grid
  Int_t    fNz;                 //! Number of divisions in z
  Bool_t   fMuonGrid;           //! Flag for method (Muon-bundles) checkout

  Float_t  fZenithMin;          //! Minimum zenithal angle.
  Float_t  fZenithMax;          //! Maximum zenithal angle.

  Float_t  fAzimuthMin;         //! Minimum azimuthal angle.
  Float_t  fAzimuthMax;         //! Maximum azimuthal angle.

  Float_t  fPRange;             //! Cosmic muon momentum range width in GeVs.
  Float_t  fPResolution;        //! Momentum resolution in GeVs.

  TArrayF* fAp;                 //! a(p) correction factors for the ang. dist.

  TF1*     fMomentumDist;       //! Function to generate the momentum dist.
  TF1*     fUnfoldedMomentumDist; //!
  TF1*     fZenithDist;         //! Function to generate the zenith angle dist.

  TClonesArray* fPDist;         //! Array of fZenithDist, to be used by a(p).

  Int_t fNParticles;		//! Fixed number of particles per event

  ClassDef(AliGenACORDE, 1) // Generator for AliACORDE class
};

typedef AliGenACORDE AliGenCRT; // for backward compatibility

#endif // ALIGENACORDE_H
 AliGenACORDE.h:1
 AliGenACORDE.h:2
 AliGenACORDE.h:3
 AliGenACORDE.h:4
 AliGenACORDE.h:5
 AliGenACORDE.h:6
 AliGenACORDE.h:7
 AliGenACORDE.h:8
 AliGenACORDE.h:9
 AliGenACORDE.h:10
 AliGenACORDE.h:11
 AliGenACORDE.h:12
 AliGenACORDE.h:13
 AliGenACORDE.h:14
 AliGenACORDE.h:15
 AliGenACORDE.h:16
 AliGenACORDE.h:17
 AliGenACORDE.h:18
 AliGenACORDE.h:19
 AliGenACORDE.h:20
 AliGenACORDE.h:21
 AliGenACORDE.h:22
 AliGenACORDE.h:23
 AliGenACORDE.h:24
 AliGenACORDE.h:25
 AliGenACORDE.h:26
 AliGenACORDE.h:27
 AliGenACORDE.h:28
 AliGenACORDE.h:29
 AliGenACORDE.h:30
 AliGenACORDE.h:31
 AliGenACORDE.h:32
 AliGenACORDE.h:33
 AliGenACORDE.h:34
 AliGenACORDE.h:35
 AliGenACORDE.h:36
 AliGenACORDE.h:37
 AliGenACORDE.h:38
 AliGenACORDE.h:39
 AliGenACORDE.h:40
 AliGenACORDE.h:41
 AliGenACORDE.h:42
 AliGenACORDE.h:43
 AliGenACORDE.h:44
 AliGenACORDE.h:45
 AliGenACORDE.h:46
 AliGenACORDE.h:47
 AliGenACORDE.h:48
 AliGenACORDE.h:49
 AliGenACORDE.h:50
 AliGenACORDE.h:51
 AliGenACORDE.h:52
 AliGenACORDE.h:53
 AliGenACORDE.h:54
 AliGenACORDE.h:55
 AliGenACORDE.h:56
 AliGenACORDE.h:57
 AliGenACORDE.h:58
 AliGenACORDE.h:59
 AliGenACORDE.h:60
 AliGenACORDE.h:61
 AliGenACORDE.h:62
 AliGenACORDE.h:63
 AliGenACORDE.h:64
 AliGenACORDE.h:65
 AliGenACORDE.h:66
 AliGenACORDE.h:67
 AliGenACORDE.h:68
 AliGenACORDE.h:69
 AliGenACORDE.h:70
 AliGenACORDE.h:71
 AliGenACORDE.h:72
 AliGenACORDE.h:73
 AliGenACORDE.h:74
 AliGenACORDE.h:75
 AliGenACORDE.h:76
 AliGenACORDE.h:77
 AliGenACORDE.h:78
 AliGenACORDE.h:79
 AliGenACORDE.h:80
 AliGenACORDE.h:81
 AliGenACORDE.h:82
 AliGenACORDE.h:83
 AliGenACORDE.h:84
 AliGenACORDE.h:85
 AliGenACORDE.h:86
 AliGenACORDE.h:87
 AliGenACORDE.h:88
 AliGenACORDE.h:89
 AliGenACORDE.h:90
 AliGenACORDE.h:91
 AliGenACORDE.h:92
 AliGenACORDE.h:93
 AliGenACORDE.h:94