3 // Author: Anders Vestbo <mailto:vestbo@fi.uib.no>
4 //*-- Copyright © ALICE HLT Group
6 #include "AliL3StandardIncludes.h"
8 #include "AliL3RootTypes.h"
9 #include "AliL3Transform.h"
11 #include "AliL3DataCompressorHelper.h"
17 //_____________________________________________________________
19 // AliL3DataCompression
21 // Interface class; binary <-> AliROOT handling of TPC data compression classes.
25 ClassImp(AliL3DataCompressorHelper)
28 Int_t AliL3DataCompressorHelper::fgNumTimeBits = 12;
29 Int_t AliL3DataCompressorHelper::fgNumPadBits = 12;
30 Int_t AliL3DataCompressorHelper::fgNumChargeBits = 14;
31 Int_t AliL3DataCompressorHelper::fgNumShapeBits = 14;
32 Float_t AliL3DataCompressorHelper::fgXYResidualStep1 = 0.03;
33 Float_t AliL3DataCompressorHelper::fgXYResidualStep2 = 0.03;
34 Float_t AliL3DataCompressorHelper::fgXYResidualStep3 = 0.03;
35 Float_t AliL3DataCompressorHelper::fgZResidualStep1 = 0.05;
36 Float_t AliL3DataCompressorHelper::fgZResidualStep2 = 0.05;
37 Float_t AliL3DataCompressorHelper::fgZResidualStep3 = 0.05;
38 Float_t AliL3DataCompressorHelper::fgXYWidthStep = 0.005;
39 Float_t AliL3DataCompressorHelper::fgZWidthStep = 0.005;
40 Int_t AliL3DataCompressorHelper::fgClusterCharge = 100;
41 Int_t AliL3DataCompressorHelper::fgNumPadBitsRemaining = 18;
42 Int_t AliL3DataCompressorHelper::fgNumTimeBitsRemaining = 19;
43 Int_t AliL3DataCompressorHelper::fgNumShapeBitsRemaining = 11;
45 void AliL3DataCompressorHelper::SetBitNumbers(Int_t pad,Int_t time,Int_t charge,Int_t shape)
47 // sets the numbers of bits
50 fgNumChargeBits = charge;
51 fgNumShapeBits = shape;
54 void AliL3DataCompressorHelper::SetTransverseResolutions(Float_t res1,Float_t res2,Float_t res3,Float_t width)
56 // sets the transverse resolution
57 fgXYResidualStep1 = res1;
58 fgXYResidualStep2 = res2;
59 fgXYResidualStep3 = res3;
60 fgXYWidthStep = width;
63 void AliL3DataCompressorHelper::SetLongitudinalResolutions(Float_t res1,Float_t res2,Float_t res3,Float_t width)
65 // sets the longitudinal resolution
66 fgZResidualStep1 = res1;
67 fgZResidualStep2 = res2;
68 fgZResidualStep3 = res3;
72 void AliL3DataCompressorHelper::SetRemainingBitNumbers(Int_t pad,Int_t time,Int_t shape)
74 // sets the numbers of remaining bits
75 fgNumPadBitsRemaining = pad;
76 fgNumTimeBitsRemaining = time;
77 fgNumShapeBitsRemaining = shape;
80 Float_t AliL3DataCompressorHelper::GetXYResidualStep(Int_t row)
82 // gets the XY residual step
83 if(row < AliL3Transform::GetNRowLow())
84 return fgXYResidualStep1;
85 else if(row < AliL3Transform::GetNRowLow() + AliL3Transform::GetNRowUp1())
86 return fgXYResidualStep2;
87 else if(row < AliL3Transform::GetNRowLow() + AliL3Transform::GetNRowUp1() + AliL3Transform::GetNRowUp2())
88 return fgXYResidualStep3;
91 cerr<<"AliL3DataCompressorHelper::GetXYResidualStep : Wrong row number "<<row<<endl;
96 Float_t AliL3DataCompressorHelper::GetZResidualStep(Int_t row)
98 // gets the Z residual step
99 if(row < AliL3Transform::GetNRowLow())
100 return fgZResidualStep1;
101 else if(row < AliL3Transform::GetNRowLow() + AliL3Transform::GetNRowUp1())
102 return fgZResidualStep2;
103 else if(row < AliL3Transform::GetNRowLow() + AliL3Transform::GetNRowUp1() + AliL3Transform::GetNRowUp2())
104 return fgZResidualStep3;
107 cerr<<"AliL3DataCompressorHelper::GetXYResidualStep : Wrong row number "<<row<<endl;
112 Float_t AliL3DataCompressorHelper::GetPadPrecisionFactor()
114 // gets pad precision factor
115 Int_t nbits = fgNumPadBitsRemaining;
128 cerr<<"AliL3DataCompressorHelper::GetRemainingPadFactor : Too few bits for the pad direction: "<<nbits<<endl;
133 Float_t AliL3DataCompressorHelper::GetTimePrecisionFactor()
135 // gest time precision factor
136 Int_t nbits = fgNumTimeBitsRemaining;
149 cerr<<"AliL3DataCompressorHelper::GetRemainingPadFactor : Too few bits for the pad direction: "<<nbits<<endl;
155 Int_t AliL3DataCompressorHelper::Nint(Double_t x)
157 // Round to nearest integer. Rounds half integers
158 // to the nearest even integer.
163 if (x + 0.5 == Double_t(i) && i & 1) i--;
166 if (x - 0.5 == Double_t(i) && i & 1) i++;