]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PYTHIA6/AliGenPythia.h
New methods in geometry, update geometry for 3x3 case
[u/mrichter/AliRoot.git] / PYTHIA6 / AliGenPythia.h
index c91fea1d8d877a1797453ae8f4a902158e3cd71b..5a21ddd206f746d0f628ec6db7063ad9a6f88229 100644 (file)
@@ -3,6 +3,7 @@
 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
  * See cxx source for full Copyright notice                               */
 
+
 /* $Id$ */
 
 //
@@ -21,6 +22,7 @@
 class AliPythia;
 class TParticle;
 class AliGenPythiaEventHeader;
+class AliGenEventHeader;
 class AliStack;
 class AliRunLoader;
 
@@ -44,7 +46,7 @@ class AliGenPythia : public AliGenMC
     // select process type
     virtual void    SetProcess(Process_t proc = kPyCharm) {fProcess = proc;}
     // select structure function
-    virtual void    SetStrucFunc(StrucFunc_t func = kGRVHO) {fStrucFunc = func;}
+    virtual void    SetStrucFunc(StrucFunc_t func =  kCTEQ5L) {fStrucFunc = func;}
     // select pt of hard scattering 
     virtual void    SetPtHard(Float_t ptmin = 0, Float_t ptmax = 1.e10)
        {fPtHardMin = ptmin; fPtHardMax = ptmax; }
@@ -55,6 +57,10 @@ class AliGenPythia : public AliGenMC
        {fGinit = iIn; fGfinal = iFin;}
     virtual void    SetPtKick(Float_t kt = 1.)
        {fPtKick = kt;}
+    // Use the Pythia 6.3 new multiple interations scenario
+    virtual void    UseNewMultipleInteractionsScenario() {fNewMIS = kTRUE;}
+    // Switch off heavy flavors
+    virtual void    SwitchHFOff() {fHFoff = kTRUE;}
     // set centre of mass energy
     virtual void    SetEnergyCMS(Float_t energy = 5500) {fEnergyCMS = energy;}
     // treat protons as inside nuclei
@@ -70,6 +76,10 @@ class AliGenPythia : public AliGenMC
        {fEtaMinGamma = etamin; fEtaMaxGamma = etamax;}
     virtual void    SetGammaPhiRange(Float_t phimin = 0., Float_t phimax = 360.)
        {fPhiMinGamma = TMath::Pi()*phimin/180.; fPhiMaxGamma = TMath::Pi()*phimax/180.;}
