5057608d59bd2f227084cd1f59439f802e9a2e89
[u/mrichter/AliRoot.git] / EVGEN / AliGenPythia.h
1 #ifndef ALIGENPYTHIA_H
2 #define ALIGENPYTHIA_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
9 #include "AliGenerator.h"
10 #include "AliPythia.h"
11 #include "AliDecayer.h"
12 #include <TArrayI.h>    
13
14 class AliPythia;
15 class TParticle;
16
17 class AliGenPythia : public AliGenerator
18 {
19  public:
20     AliGenPythia();
21     AliGenPythia(Int_t npart);
22     AliGenPythia(const AliGenPythia &Pythia);
23     virtual ~AliGenPythia();
24     virtual void    Generate();
25     virtual void    Init();
26     virtual void    SetEventListRange(Int_t eventFirst=-1, Int_t eventLast=-1);
27     // select process type
28     virtual void    SetProcess(Process_t proc = kPyCharm) {fProcess = proc;}
29     // select structure function
30     virtual void    SetStrucFunc(StrucFunc_t func = kGRV_HO) {fStrucFunc = func;}
31     // select pt of hard scattering 
32     virtual void    SetPtHard(Float_t ptmin = 0, Float_t ptmax = 1.e10)
33         {fPtHardMin = ptmin; fPtHardMax = ptmax; }
34     // set centre of mass energy
35     virtual void    SetEnergyCMS(Float_t energy = 5500) {fEnergyCMS = energy;}
36     // force decay type
37     virtual void    SetForceDecay(Decay_t decay = kSemiMuonic) {fForceDecay = decay;}
38     // treat protons as inside nuclei
39     virtual void    SetNuclei(Int_t a1, Int_t a2);
40     // get cross section of process
41     virtual Float_t GetXsection() {return fXsection;}      
42     // Check PDG code
43     virtual Int_t   CheckPDGCode(Int_t pdgcode);
44     virtual void    FinishRun();
45     
46     // Assignment Operator
47     AliGenPythia & operator=(const AliGenPythia & rhs);
48  protected:
49     Process_t   fProcess;       // Process type
50     StrucFunc_t fStrucFunc;     // Structure Function
51     Decay_t     fForceDecay;    // Decay channel  are forced
52     Float_t     fEnergyCMS;     // Centre of mass energy
53     Float_t     fKineBias;      // Bias from kinematic selection
54     Int_t       fTrials;        // Number of trials
55     TArrayI     fParentSelect;  // Parent particles to be selected 
56     TArrayI     fChildSelect;   // Decay products to be selected
57     Float_t     fXsection;      // Cross-section
58     AliPythia   *fPythia;       //! Pythia 
59     Float_t     fPtHardMin;     // lower pT-hard cut 
60     Float_t     fPtHardMax;     // higher pT-hard cut
61     Int_t       fNucA1;         // mass number nucleus side 1
62     Int_t       fNucA2;         // mass number nucleus side 2
63     Bool_t      fFullEvent;     // Write Full event if true
64     AliDecayer  *fDecayer;      // ! pointer to the decayer instance
65     Int_t       fDebugEventFirst; // First event to debug
66     Int_t       fDebugEventLast;  // Last  event to debug
67  private:
68     // check if particle is selected as parent particle
69     Bool_t ParentSelected(Int_t ip);
70     // check if particle is selected as child particle
71     Bool_t ChildSelected(Int_t ip);
72     // all kinematic selection cuts go here 
73     Bool_t KinematicSelection(TParticle *particle);
74     // adjust the weight from kinematic cuts
75     void   AdjustWeights();
76
77     ClassDef(AliGenPythia,1) // AliGenerator interface to Pythia
78 };
79 #endif
80
81
82
83
84