ROOT logo
#ifndef ALIEVEHLTEVENTMANAGER_H
#define ALIEVEHLTEVENTMANAGER_H


#include "TEveEventManager.h"
#include "AliHLTLoggingVariadicFree.h"

class AliHLTHOMERBlockDesc;
class TList;

class TEveManager;
class TEveScene;
class TEveProjectionManager;
class TTimer;
class TEveViewer;

class AliHLTEvePhos;
class AliHLTEveEmcal;
class AliHLTEveTPC;
class AliHLTEveHLT;
class AliHLTEveITS;
class AliHLTEveISSD;
class AliHLTEveISDD;
class AliHLTEveISPD;
class AliHLTEveTRD;
class AliHLTEveAny;
class AliHLTEveMuon;
class AliHLTEveMultCorr;
class AliEveEventBuffer;
class AliESDEvent;

class AliEveHLTEventManager : public TEveElementList { 

public:

  ///Constructor
  AliEveHLTEventManager();
  
  virtual ~AliEveHLTEventManager();



  /**Set and get the global instance of the Eve manager */
  void SetEveManager(TEveManager * manager) {fEveManager = manager;}
  TEveManager * GetEveManager() const {return fEveManager;}

  /**Set and get the global instance of TGeoManager */
  void SetGeoManager(TGeoManager * manager) {fGeoManager = manager;}
  TGeoManager * GetGeoManager() const {return fGeoManager;}

  /** Set the projection scenes and their managers */
  void SetRPhiManager (TEveProjectionManager * mgr) {fRPhiManager = mgr;}
  void SetRPhiEventScene (TEveScene * scene ) {fRPhiEventScene = scene;}
  void SetRPhiViewer(TEveViewer * viewer ) {fRPhiViewer = viewer;}
  void SetRhoZManager(TEveProjectionManager * mgr) {fRhoZManager = mgr;}
  void SetRhoZEventScene(TEveScene * scene ) {fRhoZEventScene = scene;}
  void SetRhoZViewer(TEveViewer * viewer ) {fRhoZViewer = viewer;}

  /** Start and stop the automatic event loop */
  void StartLoop();
  void StopLoop();

  //* Show muon arm*//
  void SetShowMuon(Bool_t showmuon) { fShowMuon = showmuon; }

  /** Print the screens to a file **/
  void PrintScreens();


  virtual void NavigateBack() = 0;
  virtual void NavigateFwd() = 0;



  //Event buffer stuff
  virtual void ConnectEventBuffer();  
  virtual void StartBufferMonitor();
  virtual void NextEvent() = 0;

  virtual void SaveEveryThing();
  
 protected:

  /** copy constructor prohibited */
  AliEveHLTEventManager(const AliEveHLTEventManager&);

  /** assignment operator prohibited */
  AliEveHLTEventManager& operator=(const AliEveHLTEventManager&);

  /** Process the event data */
  Int_t ProcessEvent(TList * blockList);
  Int_t ProcessEvent(AliESDEvent * event);

  /** Set flag for event loop */
  void SetEventLoopStarted (Bool_t started) {fEventLoopStarted = started;}

  void DestroyDetectorElements();
  
  virtual AliEveEventBuffer * GetEventBuffer() {return NULL;}
  
  /** Process block */
  void ProcessBlock(AliHLTHOMERBlockDesc * block);  //Process block
  /** Reset the elements in the display */
  void ResetDisplay();  
  /** Update the display  */
  void UpdateDisplay(); 


  Int_t GetRunNumber() const { return fRunNumber; }
  ULong64_t GetEventId() const { return fEventId; }
  void SetRunNumber(Int_t rn) { fRunNumber = rn; }
  void SetEventId(ULong64_t id) { fEventId = id; }


  void CreatePhosElement();
  void CreateMultCorrElement();
  void CreateEmcalElement();
  void CreateTPCElement();
  void CreateITSElement();
  void CreateISPDElement();
  void CreateISDDElement();
  void CreateISSDElement();
  void CreateTRDElement();
  void CreateHLTElement();


  TGeoManager * fGeoManager;              //The global TGeoManager instance
  TEveManager * fEveManager;              //The global TEveManager instance
  TEveProjectionManager * fRPhiManager;   //The R - Phi projection scene manager
  TEveProjectionManager * fRhoZManager;   //The Rho- Z projection sene manager
  TEveScene * fRPhiEventScene;            //The R - Phi projection scene
  TEveScene * fRhoZEventScene;            //The Rho - Z projection sene
  TEveViewer * fRhoZViewer;
  TEveViewer * fRPhiViewer;
  


  TTimer * fTimer;                   //Timer for event loop
  //TTimer * fSourceListTimer;       //Timer for source list loop
 
  AliHLTEvePhos  * fPhosElement;     //Phos eve processor
  AliHLTEveEmcal * fEmcalElement;    //Emcal eve processor
  AliHLTEveTPC   * fTPCElement;      //TPC eve processor
  AliHLTEveHLT   * fHLTElement;      //HLT
  AliHLTEveITS   * fITSElement;      //ITS
  AliHLTEveISPD  * fISPDElement;     //ISPD
  AliHLTEveISSD  * fISSDElement;     //ISSD
  AliHLTEveISDD  * fISDDElement;     //ISDD
  AliHLTEveTRD   * fTRDElement;      //TRD
  AliHLTEveMuon  * fMuonElement;     //MUON
  AliHLTEveMultCorr  * fMultCorrElement;     //Mult corr
  AliHLTEveAny   * fAnyElement;      //Catch all



  Bool_t fEventLoopStarted;                    // Flag indicating whether the loop is running
  Bool_t fCenterProjectionsAtPrimaryVertex;    // Flag indicating whether to center the projection scenes at primary vertex (as opposed to 0, 0, 0)
  Bool_t fShowBarrel;                               // Display barrel detectors ?
  Bool_t fShowMuon;                                 // Display Muon arm ?

  Int_t fRunNumber;
  ULong64_t fEventId;

  ClassDef(AliEveHLTEventManager, 0);

};

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