3 // Author: Anders Vestbo <mailto:vestbo@fi.uib.no>
4 //*-- Copyright © ALICE HLT Group
6 #include "AliHLTTPCStandardIncludes.h"
8 #include "AliHLTTPCRootTypes.h"
9 #include "AliHLTTPCTransform.h"
11 #include "AliHLTTPCDataCompressorHelper.h"
17 //_____________________________________________________________
19 // AliHLTTPCDataCompression
21 // Interface class; binary <-> AliROOT handling of TPC data compression classes.
25 ClassImp(AliHLTTPCDataCompressorHelper)
28 Int_t AliHLTTPCDataCompressorHelper::fgNumTimeBits = 12;
29 Int_t AliHLTTPCDataCompressorHelper::fgNumPadBits = 12;
30 Int_t AliHLTTPCDataCompressorHelper::fgNumChargeBits = 14;
31 Int_t AliHLTTPCDataCompressorHelper::fgNumShapeBits = 14;
32 Float_t AliHLTTPCDataCompressorHelper::fgXYResidualStep1 = 0.03;
33 Float_t AliHLTTPCDataCompressorHelper::fgXYResidualStep2 = 0.03;
34 Float_t AliHLTTPCDataCompressorHelper::fgXYResidualStep3 = 0.03;
35 Float_t AliHLTTPCDataCompressorHelper::fgZResidualStep1 = 0.05;
36 Float_t AliHLTTPCDataCompressorHelper::fgZResidualStep2 = 0.05;
37 Float_t AliHLTTPCDataCompressorHelper::fgZResidualStep3 = 0.05;
38 Float_t AliHLTTPCDataCompressorHelper::fgXYWidthStep = 0.005;
39 Float_t AliHLTTPCDataCompressorHelper::fgZWidthStep = 0.005;
40 Int_t AliHLTTPCDataCompressorHelper::fgClusterCharge = 100;
41 Int_t AliHLTTPCDataCompressorHelper::fgNumPadBitsRemaining = 18;
42 Int_t AliHLTTPCDataCompressorHelper::fgNumTimeBitsRemaining = 19;
43 Int_t AliHLTTPCDataCompressorHelper::fgNumShapeBitsRemaining = 11;
45 void AliHLTTPCDataCompressorHelper::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 AliHLTTPCDataCompressorHelper::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 AliHLTTPCDataCompressorHelper::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 AliHLTTPCDataCompressorHelper::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 AliHLTTPCDataCompressorHelper::GetXYResidualStep(Int_t row)
82 // gets the XY residual step
83 if(row < AliHLTTPCTransform::GetNRowLow())
84 return fgXYResidualStep1;
85 else if(row < AliHLTTPCTransform::GetNRowLow() + AliHLTTPCTransform::GetNRowUp1())
86 return fgXYResidualStep2;
87 else if(row < AliHLTTPCTransform::GetNRowLow() + AliHLTTPCTransform::GetNRowUp1() + AliHLTTPCTransform::GetNRowUp2())
88 return fgXYResidualStep3;
91 cerr<<"AliHLTTPCDataCompressorHelper::GetXYResidualStep : Wrong row number "<<row<<endl;
96 Float_t AliHLTTPCDataCompressorHelper::GetZResidualStep(Int_t row)
98 // gets the Z residual step
99 if(row < AliHLTTPCTransform::GetNRowLow())
100 return fgZResidualStep1;
101 else if(row < AliHLTTPCTransform::GetNRowLow() + AliHLTTPCTransform::GetNRowUp1())
102 return fgZResidualStep2;
103 else if(row < AliHLTTPCTransform::GetNRowLow() + AliHLTTPCTransform::GetNRowUp1() + AliHLTTPCTransform::GetNRowUp2())
104 return fgZResidualStep3;
107 cerr<<"AliHLTTPCDataCompressorHelper::GetXYResidualStep : Wrong row number "<<row<<endl;
112 Float_t AliHLTTPCDataCompressorHelper::GetPadPrecisionFactor()
114 // gets pad precision factor
115 Int_t nbits = fgNumPadBitsRemaining;
128 cerr<<"AliHLTTPCDataCompressorHelper::GetRemainingPadFactor : Too few bits for the pad direction: "<<nbits<<endl;
133 Float_t AliHLTTPCDataCompressorHelper::GetTimePrecisionFactor()
135 // gest time precision factor
136 Int_t nbits = fgNumTimeBitsRemaining;
149 cerr<<"AliHLTTPCDataCompressorHelper::GetRemainingPadFactor : Too few bits for the pad direction: "<<nbits<<endl;
155 Int_t AliHLTTPCDataCompressorHelper::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++;