]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDSignalIndex.h
Revert "Revert "#103626: Commit DCal geometry to master" since the files are broken."
[u/mrichter/AliRoot.git] / TRD / AliTRDSignalIndex.h
index 4dc8629db6166b295713d0c0c4fd5b981b521d1f..b564b464bd6fa33833ae04401c452677605d4d77 100644 (file)
@@ -1,5 +1,5 @@
-#ifndef AliTRDSIGNALINDEX_H
-#define AliTRDSIGNALINDEX_H
+#ifndef ALITRDSIGNALINDEX_H
+#define ALITRDSIGNALINDEX_H
 
 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
  * See cxx source for full Copyright notice                               */
 
 class AliTRDSignalIndex : public TObject
 {
+protected:
 
- public:
+  union RowCol{
+    Short_t rc;
+    struct{
+      UChar_t col;
+      Char_t row;
+    }s;
+  };
+
+public:
 
   AliTRDSignalIndex(); 
   AliTRDSignalIndex(Int_t nrow, Int_t ncol,Int_t ntime);
@@ -36,19 +45,21 @@ class AliTRDSignalIndex : public TObject
   void     ResetContentConditional(const Int_t nrow, const Int_t ncol, const Int_t ntime);
   void     ResetContent();
   void     ResetCounters();
-  void     ResetTbinCounter() { }
+  void     ResetTbinCounter() const { };
 
   void     ResetArrays();
 
-  void     AddIndexRC(const Int_t row, const Int_t col);
-
+  // Store the index row-column as an interesting one
+  inline void AddIndexRC(const Int_t row, const Int_t col);
   // Get the next pad (row and column) and return kTRUE on success
-  Bool_t   NextRCIndex(Int_t &row, Int_t &col); 
+  inline Bool_t NextRCIndex(Int_t &row, Int_t &col); 
   // Get the next timebin of a pad (row and column) and return kTRUE on success
   Bool_t   NextRCTbinIndex(Int_t &row, Int_t &col, Int_t &tbin); 
   // Get the next active timebin and return kTRUE on success
   Bool_t   NextTbinIndex(Int_t &tbin); 
 
+  Bool_t CheckSorting(Int_t &row, Int_t &col);
+
   Int_t    GetCurrentRow() const  { return fCurrRow; }
   Int_t    GetCurrentCol() const  { return fCurrCol; }
   Int_t    GetCurrentTbin() const { return fCurrTbin; }
@@ -72,9 +83,10 @@ class AliTRDSignalIndex : public TObject
   Int_t    GetLayer() const       { return fLayer;    } // Layer position of the chamber in TRD
   Int_t    GetStack() const       { return fStack;    } // Stack position of the chamber in TRD
   Int_t    GetSM() const          { return fSM;       } // Super module of the TRD
-  Short_t *GetArray() const       { return fSortedIndex; } // Get the array pointer for god knows what reason
+  Short_t *GetArray() const       { return (Short_t*)fSortedIndex; } // Get the array pointer for god knows what reason
+  Int_t    GetNoOfIndexes() const { return fCountRC-1;  }
 
-  Bool_t   HasEntry() const       { return fHasEntry; } // Return status if has an entry
+  Bool_t   HasEntry() const       { return fCountRC > 1 ? kTRUE : kFALSE; } // Return status if has an entry
 
   Int_t    GetNrow() const        { return fNrows;    } // Get Nrows
   Int_t    GetNcol() const        { return fNcols;    } // Get Ncols
@@ -87,10 +99,11 @@ class AliTRDSignalIndex : public TObject
   Int_t     fStack;              //  Stack position in the full TRD
   Int_t     fSM;                 //  Super module - position in the full TRD
 
-  Bool_t   *fBoolIndex;          //  
-  Short_t  *fSortedIndex;        //  
+  Bool_t   *fBoolIndex;          //  Indices
+  RowCol   *fSortedIndex;        //  Sorted indices
   Int_t     fMaxLimit;           //  Max number of things in the array
   Int_t     fPositionRC;         //  Position in the SortedIndex
+  Int_t     fCountRC;            //  the number of added rc combinations
   Bool_t    fSortedWasInit;      //  Was SortedIndex initialized?
 
   Int_t     fCurrRow;            //  Last Row read out of SortedIndex
@@ -99,13 +112,45 @@ class AliTRDSignalIndex : public TObject
   
   Int_t     fNrows;              //  Number of rows in the chamber
   Int_t     fNcols;              //  Number of cols in the chamber
-  Int_t     fNtbins;             //  Number of tbins in the chamber
-
-  Bool_t    fHasEntry;           //  kTRUE flag if we have an entry 
+  Int_t     fNtbins;             //  Number of tbins in the chamber 
 
   ClassDef(AliTRDSignalIndex,2)  //  Data container for one TRD detector segment
 
 };
+
+void AliTRDSignalIndex::AddIndexRC(const Int_t row, const Int_t col)
+{
+  //
+  // Adds RC combination to array
+  //
+
+  const Int_t num=row*fNcols+col;
+  if(fBoolIndex[num])return;
+  fBoolIndex[num]=kTRUE;
+  fSortedIndex[fCountRC].s.col=col;
+  fSortedIndex[fCountRC].s.row=row;
+  fCountRC++;
+}
+
+Bool_t AliTRDSignalIndex::NextRCIndex(Int_t &row, Int_t &col)
+{
+  //
+  // Returns next used RC combination
+  //
+
+  if (!IsAllocated())
+    return kFALSE;
+
+  if(fSortedIndex[fPositionRC].rc>-1){
+    row = fCurrRow = fSortedIndex[fPositionRC].s.row;
+    col = fCurrCol = fSortedIndex[fPositionRC].s.col;
+    fPositionRC++;
+    return kTRUE;
+  }
+  else
+    return CheckSorting(row, col);
+}
+
 #endif
 
 /*