#ifndef AliEveKink_H
#define AliEveKink_H
#include <TEvePointSet.h>
#include <TEveVSDStructs.h>
class TEveTrack;
class TEveTrackPropagator;
class TH1F;
class TH2F;
class AliEveKinkList;
class AliEveKink : public TEvePointSet
{
friend class AliEveKinkList;
friend class AliEveKinkEditor;
public:
AliEveKink();
AliEveKink(TEveRecTrack* tMoth, TEveRecTrack* tDaug, TEveRecKink* kink, TEveTrackPropagator* rsMoth, TEveTrackPropagator* rsDaugh);
virtual ~AliEveKink();
void MakeKink();
virtual void SetMainColor(Color_t col)
{
TEvePointSet::SetMainColor(col);
}
void SetRnrStyleMother(TEveTrackPropagator* rsMoth) { fRnrStyleMoth = rsMoth; }
void SetRnrStyleDaughter(TEveTrackPropagator* rsDaugh) { fRnrStyleDaugh = rsDaugh; }
Double_t GetKinkAngle(Int_t i) const { return fKinkAngle[i]; }
void SetKinkAngle(Int_t i, Double_t anglekink) { fKinkAngle[i] = anglekink; }
Float_t GetKinkRadius() const { return fRecKinkPosition.Perp(); }
Float_t GetKinkPMother() const { return fMotherMomentum.Mag(); }
Float_t GetKinkPMotherPerp() const { return fMotherMomentum.Perp(); }
Float_t GetKinkPDaughter() const { return fDaughterMomentum.Mag(); }
Float_t GetInvMass(Int_t dPdgCode) const;
Float_t GetQt() const;
void SetMaxProbPdgPid(Int_t rPdg, Float_t rPid);
Int_t GetDaugMaxProbPdg() const { return fDaugMaxProbPdg; }
Float_t GetDaugMaxProbPid() const { return fDaugMaxProbPid; }
Int_t GetESDKinkIndex() const { return fESDKinkIndex; }
void SetESDKinkIndex(Int_t ind) { fESDKinkIndex = ind;}
virtual const Text_t* GetName() const { return Form("ESDkink_%i",fESDKinkIndex); }
virtual const Text_t* GetTitle() const { return Form("ESDkink_%i",fESDKinkIndex); }
TEveTrack* GetMotherTrack() const { return fMotherTrack; }
TEveTrack* GetDaughterTrack() const { return fDaughterTrack; }
protected:
TEveVector fRecKinkPosition;
TEveVector fMotherMomentum;
TEveVector fDaughterMomentum;
TEveTrack *fMotherTrack;
TEveTrack *fDaughterTrack;
TEveTrackPropagator *fRnrStyleMoth;
TEveTrackPropagator *fRnrStyleDaugh;
Int_t fESDKinkIndex;
Double_t fKinkAngle[3];
Int_t fDaugMaxProbPdg;
Float_t fDaugMaxProbPid;
private:
AliEveKink(const AliEveKink&);
AliEveKink& operator=(const AliEveKink&);
ClassDef(AliEveKink, 0);
};
class AliEveKinkList : public TEveElementList
{
friend class AliEveKinkListEditor;
public:
AliEveKinkList();
AliEveKinkList(TEveTrackPropagator* rsMoth, TEveTrackPropagator* rsDaugh);
AliEveKinkList(const Text_t* name, TEveTrackPropagator* rsMoth=0, TEveTrackPropagator* rsDaugh=0);
virtual ~AliEveKinkList() {}
virtual void SetTracksColor(Color_t cMoth, Color_t cDaug)
{ fMothColor = cMoth; fDaugColor = cDaug; }
virtual Bool_t CanEditMainColor() const { return kTRUE; }
void SetRnrStyleMoth(TEveTrackPropagator* rstMoth) { fRnrStyleMoth = rstMoth; }
TEveTrackPropagator* GetPropagatorMoth() const { return fRnrStyleMoth; }
void SetRnrStyleDaugh(TEveTrackPropagator* rstDaugh) { fRnrStyleDaugh = rstDaugh; }
TEveTrackPropagator* GetPropagatorDaugh() const { return fRnrStyleDaugh; }
Bool_t GetRnrKinkvtx() const { return fRnrKinkvtx; }
Bool_t GetRnrKinkDaughter() const { return fRnrKinkDaughter; }
void MakeKinks();
void FilterByRadius(Float_t minR, Float_t maxR);
void FilterByKinkAngle(Float_t minKinkAngle, Float_t maxKinkAngle);
void FilterByPt(Float_t minPt, Float_t maxPt);
void FilterByInvariantMass(Float_t minPt, Float_t maxPt, Int_t dPdgCode);
void FilterByCheckedPidMinProb(Int_t rFlag, Int_t rPid, Float_t rProb);
void SetDaugCheckedPid(Int_t dcpid) { fDaugCheckedPid = dcpid; }
Int_t GetDaugCheckedPid() const { return fDaugCheckedPid; }
void SetDaugCheckedProb(Float_t dcprob) { fDaugCheckedProb = dcprob; }
Float_t GetDaugCheckedProb() const { return fDaugCheckedProb; }
protected:
TEveTrackPropagator *fRnrStyleMoth;
TEveTrackPropagator *fRnrStyleDaugh;
Bool_t fRnrKinkDaughter;
Bool_t fRnrKinkvtx;
Color_t fMothColor;
Color_t fDaugColor;
Float_t fMinRCut;
Float_t fMaxRCut;
Float_t fMinKinkAngle;
Float_t fMaxKinkAngle;
Float_t fMinPt;
Float_t fMaxPt;
Float_t fMinInvariantMass;
Float_t fMaxInvariantMass;
Int_t fDaugCheckedPid;
Float_t fDaugCheckedProb;
private:
void Init();
AliEveKinkList(const AliEveKinkList&);
AliEveKinkList& operator=(const AliEveKinkList&);
ClassDef(AliEveKinkList, 0);
};
#endif