]>
Commit | Line | Data |
---|---|---|
79c114b5 | 1 | // -*- Mode: C++ -*- |
a7ad9794 | 2 | // $Id$ |
79c114b5 | 3 | #ifndef ALIHLTROOTFILESTREAMERCOMPONENT_H |
4 | #define ALIHLTROOTFILESTREAMERCOMPONENT_H | |
a7ad9794 | 5 | //* This file is property of and copyright by the ALICE HLT Project * |
6 | //* ALICE Experiment at CERN, All rights reserved. * | |
7 | //* See cxx source for full Copyright notice * | |
79c114b5 | 8 | |
9 | /** @file AliHLTRootFileStreamerComponent.h | |
10 | @author Matthias Richter | |
11 | @date | |
12 | @brief Save objects in a ROOT memory file | |
a7ad9794 | 13 | */ |
79c114b5 | 14 | |
79c114b5 | 15 | #include "AliHLTProcessor.h" |
16 | ||
17 | /** | |
18 | * @class AliHLTRootFileStreamerComponent | |
19 | * The RootFileStreamer provides a stand alone component to write incoming | |
a7ad9794 | 20 | * TObject like structures into a ROOT memory file. A ROOT memory file is |
21 | * a ROOT file stored in memory instead on disk (AliHLTMemoryFile) The file | |
22 | * is published via the output stream. On the receiver side the file can | |
23 | * be directly written to disk and appears like a normal root file. | |
79c114b5 | 24 | * |
a7ad9794 | 25 | * <h2>General properties:</h2> |
79c114b5 | 26 | * |
a7ad9794 | 27 | * Component ID: \b ROOTFileStreamer <br> |
28 | * Library: \b libAliHLTUtil.so <br> | |
29 | * Input Data Types: ::kAliHLTAnyDataType <br> | |
30 | * Output Data Types: according to component arguments, | |
31 | * ::kAliHLTVoidDataType by default <br> | |
79c114b5 | 32 | * |
a7ad9794 | 33 | * <h2>Mandatory arguments:</h2> |
34 | * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting --> | |
35 | * | |
36 | * <h2>Optional arguments:</h2> | |
37 | * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting --> | |
79c114b5 | 38 | * \li -datatype <i> datatype dataorigin </i> <br> |
39 | * data type ID and origin, e.g. <tt>-datatype CLUSTERS TPC </tt> | |
40 | * \li -dataspec <i> specification </i> <br> | |
41 | * data specification treated as decimal number or hex number if | |
42 | * prepended by '0x' | |
43 | * | |
a7ad9794 | 44 | * <h2>Configuration:</h2> |
45 | * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting --> | |
46 | * Configuration by component arguments. | |
47 | * | |
48 | * <h2>Default CDB entries:</h2> | |
49 | * The component loads no CDB entries. | |
50 | * | |
51 | * <h2>Performance:</h2> | |
52 | * The component does not process any event data. | |
53 | * | |
54 | * <h2>Memory consumption:</h2> | |
55 | * The component does not process any event data. | |
56 | * | |
57 | * <h2>Output size:</h2> | |
58 | * No data published (AliHLTDataSink). | |
59 | * | |
60 | * @ingroup alihlt_util_components | |
79c114b5 | 61 | */ |
62 | class AliHLTRootFileStreamerComponent : public AliHLTProcessor | |
63 | { | |
64 | public: | |
65 | /** standard constructor */ | |
66 | AliHLTRootFileStreamerComponent(); | |
67 | /** destructor */ | |
68 | virtual ~AliHLTRootFileStreamerComponent(); | |
69 | ||
70 | /** | |
71 | * The id of the component. | |
72 | * @return component id (string) | |
73 | */ | |
74 | const char* GetComponentID() {return "ROOTFileStreamer";}; | |
75 | ||
76 | /** | |
77 | * Spawn function. | |
78 | * @return new class instance | |
79 | */ | |
80 | AliHLTComponent* Spawn() {return new AliHLTRootFileStreamerComponent;} | |
81 | ||
82 | /** | |
83 | * Get the input data types of the component. | |
84 | * The function is pure virtual and must be implemented by the child class. | |
85 | * @return list of data types in the vector reference | |
86 | */ | |
87 | void GetInputDataTypes( vector<AliHLTComponentDataType>& ); | |
88 | ||
89 | /** | |
90 | * Get the output data type of the component. | |
91 | * The function is pure virtual and must be implemented by the child class. | |
92 | * @return output data type | |
93 | */ | |
94 | AliHLTComponentDataType GetOutputDataType(); | |
95 | ||
96 | /** | |
97 | * Get a ratio by how much the data volume is shrinked or enhanced. | |
98 | * The function is pure virtual and must be implemented by the child class. | |
99 | * @param constBase <i>return</i>: additive part, independent of the | |
100 | * input data volume | |
101 | * @param inputMultiplier <i>return</i>: multiplication ratio | |
102 | * @return values in the reference variables | |
103 | */ | |
104 | void GetOutputDataSize( unsigned long& constBase, double& inputMultiplier ); | |
105 | ||
106 | protected: | |
107 | /** | |
108 | * Internal initialization. | |
109 | * @see @ref AliHLTComponent::DoInit for description and parameters | |
110 | */ | |
111 | virtual int DoInit( int argc, const char** argv ); | |
112 | ||
113 | /** | |
114 | * The high-level data processing method. | |
115 | * All incoming objects are saved into a ROOT file in memory. | |
116 | * @param evtData event data structure | |
117 | * @param trigData trigger data structure | |
118 | * @return neg. error code if failed | |
119 | */ | |
120 | int DoEvent( const AliHLTComponentEventData& evtData, AliHLTComponentTriggerData& trigData); | |
a8abc5d5 | 121 | |
122 | using AliHLTProcessor::DoEvent; | |
79c114b5 | 123 | |
124 | private: | |
125 | /** not a valid copy constructor, defined according to effective C++ style */ | |
126 | AliHLTRootFileStreamerComponent(const AliHLTRootFileStreamerComponent&); | |
127 | /** not a valid assignment op, but defined according to effective C++ style */ | |
128 | AliHLTRootFileStreamerComponent& operator=(const AliHLTRootFileStreamerComponent&); | |
129 | ||
130 | /** data type */ | |
131 | AliHLTComponentDataType fDataType; // see above | |
132 | /** data specification */ | |
133 | AliHLTUInt32_t fSpecification; // see above | |
134 | ||
135 | ClassDef(AliHLTRootFileStreamerComponent, 0) | |
136 | }; | |
137 | #endif |