3 /**************************************************************************
4 * This file is property of and copyright by the ALICE HLT Project *
5 * ALICE Experiment at CERN, All rights reserved. *
7 * Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no> *
8 * Timm Steinbeck <timm@kip.uni-heidelberg.de> *
9 * for The ALICE HLT Project. *
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 **************************************************************************/
20 ///////////////////////////////////////////////////////////////////////////////
22 // Definitions for the HLT TPC components //
24 ///////////////////////////////////////////////////////////////////////////////
26 #include "AliHLTTPCDefinitions.h"
27 #include "AliHLTTPCTransform.h"
30 /** ROOT macro for the implementation of ROOT specific class methods */
31 ClassImp(AliHLTTPCDefinitions)
33 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkDDLEncodedEntropyRawDataType = AliHLTComponentDataTypeInitializer("DDLENCEN", kAliHLTDataOriginTPC);
35 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkPackedRawDataType = AliHLTComponentDataTypeInitializer("RAWPAKED", kAliHLTDataOriginTPC);
36 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkUnpackedRawDataType = AliHLTComponentDataTypeInitializer("RAWUNPAK", kAliHLTDataOriginTPC);
37 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkClustersDataType = AliHLTComponentDataTypeInitializer("CLUSTERS", kAliHLTDataOriginTPC);
38 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkRawClustersDataType = AliHLTComponentDataTypeInitializer("CLUSTRAW", kAliHLTDataOriginTPC);
39 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkHWClustersDataType = AliHLTComponentDataTypeInitializer("HWCLUST1", kAliHLTDataOriginTPC);
40 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkAlterClustersDataType = AliHLTComponentDataTypeInitializer("HWCL_ALT", kAliHLTDataOriginTPC);
41 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkVertexDataType = AliHLTComponentDataTypeInitializer("VERTEX ", kAliHLTDataOriginTPC);
42 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkTrackSegmentsDataType = AliHLTComponentDataTypeInitializer("TRAKSEGS", kAliHLTDataOriginTPC);
43 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkTracksDataType = AliHLTComponentDataTypeInitializer("TRACKS ", kAliHLTDataOriginTPC);
45 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkDataCompressionDescriptorDataType = AliHLTComponentDataTypeInitializer("COMPDESC", kAliHLTDataOriginTPC);
46 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkClusterTracksModelDataType = AliHLTComponentDataTypeInitializer("CLSTRKMD", kAliHLTDataOriginTPC);
47 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkRemainingClustersModelDataType = AliHLTComponentDataTypeInitializer("REMCLSMD", kAliHLTDataOriginTPC);
48 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkClusterTracksCompressedDataType = AliHLTComponentDataTypeInitializer("CLSTRKCM", kAliHLTDataOriginTPC);
49 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkRemainingClustersCompressedDataType = AliHLTComponentDataTypeInitializer("REMCLSCM", kAliHLTDataOriginTPC);
51 const AliHLTComponentDataType& AliHLTTPCDefinitions::DDLEncodedEntropyRawDataType() {
52 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("DDLENCEN", kAliHLTDataOriginTPC);
55 const AliHLTComponentDataType& AliHLTTPCDefinitions::PackedRawDataType() {
56 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("RAWPAKED", kAliHLTDataOriginTPC);
59 const AliHLTComponentDataType& AliHLTTPCDefinitions::UnpackedRawDataType() {
60 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("RAWUNPAK", kAliHLTDataOriginTPC);
63 const AliHLTComponentDataType& AliHLTTPCDefinitions::ClustersDataType() {
64 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CLUSTERS", kAliHLTDataOriginTPC);
67 const AliHLTComponentDataType& AliHLTTPCDefinitions::RawClustersDataType() {
68 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CLUSTRAW", kAliHLTDataOriginTPC);
71 const AliHLTComponentDataType& AliHLTTPCDefinitions::HWClustersDataType() {
72 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("HWCLUST1", kAliHLTDataOriginTPC);
75 const AliHLTComponentDataType& AliHLTTPCDefinitions::AlterClustersDataType() {
76 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("HWCL_ALT", kAliHLTDataOriginTPC);
79 const AliHLTComponentDataType& AliHLTTPCDefinitions::VertexDataType() {
80 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("VERTEX ", kAliHLTDataOriginTPC);
83 const AliHLTComponentDataType& AliHLTTPCDefinitions::TrackSegmentsDataType() {
84 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("TRAKSEGS", kAliHLTDataOriginTPC);
87 const AliHLTComponentDataType& AliHLTTPCDefinitions::TracksDataType() {
88 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("TRACKS ", kAliHLTDataOriginTPC);
91 const AliHLTComponentDataType& AliHLTTPCDefinitions::DataCompressionDescriptorDataType() {
92 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("COMPDESC", kAliHLTDataOriginTPC);
95 const AliHLTComponentDataType& AliHLTTPCDefinitions::ClusterTracksModelDataType() {
96 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CLSTRKMD", kAliHLTDataOriginTPC);
99 const AliHLTComponentDataType& AliHLTTPCDefinitions::RemainingClustersModelDataType() {
100 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("REMCLSMD", kAliHLTDataOriginTPC);
103 const AliHLTComponentDataType& AliHLTTPCDefinitions::ClusterTracksCompressedDataType() {
104 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CLSTRKCM", kAliHLTDataOriginTPC);
107 const AliHLTComponentDataType& AliHLTTPCDefinitions::ClusterIdTracksDataType() {
108 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CLIDSTRK", kAliHLTDataOriginTPC);
111 const AliHLTComponentDataType& AliHLTTPCDefinitions::RemainingClustersCompressedDataType() {
112 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("REMCLSCM", kAliHLTDataOriginTPC);
115 const AliHLTComponentDataType& AliHLTTPCDefinitions::RemainingClusterIdsDataType() {
116 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("REMCLIDS", kAliHLTDataOriginTPC);
120 const AliHLTComponentDataType& AliHLTTPCDefinitions::CalibPedestalDataType() {
121 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CAL_PED ", kAliHLTDataOriginTPC);
124 const AliHLTComponentDataType& AliHLTTPCDefinitions::CalibPulserDataType() {
125 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CAL_PULS", kAliHLTDataOriginTPC);
128 const AliHLTComponentDataType& AliHLTTPCDefinitions::CalibCEDataType() {
129 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CAL_CE ", kAliHLTDataOriginTPC);
133 const AliHLTComponentDataType& AliHLTTPCDefinitions::OfflineCalibAlignDataType() {
134 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CALALIGN", kAliHLTDataOriginTPC);
137 const AliHLTComponentDataType& AliHLTTPCDefinitions::OfflineCalibTracksDataType() {
138 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CALTRACK", kAliHLTDataOriginTPC);
142 const AliHLTComponentDataType& AliHLTTPCDefinitions::OfflineCalibTracksGainDataType() {
143 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CALGAIN ", kAliHLTDataOriginTPC);
147 const AliHLTComponentDataType& AliHLTTPCDefinitions::AliHLTDataTypeClusterMCInfo() {
148 static AliHLTComponentDataType dt = AliHLTComponentDataTypeInitializer("CLMCINFO", kAliHLTDataOriginTPC);
151 const AliHLTComponentDataType AliHLTTPCDefinitions::fgkAliHLTDataTypeClusterMCInfo = AliHLTComponentDataTypeInitializer("CLMCINFO", kAliHLTDataOriginTPC);
154 const AliHLTTPCDefinitions::AliClusterParameter AliHLTTPCDefinitions::fgkClusterParameterDefinitions[]= {
155 {AliHLTTPCDefinitions::kPadRow, "padrow", 6, 1, 1}, // difference of rows, mostly 0 or 1
156 {AliHLTTPCDefinitions::kPad, "pad", 14, 12, 60}, // <100um for 6mm pads
157 {AliHLTTPCDefinitions::kTime, "time", 15, 13, 25}, // <100um for 2.5 mm timebin pitch
158 {AliHLTTPCDefinitions::kSigmaY2, "sigmaY2", 8, 5, 25},
159 {AliHLTTPCDefinitions::kSigmaZ2, "sigmaZ2", 8, 5, 10},
160 {AliHLTTPCDefinitions::kCharge, "charge", 16, 9, 1},
161 {AliHLTTPCDefinitions::kQMax, "qmax", 10, 6, 1},
162 {AliHLTTPCDefinitions::kResidualPad, "respad", 9, 4, 60}, // <100um for 6mm pads, sign stored in separate bit
163 {AliHLTTPCDefinitions::kResidualTime,"restime", 8, 4, 25}, // <100um for 2.5 mm timebin pitch, separate bit for sign
164 {AliHLTTPCDefinitions::kClusterCount,"clustercount", 6, 3, 1} // number of clusters on that row
167 unsigned AliHLTTPCDefinitions::GetNumberOfClusterParameterDefinitions()
169 return sizeof(fgkClusterParameterDefinitions)/sizeof(AliClusterParameter);
172 // NOTE! those values are related to the number of bits in
173 // fgkClusterParameterDefinitions
174 const unsigned AliHLTTPCDefinitions::fgkMaxClusterDeltaPad=8;
175 const unsigned AliHLTTPCDefinitions::fgkMaxClusterDeltaTime=10;
177 AliHLTTPCDefinitions::AliHLTTPCDefinitions()
179 // see header file for class documentation
181 // refer to README to build package
183 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
186 AliHLTTPCDefinitions::~AliHLTTPCDefinitions()
188 // see header file for class documentation
191 bool AliHLTTPCDefinitions::DDLIdToSlicePatch(AliHLTInt32_t ddlid, AliHLTUInt8_t& slice, AliHLTUInt8_t& patch)
193 // Convert DDL ID to patch and slice numbers.
195 if ((AliHLTUInt32_t(ddlid) >> 8) != 0x3) return false; // Check that detector is TPC.
196 AliHLTUInt32_t ddl = (AliHLTUInt32_t(ddlid) & 0xFF);
197 if (ddl > 215) return false;
212 Int_t AliHLTTPCDefinitions::GetSingleSliceNr( ULong_t spec )
214 // get the slice number provided that spec encodes a single slice
215 // return -EINVAL if encoded min and max slice differ
216 // return -ERANGE if slice number out of range
217 AliHLTUInt8_t min=GetMinSliceNr(spec);
218 AliHLTUInt8_t max=GetMaxSliceNr(spec);
219 if (min!=max) return -EINVAL;
220 if (max>=AliHLTTPCTransform::GetNSlice()) return -ERANGE;
224 Int_t AliHLTTPCDefinitions::GetSinglePatchNr( ULong_t spec )
226 // get the patch number provided that spec encodes a single patch
227 // return -EINVAL if encoded min and max patch differ
228 // return -ERANGE if patch number out of range
229 AliHLTUInt8_t min=GetMinPatchNr(spec);
230 AliHLTUInt8_t max=GetMaxPatchNr(spec);
231 if (min!=max) return -EINVAL;
232 if (max>=AliHLTTPCTransform::GetNumberOfPatches()) return -ERANGE;