#ifndef ALIDXHFETOOLSMC_H
#define ALIDXHFETOOLSMC_H
#include "TObject.h"
#include <vector>
class AliVEvent;
class AliVParticle;
class TH1;
using std::vector;
class AliDxHFEToolsMC {
public:
AliDxHFEToolsMC(const char* options="");
virtual ~AliDxHFEToolsMC();
enum{
kPDGnone=0,
kPDGd=1,
kPDGu=2,
kPDGs=3,
kPDGc=4,
kPDGb=5,
kPDGelectron=11,
kPDGmuon=13,
kPDGgluon=21,
kPDGgamma=22,
kPDGpi0=111,
kPDGpion=211,
kPDGeta=221,
kPDGkaon=321,
kPDGD0=421,
kPDGJpsi=443,
kPDGproton=2212
};
enum {
kPDGLabelPositron,
kPDGLabelElectron,
kPDGLabelMuPlus,
kPDGLabelMuMinus,
kPDGLabelPiPlus,
kPDGLabelPiMinus,
kPDGLabelKPlus,
kPDGLabelKMinus,
kPDGLabelProton,
kPDGLabelAntiproton,
kPDGLabelOthers,
kNofPDGLabels
};
enum {
kPDGMotherLabelD,
kPDGMotherLabelU,
kPDGMotherLabelS,
kPDGMotherLabelC,
kPDGMotherLabelB,
kPDGMotherLabelGluon,
kPDGMotherLabelGamma,
kPDGMotherLabelPi0,
kPDGMotherLabelEta,
kPDGMotherLabelProton,
kPDGMotherLabelOthers,
kNofPDGMotherLabels
};
enum {
kMCFirst = 0,
kMCLast
};
enum {
kOriginNone=0,
kOriginDown,
kOriginUp,
kOriginStrange,
kOriginCharm,
kOriginBeauty,
kOriginGluon,
kOriginGluonCharm,
kOriginGluonBeauty,
kNrOrginMother
};
enum {
kGetOriginMother=0,
kGetFirstMother
};
int Init(const char* );
int InitMCParticles(const AliVEvent* pEvent);
TObjArray* GetMCArray() const {return fMCParticles;}
bool IsInitialized() const {return fMCParticles!=NULL;}
virtual void Clear(const char* option="");
bool MCFirst() const {return fSequence==kMCFirst;}
bool MCLast() const {return fSequence==kMCLast;}
int GetOriginMother() const {return fOriginMother;}
bool RejectByPDG(AliVParticle* p, bool doStatistics=true, int* pdgParticleResult=NULL);
bool RejectByPDG(AliVParticle* p, int* pdgParticleResult) {
return RejectByPDG(p, true, pdgParticleResult);
}
bool RejectByMotherPDG(AliVParticle* p, bool doStatistics=true);
int FindMotherPDG(AliVParticle* p, bool bReturnFirstMother=false);
int FindPdgOriginMother(AliVParticle* p,bool bReturnFirstMother=false);
void CheckOriginMother(int pdg);
Bool_t TestIfHFquark(int origin);
Bool_t TestMotherHFMeson(int pdg);
void SetMClabel(int mclab){fMClabel=mclab;}
bool RejectByPDG(int pdg, const vector<int> &list) const;
int GetNrMCParticles() const {return fNrMCParticles;}
int CheckMCParticle(AliVParticle* p);
int MapPDGLabel(int pdg) const;
int MapPDGMotherLabel(int pdg) const;
protected:
private:
AliDxHFEToolsMC(const AliDxHFEToolsMC&);
AliDxHFEToolsMC& operator=(const AliDxHFEToolsMC&);
TH1* CreateControlHistogram(const char* name,
const char* title,
int nBins,
const char** binLabels) const;
static const char* fgkPDGBinLabels[];
static const char* fgkPDGMotherBinLabels[];
static const char* fgkStatisticsBinLabels[];
int fSequence;
TObjArray* fMCParticles;
vector<int> fPDGs;
vector<int> fMotherPDGs;
TH1* fHistPDG;
TH1* fHistPDGMother;
int fOriginMother;
int fMClabel;
int fNrMCParticles;
bool fUseKine;
ClassDef(AliDxHFEToolsMC, 3);
};
#endif