New classes and macros for kink visualization.
These are now enabled by default in visscan_init.C.
--- /dev/null
+// $Id$
+// Main authors: Paraskevi Ganoti: 2009
+
+/**************************************************************************
+ * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
+ * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
+ * full copyright notice. *
+ **************************************************************************/
+
+#include "AliEveKink.h"
+
+#include <TEveTrack.h>
+#include <TEveManager.h>
+
+#include <TPolyLine3D.h>
+#include <TPolyMarker3D.h>
+#include <TColor.h>
+
+#include <TDatabasePDG.h>
+#include <TParticlePDG.h>
+
+#include <vector>
+
+
+/***********************************************************************
+*
+* AliEveKink class
+*
+************************************************************************/
+
+ClassImp(AliEveKink)
+
+//______________________________________________________________________________
+AliEveKink::AliEveKink() :
+ TEvePointSet(),
+
+ fRecKinkPosition(),
+ fMotherMomentum(),
+ fDaughterMomentum(),
+ fMotherTrack(0),
+ fDaughterTrack(0),
+ fRnrStyleMoth(0),
+ fRnrStyleDaugh(0),
+ fESDKinkIndex(-1),
+ fDaugMaxProbPdg(0),
+ fDaugMaxProbPid(0)
+{
+ // Default constructor.
+
+ // Override from TEveElement.
+ fKinkAngle[0]=fKinkAngle[1]=fKinkAngle[2]=0.0;
+ fPickable = kTRUE;
+}
+
+//______________________________________________________________________________
+AliEveKink::AliEveKink(TEveRecTrack* tMoth, TEveRecTrack* tDaug,
+ TEveRecKink* kink, TEveTrackPropagator* rsMoth, TEveTrackPropagator* rsDaugh) :
+ TEvePointSet(),
+ fRecKinkPosition(kink->fVKink),
+ fMotherMomentum(kink->fPMother),
+ fDaughterMomentum(kink->fPDaughter),
+ fMotherTrack(new TEveTrack(tMoth, rsMoth)),
+ fDaughterTrack(new TEveTrack(tDaug, rsDaugh)),
+ fRnrStyleMoth(rsMoth),
+ fRnrStyleDaugh(rsDaugh),
+ fESDKinkIndex(-1),
+ fDaugMaxProbPdg(0),
+ fDaugMaxProbPid(0)
+{
+ // Constructor with full kink specification.
+
+ // Override from TEveElement.
+ fPickable = kTRUE;
+ fKinkAngle[0]=fKinkAngle[1]=fKinkAngle[2]=0;
+
+ fMotherTrack->SetLineColor(2); // red
+ fMotherTrack->SetStdTitle();
+ fMotherTrack->SetLineWidth(3);
+ TEvePathMark* pmM = 0;
+ pmM = new TEvePathMark(TEvePathMark::kDecay);
+ pmM->fV.Set(kink->fVKink);
+ fMotherTrack->AddPathMark(*pmM);
+
+ fDaughterTrack->SetLineColor(7); // light blue
+ fDaughterTrack->SetLineWidth(3); //
+ fDaughterTrack->SetStdTitle();
+
+ fMotherTrack->IncDenyDestroy();
+ AddElement(fMotherTrack);
+ fDaughterTrack->IncDenyDestroy();
+ AddElement(fDaughterTrack);
+}
+
+//______________________________________________________________________________
+AliEveKink::~AliEveKink()
+{
+ // Destructor. Dereferences mother-daughter tracks
+
+ fMotherTrack->DecDenyDestroy();
+ fDaughterTrack->DecDenyDestroy();
+}
+//______________________________________________________________________________
+void AliEveKink::SetMaxProbPdgPid(Int_t rPdg, Float_t rPid)
+{
+ // Sets the maximum probability Pdg value and Pid for the daughter
+ // Should be moved to TEveTrack property eventually (or AliEveTrack creation)
+
+ fDaugMaxProbPdg = rPdg;
+ fDaugMaxProbPid = rPid;
+
+}
+
+//______________________________________________________________________________
+Float_t AliEveKink::GetInvMass(Int_t dPdgCode) const
+{
+ // Returns Invariant Mass assuming the mass of the daughter particle
+ TEveVector lDaugMomentum = fDaughterTrack->GetMomentum();
+ TEveVector lMothMomentum = fMotherTrack->GetMomentum();
+ Double_t dMass=TDatabasePDG::Instance()->GetParticle(dPdgCode)->Mass();
+
+ Double_t eDaug = TMath::Sqrt(dMass*dMass + lDaugMomentum.Mag2());
+ Double_t otherDaug=TMath::Sqrt(
+ (lMothMomentum.fX-lDaugMomentum.fX)*(lMothMomentum.fX-lDaugMomentum.fX)+
+ (lMothMomentum.fY-lDaugMomentum.fY)*(lMothMomentum.fY-lDaugMomentum.fY)+
+ (lMothMomentum.fZ-lDaugMomentum.fZ)*(lMothMomentum.fZ-lDaugMomentum.fZ));
+
+ return TMath::Sqrt( (eDaug+otherDaug)*(eDaug+otherDaug) - lMothMomentum.Mag2());
+}
+
+//______________________________________________________________________________
+Float_t AliEveKink::GetQt() const
+{
+ // Returns the kink daughter Qt
+
+ TEveVector lDaugMomentum = fDaughterTrack->GetMomentum();
+ Float_t daugMom=TMath::Sqrt(
+ (lDaugMomentum.fX)*(lDaugMomentum.fX)+
+ (lDaugMomentum.fY)*(lDaugMomentum.fY)+
+ (lDaugMomentum.fZ)*(lDaugMomentum.fZ));
+
+ return TMath::Sin(fKinkAngle[2])*daugMom ;
+}
+
+//______________________________________________________________________________
+void AliEveKink::MakeKink()
+{
+ // Set all dependant components for drawing.
+
+ SetPoint(0, fRecKinkPosition.fX, fRecKinkPosition.fY, fRecKinkPosition.fZ);
+
+ fMotherTrack->MakeTrack();
+ fDaughterTrack->MakeTrack();
+
+}
+
+
+/***********************************************************************
+*
+* AliEveKinkList class
+*
+************************************************************************/
+
+ClassImp(AliEveKinkList)
+
+//______________________________________________________________________________
+AliEveKinkList::AliEveKinkList() :
+ TEveElementList(),
+ fTitle(),
+ fRnrStyleMoth(0),
+ fRnrStyleDaugh(0),
+ fRnrKinkDaughter(kTRUE),
+ fRnrKinkvtx(kTRUE),
+ fMothColor(0),
+ fDaugColor(0),
+ fMinRCut(0),
+ fMaxRCut(300),
+ fMinKinkAngle(0),
+ fMaxKinkAngle(300),
+ fMinPt(0),
+ fMaxPt(20),
+ fMinInvariantMass(0),
+ fMaxInvariantMass(1.0),
+ fDaugCheckedPid(0),
+ fDaugCheckedProb(0)
+{
+ // Default constructor.
+
+ fChildClass = AliEveKink::Class(); // override member from base TEveElementList
+}
+
+//______________________________________________________________________________
+AliEveKinkList::AliEveKinkList(TEveTrackPropagator* rsMoth,TEveTrackPropagator* rsDaugh) :
+ TEveElementList(),
+ fTitle(),
+ fRnrStyleMoth(rsMoth),
+ fRnrStyleDaugh(rsDaugh),
+ fRnrKinkDaughter(kTRUE),
+ fRnrKinkvtx(kTRUE),
+ fMothColor(0),
+ fDaugColor(0),
+ fMinRCut(0),
+ fMaxRCut(300),
+ fMinKinkAngle(0),
+ fMaxKinkAngle(300),
+ fMinPt(0),
+ fMaxPt(20),
+ fMinInvariantMass(0),
+ fMaxInvariantMass(1.0),
+ fDaugCheckedPid(0),
+ fDaugCheckedProb(0)
+{
+ // Constructor with given track-propagator..
+
+ fChildClass = AliEveKink::Class(); // override member from base TEveElementList
+
+ Init();
+}
+
+//______________________________________________________________________________
+AliEveKinkList::AliEveKinkList(const Text_t* name, TEveTrackPropagator* rsMoth, TEveTrackPropagator* rsDaugh) :
+ TEveElementList(),
+ fTitle(),
+ fRnrStyleMoth(rsMoth),
+ fRnrStyleDaugh(rsDaugh),
+ fRnrKinkDaughter(kTRUE),
+ fRnrKinkvtx(kTRUE),
+ fMothColor(0),
+ fDaugColor(0),
+ fMinRCut(0),
+ fMaxRCut(300),
+ fMinKinkAngle(0),
+ fMaxKinkAngle(300),
+ fMinPt(0),
+ fMaxPt(20),
+ fMinInvariantMass(0),
+ fMaxInvariantMass(1.0),
+ fDaugCheckedPid(0),
+ fDaugCheckedProb(0)
+{
+ // Standard constructor.
+
+ fChildClass = AliEveKink::Class(); // override member from base TEveElementList
+
+ Init();
+ SetName(name);
+}
+
+//______________________________________________________________________________
+void AliEveKinkList::Init()
+{
+ // Initialize members needed for drawing operations.
+
+ if (fRnrStyleMoth== 0) fRnrStyleMoth = new TEveTrackPropagator;
+ if (fRnrStyleDaugh== 0) fRnrStyleDaugh = new TEveTrackPropagator;
+}
+
+/******************************************************************************/
+
+//______________________________________________________________________________
+void AliEveKinkList::MakeKinks()
+{
+ // Call MakeKink() for all elements.
+
+ for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
+ ((AliEveKink*)(*i))->MakeKink();
+ }
+ gEve->Redraw3D();
+}
+
+/******************************************************************************/
+
+//______________________________________________________________________________
+void AliEveKinkList::FilterByRadius(Float_t minR, Float_t maxR)
+{
+ // Select visibility of elements based on their axial radius.
+
+ fMinRCut = minR;
+ fMaxRCut = maxR;
+
+ for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
+ {
+ AliEveKink* kink = (AliEveKink*) *i;
+ Float_t rad = kink->GetKinkRadius();
+ Bool_t show = rad >= fMinRCut && rad <= fMaxRCut;
+ kink->SetRnrState(show);
+ }
+ ElementChanged();
+ gEve->Redraw3D();
+}
+
+/******************************************************************************/
+
+//______________________________________________________________________________
+void AliEveKinkList::FilterByKinkAngle(Float_t minKinkAngle, Float_t maxKinkAngle)
+{
+ // Select visibility of elements based on the kink angle.
+
+ fMinKinkAngle = minKinkAngle;
+ fMaxKinkAngle = maxKinkAngle;
+
+ for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
+ {
+ AliEveKink* kink = (AliEveKink*) *i;
+ Float_t angle = TMath::RadToDeg()*kink->GetKinkAngle(2);
+ Bool_t show = angle >= fMinKinkAngle && angle <= fMaxKinkAngle;
+ kink->SetRnrState(show);
+ }
+ ElementChanged();
+ gEve->Redraw3D();
+}
+
+/******************************************************************************/
+
+//______________________________________________________________________________
+void AliEveKinkList::FilterByPt(Float_t minPt, Float_t maxPt)
+{
+ // Select visibility of elements based on the kink pt.
+
+ fMinPt = minPt;
+ fMaxPt = maxPt;
+
+ for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
+ {
+ AliEveKink* kink = (AliEveKink*) *i;
+ Float_t pt = kink->GetKinkPMotherPerp();
+ Bool_t show = pt >= fMinPt && pt <= fMaxPt;
+ kink->SetRnrState(show);
+ }
+ ElementChanged();
+ gEve->Redraw3D();
+}
+
+//______________________________________________________________________________
+void AliEveKinkList::FilterByInvariantMass(Float_t minInvariantMass, Float_t maxInvariantMass, Int_t dPdgCode)
+{
+ // Select visibility of elements based on the kink invariant mass.
+
+ fMinInvariantMass = minInvariantMass;
+ fMaxInvariantMass = maxInvariantMass;
+
+ for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
+ {
+ AliEveKink* kink = (AliEveKink*) *i;
+ Float_t invMass = kink->GetInvMass(dPdgCode);
+ Bool_t show = invMass >= fMinInvariantMass && invMass <= fMaxInvariantMass;
+ kink->SetRnrState(show);
+ }
+ ElementChanged();
+ gEve->Redraw3D();
+}
+
+//______________________________________________________________________________
+void AliEveKinkList::FilterByCheckedPidMinProb(Int_t rFlag, Int_t rPid, Float_t rProb)
+{
+
+ fDaugCheckedPid = rPid;
+ fDaugCheckedProb = rProb;
+
+ // Select visibility of elements based on the kink daughter PID
+ for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
+ {
+ AliEveKink* kink = (AliEveKink*) *i;
+ Int_t pid = 0;
+ Float_t prob = 0.0;
+ Bool_t show = 0;
+
+ pid = kink->GetDaugMaxProbPdg();
+ prob = kink->GetDaugMaxProbPid();
+ show = (pid == fDaugCheckedPid && prob > fDaugCheckedProb) || !rFlag ;
+
+
+ kink->SetRnrState(show);
+ }
+ ElementChanged();
+ gEve->Redraw3D();
+}
--- /dev/null
+// $Id$
+// Main authors: Paraskevi Ganoti: 2009
+
+/**************************************************************************
+ * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
+ * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
+ * full copyright notice. *
+ **************************************************************************/
+#ifndef AliEveKink_H
+#define AliEveKink_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice
+***************************************************************************/
+
+#include <TEveVSDStructs.h>
+#include <TEveElement.h>
+#include <TEveTrack.h>
+#include <TEveTrackPropagator.h>
+
+#include <TPolyMarker3D.h>
+#include <TPolyLine3D.h>
+
+#include <TPDGCode.h>
+
+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() { return fMotherTrack; }
+ TEveTrack* GetDaughterTrack() { return fDaughterTrack; }
+
+protected:
+ TEveVector fRecKinkPosition;
+ TEveVector fMotherMomentum;
+ TEveVector fDaughterMomentum;
+
+ TEveTrack *fMotherTrack;
+ TEveTrack *fDaughterTrack;
+
+ TEveTrackPropagator *fRnrStyleMoth;
+ TEveTrackPropagator *fRnrStyleDaugh;
+
+ Int_t fESDKinkIndex; // Index in ESD Kink array.
+ Double_t fKinkAngle[3]; //
+
+ Int_t fDaugMaxProbPdg; // Maximum PDG probability for the daughter
+ Float_t fDaugMaxProbPid; // Maximum PID probability for the daughter
+
+private:
+ AliEveKink(const AliEveKink&); // Not implemented
+ AliEveKink& operator=(const AliEveKink&); // Not implemented
+
+ ClassDef(AliEveKink, 0); // Visual representation of a AliEveKink.
+};
+
+
+/******************************************************************************/
+// AliEveKinkList
+/******************************************************************************/
+
+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 const Text_t* GetTitle() const { return fTitle; }
+ virtual void SetTitle(const Text_t* t) { fTitle = t; }
+ 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() { return fRnrStyleMoth; }
+
+ void SetRnrStyleDaugh(TEveTrackPropagator* rstDaugh) { fRnrStyleDaugh = rstDaugh; }
+ TEveTrackPropagator* GetPropagatorDaugh() { return fRnrStyleDaugh; }
+
+ Bool_t GetRnrKinkvtx() const { return fRnrKinkvtx; }
+ Bool_t GetRnrKinkDaughter() const { return fRnrKinkDaughter; } //not yet be sure about this!!!
+
+ 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 rDaugCheckedPid) {fDaugCheckedPid = rDaugCheckedPid;}
+ Int_t GetDaugCheckedPid() {return fDaugCheckedPid;}
+
+ void SetDaugCheckedProb(Float_t rDaugCheckedProb) {fDaugCheckedProb = rDaugCheckedProb;}
+ Float_t GetDaugCheckedProb() {return fDaugCheckedProb;}
+
+
+protected:
+ TString fTitle;
+
+ 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&); // Not implemented
+ AliEveKinkList& operator=(const AliEveKinkList&); // Not implemented
+
+ ClassDef(AliEveKinkList, 0); // A list of AliEveKink objecs.
+};
+
+
+#endif
--- /dev/null
+// $Id$
+// Author: Paraskevi Ganoti: 2009
+
+/**************************************************************************
+ * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
+ * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
+ * full copyright notice. *
+ **************************************************************************/
+
+#include "AliEveKinkEditor.h"
+#include "AliEveKink.h"
+
+#include "TVirtualPad.h"
+#include "TColor.h"
+
+// Cleanup these includes:
+#include "TGLabel.h"
+#include "TGButton.h"
+#include "TGNumberEntry.h"
+#include "TGColorSelect.h"
+#include "TGDoubleSlider.h"
+#include "TMath.h"
+
+//______________________________________________________________________________
+// GUI editor for AliEveKink.
+//
+
+ClassImp(AliEveKinkEditor)
+
+//______________________________________________________________________________
+AliEveKinkEditor::AliEveKinkEditor(const TGWindow *p, Int_t width, Int_t height,
+ UInt_t options, Pixel_t back) :
+ TGedFrame(p, width, height, options | kVerticalFrame, back),
+ fM(0),
+ fInfoLabel0(0),
+ fInfoLabel1(0),
+ fInfoLabelDaughter(0),
+ fXButton(0)
+ // Initialize widget pointers to 0
+{
+ // Constructor.
+
+ MakeTitle("AliEveKink");
+
+ fInfoLabel0 = new TGLabel(this);
+ fInfoLabel0->SetTextJustify(kTextLeft);
+ AddFrame(fInfoLabel0, new TGLayoutHints(kLHintsLeft|kLHintsExpandX,
+ 8, 0, 2, 0));
+
+ fInfoLabel1 = new TGLabel(this);
+ fInfoLabel1->SetTextJustify(kTextLeft);
+ AddFrame(fInfoLabel1, new TGLayoutHints(kLHintsLeft|kLHintsExpandX,
+ 8, 0, 2, 0));
+
+ fInfoLabelDaughter = new TGLabel(this);
+ fInfoLabelDaughter->SetTextJustify(kTextLeft);
+ AddFrame(fInfoLabelDaughter, new TGLayoutHints(kLHintsLeft|kLHintsExpandX,
+ 8, 0, 2, 0));
+
+ fXButton = new TGTextButton(this, "Detailed View");
+ AddFrame(fXButton, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
+ fXButton->Connect("Clicked()", "AliEveKinkEditor", this, "DisplayDetailed()");
+}
+
+/******************************************************************************/
+
+//______________________________________________________________________________
+void AliEveKinkEditor::SetModel(TObject* obj)
+{
+ // Set model object.
+
+ fM = dynamic_cast<AliEveKink*>(obj);
+
+ // Set values of widgets
+ fInfoLabel0->SetText(Form("Radius = %f, Kink Angle = %f", fM->GetKinkRadius(), (fM->GetKinkAngle(2))*TMath::RadToDeg() ));
+ fInfoLabel1->SetText(Form("Mother Pt = %f", fM->GetKinkPMotherPerp()));
+ fInfoLabelDaughter->SetText(Form("Daughter Prob= %f for Pdg= %d", fM->GetDaugMaxProbPid(), fM->GetDaugMaxProbPdg()));
+
+}
+
+/******************************************************************************/
+
+#include <TEveManager.h>
+#include <TEveWindow.h>
+#include <TEveViewer.h>
+#include <TEveScene.h>
+
+#include <TGLCamera.h>
+#include <TGLViewer.h>
+
+#include <TLatex.h>
+#include <TRootEmbeddedCanvas.h>
+
+void AliEveKinkEditor::DisplayDetailed()
+{
+ TEveWindowSlot *slot = TEveWindow::CreateWindowMainFrame();
+ TEveWindowPack *pack = slot->MakePack();
+ pack->SetShowTitleBar(kFALSE);
+ pack->SetHorizontal();
+
+ //
+ // This part is for the bending plane view
+ //
+ pack->NewSlot()->MakeCurrent();
+ TEveViewer *bpViewer = gEve->SpawnNewViewer("Kink bending plane View");
+ TEveScene *bpScene = gEve->SpawnNewScene("Kink bending plane Scene");
+ bpViewer->AddScene(bpScene);
+ bpScene->AddElement(fM);
+ bpViewer->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
+ bpViewer->GetGLViewer()->ResetCamerasAfterNextUpdate();
+ TGLCamera& bpCam = bpViewer->GetGLViewer()->CurrentCamera();
+ bpCam.SetExternalCenter(kTRUE);
+ bpCam.SetCenterVec(fM->fRecKinkPosition.fX, fM->fRecKinkPosition.fY, fM->fRecKinkPosition.fZ);
+
+ //
+ // This part is for the decay plane view
+ //
+ pack->NewSlot()->MakeCurrent();
+ TEveViewer *dpViewer = gEve->SpawnNewViewer("Kink decay plane View");
+ TEveScene *dpScene = gEve->SpawnNewScene("Kink decay plane Scene");
+ dpViewer->AddScene(dpScene);
+ dpScene->AddElement(fM);
+ dpViewer->GetGLViewer()->ResetCamerasAfterNextUpdate();
+ TGLCamera& dpCam = dpViewer->GetGLViewer()->CurrentCamera();
+ dpCam.SetExternalCenter(kTRUE);
+ dpCam.SetCenterVec(fM->fRecKinkPosition.fX, fM->fRecKinkPosition.fY, fM->fRecKinkPosition.fZ);
+
+ // This part is for displaying the information
+ slot = pack->NewSlot();
+
+ TEveWindowFrame *frame = slot->MakeFrame(new TRootEmbeddedCanvas());
+ frame->SetElementName("Details");
+
+ char info[100] = {0};
+ TLatex* ltx = new TLatex(0.1, 0.9, info);
+ ltx->SetTextSize(0.08);
+
+ sprintf(info,"radius = %.3f [cm]",fM->GetKinkRadius());
+ ltx->DrawLatex(0.1, 0.8, info);
+ sprintf(info,"mass_{K^{+, -}} = %.3f [GeV/c^{2}]",fM->GetInvMass(13));
+ ltx->DrawLatex(0.1, 0.3, info);
+
+ gEve->Redraw3D();
+}
--- /dev/null
+// $Id$
+// Author: Paraskevi Ganoti: 2009
+
+/**************************************************************************
+ * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
+ * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
+ * full copyright notice. *
+ **************************************************************************/
+
+#ifndef AliEveKinkEditor_H
+#define AliEveKinkEditor_H
+
+#include "TGedFrame.h"
+
+class TGButton;
+class TGCheckButton;
+class TGNumberEntry;
+class TGColorSelect;
+
+class AliEveKink;
+
+//______________________________________________________________________________
+// Short description of AliEveKinkEditor
+//
+
+class AliEveKinkEditor : public TGedFrame
+{
+public:
+ AliEveKinkEditor(const TGWindow* p=0, Int_t width=170, Int_t height=30,
+ UInt_t options=kChildFrame, Pixel_t back=GetDefaultFrameBackground());
+ virtual ~AliEveKinkEditor() {}
+
+ virtual void SetModel(TObject* obj);
+ void DisplayDetailed();
+
+protected:
+ AliEveKink *fM; // Model object.
+
+ TGLabel *fInfoLabel0; // label
+ TGLabel *fInfoLabel1; // label
+ TGLabel *fInfoLabelDaughter; // label
+
+ TGButton *fXButton;
+
+private:
+ AliEveKinkEditor(const AliEveKinkEditor&); // Not implemented
+ AliEveKinkEditor& operator=(const AliEveKinkEditor&); // Not implemented
+
+ ClassDef(AliEveKinkEditor, 0); // GUI editor for AliEveKink.
+};
+
+#endif
--- /dev/null
+// $Id$
+// Author: Paraskevi Ganoti: 2009
+
+/**************************************************************************
+ * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
+ * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
+ * full copyright notice. *
+ **************************************************************************/
+
+#include "AliEveKinkListEditor.h"
+#include "AliEveKink.h"
+
+#include "TEveGValuators.h"
+
+#include "TVirtualPad.h"
+#include "TColor.h"
+
+// Cleanup these includes:
+#include "TGLabel.h"
+#include "TGButton.h"
+#include "TGNumberEntry.h"
+#include "TGColorSelect.h"
+#include "TGDoubleSlider.h"
+#include "TGComboBox.h"
+#include "TGLabel.h"
+
+//______________________________________________________________________________
+// GUI editor for AliEveKinkList.
+//
+
+ClassImp(AliEveKinkListEditor)
+
+//______________________________________________________________________________
+AliEveKinkListEditor::AliEveKinkListEditor(const TGWindow *p, Int_t width, Int_t height,
+ UInt_t options, Pixel_t back) :
+ TGedFrame(p, width, height, options | kVerticalFrame, back),
+ fM(0),
+ fMinMaxRCut(0),
+ fMinMaxKinkAngleCut (0),
+ fMinMaxPt(0),
+ fMinMaxInvariantMass(0),
+ fDaughterSpecies(0),
+ fDaughterCheckMaxPidProbability(0),
+ fDaughterLevelPidProbability(0)
+{
+ // Constructor.
+
+ MakeTitle("AliEveKinkList");
+
+ fMinMaxRCut = new TEveGDoubleValuator(this,"Radius:", 130, 0);
+ fMinMaxRCut->SetNELength(5);
+ fMinMaxRCut->SetLabelWidth(74);
+ fMinMaxRCut->Build();
+ fMinMaxRCut->GetSlider()->SetWidth(200);
+ fMinMaxRCut->SetLimits(0, 250, TGNumberFormat::kNESRealOne);
+ fMinMaxRCut->Connect("ValueSet()", "AliEveKinkListEditor", this, "DoMinMaxRCut()");
+ AddFrame(fMinMaxRCut, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
+
+ fMinMaxKinkAngleCut = new TEveGDoubleValuator(this,"Kink Angle:", 130, 0);
+ fMinMaxKinkAngleCut->SetNELength(5);
+ fMinMaxKinkAngleCut->SetLabelWidth(74);
+ fMinMaxKinkAngleCut->Build();
+ fMinMaxKinkAngleCut->GetSlider()->SetWidth(200);
+ fMinMaxKinkAngleCut->SetLimits(0, 280, TGNumberFormat::kNESRealOne);
+ fMinMaxKinkAngleCut->Connect("ValueSet()", "AliEveKinkListEditor", this, "DoMinMaxKinkAngleCut()");
+ AddFrame(fMinMaxKinkAngleCut, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
+
+ fMinMaxPt = new TEveGDoubleValuator(this,"pT:", 80, 0);
+ fMinMaxPt->SetNELength(5);
+ fMinMaxPt->SetLabelWidth(74);
+ fMinMaxPt->Build();
+ fMinMaxPt->GetSlider()->SetWidth(200);
+ fMinMaxPt->SetLimits(0, 20, TGNumberFormat::kNESRealOne);
+ fMinMaxPt->Connect("ValueSet()", "AliEveKinkListEditor", this, "DoMinMaxPt()");
+ AddFrame(fMinMaxPt, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
+
+ fMinMaxInvariantMass = new TEveGDoubleValuator(this,"Inv. Mass:", 80, 0);
+ fMinMaxInvariantMass->SetNELength(5);
+ fMinMaxInvariantMass->SetLabelWidth(74);
+ fMinMaxInvariantMass->Build();
+ fMinMaxInvariantMass->GetSlider()->SetWidth(200);
+ fMinMaxInvariantMass->SetLimits(0, 1.0, TGNumberFormat::kNESRealThree);
+ fMinMaxInvariantMass->Connect("ValueSet()", "AliEveKinkListEditor", this, "DoMinMaxInvariantMass()");
+ AddFrame(fMinMaxInvariantMass, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
+
+ TGHorizontalFrame* fDaugFrame = new TGHorizontalFrame(this);
+ TGLabel* labDaug = new TGLabel(fDaugFrame, "Daug:");
+ fDaugFrame->AddFrame(labDaug, new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 1, 1, 1));
+ fDaughterSpecies = new TGComboBox(fDaugFrame);
+ fDaughterSpecies->AddEntry("e", 11);
+ fDaughterSpecies->AddEntry("mu", 13);
+ fDaughterSpecies->AddEntry("pi", 211);
+ TGListBox* lbaug = fDaughterSpecies->GetListBox();
+ lbaug->Resize(lbaug->GetWidth(), 2*18);
+ fDaughterSpecies->Resize(45, 20);
+ fDaughterSpecies->Connect("Selected(Int_t)", "AliEveKinkListEditor", this, "DoSelectDaugPid(Int_t)");
+ fDaugFrame->AddFrame(fDaughterSpecies, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
+ AddFrame(fDaugFrame);
+
+ fDaughterCheckMaxPidProbability = new TGCheckButton(fDaugFrame, "Check");
+ fDaugFrame->AddFrame(fDaughterCheckMaxPidProbability, new TGLayoutHints(kLHintsLeft, 0, 2, 1, 1));
+ fDaughterCheckMaxPidProbability->Connect("Toggled(Bool_t)", "AliEveKinkListEditor", this, "DoCheckDaugPid()");
+
+ fDaughterLevelPidProbability = new TGNumberEntry(fDaugFrame, 0.5, 3, -1, TGNumberFormat::kNESRealTwo, TGNumberFormat::kNEANonNegative,TGNumberFormat::kNELLimitMinMax, 0, 1);
+ fDaughterLevelPidProbability->Resize(50,20);
+ fDaughterLevelPidProbability->Connect("ValueSet(Long_t)", "AliEveKinkListEditor", this, "DoSelectDaugProb()");
+ fDaugFrame->AddFrame(fDaughterLevelPidProbability, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 1, 1));
+}
+
+/******************************************************************************/
+
+//______________________________________________________________________________
+void AliEveKinkListEditor::SetModel(TObject* obj)
+{
+ // Set model object.
+
+ fM = dynamic_cast<AliEveKinkList*>(obj);
+
+ // Set values of widgets
+ // fXYZZ->SetValue(fM->GetXYZZ());
+
+ fMinMaxRCut->SetValues(fM->fMinRCut, fM->fMaxRCut);
+ fMinMaxKinkAngleCut->SetValues(fM->fMinKinkAngle, fM->fMaxKinkAngle);
+ fMinMaxPt->SetValues(fM->fMinPt, fM->fMaxPt);
+ fMinMaxInvariantMass->SetValues(fM->fMinInvariantMass, fM->fMaxInvariantMass);
+}
+
+/******************************************************************************/
+
+// Implements callback/slot methods
+
+//______________________________________________________________________________
+
+void AliEveKinkListEditor::DoMinMaxRCut()
+{
+ fM->FilterByRadius(fMinMaxRCut->GetMin(), fMinMaxRCut->GetMax());
+}
+
+void AliEveKinkListEditor::DoMinMaxKinkAngleCut()
+{
+ fM->FilterByKinkAngle(fMinMaxRCut->GetMin(), fMinMaxRCut->GetMax());
+}
+
+void AliEveKinkListEditor::DoMinMaxPt()
+{
+ fM->FilterByPt(fMinMaxPt->GetMin(), fMinMaxPt->GetMax());
+}
+
+void AliEveKinkListEditor::DoMinMaxInvariantMass()
+{
+ fM->FilterByInvariantMass(fMinMaxInvariantMass->GetMin(), fMinMaxInvariantMass->GetMax(),13);
+}
+
+void AliEveKinkListEditor::DoSelectDaugPid(Int_t rDaugPid)
+{
+ fM->SetDaugCheckedPid(rDaugPid);
+ Update();
+}
+
+void AliEveKinkListEditor::DoCheckDaugPid()
+{
+ Int_t lDaugPid = fM->GetDaugCheckedPid();
+ Float_t lDaugProb = fM->GetDaugCheckedProb();
+ if (lDaugPid) {
+ fM->FilterByCheckedPidMinProb(fDaughterCheckMaxPidProbability->IsOn(),lDaugPid,lDaugProb);
+ printf("Selection for daughter pid %d prob %.2f \n",lDaugPid,lDaugProb);
+ Update();
+ }
+}
+
+void AliEveKinkListEditor::DoSelectDaugProb()
+{
+ Float_t rMinDaugProb = (Float_t)fDaughterLevelPidProbability->GetNumber();
+ fM->SetDaugCheckedProb(rMinDaugProb);
+ Update();
+}
--- /dev/null
+// $Id$
+// Author: Paraskevi Ganoti: 2009
+
+/**************************************************************************
+ * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
+ * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
+ * full copyright notice. *
+ **************************************************************************/
+
+#ifndef AliEveKinkListEditor_H
+#define AliEveKinkListEditor_H
+
+#include "TGedFrame.h"
+
+class TGButton;
+class TGCheckButton;
+class TGNumberEntry;
+class TGColorSelect;
+class TEveGDoubleValuator;
+class TGComboBox;
+
+class AliEveKinkList;
+
+//______________________________________________________________________________
+// Short description of AliEveKinkListEditor
+//
+
+class AliEveKinkListEditor : public TGedFrame
+{
+public:
+ AliEveKinkListEditor(const TGWindow* p=0, Int_t width=170, Int_t height=30,
+ UInt_t options=kChildFrame, Pixel_t back=GetDefaultFrameBackground());
+ virtual ~AliEveKinkListEditor() {}
+
+ virtual void SetModel(TObject* obj);
+
+ // Declare callback/slot methods
+ void DoMinMaxRCut();
+ void DoMinMaxKinkAngleCut();
+ void DoMinMaxPt();
+ void DoMinMaxInvariantMass();
+ void DoSelectDaugPid(Int_t rDaugPid);
+ void DoCheckDaugPid();
+ void DoSelectDaugProb();
+
+protected:
+ AliEveKinkList *fM; // Model object.
+
+ // Declare widgets
+ // TGSomeWidget* fXYZZ;
+ TEveGDoubleValuator* fMinMaxRCut;
+ TEveGDoubleValuator* fMinMaxKinkAngleCut;
+ TEveGDoubleValuator* fMinMaxPt;
+ TEveGDoubleValuator* fMinMaxInvariantMass;
+ TGComboBox* fDaughterSpecies;
+ TGCheckButton* fDaughterCheckMaxPidProbability;
+ TGNumberEntry* fDaughterLevelPidProbability;
+
+private:
+ AliEveKinkListEditor(const AliEveKinkListEditor&); // Not implemented
+ AliEveKinkListEditor& operator=(const AliEveKinkListEditor&); // Not implemented
+
+ ClassDef(AliEveKinkListEditor, 0); // GUI editor for AliEveKinkList.
+};
+
+#endif
#pragma link C++ class AliEveV0List+;
#pragma link C++ class AliEveV0Editor+;
#pragma link C++ class AliEveV0ListEditor+;
+
+// AliEveKink
+#pragma link C++ class AliEveKink+;
+#pragma link C++ class AliEveKinkList+;
+#pragma link C++ class AliEveKinkEditor+;
+#pragma link C++ class AliEveKinkListEditor+;
--- /dev/null
+// $Id$
+// Main authors: Paraskevi Ganoti: 2009
+
+/**************************************************************************
+ * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
+ * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
+ * full copyright notice. *
+ **************************************************************************/
+
+void esd_kink_init_rectrackMother(TEveRecTrack& rt, AliExternalTrackParam* tp)
+{
+ Double_t pbuf[3], vbuf[3];
+
+ rt.fSign = tp->GetSign();
+ tp->GetXYZ(vbuf); rt.fV.Set(vbuf);
+ tp->GetPxPyPz(pbuf); rt.fP.Set(pbuf);
+
+ rt.fBeta = 1; // ep/TMath::Sqrt(ep*ep + mc*mc);
+}
+
+void esd_kink_init_rectrackDaughter(TEveRecTrack& rt, AliExternalTrackParam* tp, TEveVector* svt,TEveVector* spt)
+{
+ rt.fSign = tp->GetSign();
+ rt.fV.Set(*svt);
+ rt.fP.Set(*spt);
+
+ rt.fBeta = 1; // ep/TMath::Sqrt(ep*ep + mc*mc);
+}
+
+AliEveKink* esd_make_kink(TEveTrackPropagator* rnrStyleMoth,TEveTrackPropagator* rnrStyleDaugh, AliESDtrack* moth, AliESDtrack* daug, AliESDkink* kink, Int_t i)
+{
+ TEveRecTrack rcMoth;
+ TEveRecTrack rcDaug;
+ TEveRecKink rcKink;
+
+ const TVector3 p1(kink->GetMotherP());
+ rcKink.fPMother.Set(p1);
+ const TVector3 p2(kink->GetDaughterP());
+ rcKink.fPDaughter.Set(p2);
+
+ const TVector3 r1(kink->GetPosition());
+ rcKink.fVKink.Set(r1);
+
+ for (Int_t j=0; j<3; ++j) rckink.fKinkAngle[j]=kink->GetAngle(j);
+
+ Double_t r[3], r2[3];
+
+ moth->GetTPCInnerParam()->GetXYZ(r2); rcKink.fVMother.Set(r2);
+ daug->GetOuterParam()->GetXYZ(r); rcKink.fVDaughter.Set(r);
+
+ esd_kink_init_rectrackMother(rcMoth, (moth->GetTPCInnerParam()));
+ rcMoth.fIndex = moth->GetID();
+
+ esd_kink_init_rectrackDaughter(rcDaug, daug->GetOuterParam(), &rcKink.fVKink, &rcKink.fPDaughter);
+ rcDaug.fIndex = daug->GetID();
+
+ AliEveKink* myKink = new AliEveKink(&rcMoth, &rcDaug, &rcKink, rnrStyleMoth,rnrStyleDaugh);
+
+ myKink->SetElementName(Form("ESDkink %d \n", i));
+ myKink->SetESDKinkIndex(i);
+
+ for (Int_t j=0; j<3; ++j) myKink->SetKinkAngle(j, kink->GetAngle(j));
+ Double_t daugProbability[10];
+ Double_t daugP = 0.0;
+ daug->GetESDpid(daugProbability);
+ daugP = daug->P();
+
+ // ****** Tentative particle type "concentrations"
+ Double_t c[5]={0.01, 0.01, 0.85, 0.10, 0.05};
+ AliPID::SetPriors(c);
+
+ AliPID daugPid(daugProbability);
+
+ Int_t daugMostProbPdg = 0;
+
+ switch (daugPid.GetMostProbable()){
+ case 0:
+ daugMostProbPdg = 11; break;
+ case 1:
+ daugMostProbPdg = 13; break;
+ case 2:
+ daugMostProbPdg = 211; break;
+ default :
+ daugMostProbPdg = 13; break;
+ }
+
+ Float_t daugMaxProbPid = daugPid.GetProbability(daugPid.GetMostProbable());
+
+ myKink->SetMaxProbPdgPid(daugMostProbPdg,daugMaxProbPid);//????????????
+
+ return myKink;
+}
+
+
+AliEveKinkList* esd_kink()
+{
+ AliESDEvent* esd = AliEveEventManager::AssertESD();
+ AliEveKinkList* cont = new AliEveKinkList("ESD kink");
+ cont->SetMainColor(3); // green
+ TEveTrackPropagator* rnrStyleMoth = cont->GetPropagatorMoth();
+ rnrStyleMoth->SetMagField( 0.1*esd->GetMagneticField() );
+ TEveTrackPropagator* rnrStyleDaugh = cont->GetPropagatorDaugh();
+ rnrStyleDaugh->SetMagField( 0.1*esd->GetMagneticField() );
+ rnrStyleDaugh->SetMaxR(520);
+ gEve->AddElement(cont);
+
+ Int_t count = 0;
+// for (Int_t n=0; n<esd->GetNumberOfKinks(); ++n)
+// {
+// AliESDkink *kink = esd->GetKink(n); //???????????
+// printf("kink number = %d, label of mother = %d , label of daug = %d --", n, kink->GetLabel(0), kink->GetLabel(1));
+// } To be investigated...
+ for (Int_t n=0; n<esd->GetNumberOfTracks(); ++n)
+ {
+ AliESDtrack* mtrack = esd->GetTrack(n);
+ if(mtrack->GetKinkIndex(0)<0){
+
+ AliESDkink *kink = new AliESDkink;
+
+ kink=esd->GetKink(TMath::Abs(mtrack->GetKinkIndex(0))-1);
+
+ for (Int_t m=0; m<esd->GetNumberOfTracks(); ++m)
+ {
+ AliESDtrack * dtrack = esd->GetTrack(m);
+
+ if((dtrack->GetKinkIndex(0)>0)&&(dtrack->GetKinkIndex(0)==TMath::Abs(mtrack->GetKinkIndex(0)))) {
+ AliESDtrack* mothTr = esd->GetTrack(n);
+ AliESDtrack* daugTr = esd->GetTrack(m);
+
+ AliEveKink* myKink = esd_make_kink(rnrStyleMoth, rnrStyleDaugh, mothTr, daugTr, kink, (TMath::Abs(mtrack->GetKinkIndex(0))-1));
+ if (myKink)
+ {
+ gEve->AddElement(myKink, cont);
+ ++count;
+ }
+ }
+ } // inner track loop
+
+
+ } //mother kink index <0
+ } // Outer track loop
+
+ cont->SetTitle("test");
+
+ cont->MakeKinks();
+ gEve->Redraw3D();
+
+ return cont;
+}
--- /dev/null
+// $Id$
+// Main authors: Paraskevi Ganoti: 2009
+
+/**************************************************************************
+ * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
+ * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
+ * full copyright notice. *
+ **************************************************************************/
+
+void esd_kink_fill_pointset(TEvePointSet* ps)
+{
+ AliESDEvent* esd = AliEveEventManager::AssertESD();
+
+ for (Int_t n=0; n<esd->GetNumberOfTracks(); ++n)
+ {
+ AliESDtrack* track = esd->GetTrack(n);
+ if(track->GetKinkIndex(0)<0){
+
+ AliESDkink *kink = esd->GetKink(TMath::Abs(track->GetKinkIndex(0))-1);
+ const TVector3 Position(kink->GetPosition());
+ ps->SetNextPoint(Position.X(), Position.Y(), Position.Z());
+ ps->SetPointId(kink);
+ }
+ }
+
+}
+
+TEvePointSet* esd_kink_points()
+{
+ TEvePointSet* points = new TEvePointSet("Kink vertex locations");
+
+ esd_kink_fill_pointset(points);
+
+ points->SetTitle(Form("N=%d", points->Size()));
+ points->SetMarkerStyle(4);
+ points->SetMarkerSize(1.5);
+ points->SetMarkerColor(kOrange+8);
+
+ gEve->AddElement(points);
+ gEve->Redraw3D();
+
+ return points;
+}
exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC V0", "esd_V0.C", "esd_V0"));
exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC CSCD", "esd_cascade_points.C", "esd_cascade_points"));
exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC CSCD", "esd_cascade.C", "esd_cascade"));
+ exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC KINK", "esd_kink_points.C", "esd_kink_points"));
+ exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC KINK", "esd_kink.C", "esd_kink"));
exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC Track", "esd_tracks.C", "esd_tracks", "", kFALSE));
exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC Track", "esd_tracks.C", "esd_tracks_MI", "", kFALSE));