]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PYTHIA6/AliGenPythia.h
Added the possibility to do diagnostics histograms.
[u/mrichter/AliRoot.git] / PYTHIA6 / AliGenPythia.h
index 36f923294d422c0187fc1c8ca0a5781a83fac666..48eb0a2f78b527fc5bd75eb3b3df8ea2b3e3180e 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,17 @@ 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.;}
+
+   // Select jets with bremsstrahlung or pi0 going to PHOS or EMCAL
+    virtual void  SetBremssInCalo(Bool_t b)           {fBremssInCalo = b;}
+    virtual void  SetPi0InCalo       (Bool_t b)           {fPi0InCalo = b;}
+    virtual void  SetBremssPi0InPHOS(Bool_t b)    {fBremssPi0InPHOS = b;}
+    virtual void  SetBremssPi0InEMCAL(Bool_t b)  {fBremssPi0InEMCAL = b;}
+    virtual void  SetBremsPi0MinPt(Float_t pt)      {fBremssPi0MinPt=pt;}
+  
+    // 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 +108,14 @@ 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 +123,43 @@ 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)
-       {ptmin = fPtHardMin; ptmax = fPtHardMax = ptmax;}
-    virtual Float_t      GetEnergyCMS() {return fEnergyCMS;}
-    virtual void         GetNuclei(Int_t&  a1, Int_t& a2)
+    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() 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();}
     //
+    Bool_t IsInEMCAL(Float_t phi, Float_t eta);
+    Bool_t IsInPHOS(Float_t phi, Float_t eta);
+    //
     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 +169,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 +216,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
@@ -197,6 +234,20 @@ class AliGenPythia : public AliGenMC
     // fCountMode = kCountTrackabless --> Only particles flagged for tracking
     //                                     are counted
     //
+
+    Bool_t fBremssInCalo ; // Option ask for Bremsstrahlung in calorimeters acceptance
+    Bool_t fPi0InCalo ; // Option ask for Pi0 in calorimeters acceptance
+    Bool_t fBremssPi0InEMCAL ; //  Option ask for Bremss or Pi0 in calorimeters EMCAL acceptance
+    Bool_t fBremssPi0InPHOS ; //  Option ask for Bremss or Pi0 in calorimeters PHOS acceptance
+    Float_t fBremssPi0MinPt ; // Minimum momentum of Bremsstrahlung or Pi0 
+    //Calorimeters eta-phi acceptance 
+    Float_t fPHOSMinPhi ;
+    Float_t fPHOSMaxPhi ;
+    Float_t fPHOSEta ;
+    Float_t fEMCALMinPhi ;
+    Float_t fEMCALMaxPhi ;
+    Float_t fEMCALEta ;
+
     ClassDef(AliGenPythia,5) // AliGenerator interface to Pythia
 };
 #endif