3 // Author: Anders Vestbo <mailto:vestbo@fi.uib.no>
4 //*-- Copyright © ALICE HLT Group
6 #include "AliHLTStdIncludes.h"
7 #include "AliHLTTPCRootTypes.h"
8 #include "AliHLTTPCTransform.h"
10 #include "AliHLTTPCDataCompressorHelper.h"
16 //_____________________________________________________________
18 // AliHLTTPCDataCompression
20 // Interface class; binary <-> AliROOT handling of TPC data compression classes.
24 ClassImp(AliHLTTPCDataCompressorHelper)
27 Int_t AliHLTTPCDataCompressorHelper::fgNumTimeBits = 12;
28 Int_t AliHLTTPCDataCompressorHelper::fgNumPadBits = 12;
29 Int_t AliHLTTPCDataCompressorHelper::fgNumChargeBits = 14;
30 Int_t AliHLTTPCDataCompressorHelper::fgNumShapeBits = 14;
31 Float_t AliHLTTPCDataCompressorHelper::fgXYResidualStep1 = 0.03;
32 Float_t AliHLTTPCDataCompressorHelper::fgXYResidualStep2 = 0.03;
33 Float_t AliHLTTPCDataCompressorHelper::fgXYResidualStep3 = 0.03;
34 Float_t AliHLTTPCDataCompressorHelper::fgZResidualStep1 = 0.05;
35 Float_t AliHLTTPCDataCompressorHelper::fgZResidualStep2 = 0.05;
36 Float_t AliHLTTPCDataCompressorHelper::fgZResidualStep3 = 0.05;
37 Float_t AliHLTTPCDataCompressorHelper::fgXYWidthStep = 0.005;
38 Float_t AliHLTTPCDataCompressorHelper::fgZWidthStep = 0.005;
39 Int_t AliHLTTPCDataCompressorHelper::fgClusterCharge = 100;
40 Int_t AliHLTTPCDataCompressorHelper::fgNumPadBitsRemaining = 18;
41 Int_t AliHLTTPCDataCompressorHelper::fgNumTimeBitsRemaining = 19;
42 Int_t AliHLTTPCDataCompressorHelper::fgNumShapeBitsRemaining = 11;
44 void AliHLTTPCDataCompressorHelper::SetBitNumbers(Int_t pad,Int_t time,Int_t charge,Int_t shape)
46 // sets the numbers of bits
49 fgNumChargeBits = charge;
50 fgNumShapeBits = shape;
53 void AliHLTTPCDataCompressorHelper::SetTransverseResolutions(Float_t res1,Float_t res2,Float_t res3,Float_t width)
55 // sets the transverse resolution
56 fgXYResidualStep1 = res1;
57 fgXYResidualStep2 = res2;
58 fgXYResidualStep3 = res3;
59 fgXYWidthStep = width;
62 void AliHLTTPCDataCompressorHelper::SetLongitudinalResolutions(Float_t res1,Float_t res2,Float_t res3,Float_t width)
64 // sets the longitudinal resolution
65 fgZResidualStep1 = res1;
66 fgZResidualStep2 = res2;
67 fgZResidualStep3 = res3;
71 void AliHLTTPCDataCompressorHelper::SetRemainingBitNumbers(Int_t pad,Int_t time,Int_t shape)
73 // sets the numbers of remaining bits
74 fgNumPadBitsRemaining = pad;
75 fgNumTimeBitsRemaining = time;
76 fgNumShapeBitsRemaining = shape;
79 Float_t AliHLTTPCDataCompressorHelper::GetXYResidualStep(Int_t row)
81 // gets the XY residual step
82 if(row < AliHLTTPCTransform::GetNRowLow())
83 return fgXYResidualStep1;
84 else if(row < AliHLTTPCTransform::GetNRowLow() + AliHLTTPCTransform::GetNRowUp1())
85 return fgXYResidualStep2;
86 else if(row < AliHLTTPCTransform::GetNRowLow() + AliHLTTPCTransform::GetNRowUp1() + AliHLTTPCTransform::GetNRowUp2())
87 return fgXYResidualStep3;
90 cerr<<"AliHLTTPCDataCompressorHelper::GetXYResidualStep : Wrong row number "<<row<<endl;
95 Float_t AliHLTTPCDataCompressorHelper::GetZResidualStep(Int_t row)
97 // gets the Z residual step
98 if(row < AliHLTTPCTransform::GetNRowLow())
99 return fgZResidualStep1;
100 else if(row < AliHLTTPCTransform::GetNRowLow() + AliHLTTPCTransform::GetNRowUp1())
101 return fgZResidualStep2;
102 else if(row < AliHLTTPCTransform::GetNRowLow() + AliHLTTPCTransform::GetNRowUp1() + AliHLTTPCTransform::GetNRowUp2())
103 return fgZResidualStep3;
106 cerr<<"AliHLTTPCDataCompressorHelper::GetXYResidualStep : Wrong row number "<<row<<endl;
111 Float_t AliHLTTPCDataCompressorHelper::GetPadPrecisionFactor()
113 // gets pad precision factor
114 Int_t nbits = fgNumPadBitsRemaining;
127 cerr<<"AliHLTTPCDataCompressorHelper::GetRemainingPadFactor : Too few bits for the pad direction: "<<nbits<<endl;
132 Float_t AliHLTTPCDataCompressorHelper::GetTimePrecisionFactor()
134 // gest time precision factor
135 Int_t nbits = fgNumTimeBitsRemaining;
148 cerr<<"AliHLTTPCDataCompressorHelper::GetRemainingPadFactor : Too few bits for the pad direction: "<<nbits<<endl;
154 Int_t AliHLTTPCDataCompressorHelper::Nint(Double_t x)
156 // Round to nearest integer. Rounds half integers
157 // to the nearest even integer.
162 if (x + 0.5 == Double_t(i) && i & 1) i--;
165 if (x - 0.5 == Double_t(i) && i & 1) i++;