Update to the current version in the Bergen CVS. Most important
[u/mrichter/AliRoot.git] / HLT / comp / AliL3DataCompressor.h
1 // @(#) $Id$
2
3 #ifndef AliL3_DataCompressor
4 #define AliL3_DataCompressor
5
6 class AliL3SpacePointData;
7 class AliL3Benchmark;
8 class AliL3TrackArray;
9 class AliL3Track;
10
11 #ifdef use_root
12 class TH2F;
13 class TFile;
14 #endif
15
16 struct TempCluster {
17   Float_t pad;
18   Float_t time;
19   Float_t sigmaY2;
20   Float_t sigmaZ2;
21   Int_t charge;
22   Int_t padrow;
23 };
24
25 class AliL3DataCompressor {
26   
27  private:
28   AliL3Benchmark *fBenchmark;    //!
29   AliL3TrackArray *fInputTracks; //!
30   AliL3SpacePointData *fClusters[36][6]; //!
31   ofstream *fCompRatioFile;      //!
32 #ifdef use_root
33   TFile *fOutputFile;            //!
34 #else
35   FILE *fOutputFile;
36 #endif
37   
38   UInt_t fNcl[36][6];
39   
40   static Int_t fNumPadBits;
41   static Int_t fNumTimeBits;
42   static Int_t fNumChargeBits;
43   static Int_t fNumPadShapeBits;
44   static Int_t fNumTimeShapeBits;
45   
46   static Float_t fPadResidualStep1;
47   static Float_t fPadResidualStep2;
48   static Float_t fPadResidualStep3;
49   static Float_t fTimeResidualStep1;
50   static Float_t fTimeResidualStep2;
51   static Float_t fTimeResidualStep3;
52   static Float_t fPadSigma2Step1;
53   static Float_t fPadSigma2Step2;
54   static Float_t fTimeSigma2Step;
55   static Int_t fClusterCharge;
56   
57   void SelectRemainingClusters();
58   void ExpandTrackData(AliL3TrackArray *tracks);
59   void ReadUncompressedData(TempCluster **clusters,Int_t *ncl,const Int_t maxpoints);
60   void ReadRemaining(TempCluster **clusters,Int_t *ncl,const Int_t maxpoints);
61   void QSort(TempCluster **a, Int_t first, Int_t last);
62   Int_t Compare(TempCluster *a,TempCluster *b);
63   void OpenOutputFile();
64   void CloseOutputFile();
65   
66  protected:
67   Char_t fPath[1024];            //!
68   Int_t fEvent;
69   Int_t fNusedClusters;
70   Int_t fNunusedClusters;
71   
72   Bool_t fWriteClusterShape;
73   Bool_t fKeepRemaining;
74   Bool_t fSinglePatch;
75   Bool_t fWriteIdsToFile;
76   
77  public:
78   AliL3DataCompressor();
79   AliL3DataCompressor(Char_t *path,Bool_t keep,Bool_t writeshape);
80   virtual ~AliL3DataCompressor();
81   
82   virtual void LoadData(Int_t event,Bool_t sp=kTRUE);
83   virtual void FillData(Int_t minhits,Bool_t expand);
84   virtual void WriteRemaining(Bool_t select);
85   void CompressAndExpand();
86   void RestoreData(Bool_t remaining_only=kFALSE);
87   void DoBench(Char_t *fname="benchmark");
88   
89   void SetBitNumbers(Int_t pad,Int_t time,Int_t charge,Int_t shapepad,Int_t shapetime);
90   void SetTransverseResolutions(Float_t res1,Float_t res2,Float_t res3,Float_t width=0.005);
91   void SetLongitudinalResolutions(Float_t res1,Float_t res2,Float_t res3,Float_t width=0.005);
92   
93   Int_t GetNusedClusters() {return fNusedClusters;}
94   Int_t GetNunusedClusters() {return fNunusedClusters;}
95
96   static const Int_t GetNPadBits() {return fNumPadBits;}
97   static const Int_t GetNTimeBits() {return fNumTimeBits;}
98   static const Int_t GetNChargeBits() {return fNumChargeBits;}
99   static const Int_t GetNPadShapeBits() {return fNumPadShapeBits;}
100   static const Int_t GetNTimeShapeBits() {return fNumTimeShapeBits;}
101   static const Float_t GetPadSigma2Step(Int_t patch) {return patch < 2 ? fPadSigma2Step1 : fPadSigma2Step2;}
102   static const Float_t GetTimeSigma2Step() {return fTimeSigma2Step;}
103   static const Int_t GetClusterCharge() {return fClusterCharge;}
104   static const Float_t GetPadResidualStep(Int_t row);
105   static const Float_t GetTimeResidualStep(Int_t row);
106
107
108   ClassDef(AliL3DataCompressor,1) 
109
110 };
111
112 #endif