#ifndef ALIVERTEXINGHFUTILS_H
#define ALIVERTEXINGHFUTILS_H
#include "TObject.h"
#include "AliAODTrack.h"
#include "AliAODRecoDecay.h"
#include "AliAODRecoDecayHF.h"
#include "AliAODRecoCascadeHF.h"
class AliStack;
class AliAODMCParticle;
class AliAODMCHeader;
class AliGenEventHeader;
class AliAODEvent;
class TProfile;
class TParticle;
class TClonesArray;
class TH1F;
class TH2F;
class TF1;
class AliVertexingHFUtils : public TObject{
public:
AliVertexingHFUtils();
AliVertexingHFUtils(Int_t k);
virtual ~AliVertexingHFUtils() {};
static void ComputeSignificance(Double_t signal, Double_t errsignal, Double_t background, Double_t errbackground, Double_t &significance,Double_t &errsignificance);
void SetK(Int_t k){fK=k;}
void SetSubEvResol(Double_t res){fSubRes=res;}
void SetSubEventHisto(const TH1F* hSub){
fSubRes=GetSubEvResol(hSub);
}
Int_t GetK() const {return fK;}
Double_t GetSubEvResol() const {return fSubRes;}
Double_t Pol(Double_t x) const {return Pol(x,fK);}
Double_t FindChi() const {return FindChi(fSubRes,fK);}
Double_t GetFullEvResol() const {return GetFullEvResol(fSubRes,fK);}
static Double_t FindChi(Double_t res, Int_t k=1);
static Double_t Pol(Double_t x, Int_t k);
static Double_t ResolK1(Double_t x);
static Double_t GetSubEvResol(const TH1F* hSubEvCorr){
if(hSubEvCorr) return TMath::Sqrt(hSubEvCorr->GetMean());
else return 1.;
}
static Double_t GetSubEvResolLowLim(const TH1F* hSubEvCorr){
if(hSubEvCorr) return TMath::Sqrt(hSubEvCorr->GetMean()-hSubEvCorr->GetMeanError());
else return 1.;
}
static Double_t GetSubEvResolHighLim(const TH1F* hSubEvCorr){
if(hSubEvCorr) return TMath::Sqrt(hSubEvCorr->GetMean()+hSubEvCorr->GetMeanError());
else return 1.;
}
static Double_t GetFullEvResol(Double_t resSub, Int_t k=1);
static Double_t GetFullEvResol(const TH1F* hSubEvCorr, Int_t k=1);
static Double_t GetFullEvResolLowLim(const TH1F* hSubEvCorr, Int_t k=1);
static Double_t GetFullEvResolHighLim(const TH1F* hSubEvCorr, Int_t k=1);
static TString GetGenerator(Int_t label, AliAODMCHeader* header);
Bool_t IsTrackInjected(AliAODTrack *track,AliAODMCHeader *header,TClonesArray *arrayMC);
void GetTrackPrimaryGenerator(AliAODTrack *track,AliAODMCHeader *header,TClonesArray *arrayMC,TString &nameGen);
Bool_t IsCandidateInjected(AliAODRecoDecayHF *cand, AliAODMCHeader *header,TClonesArray *arrayMC);
Bool_t HasCascadeCandidateAnyDaughInjected(AliAODRecoCascadeHF *cand, AliAODMCHeader *header,TClonesArray *arrayMC);
void SetEtaRangeForTracklets(Double_t mineta, Double_t maxeta){
fMinEtaForTracklets=mineta;
fMaxEtaForTracklets=maxeta;
}
static Int_t GetNumberOfTrackletsInEtaRange(AliAODEvent* ev, Double_t mineta, Double_t maxeta);
Int_t GetNumberOfTrackletsInEtaRange(AliAODEvent* ev) const {
return GetNumberOfTrackletsInEtaRange(ev,fMinEtaForTracklets,fMaxEtaForTracklets);
}
static Int_t GetGeneratedMultiplicityInEtaRange(TClonesArray* arrayMC, Double_t mineta, Double_t maxeta);
static Int_t GetGeneratedPrimariesInEtaRange(TClonesArray* arrayMC, Double_t mineta, Double_t maxeta);
static Int_t GetGeneratedPhysicalPrimariesInEtaRange(TClonesArray* arrayMC, Double_t mineta, Double_t maxeta);
static Double_t GetVZEROAEqualizedMultiplicity(AliAODEvent* ev);
static Double_t GetVZEROCEqualizedMultiplicity(AliAODEvent* ev);
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);
static Bool_t CheckT0TriggerFired(AliAODEvent* aodEv);
static Double_t GetTrueImpactParameterDzero(AliAODMCHeader *mcHeader, TClonesArray* arrayMC, AliAODMCParticle *partDp);
static Double_t GetTrueImpactParameterDplus(AliAODMCHeader *mcHeader, TClonesArray* arrayMC, AliAODMCParticle *partDp);
static Double_t GetCorrectedNtracklets(TProfile* estimatorAvg, Double_t uncorrectedNacc, Double_t vtxZ, Double_t refMult);
static Int_t CheckOrigin(TClonesArray* arrayMC, AliAODMCParticle *mcPart, Bool_t searchUpToQuark=kTRUE);
static Int_t CheckOrigin(AliStack* stack, TParticle *mcPart, Bool_t searchUpToQuark=kTRUE);
static Int_t CheckD0Decay(AliStack* stack, Int_t label, Int_t* arrayDauLab);
static Int_t CheckD0Decay(TClonesArray* arrayMC, AliAODMCParticle *mcPart, Int_t* arrayDauLab);
static Int_t CheckDplusDecay(AliStack* stack, Int_t label, Int_t* arrayDauLab);
static Int_t CheckDplusDecay(TClonesArray* arrayMC, AliAODMCParticle *mcPart, Int_t* arrayDauLab);
static Int_t CheckDplusKKpiDecay(AliStack* stack, Int_t label, Int_t* arrayDauLab);
static Int_t CheckDplusK0spiDecay(AliStack* stack, Int_t label, Int_t* arrayDauLab);
static Int_t CheckDsDecay(AliStack* stack, Int_t label, Int_t* arrayDauLab);
static Int_t CheckDsDecay(TClonesArray* arrayMC, AliAODMCParticle *mcPart, Int_t* arrayDauLab);
static Int_t CheckDsK0sKDecay(AliStack* stack, Int_t label, Int_t* arrayDauLab);
static Int_t CheckDstarDecay(AliStack* stack, Int_t label, Int_t* arrayDauLab);
static Int_t CheckDstarDecay(TClonesArray* arrayMC, AliAODMCParticle *mcPart, Int_t* arrayDauLab);
static Int_t CheckLcpKpiDecay(AliStack* stack, Int_t label, Int_t* arrayDauLab);
static Int_t CheckLcV0bachelorDecay(AliStack* stack, Int_t label, Int_t* arrayDauLab);
private:
Int_t fK;
Double_t fSubRes;
Double_t fMinEtaForTracklets;
Double_t fMaxEtaForTracklets;
ClassDef(AliVertexingHFUtils,0)
};
#endif
AliVertexingHFUtils.h:100 AliVertexingHFUtils.h:101 AliVertexingHFUtils.h:102 AliVertexingHFUtils.h:103 AliVertexingHFUtils.h:104 AliVertexingHFUtils.h:105 AliVertexingHFUtils.h:106 AliVertexingHFUtils.h:107 AliVertexingHFUtils.h:108 AliVertexingHFUtils.h:109 AliVertexingHFUtils.h:110 AliVertexingHFUtils.h:111 AliVertexingHFUtils.h:112 AliVertexingHFUtils.h:113 AliVertexingHFUtils.h:114 AliVertexingHFUtils.h:115 AliVertexingHFUtils.h:116 AliVertexingHFUtils.h:117 AliVertexingHFUtils.h:118 AliVertexingHFUtils.h:119 AliVertexingHFUtils.h:120 AliVertexingHFUtils.h:121 AliVertexingHFUtils.h:122 AliVertexingHFUtils.h:123 AliVertexingHFUtils.h:124 AliVertexingHFUtils.h:125 AliVertexingHFUtils.h:126 AliVertexingHFUtils.h:127 AliVertexingHFUtils.h:128 AliVertexingHFUtils.h:129 AliVertexingHFUtils.h:130 AliVertexingHFUtils.h:131 AliVertexingHFUtils.h:132 AliVertexingHFUtils.h:133 AliVertexingHFUtils.h:134