code documentation; minor enhancement of BlockFilter
[u/mrichter/AliRoot.git] / HLT / BASE / util / AliHLTRootFileStreamerComponent.h
CommitLineData
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 */
62class 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