From Jochen - EveHLT development accumulated since the end of March.
[u/mrichter/AliRoot.git] / EVE / EveHLT / AliEveHOMERManager.h
1 // $Id$
2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
4 /**************************************************************************
5  * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6  * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
7  * full copyright notice.                                                 *
8  **************************************************************************/
9
10 //-*- Mode: C++ -*-
11 #ifndef ALIEVEHOMERMANGER_H
12 #define ALIEVEHOMERMANGER_H
13
14 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
15  * See cxx source for full Copyright notice                               */
16
17 /** @file   AliEveHOMERManager.h
18     @author Jochen Thaeder
19     @date
20     @brief  Manager for HOMER in offline
21 */
22
23 #include <TEveElement.h>
24
25 #include "TString.h"
26 #include "TDOMParser.h"
27 #include "TXMLNode.h"
28 #include "TList.h"
29
30 #include "AliEveHOMERSourceList.h"
31 #include "AliHLTHOMERSourceDesc.h"
32 #include "AliHLTHOMERBlockDesc.h"
33 #include "AliHLTHOMERReader.h"
34 #include "AliEveHOMERXMLHandler.h"
35
36 #include "AliTPCPreprocessorOnline.h"
37
38
39 class AliHLTHOMERLibManager;
40
41 class AliEveHOMERManager : public TEveElementList
42 {
43 public:
44
45   /*
46    * ---------------------------------------------------------------------------------
47    *                            Constructor / Destructor
48    * ---------------------------------------------------------------------------------
49    */
50
51   /** constructor */
52   AliEveHOMERManager(TString xmlFile="" );
53
54   /** destructor */
55   virtual ~AliEveHOMERManager();
56
57   /*
58    * ---------------------------------------------------------------------------------
59    *                            Source Handling - public
60    * ---------------------------------------------------------------------------------
61    */
62
63   /** Create Sources List from HOMER-Proxy */
64   Int_t CreateHOMERSourcesList();
65
66   /** Set state of a source */
67   void SetSourceState( AliHLTHOMERSourceDesc* source, Bool_t state);
68
69   /** Get pointer to source List */
70   TList* GetSourceList() { return fSourceList; } // Get pointer to source List
71
72   /*
73    * ---------------------------------------------------------------------------------
74    *                            Connection Handling - public
75    * ---------------------------------------------------------------------------------
76    */
77
78   /** Connect to HOMER sources, out of Readout List, which gets created when state has changed */
79   Int_t ConnectHOMER();
80
81   /** Disconnect from HOMER sources */
82   void DisconnectHOMER();
83
84   /** Reconnect from HOMER sources */
85   Int_t ReconnectHOMER();
86
87   /*
88    * ---------------------------------------------------------------------------------
89    *                            Event Handling - public
90    * ---------------------------------------------------------------------------------
91    */
92
93   /** Loads the next Event, after being connected */
94   Int_t NextEvent();
95
96   /** Get event ID */
97   ULong_t GetEventID() { return fEventID; }    // Get event ID
98
99   /** Get pointer to block List */
100   TList* GetBlockList() { return fBlockList; } // Get pointer to block List
101   
102   /*
103    * ---------------------------------------------------------------------------------
104    *                            Test Realm ....
105    * ---------------------------------------------------------------------------------
106    */
107
108   /** Still under testing ... */
109   void DumpTPCCalib(TString objectName, Bool_t dumpToFile);
110
111   ///////////////////////////////////////////////////////////////////////////////////
112
113 protected:
114
115   AliHLTHOMERLibManager* fLibManager;             //! Dynamic loader manager for the HOMER library
116
117   ///////////////////////////////////////////////////////////////////////////////////
118
119 private:
120
121   AliEveHOMERManager(const AliEveHOMERManager&);            // Not implemented.
122   AliEveHOMERManager& operator=(const AliEveHOMERManager&); // Not implemented.
123
124   /*
125    * ---------------------------------------------------------------------------------
126    *                            Connection Handling - private
127    * ---------------------------------------------------------------------------------
128    */
129
130   /** Create a readout list for Hostname and ports */
131   void CreateReadoutList( const char** sourceHostnames, UShort_t* sourcePorts, UInt_t &sourceCount);
132
133   /** Checks if already connected to HOMER sources */
134   Bool_t IsConnected() { return fConnected; }  // Checks if already connected to HOMER sources
135
136   /** Sets realm ( which can be ACR, GPN, HLT, KIP ) */ 
137   void SetRealm( TString s ) { fXMLHandler->SetRealm(s); } // Sets realm ( which can be ACR, GPN, HLT, KIP )
138
139   /* ---------------------------------------------------------------------------------
140    *                            Event Handling - private
141    * ---------------------------------------------------------------------------------
142    */
143
144   /** Create a TList of blocks, which have been readout */
145   Int_t CreateBlockList();
146
147   /*
148    * ---------------------------------------------------------------------------------
149    *                            Block Handling - private
150    * ---------------------------------------------------------------------------------
151    */
152
153   /** Get Number of blocks in current event */
154   ULong_t GetNBlks() { return fNBlks; }                                        // Get Number of blocks in current event
155
156   /** Get pointer to block ndx in current event */
157   void* GetBlk( Int_t ndx );
158
159   /** Get pointer to current block in current event */
160   void* GetBlk() { return GetBlk( fCurrentBlk ); }                             // Get pointer to current block in current event
161
162   /** Get first block in current event */
163   void* GetFirstBlk() { return GetBlk( 0 ); }                                  // Get first block in current event
164
165   /** Get next block in current event */
166   void* GetNextBlk() { return GetBlk( ++fCurrentBlk ); }                       // Get next block in current event
167
168   /** Get size of block ndx */
169   ULong_t GetBlkSize( Int_t ndx );
170
171   /** Get size of current block */ 
172   ULong_t GetBlkSize() { return GetBlkSize( fCurrentBlk ); }                   // Get size of current block 
173  
174   /** Get origin of block ndx */
175   TString GetBlkOrigin( Int_t ndx );
176
177   /** Get origin of current block */
178   TString GetBlkOrigin(){ return GetBlkOrigin( fCurrentBlk ); }                // Get origin of current block
179
180   /** Get type of block ndx */
181   TString GetBlkType( Int_t ndx ); 
182
183   /** Get type of current block */
184   TString GetBlkType() { return GetBlkType( fCurrentBlk ); }                   // Get type of current block
185
186   /** Get specification of block ndx */
187   ULong_t GetBlkSpecification( Int_t ndx );
188
189   /** Get specification of current block */
190   ULong_t GetBlkSpecification() { return GetBlkSpecification( fCurrentBlk ); } // Get specification of current block
191
192   /** Checks if current Block should was requested */
193   Bool_t CheckIfRequested( AliHLTHOMERBlockDesc* block );
194
195   /*
196    * ---------------------------------------------------------------------------------
197    *                            Members - private
198    * ---------------------------------------------------------------------------------
199    */
200
201   // == XML handler ==
202   AliEveHOMERXMLHandler* fXMLHandler;             //! Handles HLT XML Config Files
203
204   // == sources ==
205   TList * fSourceList;                            //! List to HOMER sources
206
207   // == connection ==
208   AliHLTHOMERReader* fReader;                     //! Pointer to HOMER reader
209
210   // == blocks ==
211   TList * fBlockList;                             //! List to HOMER blocks
212
213   // == events ==
214   ULong_t   fNBlks;                               // Number of blockes in current event
215   ULong64_t fEventID;                             // EventID of current event
216   ULong_t   fCurrentBlk;                          // Current block in current event
217
218   // == states ==
219   Bool_t fConnected;                              // Shows connection status
220   Bool_t fStateHasChanged;                        // Indicates, if a sources have changes, so that one has to reconnect.
221
222   // == sources ==
223   AliEveHOMERSourceList* fSrcList;                // List of HOMER Sources
224
225   //-----------------------------------------------------------------------------------------
226   AliTPCPreprocessorOnline* fTPCPre;              // Preprocessor for TPC calibration.
227
228   ClassDef(AliEveHOMERManager, 0); // Manage connections to HLT data-sources.
229 };
230
231 #endif