1 #ifndef ALITRDDATAARRAY_H
2 #define ALITRDDATAARRAY_H
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
9 #include "AliTRDarrayI.h"
10 #include "AliTRDarrayF.h"
11 #include "AliTRDsegmentID.h"
13 /////////////////////////////////////////////////////////////
14 // General container for data from TRD detector segments //
15 // Adapted from AliDigits, origin M.Ivanov //
16 /////////////////////////////////////////////////////////////
18 class AliTRDdataArray : public AliTRDsegmentID {
23 AliTRDdataArray(Int_t nrow, Int_t ncol,Int_t ntime);
24 AliTRDdataArray(AliTRDdataArray &d);
25 virtual ~AliTRDdataArray();
27 virtual void Copy(AliTRDdataArray &d);
28 virtual void Allocate(Int_t nrow, Int_t ncol,Int_t ntime);
31 virtual Int_t GetNRow() { return fNrow; };
32 virtual Int_t GetNCol() { return fNcol; };
33 virtual Int_t GetNtime() { return fNtime; };
35 Int_t GetIndex(Int_t row, Int_t col, Int_t time);
36 inline AliTRDdataArray &operator=(AliTRDdataArray &d);
40 Int_t GetIdx1(Int_t row, Int_t col);
41 inline Bool_t CheckBounds(const char *where, Int_t idx1, Int_t idx2);
42 inline Bool_t OutOfBoundsError(const char *where, Int_t idx1, Int_t idx2);
44 Int_t fNrow; // Number of rows of the detector segement
45 Int_t fNcol; // Number of columns of the detector segment
46 Int_t fNtime; // Number of timebins of the detector segment
48 Int_t fNdim1; // First dimension of the array (row * column)
49 Int_t fNdim2; // Second dimension of the array (time, not compressed)
51 AliTRDarrayI *fIndex; // Index position of column
52 Int_t fBufType; // Type of the buffer - defines the compression algorithm
53 Int_t fNelems; // Total number of elements
54 Int_t fCurrentIdx1; // !Current index 1
55 Int_t fCurrentIdx2; // !Current index 2
56 Int_t fCurrentIndex; // !Current index in field
58 ClassDef(AliTRDdataArray,1) // Data container for one TRD detector segment
62 //_____________________________________________________________________________
63 Bool_t AliTRDdataArray::CheckBounds(const char *where, Int_t idx1, Int_t idx2)
66 // Does the boundary checking
69 if ((idx2 >= fNdim2) || (idx2 < 0))
70 return OutOfBoundsError(where,idx1,idx2);
72 Int_t index = (*fIndex).At(idx2) + idx1;
73 if ((index < 0) || (index > fNelems))
74 return OutOfBoundsError(where,idx1,idx2);
80 //_____________________________________________________________________________
81 Bool_t AliTRDdataArray::OutOfBoundsError(const char *where, Int_t idx1, Int_t idx2)
84 // Generate an out-of-bounds error. Always returns false.
87 TObject::Error(where, "idx1 %d idx2 %d out of bounds (size: %d x %d, this: 0x%08x)"
88 ,idx1,idx2,fNdim1,fNdim2,this);
94 //_____________________________________________________________________________
95 AliTRDdataArray &AliTRDdataArray::operator=(AliTRDdataArray &d)
98 // Assignment operator
101 if (this != &d) d.Copy(*this);