ROOT logo
// $Id$
// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

/**************************************************************************
 * 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 AliEveV0_H
#define AliEveV0_H


//------------------------------------------------------------------------------
// AliEveV0
//------------------------------------------------------------------------------
//
// Representation of a reconstructed V0.
//
//
//------------------------------------------------------------------------------
// AliEveV0List
//------------------------------------------------------------------------------
//
// Container for AliEveV0s.
//
// Allows runtime selection by pT and DCA of daughters, radius of V0
// creation and PID priobabilities

//==============================================================================

#include "AliEveTrack.h"
#include <TEveVSDStructs.h>

#include <TPolyLine3D.h>

#include <TPDGCode.h>

class TH1F;
class TH2F;


class AliEveV0List;

class AliEveV0 : public TEvePointSet
{
  friend class AliEveV0List;
  friend class AliEveV0Editor;

public:
  AliEveV0();
  AliEveV0(TEveRecTrack* tNeg, TEveRecTrack* tPos, TEveRecV0* v0,
     TEveTrackPropagator* rs);
  virtual ~AliEveV0();

  void MakeV0();

  virtual void  SetMainColor(Color_t col)
  {
    TEvePointSet::SetMainColor(col);
    fPointingLine->SetLineColor(fMarkerColor);
  }

  void SetRnrStyle(TEveTrackPropagator* rs) { fRnrStyle = rs; }

  Float_t GetDaughterDCA() const { return fDaughterDCA; }
  void SetDaughterDCA(Float_t dca) { fDaughterDCA = dca; }

  Float_t GetPhi()    const { return fRecDecayP.Phi(); }
  Float_t GetEta()    const { return fRecDecayP.Eta(); }
  Float_t GetRadius() const { return fRecDecayV.Perp(); }
  Float_t GetPt()     const { return fRecDecayP.Perp(); }
  Float_t GetMomentum() const { return fRecDecayP.Mag(); }

  Float_t GetInvMass(Int_t nPdgCode, Int_t pPdgCode) const;
  Float_t GetK0sInvMass() const { return GetInvMass(kPiMinus,kPiPlus); }
  Float_t GetLambdaInvMass() const { return GetInvMass(kPiMinus,kProton); }
  Float_t GetAntiLambdaInvMass() const { return GetInvMass(kProton,kPiPlus); }

  Bool_t GetOnFlyStatus()    const { return fOnFlyStatus; }
  void   SetOnFlyStatus(Bool_t fs) { fOnFlyStatus = fs; }

  void    SetMaxProbPdgPid(Int_t iDaughter, Int_t rPdg, Float_t rPid);
  Int_t   GetNegMaxProbPdg() const { return fNegMaxProbPdg; }
  Int_t   GetPosMaxProbPdg() const { return fPosMaxProbPdg; }
  Float_t GetNegMaxProbPid() const { return fNegMaxProbPid; }
  Float_t GetPosMaxProbPid() const { return fPosMaxProbPid; }

  Int_t GetESDIndex() const { return fESDIndex; }
  void  SetESDIndex(Int_t ind) { fESDIndex = ind;}

  virtual const Text_t* GetName()  const { return Form("ESDv0_%i",fESDIndex); }
  virtual const Text_t* GetTitle() const { return Form("ESDv0_%i",fESDIndex); }

  TEveTrackPropagator* GetPropagator() const  { return fRnrStyle; }

  AliEveTrack* GetNegTrack() const { return fNegTrack; }
  AliEveTrack* GetPosTrack() const { return fPosTrack; }

  TEveLine*  GetPointingLine() const { return fPointingLine; }

protected:
  TEveVector fRecBirthV;    // Reconstucted birth point of neutral particle
  TEveVector fRecDecayV;    // Point of closest approach
  TEveVector fRecDecayP;    // Reconstructed momentum of decayed particle.

  AliEveTrack        *fNegTrack; // Representation of negative track.
  AliEveTrack        *fPosTrack; // Representation of positive track.

  TEveTrackPropagator *fRnrStyle; // Track propagator for neg/pos track.

  TEveLine         *fPointingLine; // Representation of pointing line.

  Int_t             fESDIndex;    // Index in ESD V0 array.
  Bool_t            fOnFlyStatus; // Reconstructed during tracking.
  Float_t           fDaughterDCA; // Distance at the point of closest approach. 
  Float_t           fChi2V0;      // Some Chi-square.

  Int_t             fNegMaxProbPdg; // Maximum PDG probability for the negative daughter
  Int_t             fPosMaxProbPdg; // Maximum PDG probability for the positive daughter
  Float_t           fNegMaxProbPid; // Maximum PID probability for the negative daughter
  Float_t           fPosMaxProbPid; // Maximum PID probability for the positive daughter

private:
  AliEveV0(const AliEveV0&);            // Not implemented
  AliEveV0& operator=(const AliEveV0&); // Not implemented

  ClassDef(AliEveV0, 0); // Visual representation of a AliEveV0.
};


/******************************************************************************/
// AliEveV0List
/******************************************************************************/

