d11debaa1d7028a4688139366aa34b2ef9a9ef0e
[u/mrichter/AliRoot.git] / HLT / BASE / util / AliHLTFilePublisher.h
1 // -*- Mode: C++ -*-
2 // @(#) $Id$
3
4 #ifndef ALIHLTFILEPUBLISHER_H
5 #define ALIHLTFILEPUBLISHER_H
6 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
7  * See cxx source for full Copyright notice                               */
8
9 /** @file   AliHLTFilePublisher.h
10     @author Matthias Richter
11     @date   
12     @brief  An HLT file publishing (data source) component.
13     @note   The class is used in Offline (AliRoot) context
14 */
15
16 #include "AliHLTDataSource.h"
17 #include <TList.h>
18
19 /**
20  * @class AliHLTFilePublisher
21  * An HLT data source component which publishes data from one or a sequence
22  * of files.<br>
23  *
24  * Component ID: \b FilePublisher <br>
25  * Library: \b libAliHLTUtil.
26  *
27  * Mandatory arguments: <br>
28  * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formating -->
29  * \li -datafile     <i> filename      </i>
30  * \li -datafilelist <i> file pattern  </i> <br>
31  *      not yet implemented
32  * \li -datatype     <i> datatype   dataorigin </i> <br>
33  *      data type ID and origin, e.g. <tt>-datatype CLUSTERS TPC </tt>
34  * \li -dataspec     <i> specification </i> <br>
35  *      data specification treated as decimal number or hex number if
36  *      prepended by '0x'
37  *
38  * Optional arguments:<br>
39  *
40  * The component needs at least one argument \em -datafile or \em -datafilelist.
41  * Both can occur multiple times. The \em -datatype and \em -dataspec
42  * parameters are valid for all files until the next occurrence of
43  * \em -datatype/spec
44  * @ingroup alihlt_component
45  */
46 class AliHLTFilePublisher : public AliHLTDataSource  {
47  public:
48   /** standard constructor */
49   AliHLTFilePublisher();
50   /** not a valid copy constructor, defined according to effective C++ style */
51   AliHLTFilePublisher(const AliHLTFilePublisher&);
52   /** not a valid assignment op, but defined according to effective C++ style */
53   AliHLTFilePublisher& operator=(const AliHLTFilePublisher&);
54   /** destructor */
55   virtual ~AliHLTFilePublisher();
56
57   const char* GetComponentID();
58   AliHLTComponentDataType GetOutputDataType();
59   void GetOutputDataSize( unsigned long& constBase, double& inputMultiplier );
60   AliHLTComponent* Spawn();
61
62   /**
63    * Open all files.
64    * Opens all files from the file name list @ref fFileNames and adds TFile
65    * opjects to the TFiles list.
66    */
67   int OpenFiles();
68
69  protected:
70   /**
71    * Init method.
72    */
73   int DoInit( int argc, const char** argv );
74
75   /**
76    * Deinit method.
77    */
78   int DoDeinit();
79
80   /**
81    * Data processing method for the component.
82    * @param evtData       event data structure
83    * @param trigData      trigger data structure
84    * @param outputPtr     pointer to target buffer
85    * @param size          <i>input</i>: size of target buffer
86    *                      <i>output</i>:size of produced data
87    * @param outputBlocks  list to receive output block descriptors
88    * @return
89    */
90   int GetEvent( const AliHLTComponentEventData& evtData,
91                         AliHLTComponentTriggerData& trigData,
92                         AliHLTUInt8_t* outputPtr, 
93                         AliHLTUInt32_t& size,
94                         vector<AliHLTComponentBlockData>& outputBlocks );
95
96   /**
97    * Scan one argument and adjacent parameters.
98    * Can be overloaded by child classes in order to add additional arguments
99    * beyond the standard arguments of the file publisher. The method is called
100    * whenever a non-standard argument is recognized.
101    * @param argc           size of the argument array
102    * @param argv           agument array for component initialization
103    * @return number of processed members of the argv <br>
104    *         -EINVAL unknown argument <br>
105    *         -EPROTO parameter for argument missing <br>
106    */
107   virtual int ScanArgument(int argc, const char** argv);
108
109  protected:
110   /**
111    * Get the data type which is set for the current file
112    */
113   AliHLTComponentDataType GetCurrentDataType() const;
114
115   /**
116    * Get the data specification which is set for the current file
117    */
118   AliHLTUInt32_t          GetCurrentSpecification() const;
119   
120  private:
121   /** list of file names */
122   TList                   fFileNames;                              // see above
123   /** list of opened files */
124   TList                   fFiles;                                  // see above
125   /** current positions in the file list */
126   TObjLink*               fpCurrent;                               //! transient
127   /** data type */
128   AliHLTComponentDataType fDataType;                               // see above
129   /** data specification */
130   AliHLTUInt32_t          fSpecification;                          // see above
131   /** the maximum buffer size i.e. size of the biggest file */
132   Int_t                   fMaxSize;                                // see above
133
134   ClassDef(AliHLTFilePublisher, 0)
135 };
136 #endif