aa97dd561690d161549a6c689c404e5762f97273
[u/mrichter/AliRoot.git] / HLT / TPCLib / HWCFemulator / AliHLTTPCHWCFDataTypes.h
1 // $Id$
2 #ifndef ALIHLTTPCHWCFDATATYPES_H
3 #define ALIHLTTPCHWCFDATATYPES_H
4 //* This file is property of and copyright by the ALICE HLT Project        * 
5 //* ALICE Experiment at CERN, All rights reserved.                         *
6 //* See cxx source for full Copyright notice                               *
7
8 //  @file   AliHLTTPCHWCFDataTypes.h
9 //  @author Sergey Gorbunov <sergey.gorbunov@fias.uni-frankfurt.de>
10 //  @author Torsten Alt <talt@cern.ch> 
11 //  @brief  Data types for FPGA ClusterFinder Emulator for TPC
12 //  @brief  ( see AliHLTTPCHWCFEmulator class )
13 //  @note
14
15 #include "AliHLTDataTypes.h"
16 #include "AliHLTTPCClusterMCData.h"
17 #include <vector>
18
19
20 struct AliHLTTPCHWCFDefinitions
21 {
22   static const unsigned int kMaxNTimeBins = 1024+10; // max N time bins
23   static const int kFixedPoint = 12; // N bits after fixed point 
24                                      // for fixed point operations
25 };
26
27 typedef struct AliHLTTPCHWCFDefinitions AliHLTTPCHWCFDefinitions;
28
29 struct AliHLTTPCHWCFBunch
30 {
31   //* constructor **/
32   AliHLTTPCHWCFBunch(): fFlag(0), fRow(0), fPad(0), fBranch(0), fBorder(0),
33        fTime(0),fGain(0), fData(), fMC()
34   {}
35
36   AliHLTUInt32_t fFlag; // 0 - Off, 1 - data, 2 - RCU trailer, 3 - end of data
37   AliHLTUInt32_t fRow;  // row number
38   AliHLTUInt32_t fPad;  // pad number
39   bool fBranch;         // 0  - pad belongs to branch A, 1 - pad belongs to branch B
40   bool fBorder;         // is the pad at the border of its branch
41   AliHLTUInt32_t fTime; // time of the first signal
42   AliHLTUInt64_t fGain; // gain correction factor 
43                         //   (fixed point integer with kFixedPoint bits after the point)
44   std::vector<AliHLTUInt32_t> fData;      // signals
45   std::vector<AliHLTTPCClusterMCLabel> fMC; // mc labels
46 };
47 typedef struct AliHLTTPCHWCFBunch AliHLTTPCHWCFBunch;
48
49 struct AliHLTTPCHWCFClusterFragment
50 {
51   //* constructor **/
52   AliHLTTPCHWCFClusterFragment():  fFlag(0), fRow(0), fPad(0), fBranch(0), fBorder(0),
53        fQmax(0), fQ(0), fT(0), fP(0), fT2(0), fP2(0), fTMean(0),fLastQ(0), fSlope(0), fMC()
54   {}
55
56   AliHLTUInt32_t fFlag; // 0 - Off, 1 - data, 2 - RCU trailer, 3 - end of data
57   AliHLTUInt32_t fRow;  // row number
58   AliHLTUInt32_t fPad;  // pad number
59   bool fBranch;         // 0  - pad belongs to branch A, 1 - pad belongs to branch B
60   bool fBorder;         // is the pad at the border of its branch
61   AliHLTUInt64_t fQmax; // total charge, fixed point integer
62   AliHLTUInt64_t fQ;    // total charge, fixed point integer
63   AliHLTUInt64_t fT;    // sum of time*charge , fixed point integer
64   AliHLTUInt64_t fP;    // sum of pad*charge  , fixed point integer
65   AliHLTUInt64_t fT2;   // sum of time^2*charge , fixed point integer
66   AliHLTUInt64_t fP2;   // sum of pad^2*charge  , fixed point integer
67   AliHLTUInt64_t fTMean;// mean time, used for merging neighbouring pads
68   AliHLTUInt64_t fLastQ; // for merged fragments, charge of the last (highest pad value)
69                          //    fragment bein merged, needed for deconvolution
70   bool fSlope;           // for merged fragments, ==1 if fLastQ decreases
71                          //   ( needed for deconvolution )
72   std::vector<AliHLTTPCClusterMCLabel> fMC; // mc labels
73 };
74 typedef struct AliHLTTPCHWCFClusterFragment AliHLTTPCHWCFClusterFragment;
75
76 struct AliHLTTPCHWCFCluster
77 {
78   //* constructor **/
79   AliHLTTPCHWCFCluster(): fFlag(0), fRowQ(0), fQ(0), fT(0), fP(0), fT2(0), fP2(0), fMC()
80   {}
81
82   AliHLTUInt32_t fFlag; // 0 - Off, 1 - data, 2 - RCU trailer, 3 - end of data
83   AliHLTUInt32_t fRowQ; // bits 30-31 = 0x3
84                         // bits 24-29 = row number
85                         // bits 0 -23 = max adc value as fixed point integer,
86                         //              with 12 bits after the point
87   AliHLTUInt32_t fQ;    // total charge as fixed point integer, 12 bits after the point
88   AliHLTUInt32_t fT;    // mean time, 32-bit float stored as 32-bit integer
89   AliHLTUInt32_t fP;    // mean pad,  32-bit float stored as 32-bit integer
90   AliHLTUInt32_t fT2;   // mean time^2, 32-bit float stored as 32-bit integer
91   AliHLTUInt32_t fP2;   // mean pad^2,  32-bit float stored as 32-bit integer
92
93   AliHLTTPCClusterMCLabel fMC; // mc label
94 };
95 typedef struct AliHLTTPCHWCFCluster AliHLTTPCHWCFCluster;
96
97 #endif