#ifndef ALIEVECASCADE_H
#define ALIEVECASCADE_H
class TH1F;
class TH2F;
class TVector3;
class TEveVSDStructs;
class TEveTrackPropagator;
class TEveLine;
#include <TEveVector.h>
#include <TEveVSDStructs.h>
#include <TEvePointSet.h>
#include <TPDGCode.h>
class AliEveCascadeList;
#include "AliEveTrack.h"
class AliEveCascade : public TEvePointSet
{
friend class AliEveCascadeList;
friend class AliEveCascadeEditor;
public:
AliEveCascade();
AliEveCascade(TEveRecTrack* tBac,
TEveRecTrack* tNeg,
TEveRecTrack* tPos,
TEveRecV0* v0,
TEveRecCascade* cascade,
TEveTrackPropagator* rs);
virtual ~AliEveCascade();
void MakeCascade();
virtual void SetMainColor(Color_t col)
{
TEvePointSet::SetMainColor(col);
fPointingCurve->SetLineColor(fMarkerColor);
fV0Path->SetLineColor(fMarkerColor);
}
void SetRnrStyle( TEveTrackPropagator* const rs) { fRnrStyle = rs; }
Float_t GetDaughterDCA() const { return fDaughterDCA; }
void SetDaughterDCA(Float_t dca) { fDaughterDCA = dca; }
Float_t GetRadius() const { return fRecDecayV.Perp(); }
Float_t GetPt() const { return fRecDecayP.Perp(); }
Float_t GetPtot() const { return fRecDecayP.Mag(); }
Float_t GetPhi() const { return fRecDecayP.Phi(); }
Float_t GetTheta() const { return fRecDecayP.Theta(); }
Float_t GetEta() const { return fRecDecayP.Eta(); }
Int_t GetCharge() const { return fBacTrack->GetCharge(); }
Double_t GetInvMass(Int_t cascadePdgCodeHyp) const;
Float_t GetXiMinusInvMass() const { return GetInvMass( kXiMinus); }
Float_t GetOmegaMinusInvMass() const { return GetInvMass( kOmegaMinus); }
Float_t GetXiPlusInvMass() const { return GetInvMass(-kXiMinus); }
Float_t GetOmegaPlusInvMass() const { return GetInvMass(-kOmegaMinus); }
Int_t GetESDIndex() const { return fESDIndex; }
void SetESDIndex(Int_t ind) { fESDIndex = ind;}
TVector3 GetLambdaP() const { return fLambdaP; }
void SetLambdaP(Double_t px, Double_t py, Double_t pz) { fLambdaP.SetXYZ(px, py, pz); }
TVector3 GetBachP() const { return fBachP; }
void SetBachP(Double_t px, Double_t py, Double_t pz) { fBachP.SetXYZ(px, py, pz); }
virtual const Text_t* GetName() const { return Form("ESDcascade_%i",fESDIndex); }
virtual const Text_t* GetTitle() const { return Form("ESDcascade_%i",fESDIndex); }
TEveTrackPropagator* GetPropagator() const { return fRnrStyle; }
AliEveTrack* GetBacTrack() const { return fBacTrack; }
AliEveTrack* GetNegTrack() const { return fNegTrack; }
AliEveTrack* GetPosTrack() const { return fPosTrack; }
TEveLine* GetPointingCurve() const { return fPointingCurve; }
TEveLine* GetV0Path() const { return fV0Path; }
protected:
TEveVector fRecBirthV;
TEveVector fRecDecayV;
TEveVector fRecDecayP;
TEveVector fRecDecayV0;
AliEveTrack *fBacTrack;
AliEveTrack *fNegTrack;
AliEveTrack *fPosTrack;
TEveTrackPropagator *fRnrStyle;
TEveLine *fPointingCurve;
TEveLine *fV0Path;
Int_t fESDIndex;
Float_t fDaughterDCA;
Float_t fChi2Cascade;
TVector3 fLambdaP;
TVector3 fBachP;
private:
AliEveCascade(const AliEveCascade&);
AliEveCascade& operator=(const AliEveCascade&);
ClassDef(AliEveCascade, 1);
};
class AliEveCascadeList : public TEveElementList
{
friend class AliEveCascadeListEditor;
public:
AliEveCascadeList();
AliEveCascadeList(TEveTrackPropagator* rs);
AliEveCascadeList(const Text_t* name, TEveTrackPropagator* rs=0);
virtual ~AliEveCascadeList() {}
virtual const Text_t* GetTitle() const { return fTitle; }
virtual void SetTitle(const Text_t* t) { fTitle = t; }
virtual void SetTracksColor(Color_t cBac) { fBacColor = cBac;}
virtual Bool_t CanEditMainColor() const { return kTRUE; }
void SetRnrStyle(TEveTrackPropagator* const rst ) { fRnrStyle = rst; }
TEveTrackPropagator* GetPropagator() const { return fRnrStyle; }
Bool_t GetRnrCascadevtx() const { return fRnrCascadevtx; }
Bool_t GetRnrCascadepath() const { return fRnrCascadepath; }
Bool_t GetRnrDaughters() const { return fRnrDaughters; }
void MakeCascades();
void FilterByRadius (Float_t minR, Float_t maxR);
void FilterByDaughterDCA (Float_t minDaughterDCA, Float_t maxDaughterDCA);
void FilterByPt (Float_t minPt, Float_t maxPt);
void FilterByInvariantMass (Float_t minInvariantMass, Float_t maxInvariantMass, Int_t cascadePdgCodeHyp);
void SetInvMassHyp (Int_t rInvMassHyp) {fInvMassHyp = rInvMassHyp;}
Int_t GetInvMassHyp() const { return fInvMassHyp; }
protected:
TString fTitle;
TEveTrackPropagator *fRnrStyle;
Bool_t fRnrDaughters;
Bool_t fRnrCascadevtx;
Bool_t fRnrCascadepath;
Color_t fBacColor;
Float_t fMinRCut;
Float_t fMaxRCut;
Float_t fMinDaughterDCA;
Float_t fMaxDaughterDCA;
Float_t fMinPt;
Float_t fMaxPt;
Int_t fInvMassHyp;
Float_t fMinInvariantMass;
Float_t fMaxInvariantMass;
private:
void Init();
AliEveCascadeList(const AliEveCascadeList&);
AliEveCascadeList& operator=(const AliEveCascadeList&);
ClassDef(AliEveCascadeList, 0);
};
#endif