]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/EveBase/AliEveEventManager.h
Fixing bugs in Event Display
[u/mrichter/AliRoot.git] / EVE / EveBase / AliEveEventManager.h
index 46bf3db0629f3f4c4e3eea14401f168b6e1fbc9a..34cae3b0039bc30f52e363f23ca1c36f3dada81a 100644 (file)
@@ -1,4 +1,4 @@
-// $Id$
+// $Id: AliEveEventManager.h 64557 2013-10-16 20:03:08Z hristov $
 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
 
 /**************************************************************************
 #include <TEveEventManager.h>
 #include <TQObject.h>
 #include <TObjArray.h>
+#include <TThread.h>
 
 #include <AliEventInfo.h>
-
 #include <AliESDEvent.h>
-
-//#include <zmq.hpp>
-
+#include "AliStorageTypes.h"
 
 class AliEveMacroExecutor;
 class AliEveEventSelector; 
@@ -50,10 +48,12 @@ class TMap;
 //
 
 
-class AliEveEventManager : public TEveEventManager,
-        public TQObject
+class AliEveEventManager : public TEveEventManager, public TQObject
 {
 public:
+    AliEveEventManager(const TString& name="Event", Int_t ev=0);
+    virtual ~AliEveEventManager();
+       
     enum EVisibleESDTrees{ kOfflineTree, kHLTTree };
 
     static void SetESDFileName(const TString& esd, EVisibleESDTrees shown=kOfflineTree);
@@ -69,21 +69,19 @@ public:
     // assumes the filenames of ESD, AOD, etc are standard ALICE names
     // (AliESDs.root, AliESDfriends.root, AliAOD.root, AliAODfriend.root, galice.root,raw.root)
     static void SetFilesPath(const TString& path);
-
     static void SetAssertElements(Bool_t assertRunloader, Bool_t assertEsd,
                                   Bool_t assertAod, Bool_t assertRaw);
     static void SearchRawForCentralReconstruction();
 
-    AliEveEventManager(const TString& name="Event", Int_t ev=0);
-    virtual ~AliEveEventManager();
-
     virtual void  Open();
-    void          SetEvent(AliRunLoader *runLoader, AliRawReader *rawReader, AliESDEvent *esd, AliESDfriend *esdf);
     virtual Int_t GetMaxEventId(Bool_t refreshESD=kFALSE) const;
     virtual void  GotoEvent(Int_t event);
     virtual void  NextEvent();
     virtual void  PrevEvent();
+    void MarkCurrentEvent();
     virtual void  Close();
+
+    void          SetEvent(AliRunLoader *runLoader, AliRawReader *rawReader, AliESDEvent *esd, AliESDfriend *esdf);
     void Timeout(); // * SIGNAL*
 
     Int_t         GetEventId()         const { return fEventId; }
@@ -102,11 +100,7 @@ public:
     TString       GetEventInfoVertical()   const;
     const AliEventInfo*        GetEventInfo();
 
-               static bool ConnectToServer(); // connect to the events server
-               //static zmq::socket_t* AssertSubscriber();
-
     static Int_t  CurrentEventId();
-
     static Bool_t HasRunLoader();
     static Bool_t HasESD();
     static Bool_t HasESDfriend();
@@ -118,21 +112,17 @@ public:
     static AliESDfriend* AssertESDfriend();
     static AliAODEvent*  AssertAOD();
     static AliRawReader* AssertRawReader();
-
     static AliMagF*      AssertMagField();
     static TGeoManager*  AssertGeometry();
     static AliRecoParam* AssertRecoParams();
 
     static AliEveEventManager* AddDependentManager(const TString& name, const TString& path);
     static AliEveEventManager* GetDependentManager(const TString& name);
-
     static AliEveEventManager* GetMaster();
     static AliEveEventManager* GetCurrent();
-
     static void                RegisterTransient    (TEveElement* element);
     static void                RegisterTransientList(TEveElement* element);
 
-
     Double_t      GetAutoLoadTime()        const { return fAutoLoadTime; }
     Bool_t        GetAutoLoad()            const { return fAutoLoad;     }
     void          SetAutoLoadTime(Float_t time);
@@ -144,6 +134,8 @@ public:
     Bool_t        IsEventAvailable()       const { return fHasEvent;     }
     Bool_t        IsUnderExternalControl() const { return fExternalCtrl; }
 
+    Bool_t        IsOnlineMode() const { return fOnlineMode; }
+
     Bool_t        InsertGlobal(const TString& tag, TEveElement* model);
     Bool_t        InsertGlobal(const TString& tag, TEveElement* model,
                                Bool_t replace, Bool_t update);
@@ -152,8 +144,15 @@ public:
     virtual void  AfterNewEventLoaded();
     void          NewEventDataLoaded();  // *SIGNAL*
     void          NewEventLoaded();      // *SIGNAL*
+    void          NoEventLoaded();      // *SIGNAL*
+    void          StorageManagerOk();    // *SIGNAL*
+    void          StorageManagerDown();  // *SIGNAL*
 
     AliEveMacroExecutor* GetExecutor() const { return fExecutor; }
+    void InitOCDB(int runNo=-1);
+
+    void PrepareForNewEvent(AliESDEvent *event);
+    Int_t NewEventAvailable();
 
 protected:
     Int_t         fEventId;            // Id of current event.
@@ -215,26 +214,42 @@ protected:
     static AliRecoParam* fgRecoParam;
     static Bool_t        fgUniformField;  // Track with uniform field.
 
-               //static zmq::context_t* fgSubContext;
-               //static zmq::socket_t* fgSubSock;
-private:
-    AliEveEventManager(const AliEveEventManager&);            // Not implemented
-    AliEveEventManager& operator=(const AliEveEventManager&); // Not implemented
 
+private:
     void InitInternals();
+
     void StartAutoLoadTimer();
     void StopAutoLoadTimer();
+    Bool_t fAutoLoadTimerRunning; // State of auto-load timer.
 
     static Bool_t InitGRP();
     static Bool_t InitRecoParam();
-
     TTree* readESDTree(const char* treeName, int &run);
 
-    Bool_t fAutoLoadTimerRunning; // State of auto-load timer.
-
     static AliEveEventManager* fgMaster;
     static AliEveEventManager* fgCurrent;
 
+    static void* DispatchEventListener(void *arg){static_cast<AliEveEventManager*>(arg)->GetNextEvent();return nullptr;}
+    static void* DispatchStorageManagerWatcher(void *arg){static_cast<AliEveEventManager*>(arg)->CheckStorageStatus();return nullptr;}
+    void GetNextEvent();
+    void CheckStorageStatus();
+    TThread *fEventListenerThread;
+    TThread *fStorageManagerWatcherThread;
+    TMutex *fMutex;
+    AliESDEvent *fCurrentEvent[2];
+    TTree *fCurrentTree[2];
+    int fEventInUse;
+    int fWritingToEventIndex;
+    bool fIsNewEventAvaliable;
+    storageSockets fgSubSock;
+
+    Bool_t fOnlineMode;
+    Bool_t fStorageDown;
+    Bool_t fFinished;
+
+    AliEveEventManager(const AliEveEventManager&);            // Not implemented
+    AliEveEventManager& operator=(const AliEveEventManager&); // Not implemented
+    
     ClassDef(AliEveEventManager, 0); // Interface for getting all event components in a uniform way.
 };