HLT sample applications
[u/mrichter/AliRoot.git] / HLT / BASE / util / AliHLTLoaderPublisherComponent.h
1 //-*- Mode: C++ -*-
2 // @(#) $Id$
3
4 #ifndef ALIHLTLOADERPUBLISHERCOMPONENT_H
5 #define ALIHLTLOADERPUBLISHERCOMPONENT_H
6 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
7  * See cxx source for full Copyright notice                               */
8
9 /** @file   AliHLTLoaderPublisherComponent.h
10     @author Matthias Richter
11     @date   
12     @brief  A general tree publisher component for the AliLoader.
13 */
14
15 #include "AliHLTOfflineDataSource.h"
16
17 class AliLoader;
18
19 /**
20  * @class AliHLTLoaderPublisherComponent
21  * A general tree publisher component for the AliLoader.
22  * 
23  * Component ID: \b AliLoaderPublisher <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 -loader       <i> loader name      </i>
29  *      e.g. <tt> -loader TPCLoader </tt>
30  * \li -tree         <i> tree name </i> : digits (default), clusters     
31  *      e.g. <tt> -tree digits </tt>
32  * \li -verbose<br>
33  *      print out some more info messages, mainly for the sake of tutorials
34  * \li -datatype     <i> datatype   dataorigin </i> <br>
35  *      data type ID and origin, e.g. <tt>-datatype DIGITS TPC </tt>
36  * \li -dataspec     <i> specification </i> <br>
37  *      data specification treated as decimal number or hex number if
38  *      prepended by '0x'
39  *
40  * Optional arguments:<br>
41  *
42  *
43  * @ingroup alihlt_system
44  */
45 class AliHLTLoaderPublisherComponent : public AliHLTOfflineDataSource {
46  public:
47   /** standard constructor */
48   AliHLTLoaderPublisherComponent();
49   /** destructor */
50   virtual ~AliHLTLoaderPublisherComponent();
51
52   /**
53    * Get the id of the component.
54    * Each component is identified by a unique id.
55    * The function is pure virtual and must be implemented by the child class.
56    * @return component id (string)
57    */
58   const char* GetComponentID();
59
60   /**
61    * Get the output data type of the component.
62    * The function is pure virtual and must be implemented by the child class.
63    * @return output data type
64    */
65   AliHLTComponentDataType GetOutputDataType();
66
67   /**
68    * Get a ratio by how much the data volume is shrinked or enhanced.
69    * The function is pure virtual and must be implemented by the child class.
70    * @param constBase        <i>return</i>: additive part, independent of the
71    *                                   input data volume  
72    * @param inputMultiplier  <i>return</i>: multiplication ratio
73    * @return values in the reference variables
74    */
75   void GetOutputDataSize( unsigned long& constBase, double& inputMultiplier );
76
77   /**
78    * Spawn function.
79    * Each component must implement a spawn function to create a new instance of 
80    * the class. Basically the function must return <i>new <b>my_class_name</b></i>.
81    * @return new class instance
82    */
83   virtual AliHLTComponent* Spawn();
84
85  protected:
86   /**
87    * Init method.
88    */
89   int DoInit( int argc, const char** argv );
90
91   /**
92    * Deinit method.
93    */
94   int DoDeinit();
95
96   /**
97    * Data source method.
98    * @param evtData       event data structure
99    * @param trigData      trigger data structure
100    * @return
101    */
102   int GetEvent(const AliHLTComponentEventData& evtData,
103                AliHLTComponentTriggerData& trigData);
104
105  private:
106   /**
107    * Get tree of type specified in fTreeType from loader.
108    */
109   TTree* GetTree();
110
111   /** max output block size, estimate during DoInit */
112   Int_t                   fMaxSize;                                //!transient
113
114   /** loader string */
115   TString                 fLoaderType;                             //!transient
116
117   /** tree string */
118   TString                 fTreeType;                               //!transient
119
120   /** be verbose: info printouts */
121   Bool_t                  fVerbose;                                //!transient
122
123   /** data type */
124   AliHLTComponentDataType fDataType;                               //!transient
125
126   /** data specification */
127   AliHLTUInt32_t          fSpecification;                          //!transient
128
129   /** instance of the AliLoader */
130   AliLoader*              fpLoader;                                //!transient
131
132   ClassDef(AliHLTLoaderPublisherComponent, 0);
133 };
134
135 #endif