#ifndef ALIGENEMCOCKTAIL_H
#define ALIGENEMCOCKTAIL_H
#include "AliGenCocktail.h"
#include "AliGenEMlib.h"
#include "AliPythia.h"
#include "AliDecayer.h"
#include "AliGenParam.h"
class AliGenCocktailEntry;
class AliGenEMCocktail : public AliGenCocktail
{
public:
AliGenEMCocktail();
enum GeneratorIndex_t { kPizero=0, kEta, kRho0, kOmega, kEtaprime, kPhi, kJpsi, kSigma0, kK0s, kDeltaPlPl, kDeltaPl, kDeltaMi, kDeltaZero, kRhoPl, kRhoMi, kK0star, kDirectRealGamma, kDirectVirtGamma, kGENs };
enum ParticleGenerator_t { kGenPizero = 0x00001, kGenEta = 0x00002, kGenRho0 = 0x00004, kGenOmega = 0x00008,
kGenEtaprime = 0x00010, kGenPhi = 0x000020, kGenJpsi = 0x000040,
kGenDirectRealGamma = 0x00100, kGenDirectVirtGamma = 0x00200, kGenSigma0 = 0x00400, kGenK0s = 0x00800,
kGenDeltaPlPl = 0x01000, kGenDeltaPl = 0x02000, kGenDeltaMi = 0x04000, kGenDeltaZero = 0x08000,
kGenRhoPl = 0x10000, kGenRhoMi = 0x20000, kGenK0star = 0x40000,
kGenHadrons = 0x100000, kGenGammas = 0x200000 };
virtual ~AliGenEMCocktail();
virtual void Init();
virtual void CreateCocktail();
virtual void Generate();
Float_t GetDecayMode() const { return fDecayMode ;}
Float_t GetWeightingMode() const { return fWeightingMode ;}
void SetDecayer(AliDecayer* const decayer) { fDecayer = decayer ;}
void SetDecayMode(Decay_t decay) { fDecayMode = decay ;}
void SetWeightingMode(Weighting_t weight) { fWeightingMode = weight ;}
void SetNPart(Int_t npart){ fNPart = npart; }
void SetPtParamPi0(AliGenEMlib::PtParamSetPi0_t PtSelect) { fPtSelectPi0 = PtSelect ;}
void SetPtParamEta(AliGenEMlib::PtParamSetEta_t PtSelect) { fPtSelectEta = PtSelect ;}
void SetPtParamOmega(AliGenEMlib::PtParamSetOmega_t PtSelect) { fPtSelectOmega = PtSelect ;}
void SetPtParamPhi(AliGenEMlib::PtParamSetPhi_t PtSelect) { fPtSelectPhi = PtSelect ;}
void SetCollisionSystem(AliGenEMlib::CollisionSystem_t col) { fCollisionSystem = col ;}
void SetCentrality(AliGenEMlib::Centrality_t cent) { fCentrality = cent ;}
void SetV2Systematic(AliGenEMlib::v2Sys_t v2sys) { fV2Systematic = v2sys ;}
void SetForceGammaConversion(Bool_t force=kTRUE) { fForceConv=force ;}
void SetHeaviestHadron(ParticleGenerator_t part);
void SelectMotherParticles(UInt_t part) { fSelectedParticles=part ;}
private:
AliGenEMCocktail(const AliGenEMCocktail &cocktail);
AliGenEMCocktail & operator=(const AliGenEMCocktail &cocktail);
void AddSource2Generator(Char_t *nameReso, AliGenParam* const genReso);
AliDecayer* fDecayer;
Decay_t fDecayMode;
Weighting_t fWeightingMode;
Int_t fNPart;
Double_t fYieldArray[kGENs];
AliGenEMlib::CollisionSystem_t fCollisionSystem;
AliGenEMlib::PtParamSetPi0_t fPtSelectPi0;
AliGenEMlib::PtParamSetEta_t fPtSelectEta;
AliGenEMlib::PtParamSetOmega_t fPtSelectOmega;
AliGenEMlib::PtParamSetPhi_t fPtSelectPhi;
AliGenEMlib::Centrality_t fCentrality;
AliGenEMlib::v2Sys_t fV2Systematic;
Bool_t fForceConv;
UInt_t fSelectedParticles;
ClassDef(AliGenEMCocktail,2)
};
#endif