3 #ifndef ALIHLTTPCHWCFEMULATORCOMPONENT_H
4 #define ALIHLTTPCHWCFEMULATORCOMPONENT_H
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 *
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 )
19 #include "AliHLTProcessor.h"
20 #include "AliHLTComponentBenchmark.h"
21 #include "AliHLTTPCHWCFSupport.h"
22 #include "AliHLTTPCHWCFEmulator.h"
24 class AliHLTTPCHWCFEmulator;
25 class AliHLTTPCDigitReader;
26 class AliTPCTransform;
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
34 * <h2>General properties:</h2>
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>
42 * Mandatory arguments: <br>
43 * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
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.
50 * Provide mc labels for found clusters
52 * <h2>Default CDB entries:</h2>
55 * @ingroup alihlt_tpc_components
57 class AliHLTTPCHWCFEmulatorComponent : public AliHLTProcessor
63 AliHLTTPCHWCFEmulatorComponent();
65 virtual ~AliHLTTPCHWCFEmulatorComponent();
67 // Public functions to implement AliHLTComponent's interface.
68 // These functions are required for the registration process
70 /** interface function, see AliHLTComponent for description */
71 const char* GetComponentID();
73 /** interface function, see AliHLTComponent for description */
74 void GetInputDataTypes( vector<AliHLTComponentDataType>& list);
76 /** interface function, see AliHLTComponent for description */
77 AliHLTComponentDataType GetOutputDataType();
79 /** interface function, see AliHLTComponent for description */
80 int GetOutputDataTypes(AliHLTComponentDataTypeList& tgtList);
82 /** interface function, see AliHLTComponent for description */
83 virtual void GetOutputDataSize( unsigned long& constBase, double& inputMultiplier );
85 /** interface function, see AliHLTComponent for description */
86 AliHLTComponent* Spawn();
88 /** interface function, see @ref AliHLTComponent for description */
89 void GetOCDBObjectDescription( TMap* const targetMap);
93 // Protected functions to implement AliHLTComponent's interface.
94 // These functions provide initialization as well as the actual processing
95 // capabilities of the component.
97 /** @copydoc AliHLTComponent::DoInit
99 int DoInit( int argc, const char **argv );
101 /** @copydoc AliHLTComponent::DoDeinit
105 /** @copydoc @ref AliHLTComponent::Reconfigure
107 int Reconfigure( const char* cdbEntry, const char* chainId );
109 /** @copydoc @ref AliHLTComponent::ScanConfigurationArgument
111 int ScanConfigurationArgument(int argc, const char** argv);
113 /** @copydoc @ref AliHLTProcessor::DoEvent
115 int DoEvent( const AliHLTComponentEventData& evtData, const AliHLTComponentBlockData* blocks,
116 AliHLTComponentTriggerData& trigData, AliHLTUInt8_t* outputPtr,
117 AliHLTUInt32_t& size, vector<AliHLTComponentBlockData>& outputBlocks );
120 using AliHLTProcessor::DoEvent;
124 /** copy constructor prohibited */
125 AliHLTTPCHWCFEmulatorComponent(const AliHLTTPCHWCFEmulatorComponent&);
127 /** assignment operator prohibited */
128 AliHLTTPCHWCFEmulatorComponent& operator=(const AliHLTTPCHWCFEmulatorComponent&);
130 /** Set default configuration */
131 void SetDefaultConfiguration();
133 /** scan configuration string */
134 int ReadConfigurationString( const char* arguments );
136 /** read configuration from OCDB */
137 int ReadCDBEntry( const char* cdbEntry, const char* chainId );
139 /** read configuration from multiple sources */
140 int Configure( const char* cdbEntry, const char* chainId, const char *commandLine );
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