]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TPC/TPCbase/AliDigits.h
doxy: TPC/TPCbase converted
[u/mrichter/AliRoot.git] / TPC / TPCbase / AliDigits.h
CommitLineData
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"
16class AliH2F;
17
18class AliDigits: public AliSegmentID{
19public:
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 53protected:
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 65private:
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
82inline 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
92inline 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 100inline 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 108inline 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 115inline 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