#ifndef AliGenMUONLMR_h
#define AliGenMUONLMR_h
#include <TH1F.h>
#include <TH1D.h>
#include <TF1.h>
#include <TParticle.h>
#include <TLorentzVector.h>
#include "AliGenMC.h"
class AliGenMUONLMR : public AliGenMC {
public:
enum parttype_t {kPionLMR, kKaonLMR, kEtaLMR, kRhoLMR, kOmegaLMR, kPhiLMR, kEtaPrimeLMR};
enum CMSEnergies { kCMS2760GeV, kCMS7000GeV, kCMS8000GeV, kCMS5020GeVpPb, kCMS5020GeVPbp, kNCMSEnergies };
AliGenMUONLMR();
AliGenMUONLMR(AliGenMUONLMR &gen);
AliGenMUONLMR &operator=(const AliGenMUONLMR &gen);
~AliGenMUONLMR();
static Double_t PtDistr(Double_t *x, Double_t *par);
static Double_t YDistr(Double_t *x, Double_t *par);
virtual void SetPtParams(Int_t iproc, Double_t p1, Double_t p2, Double_t p3) {fPt[iproc]->SetParameters(p1,p2,p3);}
virtual void SetYParams(Int_t iproc, Double_t p1, Double_t p2, Double_t p3, Double_t ycm=0) {fY[iproc]->SetParameters(p1,p2,p3,ycm);}
virtual void Decay2Body(TParticle *mother);
virtual void DalitzDecay(TParticle *mother);
virtual void DecayPiK(TParticle *mother, Bool_t &hadDecayed);
virtual Double_t FormFactor(Double_t q2, Int_t decay);
virtual void Generate();
virtual TParticle* GetMuon(Int_t i) {return fMu[i];}
virtual void SetNMuMin(Int_t nmin) {fNMuMin = nmin;}
virtual void GenerateSingleProcess(Int_t whichproc) { fGenSingleProc = whichproc;}
virtual void SetScaleMultiplicity(Int_t ipart, Double_t scale) { fScaleMult[ipart] = scale; }
static Double_t RhoLineShapeNew(Double_t *, Double_t *);
virtual void FinishRun();
virtual TF1* GetRapidity(Int_t iproc) { return fY[iproc]; }
virtual TF1* GetPt(Int_t iproc) { return fPt[iproc]; }
void SetCMSEnergy(CMSEnergies energy);
virtual void SetCMSRapidity(Double_t ycm) { fYCM = ycm; }
private:
static const Int_t fgkNpart = 7;
Int_t fNMuMin;
CMSEnergies fCMSEnergy;
Int_t fGenSingleProc;
Double_t fYCM;
Int_t fPDG[7];
Double_t fScaleMult[7];
TF1 *fPt[7];
TF1 *fY[7];
TF1 *fMult[7];
TF1 *fDecay[2];
TH1F *fDalitz[3];
TF1 *fCosTheta;
TF1 *fRhoLineShape;
TParticle* fParticle[7];
TParticle* fMu[2];
TH1D *fHMultMu;
TH1D *fHNProc;
ClassDef(AliGenMUONLMR, 1)
};
#endif