]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/EveHLT/AliEveHOMERManager.h
Move core classes from EveDet to EveBase.
[u/mrichter/AliRoot.git] / EVE / EveHLT / AliEveHOMERManager.h
diff --git a/EVE/EveHLT/AliEveHOMERManager.h b/EVE/EveHLT/AliEveHOMERManager.h
new file mode 100644 (file)
index 0000000..23e4c50
--- /dev/null
@@ -0,0 +1,354 @@
+// $Id$
+// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
+
+/**************************************************************************
+ * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
+ * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
+ * full copyright notice.                                                 *
+ **************************************************************************/
+//-*- Mode: C++ -*-
+#ifndef ALIEVEHOMERMANGER_H
+#define ALIEVEHOMERMANGER_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+/** @file   AliEveHOMERManager.h
+    @author Jochen Thaeder
+    @date
+    @brief  Manager for HOMER in offline
+*/
+
+#include <TEveElement.h>
+
+#include "TString.h"
+#include "TDOMParser.h"
+#include "TXMLNode.h"
+#include "TList.h"
+
+#include "AliHLTHOMERSourceDesc.h"
+#include "AliHLTHOMERBlockDesc.h"
+#include "AliHLTHOMERReader.h"
+
+#include "AliTPCPreprocessorOnline.h"
+
+
+class AliHLTHOMERLibManager;
+
+/**
+ * @class AliEveHOMERManager
+ *
+ * This class is the main class of the AliEveHOMERManager
+ * ... more to come
+ *
+ * @ingroup alihlt_homer
+ */
+
+class AliEveHOMERManager : public TEveElementList
+{
+public:
+
+  /*
+   * ---------------------------------------------------------------------------------
+   *                            Constructor / Destructor
+   * ---------------------------------------------------------------------------------
+   */
+
+  /** constructor
+   * @param argc    Number of command line arguments.
+   * @param argv    Array of command line arguments.
+   */
+  AliEveHOMERManager(TString xmlFile="" );
+  /** not a valid copy constructor, defined according to effective C++ style */
+  AliEveHOMERManager( const AliEveHOMERManager& );
+  /** not a valid assignment op, but defined according to effective C++ style */
+  AliEveHOMERManager& operator=( const AliEveHOMERManager& );
+  /** destructor */
+  virtual ~AliEveHOMERManager();
+
+  /*
+   * ---------------------------------------------------------------------------------
+   *                            Source Handling - public
+   * ---------------------------------------------------------------------------------
+   */
+
+  /** Create Sources List from HOMER-Proxy */
+  Int_t CreateHOMERSourcesList();
+
+  /** Set state of a source
+   * @param source      Pointer to AliHLTHOMERSourceDesc object.
+   * @param state       New (selected/not selected) state.
+   */
+  void SetSourceState( AliHLTHOMERSourceDesc* source, Bool_t state);
+
+  /** Get pointer to source List
+   * @return            returns pointer to TList of sources
+   */
+  TList* GetSourceList() { return fSourceList; }
+
+  /*
+   * ---------------------------------------------------------------------------------
+   *                            Connection Handling - public
+   * ---------------------------------------------------------------------------------
+   */
+
+  /** Connect to HOMER sources, out of Readout List, which gets created when state has changed
+   * @return            0 on sucess, "HOMER" errors on error
+   */
+  Int_t ConnectHOMER();
+
+  /** Disconnect from HOMER sources */
+  void DisconnectHOMER();
+
+  /** Reconnect from HOMER sources
+   * @return            0 on sucess, "ConnectHOMER()" errors on error
+   */
+  Int_t ReconnectHOMER();
+
+  /*
+   * ---------------------------------------------------------------------------------
+   *                            AliEveEventManager Handling - public
+   * ---------------------------------------------------------------------------------
+   */
+
+  /** Loads the next AliEveEventManager, after being connected
+   * @return            0 on sucess, "HOMER" errors on error
+   */
+  Int_t NextEvent();
+
+  /** Get event ID
+   * @return            Returns eventID
+   */
+  ULong_t GetEventID() { return fEventID; }
+
+  /** Get pointer to block List
+   * @return            returns pointer to TList of blocks
+   */
+  TList* GetBlockList() { return fBlockList; }
+
+
+  ///////////////////////////////////////////////////////////////////////////////////
+
+  void SelectRawTPC();
+  void SelectClusterTPC();
+  void SelectESDTPC();
+
+  void TestSelect();
+  void TestSelectClass( TString objectName );
+
+  void DumpTPCCalib(TString objectName, Bool_t dumpToFile);
+
+  ///////////////////////////////////////////////////////////////////////////////////
+
+protected:
+
+  /** Dynamic loader manager for the HOMER library */
+  AliHLTHOMERLibManager* fLibManager;             //! transient
+
+
+private:
+
+  /*
+   * ---------------------------------------------------------------------------------
+   *                            Source Handling - private
+   * ---------------------------------------------------------------------------------
+   */
+
+  /** Get Information out of a TDS process in XML file
+   * @param xmlNode   Pointer to childs of TDS node
+   * @return          0 on sucess, > 0 on error
+   */
+  Int_t GetTDSAttributes( TXMLNode * xmlNode );
+
+  /** Resolve Information of hostname and port for source which has to be used by HOMER
+   * ( due to port mapping inside the HLT )
+   * @param xmlHostname  Hostname out of the XML
+   * @param xmlPort      Port out of the XML
+   * @param hostname     Return of the hostname
+   * @param port         Return of the port
+   * @return             0 on sucess, 1 if hostname couldn't be resolved, 2 if port couldn't be resolved,
+   */
+  Int_t ResolveHostPortInformation( TString xmlHostname, TString xmlPort, TString &hostname, Int_t &port );
+
+  /** Resolve information of source
+   * @param xmlParent   ParentString out of the XML
+   * @param source      Return the filled AliHLTHOMERSourceDesc object
+   * @return            0 on sucess, 1 on error
+   */
+  Int_t ResolveSourceInformation( TString xmlParent, AliHLTHOMERSourceDesc * source );
+
+  /*
+   * ---------------------------------------------------------------------------------
+   *                            Connection Handling - private
+   * ---------------------------------------------------------------------------------
+   */
+
+  /** Create a readout list for Hostname and ports
+   * @param socurceHostnames   Array of selected hostnames
+   * @param socurcePorts       Array of selected ports
+   * @param socurceCount       Number of selected hostname:port
+   */
+  void CreateReadoutList( const char** socurceHostnames, UShort_t* sourcePorts, UInt_t &sourceCount);
+
+  /** Checks if already connected to HOMER sources
+   * @return             kTRUE or kFALSE, depending on connection state
+   */
+  Bool_t IsConnected() { return fConnected; }
+
+  /* ---------------------------------------------------------------------------------
+   *                            Eve AliEveHOMERManager::foo(nt Handling - private
+   * ---------------------------------------------------------------------------------
+   */
+
+  /** Create a TList of blocks, which have been readout */
+  Int_t CreateBlockList();
+
+  /*
+   * ---------------------------------------------------------------------------------
+   *                            Block Handling - private
+   * ---------------------------------------------------------------------------------
+   */
+
+  /** Get Number of blocks in current event
+   * @return           returns number of blocks in current event
+   */
+  ULong_t GetNBlks() { return fNBlks; }
+
+  /** Get pointer to block ndx in current event
+   * @param ndx        Block index
+   * @return           returns pointer to blk, NULL if no block present
+   */
+  void* GetBlk( Int_t ndx );
+
+  /** Get pointer to current block in current event
+   * @param ndx        Block index
+   * @return           returns pointer to blk, NULL if no block present
+   */
+  void* GetBlk() { return GetBlk( fCurrentBlk ); }
+
+  /** Get first block in current event
+   * @return           returns pointer to blk, NULL if no block present
+   */
+  void* GetFirstBlk() { return GetBlk( 0 ); }
+
+  /** Get next block in current event
+   * @return           returns pointer to blk, NULL if no block present
+   */
+  void* GetNextBlk() { return GetBlk( ++fCurrentBlk ); }
+
+  /** Get size of block ndx
+   * @param ndx        Block index
+   * @return           returns pointer to blk, 0 if no block present
+   */
+  ULong_t GetBlkSize( Int_t ndx );
+
+  /** Get size of current block
+   * @param ndx        Block index
+   * @return           returns pointer to blk, 0 if no block present
+   */
+  ULong_t GetBlkSize() { return GetBlkSize( fCurrentBlk ); }
+
+  /** Get origin of block ndx
+   * @param ndx        Block index
+   * @return           origin of block
+   */
+  TString GetBlkOrigin( Int_t ndx );
+
+  /** Get origin of current block
+   * @param ndx        Block index
+   * @return           origin of block
+   */
+  TString GetBlkOrigin(){ return GetBlkOrigin( fCurrentBlk ); }
+
+  /** Get type of block ndx
+   * @param ndx        Block index
+   * @return           type of block
+   */
+  TString GetBlkType( Int_t ndx );
+
+  /** Get type of current block
+   * @param ndx        Block index
+   * @return           type of block
+   */
+  TString GetBlkType() { return GetBlkType( fCurrentBlk ); }
+
+  /** Get specification of block ndx
+   * @param ndx        Block index
+   * @return           specification of block
+   */
+  ULong_t GetBlkSpecification( Int_t ndx );
+
+  /** Get specification of current block
+   * @param ndx        Block index
+   * @return           specification of block
+   */
+  ULong_t GetBlkSpecification(){ return GetBlkSpecification( fCurrentBlk ); }
+
+  /** Checks if current Block should was requested
+   * @return           returns kTRUE, if block should was requested
+   */
+  Bool_t CheckIfRequested( AliHLTHOMERBlockDesc* block );
+
+  /*
+   * ---------------------------------------------------------------------------------
+   *                            Members - private
+   * ---------------------------------------------------------------------------------
+   */
+
+  // == XML parser ==
+
+  /** XML input file */
+  TString fXMLFile;                               // see above
+
+  /** XML parser into DOM model */
+  TDOMParser* fXMLParser;                         //! transient
+
+  /** Root node of parsed config file */
+  TXMLNode * fRootNode;                           //! transient
+
+  // == sources ==
+
+  /** List to HOMER sources */
+  TList * fSourceList;                            //! transient
+
+  // == connection ==
+
+
+  /** Pointer to HOMER reader */
+  AliHLTHOMERReader* fReader;                     //! transient
+
+  // == blocks ==
+
+  /** List to HOMER blocks */
+  TList * fBlockList;                             //! transient
+
+  // == events ==
+
+  /** Number of blockes in current event */
+  ULong_t fNBlks;                                 // see above
+
+  /** EventID of current event */
+  ULong64_t fEventID;                             // see above
+
+  /** Current block in current event */
+  ULong_t fCurrentBlk;                            // see above
+
+  // == states ==
+
+  /** Shows connection status */
+  Bool_t fConnected;                              // see above
+
+  /** Indicates, if a sources have changes,
+   *  so that one has to reconnect .
+   */
+  Bool_t fStateHasChanged;                        // see above
+
+
+  //----
+
+  AliTPCPreprocessorOnline* fTPCPre;
+
+  ClassDef( AliEveHOMERManager, 0 )
+};
+
+#endif