1 #ifndef ALIVERTEXINGHFUTILS_H
2 #define ALIVERTEXINGHFUTILS_H
7 ///////////////////////////////////////////////////////////////////
9 // Class with functions useful for different D2H analyses //
10 // - event plane resolution //
11 // - <pt> calculation with side band subtraction //
12 // - tracklet multiplicity calculation //
13 // Origin: F.Prino, Torino, prino@to.infn.it //
15 ///////////////////////////////////////////////////////////////////
18 #include "AliAODTrack.h"
19 #include "AliAODRecoDecay.h"
20 #include "AliAODRecoDecayHF.h"
21 #include "AliAODRecoCascadeHF.h"
23 class AliAODMCParticle;
25 class AliGenEventHeader;
33 class AliVertexingHFUtils : public TObject{
35 AliVertexingHFUtils();
36 AliVertexingHFUtils(Int_t k);
37 virtual ~AliVertexingHFUtils() {};
39 // Significance calculator
40 static void ComputeSignificance(Double_t signal, Double_t errsignal, Double_t background, Double_t errbackground, Double_t &significance,Double_t &errsignificance);
42 // Functions for Event plane resolution
43 void SetK(Int_t k){fK=k;}
44 void SetSubEvResol(Double_t res){fSubRes=res;}
45 void SetSubEventHisto(const TH1F* hSub){
46 fSubRes=GetSubEvResol(hSub);
48 Int_t GetK() const {return fK;}
49 Double_t GetSubEvResol() const {return fSubRes;}
50 Double_t Pol(Double_t x) const {return Pol(x,fK);}
51 Double_t FindChi() const {return FindChi(fSubRes,fK);}
52 Double_t GetFullEvResol() const {return GetFullEvResol(fSubRes,fK);}
53 static Double_t FindChi(Double_t res, Int_t k=1);
54 static Double_t Pol(Double_t x, Int_t k);
55 static Double_t ResolK1(Double_t x);
56 static Double_t GetSubEvResol(const TH1F* hSubEvCorr){
57 if(hSubEvCorr) return TMath::Sqrt(hSubEvCorr->GetMean());
60 static Double_t GetSubEvResolLowLim(const TH1F* hSubEvCorr){
61 if(hSubEvCorr) return TMath::Sqrt(hSubEvCorr->GetMean()-hSubEvCorr->GetMeanError());
64 static Double_t GetSubEvResolHighLim(const TH1F* hSubEvCorr){
65 if(hSubEvCorr) return TMath::Sqrt(hSubEvCorr->GetMean()+hSubEvCorr->GetMeanError());
68 static Double_t GetFullEvResol(Double_t resSub, Int_t k=1);
69 static Double_t GetFullEvResol(const TH1F* hSubEvCorr, Int_t k=1);
70 static Double_t GetFullEvResolLowLim(const TH1F* hSubEvCorr, Int_t k=1);
71 static Double_t GetFullEvResolHighLim(const TH1F* hSubEvCorr, Int_t k=1);
72 static TString GetGenerator(Int_t label, AliAODMCHeader* header);
73 Bool_t IsTrackInjected(AliAODTrack *track,AliAODMCHeader *header,TClonesArray *arrayMC);
74 void GetTrackPrimaryGenerator(AliAODTrack *track,AliAODMCHeader *header,TClonesArray *arrayMC,TString &nameGen);
75 Bool_t IsCandidateInjected(AliAODRecoDecayHF *cand, AliAODMCHeader *header,TClonesArray *arrayMC);
76 Bool_t HasCascadeCandidateAnyDaughInjected(AliAODRecoCascadeHF *cand, AliAODMCHeader *header,TClonesArray *arrayMC);
77 // Functions for tracklet multiplcity calculation
78 void SetEtaRangeForTracklets(Double_t mineta, Double_t maxeta){
79 fMinEtaForTracklets=mineta;
80 fMaxEtaForTracklets=maxeta;
82 static Int_t GetNumberOfTrackletsInEtaRange(AliAODEvent* ev, Double_t mineta, Double_t maxeta);
83 Int_t GetNumberOfTrackletsInEtaRange(AliAODEvent* ev) const {
84 return GetNumberOfTrackletsInEtaRange(ev,fMinEtaForTracklets,fMaxEtaForTracklets);
86 static Int_t GetGeneratedMultiplicityInEtaRange(TClonesArray* arrayMC, Double_t mineta, Double_t maxeta);
87 static Int_t GetGeneratedPrimariesInEtaRange(TClonesArray* arrayMC, Double_t mineta, Double_t maxeta);
88 static Int_t GetGeneratedPhysicalPrimariesInEtaRange(TClonesArray* arrayMC, Double_t mineta, Double_t maxeta);
90 // Functions for computing average pt
91 static void AveragePt(Float_t& averagePt, Float_t& errorPt, Float_t ptmin, Float_t ptmax, TH2F* hMassD, Float_t massFromFit, Float_t sigmaFromFit, TF1* funcB2, Float_t sigmaRangeForSig=2.5, Float_t sigmaRangeForBkg=4.5, Float_t minMass=0., Float_t maxMass=3., Int_t rebin=1);
93 // Functions for computing true impact parameter of D meson
94 static Double_t GetTrueImpactParameterDzero(AliAODMCHeader *mcHeader, TClonesArray* arrayMC, AliAODMCParticle *partDp);
95 static Double_t GetTrueImpactParameterDplus(AliAODMCHeader *mcHeader, TClonesArray* arrayMC, AliAODMCParticle *partDp);
97 static Double_t GetCorrectedNtracklets(TProfile* estimatorAvg, Double_t uncorrectedNacc, Double_t vtxZ, Double_t refMult);
99 static Int_t CheckOrigin(TClonesArray* arrayMC, AliAODMCParticle *mcPart, Bool_t searchUpToQuark=kTRUE);
100 static Int_t CheckD0Decay(TClonesArray* arrayMC, AliAODMCParticle *mcPart, Int_t* arrayDauLab);
101 static Int_t CheckDplusDecay(TClonesArray* arrayMC, AliAODMCParticle *mcPart, Int_t* arrayDauLab);
105 Int_t fK; // ratio of measured harmonic to event plane harmonic
106 Double_t fSubRes; // sub-event resolution = sqrt(<cos[n(phiA-phiB)] >)
107 Double_t fMinEtaForTracklets; // min eta for counting tracklets
108 Double_t fMaxEtaForTracklets; // min eta for counting tracklets
110 ClassDef(AliVertexingHFUtils,0)