776d32886e617d7b7cded927790327851e7688d8
[u/mrichter/AliRoot.git] / EVGEN / AliGenSlowNucleons.h
1 #ifndef ALIGENSLOWNUCLEONS_H
2 #define ALIGENSLOWNUCLEONS_H
3 /* Copyright(c) 198-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7 //
8 //  Generator for slow nucleons in pA interactions. 
9 //  Source is modelled by a relativistic Maxwell distributions.
10 //  Original code by  Ferenc Sikler  <sikler@rmki.kfki.hu>
11 //  This class: andreas.morsch@cern.ch
12 //
13 #include "AliGenerator.h"
14 class AliSlowNucleonModel;
15 class TH2F;
16
17
18 class AliGenSlowNucleons : public AliGenerator
19 {
20 public:
21     AliGenSlowNucleons();
22     AliGenSlowNucleons(Int_t npart);
23     AliGenSlowNucleons(const AliGenSlowNucleons &sn);
24     virtual ~AliGenSlowNucleons();
25     virtual void Init();
26     virtual void FinishRun();
27     virtual void Generate();
28     virtual void SetPmax(Float_t pmax = 10.) {fPmax = pmax;}
29     virtual void SetNominalCmsEnergy(Float_t energy = 14000.) {fCMS = energy;}
30     virtual void SetTarget(Float_t a=208, Float_t z=82) {fATarget = a; fZTarget = z;}
31     virtual void SetCharge(Int_t c = 1) {fCharge = c;}
32     virtual void SetTemperature(Double_t t1 = 0.04, Double_t t2 = 0.004)
33         {fTemperatureG = t1; fTemperatureB = t2;}
34     virtual void SetBetaSource(Double_t b1 = 0.05, Double_t b2 = 0.)
35         {fBetaSourceG = b1; fBetaSourceB = b2;}
36     //
37     virtual void SetSlowNucleonModel(AliSlowNucleonModel* model) 
38         {fSlowNucleonModel = model;}
39     virtual Bool_t NeedsCollisionGeometry() const {return kTRUE;}
40     virtual void   SetCollisionGeometry(AliCollisionGeometry* geom)
41         {fCollisionGeometry = geom;}
42     virtual void   SetDebug(Int_t flag = 0) {fDebug = flag;}
43     virtual void   SetNumbersOfSlowNucleons(Int_t ngp, Int_t ngn, Int_t nbp, Int_t nbn)
44         {fNgp = ngp; fNgn = ngn; fNbp = nbp; fNbn = nbn;}
45     
46  protected:
47     void     GenerateSlow(Int_t charge, Double_t T, Double_t beta, Float_t* q);
48     Double_t Maxwell(Double_t m, Double_t p, Double_t t);
49     void     Lorentz(Double_t m, Double_t beta, Float_t* q);
50     void Copy(AliGenSlowNucleons&) const;
51     AliGenSlowNucleons & operator=(const AliGenSlowNucleons & rhs);
52  protected:
53     Float_t  fCMS;          // Center of mass energy
54     Float_t  fMomentum;     // Target nucleus momentum
55     Float_t  fBeta;         // Target nucleus beta
56     Float_t  fPmax;         // Maximum slow nucleon momentum
57     Float_t  fATarget;      // Target nucleus mass number
58     Float_t  fZTarget;      // Target nucleus charge number
59     Int_t    fCharge;       // Slow nucleon charge
60     Float_t  fTemperatureG; // Source Temperature for gray nucleons
61     Float_t  fBetaSourceG;  // Source beta for gray nucleons
62     Float_t  fTemperatureB; // Source Temperature for black nucleons
63     Float_t  fBetaSourceB;  // Source beta for black nucleons
64     Int_t    fNgp;          // Number of gray  protons
65     Int_t    fNgn;          // Number of gray  neutrons
66     Int_t    fNbp;          // Number of black protons
67     Int_t    fNbn;          // Number of black neutrons
68     Int_t    fDebug;        // Debug flag
69     TH2F*    fDebugHist1;   // Histogram for debugging
70     TH2F*    fDebugHist2;   // Histogram for debugging
71     
72     //
73     AliSlowNucleonModel* fSlowNucleonModel; // The slow nucleon model
74     ClassDef(AliGenSlowNucleons,1) // Slow Nucleon Generator
75 };
76 #endif
77
78
79
80
81
82