Derive from AliGenMC.
[u/mrichter/AliRoot.git] / EVGEN / AliGenHijing.h
index 23e4c89618681eeef4576329b324207a1fc480d9..8e6c5194c2601575ca50a78f51feff7f5026deb8 100644 (file)
@@ -5,16 +5,21 @@
 
 /* $Id$ */
 
 
 /* $Id$ */
 
+// Generator using HIJING as an external generator
+// The main HIJING options are accessable for the user through this interface.
+// andreas.morsch@cern.ch
 
 
-#include "AliGenerator.h"
-#include "GenTypeDefs.h"
-#include <THijing.h>
+#include "AliGenMC.h"
+#include <TString.h>
 #include <TArrayI.h>
 
 #include <TArrayI.h>
 
+class THijing;
 class TArrayI;
 class TParticle;
 class TArrayI;
 class TParticle;
+class TClonesArray;
+class TGraph;
 
 
-class AliGenHijing : public AliGenerator
+class AliGenHijing : public AliGenMC
 {
     enum {kNoTrigger, kHardProcesses, kDirectPhotons};
 
 {
     enum {kNoTrigger, kHardProcesses, kDirectPhotons};
 
@@ -27,12 +32,15 @@ class AliGenHijing : public AliGenerator
     virtual void    Init();
     // set centre of mass energy
     virtual void    SetEnergyCMS(Float_t energy=5500) {fEnergyCMS=energy;}
     virtual void    Init();
     // set centre of mass energy
     virtual void    SetEnergyCMS(Float_t energy=5500) {fEnergyCMS=energy;}
-    virtual void    SetReferenceFrame(char* frame="CMS     ") {fFrame=frame;}
-    virtual void    SetProjectile(char* proj="A       ", Int_t a=208, Int_t z=97)
+    virtual void    SetReferenceFrame(TString frame="CMS")
+       {fFrame=frame;}
+    virtual void    SetProjectile(TString proj="A",
+                                 Int_t a=208, Int_t z=82)
        {fProjectile = proj;
        fAProjectile = a;
        fZProjectile = z;}    
        {fProjectile = proj;
        fAProjectile = a;
        fZProjectile = z;}    
-    virtual void    SetTarget(char* tar="A       ", Int_t a=208, Int_t z=97)
+    virtual void    SetTarget(TString tar="A",
+                             Int_t a=208, Int_t z=82)
        {fTarget = tar;
        fATarget = a;
        fZTarget =z;}    
        {fTarget = tar;
        fATarget = a;
        fZTarget =z;}    
@@ -45,55 +53,57 @@ class AliGenHijing : public AliGenerator
     virtual void    SetShadowing(Int_t flag=1)        {fShadowing = flag;}
     virtual void    SetDecaysOff(Int_t flag=1)        {fDecaysOff = flag;}
     virtual void    SetTrigger(Int_t flag=kNoTrigger) {fTrigger   = flag;}
     virtual void    SetShadowing(Int_t flag=1)        {fShadowing = flag;}
     virtual void    SetDecaysOff(Int_t flag=1)        {fDecaysOff = flag;}
     virtual void    SetTrigger(Int_t flag=kNoTrigger) {fTrigger   = flag;}
+    virtual void    SetFlavor(Int_t flag=0)           {fFlavor    = flag;}    
     virtual void    SetEvaluate(Int_t flag=0)         {fEvaluate  = flag;}
     virtual void    SetSelectAll(Int_t flag=0)        {fSelectAll = flag;}    
     virtual void    SetEvaluate(Int_t flag=0)         {fEvaluate  = flag;}
     virtual void    SetSelectAll(Int_t flag=0)        {fSelectAll = flag;}    
-    AliGenHijing & operator=(const AliGenHijing & rhs);
+    virtual void    SetSpectators(Int_t spects=1)     {fSpectators = spects;}
+    AliGenHijing &  operator=(const AliGenHijing & rhs);
 // Physics Routines        
     virtual void EvaluateCrossSections();
 // Physics Routines        
     virtual void EvaluateCrossSections();
-    
-    
+    virtual TGraph* CrossSection()     {return fDsigmaDb;}
+    virtual TGraph* BinaryCollisions() {return fDnDb;}    
+ protected:
+    Bool_t SelectFlavor(Int_t pid);
+    void   MakeHeader();
+
  protected:
  protected:
-    char       *fFrame;         // Reference frame 
-    char       *fProjectile;    // Projectile
-    char       *fTarget;        // Target
-    Int_t       fAProjectile;   // Projectile A
-    Int_t       fZProjectile;   // Projectile Z
-    Int_t       fATarget;       // Target A
-    Int_t       fZTarget;       // Target Z
+    TString     fFrame;         // Reference frame 
+    TString     fProjectile;    // Projectile
+    TString     fTarget;        // Target
+    Int_t       fAProjectile;    // Projectile A
+    Int_t       fZProjectile;    // Projectile Z
+    Int_t       fATarget;        // Target A
+    Int_t       fZTarget;        // Target Z
     Float_t     fMinImpactParam; // minimum impact parameter
     Float_t     fMaxImpactParam; // maximum impact parameter   
     Float_t     fMinImpactParam; // minimum impact parameter
     Float_t     fMaxImpactParam; // maximum impact parameter   
-    Int_t       fKeep;          // Flag to keep full event information
-    Int_t       fQuench;        // Flag to switch on jet quenching
-    Int_t       fShadowing;     // Flag to switch on voclear effects on parton distribution function
-    Int_t       fDecaysOff;     // Flag to turn off decays of pi0, K_s, D, Lambda, sigma
-    Int_t       fTrigger;       // Trigger type
-    Int_t       fEvaluate;      // Evaluate total and partial cross-sections
-    Int_t       fSelectAll;     // Flag to write the full event
-    
-    Process_t   fProcess;       // Process type
-    StrucFunc_t fStrucFunc;     // Structure Function
-    Decay_t     fForceDecay;    // Decay channel  are forced
-    Float_t     fEnergyCMS;     // Centre of mass energy
-    Float_t     fKineBias;      // Bias from kinematic selection
-    Int_t       fTrials;        // Number of trials
-    TArrayI     fParentSelect;  // Parent particles to be selected 
-    TArrayI     fChildSelect;   // Decay products to be selected
-    Float_t     fXsection;      // Cross-section
-    THijing    *fHijing;        // Hijing
-    Float_t     fPtHardMin;     // lower pT-hard cut 
-    Float_t     fPtHardMax;     // higher pT-hard cut
-
+    Int_t       fKeep;           // Flag to keep full event information
+    Int_t       fQuench;         // Flag to switch on jet quenching
+    Int_t       fShadowing;      // Flag to switch on voclear effects on parton distribution function
+    Int_t       fDecaysOff;      // Flag to turn off decays of pi0, K_s, D, Lambda, sigma
+    Int_t       fTrigger;        // Trigger type
+    Int_t       fEvaluate;       // Evaluate total and partial cross-sections
+    Int_t       fSelectAll;      // Flag to write the full event
+    Int_t       fFlavor;         // Selected particle flavor 4: charm+beauty 5: beauty
+    Float_t     fEnergyCMS;      // Centre of mass energy
+    Float_t     fKineBias;       // Bias from kinematic selection
+    Int_t       fTrials;         // Number of trials
+    TArrayI     fParentSelect;   // Parent particles to be selected 
+    TArrayI     fChildSelect;    // Decay products to be selected
+    Float_t     fXsection;       // Cross-section
+    THijing    *fHijing;         // Hijing
+    Float_t     fPtHardMin;      // lower pT-hard cut 
+    Float_t     fPtHardMax;      // higher pT-hard cut
+    Int_t       fSpectators;     // put spectators on stack
+    TGraph*     fDsigmaDb;       // dSigma/db for the system
+    TGraph*     fDnDb;           // dNBinaryCollisions/db    
  private:
  private:
-    // check if particle is selected as parent particle
-    Bool_t ParentSelected(Int_t ip);
-    // check if particle is selected as child particle
-    Bool_t ChildSelected(Int_t ip);
-    // all kinematic selection cuts go here 
-    Bool_t KinematicSelection(TParticle *particle);
     // adjust the weight from kinematic cuts
     void   AdjustWeights();
     // check seleted daughters
     Bool_t DaughtersSelection(TParticle* iparticle, TClonesArray* particles);
     // adjust the weight from kinematic cuts
     void   AdjustWeights();
     // check seleted daughters
     Bool_t DaughtersSelection(TParticle* iparticle, TClonesArray* particles);
+    // check if stable
+    Bool_t Stable(TParticle*  particle);
+    
     ClassDef(AliGenHijing,1) // AliGenerator interface to Hijing
 };
 #endif
     ClassDef(AliGenHijing,1) // AliGenerator interface to Hijing
 };
 #endif