]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/comp/AliL3DataCompressor.h
Introduction of a fast version of the AliITSVertexerZ for HLT
[u/mrichter/AliRoot.git] / HLT / comp / AliL3DataCompressor.h
index 327602bb58c0f23cc49238b92e450741910a10b2..a67bcf3b117a9a69f432c42a1aa1c908dd1f7972 100644 (file)
@@ -1,34 +1,81 @@
+// @(#) $Id$
+
 #ifndef AliL3_DataCompressor
 #define AliL3_DataCompressor
 
 #include "AliL3RootTypes.h"
 
-class AliL3MemHandler;
+class AliL3SpacePointData;
+class AliL3Benchmark;
+class AliL3TrackArray;
+class AliL3Track;
+
+#ifdef use_root
+class TH2F;
+class TFile;
+#endif
+
+struct TempCluster {
+  Float_t fPad; // Pad
+  Float_t fTime; // Time
+  Float_t fSigmaY2; // SigmaY2
+  Float_t fSigmaZ2; // SigmaZ2
+  Int_t fCharge; // Charge
+  Int_t fPadrow; // Pad row
+};
 
 class AliL3DataCompressor {
   
- private:
-  AliL3MemHandler *fMemHandler;  //!
-  Int_t fMinSlice;
-  Int_t fMaxSlice;
-  Char_t fPath[1024]; //!
-  
-  Int_t FindRemaining(Int_t slice,Int_t patch);
-
  public:
   AliL3DataCompressor();
-  AliL3DataCompressor(Char_t *path,Int_t minslice,Int_t maxslice);
+  AliL3DataCompressor(Char_t *path,Bool_t keep,Bool_t writeshape);
   virtual ~AliL3DataCompressor();
   
-  void ProcessData(Char_t *trackpath,Int_t padoverlap,Int_t timeoverlap,Int_t padsearch,Int_t timesearch);
-  void CompressAndExpand(Int_t bitspad,Int_t bitstime,Int_t bitscharge,Int_t bitsshape);
-  void WriteRemainingDigits();
-  void WriteRemainingClusters();
-  void FindOfflineClusters(Bool_t remains);
-  
-  void RestoreData();
+  virtual void LoadData(Int_t event,Bool_t sp=kTRUE);
+  virtual void FillData(Int_t minhits,Bool_t expand);
+  virtual void WriteRemaining(Bool_t select);
+  void DetermineMinBits();
+  void CompressAndExpand(Bool_t arithmeticCoding=kTRUE);
+  void RestoreData(Bool_t remainingOnly=kFALSE);
+  void DoBench(Char_t *fname="benchmark");
+  void DoNotCompress() {fNoCompression=kTRUE;}
+
+  Int_t GetNusedClusters() const {return fNusedClusters;}
+  Int_t GetNunusedClusters() const {return fNunusedClusters;}
+
+ protected:
+  Char_t fPath[1024];   //! Path to the files
+  Int_t fEvent; // Current event
+  Int_t fNusedClusters; // Number of used clusters
+  Int_t fNunusedClusters; // Number of unused clusters
   
+  Bool_t fWriteClusterShape; // Flag to write the cluster's shape
+  Bool_t fKeepRemaining; // Flag to keep the remaining clusters
+  Bool_t fSinglePatch; // Flag to run over single patch (?)
+  Bool_t fWriteIdsToFile; // Flag (not used?)
+  Bool_t fNoCompression; //Just process the data through the chain, but do not compress. (input=output). Mostly for debugging...
 
+ private:
+  AliL3Benchmark *fBenchmark;    //! Benchmark
+  AliL3TrackArray *fInputTracks; //! Array of input tracks
+  AliL3SpacePointData *fClusters[36][6]; //! Array of pointers to clusters
+  ofstream *fCompRatioFile;      //! Stream to write the ration between use and unused clusters
+#ifdef use_root
+  TFile *fOutputFile;            //! Output file
+#else
+  FILE *fOutputFile; // Output file
+#endif
+  UInt_t fNcl[36][6]; // Array containing numbers of clusters
+   
+  void SelectRemainingClusters();
+  void ExpandTrackData(AliL3TrackArray *tracks);
+  void ReadUncompressedData(TempCluster **clusters,Int_t *ncl,const Int_t maxpoints);
+  void ReadRemaining(TempCluster **clusters,Int_t *ncl,const Int_t maxpoints);
+  void QSort(TempCluster **a, Int_t first, Int_t last);
+  Int_t Compare(TempCluster *a,TempCluster *b);
+  void OpenOutputFile();
+  void CloseOutputFile();
+  
   ClassDef(AliL3DataCompressor,1) 
 
 };