]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/TPCLib/AliHLTTPCDefinitions.cxx
bugfix: correct calculation of remaining payload to detect decoding errors
[u/mrichter/AliRoot.git] / HLT / TPCLib / AliHLTTPCDefinitions.cxx
1 // $Id$
2
3 /**************************************************************************
4  * This file is property of and copyright by the ALICE HLT Project        * 
5  * ALICE Experiment at CERN, All rights reserved.                         *
6  *                                                                        *
7  * Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no>        *
8  *                  Timm Steinbeck <timm@kip.uni-heidelberg.de>           *
9  *                  for The ALICE HLT Project.                            *
10  *                                                                        *
11  * Permission to use, copy, modify and distribute this software and its   *
12  * documentation strictly for non-commercial purposes is hereby granted   *
13  * without fee, provided that the above copyright notice appears in all   *
14  * copies and that both the copyright notice and this permission notice   *
15  * appear in the supporting documentation. The authors make no claims     *
16  * about the suitability of this software for any purpose. It is          *
17  * provided "as is" without express or implied warranty.                  *
18  **************************************************************************/
19
20 ///////////////////////////////////////////////////////////////////////////////
21 //                                                                           //
22 // Definitions for the HLT TPC components                                    //
23 //                                                                           //
24 ///////////////////////////////////////////////////////////////////////////////
25
26 #include "AliHLTTPCDefinitions.h"
27
28
29 /** ROOT macro for the implementation of ROOT specific class methods */
30 ClassImp(AliHLTTPCDefinitions)
31
32 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkDDLEncodedEntropyRawDataType = AliHLTComponentDataTypeInitializer("DDLENCEN", kAliHLTDataOriginTPC);
33                                                                                                                                                               
34 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkPackedRawDataType = AliHLTComponentDataTypeInitializer("RAWPAKED", kAliHLTDataOriginTPC);
35 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkUnpackedRawDataType = AliHLTComponentDataTypeInitializer("RAWUNPAK", kAliHLTDataOriginTPC);
36 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkClustersDataType = AliHLTComponentDataTypeInitializer("CLUSTERS", kAliHLTDataOriginTPC);
37 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkRawClustersDataType = AliHLTComponentDataTypeInitializer("CLUSTRAW", kAliHLTDataOriginTPC);
38 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkHWClustersDataType = AliHLTComponentDataTypeInitializer("HWCLUST1", kAliHLTDataOriginTPC);
39 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkAlterClustersDataType = AliHLTComponentDataTypeInitializer("HWCL_ALT", kAliHLTDataOriginTPC);
40 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkVertexDataType = AliHLTComponentDataTypeInitializer("VERTEX  ", kAliHLTDataOriginTPC);
41 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkTrackSegmentsDataType = AliHLTComponentDataTypeInitializer("TRAKSEGS", kAliHLTDataOriginTPC);
42 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkTracksDataType = AliHLTComponentDataTypeInitializer("TRACKS  ", kAliHLTDataOriginTPC);
43
44 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkClusterTracksModelDataType = AliHLTComponentDataTypeInitializer("CLSTRKMD", kAliHLTDataOriginTPC);
45 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkRemainingClustersModelDataType = AliHLTComponentDataTypeInitializer("REMCLSMD", kAliHLTDataOriginTPC);
46 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkClusterTracksCompressedDataType = AliHLTComponentDataTypeInitializer("CLSTRKCM", kAliHLTDataOriginTPC);
47 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkRemainingClustersCompressedDataType = AliHLTComponentDataTypeInitializer("REMCLSCM", kAliHLTDataOriginTPC);
48                                                                                                                                                               
49 const AliHLTComponentDataType& AliHLTTPCDefinitions::DDLEncodedEntropyRawDataType() {
50   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("DDLENCEN", kAliHLTDataOriginTPC);
51   return dt;
52 }                                                                                                                                                             
53 const AliHLTComponentDataType& AliHLTTPCDefinitions::PackedRawDataType() {
54   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("RAWPAKED", kAliHLTDataOriginTPC);
55   return dt;
56 }
57 const AliHLTComponentDataType& AliHLTTPCDefinitions::UnpackedRawDataType() {
58   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("RAWUNPAK", kAliHLTDataOriginTPC);
59   return dt;
60 }
61 const AliHLTComponentDataType& AliHLTTPCDefinitions::ClustersDataType() {
62   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CLUSTERS", kAliHLTDataOriginTPC);
63   return dt;
64 }
65 const AliHLTComponentDataType& AliHLTTPCDefinitions::RawClustersDataType() {
66   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CLUSTRAW", kAliHLTDataOriginTPC);
67   return dt;
68 }
69 const AliHLTComponentDataType& AliHLTTPCDefinitions::HWClustersDataType() {
70   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("HWCLUST1", kAliHLTDataOriginTPC);
71   return dt;
72 }
73 const AliHLTComponentDataType& AliHLTTPCDefinitions::AlterClustersDataType() {
74   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("HWCL_ALT", kAliHLTDataOriginTPC);
75   return dt;
76 }
77 const AliHLTComponentDataType& AliHLTTPCDefinitions::VertexDataType() {
78   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("VERTEX  ", kAliHLTDataOriginTPC);
79   return dt;
80 }
81 const AliHLTComponentDataType& AliHLTTPCDefinitions::TrackSegmentsDataType() {
82   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("TRAKSEGS", kAliHLTDataOriginTPC);
83   return dt;
84 }
85 const AliHLTComponentDataType& AliHLTTPCDefinitions::TracksDataType() {
86   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("TRACKS  ", kAliHLTDataOriginTPC);
87   return dt;
88 }
89
90 const AliHLTComponentDataType& AliHLTTPCDefinitions::ClusterTracksModelDataType() {
91   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CLSTRKMD", kAliHLTDataOriginTPC);
92   return dt;
93 }
94 const AliHLTComponentDataType& AliHLTTPCDefinitions::RemainingClustersModelDataType() {
95   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("REMCLSMD", kAliHLTDataOriginTPC);
96   return dt;
97 }
98 const AliHLTComponentDataType& AliHLTTPCDefinitions::ClusterTracksCompressedDataType() {
99   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CLSTRKCM", kAliHLTDataOriginTPC);
100   return dt;
101 }
102 const AliHLTComponentDataType& AliHLTTPCDefinitions::ClusterIdTracksDataType() {
103   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CLIDSTRK", kAliHLTDataOriginTPC);
104   return dt;
105 }
106 const AliHLTComponentDataType& AliHLTTPCDefinitions::RemainingClustersCompressedDataType() {
107   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("REMCLSCM", kAliHLTDataOriginTPC);
108   return dt;
109 }
110 const AliHLTComponentDataType& AliHLTTPCDefinitions::RemainingClusterIdsDataType() {
111   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("REMCLIDS", kAliHLTDataOriginTPC);
112   return dt;
113 }
114
115 const AliHLTComponentDataType& AliHLTTPCDefinitions::CalibPedestalDataType() {
116   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CAL_PED ", kAliHLTDataOriginTPC);
117   return dt;
118 }
119 const AliHLTComponentDataType& AliHLTTPCDefinitions::CalibPulserDataType() {
120   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CAL_PULS", kAliHLTDataOriginTPC);
121   return dt;
122 }
123 const AliHLTComponentDataType& AliHLTTPCDefinitions::CalibCEDataType() {
124   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CAL_CE  ", kAliHLTDataOriginTPC);
125   return dt;
126 }
127
128 const AliHLTComponentDataType& AliHLTTPCDefinitions::OfflineCalibAlignDataType() {
129   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CALALIGN", kAliHLTDataOriginTPC);
130   return dt;
131 }
132 const AliHLTComponentDataType& AliHLTTPCDefinitions::OfflineCalibTracksDataType() {
133   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CALTRACK", kAliHLTDataOriginTPC);
134   return dt;
135 }
136
137 const AliHLTComponentDataType& AliHLTTPCDefinitions::OfflineCalibTracksGainDataType() {
138   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CALGAIN ", kAliHLTDataOriginTPC);
139   return dt;
140 }
141
142 const AliHLTComponentDataType& AliHLTTPCDefinitions::AliHLTDataTypeClusterMCInfo() {
143   static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CLMCINFO", kAliHLTDataOriginTPC);
144   return dt;
145 }
146 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkAliHLTDataTypeClusterMCInfo = AliHLTComponentDataTypeInitializer("CLMCINFO", kAliHLTDataOriginTPC);
147
148
149 const AliHLTTPCDefinitions::AliClusterParameter AliHLTTPCDefinitions::fgkClusterParameterDefinitions[]= {
150   {AliHLTTPCDefinitions::kPadRow,  "padrow",   6,  1,   1}, // difference of rows, mostly 0 or 1
151   {AliHLTTPCDefinitions::kPad,     "pad",     14, 12,  60}, // <100um for 6mm pads
152   {AliHLTTPCDefinitions::kTime,    "time",    15, 13,  25}, // <100um for 2.5 mm timebin pitch
153   {AliHLTTPCDefinitions::kSigmaY2, "sigmaY2",  8,  5,  25},
154   {AliHLTTPCDefinitions::kSigmaZ2, "sigmaZ2",  8,  5,  10},
155   {AliHLTTPCDefinitions::kCharge,  "charge",  16,  9,   1},
156   {AliHLTTPCDefinitions::kQMax,    "qmax",    10,  6,   1},
157   {AliHLTTPCDefinitions::kResidualPad, "respad",         9,  4, 60}, // <100um for 6mm pads, sign stored in separate bit
158   {AliHLTTPCDefinitions::kResidualTime,"restime",        8,  4, 25}, // <100um for 2.5 mm timebin pitch, separate bit for sign
159   {AliHLTTPCDefinitions::kClusterCount,"clustercount",   6,  3,  1}  // number of clusters on that row
160 };
161
162 unsigned AliHLTTPCDefinitions::GetNumberOfClusterParameterDefinitions()
163 {
164   return sizeof(fgkClusterParameterDefinitions)/sizeof(AliClusterParameter);
165 }
166
167 // NOTE! those values are related to the number of bits in
168 // fgkClusterParameterDefinitions
169 const unsigned AliHLTTPCDefinitions::fgkMaxClusterDeltaPad=8;
170 const unsigned AliHLTTPCDefinitions::fgkMaxClusterDeltaTime=10;
171
172 AliHLTTPCDefinitions::AliHLTTPCDefinitions()
173 {
174   // see header file for class documentation
175   // or
176   // refer to README to build package
177   // or
178   // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
179 }
180
181 AliHLTTPCDefinitions::~AliHLTTPCDefinitions()
182 {
183   // see header file for class documentation
184 }
185
186 bool AliHLTTPCDefinitions::DDLIdToSlicePatch(AliHLTInt32_t ddlid, AliHLTUInt8_t& slice, AliHLTUInt8_t& patch)
187 {
188         // Convert DDL ID to patch and slice numbers.
189         
190         if ((AliHLTUInt32_t(ddlid) >> 8) != 0x3) return false;  // Check that detector is TPC.
191         AliHLTUInt32_t ddl = (AliHLTUInt32_t(ddlid) & 0xFF);
192         if (ddl > 215) return false;
193         if (ddl < 72)
194         {
195                 slice = ddl / 2;
196                 patch = ddl % 2;
197         }
198         else
199         {
200                 ddl -= 72;
201                 slice = ddl / 4;
202                 patch = ddl % 4 + 2;
203         }
204         return true;
205 }
206