ROOT logo
// $Id$
// Main author: Davide Caffarri 2009
// Base header class to HF visualization

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

#include "AliAODRecoDecay.h"
#include "AliEveTrack.h"

#include <TEveVSDStructs.h>
#include <TPolyLine3D.h>

#include <TPDGCode.h>


class TH1F;
class TH2F;


class AliEveHFList;

class AliEveHF : public TEvePointSet
{
  friend class AliEveHFList; //friend class for the list of HF in the same event
  friend class AliEveHFEditor; //friend class for the list of HF visualization

public:
  AliEveHF();
  AliEveHF(TEveRecTrack* tNeg, TEveRecTrack* tPos, Double_t primVtx[3], AliAODRecoDecay* aodObj, TEveTrackPropagator* rs);
  virtual ~AliEveHF();

  void MakeHF();

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

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

  //HF Property

  Float_t GetPhi()     { return fRecDecayHF.Phi(); }
  Float_t GetEta()     { return fRecDecayMomHF.Eta(); }
  Float_t GetRadius()  { return fRecDecayHF.Perp(); }
  Float_t GetPt()      { return fRecDecayMomHF.Perp(); }

  Double_t GetInvariantMassPart()     { CalculateInvMass(fDecay); return fInvariantMassPart; }
  Double_t GetInvariantMassAntiPart() { CalculateInvMass(fDecay); return fInvariantMassAntiPart; }

  Float_t GetChi2Vtx() const { return fChi2SecondVtx; }
  Float_t GetCosPointingAngle() const {return fPointingAngleHF; }

  AliAODRecoDecay *GetAODobj() const {return fAODobj; }

  Int_t GetAODIndex() const { return fAODIndex; }
  void  SetAODIndex(Int_t ind) { fAODIndex = ind;}

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

  //Prongs Property

  Double_t GetProngDCA(Int_t iProng)const { return fProngDCA[iProng]; }
  void SetProngDCA() const ;

  Double_t Getd0Prong(Int_t iProng)const  { return fProngd0[iProng]; }
  void Setd0Prong() const ;

  void CalculateInvMass(Int_t decay);

  Bool_t SelectInvMass(Int_t decay, Float_t decayCuts);

  void      SetMaxProbPdgPid();
  Int_t     GetPdgProngMaxProb(Int_t iProng)const { return fProngMaxProbPdg[iProng]; }
  Double_t  GetPidProngMaxProb(Int_t iProng)const { return fProngMaxProbPid[iProng]; }

  TEveTrackPropagator* GetPropagator() const  { return fRnrStyle; }

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

  TEveLine*  GetPointingLine()const { return fPointingLine; }

protected:

  AliAODRecoDecay  *fAODobj;  //AOD object of the HF decay. 

  TEveVector  fRecBirthHF;    // Reconstucted birth point of neutral particle
  TEveVector  fRecDecayHF;    // Point of closest approach
  TEveVector  fRecDecayMomHF;   // Momentum of the HF 
  Double_t    fPointingAngleHF; // Track Pointing Angle

  TEveTrack        *fNegTrack;  //Negative daughter of the HF
  TEveTrack        *fPosTrack;  //Positive daughter of the HF

  TEveTrackPropagator *fRnrStyle;  //Eve propagator for the track 

  TEveLine         *fPointingLine;  //Flight Line of the HF 

  Int_t             fnProng;      // Number of Prong.
  Int_t             fAODIndex;    // Index in HF loop array.
  Double_t          fChi2SecondVtx;      //Secondary Vertex Chi-square.

  Double_t          *fProngDCA;//[fnProng] Distance at the point of closest approach.
  Double_t          *fProngd0;//[fnProng] Impact Paramter if each prong.
  Int_t             *fProngMaxProbPdg;//[fnProng] Maximum PDG probability for the negative daughter
  Double_t          *fProngMaxProbPid;//[fnProng] Maximum PID probability for the negative daughter

  Double_t           fInvariantMassPart; //Invariant Mass of the particle
  Double_t           fInvariantMassAntiPart; //Invariant Mass of the Antiparticle

  Int_t              fDecay; //Index for the type of decay

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

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


/******************************************************************************/
// AliEveHFList
/******************************************************************************/
class AliEveHFList : public TEveElementList
{
  friend class AliEveHFListEditor; //Class for the list of HF visualization 


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

  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, Int_t ip)
  {fProngColor[ip] = cNeg; fProngColor[ip++] = cPos;}

  virtual Bool_t CanEditMainColor() const { return kTRUE; }

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

  Bool_t GetRnrHFvtx()     const { return fRnrHFvtx; }
  Bool_t GetRnrHFpath()    const { return fRnrHFpath; }
  Bool_t GetRnrDaughters() const { return fRnrDaughters; }

  void   MakeHFs();

  void   FilterByPt(Float_t minPt, Float_t maxPt);
  void   FilterByRadius(Float_t minR, Float_t maxR);
  void   FilterByCosPointingAngle(Float_t minCosPointingAngle, Float_t maxCosPointingAngle);
  void   FilterByDCA(Float_t minDaughterDCA, Float_t maxDaughterDCA);
  void   FilterByd0(Float_t mind0, Float_t maxd0);
  //void   FilterByCheckedPidMinProb(Int_t rFlag, Int_t rDaughter, Int_t rPid, Float_t rProb);

  // void   SetProngCheckedPid(Int_t rProngCheckedPid) const;
  Int_t  GetProngCheckedPid(Int_t iProng) {return fProngCheckedPid[iProng];}
  // void   SetProngCheckedProb(Float_t rProngCheckedProb) const;
  // Float_t  GetProngCheckedProb(Int_t iProng) const  { return fProngCheckedProb[iProng]; }

  void   FilterByInvariantMass (Int_t decay, Float_t deltaInvariantMass);

protected:
  TString              fTitle; 

  TEveTrackPropagator *fRnrStyle;

  Bool_t               fRnrDaughters; //variable for HF daughters visualization
  Bool_t               fRnrHFvtx; //variable for the HF vertex visualization
  Bool_t               fRnrHFpath; //variable for the visualization of the HF line

  Color_t*             fProngColor;//[fnProng]

  Float_t              fMinRCut; //minimum cut for the radius 
  Float_t              fMaxRCut; //maximum cut for the radius

  Float_t              fMinDaughterDCA; //minimum cut for the DCA of the daughter particles
  Float_t              fMaxDaughterDCA; //maximum cut for the DCA of the daughter particles

  Float_t              fMinPt; //minimum cut for the Pt
  Float_t              fMaxPt; //maximum cut for the Pt

  Float_t              fMinCosPointingAngle; //minimum cut for the cosine of the pointing angle 
  Float_t              fMaxCosPointingAngle; //maximum cut for the cosine of the pointing angle 

  Float_t              fMind0; //minimum cut for the impact parameter
  Float_t              fMaxd0; //maximum cut for the impact parameter

  Int_t*               fProngCheckedPid;//[fnProng]

  Float_t*             fProngCheckedProb;//[fnProng]

  Float_t              fDeltaInvariantMass; //invariant mass window to select the candidate
  Int_t                fDecay; //index for the type of decay

private:
  void Init();

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

  ClassDef(AliEveHFList,0); // A list of AliEveHF objecs.
};


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