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 ALIEVECASCADE_H
#define ALIEVECASCADE_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */


//----------------------------------------------------------------------------
// This code defines the reconstructed cascade (ESD level) visualized with EVE
//
// Origin : Boris Hippolyte, IPHC (hippolyt@in2p3.fr)
// Modified : Antonin Maire, April 2009, IPHC (antonin.maire@cern.ch)
//----------------------------------------------------------------------------

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;     // Assumed birth point of cascade
  TEveVector 		fRecDecayV;     // Xi decay point : point of closest approach between the Xi daughters
  TEveVector 		fRecDecayP;     // Reconstructed momentum of the cascade, at the Xi decay
  TEveVector 		fRecDecayV0;    // Reconstructed birth point of neutral daughter
  
  
  AliEveTrack 		*fBacTrack;	 //! Eve track for the bachelor of the cascade
  AliEveTrack 		*fNegTrack;	 //! Eve track for the neg V0 dghter, within the cascade
  AliEveTrack 		*fPosTrack;	 //! Eve track for the pos V0 dghter, within the cascade

  TEveTrackPropagator 	*fRnrStyle;	 //! track propagator

  TEveLine         	*fPointingCurve; //! Curve meant model the Xi trajectory
  TEveLine         	*fV0Path;	 //! Line meant to model the V0 path of the cascade

  Int_t  		fESDIndex;       // Index in ESD Cascade array.
  Float_t 		fDaughterDCA;    // Distance at the point of closest approach, between both Xi daughters
  Float_t 		fChi2Cascade;    // Some Chi-square.
  TVector3		fLambdaP;	 // Momentum of Lambda (V0 in cascade), at its decay point
  TVector3		fBachP;	 	 // Momentum of Bachelor, at the Xi decay point

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

  ClassDef(AliEveCascade, 1); // Visual representation of a AliEveCascade.
};


/******************************************************************************/
// AliEveCascadeList
/******************************************************************************/

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;			// title

  TEveTrackPropagator *fRnrStyle;		//! Rnr Style

  Bool_t               fRnrDaughters;		// Render state for the cascade daughters
  Bool_t               fRnrCascadevtx;		// Render state for the cascade decay point
  Bool_t               fRnrCascadepath;		// Render state for the path between the prim. vertex and the "Xi" decay point

  Color_t              fBacColor;		// Color of the bachelor track

  Float_t              fMinRCut;		// Min transv. radius allowed for cascade selection
  Float_t              fMaxRCut;		// Max transv. radius allowed for cascade selection

  Float_t              fMinDaughterDCA;		// Min DCA between Xi daughters, allowed for cascade selection
  Float_t              fMaxDaughterDCA;		// Max DCA between Xi daughters, allowed for cascade selection

  Float_t              fMinPt;			// Min pt allowed for cascade selection
  Float_t              fMaxPt;			// Max pt allowed for cascade selection
  
  Int_t                fInvMassHyp;		// PdgCode of the inv. mass hypothesis for the cascade
  
  Float_t              fMinInvariantMass; 	// Minimum invariant mass cut.for cascade
  Float_t              fMaxInvariantMass; 	// Maximum invariant mass cut.for cascade

private:
  void Init();

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

  ClassDef(AliEveCascadeList, 0); // A list of AliEveCascade objecs.
};


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