+
+    // Trigger on a particle
+    virtual void    SetTriggerParticle(Int_t particle = 0, Float_t etamax = 0.9) 
+       {fTriggerParticle = particle; fTriggerEta = etamax;}
     // Set option for feed down from higher family
     virtual void SetFeedDownHigherFamily(Bool_t opt) {
       fFeedDownOpt = opt;
@@ -91,11 +101,13 @@ class AliGenPythia : public AliGenMC
     virtual void SetQuench(Int_t flag = 0) {fQuench = flag;}
     virtual void SetHadronisation(Int_t flag = 1) {fHadronisation = flag;}
     virtual void SetReadFromFile(const Text_t *filname) {fFileName = filname;  fReadFromFile = 1;}    
-           
+    // Get interaction rate for pileup studies
+    virtual void    SetInteractionRate(Float_t rate,Float_t timewindow = 90.e-6);
+    virtual Float_t GetInteractionRate() const {return fInteractionRate;}
     // get cross section of process
     virtual Float_t GetXsection() const {return fXsection;}
     // get triggered jets
-    void GetJets(Int_t& njets, Int_t& ntrig, Float_t[4][10]);
+    void GetJets(Int_t& njets, Int_t& ntrig, Float_t jets[4][10]);
     void RecJetsUA1(Int_t& njets, Float_t jets[4][50]);
     void SetPycellParameters(Float_t etamax = 2., Int_t neta = 274, Int_t nphi = 432,
                             Float_t thresh = 0., Float_t etseed = 4.,
@@ -103,34 +115,40 @@ class AliGenPythia : public AliGenMC
     
     void LoadEvent(AliStack* stack, Int_t flag = 0, Int_t reHadr = 0);
     // Getters
-    virtual Process_t    GetProcess() {return fProcess;}
-    virtual StrucFunc_t  GetStrucFunc() {return fStrucFunc;}
-    virtual void         GetPtHard(Float_t& ptmin, Float_t& ptmax)
+    virtual Process_t    GetProcess() const {return fProcess;}
+    virtual StrucFunc_t  GetStrucFunc() const {return fStrucFunc;}
+    virtual void         GetPtHard(Float_t& ptmin, Float_t& ptmax) const
        {ptmin = fPtHardMin; ptmax = fPtHardMax;}
-    virtual Float_t      GetEnergyCMS() {return fEnergyCMS;}
-    virtual void         GetNuclei(Int_t&  a1, Int_t& a2)
+    virtual Float_t      GetEnergyCMS() const {return fEnergyCMS;}
+    virtual void         GetNuclei(Int_t&  a1, Int_t& a2) const
        {a1 = fAProjectile; a2 = fATarget;}
-    virtual void         GetJetEtRange(Float_t& etamin, Float_t& etamax)
+    virtual void         GetJetEtRange(Float_t& etamin, Float_t& etamax) const
        {etamin = fEtaMinJet; etamax = fEtaMaxJet;}
-    virtual void         GetJetPhiRange(Float_t& phimin, Float_t& phimax)
+    virtual void         GetJetPhiRange(Float_t& phimin, Float_t& phimax) const
        {phimin = fPhiMinJet*180./TMath::Pi(); phimax = fPhiMaxJet*180/TMath::Pi();}
-    virtual void         GetGammaEtaRange(Float_t& etamin, Float_t& etamax)
+    virtual void         GetGammaEtaRange(Float_t& etamin, Float_t& etamax) const
        {etamin = fEtaMinGamma; etamax = fEtaMaxGamma;}
-    virtual void         GetGammaPhiRange(Float_t& phimin, Float_t& phimax)
+    virtual void         GetGammaPhiRange(Float_t& phimin, Float_t& phimax) const
        {phimin = fPhiMinGamma*180./TMath::Pi(); phimax = fPhiMaxGamma*180./TMath::Pi();}
     //
     virtual void FinishRun();
     Bool_t CheckTrigger(TParticle* jet1, TParticle* jet2);
+
+    //Used in some processes to selected child properties
+    Bool_t CheckKinematicsOnChild();
     
+
     // Assignment Operator
     AliGenPythia & operator=(const AliGenPythia & rhs);
+    void     GetSubEventTime();
+    void     AddHeader(AliGenEventHeader* header);
+    
  protected:
     // adjust the weight from kinematic cuts
-    void   AdjustWeights();
-    Int_t  GenerateMB();
-    void   MakeHeader();    
-
-    
+    void     AdjustWeights() const;
+    Int_t    GenerateMB();
+    void     MakeHeader();    
+    void     GeneratePileup();
     Process_t   fProcess;           //Process type
     StrucFunc_t fStrucFunc;         //Structure Function
     Float_t     fEnergyCMS;         //Centre of mass energy
@@ -140,6 +158,11 @@ class AliGenPythia : public AliGenMC
     Float_t     fQ;                 //Mean Q
     Float_t     fX1;                //Mean x1
     Float_t     fX2;                //Mean x2
+    Float_t     fEventTime;         //Time of the subevent
+    Float_t     fInteractionRate;   //Interaction rate (set by user)
+    Float_t     fTimeWindow;        //Time window for pileup events (set by user)
+    Int_t       fCurSubEvent;       //Index of the current sub-event
+    TArrayF     *fEventsTime;       //Subevents time for pileup
     Int_t       fNev;               //Number of events 
     Int_t       fFlavorSelect;      //Heavy Flavor Selection
     Float_t     fXsection;          //Cross-section
@@ -182,10 +205,13 @@ class AliGenPythia : public AliGenMC
                                     // parents and their decays
     Bool_t fFeedDownOpt;            // Option to set feed down from higher
                                     // quark families (e.g. b->c)
-    Bool_t fFragmentation;          // Option to activate fragmentation by Pythia
-    Bool_t fSetNuclei;              // Flag indicating that SetNuclei has been called
+    Bool_t  fFragmentation;          // Option to activate fragmentation by Pythia
+    Bool_t  fSetNuclei;              // Flag indicating that SetNuclei has been called
+    Bool_t  fNewMIS;                 // Flag for the new multipple interactions scenario
+    Bool_t  fHFoff;                  // Flag for switching heafy flavor production off
+    Int_t   fTriggerParticle;        // Trigger on this particle ...
+    Float_t fTriggerEta;             // .. within |eta| < fTriggerEta
     //
-
     CountMode_t fCountMode;            // Options for counting when the event will be finished.
     AliGenPythiaEventHeader* fHeader;  //! Event header
     AliRunLoader*            fRL;      //! Run Loader