LCOV - code coverage report
Current view: top level - TPC/TPCbase - AliDigits.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 8 22 36.4 %
Date: 2016-06-14 17:26:59 Functions: 7 18 38.9 %

          Line data    Source code
       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             : 
       8             : /// \class AliDigits
       9             : ///
      10             : ///  Manager class generaol Alice segment digits
      11             : ///  segment is for example one pad row in TPC
      12             : 
      13             : #include   <TArrayI.h>
      14             : #include   <TArrayS.h>
      15             : #include   "AliSegmentID.h"
      16             : class AliH2F;
      17             : 
      18             : class AliDigits: public AliSegmentID{ 
      19             : public:
      20             :   AliDigits();
      21             :   AliDigits(const AliDigits &digits); //copy constructor
      22             :   AliDigits &operator = (const AliDigits & digits); //assignment operator
      23             :   virtual ~AliDigits();
      24           0 :   Short_t * GetDigits(){return fElements->GetArray();}   //return row  pointer to the array digits
      25             :   Short_t GetDigitFast(Int_t row, Int_t column);  //return value at given row and collumn
      26             :   Short_t GetDigitUnchecked(Int_t row, Int_t column);  //return value at given row and collumn
      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           0 :   void SetThreshold(Int_t th) {fThreshold = th;} //set threshold
      37           0 :   Int_t  GetThreshold() {return fThreshold;}  //return threshold    
      38           0 :   Int_t GetNRows(){return fNrows;}
      39           0 :   Int_t GetNCols(){return fNcols;}
      40     1787466 :   Int_t CurrentRow(){ return fCurrentRow;}  //return current row
      41     2636038 :   Int_t CurrentColumn(){ return fCurrentCol;} //return current column
      42     2636038 :   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 
      50             : 
      51             :   inline Short_t * GetDigitsColumn(Int_t row);                              //return row  pointer to the array digits
      52             : 
      53             : protected:
      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             :  
      63             :   Int_t     fNrows;   ///< number of rows in Segment
      64             :   Int_t     fNcols; ///< number of collumns in Segment
      65             : private:
      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
      74             :  
      75             :   /// \cond CLASSIMP
      76          34 :   ClassDef(AliDigits,2) 
      77             :   /// \endcond
      78             : };
      79             :  
      80             : 
      81             : 
      82             : inline Bool_t AliDigits::BoundsOK(const char *where, Int_t row, Int_t col) 
      83             : {
      84             :   /// Check If Bound Ok
      85             : 
      86           0 :   if ( (col>=fNcols) || (col<0) ) return OutOfBoundsError(where,row,col);
      87           0 :   Int_t index =(*fIndex).At(col)+row;
      88           0 :   if ( (index<0) || (index>fNelems)) return OutOfBoundsError(where,row,col);
      89           0 :   return kTRUE;  
      90           0 : }
      91             : 
      92             : inline Short_t AliDigits::GetDigitFast(Int_t row, Int_t column)
      93             : {
      94             :   /// return digit from  fDigits array
      95             :   /// if out of range return dummy value  ( value at row = 0, collumn = 0)
      96             : 
      97  4468505642 :   return fElements->At(fIndex->At(column)+row); 
      98             : }
      99             : 
     100             : inline Short_t AliDigits::GetDigitUnchecked(Int_t row, Int_t column)
     101             : {
     102             :   /// return digit from  fDigits array
     103             :   /// if out of range return dummy value  ( value at row = 0, collumn = 0)
     104             : 
     105           0 :   return fElements->fArray[fIndex->fArray[column]+row]; 
     106             : }
     107             : 
     108             : inline Short_t * AliDigits::GetDigitsColumn(Int_t column){
     109             :   /// return row  pointer to the array digits
     110             : 
     111           0 :   return &(fElements->fArray[fIndex->fArray[column]]);
     112             : }
     113             : 
     114             : 
     115             : inline void  AliDigits::SetDigitFast(Short_t value, Int_t row, Int_t column)
     116             : {
     117             :   /// set  digit
     118             : 
     119    15440552 :   if ( (row<0) || (row>=fNrows)  || (column<0) || (column>=fNcols) ) 
     120           0 :        Error("AliDigits::SetDigitFast", "row %d  col %d out of bounds (size: %d x %d, this: 0x%08lx)", 
     121           0 :              row, column, fNrows, fNcols, (ULong_t)this);
     122     3860138 :   (*fElements)[fIndex->At(column)+row]=value; 
     123     3860138 : }
     124             : 
     125             : #endif
     126             : 

Generated by: LCOV version 1.11