]>
Commit | Line | Data |
---|---|---|
a38a7850 | 1 | // XEmacs -*-C++-*- |
2 | // @(#) $Id$ | |
3 | ||
4 | #ifndef ALIHLTTPCDIGITREADERUNPACKED_H | |
5 | #define ALIHLTTPCDIGITREADERUNPACKED_H | |
6 | ||
297174de | 7 | //* This file is property of and copyright by the ALICE HLT Project * |
8 | //* ALICE Experiment at CERN, All rights reserved. * | |
9 | //* See cxx source for full Copyright notice * | |
a38a7850 | 10 | |
84645eb0 | 11 | /** @file AliHLTTPCDigitReaderUnpacked.h |
12 | @author Timm Steinbeck, Jochen Thaeder, Matthias Richter | |
13 | @date | |
14 | @brief A digit reader implementation for unpacked TPC data. | |
15 | */ | |
a38a7850 | 16 | |
17 | #include "AliHLTTPCDigitReader.h" | |
18 | #include "AliHLTTPCDigitData.h" | |
deba5d85 | 19 | class AliHLTTPCMapping; |
a38a7850 | 20 | class AliHLTTPCDigitRowData; |
21 | ||
84645eb0 | 22 | /** |
e962f438 | 23 | * @class AliHLTTPCDigitReaderUnpacked |
84645eb0 | 24 | * A digit reader implementation for unpacked TPC data. |
25 | * @ingroup alihlt_tpc | |
26 | */ | |
a38a7850 | 27 | class AliHLTTPCDigitReaderUnpacked : public AliHLTTPCDigitReader{ |
28 | public: | |
84645eb0 | 29 | /** standard constructor */ |
a38a7850 | 30 | AliHLTTPCDigitReaderUnpacked(); |
84645eb0 | 31 | /** destructor */ |
a38a7850 | 32 | virtual ~AliHLTTPCDigitReaderUnpacked(); |
5df0cbb9 | 33 | |
34 | /** | |
35 | * Init the reader | |
36 | * @param ptr pointer to input buffer | |
37 | * @param size size of the input buffer | |
38 | * @param patch readout partition | |
39 | * @param slice sector no | |
40 | */ | |
84645eb0 | 41 | int InitBlock(void* ptr,unsigned long size, Int_t patch, Int_t slice); |
5d2abf3b | 42 | using AliHLTTPCDigitReader::InitBlock; |
5df0cbb9 | 43 | |
44 | /** | |
45 | * place the reader at the next signal | |
46 | * @return 1 if there was a nest signal, 0 if not | |
47 | */ | |
f44e97dc | 48 | bool NextSignal(); |
5df0cbb9 | 49 | |
50 | /** | |
51 | * Get row number of the current signal | |
52 | * @return row number of the current signal | |
53 | */ | |
a38a7850 | 54 | int GetRow(); |
5df0cbb9 | 55 | |
56 | /** | |
57 | * Get pad number of the current signal | |
58 | * @return pad number of the current signal | |
59 | */ | |
a38a7850 | 60 | int GetPad(); |
5df0cbb9 | 61 | |
62 | /** | |
63 | * Get signal | |
64 | * @return ADC signal | |
65 | */ | |
a38a7850 | 66 | int GetSignal(); |
5df0cbb9 | 67 | |
68 | /** | |
69 | * Get time of the current signal | |
70 | * @return time of the current signal | |
71 | */ | |
a38a7850 | 72 | int GetTime(); |
73 | ||
deba5d85 | 74 | bool NextChannel(); |
75 | int NextBunch(); | |
76 | AliHLTUInt32_t GetAltroBlockHWaddr() const; | |
77 | int GetBunchSize(); | |
78 | const UInt_t* GetSignals(); | |
deeb43e0 | 79 | AliHLTTPCDigitData GetSortedDigit(); |
deba5d85 | 80 | Int_t GetSortedTime(); |
81 | Int_t GetSortedSignal(); | |
82 | Int_t GetSortedPad() const; | |
83 | Int_t GetSortedRow() const; | |
84 | int GetRowOffset() const; | |
85 | ||
86 | void SetUnsorted(bool unsorted){fUnsorted=unsorted;} | |
87 | ||
959cfda3 | 88 | void SortBunchBinVector(); // fills the vector fBinRowPositionSorted so that digits are read in the correct order |
89 | ||
deba5d85 | 90 | const AliHLTTPCDigitData* GetBunchDigits(); |
91 | ||
a38a7850 | 92 | protected: |
93 | ||
94 | ||
95 | private: | |
8f8bf0af | 96 | /** copy constructor prohibited */ |
97 | AliHLTTPCDigitReaderUnpacked(const AliHLTTPCDigitReaderUnpacked&); | |
98 | /** assignment operator prohibited */ | |
99 | AliHLTTPCDigitReaderUnpacked& operator=(const AliHLTTPCDigitReaderUnpacked&); | |
100 | ||
67fada6b | 101 | /** |
102 | * Increment to the next raw data pointer. | |
103 | * @param pRow [IN] the current row data pointer | |
104 | * [OUT] the new pointer | |
105 | * @return -EBADF in case of format error | |
106 | */ | |
107 | int GetNextRowData(AliHLTTPCDigitRowData*& pRow) const; | |
108 | ||
5df0cbb9 | 109 | /** intermediate row data structure (pointer in fPtr buffer) */ |
a38a7850 | 110 | AliHLTTPCDigitRowData *fDigitRowData; //! |
5df0cbb9 | 111 | /** current row data structure (pointer in fPtr buffer) */ |
a38a7850 | 112 | AliHLTTPCDigitRowData *fActRowData; //! |
5df0cbb9 | 113 | /** the current digit data */ |
a38a7850 | 114 | AliHLTTPCDigitData *fData; //! |
5df0cbb9 | 115 | |
116 | /** input buffer */ | |
84645eb0 | 117 | void* fPtr; //! |
5df0cbb9 | 118 | /** size of the input buffer */ |
119 | unsigned long fSize; // see above | |
120 | ||
121 | /** current bin */ | |
122 | Int_t fBin; // see above | |
123 | /** current row */ | |
124 | Int_t fRow; // see above | |
125 | /** first row */ | |
126 | Int_t fFirstRow; // see above | |
127 | /** last row */ | |
128 | Int_t fLastRow; // see above | |
a38a7850 | 129 | |
deba5d85 | 130 | Bool_t fUnsorted; //!transient |
131 | ||
132 | /** array to hold bunch data */ | |
133 | vector<UInt_t> fDataBunch; //! transient | |
134 | ||
135 | vector<Int_t> fTrackIDs; //! transient | |
136 | vector<UInt_t> fTrackIDCounts; //! transient | |
137 | ||
138 | Bool_t fEndOfDataReached; //! transient | |
139 | ||
140 | Bool_t fEndOfChannelReached; //! transient | |
141 | ||
142 | Int_t fPrevTime; //! transient | |
143 | ||
144 | Int_t fEndTimeBinOfBunch; //! transient | |
145 | ||
146 | Int_t fPrevSignal; //! transient | |
147 | ||
148 | Int_t fPrevPad; //! transient | |
149 | ||
150 | Int_t fPrevRow; //! transient | |
151 | ||
152 | Bool_t fNextChannelIsAlreadyConfirmed; //! transient | |
153 | ||
154 | AliHLTTPCMapping *fMapping; //! transient | |
155 | ||
156 | vector<AliHLTTPCDigitData> fDigitsVector; //! transient | |
157 | ||
959cfda3 | 158 | vector<Int_t>fBinRowPositionSorted; //! transient |
159 | ||
deba5d85 | 160 | Int_t fPatch; |
161 | ||
22240104 | 162 | ClassDef(AliHLTTPCDigitReaderUnpacked, 0) |
a38a7850 | 163 | }; |
164 | #endif | |
165 | ||
166 | ||
167 |