The present commit corresponds to an important change in the way the
[u/mrichter/AliRoot.git] / TRD / AliTRDdataArray.h
1 #ifndef ALITRDDATAARRAY_H
2 #define ALITRDDATAARRAY_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 /* $Id$ */
8  
9 #include   "AliTRDsegmentID.h"
10
11 /////////////////////////////////////////////////////////////
12 //  General container for data from TRD detector segments  //
13 //  Adapted from AliDigits, origin M.Ivanov                //
14 /////////////////////////////////////////////////////////////
15
16 class AliTRDarrayI;
17
18 class AliTRDdataArray : public AliTRDsegmentID {
19
20  public:
21
22   AliTRDdataArray();
23   AliTRDdataArray(Int_t nrow, Int_t ncol,Int_t ntime);
24   AliTRDdataArray(const AliTRDdataArray &d);
25   virtual ~AliTRDdataArray();
26   AliTRDdataArray &operator=(const AliTRDdataArray &d);
27
28   virtual void   Copy(TObject &d) const;
29   virtual void   Allocate(Int_t nrow, Int_t ncol,Int_t ntime);
30   virtual void   Reset();
31
32   virtual Int_t  GetNrow() const               { return fNrow;          };
33   virtual Int_t  GetNcol() const               { return fNcol;          };
34   virtual Int_t  GetNtime() const              { return fNtime;         };
35           Int_t  GetIndex(Int_t row, Int_t col, Int_t time) const;
36           Int_t  GetIndexUnchecked(Int_t row, Int_t col, Int_t time) const
37                                                { return time * fNrow*fNcol 
38                                                       + GetIdx1Unchecked(row,col); };
39           Int_t  GetBufType() const            { return fBufType;       };
40   virtual Int_t  GetNelems() const             { return fNelems;        };
41
42   virtual Bool_t HasData() const               { return fNtime ? 1 : 0; };
43
44  protected:
45
46           Int_t  GetIdx1(Int_t row, Int_t col) const;
47           Int_t  GetIdx1Unchecked(Int_t row, Int_t col) const
48                                                { return row + col * fNrow; };
49   inline  Bool_t CheckBounds(Int_t idx1, Int_t idx2);
50   inline  Bool_t OutOfBoundsError(Int_t idx1, Int_t idx2);
51  
52   Int_t          fNrow;            // Number of rows of the detector segement
53   Int_t          fNcol;            // Number of columns of the detector segment
54   Int_t          fNtime;           // Number of timebins of the detector segment
55
56   Int_t          fNdim1;           // First dimension of the array (row * column)
57   Int_t          fNdim2;           // Second dimension of the array (time, not compressed) 
58
59   AliTRDarrayI  *fIndex;           // Index position of column
60   Int_t          fBufType;         // Type of the buffer - defines the compression algorithm  
61   Int_t          fNelems;          // Total number of elements 
62   Int_t          fCurrentIdx1;     // !Current index 1
63   Int_t          fCurrentIdx2;     // !Current index 2
64   Int_t          fCurrentIndex;    // !Current index in field
65  
66   ClassDef(AliTRDdataArray,1)      // Data container for one TRD detector segment
67
68 };
69  
70 #endif
71