]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/TPCLib/AliHLTTPCDataCompressorHelper.cxx
- made package indepentend of src
[u/mrichter/AliRoot.git] / HLT / TPCLib / AliHLTTPCDataCompressorHelper.cxx
1 // @(#) $Id$
2
3 // Author: Anders Vestbo <mailto:vestbo@fi.uib.no>
4 //*-- Copyright &copy ALICE HLT Group
5
6 #include "AliHLTStdIncludes.h"
7 #include "AliHLTTPCRootTypes.h"
8 #include "AliHLTTPCTransform.h"
9
10 #include "AliHLTTPCDataCompressorHelper.h"
11
12 #if __GNUC__ >= 3
13 using namespace std;
14 #endif
15
16 //_____________________________________________________________
17 //
18 //  AliHLTTPCDataCompression
19 //
20 // Interface class; binary <-> AliROOT handling of TPC data compression classes.
21 //
22
23
24 ClassImp(AliHLTTPCDataCompressorHelper)
25
26
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;
43
44 void AliHLTTPCDataCompressorHelper::SetBitNumbers(Int_t pad,Int_t time,Int_t charge,Int_t shape)
45 {
46   // sets the numbers of bits
47   fgNumPadBits = pad;
48   fgNumTimeBits = time;
49   fgNumChargeBits = charge;
50   fgNumShapeBits = shape;
51 }
52
53 void AliHLTTPCDataCompressorHelper::SetTransverseResolutions(Float_t res1,Float_t res2,Float_t res3,Float_t width)
54 {
55   // sets the transverse resolution
56   fgXYResidualStep1 = res1;
57   fgXYResidualStep2 = res2;
58   fgXYResidualStep3 = res3;
59   fgXYWidthStep = width;
60 }
61
62 void AliHLTTPCDataCompressorHelper::SetLongitudinalResolutions(Float_t res1,Float_t res2,Float_t res3,Float_t width)
63 {
64   // sets the longitudinal resolution
65   fgZResidualStep1 = res1;
66   fgZResidualStep2 = res2;
67   fgZResidualStep3 = res3;
68   fgZWidthStep = width;
69 }
70
71 void AliHLTTPCDataCompressorHelper::SetRemainingBitNumbers(Int_t pad,Int_t time,Int_t shape)
72 {
73   // sets the numbers of remaining bits
74   fgNumPadBitsRemaining = pad;
75   fgNumTimeBitsRemaining = time;
76   fgNumShapeBitsRemaining = shape;
77 }
78
79 Float_t AliHLTTPCDataCompressorHelper::GetXYResidualStep(Int_t row) 
80 {
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;
88   else
89     {
90       cerr<<"AliHLTTPCDataCompressorHelper::GetXYResidualStep : Wrong row number "<<row<<endl;
91       return -1;
92     }
93 }
94
95 Float_t AliHLTTPCDataCompressorHelper::GetZResidualStep(Int_t row) 
96 {
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;
104   else
105     {
106       cerr<<"AliHLTTPCDataCompressorHelper::GetXYResidualStep : Wrong row number "<<row<<endl;
107       return -1;
108     }
109 }
110
111 Float_t AliHLTTPCDataCompressorHelper::GetPadPrecisionFactor()
112 {
113   // gets pad precision factor
114   Int_t nbits = fgNumPadBitsRemaining;
115   if(nbits >=21)
116     return 10000;
117   if(nbits >= 18)
118     return 1000;
119   if(nbits >= 14) 
120     return 100;
121   if(nbits >= 11)
122     return 10;
123   if(nbits >= 8)
124     return 1;
125   else 
126     {
127       cerr<<"AliHLTTPCDataCompressorHelper::GetRemainingPadFactor : Too few bits for the pad direction: "<<nbits<<endl;
128       return 1;
129     }
130 }
131
132 Float_t AliHLTTPCDataCompressorHelper::GetTimePrecisionFactor()
133 {
134   // gest time precision factor
135   Int_t nbits = fgNumTimeBitsRemaining;
136   if(nbits >=23)
137     return 10000;
138   if(nbits >= 19)
139     return 1000;
140   if(nbits >= 16) 
141     return 100;
142   if(nbits >= 13)
143     return 10;
144   if(nbits >= 9)
145     return 1;
146   else 
147     {
148       cerr<<"AliHLTTPCDataCompressorHelper::GetRemainingPadFactor : Too few bits for the pad direction: "<<nbits<<endl;
149       return 1;
150     }
151 }
152
153
154 Int_t AliHLTTPCDataCompressorHelper::Nint(Double_t x)
155 {
156    // Round to nearest integer. Rounds half integers 
157    // to the nearest even integer.
158
159    Int_t i=0;
160    if (x >= 0) {
161       i = Int_t(x + 0.5);
162       if (x + 0.5 == Double_t(i) && i & 1) i--;
163    } else {
164       i = Int_t(x - 0.5);
165       if (x - 0.5 == Double_t(i) && i & 1) i++;
166
167    }
168    return i;
169 }