ROOT logo
// $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

#include <TEvePointSet.h>
#include <TEveVSDStructs.h>

class TEveTrack;
class TEveTrackPropagator;

class TH1F;
class TH2F;

class AliEveKinkList;

//------------------------------------------------------------------------------
// AliEveKink
//
// Graphical representation of a kink.
//------------------------------------------------------------------------------

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;  // Reconstructed position of kink.
  TEveVector       fMotherMomentum;   // Momentum of mother track.
  TEveVector       fDaughterMomentum; // Momentum of daugter track.

  TEveTrack        *fMotherTrack;     // Graphical representation of mother track.
  TEveTrack        *fDaughterTrack;   // Graphical representation of daughter track.

  TEveTrackPropagator  *fRnrStyleMoth;  // Track-propagator for mother track.
  TEveTrackPropagator  *fRnrStyleDaugh; // Track-propagator for daughter track.

  Int_t             fESDKinkIndex;    // Index in ESD Kink array.
  Double_t          fKinkAngle[3];    // TODO

  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
//
// Container for AliEveKink objects
// Provides managmenet methods for setting cuts and common visualization
// parameters.
//------------------------------------------------------------------------------

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; }   //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 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;     // Default track-propagator for mother tracks.
  TEveTrackPropagator *fRnrStyleDaugh;    // Default track-propagator for daughter tracks.

  Bool_t               fRnrKinkDaughter;  // Flag - show daughter tracks.
  Bool_t               fRnrKinkvtx;       // Flag - show kink vertex.

  Color_t              fMothColor;        // Color of mother tracks.
  Color_t              fDaugColor;        // Color of daughter tracks.

  Float_t              fMinRCut;          // Cut - minimum kink radius.
  Float_t              fMaxRCut;          // Cut - maximum kink radius.

  Float_t              fMinKinkAngle;     // Cut - minimum kink angle.
  Float_t              fMaxKinkAngle;     // Cut - maximum kink angle.

  Float_t              fMinPt;            // Cut - minimum pT of mother track.
  Float_t              fMaxPt;            // Cut - maximum pT of mother track.

  Float_t              fMinInvariantMass; // Cut - minimum invariant mass.
  Float_t              fMaxInvariantMass; // Cut - maximum invariant mass.

  Int_t                fDaugCheckedPid;   // Cut - PID of daughter track.
  Float_t              fDaugCheckedProb;  // Cut - min PID probability of the daughter track.

private:
  void Init();

  AliEveKinkList(const AliEveKinkList&);            // Not implemented
  AliEveKinkList& operator=(const AliEveKinkList&); // Not implemented

  ClassDef(AliEveKinkList, 0); // A list of AliEveKink objecs.
};


