-// @(#) $Id$
+//-*- Mode: C++ -*-
+// $Id$
#ifndef ALIHLTTPCAGENT_H
#define ALIHLTTPCAGENT_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice */
+//* This file is property of and copyright by the ALICE HLT Project *
+//* ALICE Experiment at CERN, All rights reserved. *
+//* See cxx source for full Copyright notice *
-/** @file AliHLTTPCAgent.h
- @author Matthias Richter
- @date
- @brief Agent of the libAliHLTTPC library
-*/
+// @file AliHLTTPCAgent.h
+// @author Matthias Richter
+// @date
+// @brief Agent of the libAliHLTTPC library
+// @note
#include "AliHLTModuleAgent.h"
+#include "AliHLTOUTHandlerEquId.h"
+
+class AliHLTOUTHandlerChain;
/**
* @class AliHLTTPCAgent
/**
* Register components for the AliHLTTPC library.
- * @param pHandler [in] instance of the component handler
+ * @param [in] pHandler instance of the component handler
*/
int RegisterComponents(AliHLTComponentHandler* pHandler) const;
+
+ /**
+ * Get handler decription for TPC data in the HLTOUT data stream.
+ * @param [in] dt data type of the block
+ * @param [in] spec specification of the block
+ * @param [out] desc handler description
+ * @return 1 if the agent can provide a handler, 0 if not
+ */
+ int GetHandlerDescription(AliHLTComponentDataType dt,
+ AliHLTUInt32_t spec,
+ AliHLTOUTHandlerDesc& desc) const;
+
+ /**
+ * Get specific handler for TPC data in the HLTOUT data stream.
+ * @param [in] dt data type of the block
+ * @param [in] spec specification of the block
+ * @return pointer to handler
+ */
+ AliHLTOUTHandler* GetOutputHandler(AliHLTComponentDataType dt,
+ AliHLTUInt32_t spec);
+
+ /**
+ * Delete an HLTOUT handler.
+ * @param pInstance pointer to handler
+ */
+ int DeleteOutputHandler(AliHLTOUTHandler* pInstance);
+
+ /**
+ * The handler for TPC RAW data in the HLTOUT stream.
+ */
+ class AliHLTTPCRawDataHandler : public AliHLTOUTHandlerEquId {
+ public:
+ /** constructor */
+ AliHLTTPCRawDataHandler();
+ /** destructor */
+ ~AliHLTTPCRawDataHandler();
+
+ /**
+ * Process a data block.
+ * Decode specification and return equipment id of the data block.
+ * The data itsself i untouched.
+ * @return equipment id the block should be used for.
+ */
+ int ProcessData(AliHLTOUT* pData);
+
+ private:
+
+ };
+
+ enum EOptions {
+ // indicate cluster id data blocks in the HLTOUT
+ kHaveCompressedClusterIdDataBlock = BIT(15)
+ };
+
protected:
private:
+ /** copy constructor prohibited */
+ AliHLTTPCAgent(const AliHLTTPCAgent&);
+ /** assignment operator prohibited */
+ AliHLTTPCAgent& operator=(const AliHLTTPCAgent&);
+
+ /** handler for TPC raw data in the HLTOUT stream */
+ AliHLTTPCRawDataHandler* fRawDataHandler; //!transient
+
+ /** afterburner for {'TRAKSEGS':'TPC '} in the HLTOUT stream */
+ AliHLTOUTHandlerChain* fTracksegsDataHandler; //! transient
+
+ /// handler for {'CLUSTERS':'TPC '}
+ AliHLTOUTHandlerChain* fClustersDataHandler; //! transient
+
+ /// handler for data blocks related to data compression
+ AliHLTOUTHandlerChain* fCompressionMonitorHandler; //! transient
+
ClassDef(AliHLTTPCAgent, 0);
};