PAR: includes from previously enabled PARfiles
[u/mrichter/AliRoot.git] / TDPMjet / AliGenDPMjet.h
1 #ifndef ALIGENDPMJET_H
2 #define ALIGENDPMJET_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 // Generator using DPMJET as an external generator
7 // The main DPMJET options are accessable for the user through this interface.
8
9 #include "AliGenMC.h"
10 #include "TDPMjet.h"
11 #include "AliGenDPMjetEventHeader.h"
12 #include <TString.h>
13 #include <TArrayI.h>
14
15 class TDPMjet;
16 class TParticle;
17 class TClonesArray;
18 class AliGenEventHeader;
19 class AliStack;
20 class AliRunLoader;
21 class AliGenDPMjetEventHeader;
22 class AliIonPDGCodes;
23
24
25 class AliGenDPMjet : public AliGenMC
26 {
27
28  public:
29     AliGenDPMjet();
30     AliGenDPMjet(Int_t npart);
31     AliGenDPMjet(const AliGenDPMjet &Dpmjet);
32     virtual ~AliGenDPMjet(); 
33     virtual void    Generate();
34     virtual void    Init();
35     virtual void    FinishRun();
36     virtual void    SetEnergyCMS(Float_t energy = 14000.) {fEnergyCMS = energy;}
37     virtual void    SetProjectileBeamEnergy(Float_t benergy = 7000.) {fBeamEn = benergy;}
38     virtual void    SetImpactParameterRange(Float_t bmin=0., Float_t bmax=1.)
39                         {fMinImpactParam=bmin; fMaxImpactParam=bmax;}
40     virtual void    SetProcess(DpmProcess_t iproc) {fProcess = iproc;}
41     virtual void    SetCentral(Int_t icentr=-2) {fICentr = icentr;}
42     virtual void    SetFlavor(Int_t flag=0)           {fFlavor     = flag;}
43     virtual void    SetSelectAll(Int_t flag=0)        {fSelectAll  = flag;}
44     virtual void    SetSpectators(Int_t spects=1)     {fSpectators = spects;}
45     virtual void    SetBoostLHC(Int_t flag=0)         {fLHC        = flag;}
46     virtual void    SetPi0Decay(Int_t iPi0)  {fPi0Decay = iPi0;}
47     virtual void    SetDecayAll(Int_t iDec)  {fDecayAll = iDec;}
48     virtual void    SetIonPDGCodes();
49     virtual void    GetImpactParameterRange(Float_t& bmin, Float_t& bmax)
50                         {bmin = fMinImpactParam; bmax = fMaxImpactParam;}
51     virtual Int_t   GetSpectators()        {return fSpectators;}
52     virtual Int_t   GetFlavor()            {return fFlavor;}
53
54     virtual void    SetGenImpPar(Float_t bValue) {fGenImpPar=bValue;}
55     virtual Float_t GetGenImpPar() {return fGenImpPar;}
56
57     // Trigger on a single particle (not related to calorimeter trigger above)
58     virtual void    SetTriggerParticle(Int_t particle = 0, Float_t etamax = 0.9, Float_t ptmin = -1, Float_t ptmax = 1000) 
59         {fTriggerParticle = particle; fTriggerEta = etamax; fTriggerMinPt = ptmin; fTriggerMaxPt = ptmax;}
60
61     virtual void    SetTriggerChargedMultiplicity(Int_t multiplicity, 
62                                                   Float_t etamax = 0, Float_t ptmin = -1.) 
63     {fTriggerMultiplicity = multiplicity; fTriggerMultiplicityEta = etamax; 
64       fTriggerMultiplicityPtMin = ptmin;}
65
66     AliGenDPMjet &  operator=(const AliGenDPMjet & rhs);
67     //void     AddHeader(AliGenEventHeader* header);
68
69    void SetTuneForDiff(Bool_t a=kTRUE) {fkTuneForDiff=a;}
70
71    virtual void  SetFragmentProd(Bool_t val) {fFragmentation = val;}
72    virtual Bool_t ProvidesCollisionGeometry() const {return kTRUE;}
73
74  protected:
75    Bool_t SelectFlavor(Int_t pid);
76    void   MakeHeader();
77
78  protected:
79     Float_t       fBeamEn;         // beam energy
80     Float_t       fMinImpactParam; // minimum impact parameter
81     Float_t       fMaxImpactParam; // maximum impact parameter  
82     Int_t         fICentr;         // Flag to force central production
83     Int_t         fSelectAll;      // Flag to write the full event
84     Int_t         fFlavor;         // Selected particle flavor 4: charm+beauty 5: beauty
85     Int_t         fTrials;         // Number of trials
86     Int_t         fNprimaries;     // Number of generated particles
87     Int_t         fSpectators;     // put spectators on stack
88     Int_t         fSpecn;          // Num. of spectator neutrons
89     Int_t         fSpecp;          // Num. of spectator protons
90     TDPMjet      *fDPMjet;         // DPMjet
91     Int_t         fNoGammas;       // Don't write gammas if flag "on"
92     Int_t         fLHC;            // Assume LHC as lab frame
93     Int_t         fPi0Decay;       // Flag for pi0 decays
94     Int_t         fDecayAll;       // Flag to switch on long-lived particle decays
95     Float_t       fGenImpPar;      // GeneratedImpactParameter
96     DpmProcess_t  fProcess;        // Process type
97     Int_t   fTriggerParticle;       // Trigger on this particle ...
98     Float_t fTriggerEta;            // .. within |eta| < fTriggerEta
99     Float_t fTriggerMinPt;          // .. within pt > fTriggerMinPt
100     Float_t fTriggerMaxPt;          // .. within pt < fTriggerMaxPt
101     // Multiplicity Trigger
102     Int_t         fTriggerMultiplicity;      // Triggered multiplicity
103     Float_t       fTriggerMultiplicityEta;   // Triggered multiplicity eta cut
104     Float_t       fTriggerMultiplicityPtMin; // Triggered multiplicity min pt
105
106     Bool_t fkTuneForDiff;    // Phojet tune 
107     Int_t  fProcDiff;
108     
109     Bool_t fFragmentation; // Allows evaporation and fragments production
110     AliGenDPMjetEventHeader fHeader; // MC header
111
112  private:
113     // adjust the weight from kinematic cuts
114     void   AdjustWeights();
115     // check seleted daughters
116     Bool_t DaughtersSelection(TParticle* iparticle);
117     // check if stable
118     Bool_t Stable(TParticle*  particle);
119  
120    Bool_t CheckDiffraction();
121    Bool_t GetWeightsDiffraction(Double_t M, Double_t &Mmin, Double_t &Mmax, 
122                                                Double_t &wSD, Double_t &wDD, Double_t &wND);
123
124     ClassDef(AliGenDPMjet,6) // AliGenerator interface to DPMJET
125 };
126 #endif
127
128
129
130
131