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};
+ 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, kGammaEta2Pi0=24, kB2M=25, kD2M=26, kEta2Pi0=27, kScdryM=28};
enum ProcessType {
kPairCreationFromq, kPairCreationFromg, kFlavourExitation, kGluonSplitting, kInitialPartonShower, kLightQuarkShower
};
TList *GetList() const { return fQAhistos; };
void PostAnalyze() const;
void CreatDefaultHistograms(TList * const qaList); // create default histograms
- void CreateHistograms(const Int_t kquark, Int_t icut, TString hnopt=""); // create histograms for mc qa analysis
+ void CreateHistograms(const Int_t kquark); // create histograms for mc qa analysis
void SetMCEvent(AliMCEvent* const mcEvent){fMCEvent = mcEvent;}
void SetGenEventHeader(AliGenEventHeader* const mcHeader){fMCHeader=mcHeader;} // set stack pointer
void SetMCArray(TClonesArray* const mcarry){fMCArray=mcarry;} // set mcarray pointer
void GetQuarkKine(TParticle *part, Int_t iTrack, const Int_t kquark); // get heavy quark kinematics distribution
void GetHadronKine(TParticle *part, const Int_t kquark); // get heavy hadron kinematics distribution
- void GetDecayedKine(TParticle *part, const Int_t kquark, const Int_t kdecayed, Int_t icut); // get decay electron kinematics distribution
- void GetDecayedKine(AliAODMCParticle *mcpart, const Int_t kquark, Int_t kdecayed, Int_t icut); // get decay electron kinematics for AOD
+ void GetDecayedKine(TParticle *part, const Int_t kquark, const Int_t kdecayed); // get decay electron kinematics distribution
+ void GetDecayedKine(AliAODMCParticle *mcpart, const Int_t kquark, Int_t kdecayed); // get decay electron kinematics for AOD
void GetMesonKine(); // get meson and its decay electron pt spectra
void EndOfEventAna(const Int_t kquark); // run analysis which should be done at the end of the event loop
- Int_t GetSource(const TParticle * const mcpart); // return source id
- Int_t GetElecSource(TParticle * const mcpart); // return electron source id
- Int_t GetSource(const AliAODMCParticle * const mcpart); // return electron source id for AOD
+ Int_t GetSource(const TParticle * const mcpart) const; // return source id
+ Int_t GetElecSource(const AliVParticle * const mctrack) const;
+ Int_t GetElecSource(TParticle * const mcpart) const; // return electron source id
+ Int_t GetElecSource(const AliAODMCParticle * const mcpart) const;
+ Int_t GetSource(const AliVParticle * const mcpart) const; // return electron source id for AOD
Double_t GetWeightFactor(AliMCParticle *mctrack, const Int_t iBgLevel); // return best/lower/upper weighting factor for electron's mother meson
+ Double_t GetWeightFactor(const AliAODMCParticle * const mcpart, const Int_t iBgLevel);
+ Int_t GetWeightCentralityBin(const Float_t percentile) const; //translate the centrality percentile into the centrality bin of the reference weighting histograms for electron background
+ void EnableDebugStreamer() { fIsDebugStreamerON = 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; };//centrality percentile
void SetPbPb() { fIsPbPb = kTRUE; };
void SetPP() { fIsPbPb = kFALSE; };
void SetPPMultiBin() { fIsppMultiBin = kFALSE; };
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); // check if the quark is produced from hard scattering
void ReportStrangeness(Int_t &motherID, Int_t &mothertype, Int_t &motherlabel); // report if the quark production process is unknown
static const Int_t fgkMaxGener=10; // ancester level wanted to be checked
static const Int_t fgkMaxIter=100; // number of iteration to find out matching particle
static const Int_t fgkqType=7; // number of particle type to be checked
+ static const Int_t fgkEtaRanges=3; // cuts for different eta ranges
struct AliHists{
TH1F *fPdgCode; // histogram to store particle pdg code
TH2F *feDistance; // distance between electron production point to mother particle
TH2F *fDeDistance; // distance between D electron production point to mother particle
+ TH2F *fPtCorrDinein; // pt correlation between e and direct D or B
+ TH2F *fPtCorrDineout; // pt correlation between e and direct D or B
+ TH2F *fPtCorrDoutein; // pt correlation between e and direct D or B
+ TH2F *fPtCorrDouteout; // pt correlation between e and direct D or B
+ TH2F *fPtCorrDpDinein; // pt correlation between e and direct D+
+ TH2F *fPtCorrDpDineout; // pt correlation between e and direct D+
+ TH2F *fPtCorrDpDoutein; // pt correlation between e and direct D+
+ TH2F *fPtCorrDpDouteout; // pt correlation between e and direct D+
+ TH2F *fPtCorrD0Dinein; // pt correlation between e and direct D0
+ TH2F *fPtCorrD0Dineout; // pt correlation between e and direct D0
+ TH2F *fPtCorrD0Doutein; // pt correlation between e and direct D0
+ TH2F *fPtCorrD0Douteout; // pt correlation between e and direct D0
+ TH2F *fPtCorrDrestDinein; // pt correlation between e and direct D rest
+ TH2F *fPtCorrDrestDineout; // pt correlation between e and direct D rest
+ TH2F *fPtCorrDrestDoutein; // pt correlation between e and direct D rest
+ TH2F *fPtCorrDrestDouteout; // pt correlation between e and direct D rest
+
+ TH2F *fEtaCorrD; // eta correlation between e and direct D
+ TH2F *fEtaCorrDp; // eta correlation between e and direct D
+ TH2F *fEtaCorrD0; // eta correlation between e and direct D
+ TH2F *fEtaCorrDrest; // eta correlation between e and direct D
+ TH2F *fEtaCorrGD; // eta correlation between e and direct D
+ TH2F *fEtaCorrGDp; // eta correlation between e and direct D
+ TH2F *fEtaCorrGD0; // eta correlation between e and direct D
+ TH2F *fEtaCorrGDrest; // eta correlation between e and direct D
+
+ TH2F *fEtaCorrB; // eta correlation between e and B
+ TH2F *fEtaCorrGB; // eta correlation between e and B
+ TH2F *fPtCorrBinein; // eta correlation between e and B
+ TH2F *fPtCorrBineout; // eta correlation between e and B
+ TH2F *fPtCorrBoutein; // eta correlation between e and B
+ TH2F *fPtCorrBouteout; // eta correlation between e and B
+
AliHistsComm()
: fNq()
, fProcessID()
, 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()
{
// default constructor
};
, 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)
{
// copy constructor
};
void FillList(TList *l) const;
};
- AliHists fHist[3][7][6]; // struct of histograms to store kinematics of given particles
+ AliHists fHist[3][7][6][11]; // struct of histograms to store kinematics of given particles
AliHistsComm fHistComm[2][6]; // struct of additional histograms of given particles
TH2F *fhD[9]; // D meson pt,Y spectra
Int_t fParentSelect[2][7]; // heavy hadron species
Double_t fElecBackgroundFactor[kBgLevels][kCentBins][kElecBgSpecies][kBgPtBins]; // Electron background factors
- Double_t fBinLimit[kBgPtBins+1]; // Electron background bins
+ Double_t fBinLimit[kBgPtBins+1]; // Electron background bins
private:
- Int_t fCentrality; // Centrality
- Bool_t fIsPbPb; // Analysis Type: pp or PbPb
- Bool_t fIsppMultiBin; // pp multiplicity bin analysis
+ Int_t fCentrality; // Centrality
+ Int_t fPerCentrality; // Centrality percentile
+ Bool_t fIsPbPb; // Analysis Type: pp or PbPb
+ Bool_t fIsppMultiBin; // pp multiplicity bin analysis
+ Int_t fContainerStep; // step the weighting factor called
+ Bool_t fIsDebugStreamerON; // check if the debugstreamer is on
+
+ Double_t fRecPt; //reconstructed pt
+ Double_t fRecEta; //reconstructed eta
+ Double_t fRecPhi; //reconstructed phi
+ Double_t fLyrhit; //its layer hit
+ Double_t fLyrstat; //its layer status
+
+ Double_t fHfeImpactR; //absolute impact parameter R
+ Double_t fHfeImpactnsigmaR; //absolute impact parameter sigma R
+
+ TTreeSRedirector *fTreeStream; //! TreeStream
ClassDef(AliHFEmcQA,1);
};