#ifndef AliEveHF_H
#define AliEveHF_H
#include "AliAODRecoDecay.h"
#include "AliEveTrack.h"
#include <TEveVSDStructs.h>
#include <TPolyLine3D.h>
#include <TPDGCode.h>
class TH1F;
class TH2F;
class AliEveHFList;
class AliEveHF : public TEvePointSet
{
friend class AliEveHFList;
friend class AliEveHFEditor;
public:
AliEveHF();
AliEveHF(TEveRecTrack* tNeg, TEveRecTrack* tPos, Double_t primVtx[3], AliAODRecoDecay* aodObj, TEveTrackPropagator* rs);
virtual ~AliEveHF();
void MakeHF();
virtual void SetMainColor(Color_t col)
{
TEvePointSet::SetMainColor(col);
fPointingLine->SetLineColor(fMarkerColor);
}
void SetRnrStyle(TEveTrackPropagator* rs) { fRnrStyle = rs; }
Float_t GetPhi() { return fRecDecayHF.Phi(); }
Float_t GetEta() { return fRecDecayMomHF.Eta(); }
Float_t GetRadius() { return fRecDecayHF.Perp(); }
Float_t GetPt() { return fRecDecayMomHF.Perp(); }
Double_t GetInvariantMassPart() { CalculateInvMass(fDecay); return fInvariantMassPart; }
Double_t GetInvariantMassAntiPart() { CalculateInvMass(fDecay); return fInvariantMassAntiPart; }
Float_t GetChi2Vtx() const { return fChi2SecondVtx; }
Float_t GetCosPointingAngle() const {return fPointingAngleHF; }
AliAODRecoDecay *GetAODobj() const {return fAODobj; }
Int_t GetAODIndex() const { return fAODIndex; }
void SetAODIndex(Int_t ind) { fAODIndex = ind;}
virtual const Text_t* GetName() const { return Form("AOD_HF_%i",fAODIndex); }
virtual const Text_t* GetTitle() const { return Form("AOD_HF_%i",fAODIndex); }
Double_t GetProngDCA(Int_t iProng)const { return fProngDCA[iProng]; }
void SetProngDCA() const ;
Double_t Getd0Prong(Int_t iProng)const { return fProngd0[iProng]; }
void Setd0Prong() const ;
void CalculateInvMass(Int_t decay);
Bool_t SelectInvMass(Int_t decay, Float_t decayCuts);
void SetMaxProbPdgPid();
Int_t GetPdgProngMaxProb(Int_t iProng)const { return fProngMaxProbPdg[iProng]; }
Double_t GetPidProngMaxProb(Int_t iProng)const { return fProngMaxProbPid[iProng]; }
TEveTrackPropagator* GetPropagator() const { return fRnrStyle; }
TEveTrack* GetNegTrack()const { return fNegTrack; }
TEveTrack* GetPosTrack()const { return fPosTrack; }
TEveLine* GetPointingLine()const { return fPointingLine; }
protected:
AliAODRecoDecay *fAODobj;
TEveVector fRecBirthHF;
TEveVector fRecDecayHF;
TEveVector fRecDecayMomHF;
Double_t fPointingAngleHF;
TEveTrack *fNegTrack;
TEveTrack *fPosTrack;
TEveTrackPropagator *fRnrStyle;
TEveLine *fPointingLine;
Int_t fnProng;
Int_t fAODIndex;
Double_t fChi2SecondVtx;
Double_t *fProngDCA;
Double_t *fProngd0;
Int_t *fProngMaxProbPdg;
Double_t *fProngMaxProbPid;
Double_t fInvariantMassPart;
Double_t fInvariantMassAntiPart;
Int_t fDecay;
private:
AliEveHF(const AliEveHF&);
AliEveHF& operator=(const AliEveHF&);
ClassDef(AliEveHF,0);
};
class AliEveHFList : public TEveElementList
{
friend class AliEveHFListEditor;
public:
AliEveHFList();
AliEveHFList(TEveTrackPropagator* rs);
AliEveHFList(const Text_t* name, TEveTrackPropagator* rs=0);
virtual ~AliEveHFList() {}
virtual const Text_t* GetTitle() const { return fTitle; }
virtual void SetTitle(const Text_t* t) { fTitle = t; }
virtual void SetTracksColor(Color_t cNeg, Color_t cPos, Int_t ip)
{fProngColor[ip] = cNeg; fProngColor[ip++] = cPos;}
virtual Bool_t CanEditMainColor() const { return kTRUE; }
void SetRnrStyle(TEveTrackPropagator* rst) { fRnrStyle = rst; }
TEveTrackPropagator* GetPropagator() { return fRnrStyle; }
Bool_t GetRnrHFvtx() const { return fRnrHFvtx; }
Bool_t GetRnrHFpath() const { return fRnrHFpath; }
Bool_t GetRnrDaughters() const { return fRnrDaughters; }
void MakeHFs();
void FilterByPt(Float_t minPt, Float_t maxPt);
void FilterByRadius(Float_t minR, Float_t maxR);
void FilterByCosPointingAngle(Float_t minCosPointingAngle, Float_t maxCosPointingAngle);
void FilterByDCA(Float_t minDaughterDCA, Float_t maxDaughterDCA);
void FilterByd0(Float_t mind0, Float_t maxd0);
Int_t GetProngCheckedPid(Int_t iProng) {return fProngCheckedPid[iProng];}
void FilterByInvariantMass (Int_t decay, Float_t deltaInvariantMass);
protected:
TString fTitle;
TEveTrackPropagator *fRnrStyle;
Bool_t fRnrDaughters;
Bool_t fRnrHFvtx;
Bool_t fRnrHFpath;
Color_t* fProngColor;
Float_t fMinRCut;
Float_t fMaxRCut;
Float_t fMinDaughterDCA;
Float_t fMaxDaughterDCA;
Float_t fMinPt;
Float_t fMaxPt;
Float_t fMinCosPointingAngle;
Float_t fMaxCosPointingAngle;
Float_t fMind0;
Float_t fMaxd0;
Int_t* fProngCheckedPid;
Float_t* fProngCheckedProb;
Float_t fDeltaInvariantMass;
Int_t fDecay;
private:
void Init();
AliEveHFList(const AliEveHFList&);
AliEveHFList& operator=(const AliEveHFList&);
ClassDef(AliEveHFList,0);
};
#endif