Merge TRD-develop
[u/mrichter/AliRoot.git] / TRD / AliTRDdataArray.h
index 8cce169..81f556d 100644 (file)
@@ -7,6 +7,7 @@
 /* $Id$ */
  
 #include   "AliTRDarrayI.h"
+#include   "AliTRDarrayF.h"
 #include   "AliTRDsegmentID.h"
 
 /////////////////////////////////////////////////////////////
@@ -19,30 +20,16 @@ class AliTRDdataArray : public AliTRDsegmentID {
  public:
 
   AliTRDdataArray();
+  AliTRDdataArray(Int_t nrow, Int_t ncol,Int_t ntime);
   ~AliTRDdataArray();
 
-  virtual void   Allocate(Int_t nrow, Int_t ncol,Int_t ntime);  
-  virtual void   Compress(Int_t bufferType, Int_t threshold);
-  virtual void   Compress(Int_t bufferType); 
-  virtual void   Expand();
-  virtual void   Reset();  
-  virtual Bool_t First();
-  virtual Bool_t Next(); 
+  virtual void   Allocate(Int_t nrow, Int_t ncol,Int_t ntime);
+  virtual void   Reset();
 
-  virtual void   SetData(Int_t row, Int_t col, Int_t time, Int_t value);
-
-  virtual void   SetThreshold(Int_t threshold) { fThreshold = threshold; };
-
-  virtual Int_t  GetThreshold()                { return fThreshold;  };
   virtual Int_t  GetNRow()                     { return fNrow;       };
   virtual Int_t  GetNCol()                     { return fNcol;       };
   virtual Int_t  GetNtime()                    { return fNtime;      };
 
-  virtual Int_t  GetSize();
-  virtual Int_t  GetDataSize(); 
-  virtual Int_t  GetOverThreshold(Float_t threshold);  
-
-  virtual Int_t  GetData(Int_t row, Int_t col, Int_t time);
   inline  Int_t  GetIndex(Int_t row, Int_t col, Int_t time);
 
  protected:
@@ -50,18 +37,6 @@ class AliTRDdataArray : public AliTRDsegmentID {
   inline  Int_t  GetIdx1(Int_t row, Int_t col);
   inline  Bool_t CheckBounds(const char *where, Int_t idx1, Int_t idx2);
   inline  Bool_t OutOfBoundsError(const char *where, Int_t idx1, Int_t idx2);
-  inline  void   SetDataFast(Int_t idx1, Int_t idx2, Int_t value); 
-  inline  Int_t  GetDataFast(Int_t idx1, Int_t idx2); 
-
-  Int_t          GetData1(Int_t idx1, Int_t idx2); 
-  void           Expand1(); 
-  void           Compress1(); 
-  void           Expand2();
-  void           Compress2();
-  Bool_t         First0();
-  Bool_t         Next0(); 
-  Bool_t         First1();
-  Bool_t         Next1();
  
   Int_t          fNrow;            // Number of rows of the detector segement
   Int_t          fNcol;            // Number of columns of the detector segment
@@ -69,13 +44,9 @@ class AliTRDdataArray : public AliTRDsegmentID {
 
   Int_t          fNdim1;           // First dimension of the array (row * column)
   Int_t          fNdim2;           // Second dimension of the array (time, not compressed) 
- private:
 
-  AliTRDarrayI  *fElements;        // Buffer of 4 bytes integers for the array content
   AliTRDarrayI  *fIndex;           // Index position of column
   Int_t          fBufType;         // Type of the buffer - defines the compression algorithm  
-  Int_t          fThreshold;       // Treshold for zero suppression
   Int_t          fNelems;          // Total number of elements 
   Int_t          fCurrentIdx1;     // !Current index 1
   Int_t          fCurrentIdx2;     // !Current index 2
@@ -92,6 +63,13 @@ inline Int_t AliTRDdataArray::GetIndex(Int_t row, Int_t col, Int_t time)
   // Maps the row/column/time into one number
   // 
 
+  if (time > fNtime) {
+    TObject::Error("GetIdx1"
+                  ,"time %d out of bounds (size: %d, this: 0x%08x)"
+                  ,time,fNtime,this);
+    return -1;
+  }  
+  
   return time * fNrow*fNcol + GetIdx1(row,col);
 
 }
@@ -103,7 +81,21 @@ inline Int_t AliTRDdataArray::GetIdx1(Int_t row, Int_t col)
   // Maps the two-dimensional row/column plane into an one-dimensional array.
   //
 
-  return row * fNrow + col;
+  if (row >= fNrow) {
+    TObject::Error("GetIdx1"
+                  ,"row %d out of bounds (size: %d, this: 0x%08x)"
+                  ,row,fNrow,this);
+    return -1;
+  }  
+
+  if (col >= fNcol) {
+    TObject::Error("GetIdx1"
+                  ,"col %d out of bounds (size: %d, this: 0x%08x)"
+                  ,col,fNcol,this);
+    return -1;
+  }  
+
+  return row + col * fNrow;
 
 }
 
@@ -134,41 +126,12 @@ inline Bool_t AliTRDdataArray::OutOfBoundsError(const char *where
   // Generate an out-of-bounds error. Always returns false.
   //
 
-  ::Error(where, "idx1 %d  idx2 %d out of bounds (size: %d x %d, this: 0x%08x)"
-        ,idx1,idx2,fNdim1,fNdim2,this);
+  TObject::Error(where, "idx1 %d  idx2 %d out of bounds (size: %d x %d, this: 0x%08x)"
+          ,idx1,idx2,fNdim1,fNdim2,this);
 
   return kFALSE;
 
 }
 
-//_____________________________________________________________________________
-inline Int_t AliTRDdataArray::GetDataFast(Int_t idx1, Int_t idx2)
-{
-  //
-  // Returns the value at a given position in the array
-  //
-
-  return fElements->At(fIndex->At(idx2) + idx1); 
-
-}
-
-//_____________________________________________________________________________
-inline void  AliTRDdataArray::SetDataFast(Int_t idx1, Int_t idx2, Int_t value)
-{
-  //
-  // Set the value at a given position in the array
-  //
-
-  if ((idx1 < 0) || (idx1 >= fNdim1) || 
-      (idx2 < 0) || (idx2 >= fNdim2)) { 
-    ::Error("AliTRDdataArray::SetDataFast"
-           ,"idx1 %d  idx2 %d out of bounds (size: %d x %d, this: 0x%08x)"
-           ,idx1,idx2,fNdim1,fNdim2,this);
-  }
-
-  (*fElements)[fIndex->fArray[idx2] + idx1] = value; 
-
-}
-
 #endif