2 // Original: AliHLTDataCompressorHelper.cxx,v 1.5 2004/06/15 10:26:57 hristov Exp $
4 // Author: Anders Vestbo <mailto:vestbo@fi.uib.no>
5 //*-- Copyright © ALICE HLT Group
7 #include "AliHLTStdIncludes.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)
27 AliHLTTPCDataCompressorHelper::AliHLTTPCDataCompressorHelper()
31 AliHLTTPCDataCompressorHelper::~AliHLTTPCDataCompressorHelper()
35 Int_t AliHLTTPCDataCompressorHelper::fgNumTimeBits = 12;
36 Int_t AliHLTTPCDataCompressorHelper::fgNumPadBits = 12;
37 Int_t AliHLTTPCDataCompressorHelper::fgNumChargeBits = 14;
38 Int_t AliHLTTPCDataCompressorHelper::fgNumShapeBits = 14;
39 Float_t AliHLTTPCDataCompressorHelper::fgXYResidualStep1 = 0.03;
40 Float_t AliHLTTPCDataCompressorHelper::fgXYResidualStep2 = 0.03;
41 Float_t AliHLTTPCDataCompressorHelper::fgXYResidualStep3 = 0.03;
42 Float_t AliHLTTPCDataCompressorHelper::fgZResidualStep1 = 0.05;
43 Float_t AliHLTTPCDataCompressorHelper::fgZResidualStep2 = 0.05;
44 Float_t AliHLTTPCDataCompressorHelper::fgZResidualStep3 = 0.05;
45 Float_t AliHLTTPCDataCompressorHelper::fgXYWidthStep = 0.005;
46 Float_t AliHLTTPCDataCompressorHelper::fgZWidthStep = 0.005;
47 Int_t AliHLTTPCDataCompressorHelper::fgClusterCharge = 100;
48 Int_t AliHLTTPCDataCompressorHelper::fgNumPadBitsRemaining = 18;
49 Int_t AliHLTTPCDataCompressorHelper::fgNumTimeBitsRemaining = 19;
50 Int_t AliHLTTPCDataCompressorHelper::fgNumShapeBitsRemaining = 11;
52 void AliHLTTPCDataCompressorHelper::SetBitNumbers(Int_t pad,Int_t time,Int_t charge,Int_t shape)
54 // sets the numbers of bits
57 fgNumChargeBits = charge;
58 fgNumShapeBits = shape;
61 void AliHLTTPCDataCompressorHelper::SetTransverseResolutions(Float_t res1,Float_t res2,Float_t res3,Float_t width)
63 // sets the transverse resolution
64 fgXYResidualStep1 = res1;
65 fgXYResidualStep2 = res2;
66 fgXYResidualStep3 = res3;
67 fgXYWidthStep = width;
70 void AliHLTTPCDataCompressorHelper::SetLongitudinalResolutions(Float_t res1,Float_t res2,Float_t res3,Float_t width)
72 // sets the longitudinal resolution
73 fgZResidualStep1 = res1;
74 fgZResidualStep2 = res2;
75 fgZResidualStep3 = res3;
79 void AliHLTTPCDataCompressorHelper::SetRemainingBitNumbers(Int_t pad,Int_t time,Int_t shape)
81 // sets the numbers of remaining bits
82 fgNumPadBitsRemaining = pad;
83 fgNumTimeBitsRemaining = time;
84 fgNumShapeBitsRemaining = shape;
87 Float_t AliHLTTPCDataCompressorHelper::GetXYResidualStep(Int_t row)
89 // gets the XY residual step
90 if(row < AliHLTTPCTransform::GetNRowLow())
91 return fgXYResidualStep1;
92 else if(row < AliHLTTPCTransform::GetNRowLow() + AliHLTTPCTransform::GetNRowUp1())
93 return fgXYResidualStep2;
94 else if(row < AliHLTTPCTransform::GetNRowLow() + AliHLTTPCTransform::GetNRowUp1() + AliHLTTPCTransform::GetNRowUp2())
95 return fgXYResidualStep3;
98 cerr<<"AliHLTTPCDataCompressorHelper::GetXYResidualStep : Wrong row number "<<row<<endl;
103 Float_t AliHLTTPCDataCompressorHelper::GetZResidualStep(Int_t row)
105 // gets the Z residual step
106 if(row < AliHLTTPCTransform::GetNRowLow())
107 return fgZResidualStep1;
108 else if(row < AliHLTTPCTransform::GetNRowLow() + AliHLTTPCTransform::GetNRowUp1())
109 return fgZResidualStep2;
110 else if(row < AliHLTTPCTransform::GetNRowLow() + AliHLTTPCTransform::GetNRowUp1() + AliHLTTPCTransform::GetNRowUp2())
111 return fgZResidualStep3;
114 cerr<<"AliHLTTPCDataCompressorHelper::GetXYResidualStep : Wrong row number "<<row<<endl;
119 Float_t AliHLTTPCDataCompressorHelper::GetPadPrecisionFactor()
121 // gets pad precision factor
122 Int_t nbits = fgNumPadBitsRemaining;
135 cerr<<"AliHLTTPCDataCompressorHelper::GetRemainingPadFactor : Too few bits for the pad direction: "<<nbits<<endl;
140 Float_t AliHLTTPCDataCompressorHelper::GetTimePrecisionFactor()
142 // gest time precision factor
143 Int_t nbits = fgNumTimeBitsRemaining;
156 cerr<<"AliHLTTPCDataCompressorHelper::GetRemainingPadFactor : Too few bits for the pad direction: "<<nbits<<endl;
162 Int_t AliHLTTPCDataCompressorHelper::Nint(Double_t x)
164 // Round to nearest integer. Rounds half integers
165 // to the nearest even integer.
170 if (x + 0.5 == Double_t(i) && i & 1) i--;
173 if (x - 0.5 == Double_t(i) && i & 1) i++;