1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 // QA class of Heavy Flavor quark and fragmeted/decayed particles
17 // -Check kinematics of Heavy Quarks/hadrons, and decayed leptons
19 // decay lepton kinematics w/wo acceptance
20 // heavy hadron decay length, electron pT fraction carried from decay
21 // -Check yield of Heavy Quarks/hadrons
22 // Number of produced heavy quark
23 // Number of produced hadron of given pdg code
30 //#include <TObject.h>
39 class AliGenEventHeader;
41 class AliAODMCParticle;
42 class AliHFEcollection;
43 class TTreeSRedirector;
45 //________________________________________________________________
46 class AliHFEmcQA: public TObject {
49 enum heavyType {kCharm=4, kBeauty=5, kOthers=6, kElectronPDG=11};
50 enum qType {kQuark, kantiQuark, kHadron, keHadron, kDeHadron, kElectron, kElectron2nd};
51 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};
53 kPairCreationFromq, kPairCreationFromg, kFlavourExitation, kGluonSplitting, kInitialPartonShower, kLightQuarkShower
64 AliHFEmcQA(const AliHFEmcQA &p); // copy constructor
65 AliHFEmcQA &operator=(const AliHFEmcQA &); // assignment operator
67 virtual ~AliHFEmcQA();
69 TList *GetList() const { return fQAhistos; };
70 void PostAnalyze() const;
71 void CreatDefaultHistograms(TList * const qaList); // create default histograms
72 void CreateHistograms(const Int_t kquark); // create histograms for mc qa analysis
73 void SetMCEvent(AliMCEvent* const mcEvent){fMCEvent = mcEvent;}
74 void SetGenEventHeader(AliGenEventHeader* const mcHeader){fMCHeader=mcHeader;} // set stack pointer
75 void SetMCArray(TClonesArray* const mcarry){fMCArray=mcarry;} // set mcarray pointer
78 void GetQuarkKine(TParticle *part, Int_t iTrack, const Int_t kquark); // get heavy quark kinematics distribution
79 void GetHadronKine(TParticle *part, const Int_t kquark); // get heavy hadron kinematics distribution
80 void GetDecayedKine(TParticle *part, const Int_t kquark, const Int_t kdecayed); // get decay electron kinematics distribution
81 void GetDecayedKine(AliAODMCParticle *mcpart, const Int_t kquark, Int_t kdecayed); // get decay electron kinematics for AOD
82 void GetMesonKine(); // get meson and its decay electron pt spectra
83 void EndOfEventAna(const Int_t kquark); // run analysis which should be done at the end of the event loop
84 Int_t GetSource(const TParticle * const mcpart); // return source id
85 Int_t GetElecSource(TParticle * const mcpart); // return electron source id
86 Int_t GetSource(const AliVParticle * const mcpart); // return electron source id for AOD
87 Double_t GetWeightFactor(AliMCParticle *mctrack, const Int_t iBgLevel); // return best/lower/upper weighting factor for electron's mother meson
88 Int_t GetWeightCentralityBin(const Float_t percentile) const; //translate the centrality percentile into the centrality bin of the reference weighting histograms for electron background
89 void EnableDebugStreamer() { fIsDebugStreamerON = kTRUE;};
91 void SetBackgroundWeightFactor(Double_t *elecBackgroundFactor, Double_t *binLimit);
92 void SetContainerStep(Int_t containerStep) { fContainerStep = containerStep;};
93 void SetHFEImpactParameters(Double_t hfeimpactR, Double_t hfeimpactnsigmaR) {fHfeImpactR = hfeimpactR; fHfeImpactnsigmaR = hfeimpactnsigmaR; };
94 void SetTrkKine(Double_t pt, Double_t eta, Double_t phi) {fRecPt = pt; fRecEta = eta; fRecPhi = phi;};
95 void SetITSInfo(Double_t ilyrhit, Double_t ilyrstat) { fLyrhit = ilyrhit; fLyrstat = ilyrstat;};
97 void SetCentrality(Int_t centrality) { fCentrality = centrality; };
98 void SetPercentrality(Int_t percentrality) { fPerCentrality = percentrality; };//centrality percentile
99 void SetPbPb() { fIsPbPb = kTRUE; };
100 void SetPP() { fIsPbPb = kFALSE; };
101 void SetPPMultiBin() { fIsppMultiBin = kFALSE; };
102 Bool_t IsPbPb() const { return fIsPbPb; };
103 Bool_t IsPP() const { return !fIsPbPb; };
104 Bool_t IsPPMultiBin() const { return fIsppMultiBin; };
107 Int_t GetMother(const AliVParticle * const track);
108 void IdentifyMother(Int_t motherlabel, Int_t &motherpdg, Int_t &grandmotherlabel); //
109 void HardScattering(const Int_t kquark, Int_t &motherID, Int_t &mothertype, Int_t &motherlabel); // check if the quark is produced from hard scattering
110 void ReportStrangeness(Int_t &motherID, Int_t &mothertype, Int_t &motherlabel); // report if the quark production process is unknown
111 Bool_t IsFromInitialShower(Int_t inputmotherlabel, Int_t &motherID, Int_t &mothertype, Int_t &motherlabel); // check if the quark is produced from initial parton shower
112 Bool_t IsFromFinalParton(Int_t inputmotherlabel, Int_t &motherID, Int_t &mothertype, Int_t &motherlabel); // check if the quark is produced from final parton shower
114 AliMCEvent* fMCEvent; // mcevent pointer
115 AliGenEventHeader* fMCHeader; // mcheader pointer
116 TClonesArray *fMCArray; // mc array pointer
118 static const Int_t fgkGluon=21; // gluon pdg code
119 static const Int_t fgkMaxGener=10; // ancester level wanted to be checked
120 static const Int_t fgkMaxIter=100; // number of iteration to find out matching particle
121 static const Int_t fgkqType=7; // number of particle type to be checked
122 static const Int_t fgkEtaRanges=3; // cuts for different eta ranges
125 TH1F *fPdgCode; // histogram to store particle pdg code
126 TH1F *fPt; // histogram to store pt
127 TH1F *fY; // histogram to store rapidity
128 TH1F *fEta; // histogram to store eta
136 // default constructor
138 AliHists(const AliHists & p)
139 : fPdgCode(p.fPdgCode)
146 AliHists &operator=(const AliHists &)
148 // assignment operator, not yet implemented
151 void FillList(TList *l) const;
153 struct AliHistsComm {
154 TH1F *fNq; // histogram to store number of quark
155 TH1F *fProcessID; // histogram to store process id
156 TH2F *fePtRatio; // fraction of electron pT from D or B hadron
157 TH2F *fPtCorr; // pt correlation between e and direct D or B
158 TH2F *fPtCorrDp; // pt correlation between e and direct D+
159 TH2F *fPtCorrD0; // pt correlation between e and direct D0
160 TH2F *fPtCorrDrest; // pt correlation between e and direct D rest
161 TH2F *fDePtRatio; // fraction of D electron pT from B hadron
162 TH2F *feDistance; // distance between electron production point to mother particle
163 TH2F *fDeDistance; // distance between D electron production point to mother particle
177 // default constructor
179 AliHistsComm(const AliHistsComm & p)
181 , fProcessID(p.fProcessID)
182 , fePtRatio(p.fePtRatio)
184 , fPtCorrDp(p.fPtCorrDp)
185 , fPtCorrD0(p.fPtCorrD0)
186 , fPtCorrDrest(p.fPtCorrDrest)
187 , fDePtRatio(p.fDePtRatio)
188 , feDistance(p.feDistance)
189 , fDeDistance(p.fDeDistance)
193 AliHistsComm &operator=(const AliHistsComm &)
195 // assignment operator, not yet implemented
198 void FillList(TList *l) const;
201 AliHists fHist[3][7][6][11]; // struct of histograms to store kinematics of given particles
202 AliHistsComm fHistComm[2][6]; // struct of additional histograms of given particles
203 TH2F *fhD[9]; // D meson pt,Y spectra
205 TList *fQAhistos; // Container for QA histos
206 AliHFEcollection *fMCQACollection; //! Tasks own QA collection
207 TParticle *fHeavyQuark[50]; //! store pointer of heavy flavour quark
208 Int_t fIsHeavy[2]; // count of heavy flavour
209 Int_t fNparents; // number of heavy hadrons to be considered
210 Int_t fParentSelect[2][7]; // heavy hadron species
212 Double_t fElecBackgroundFactor[kBgLevels][kCentBins][kElecBgSpecies][kBgPtBins]; // Electron background factors
213 Double_t fBinLimit[kBgPtBins+1]; // Electron background bins
216 Int_t fCentrality; // Centrality
217 Int_t fPerCentrality; // Centrality percentile
218 Bool_t fIsPbPb; // Analysis Type: pp or PbPb
219 Bool_t fIsppMultiBin; // pp multiplicity bin analysis
220 Int_t fContainerStep; // step the weighting factor called
221 Bool_t fIsDebugStreamerON; // check if the debugstreamer is on
223 Double_t fRecPt; //reconstructed pt
224 Double_t fRecEta; //reconstructed eta
225 Double_t fRecPhi; //reconstructed phi
226 Double_t fLyrhit; //its layer hit
227 Double_t fLyrstat; // its layer status
229 Double_t fHfeImpactR; // absolute impact parameter R
230 Double_t fHfeImpactnsigmaR; // absolute impact parameter sigma R
232 TTreeSRedirector *fTreeStream; //! TreeStream
234 ClassDef(AliHFEmcQA,1);