]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliDigits.h
1.
[u/mrichter/AliRoot.git] / TPC / AliDigits.h
index 201f8871f891104d8b11530860186a295bcfc89e..ccbc722b036f75292f168647b25ab4cf4595b399 100644 (file)
 //  segment is for example one pad row in TPC //
 ////////////////////////////////////////////////
 
-#include   "AliArrayI.h"
-#include   "AliArrayS.h"
+#include   <TArrayI.h>
+#include   <TArrayS.h>
 #include   "AliSegmentID.h"
 class AliH2F;
 
 class AliDigits: public AliSegmentID{ 
 public:
   AliDigits();
-  ~AliDigits();
-  inline Short_t GetDigitFast(Int_t row, Int_t column);  //return value at given row and collumn
-  inline void  SetDigitFast(Short_t value,Int_t row, Int_t column);  //set value at given row and collumn
-  inline Bool_t BoundsOK(const char *where, Int_t row, Int_t col) ;  //Check If Bound Ok
+  AliDigits(const AliDigits &digits); //copy constructor
+  AliDigits &operator = (const AliDigits & digits); //assignment operator
+  virtual ~AliDigits();
+  Short_t * GetDigits(){return fElements->GetArray();}   //return row  pointer to the array digits
+  Short_t GetDigitFast(Int_t row, Int_t column);  //return value at given row and collumn
+  Short_t GetDigitUnchecked(Int_t row, Int_t column);  //return value at given row and collumn
+  void  SetDigitFast(Short_t value,Int_t row, Int_t column);  //set value at given row and collumn
+  Bool_t BoundsOK(const char *where, Int_t row, Int_t col) ;  //Check If Bound Ok
   Bool_t OutOfBoundsError(const char *where, Int_t row, Int_t column);
   virtual void Allocate(Int_t rows, Int_t columns);  //construct empty buffer fDigits with size rows x columns
   virtual Short_t GetDigit(Int_t row, Int_t column);
@@ -29,15 +33,23 @@ public:
   virtual void CompresBuffer(Int_t bufferType,Int_t threshold); //compres buffer according buffertype algorithm   
   virtual Bool_t First(); //adjust  first valid current digit
   virtual Bool_t Next();  //addjust next valid current digit
-  void SetThreshold(Int_t th) {fThreshold = th;}
-  Int_t  GetThreshold() {return fThreshold;}
+  void SetThreshold(Int_t th) {fThreshold = th;} //set threshold
+  Int_t  GetThreshold() {return fThreshold;}  //return threshold    
+  Int_t GetNRows(){return fNrows;}
+  Int_t GetNCols(){return fNcols;}
   Int_t CurrentRow(){ return fCurrentRow;}  //return current row
   Int_t CurrentColumn(){ return fCurrentCol;} //return current column
   Int_t CurrentDigit() {return fElements->At(fCurrentIndex);} //return degit for current row and column
   void AcceptHisto(AliH2F * his);  //update buffer for - it will content histogram values
   AliH2F * GenerHisto();           //generate 2 dimensional histogram with digits
-  AliH2F *  Draw( const char *option=0,Float_t x1=-1, Float_t x2=-1, Float_t y1=-1, Float_t y2=-1); //draw digits
-  Int_t GetSize() {return fNelems;} //return main buffer size
+  AliH2F *DrawDigits( const char *option=0,Float_t x1=-1, Float_t x2=-1, Float_t y1=-1, Float_t y2=-1); //draw digits
+  
+  Int_t GetSize();//return total size of object in bytes
+  Int_t GetDigitSize(); //return total size of pure digits 
+  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 
+
+  inline Short_t * GetDigitsColumn(Int_t row);                              //return row  pointer to the array digits
+
 protected:
   virtual  void Invalidate();  
   void ExpandBuffer1(); //expand buffer of type to twodimensional array
@@ -51,8 +63,8 @@ protected:
   Int_t     fNrows;   //number of rows in Segment
   Int_t     fNcols; //number of collumns in Segment 
 private:
-  AliArrayS *fElements;  //buffer of 2 bytes integers for digits
-  AliArrayI *fIndex;  //index position of column
+  TArrayS *fElements;  //buffer of 2 bytes integers for digits
+  TArrayI *fIndex;  //index position of column
   Int_t     fBufType; //type of the buffer - define compression algorithm  
   Int_t     fThreshold; //treshold for zero suppresion
   Int_t     fNelems;  //total number of elements 
@@ -60,7 +72,7 @@ private:
   Int_t fCurrentCol;   //!current column iteration
   Int_t fCurrentIndex; //!current index in field
  
-  ClassDef(AliDigits,1
+  ClassDef(AliDigits,2
 };
  
 
@@ -74,7 +86,7 @@ inline Bool_t AliDigits::BoundsOK(const char *where, Int_t row, Int_t col)
   return kTRUE;  
 }
 
-Short_t AliDigits::GetDigitFast(Int_t row, Int_t column)
+inline Short_t AliDigits::GetDigitFast(Int_t row, Int_t column)
 {
   //
   //return digit from  fDigits array
@@ -83,13 +95,30 @@ Short_t AliDigits::GetDigitFast(Int_t row, Int_t column)
   return fElements->At(fIndex->At(column)+row); 
 }
 
-void  AliDigits::SetDigitFast(Short_t value, Int_t row, Int_t column)
+inline Short_t AliDigits::GetDigitUnchecked(Int_t row, Int_t column)
+{
+  //
+  //return digit from  fDigits array
+  //if out of range return dummy value  ( value at row = 0, collumn = 0)
+  //
+  return fElements->fArray[fIndex->fArray[column]+row]; 
+}
+
+inline Short_t * AliDigits::GetDigitsColumn(Int_t column){
+  //
+  //return row  pointer to the array digits
+  //
+  return &(fElements->fArray[fIndex->fArray[column]]);
+}
+
+
+inline void  AliDigits::SetDigitFast(Short_t value, Int_t row, Int_t column)
 {
   //
   //set  digit 
   //
-  if ( (row<0) || (row>=fNrows)  || (column<0) || (column>=fNrows) ) 
-       ::Error("AliDigits::SetDigitFast", "row %d  col %d out of bounds (size: %d x %d, this: 0x%08x)", 
+  if ( (row<0) || (row>=fNrows)  || (column<0) || (column>=fNcols) ) 
+       Error("AliDigits::SetDigitFast", "row %d  col %d out of bounds (size: %d x %d, this: 0x%08x)", 
           row, column, fNrows, fNcols, this);
   (*fElements)[fIndex->At(column)+row]=value; 
 }