#endif
 AliEveKink.h:1
 AliEveKink.h:2
 AliEveKink.h:3
 AliEveKink.h:4
 AliEveKink.h:5
 AliEveKink.h:6
 AliEveKink.h:7
 AliEveKink.h:8
 AliEveKink.h:9
 AliEveKink.h:10
 AliEveKink.h:11
 AliEveKink.h:12
 AliEveKink.h:13
 AliEveKink.h:14
 AliEveKink.h:15
 AliEveKink.h:16
 AliEveKink.h:17
 AliEveKink.h:18
 AliEveKink.h:19
 AliEveKink.h:20
 AliEveKink.h:21
 AliEveKink.h:22
 AliEveKink.h:23
 AliEveKink.h:24
 AliEveKink.h:25
 AliEveKink.h:26
 AliEveKink.h:27
 AliEveKink.h:28
 AliEveKink.h:29
 AliEveKink.h:30
 AliEveKink.h:31
 AliEveKink.h:32
 AliEveKink.h:33
 AliEveKink.h:34
 AliEveKink.h:35
 AliEveKink.h:36
 AliEveKink.h:37
 AliEveKink.h:38
 AliEveKink.h:39
 AliEveKink.h:40
 AliEveKink.h:41
 AliEveKink.h:42
 AliEveKink.h:43
 AliEveKink.h:44
 AliEveKink.h:45
 AliEveKink.h:46
 AliEveKink.h:47
 AliEveKink.h:48
 AliEveKink.h:49
 AliEveKink.h:50
 AliEveKink.h:51
 AliEveKink.h:52
 AliEveKink.h:53
 AliEveKink.h:54
 AliEveKink.h:55
 AliEveKink.h:56
 AliEveKink.h:57
 AliEveKink.h:58
 AliEveKink.h:59
 AliEveKink.h:60
 AliEveKink.h:61
 AliEveKink.h:62
 AliEveKink.h:63
 AliEveKink.h:64
 AliEveKink.h:65
 AliEveKink.h:66
 AliEveKink.h:67
 AliEveKink.h:68
 AliEveKink.h:69
 AliEveKink.h:70
 AliEveKink.h:71
 AliEveKink.h:72
 AliEveKink.h:73
 AliEveKink.h:74
 AliEveKink.h:75
 AliEveKink.h:76
 AliEveKink.h:77
 AliEveKink.h:78
 AliEveKink.h:79
 AliEveKink.h:80
 AliEveKink.h:81
 AliEveKink.h:82
 AliEveKink.h:83
 AliEveKink.h:84
 AliEveKink.h:85
 AliEveKink.h:86
 AliEveKink.h:87
 AliEveKink.h:88
 AliEveKink.h:89
 AliEveKink.h:90
 AliEveKink.h:91
 AliEveKink.h:92
 AliEveKink.h:93
 AliEveKink.h:94
 AliEveKink.h:95
 AliEveKink.h:96
 AliEveKink.h:97
 AliEveKink.h:98
 AliEveKink.h:99
 AliEveKink.h:100
 AliEveKink.h:101
 AliEveKink.h:102
 AliEveKink.h:103
 AliEveKink.h:104
 AliEveKink.h:105
 AliEveKink.h:106
 AliEveKink.h:107
 AliEveKink.h:108
 AliEveKink.h:109
 AliEveKink.h:110
 AliEveKink.h:111
 AliEveKink.h:112
 AliEveKink.h:113
 AliEveKink.h:114
 AliEveKink.h:115
 AliEveKink.h:116
 AliEveKink.h:117
 AliEveKink.h:118
 AliEveKink.h:119
 AliEveKink.h:120
 AliEveKink.h:121
 AliEveKink.h:122
 AliEveKink.h:123
 AliEveKink.h:124
 AliEveKink.h:125
 AliEveKink.h:126
 AliEveKink.h:127
 AliEveKink.h:128
 AliEveKink.h:129
 AliEveKink.h:130
 AliEveKink.h:131
 AliEveKink.h:132
 AliEveKink.h:133
 AliEveKink.h:134
 AliEveKink.h:135
 AliEveKink.h:136
 AliEveKink.h:137
 AliEveKink.h:138
 AliEveKink.h:139
 AliEveKink.h:140
 AliEveKink.h:141
 AliEveKink.h:142
 AliEveKink.h:143
 AliEveKink.h:144
 AliEveKink.h:145
 AliEveKink.h:146
 AliEveKink.h:147
 AliEveKink.h:148
 AliEveKink.h:149
 AliEveKink.h:150
 AliEveKink.h:151
 AliEveKink.h:152
 AliEveKink.h:153
 AliEveKink.h:154
 AliEveKink.h:155
 AliEveKink.h:156
 AliEveKink.h:157
 AliEveKink.h:158
 AliEveKink.h:159
 AliEveKink.h:160
 AliEveKink.h:161
 AliEveKink.h:162
 AliEveKink.h:163
 AliEveKink.h:164
 AliEveKink.h:165
 AliEveKink.h:166
 AliEveKink.h:167
 AliEveKink.h:168
 AliEveKink.h:169
 AliEveKink.h:170
 AliEveKink.h:171
 AliEveKink.h:172
 AliEveKink.h:173
 AliEveKink.h:174
 AliEveKink.h:175
 AliEveKink.h:176
 AliEveKink.h:177
 AliEveKink.h:178
 AliEveKink.h:179
 AliEveKink.h:180