]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/TPCLib/HWCFemulator/AliHLTTPCHWCFEmulatorComponent.h
using one instance of decoder for all events
[u/mrichter/AliRoot.git] / HLT / TPCLib / HWCFemulator / AliHLTTPCHWCFEmulatorComponent.h
1 //-*- Mode: C++ -*-
2 // $Id$
3 #ifndef ALIHLTTPCHWCFEMULATORCOMPONENT_H
4 #define ALIHLTTPCHWCFEMULATORCOMPONENT_H
5
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   AliHLTTPCHWCFEmulatorComponent.h
11 //  @author Sergey Gorbunov <sergey.gorbunov@fias.uni-frankfurt.de>
12 //  @author Torsten Alt <talt@cern.ch> 
13 //  @brief  HLT Component interface for for FPGA ClusterFinder Emulator for TPC
14 //  @brief  ( see AliHLTTPCHWCFEmulator class )
15 //  @note
16
17
18
19 #include "AliHLTProcessor.h"
20 #include "AliHLTComponentBenchmark.h"
21 #include "AliHLTTPCHWCFSupport.h"
22 #include "AliHLTTPCHWCFEmulator.h"
23
24 class AliHLTTPCHWCFEmulator;
25 class AliHLTTPCDigitReader;
26 class AliTPCTransform;
27
28 /**
29  * @class AliHLTTPCHWCFEmulatorComponent
30  * The FPGA clusterfinder emulator for TPC
31  * The component implements the interface methods of the @ref AliHLTProcessor
32  * The actual cluster finding algorithm is implemented in @ref AliHLTTPCHWCFEmulator
33  *
34  * <h2>General properties:</h2>
35  *
36  * Component ID: \b TPCHWClusterFinderEmulator <br>
37  * Library: \b libAliHLTTPC
38  * Input Data Types: @ref kAliHLTDataTypeDDLRaw or AliHLTTPCDefinitions::fgkUnpackedRawDataType <br>
39  * Output Data Types: @ref AliHLTTPCDefinitions::fgkHWClustersDataType and AliHLTTPCDefinitions::fgkAliHLTDataTypeClusterMCInfo <br> 
40  *
41  *
42  * Mandatory arguments: <br>
43  * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
44  *
45  * Optional arguments: <br>
46  * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
47  * \li -deconvolute <br>  
48  *      Turns on deconvolution.
49  * \li -do-mc <br>  
50  *      Provide mc labels for found clusters
51  *
52  * <h2>Default CDB entries:</h2>
53  * None
54  *
55  * @ingroup alihlt_tpc_components
56  */
57 class AliHLTTPCHWCFEmulatorComponent : public AliHLTProcessor
58 {
59  public:      
60   /**
61    * constructor 
62    */
63   AliHLTTPCHWCFEmulatorComponent();
64   /** destructor */
65   virtual ~AliHLTTPCHWCFEmulatorComponent();
66   
67   // Public functions to implement AliHLTComponent's interface.
68   // These functions are required for the registration process
69
70   /** interface function, see AliHLTComponent for description */
71   const char* GetComponentID();
72
73   /** interface function, see AliHLTComponent for description */
74   void GetInputDataTypes( vector<AliHLTComponentDataType>& list);
75
76   /** interface function, see AliHLTComponent for description */
77   AliHLTComponentDataType GetOutputDataType();
78
79   /** interface function, see AliHLTComponent for description */
80   int GetOutputDataTypes(AliHLTComponentDataTypeList& tgtList);
81
82   /** interface function, see AliHLTComponent for description */
83   virtual void GetOutputDataSize( unsigned long& constBase, double& inputMultiplier );
84
85   /** interface function, see AliHLTComponent for description */
86   AliHLTComponent* Spawn();
87
88   /** interface function, see @ref AliHLTComponent for description */
89   void GetOCDBObjectDescription( TMap* const targetMap);
90
91  protected:
92   
93   // Protected functions to implement AliHLTComponent's interface.
94   // These functions provide initialization as well as the actual processing
95   // capabilities of the component. 
96   
97      /** @copydoc AliHLTComponent::DoInit
98       */
99     int DoInit( int argc, const char **argv );
100
101     /** @copydoc AliHLTComponent::DoDeinit
102      */
103     int DoDeinit();
104
105     /**  @copydoc @ref AliHLTComponent::Reconfigure
106      */
107     int Reconfigure( const char* cdbEntry, const char* chainId );
108
109     /**  @copydoc @ref AliHLTComponent::ScanConfigurationArgument
110      */
111     int ScanConfigurationArgument(int argc, const char** argv);
112
113     /** @copydoc @ref AliHLTProcessor::DoEvent
114      */
115     int DoEvent( const AliHLTComponentEventData& evtData, const AliHLTComponentBlockData* blocks, 
116                  AliHLTComponentTriggerData& trigData, AliHLTUInt8_t* outputPtr, 
117                  AliHLTUInt32_t& size, vector<AliHLTComponentBlockData>& outputBlocks );
118
119      
120     using AliHLTProcessor::DoEvent;
121   
122  private:
123
124   /** copy constructor prohibited */
125   AliHLTTPCHWCFEmulatorComponent(const AliHLTTPCHWCFEmulatorComponent&);
126
127   /** assignment operator prohibited */
128   AliHLTTPCHWCFEmulatorComponent& operator=(const AliHLTTPCHWCFEmulatorComponent&);
129
130   /** Set default configuration */
131   void SetDefaultConfiguration();
132
133   /** scan configuration string */
134   int ReadConfigurationString(  const char* arguments );
135
136   /** read configuration from OCDB */
137   int ReadCDBEntry( const char* cdbEntry, const char* chainId );
138
139   /** read configuration from multiple sources */
140   int Configure( const char* cdbEntry, const char* chainId, const char *commandLine );
141
142   Bool_t fDoDeconvTime;            // flag to deconvolute in time direction
143   Bool_t fDoDeconvPad;             // flag to deconvolute in pad direction
144   Bool_t fDoMC;                    // flag to provide MC labels
145   Bool_t fDoFlowControl;           // flag to control the data
146   Bool_t fDoSinglePadSuppression;  // flag for single pad suppression
147   Bool_t fBypassMerger;            // flag to bypass cluster merging between pads
148   AliHLTUInt32_t fClusterLowerLimit; // cut clusters at this charge value
149   AliHLTUInt32_t fSingleSeqLimit;    // cut sequences at this charge value
150   AliHLTUInt32_t fMergerDistance; // max. distance in mean time between two pads to be merged
151   bool           fUseTimeBinWindow; // use timebin window
152   bool           fUseTimeFollow; // use time follow algorithm for merging pads  
153   AliHLTUInt32_t fChargeFluctuation; // allowed charge fluctuation for peak finding 
154   Int_t fDebug; // debug level
155   AliHLTTPCHWCFSupport fCFSupport;     // !transient
156   AliHLTTPCHWCFEmulator fCFEmulator;   // !transient
157   AliHLTComponentBenchmark fBenchmark; // benchmark
158   
159 };
160 #endif