]>
Commit | Line | Data |
---|---|---|
a46e9031 | 1 | #ifndef ALIDIGITS_H |
2 | #define ALIDIGITS_H | |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | /* $Id$ */ | |
7 | ||
7d855b04 | 8 | /// \class AliDigits |
9 | /// | |
10 | /// Manager class generaol Alice segment digits | |
11 | /// segment is for example one pad row in TPC | |
a46e9031 | 12 | |
e756ece8 | 13 | #include <TArrayI.h> |
14 | #include <TArrayS.h> | |
a46e9031 | 15 | #include "AliSegmentID.h" |
16 | class AliH2F; | |
17 | ||
18 | class AliDigits: public AliSegmentID{ | |
19 | public: | |
20 | AliDigits(); | |
21 | AliDigits(const AliDigits &digits); //copy constructor | |
22 | AliDigits &operator = (const AliDigits & digits); //assignment operator | |
23 | virtual ~AliDigits(); | |
51a4705b | 24 | Short_t * GetDigits(){return fElements->GetArray();} //return row pointer to the array digits |
a46e9031 | 25 | Short_t GetDigitFast(Int_t row, Int_t column); //return value at given row and collumn |
d06e80ef | 26 | Short_t GetDigitUnchecked(Int_t row, Int_t column); //return value at given row and collumn |
a46e9031 | 27 | void SetDigitFast(Short_t value,Int_t row, Int_t column); //set value at given row and collumn |
28 | Bool_t BoundsOK(const char *where, Int_t row, Int_t col) ; //Check If Bound Ok | |
29 | Bool_t OutOfBoundsError(const char *where, Int_t row, Int_t column); | |
30 | virtual void Allocate(Int_t rows, Int_t columns); //construct empty buffer fDigits with size rows x columns | |
31 | virtual Short_t GetDigit(Int_t row, Int_t column); | |
32 | virtual void ExpandBuffer(); //expand buffer to twodimensional array | |
33 | virtual void CompresBuffer(Int_t bufferType,Int_t threshold); //compres buffer according buffertype algorithm | |
34 | virtual Bool_t First(); //adjust first valid current digit | |
35 | virtual Bool_t Next(); //addjust next valid current digit | |
36 | void SetThreshold(Int_t th) {fThreshold = th;} //set threshold | |
37 | Int_t GetThreshold() {return fThreshold;} //return threshold | |
38 | Int_t GetNRows(){return fNrows;} | |
39 | Int_t GetNCols(){return fNcols;} | |
40 | Int_t CurrentRow(){ return fCurrentRow;} //return current row | |
41 | Int_t CurrentColumn(){ return fCurrentCol;} //return current column | |
42 | Int_t CurrentDigit() {return fElements->At(fCurrentIndex);} //return degit for current row and column | |
43 | void AcceptHisto(AliH2F * his); //update buffer for - it will content histogram values | |
44 | AliH2F * GenerHisto(); //generate 2 dimensional histogram with digits | |
45 | AliH2F *DrawDigits( const char *option=0,Float_t x1=-1, Float_t x2=-1, Float_t y1=-1, Float_t y2=-1); //draw digits | |
46 | ||
47 | Int_t GetSize();//return total size of object in bytes | |
48 | Int_t GetDigitSize(); //return total size of pure digits | |
49 | Int_t GetOverTh(Float_t threshold,Float_t x1=-1, Float_t x2=-1, Float_t y1=-1, Float_t y2=-1); //return number of digits over threshold | |
83717897 | 50 | |
51 | inline Short_t * GetDigitsColumn(Int_t row); //return row pointer to the array digits | |
52 | ||
a46e9031 | 53 | protected: |
54 | virtual void Invalidate(); | |
55 | void ExpandBuffer1(); //expand buffer of type to twodimensional array | |
56 | void CompresBuffer1(); //compres buffer according algorithm 1 | |
57 | Bool_t First0(); //first for the buffer type 0 | |
58 | Bool_t Next0(); //next for the buffer type 0 | |
59 | Bool_t First1(); //first for the buffer type 1 | |
60 | Bool_t Next1();//next for the buffer type 1 | |
61 | Short_t GetDigit1(Int_t row, Int_t column); //return digit for given row and column | |
62 | ||
7d855b04 | 63 | Int_t fNrows; ///< number of rows in Segment |
64 | Int_t fNcols; ///< number of collumns in Segment | |
a46e9031 | 65 | private: |
7d855b04 | 66 | TArrayS *fElements; ///< buffer of 2 bytes integers for digits |
67 | TArrayI *fIndex; ///< index position of column | |
68 | Int_t fBufType; ///< type of the buffer - define compression algorithm | |
69 | Int_t fThreshold; ///< treshold for zero suppresion | |
70 | Int_t fNelems; ///< total number of elements | |
71 | Int_t fCurrentRow; //!< current row iteration | |
72 | Int_t fCurrentCol; //!< current column iteration | |
73 | Int_t fCurrentIndex; //!< current index in field | |
a46e9031 | 74 | |
7d855b04 | 75 | /// \cond CLASSIMP |
e756ece8 | 76 | ClassDef(AliDigits,2) |
7d855b04 | 77 | /// \endcond |
a46e9031 | 78 | }; |
79 | ||
80 | ||
81 | ||
82 | inline Bool_t AliDigits::BoundsOK(const char *where, Int_t row, Int_t col) | |
83 | { | |
7d855b04 | 84 | /// Check If Bound Ok |
85 | ||
a46e9031 | 86 | if ( (col>=fNcols) || (col<0) ) return OutOfBoundsError(where,row,col); |
87 | Int_t index =(*fIndex).At(col)+row; | |
88 | if ( (index<0) || (index>fNelems)) return OutOfBoundsError(where,row,col); | |
89 | return kTRUE; | |
90 | } | |
91 | ||
92 | inline Short_t AliDigits::GetDigitFast(Int_t row, Int_t column) | |
93 | { | |
7d855b04 | 94 | /// return digit from fDigits array |
95 | /// if out of range return dummy value ( value at row = 0, collumn = 0) | |
96 | ||
a46e9031 | 97 | return fElements->At(fIndex->At(column)+row); |
98 | } | |
99 | ||
d06e80ef | 100 | inline Short_t AliDigits::GetDigitUnchecked(Int_t row, Int_t column) |
101 | { | |
7d855b04 | 102 | /// return digit from fDigits array |
103 | /// if out of range return dummy value ( value at row = 0, collumn = 0) | |
104 | ||
d06e80ef | 105 | return fElements->fArray[fIndex->fArray[column]+row]; |
106 | } | |
107 | ||
83717897 | 108 | inline Short_t * AliDigits::GetDigitsColumn(Int_t column){ |
7d855b04 | 109 | /// return row pointer to the array digits |
110 | ||
83717897 | 111 | return &(fElements->fArray[fIndex->fArray[column]]); |
112 | } | |
113 | ||
114 | ||
a46e9031 | 115 | inline void AliDigits::SetDigitFast(Short_t value, Int_t row, Int_t column) |
116 | { | |
7d855b04 | 117 | /// set digit |
118 | ||
51a4705b | 119 | if ( (row<0) || (row>=fNrows) || (column<0) || (column>=fNcols) ) |
07695336 | 120 | Error("AliDigits::SetDigitFast", "row %d col %d out of bounds (size: %d x %d, this: 0x%08lx)", |
121 | row, column, fNrows, fNcols, (ULong_t)this); | |
a46e9031 | 122 | (*fElements)[fIndex->At(column)+row]=value; |
123 | } | |
124 | ||
125 | #endif | |
126 |