ROOT logo
// $Id$
// Author: Stefano Carrazza 2010, CERN, stefano.carrazza@cern.ch

/**************************************************************************
 * Copyright(c) 1998-2009, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

#ifndef ALIEVELEGO_H
#define ALIEVELEGO_H

#include "TEveElement.h"

class AliESDEvent;
class AliEveEventSelector;
class AliEveMultiView;
class AliESDtrack;
class AliPhysicsSelection;

class TEveCalo3D;
class TEveCaloDataHist;
class TEveCaloLego;
class TEveCaloLegoOverlay;
class TEveScene;
class TEveViewer;
class TEveWindowSlot;
class TGLOverlayButton;
class TGLViewer;
class TH2F;

//______________________________________________________________________________
// 2D & 3D calorimeter like histograms from the ESD data.
//

class AliEveLego : public TEveElementList
{
public:
  AliEveLego(const char* name="AliEveLego");
  virtual ~AliEveLego();

  // Get Methods
  TEveCalo3D*       GetCalo3D()         {   return fCalo3d;           }
  TEveCalo3D*       GetCalo3DAllEvents(){   return fCalo3dAllEvents;  }
  TEveCaloDataHist* GetData()           {   return fData;             }
  TEveCaloDataHist* GetDataAllEvents()  {   return fDataAllEvents;    }
  AliESDEvent*      GetESD()            {   return fEsd;              }
  TEveCaloLego*     GetLego()           {   return fLego;             }
  TEveCaloLego*     GetLegoAllEvents()  {   return fLegoAllEvents;    }
  AliEveMultiView*  GetMultiView()      {   return fAl;               }
  Int_t             GetParticleType(AliESDtrack *track);
  Float_t           GetPtMax();
  Float_t           GetPtMaxAE();

  // Set Methods
  void SetCollisionCandidatesOnly();
  void SetMaxPt(Double_t val);
  void SetMaxPtAE(Double_t val);
  void SetParticleType(Int_t id, Bool_t status);
  void SetParticleTypeAE(Int_t id, Bool_t status);
  void SetThreshold(Double_t val);
  void SetThresholdAE(Double_t val);
  void SetTracks(Int_t id)   {  fTracksId = id;    Update();         }
  void SetTracksAE(Int_t id) {  fTracksIdAE = id;  FilterAllData();  }

  // Functions
  void              ApplyParticleTypeSelectionAE();
  TEveCaloLego*     CreateHistoLego();
  TEveCaloLego*     CreateHistoLego(TEveWindowSlot* slot);
  TEveCalo3D*       Create3DView();
  TEveCalo3D*       Create3DView(TEveWindowSlot* slot);
  void              CreateProjections(TEveWindowSlot* slot1,
                                      TEveWindowSlot* slot2);
  TEveCaloDataHist* FilterData();
  TEveCaloDataHist* FilterAllData();
  TEveCaloDataHist* LoadData();
  TEveCaloDataHist* LoadAllData();
  TEveCaloDataHist* LoadAllEvents();
  void              SwitchDataType(Bool_t status);
  void              Update();


private:
  Bool_t              fIsMC;                    // Switch to MC mode for AliPhysicsSelection
  Bool_t              fCollisionCandidatesOnly; // Activate flag when loading all events
  Bool_t              *fParticleTypeId;         // Determine how particles to show
  Bool_t              *fParticleTypeIdAE;       // Determine how particles to show
  Int_t               fTracksId;                // Determine tracks selection
  Float_t             fMaxPt;                   // Set maximum pT
  Int_t               fTracksIdAE;              // Determine tracks selection for all events
  Float_t             fMaxPtAE;                 // Determine maximum pT for all events
  AliESDEvent         *fEsd;                    // ESD tree
  AliPhysicsSelection *fPhysicsSelection;       // Physics selection object
  TH2F                *fHistopos;               // Positive charge histogram
  TH2F                *fHistoposAllEvents;      // Positive charge histogram for all events
  TH2F                *fHistoneg;               // Negative charge histogram
  TH2F                *fHistonegAllEvents;      // Negative charge histogram for all events
  TH2F                *fHistoElectrons;         // Electrons histogram
  TH2F                *fHistoElectronsAllEvents;// Electrons histogram all events
  TH2F                *fHistoMuons;             // Muons histogram
  TH2F                *fHistoMuonsAllEvents;    // Muons histogram all events
  TH2F                *fHistoPions;             // Pions histogram
  TH2F                *fHistoPionsAllEvents;    // Pions histogram all events
  TH2F                *fHistoKaons;             // Kaons histogram
  TH2F                *fHistoKaonsAllEvents;    // Kaons histogram all events
  TH2F                *fHistoProtons;           // Protons histogram
  TH2F                *fHistoProtonsAllEvents;  // Protons histogram all events
  TEveCaloDataHist    *fData;                   // Calo data for 2D, 3D histograms
  TEveCaloDataHist    *fDataAllEvents;          // Calo data for all events
  TEveCaloLego        *fLego;                   // Calo lego for histograms
  TEveCaloLego        *fLegoAllEvents;          // Calo lego for all events histograms
  TEveCalo3D          *fCalo3d;                 // 3D histogram for single event
  TEveCalo3D          *fCalo3dAllEvents;        // 3D histogram for all events
  TGLViewer           *fGlv;                    // Viewer object
  TEveViewer          *fHisto2dv;               // Viewer for histograms
  TEveScene           *fHisto2ds;               // Scene for 3d histogram
  TEveScene           *fHisto2ds2;              // Scene for 3d histogram new tab
  TEveViewer          *fHisto2dAllEventsv0;     // Viewer 1 for all events tab
  TEveViewer          *fHisto2dAllEventsv1;     // Viewer 2 for all events tab
  TEveViewer          *fHisto2dAllEventsv2;     // Viewer 3 for all events tab
  TEveViewer          *fHisto2dAllEventsv3;     // Viewer 4 for all events tab
  TEveScene           *fHisto2dAllEventss0;     // Scene for all events tab
  TEveScene           *fHisto2dAllEventss1;     // Scene for all events tab
  TEveScene           *fHisto2dAllEventss2;     // Scene for all events tab
  TEveScene           *fHisto2dAllEventss3;     // Scene for all events tab
  AliEveMultiView     *fAl;                     // AliEveMultiView object to create 2D projections
  TEveCaloLegoOverlay *fHisto2dLegoOverlay;     // Overlay for calo lego
  TEveCaloLegoOverlay *fHisto2dAllEventsLegoOverlay; // Overlay for calo lego all events
  TEveWindowSlot      *fHisto2dAllEventsSlot;   // Window slot for 2d all events histogram

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


  ClassDef(AliEveLego, 0); // Short description.
};

#endif
 AliEveLego.h:1
 AliEveLego.h:2
 AliEveLego.h:3
 AliEveLego.h:4
 AliEveLego.h:5
 AliEveLego.h:6
 AliEveLego.h:7
 AliEveLego.h:8
 AliEveLego.h:9
 AliEveLego.h:10
 AliEveLego.h:11
 AliEveLego.h:12
 AliEveLego.h:13
 AliEveLego.h:14
 AliEveLego.h:15
 AliEveLego.h:16
 AliEveLego.h:17
 AliEveLego.h:18
 AliEveLego.h:19
 AliEveLego.h:20
 AliEveLego.h:21
 AliEveLego.h:22
 AliEveLego.h:23
 AliEveLego.h:24
 AliEveLego.h:25
 AliEveLego.h:26
 AliEveLego.h:27
 AliEveLego.h:28
 AliEveLego.h:29
 AliEveLego.h:30
 AliEveLego.h:31
 AliEveLego.h:32
 AliEveLego.h:33
 AliEveLego.h:34
 AliEveLego.h:35
 AliEveLego.h:36
 AliEveLego.h:37
 AliEveLego.h:38
 AliEveLego.h:39
 AliEveLego.h:40
 AliEveLego.h:41
 AliEveLego.h:42
 AliEveLego.h:43
 AliEveLego.h:44
 AliEveLego.h:45
 AliEveLego.h:46
 AliEveLego.h:47
 AliEveLego.h:48
 AliEveLego.h:49
 AliEveLego.h:50
 AliEveLego.h:51
 AliEveLego.h:52
 AliEveLego.h:53
 AliEveLego.h:54
 AliEveLego.h:55
 AliEveLego.h:56
 AliEveLego.h:57
 AliEveLego.h:58
 AliEveLego.h:59
 AliEveLego.h:60
 AliEveLego.h:61
 AliEveLego.h:62
 AliEveLego.h:63
 AliEveLego.h:64
 AliEveLego.h:65
 AliEveLego.h:66
 AliEveLego.h:67
 AliEveLego.h:68
 AliEveLego.h:69
 AliEveLego.h:70
 AliEveLego.h:71
 AliEveLego.h:72
 AliEveLego.h:73
 AliEveLego.h:74
 AliEveLego.h:75
 AliEveLego.h:76
 AliEveLego.h:77
 AliEveLego.h:78
 AliEveLego.h:79
 AliEveLego.h:80
 AliEveLego.h:81
 AliEveLego.h:82
 AliEveLego.h:83
 AliEveLego.h:84
 AliEveLego.h:85
 AliEveLego.h:86
 AliEveLego.h:87
 AliEveLego.h:88
 AliEveLego.h:89
 AliEveLego.h:90
 AliEveLego.h:91
 AliEveLego.h:92
 AliEveLego.h:93
 AliEveLego.h:94
 AliEveLego.h:95
 AliEveLego.h:96
 AliEveLego.h:97
 AliEveLego.h:98
 AliEveLego.h:99
 AliEveLego.h:100
 AliEveLego.h:101
 AliEveLego.h:102
 AliEveLego.h:103
 AliEveLego.h:104
 AliEveLego.h:105
 AliEveLego.h:106
 AliEveLego.h:107
 AliEveLego.h:108
 AliEveLego.h:109
 AliEveLego.h:110
 AliEveLego.h:111
 AliEveLego.h:112
 AliEveLego.h:113
 AliEveLego.h:114
 AliEveLego.h:115
 AliEveLego.h:116
 AliEveLego.h:117
 AliEveLego.h:118
 AliEveLego.h:119
 AliEveLego.h:120
 AliEveLego.h:121
 AliEveLego.h:122
 AliEveLego.h:123
 AliEveLego.h:124
 AliEveLego.h:125
 AliEveLego.h:126
 AliEveLego.h:127
 AliEveLego.h:128
 AliEveLego.h:129
 AliEveLego.h:130
 AliEveLego.h:131
 AliEveLego.h:132
 AliEveLego.h:133
 AliEveLego.h:134
 AliEveLego.h:135
 AliEveLego.h:136
 AliEveLego.h:137
 AliEveLego.h:138