3 #ifndef ALIHLTCOMPHUFFMANALTROCOMPONENT_H
4 #define ALIHLTCOMPHUFFMANALTROCOMPONENT_H
6 //* This file is property of and copyright by the ALICE HLT Project *
7 //* ALICE Experiment at CERN, All rights reserved. *
8 //* See cxx source for full Copyright notice *
10 /** @file AliHLTCOMPHuffmanAltroComponent.h
13 @brief The Huffman compressor component.
16 #include "AliHLTProcessor.h"
18 class AliHLTCOMPHuffmanAltro;
19 class AliHLTCOMPHuffmanData;
22 * @class AliHLTCOMPHuffmanAltroComponent
23 * Implementation of the Huffman compressor component.
24 * The component implements the interface methods of the @ref AliHLTProcessor.
25 * The actual Huffman compression and decompression algorithms are implemented
26 * in AliHLTCOMPHuffmanAltro.
27 * The component can handle compressed and decompressed data of different formats.
28 * Two components are registered, the HuffmanCompressor and the HuffmanDecompressor.
30 * <h2>General properties:</h2>
32 * Component ID: \b COMPHuffmanCompressor, \b COMPHuffmanDecompressor <br>
33 * Library: \b libAliHLTComp.so <br>
34 * Input Data Types: <br>
35 * \li COMPHuffmanDecompressor: AliHLTCompDefinitions::fgkDDLEncodedHuffmanAltroDataType
36 * \li COMPHuffmanCompressor: ::kAliHLTDataTypeDDLRaw <br>
38 * Output Data Types: <br>
39 * \li COMPHuffmanCompressor: AliHLTCompDefinitions::fgkDDLEncodedHuffmanAltroDataType
40 * \li COMPHuffmanDecompressor: ::kAliHLTDataTypeDDLRaw <br>
42 * <h2>Mandatory arguments:</h2>
43 * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
44 * \li -origin <i> detector </i> <br>
45 * set origin of data to specify Huffman code table to be read in (parameter transient)
46 * \li -runnumber <i> decimal number </i> <br>
47 * set runnumber to specify Huffman code table to be read in (parameter transient)
48 * \li -dataspec <i> 0xYYXXaabb </i> <br>
49 * set usual HLT dataspec (last slice, first slice, last patch, first patch)_Hexadezimal to specify Huffman code table to be read in
50 * \li -trailerwords <i> decimal number </i> <br>
51 * set number of trailerwords of incoming data (ranging from 1 to 3)
53 * <h2>Optional arguments:</h2>
54 * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
55 * \li -tablepath <i> path to Huffman code table </i> <br>
56 * set path to read Huffman code table from root file, if no path is given, path is set to current path (parameter transient)
58 * @ingroup alihlt_comp_components
60 class AliHLTCOMPHuffmanAltroComponent : public AliHLTProcessor {
64 * @param compression whether to use the compressor or decompressor
66 AliHLTCOMPHuffmanAltroComponent(bool compression);
68 virtual ~AliHLTCOMPHuffmanAltroComponent();
70 // Public functions to implement AliHLTComponent's interface.
71 // These functions are required for the registration process
73 const char* GetComponentID();
74 void GetInputDataTypes( vector<AliHLTComponentDataType>& list);
75 AliHLTComponentDataType GetOutputDataType();
76 virtual void GetOutputDataSize( unsigned long& constBase, double& inputMultiplier );
77 AliHLTComponent* Spawn();
82 // Protected functions to implement AliHLTComponent's interface.
83 // These functions provide initialization as well as the actual processing
84 // capabilities of the component.
86 int DoInit( int argc, const char** argv );
88 int DoEvent( const AliHLTComponentEventData& evtData, const AliHLTComponentBlockData* blocks,
89 AliHLTComponentTriggerData& trigData, AliHLTUInt8_t* outputPtr,
90 AliHLTUInt32_t& size, vector<AliHLTComponentBlockData>& outputBlocks );
93 /** copy constructor prohibited */
94 AliHLTCOMPHuffmanAltroComponent(const AliHLTCOMPHuffmanAltroComponent&);
95 /** assignment operator prohibited */
96 AliHLTCOMPHuffmanAltroComponent& operator=(const AliHLTCOMPHuffmanAltroComponent&);
98 /** the entropy encoder object */
99 AliHLTCOMPHuffmanAltro* fHuffmanCompressor; // instance of Huffman compressor component
100 /** bool to decide whether to compress (TRUE) or to decompress (FALSE) */
101 Bool_t fCompressionSwitch; // mode choice for compressor instance from input line arguments
102 /** bool to decide wheter to calibrate (create a new code table) (TRUE) or to (de)compress data (FALSE) */
103 Bool_t fTrainingMode; // mode choice for training instance from input line arguments
104 /** specification of origin of input data to load correct Huffman code table */
105 TString fOrigin; // gets input line argument to specify the origin of the Huffman table
106 /** specification of run number to load correct Huffman code table */
107 AliHLTUInt64_t fRunNumber; // gets input line argument to specify run type of Huffman Table
108 /** data specifications (0xYYXXaabb) to load correct Huffman code table */
109 AliHLTUInt64_t fDataSpec; // gets input line argument to specify the data of the Huffman table
110 /** path to load Huffman code table from (if not explicitly given, table is taken from current path) */
111 TString fTablePath; // gets explicit path for Huffman table from command line
112 /** number of NRCU trailer words of incoming data */
113 Int_t fNrcuTrailerwords; // number of rcu trailer words
114 /** pointer to Huffman code table for read in */
115 AliHLTCOMPHuffmanData* fHuffmanData; // instance of Huffman Data containing the code table
117 //AliHLTUInt8_t fSlice; // determine slice number from input event block
118 //AliHLTUInt8_t fPatch; // determine patch number from input event bloc
120 ClassDef(AliHLTCOMPHuffmanAltroComponent, 0)