#ifndef ALIHFEMCQA_H
#define ALIHFEMCQA_H
#ifndef ROOT_TObject
#endif
class TH1F;
class TH2F;
class TList;
class TParticle;
class TString;
class AliMCEvent;
class AliGenEventHeader;
class AliMCParticle;
class AliAODMCParticle;
class AliHFEcollection;
class TTreeSRedirector;
class AliHFEmcQA: public TObject {
public:
enum heavyType {kCharm=4, kBeauty=5, kOthers=6, kElectronPDG=11};
enum qType {kQuark, kantiQuark, kHadron, keHadron, kDeHadron, kElectron, kElectron2nd};
enum SourceType {
kDirectCharm=1,
kDirectBeauty=2,
kBeautyCharm=3,
kGamma=4,
kPi0=5,
kElse=6,
kMisID=7,
kEta=8,
kOmega=9,
kPhi=10,
kEtaPrime=11,
kRho0=12,
kGammaPi0=13,
kGammaEta=14,
kGammaOmega=15,
kGammaPhi=16,
kGammaEtaPrime=17,
kGammaRho0=18,
kJpsi=19,
kB2Jpsi=20,
kKe3=21,
kGammaB2M=22,
kGammaD2M=23,
kGammaM2M=24,
kB2M=25,
kD2M=26,
kM2M=27,
kScdryM=28
};
enum ProcessType {
kPairCreationFromq, kPairCreationFromg, kFlavourExitation, kGluonSplitting, kInitialPartonShower, kLightQuarkShower
};
enum{
kBgPtBins = 44,
kElecBgSpecies = 6,
kCentBins = 11,
kBgLevels = 3
};
AliHFEmcQA();
AliHFEmcQA(const AliHFEmcQA &p);
AliHFEmcQA &operator=(const AliHFEmcQA &);
virtual ~AliHFEmcQA();
TList *GetList() const { return fQAhistos; };
void PostAnalyze() const;
void CreatDefaultHistograms(TList * const qaList);
void CreateHistograms(const Int_t kquark);
void SetMCEvent(AliMCEvent* const mcEvent){fMCEvent = mcEvent;}
void SetGenEventHeader(AliGenEventHeader* const mcHeader){fMCHeader=mcHeader;}
void SetMCArray(TClonesArray* const mcarry){fMCArray=mcarry;}
void Init();
void GetQuarkKine(TParticle *part, Int_t iTrack, const Int_t kquark);
void GetHadronKine(TParticle *part, const Int_t kquark);
void GetDecayedKine(TParticle *part, const Int_t kquark, const Int_t kdecayed);
void GetDecayedKine(AliAODMCParticle *mcpart, const Int_t kquark, Int_t kdecayed);
void GetMesonKine();
void EndOfEventAna(const Int_t kquark);
Int_t GetSource(const TParticle * const mcpart) const;
Int_t GetElecSource(const AliVParticle * const mctrack, Bool_t isElec) const;
Int_t GetElecSource(TParticle * const mcpart, Bool_t isElec) const;
Int_t GetElecSource(const AliAODMCParticle * const mcpart, Bool_t isElec) const;
Int_t GetSource(const AliVParticle * const mcpart) const;
Double_t GetWeightFactor(AliMCParticle *mctrack, const Int_t iBgLevel);
Double_t GetWeightFactor(const AliAODMCParticle * const mcpart, const Int_t iBgLevel);
Double_t GetWeightFactorForPrimaries(const AliAODMCParticle * const mcpart, const Int_t iBgLevel);
Int_t GetWeightCentralityBin(const Float_t percentile) const;
void EnableDebugStreamer() { fIsDebugStreamerON = kTRUE;};
void EnableGetWeightHist() { fGetWeightHist = kTRUE;};
void SetBackgroundWeightFactor(Double_t *elecBackgroundFactor, Double_t *binLimit);
void SetContainerStep(Int_t containerStep) { fContainerStep = containerStep;};
void SetHFEImpactParameters(Double_t hfeimpactR, Double_t hfeimpactnsigmaR) {fHfeImpactR = hfeimpactR; fHfeImpactnsigmaR = hfeimpactnsigmaR; };
void SetTrkKine(Double_t pt, Double_t eta, Double_t phi) {fRecPt = pt; fRecEta = eta; fRecPhi = phi;};
void SetITSInfo(Double_t ilyrhit, Double_t ilyrstat) { fLyrhit = ilyrhit; fLyrstat = ilyrstat;};
void SetCentrality(Int_t centrality) { fCentrality = centrality; };
void SetPercentrality(Int_t percentrality) { fPerCentrality = percentrality; };
void SetPbPb() { fIsPbPb = kTRUE; };
void SetPP() { fIsPbPb = kFALSE; };
void SetPPMultiBin() { fIsppMultiBin = kFALSE; };
Bool_t IsPbPb() const { return fIsPbPb; };
Bool_t IsPP() const { return !fIsPbPb; };
Bool_t IsPPMultiBin() const { return fIsppMultiBin; };
protected:
Int_t GetMother(const AliVParticle * const track) const;
void IdentifyMother(Int_t motherlabel, Int_t &motherpdg, Int_t &grandmotherlabel);
void HardScattering(const Int_t kquark, Int_t &motherID, Int_t &mothertype, Int_t &motherlabel);
void ReportStrangeness(Int_t &motherID, Int_t &mothertype, Int_t &motherlabel);
Bool_t IsFromInitialShower(Int_t inputmotherlabel, Int_t &motherID, Int_t &mothertype, Int_t &motherlabel);
Bool_t IsFromFinalParton(Int_t inputmotherlabel, Int_t &motherID, Int_t &mothertype, Int_t &motherlabel);
AliMCEvent* fMCEvent;
AliGenEventHeader* fMCHeader;
TClonesArray *fMCArray;
static const Int_t fgkGluon=21;
static const Int_t fgkMaxGener=10;
static const Int_t fgkMaxIter=100;
static const Int_t fgkqType=7;
static const Int_t fgkEtaRanges=3;
struct AliHists{
TH1F *fPdgCode;
TH1F *fPt;
TH1F *fY;
TH1F *fEta;
AliHists()
: fPdgCode()
, fPt()
, fY()
, fEta()
{
};
AliHists(const AliHists & p)
: fPdgCode(p.fPdgCode)
, fPt(p.fPt)
, fY(p.fY)
, fEta(p.fEta)
{
};
AliHists &operator=(const AliHists &)
{
return *this;
}
void FillList(TList *l) const;
};
struct AliHistsComm {
TH1F *fNq;
TH1F *fProcessID;
TH2F *fePtRatio;
TH2F *fPtCorr;
TH2F *fPtCorrDp;
TH2F *fPtCorrD0;
TH2F *fPtCorrDrest;
TH2F *fDePtRatio;
TH2F *feDistance;
TH2F *fDeDistance;
TH2F *fPtCorrDinein;
TH2F *fPtCorrDineout;
TH2F *fPtCorrDoutein;
TH2F *fPtCorrDouteout;
TH2F *fPtCorrDpDinein;
TH2F *fPtCorrDpDineout;
TH2F *fPtCorrDpDoutein;
TH2F *fPtCorrDpDouteout;
TH2F *fPtCorrD0Dinein;
TH2F *fPtCorrD0Dineout;
TH2F *fPtCorrD0Doutein;
TH2F *fPtCorrD0Douteout;
TH2F *fPtCorrDrestDinein;
TH2F *fPtCorrDrestDineout;
TH2F *fPtCorrDrestDoutein;
TH2F *fPtCorrDrestDouteout;
TH2F *fEtaCorrD;
TH2F *fEtaCorrDp;
TH2F *fEtaCorrD0;
TH2F *fEtaCorrDrest;
TH2F *fEtaCorrGD;
TH2F *fEtaCorrGDp;
TH2F *fEtaCorrGD0;
TH2F *fEtaCorrGDrest;
TH2F *fEtaCorrB;
TH2F *fEtaCorrGB;
TH2F *fPtCorrBinein;
TH2F *fPtCorrBineout;
TH2F *fPtCorrBoutein;
TH2F *fPtCorrBouteout;
AliHistsComm()
: fNq()
, fProcessID()
, fePtRatio()
, fPtCorr()
, fPtCorrDp()
, fPtCorrD0()
, fPtCorrDrest()
, fDePtRatio()
, feDistance()
, fDeDistance()
, fPtCorrDinein()
, fPtCorrDineout()
, fPtCorrDoutein()
, fPtCorrDouteout()
, fPtCorrDpDinein()
, fPtCorrDpDineout()
, fPtCorrDpDoutein()
, fPtCorrDpDouteout()
, fPtCorrD0Dinein()
, fPtCorrD0Dineout()
, fPtCorrD0Doutein()
, fPtCorrD0Douteout()
, fPtCorrDrestDinein()
, fPtCorrDrestDineout()
, fPtCorrDrestDoutein()
, fPtCorrDrestDouteout()
, fEtaCorrD()
, fEtaCorrDp()
, fEtaCorrD0()
, fEtaCorrDrest()
, fEtaCorrGD()
, fEtaCorrGDp()
, fEtaCorrGD0()
, fEtaCorrGDrest()
, fEtaCorrB()
, fEtaCorrGB()
, fPtCorrBinein()
, fPtCorrBineout()
, fPtCorrBoutein()
, fPtCorrBouteout()
{
};
AliHistsComm(const AliHistsComm & p)
: fNq(p.fNq)
, fProcessID(p.fProcessID)
, fePtRatio(p.fePtRatio)
, fPtCorr(p.fPtCorr)
, fPtCorrDp(p.fPtCorrDp)
, fPtCorrD0(p.fPtCorrD0)
, fPtCorrDrest(p.fPtCorrDrest)
, fDePtRatio(p.fDePtRatio)
, feDistance(p.feDistance)
, fDeDistance(p.fDeDistance)
, fPtCorrDinein(p.fPtCorrDinein)
, fPtCorrDineout(p.fPtCorrDineout)
, fPtCorrDoutein(p.fPtCorrDoutein)
, fPtCorrDouteout(p.fPtCorrDouteout)
, fPtCorrDpDinein(p.fPtCorrDpDinein)
, fPtCorrDpDineout(p.fPtCorrDpDineout)
, fPtCorrDpDoutein(p.fPtCorrDpDoutein)
, fPtCorrDpDouteout(p.fPtCorrDpDouteout)
, fPtCorrD0Dinein(p.fPtCorrD0Dinein)
, fPtCorrD0Dineout(p.fPtCorrD0Dineout)
, fPtCorrD0Doutein(p.fPtCorrD0Doutein)
, fPtCorrD0Douteout(p.fPtCorrD0Douteout)
, fPtCorrDrestDinein(p.fPtCorrDrestDinein)
, fPtCorrDrestDineout(p.fPtCorrDrestDineout)
, fPtCorrDrestDoutein(p.fPtCorrDrestDoutein)
, fPtCorrDrestDouteout(p.fPtCorrDrestDouteout)
, fEtaCorrD(p.fEtaCorrD)
, fEtaCorrDp(p.fEtaCorrDp)
, fEtaCorrD0(p.fEtaCorrD0)
, fEtaCorrDrest(p.fEtaCorrDrest)
, fEtaCorrGD(p.fEtaCorrGD)
, fEtaCorrGDp(p.fEtaCorrGDp)
, fEtaCorrGD0(p.fEtaCorrGD0)
, fEtaCorrGDrest(p.fEtaCorrGDrest)
, fEtaCorrB(p.fEtaCorrB)
, fEtaCorrGB(p.fEtaCorrGB)
, fPtCorrBinein(p.fPtCorrBinein)
, fPtCorrBineout(p.fPtCorrBineout)
, fPtCorrBoutein(p.fPtCorrBoutein)
, fPtCorrBouteout(p.fPtCorrBouteout)
{
};
AliHistsComm &operator=(const AliHistsComm &)
{
return *this;
}
void FillList(TList *l) const;
};
AliHists fHist[3][7][6][11];
AliHistsComm fHistComm[2][6];
TH2F *fhD[9];
TList *fQAhistos;
AliHFEcollection *fMCQACollection;
TParticle *fHeavyQuark[50];
Int_t fIsHeavy[2];
Int_t fNparents;
Int_t fParentSelect[2][7];
Double_t fElecBackgroundFactor[kBgLevels][kCentBins][kElecBgSpecies][kBgPtBins];
Double_t fBinLimit[kBgPtBins+1];
private:
Int_t fCentrality;
Int_t fPerCentrality;
Bool_t fIsPbPb;
Bool_t fIsppMultiBin;
Int_t fContainerStep;
Bool_t fIsDebugStreamerON;
Double_t fRecPt;
Double_t fRecEta;
Double_t fRecPhi;
Double_t fLyrhit;
Double_t fLyrstat;
Double_t fHfeImpactR;
Double_t fHfeImpactnsigmaR;
TTreeSRedirector *fTreeStream;
Bool_t fGetWeightHist;
ClassDef(AliHFEmcQA,1);
};
#endif