#ifndef ALIPYTHIA6_H
#define ALIPYTHIA6_H
#include <TPythia6.h>
#include "AliPythiaBase.h"
class AliFastGlauber;
class AliQuenchingWeights;
class AliStack;
class AliPythia6 : public TPythia6, public AliPythiaBase
{
public:
virtual ~AliPythia6(){;}
virtual Int_t Version() {return (6);}
virtual Int_t CheckedLuComp(Int_t kf);
virtual void ProcInit
(Process_t process, Float_t energy, StrucFunc_t strucfunc, Int_t tune);
virtual void GenerateEvent() {Pyevnt();}
virtual void GenerateMIEvent() {Pyevnw();}
virtual void HadronizeEvent() {Pyexec();}
virtual Int_t GetNumberOfParticles() {return GetN();}
virtual void SetNumberOfParticles(Int_t i) {SetN(i);}
virtual void EditEventList(Int_t i) {Pyedit(i);}
virtual void PrintStatistics();
virtual void EventListing();
virtual Int_t GetParticles(TClonesArray *particles) {return ImportParticles(particles, "All");}
virtual void SetNuclei(Int_t a1, Int_t a2);
virtual void SetCollisionSystem(TString projectile, TString target) { fProjectile = projectile; fTarget = target; }
virtual void PrintParticles();
virtual void ResetDecayTable();
virtual void SetWeightPower(Double_t pow);
virtual void SetPtHardRange(Float_t ptmin, Float_t ptmax);
virtual void SetYHardRange(Float_t ymin, Float_t ymax);
virtual void SetFragmentation(Int_t flag);
virtual void SetInitialAndFinalStateRadiation(Int_t flag1, Int_t flag2);
virtual void SetIntrinsicKt(Float_t kt);
virtual void SwitchHFOff();
virtual void SetPycellParameters(Float_t etamax, Int_t neta, Int_t nphi,
Float_t thresh, Float_t etseed, Float_t minet, Float_t r);
virtual void ModifiedSplitting();
virtual void SwitchHadronisationOff();
virtual void SwitchHadronisationOn();
virtual void GetXandQ(Float_t& x1, Float_t& x2, Float_t& q);
virtual Float_t GetXSection();
virtual Int_t ProcessCode();
virtual Float_t GetPtHard();
virtual void SetDecayTable();
virtual void Pyevnw();
virtual void Pyjoin(Int_t& npart, Int_t* ipart);
virtual void Pycell(Int_t& nclus);
virtual void Pyclus(Int_t& nclus);
virtual void GetJet(Int_t i, Float_t& px, Float_t& py, Float_t& pz, Float_t& e);
virtual void LoadEvent(AliStack* stack, Int_t flag, Int_t reHadr);
virtual void Pyshow(Int_t ip1, Int_t ip2, Double_t qmax);
virtual void Pyshowq(Int_t ip1, Int_t ip2, Double_t qmax);
virtual void Pyrobo(Int_t imi, Int_t ima, Double_t the, Double_t phi, Double_t bex, Double_t bey, Double_t bez);
virtual void InitQuenching(Float_t bmin, Float_t bmax, Float_t k, Int_t iECMethod, Float_t zmax = 0.97, Int_t ngmax = 30);
virtual void SetPyquenParameters(Double_t t0, Double_t tau0, Int_t nf, Int_t iengl, Int_t iangl);
virtual void Pyquen(Double_t a, Int_t ibf, Double_t b);
virtual void Qpygin0();
virtual void GetQuenchingParameters(Double_t& xp, Double_t& yp, Double_t z[4]);
static AliPythia6* Instance();
virtual void Quench();
AliPythia6 & operator=(const AliPythia6 & rhs);
void Copy(TObject&) const;
protected:
Process_t fProcess;
Float_t fEcms;
StrucFunc_t fStrucFunc;
TString fProjectile;
TString fTarget;
Int_t fDefMDCY[501];
Int_t fDefMDME[2001];
Double_t fZQuench[4];
Double_t fXJet;
Double_t fYJet;
Int_t fNGmax;
Float_t fZmax;
AliFastGlauber* fGlauber;
AliQuenchingWeights* fQuenchingWeights;
static AliPythia6* fgAliPythia;
private:
AliPythia6();
AliPythia6(const AliPythia6& pythia);
void ConfigHeavyFlavor();
void AtlasTuning();
void AtlasTuningMC09();
ClassDef(AliPythia6,1)
};
#endif