class AliEveV0List : public TEveElementList
{
  friend class AliEveV0ListEditor;

public:
  AliEveV0List();
  AliEveV0List(TEveTrackPropagator* rs);
  AliEveV0List(const Text_t* name, TEveTrackPropagator* rs=0);
  virtual ~AliEveV0List() {}

  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) {
    fNegColor = cNeg; fPosColor = cPos;}

  virtual Bool_t CanEditMainColor() const { return kTRUE; }

  void  SetRnrStyle(TEveTrackPropagator* rst) { fRnrStyle = rst; }
  TEveTrackPropagator* GetPropagator()        { return fRnrStyle; }

  Bool_t GetRnrV0vtx()     const { return fRnrV0vtx; }
  Bool_t GetRnrV0path()    const { return fRnrV0path; }
  Bool_t GetRnrDaughters() const { return fRnrDaughters; }

  void   MakeV0s();

  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   FilterByCheckedPidMinProb(Int_t rFlag, Int_t rDaughter, Int_t rPid, Float_t rProb);
  void   SetNegCheckedPid(Int_t rNegCheckedPid) {fNegCheckedPid = rNegCheckedPid;}
  void   SetPosCheckedPid(Int_t rPosCheckedPid) {fPosCheckedPid = rPosCheckedPid;}
  Int_t  GetNegCheckedPid() const { return fNegCheckedPid; }
  Int_t  GetPosCheckedPid() const { return fPosCheckedPid; }

  void   SetNegCheckedProb(Float_t rNegCheckedProb) {fNegCheckedProb = rNegCheckedProb;}
  void   SetPosCheckedProb(Float_t rPosCheckedProb) {fPosCheckedProb = rPosCheckedProb;}
  Float_t  GetNegCheckedProb() const { return fNegCheckedProb; }
  Float_t  GetPosCheckedProb() const { return fPosCheckedProb; }

  void   FilterByInvariantMass(Float_t minPt, Float_t maxPt, Int_t nPdgCode, Int_t pPdgCode);

protected:
  TString              fTitle;    // Title of the object.

  TEveTrackPropagator *fRnrStyle; // Track propagator to be passed do conteined V0s.

  Bool_t               fRnrDaughters; // Flag - display daughter tracks.
  Bool_t               fRnrV0vtx;     // Flag - display V0 vertex.
  Bool_t               fRnrV0path;    // Flag - display V0 path.

  Color_t              fNegColor;     // Color for negative tracks.
  Color_t              fPosColor;     // Color for positive tracks.

  Float_t              fMinRCut;      // Minimum radius cut.
  Float_t              fMaxRCut;      // Maximum radius cut.

  Float_t              fMinDaughterDCA; // Minimum daughter DCA cut.
  Float_t              fMaxDaughterDCA; // Maximum daughter DCA cut.

  Float_t              fMinPt;          // Minimum Pt cut.
  Float_t              fMaxPt;          // Maximum Pt cut.

  Int_t                fNegCheckedPid;  // BORIS ?
  Int_t                fPosCheckedPid;  // BORIS ?

  Float_t              fNegCheckedProb; // BORIS ?
  Float_t              fPosCheckedProb; // BORIS ?

  Float_t              fMinInvariantMass; // Minimum invariant mass cut.
  Float_t              fMaxInvariantMass; // Maximum invariant mass cut.

private:
  void Init();

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

  ClassDef(AliEveV0List, 0); // A list of AliEveV0 objecs.
};


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