added data generator to util library
[u/mrichter/AliRoot.git] / HLT / BASE / util / AliHLTDataGenerator.h
CommitLineData
81929b85 1// -*- Mode: C++ -*-
2// @(#) $Id$
3
4#ifndef ALIHLTDATAGENERATOR_H
5#define ALIHLTDATAGENERATOR_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 */
9
10/** @file AliHLTDataGenerator.h
11 @author Matthias Richter
12 @date
13 @brief An HLT file publishing (data source) component.
14 @note The class is used in Offline (AliRoot) context
15*/
16
17#include "AliHLTDataSource.h"
18
19/**
20 * @class AliHLTDataGenerator
21 * An HLT data source component to produce random data.
22 *
23 * Component ID: \b DataGenerator <br>
24 * Library: \b libAliHLTUtil.
25 *
26 * Mandatory arguments: <br>
27 * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formating -->
28 * \li -datatype <i> datatype dataorigin </i> <br>
29 * data type ID and origin, e.g. <tt>-datatype 'CLUSTERS' 'TPC ' </tt>
30 * \li -dataspec <i> specification </i> <br>
31 * data specification treated as decimal number or hex number if
32 * prepended by '0x'
33 * \li -minsize <i> size </i> <br>
34 * the minimum size of the data to be produced
35 * \li -maxsize <i> size </i> <br>
36 * the maximum size of the data to be produced, default = minsize
37 *
38 * Optional arguments:<br>
39 * \li -disisor <i> m </i> <br>
40 * a disisor to shrink the size after \em modulo events
41 * \li -offset <i> m </i> <br>
42 * an offset to subtract from the size after \em modulo events
43 * \li -modulo <i> n </i> <br>
44 * size manipulated by the disisor or subtractor after \em n events
45 *
46 * The component produces data blocks of random content and random size in the
47 * range of [\em minsize , \em maxsize ]. The size arguments can contain 'k' or
48 * 'M' to indicate kByte or MByte.
49 * @ingroup alihlt_component
50 */
51class AliHLTDataGenerator : public AliHLTDataSource {
52 public:
53 /** standard constructor */
54 AliHLTDataGenerator();
55 /** destructor */
56 virtual ~AliHLTDataGenerator();
57
58 const char* GetComponentID();
59 AliHLTComponentDataType GetOutputDataType();
60 int GetOutputDataTypes(vector<AliHLTComponentDataType>& /*tgtList*/);
61 void GetOutputDataSize( unsigned long& constBase, double& inputMultiplier );
62 AliHLTComponent* Spawn();
63
64 protected:
65 /**
66 * Init method.
67 */
68 int DoInit( int argc, const char** argv );
69
70 /**
71 * Deinit method.
72 */
73 int DoDeinit();
74
75 /**
76 * Data processing method for the component.
77 * @param evtData event data structure
78 * @param trigData trigger data structure
79 * @param outputPtr pointer to target buffer
80 * @param size <i>input</i>: size of target buffer
81 * <i>output</i>:size of produced data
82 * @param outputBlocks list to receive output block descriptors
83 * @return
84 */
85 int GetEvent( const AliHLTComponentEventData& evtData,
86 AliHLTComponentTriggerData& trigData,
87 AliHLTUInt8_t* outputPtr,
88 AliHLTUInt32_t& size,
89 vector<AliHLTComponentBlockData>& outputBlocks );
90
91 /**
92 * Scan one argument and adjacent parameters.
93 * Can be overloaded by child classes in order to add additional arguments
94 * beyond the standard arguments of the file publisher. The method is called
95 * whenever a non-standard argument is recognized.
96 * @param argc size of the argument array
97 * @param argv agument array for component initialization
98 * @return number of processed members of the argv <br>
99 * -EINVAL unknown argument <br>
100 * -EPROTO parameter for argument missing <br>
101 */
102 virtual int ScanArgument(int argc, const char** argv);
103
104 protected:
105 /**
106 * Scan a size argument.
107 * The argument is expected to be an integer, which can be suffixed by 'k'
108 * or 'M' in order to indicate the base, kByte or MByte.
109 * @param size target to store the size
110 * @param arg the argument to scan
111 */
112 int ScanSizeArgument(AliHLTUInt32_t &size, const char* arg);
113
114 private:
115 /** prohibit copy constructor */
116 AliHLTDataGenerator(const AliHLTDataGenerator&);
117 /** prohibit assignment operator */
118 AliHLTDataGenerator& operator=(const AliHLTDataGenerator&);
119
120 /** data type */
121 AliHLTComponentDataType fDataType; //! transient
122
123 /** specification */
124 AliHLTUInt32_t fSpecification; //! transient
125
126 /** the original size size */
127 AliHLTUInt32_t fSize; //! transient
128
129 /** the manipulated size */
130 AliHLTUInt32_t fCurrSize; //! transient
131
132 /** range */
133 AliHLTUInt32_t fRange; //! transient
134
135 /** divisor */
136 AliHLTUInt32_t fDivisor; //! transient
137
138 /** subtractor */
139 AliHLTUInt32_t fSubtractor; //! transient
140
141 /** modulo for size manipulation */
142 AliHLTUInt32_t fModulo; //! transient
143
144 ClassDef(AliHLTDataGenerator, 0)
145};
146#endif