A bugfix in AliL3Modeller::FindClusters. Changed parameter list in AliL3ModelTrack...
[u/mrichter/AliRoot.git] / HLT / comp / AliL3Compress.h
index ddca1739f751ba34e73cc20c5e4bc29177b1cf4f..9015c00f4fef91989ff99242b1aee8f1134a6cbe 100644 (file)
@@ -3,6 +3,7 @@
 
 #include "AliL3RootTypes.h"
 #include "AliL3Models.h"
+#include "AliL3DigitData.h"
 
 class AliL3TrackArray;
 
@@ -10,16 +11,41 @@ class AliL3Compress {
   
  private:
   AliL3TrackArray *fTracks; //!
+  AliL3RandomDigitData *fDigits; //!
+  AliL3RandomDigitData **fDPt; //!
+  Int_t fNDigits;
+  Int_t fNUsed;
+  Int_t fMaxDigits;
   
-  
+  Int_t fNumPadBits;
+  Int_t fNumTimeBits;
+  Int_t fNumChargeBits;
+  Int_t fNumShapeBits;
+  Int_t fSlice;
+  Int_t fPatch;
+  Char_t fPath[100];
+
+  void CreateDigitArray(Int_t maxnumber);
+  void CreateDigits(Int_t row,Float_t pad,Float_t time,Int_t charge,Float_t ywidth,Float_t zwidth);
+  void QSort(AliL3RandomDigitData **a, Int_t first, Int_t last);
+  Int_t ComparePoints(Int_t row,UShort_t pad,UShort_t time);
+  Int_t CompareDigits(AliL3RandomDigitData *a,AliL3RandomDigitData *b);
+
  public:
   AliL3Compress();
+  AliL3Compress(Int_t slice,Int_t patch,Char_t *path="./");
   virtual ~AliL3Compress();
   
-  void WriteFile(AliL3TrackArray *tracks,Char_t *filename);
-  void ReadFile(Char_t *filename);
-  void CompressFile(Char_t *infile,Char_t *outfile);
-  void ExpandFile(Char_t *infile,Char_t *outfile);
+  void SetBitNumbers(Int_t pad,Int_t time,Int_t charge,Int_t shape);
+  void WriteFile(AliL3TrackArray *tracks);
+  void ReadFile(Char_t which);
+  void CompressFile();
+  void ExpandFile();
+  void RestoreData();
+  void WriteRestoredData();
+  void WriteRootFile(Char_t *digitsfile,Char_t *rootfile);
+  void PrintDigits();
+  void PrintCompRatio();
   
   AliL3TrackArray *GetTracks() {return fTracks;}
   
@@ -27,4 +53,29 @@ class AliL3Compress {
 
 };
 
+inline Int_t  AliL3Compress::ComparePoints(Int_t row,UShort_t pad,UShort_t time)
+{
+  if(fNUsed >= fNDigits) return 0;
+  
+  if(fDPt[fNUsed]->fRow != row) return 0;
+  
+  if(fDPt[fNUsed]->fPad < pad) return 1;
+  if(fDPt[fNUsed]->fPad == pad && fDPt[fNUsed]->fTime < time) return 1;
+  
+  return 0;
+
+}
+
+inline Int_t AliL3Compress::CompareDigits(AliL3RandomDigitData *a,AliL3RandomDigitData *b)
+{
+  if(a->fRow < b->fRow) return -1;
+    
+  if(a->fPad==b->fPad && a->fTime == b->fTime && a->fRow == b->fRow) return 0;
+  
+  if(a->fPad<b->fPad && a->fRow == b->fRow) return -1;
+  if(a->fPad==b->fPad && a->fTime<b->fTime && a->fRow == b->fRow) return -1;
+  
+  return 1;
+}
+
 #endif