]> git.uio.no Git - u/mrichter/AliRoot.git/blame - RAW/AliDAQ.cxx
Bug fix
[u/mrichter/AliRoot.git] / RAW / AliDAQ.cxx
CommitLineData
42650ece 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16//////////////////////////////////////////////////////////////////////////////
17// //
18// The AliDAQ class is responsible for handling all the information about //
19// Data Acquisition configuration. It defines the detector indexing, //
20// the number of DDLs and LDCs per detector. //
21// The number of LDCs per detector is used only in the simulation in order //
22// to define the configuration of the dateStream application. Therefore the //
23// numbers in the corresponding array can be changed without affecting the //
24// rest of the aliroot code. //
25// The equipment ID (DDL ID) is an integer (32-bit) number defined as: //
26// Equipment ID = (detectorID << 8) + DDLIndex //
27// where the detectorID is given by fgkDetectorName array and DDLIndex is //
28// the index of the corresponding DDL inside the detector partition. //
29// Due to DAQ/HLT limitations, the ddl indexes should be consequtive, or //
30// at least without big gaps in between. //
31// The sub-detector code use only this class in the simulation and reading //
32// of the raw data. //
33// //
34// cvetan.cheshkov@cern.ch 2006/06/09 //
35// //
36//////////////////////////////////////////////////////////////////////////////
37
38#include <TClass.h>
39#include <TString.h>
40
41#include "AliDAQ.h"
42#include "AliLog.h"
43
44ClassImp(AliDAQ)
45
46const char* AliDAQ::fgkDetectorName[AliDAQ::kNDetectors] = {
47 "ITSSPD",
48 "ITSSDD",
49 "ITSSSD",
50 "TPC",
51 "TRD",
52 "TOF",
53 "RICH", // Name to be changed to HMPID
54 "PHOS",
55 "CPV",
56 "PMD",
57 "MUONTRK",
58 "MUONTRG",
59 "FMD",
60 "START", // Name to be changed to T0
61 "VZERO", // Name to be changed to V0 ?
62 "ZDC",
63 "CRT", // Name to be changed to ACCORDE
64 "TRG",
65 "EMCAL",
66 "HLT"
67};
68
69Int_t AliDAQ::fgkNumberOfDdls[AliDAQ::kNDetectors] = {
70 20,
71 24,
72 16,
73 216,
74 18,
75 72,
76 20,
77 20,
78 10,
79 6,
80 20,
81 2,
82 3,
83 1,
84 1,
85 1,
86 1,
87 1,
88 24,
89 10
90};
91
92Float_t AliDAQ::fgkNumberOfLdcs[AliDAQ::kNDetectors] = {
42650ece 93 4,
94 4,
95 4,
0d45e170 96 36,
42650ece 97 3,
98 12,
99 4,
100 4,
101 2,
102 1,
103 4,
104 1,
105 1,
106 0.5,
107 0.5,
108 1,
109 1,
110 1,
0d45e170 111 4,
112 5
42650ece 113};
114
115AliDAQ::AliDAQ(const AliDAQ& source) :
116 TObject(source)
117{
118 // Copy constructor
119 // Nothing to be done
120}
121
122AliDAQ& AliDAQ::operator = (const AliDAQ& /* source */)
123{
124 // Assignment operator
125 // Nothing to be done
126 return *this;
127}
128
129Int_t AliDAQ::DetectorID(const char *detectorName)
130{
131 // Return the detector index
132 // corresponding to a given
133 // detector name
134 TString detStr = detectorName;
135
136 Int_t iDet;
137 for(iDet = 0; iDet < kNDetectors; iDet++) {
138 if (detStr.CompareTo(fgkDetectorName[iDet],TString::kIgnoreCase) == 0)
139 break;
140 }
141 if (iDet == kNDetectors) {
142 AliErrorClass(Form("Invalid detector name: %s !",detectorName));
143 return -1;
144 }
145 return iDet;
146}
147
148const char *AliDAQ::DetectorName(Int_t detectorID)
149{
150 // Returns the name of particular
151 // detector identified by its index
152 if (detectorID < 0 || detectorID >= kNDetectors) {
153 AliErrorClass(Form("Invalid detector index: %d (%d -> %d) !",detectorID,0,kNDetectors-1));
154 return "";
155 }
156 return fgkDetectorName[detectorID];
157}
158
159Int_t AliDAQ::DdlIDOffset(const char *detectorName)
160{
161 // Returns the DDL ID offset
162 // for a given detector
163 Int_t detectorID = DetectorID(detectorName);
164 if (detectorID < 0)
165 return -1;
166
167 return DdlIDOffset(detectorID);
168}
169
170Int_t AliDAQ::DdlIDOffset(Int_t detectorID)
171{
172 // Returns the DDL ID offset
173 // for a given detector identified
174 // by its index
175 if (detectorID < 0 || detectorID >= kNDetectors) {
176 AliErrorClass(Form("Invalid detector index: %d (%d -> %d) !",detectorID,0,kNDetectors-1));
177 return -1;
178 }
179 return (detectorID << 8);
180}
181
182const char *AliDAQ::DetectorNameFromDdlID(Int_t ddlID)
183{
184 // Returns the detector name for
185 // a given DDL ID
186 Int_t detectorID = DetectorIDFromDdlID(ddlID);
187 if (detectorID < 0)
188 return "";
189
190 return DetectorName(detectorID);
191}
192
193Int_t AliDAQ::DetectorIDFromDdlID(Int_t ddlID)
194{
195 // Returns the detector ID for
196 // a given DDL ID
197 Int_t detectorID = ddlID >> 8;
198 if (detectorID < 0 || detectorID >= kNDetectors) {
199 AliErrorClass(Form("Invalid detector index: %d (%d -> %d) !",detectorID,0,kNDetectors-1));
200 return -1;
201 }
202 Int_t ddlIndex = ddlID & 0xFF;
203 if (ddlIndex >= fgkNumberOfDdls[detectorID]) {
204 AliErrorClass(Form("Invalid DDL index %d (%d -> %d) for detector %d",
205 ddlIndex,0,fgkNumberOfDdls[detectorID],detectorID));
206 return -1;
207 }
208 return detectorID;
209}
210
211Int_t AliDAQ::DdlID(const char *detectorName, Int_t ddlIndex)
212{
213 // Returns the DDL ID starting from
214 // the detector name and the DDL
215 // index inside the detector
216 Int_t detectorID = DetectorID(detectorName);
217 if (detectorID < 0)
218 return -1;
219
220 return DdlID(detectorID,ddlIndex);
221}
222
223Int_t AliDAQ::DdlID(Int_t detectorID, Int_t ddlIndex)
224{
225 // Returns the DDL ID starting from
226 // the detector ID and the DDL
227 // index inside the detector
228 Int_t ddlID = DdlIDOffset(detectorID);
229 if (ddlID < 0)
230 return -1;
231
232 if (ddlIndex >= fgkNumberOfDdls[detectorID]) {
233 AliErrorClass(Form("Invalid DDL index %d (%d -> %d) for detector %d",
234 ddlIndex,0,fgkNumberOfDdls[detectorID],detectorID));
235 return -1;
236 }
237
238 ddlID += ddlIndex;
239 return ddlID;
240}
241
cddbd913 242const char *AliDAQ::DdlFileName(const char *detectorName, Int_t ddlIndex)
243{
244 // Returns the DDL file name
245 // (used in the simulation) starting from
246 // the detector name and the DDL
247 // index inside the detector
248 Int_t detectorID = DetectorID(detectorName);
249 if (detectorID < 0)
250 return "";
251
252 return DdlFileName(detectorID,ddlIndex);
253}
254
255const char *AliDAQ::DdlFileName(Int_t detectorID, Int_t ddlIndex)
256{
257 // Returns the DDL file name
258 // (used in the simulation) starting from
259 // the detector ID and the DDL
260 // index inside the detector
261 Int_t ddlID = DdlIDOffset(detectorID);
262 if (ddlID < 0)
263 return "";
264
265 if (ddlIndex >= fgkNumberOfDdls[detectorID]) {
266 AliErrorClass(Form("Invalid DDL index %d (%d -> %d) for detector %d",
267 ddlIndex,0,fgkNumberOfDdls[detectorID],detectorID));
268 return "";
269 }
270
271 ddlID += ddlIndex;
272 TString fileName = DetectorName(detectorID);
273 fileName += "_";
274 fileName += ddlID;
275 fileName += ".ddl";
276 return fileName.Data();
277}
278
42650ece 279Int_t AliDAQ::NumberOfDdls(const char *detectorName)
280{
281 // Returns the number of DDLs for
282 // a given detector
283 Int_t detectorID = DetectorID(detectorName);
284 if (detectorID < 0)
285 return -1;
286
287 return NumberOfDdls(detectorID);
288}
289
290Int_t AliDAQ::NumberOfDdls(Int_t detectorID)
291{
292 // Returns the number of DDLs for
293 // a given detector
294 if (detectorID < 0 || detectorID >= kNDetectors) {
295 AliErrorClass(Form("Invalid detector index: %d (%d -> %d) !",detectorID,0,kNDetectors-1));
296 return -1;
297 }
298
299 return fgkNumberOfDdls[detectorID];
300}
301
302Float_t AliDAQ::NumberOfLdcs(const char *detectorName)
303{
304 // Returns the number of DDLs for
305 // a given detector
306 Int_t detectorID = DetectorID(detectorName);
307 if (detectorID < 0)
308 return -1;
309
310 return NumberOfLdcs(detectorID);
311}
312
313Float_t AliDAQ::NumberOfLdcs(Int_t detectorID)
314{
315 // Returns the number of DDLs for
316 // a given detector
317 if (detectorID < 0 || detectorID >= kNDetectors) {
318 AliErrorClass(Form("Invalid detector index: %d (%d -> %d) !",detectorID,0,kNDetectors-1));
319 return -1;
320 }
321
322 return fgkNumberOfLdcs[detectorID];
323}
0d45e170 324
325void AliDAQ::PrintConfig()
326{
327 // Print the DAQ configuration
328 // for all the detectors
329 printf("====================================================================\n"
330 "| ALICE Data Acquisition Configuration |\n"
331 "====================================================================\n"
332 "| Detector ID | Detector Name | DDL Offset | # of DDLs | # of LDCs |\n"
333 "====================================================================\n");
334 for(Int_t iDet = 0; iDet < kNDetectors; iDet++) {
335 printf("|%11d |%13s |%10d |%9d |%9.1f |\n",
336 iDet,DetectorName(iDet),DdlIDOffset(iDet),NumberOfDdls(iDet),NumberOfLdcs(iDet));
337 }
338 printf("====================================================================\n");
339
340}