Line data Source code
1 : //-*- Mode: C++ -*-
2 : // $Id$
3 : #ifndef ALIHLTTPCHWCFEMULATOR_H
4 : #define ALIHLTTPCHWCFEMULATOR_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 : #include "AliHLTTPCHWCFExtractorUnit.h"
11 : #include "AliHLTTPCHWCFPeakFinderUnit.h"
12 : #include "AliHLTTPCHWCFProcessorUnit.h"
13 : #include "AliHLTTPCHWCFMergerUnit.h"
14 : #include "AliHLTTPCHWCFDivisionUnit.h"
15 :
16 : class AliHLTTPCClusterMCData;
17 : class AliHLTTPCClusterMCLabel;
18 :
19 : // @class AliHLTTPCHWCFEmulator
20 : // @author Sergey Gorbunov <sergey.gorbunov@fias.uni-frankfurt.de>
21 : // @author Torsten Alt <talt@cern.ch>
22 : // @brief FPGA ClusterFinder Emulator for TPC
23 : // @note
24 : //
25 : class AliHLTTPCHWCFEmulator
26 : {
27 : public:
28 :
29 : /** standard constructor */
30 : AliHLTTPCHWCFEmulator();
31 :
32 : /** destructor */
33 : virtual ~AliHLTTPCHWCFEmulator();
34 :
35 : /** set debug level */
36 0 : void SetDebugLevel( int val ){ fDebug = val; }
37 :
38 : /** initialisation
39 : */
40 : void Init( const AliHLTUInt32_t *mapping, AliHLTUInt32_t configWord1, AliHLTUInt32_t configWord2 );
41 :
42 : /** Loops over all rows finding the clusters
43 : */
44 : int FindClusters( const AliHLTUInt32_t *rawEvent,
45 : AliHLTUInt32_t rawEventSize32,
46 : AliHLTUInt32_t *output,
47 : AliHLTUInt32_t &outputSize32,
48 : const AliHLTTPCClusterMCLabel *mcLabels,
49 : AliHLTUInt32_t nMCLabels,
50 : AliHLTTPCClusterMCData *outputMC
51 : );
52 :
53 : /* useful tools */
54 :
55 : /** read the word written in big endian format (lowest byte first)
56 : */
57 : static AliHLTUInt32_t ReadBigEndian( AliHLTUInt32_t word );
58 :
59 : /** write a word in big endian format (least byte first)
60 : */
61 : static AliHLTUInt32_t WriteBigEndian( AliHLTUInt32_t word );
62 :
63 : /** create configuration word
64 : **/
65 : static void CreateConfiguration
66 : ( bool doDeconvTime, bool doDeconvPad, bool doFlowControl,
67 : bool doSinglePadSuppression, bool bypassMerger,
68 : AliHLTUInt32_t clusterLowerLimit,AliHLTUInt32_t singleSeqLimit,
69 : AliHLTUInt32_t mergerDistance, bool useTimeBinWindow, AliHLTUInt32_t chargeFluctuation, bool useTimeFollow,
70 : AliHLTUInt32_t &configWord1, AliHLTUInt32_t &configWord2 );
71 :
72 : /** create default configuration word
73 : **/
74 : static void CreateDefaultConfiguration( AliHLTUInt32_t &configWord1, AliHLTUInt32_t &configWord2 ){
75 0 : CreateConfiguration(0,0,0,1,0,0,0, 3, 1, 0, 1, configWord1, configWord2 );
76 0 : }
77 :
78 : /** set tagging of deconvoluted clusters
79 : **/
80 0 : void SetTagDeconvolutedClusters( AliHLTUInt32_t option ){ fDivisionUnit.SetTagDeconvolutedClusters( option ); }
81 :
82 : /** set RCU2 flag (data is not split in two branches)
83 : **/
84 0 : void SetProcessingRCU2Data( bool b ){ fChannelExtractor.SetRCU2Flag( b ); }
85 :
86 0 : void SetNoiseSuppression(int ns) {fPeakFinderUnit.SetNoiseSuppression(ns);}
87 :
88 : private:
89 :
90 : /** copy constructor prohibited */
91 : AliHLTTPCHWCFEmulator(const AliHLTTPCHWCFEmulator&);
92 : /** assignment operator prohibited */
93 : AliHLTTPCHWCFEmulator& operator=(const AliHLTTPCHWCFEmulator&);
94 :
95 : int fDebug; // debug level
96 : const AliHLTUInt32_t *fkMapping; //! mapping array
97 : AliHLTTPCHWCFExtractorUnit fChannelExtractor; //! transient
98 : AliHLTTPCHWCFPeakFinderUnit fPeakFinderUnit; //! transient
99 : AliHLTTPCHWCFProcessorUnit fChannelProcessor; //! transient
100 : AliHLTTPCHWCFMergerUnit fChannelMerger; //! transient
101 : AliHLTTPCHWCFDivisionUnit fDivisionUnit; //! transient
102 : };
103 : #endif
|