]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PMD/AliPMDRawStream.cxx
Add more histograms for trigger patch monitoring
[u/mrichter/AliRoot.git] / PMD / AliPMDRawStream.cxx
CommitLineData
a09a2da4 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/* $Id$ */
17
18///////////////////////////////////////////////////////////////////////////////
19///
20/// This class provides access to PMD digits in raw data.
21///
22/// It loops over all PMD digits in the raw data given by the AliRawReader.
23/// The Next method goes to the next digit. If there are no digits left
24/// it returns kFALSE.
25/// Several getters provide information about the current digit.
26///
27///////////////////////////////////////////////////////////////////////////////
28
34ab69dd 29#include <Riostream.h>
30#include <TObjArray.h>
31#include <TString.h>
32#include <TSystem.h>
33
ecee2a1a 34#include "AliLog.h"
34ab69dd 35#include "AliPMDBlockHeader.h"
36#include "AliPMDDspHeader.h"
37#include "AliPMDPatchBusHeader.h"
38#include "AliPMDddldata.h"
a09a2da4 39#include "AliPMDRawStream.h"
3d8b8ac5 40#include "AliPMDMappingData.h"
a09a2da4 41#include "AliRawReader.h"
3d8b8ac5 42#include "AliCDBManager.h"
43#include "AliCDBStorage.h"
44#include "AliCDBEntry.h"
a09a2da4 45
46ClassImp(AliPMDRawStream)
47
48
49//_____________________________________________________________________________
50AliPMDRawStream::AliPMDRawStream(AliRawReader* rawReader) :
722ccc67 51 fRawReader(rawReader),
52 fData(NULL),
3d8b8ac5 53 fPosition(-1),
54 fMapData(GetMappingData())
a09a2da4 55{
56// create an object to read PMD raw digits
57
722ccc67 58 fRawReader->Reset();
362c9d61 59 fRawReader->Select("PMD");
a09a2da4 60}
61
62//_____________________________________________________________________________
63AliPMDRawStream::AliPMDRawStream(const AliPMDRawStream& stream) :
64 TObject(stream),
722ccc67 65 fRawReader(NULL),
66 fData(NULL),
3d8b8ac5 67 fPosition(-1),
68 fMapData(GetMappingData())
a09a2da4 69{
70// copy constructor
71
ecee2a1a 72 AliFatal("Copy constructor not implemented");
a09a2da4 73}
74
75//_____________________________________________________________________________
76AliPMDRawStream& AliPMDRawStream::operator = (const AliPMDRawStream&
77 /* stream */)
78{
79// assignment operator
80
ecee2a1a 81 AliFatal("operator = assignment operator not implemented");
a09a2da4 82 return *this;
83}
84
85//_____________________________________________________________________________
86AliPMDRawStream::~AliPMDRawStream()
87{
88// destructor
89
90}
91
92
93//_____________________________________________________________________________
34ab69dd 94
722ccc67 95Int_t AliPMDRawStream::DdlData(TObjArray *pmdddlcont)
a09a2da4 96{
08cf9354 97 // read the next raw digit
98 // returns kFALSE if there is no digit left
99
6b1a10fc 100 Int_t iddl = -1;
40f4a63f 101
34ab69dd 102 AliPMDddldata *pmdddldata;
103
8c89425f 104 if (!fRawReader->ReadHeader()) return -1;
722ccc67 105
106 iddl = fRawReader->GetDDLID();
34ab69dd 107 Int_t dataSize = fRawReader->GetDataSize();
108 Int_t totaldataword = dataSize/4;
9ac124a2 109
8c89425f 110 if (dataSize <= 0) return -1;
a09a2da4 111
be8b7039 112 UInt_t data = 0;
722ccc67 113
4e2efa25 114 // PMD raw data does not contain CDH
722ccc67 115
08c741ba 116 if (!fRawReader->ReadNextData(fData))
117 {
118 return kFALSE;
119 }
4e2efa25 120
a09a2da4 121
4e2efa25 122 fPosition = 0;
a09a2da4 123
be8b7039 124 Int_t ibus = 0;
34ab69dd 125
40f4a63f 126 const Int_t kNPatchBus = 51;
89f0ae35 127
34ab69dd 128 Int_t moduleNo[kNPatchBus], mcmperBus[kNPatchBus];
129 Int_t startRowBus[kNPatchBus], endRowBus[kNPatchBus];
130 Int_t startColBus[kNPatchBus], endColBus[kNPatchBus];
131
78fc1b96 132 for (ibus = 0; ibus < kNPatchBus; ibus++)
34ab69dd 133 {
89f0ae35 134 moduleNo[ibus] = -1;
34ab69dd 135 mcmperBus[ibus] = -1;
136 startRowBus[ibus] = -1;
137 endRowBus[ibus] = -1;
138 startColBus[ibus] = -1;
139 endColBus[ibus] = -1;
140 }
3d8b8ac5 141
89f0ae35 142 if (iddl == 0)
08cf9354 143 {
3d8b8ac5 144 Ddl0Mapping(moduleNo, mcmperBus, startRowBus,
89f0ae35 145 endRowBus, startColBus, endColBus);
08cf9354 146
147 }
89f0ae35 148 else if (iddl == 1)
08cf9354 149 {
3d8b8ac5 150 Ddl1Mapping(moduleNo, mcmperBus, startRowBus,
89f0ae35 151 endRowBus, startColBus, endColBus);
08cf9354 152
153 }
89f0ae35 154 else if (iddl == 2)
08cf9354 155 {
3d8b8ac5 156 Ddl2Mapping(moduleNo, mcmperBus, startRowBus,
89f0ae35 157 endRowBus, startColBus, endColBus);
08cf9354 158 }
89f0ae35 159 else if (iddl == 3)
08cf9354 160 {
3d8b8ac5 161 Ddl3Mapping(moduleNo, mcmperBus, startRowBus,
89f0ae35 162 endRowBus, startColBus, endColBus);
08cf9354 163 }
89f0ae35 164 else if (iddl == 4)
08cf9354 165 {
3d8b8ac5 166 Ddl4Mapping(moduleNo, mcmperBus, startRowBus,
89f0ae35 167 endRowBus, startColBus, endColBus);
08cf9354 168 }
89f0ae35 169 else if (iddl == 5)
08cf9354 170 {
3d8b8ac5 171 Ddl5Mapping(moduleNo, mcmperBus, startRowBus,
89f0ae35 172 endRowBus, startColBus, endColBus);
173 }
34ab69dd 174
34ab69dd 175
34ab69dd 176 AliPMDBlockHeader blockHeader;
177 AliPMDDspHeader dspHeader;
178 AliPMDPatchBusHeader pbusHeader;
179
0a666212 180 const Int_t kblHLen = blockHeader.GetHeaderLength();
181 const Int_t kdspHLen = dspHeader.GetHeaderLength();
182 const Int_t kpbusHLen = pbusHeader.GetHeaderLength();
183
be8b7039 184 Int_t parity = 0;
185 Int_t idet = 0, ismn = 0;
34ab69dd 186 Int_t irow = -1;
187 Int_t icol = -1;
188
333e2a0e 189 Int_t blHeaderWord[8]={0};
190 Int_t dspHeaderWord[10]={0};
191 Int_t pbusHeaderWord[4]={0};
34ab69dd 192
722ccc67 193 Int_t blRawDataLength = 0;
194 Int_t dspRawDataLength = 0;
195 Int_t iwordddl = 2;
9ac124a2 196
91e6e2a0 197
198
34ab69dd 199 for (Int_t iblock = 0; iblock < 2; iblock++)
200 {
8c89425f 201 for (Int_t i = 0; i < kblHLen; i++)
34ab69dd 202 {
722ccc67 203 iwordddl++;
8c89425f 204 blHeaderWord[i] = (Int_t) GetNextWord();
34ab69dd 205 }
9ac124a2 206
0a666212 207 blockHeader.SetHeader(blHeaderWord);
9ac124a2 208 blRawDataLength = blockHeader.GetRawDataLength();
209
8c89425f 210 if (iwordddl == totaldataword) break;
722ccc67 211
212 Int_t iwordblk = 0;
213
34ab69dd 214 for (Int_t idsp = 0; idsp < 5; idsp++)
215 {
8c89425f 216 for (Int_t i = 0; i < kdspHLen; i++)
34ab69dd 217 {
722ccc67 218 iwordddl++;
219 iwordblk++;
8c89425f 220 dspHeaderWord[i] = (Int_t) GetNextWord();
34ab69dd 221 }
0a666212 222 dspHeader.SetHeader(dspHeaderWord);
722ccc67 223 dspRawDataLength = dspHeader.GetRawDataLength();
224
8c89425f 225 if (iwordddl == totaldataword) break;
722ccc67 226
227 Int_t iworddsp = 0;
34ab69dd 228
78fc1b96 229 for (ibus = 0; ibus < 5; ibus++)
34ab69dd 230 {
8c89425f 231 for (Int_t i = 0; i < kpbusHLen; i++)
34ab69dd 232 {
722ccc67 233 iwordddl++;
234 iwordblk++;
235 iworddsp++;
8c89425f 236 pbusHeaderWord[i] = (Int_t) GetNextWord();
34ab69dd 237 }
722ccc67 238
0a666212 239 pbusHeader.SetHeader(pbusHeaderWord);
34ab69dd 240 Int_t rawdatalength = pbusHeader.GetRawDataLength();
241 Int_t pbusid = pbusHeader.GetPatchBusId();
242
8c89425f 243 if (pbusid < 0 || pbusid > 50) return -1;
34ab69dd 244
245 Int_t imodule = moduleNo[pbusid];
246
8c89425f 247 if (iwordddl == totaldataword) break;
34ab69dd 248
8c89425f 249 for (Int_t iword = 0; iword < rawdatalength; iword++)
34ab69dd 250 {
722ccc67 251 iwordddl++;
252 iwordblk++;
253 iworddsp++;
254 data = 0;
255 data = GetNextWord();
34ab69dd 256
257 Int_t isig = data & 0x0FFF;
258 Int_t ich = (data >> 12) & 0x003F;
259 Int_t imcm = (data >> 18) & 0x07FF;
260 Int_t ibit = (data >> 31) & 0x0001;
8c89425f 261 if (imcm == 0)
262 {
263 AliWarning(Form("FEE address WRONG:: Module %d Patch Bus %d MCM %d",imodule,pbusid,imcm));
264 return -1;
265 }
266
a98f9d26 267 parity = ComputeParity(data);
8c89425f 268
a98f9d26 269 if (ibit != parity)
270 {
2c1131dd 271 AliWarning(Form("Parity Error:: Patch Bus %d Module %d",pbusid,imodule));
608c1f27 272 fRawReader->AddMajorErrorLog(kParityError);
8c89425f 273 return -1;
a98f9d26 274 }
40f4a63f 275
276 ConvertDDL2SMN(iddl, imodule, ismn, idet);
277
08cf9354 278 GetRowCol(imodule, pbusid, imcm, ich,
34ab69dd 279 startRowBus, endRowBus,
280 startColBus, endColBus,
281 irow, icol);
282
08cf9354 283
34ab69dd 284 TransformH2S(ismn, irow, icol);
285
286 pmdddldata = new AliPMDddldata();
287
288 pmdddldata->SetDetector(idet);
289 pmdddldata->SetSMN(ismn);
290 pmdddldata->SetModule(imodule);
291 pmdddldata->SetPatchBusId(pbusid);
292 pmdddldata->SetMCM(imcm);
293 pmdddldata->SetChannel(ich);
294 pmdddldata->SetRow(irow);
295 pmdddldata->SetColumn(icol);
296 pmdddldata->SetSignal(isig);
297 pmdddldata->SetParityBit(ibit);
298
299 pmdddlcont->Add(pmdddldata);
08cf9354 300
0a666212 301 } // data word loop
9ac124a2 302
08cf9354 303
722ccc67 304 if (iwordddl == totaldataword) break;
305
8c89425f 306 if (dspHeader.GetPaddingWord() == 1)
307 {
308 if (iworddsp == dspRawDataLength-1) break; // raw data
309 }
310 else
311 {
312 if (iworddsp == dspRawDataLength) break; // raw data
313 }
08cf9354 314
315
0a666212 316 } // patch bus loop
34ab69dd 317
5d89deea 318//SKP added break next line (Reqd. if only one patch Bus)
319 if (iwordddl == totaldataword) break;
08cf9354 320
722ccc67 321 if (dspHeader.GetPaddingWord() == 1)
322 {
722ccc67 323 iwordddl++;
324 iwordblk++;
325 iworddsp++;
326 data = GetNextWord();
327 }
8c89425f 328 if (iwordddl == totaldataword) break;
722ccc67 329
330 if (iwordblk == blRawDataLength) break; // for raw data
34ab69dd 331
08cf9354 332
0a666212 333 } // end of DSP
5d89deea 334//SKP added break next line (Reqd. if only one patch Bus)
335 if (iwordddl == totaldataword) break;
34ab69dd 336
337 } // end of BLOCK
5d89deea 338
339 return iddl;
a09a2da4 340}
a09a2da4 341//_____________________________________________________________________________
08cf9354 342void AliPMDRawStream::GetRowCol(Int_t imodule, Int_t pbusid,
34ab69dd 343 UInt_t mcmno, UInt_t chno,
344 Int_t startRowBus[], Int_t endRowBus[],
345 Int_t startColBus[], Int_t endColBus[],
346 Int_t &row, Int_t &col) const
a09a2da4 347{
08cf9354 348 // decode: ddlno, patchbusid, mcmno, chno -> um, row, col
a09a2da4 349
40f4a63f 350 UInt_t iCh[64];
a09a2da4 351
40f4a63f 352 static const UInt_t kChDdl01[64] = { 9, 6, 5, 10, 1, 2, 0, 3,
353 13, 7, 4, 11, 8, 14, 12, 15,
354 16, 19, 17, 23, 20, 27, 24, 18,
355 28, 31, 29, 30, 21, 26, 25, 22,
356 41, 38, 37, 42, 33, 34, 32, 35,
357 45, 39, 36, 43, 40, 46, 44, 47,
358 48, 51, 49, 55, 52, 59, 56, 50,
359 60, 63, 61, 62, 53, 58, 57, 54 };
360
361 static const UInt_t kChDdl23[64] = { 54, 57, 58, 53, 62, 61, 63, 60,
362 50, 56, 59, 52, 55, 49, 51, 48,
363 47, 44, 46, 40, 43, 36, 39, 45,
364 35, 32, 34, 33, 42, 37, 38, 41,
365 22, 25, 26, 21, 30, 29, 31, 28,
366 18, 24, 27, 20, 23, 17, 19, 16,
367 15, 12, 14, 8, 11, 4, 7, 13,
368 3, 0, 2, 1, 10, 5, 6, 9 };
369
370 static const UInt_t kChDdl41[64] = { 53, 58, 57, 54, 61, 62, 60, 63,
371 49, 59, 56, 55, 52, 50, 48, 51,
372 44, 47, 45, 43, 40, 39, 36, 46,
373 32, 35, 33, 34, 41, 38, 37, 42,
374 21, 26, 25, 22, 29, 30, 28, 31,
375 17, 27, 24, 23, 20, 18, 16, 19,
376 12, 15, 13, 11, 8, 7, 4, 14,
377 0, 3, 1, 2, 9, 6, 5, 10 };
378
379 static const UInt_t kChDdl42[64] = { 10, 5, 6, 9, 2, 1, 3, 0,
380 14, 4, 7, 8, 11, 13, 15, 12,
381 19, 16, 18, 20, 23, 24, 27, 17,
382 31, 28, 30, 29, 22, 25, 26, 21,
383 42, 37, 38, 41, 34, 33, 35, 32,
384 46, 36, 39, 40, 43, 45, 47, 44,
385 51, 48, 50, 52, 55, 56, 59, 49,
386 63, 60, 62, 61, 54, 57, 58, 53 };
387
388 static const UInt_t kChDdl51[64] = { 10, 5, 6, 9, 2, 1, 3, 0,
389 14, 4, 7, 8, 11, 13, 15, 12,
390 19, 16, 18, 20, 23, 24, 27, 17,
391 31, 28, 30, 29, 22, 25, 26, 21,
392 42, 37, 38, 41, 34, 33, 35, 32,
393 46, 36, 39, 40, 43, 45, 47, 44,
394 51, 48, 50, 52, 55, 56, 59, 49,
395 63, 60, 62, 61, 54, 57, 58, 53 };
396
397 static const UInt_t kChDdl52[64] = { 53, 58, 57, 54, 61, 62, 60, 63,
398 49, 59, 56, 55, 52, 50, 48, 51,
399 44, 47, 45, 43, 40, 39, 36, 46,
400 32, 35, 33, 34, 41, 38, 37, 42,
401 21, 26, 25, 22, 29, 30, 28, 31,
402 17, 27, 24, 23, 20, 18, 16, 19,
403 12, 15, 13, 11, 8, 7, 4, 14,
404 0, 3, 1, 2, 9, 6, 5, 10 };
405
406 for (Int_t i = 0; i < 64; i++)
08cf9354 407 {
408 if(imodule < 6) iCh[i] = kChDdl01[i];
409 if(imodule >= 6 && imodule <= 11) iCh[i] = kChDdl01[i];
410 if(imodule >= 12 && imodule <= 17) iCh[i] = kChDdl23[i];
411 if(imodule >= 18 && imodule <= 23) iCh[i] = kChDdl23[i];
412 if(imodule >= 24 && imodule <= 29) iCh[i] = kChDdl41[i];
413 if(imodule >= 42 && imodule <= 47) iCh[i] = kChDdl42[i];
414 if(imodule >= 36 && imodule <= 41) iCh[i] = kChDdl51[i];
415 if(imodule >= 30 && imodule <= 35) iCh[i] = kChDdl52[i];
416 }
40f4a63f 417
418
419 Int_t rowcol = iCh[chno];
34ab69dd 420 Int_t irownew = rowcol/4;
421 Int_t icolnew = rowcol%4;
a09a2da4 422
08cf9354 423
424 if (imodule < 6 )
a09a2da4 425 {
a0a6a406 426 row = startRowBus[pbusid] + irownew;
40f4a63f 427 col = startColBus[pbusid] + (mcmno-1)*4 + icolnew;
a09a2da4 428 }
08cf9354 429 else if (imodule >= 6 && imodule < 12)
a09a2da4 430 {
08cf9354 431 row = endRowBus[pbusid] - (15 - irownew);
432 col = startColBus[pbusid] + (mcmno-1)*4 + icolnew;
433
a09a2da4 434 }
08cf9354 435 else if (imodule >= 12 && imodule < 18 )
e54787da 436 {
34ab69dd 437 row = startRowBus[pbusid] + irownew;
40f4a63f 438 col = endColBus[pbusid] - (mcmno-1)*4 - (3 - icolnew);
34ab69dd 439 }
08cf9354 440 else if (imodule >= 18 && imodule < 24)
34ab69dd 441 {
08cf9354 442 row = endRowBus[pbusid] - (15 - irownew);
443 col = endColBus[pbusid] - (mcmno-1)*4 - (3 - icolnew);
e54787da 444 }
08cf9354 445 else if (imodule >= 24 && imodule < 30)
e54787da 446 {
08cf9354 447 Int_t rowdiff = endRowBus[pbusid] - startRowBus[pbusid];
448 if(rowdiff > 16)
e54787da 449 {
40f4a63f 450 if (mcmno <= 12)
34ab69dd 451 {
452 // Add 16 to skip the 1st 15 rows
453 row = startRowBus[pbusid] + irownew + 16;
40f4a63f 454 col = startColBus[pbusid] + (mcmno-1)*4 + icolnew;
34ab69dd 455 }
40f4a63f 456 else if(mcmno > 12)
93622f4a 457 {
458 row = startRowBus[pbusid] + irownew;
40f4a63f 459 col = startColBus[pbusid] + (mcmno-12-1)*4 + icolnew;
93622f4a 460 }
e54787da 461 }
08cf9354 462 else if (rowdiff < 16)
e54787da 463 {
08cf9354 464 row = startRowBus[pbusid] + irownew;
465 col = startColBus[pbusid] + (mcmno-1)*4 + icolnew;
e54787da 466 }
e54787da 467 }
08cf9354 468 else if (imodule >= 42 && imodule < 48)
e54787da 469 {
08cf9354 470 Int_t rowdiff = endRowBus[pbusid] - startRowBus[pbusid];
471
472 if (mcmno <= 12)
34ab69dd 473 {
08cf9354 474 col = endColBus[pbusid] - (mcmno-1)*4 - (3 - icolnew);
475
476 if(rowdiff > 16)
477 row = endRowBus[pbusid] - (15 - irownew) - 16 ;
34ab69dd 478 else
08cf9354 479 row = endRowBus[pbusid] - (15 - irownew) ;
480 }
481 else if(mcmno > 12)
482 {
483 row = endRowBus[pbusid] - (15 - irownew) ;
484 col = endColBus[pbusid] - (mcmno - 12 - 1)*4 - (3 - icolnew);
485 }
486 }
487
488
40f4a63f 489
08cf9354 490 else if (imodule >= 30 && imodule < 36)
491 {
492 if (mcmno > 12)
493 {
494 // Subtract 16 to skip the 1st 15 rows
495 row = endRowBus[pbusid] - 16 -(15 - irownew);
496 col = startColBus[pbusid] + (mcmno-12 -1)*4 + icolnew;
34ab69dd 497 }
08cf9354 498 else
499 {
500 row = endRowBus[pbusid] - (15 - irownew) ;
501 col = startColBus[pbusid] + (mcmno -1)*4 + icolnew;
502 }
503
504 }
a0a6a406 505
08cf9354 506 else if (imodule >= 36 && imodule < 42)
507 {
508 if(mcmno > 12)
e54787da 509 {
08cf9354 510 // Add 16 to skip the 1st 15 rows
511 row = startRowBus[pbusid] + irownew + 16;
512 col = endColBus[pbusid] - (mcmno - 12 - 1)*4 - (3 - icolnew);
513 }
514 else
515 {
516 row = startRowBus[pbusid] + irownew ;
517 col = endColBus[pbusid] - (mcmno - 1)*4 - (3 - icolnew);
e54787da 518 }
34ab69dd 519 }
08cf9354 520
521
34ab69dd 522}
523//_____________________________________________________________________________
524void AliPMDRawStream::ConvertDDL2SMN(Int_t iddl, Int_t imodule,
525 Int_t &smn, Int_t &detector) const
526{
527 // This converts the DDL number (0 to 5), Module Number (0-47)
528 // to Serial module number in one detector (SMN : 0-23) and
529 // detector number (0:PRE plane, 1:CPV plane)
530 if (iddl < 4)
531 {
532 smn = imodule;
533 detector = 0;
534 }
535 else
536 {
537 smn = imodule - 24;
e54787da 538 detector = 1;
539 }
540}
541//_____________________________________________________________________________
40f4a63f 542
e54787da 543void AliPMDRawStream::TransformH2S(Int_t smn, Int_t &row, Int_t &col) const
544{
34ab69dd 545 // This does the transformation of the hardware coordinate to
546 // software
547 // i.e., For SuperModule 0 &1, instead of 96x48(hardware),
548 // it is 48x96 (software)
e54787da 549 // For Supermodule 3 & 4, 48x96
550
e54787da 551 Int_t irownew = 0;
552 Int_t icolnew = 0;
34ab69dd 553
e54787da 554 if(smn < 12)
555 {
34ab69dd 556 irownew = col;
557 icolnew = row;
e54787da 558 }
34ab69dd 559 else if(smn >= 12 && smn < 24)
e54787da 560 {
34ab69dd 561 irownew = row;
562 icolnew = col;
e54787da 563 }
564
565 row = irownew;
566 col = icolnew;
567}
a98f9d26 568//_____________________________________________________________________________
722ccc67 569Int_t AliPMDRawStream::ComputeParity(UInt_t data)
a98f9d26 570{
571// Calculate the parity bit
572
573 Int_t count = 0;
574 for(Int_t j = 0; j<29; j++)
575 {
576 if (data & 0x01 ) count++;
577 data >>= 1;
578 }
579
580 Int_t parity = count%2;
581
582 return parity;
583}
584
e54787da 585//_____________________________________________________________________________
722ccc67 586UInt_t AliPMDRawStream::GetNextWord()
587{
588 // Returns the next 32 bit word
589 // inside the raw data payload.
590
591 if (!fData || fPosition < 0) AliFatal("Raw data payload buffer is not yet initialized !");
592
593 UInt_t word = 0;
594 word |= fData[fPosition++];
595 word |= fData[fPosition++] << 8;
596 word |= fData[fPosition++] << 16;
597 word |= fData[fPosition++] << 24;
598
599 return word;
600}
601
89f0ae35 602//_____________________________________________________________________________
3d8b8ac5 603void AliPMDRawStream::Ddl0Mapping(Int_t moduleNo[], Int_t mcmperBus[],
89f0ae35 604 Int_t startRowBus[], Int_t endRowBus[],
605 Int_t startColBus[], Int_t endColBus[])
606{
08cf9354 607 // DDL0 Mapping
89f0ae35 608
3d8b8ac5 609 Int_t iddl = 0;
89f0ae35 610
3d8b8ac5 611 for(Int_t ibus = 1; ibus < 51; ibus++)
89f0ae35 612 {
3d8b8ac5 613 moduleNo[ibus] = fMapData->GetModuleNo(iddl,ibus);
614 mcmperBus[ibus] = fMapData->GetMcmperBus(iddl,ibus);
615 startRowBus[ibus] = fMapData->GetStartRowBus(iddl,ibus);
616 startColBus[ibus] = fMapData->GetStartColBus(iddl,ibus);
617 endRowBus[ibus] = fMapData->GetEndRowBus(iddl,ibus);
618 endColBus[ibus] = fMapData->GetEndColBus(iddl,ibus);
89f0ae35 619 }
08cf9354 620
89f0ae35 621}
622
623//_____________________________________________________________________________
3d8b8ac5 624void AliPMDRawStream::Ddl1Mapping(Int_t moduleNo[], Int_t mcmperBus[],
89f0ae35 625 Int_t startRowBus[], Int_t endRowBus[],
626 Int_t startColBus[], Int_t endColBus[])
627{
08cf9354 628 // DDL1 Mapping
89f0ae35 629
3d8b8ac5 630 Int_t iddl = 1;
89f0ae35 631
3d8b8ac5 632 for(Int_t ibus = 1; ibus < 51; ibus++)
89f0ae35 633 {
3d8b8ac5 634 moduleNo[ibus] = fMapData->GetModuleNo(iddl,ibus);
635 mcmperBus[ibus] = fMapData->GetMcmperBus(iddl,ibus);
636 startRowBus[ibus] = fMapData->GetStartRowBus(iddl,ibus);
637 startColBus[ibus] = fMapData->GetStartColBus(iddl,ibus);
638 endRowBus[ibus] = fMapData->GetEndRowBus(iddl,ibus);
639 endColBus[ibus] = fMapData->GetEndColBus(iddl,ibus);
08cf9354 640
89f0ae35 641 }
3d8b8ac5 642
08cf9354 643
89f0ae35 644}
645
646//_____________________________________________________________________________
3d8b8ac5 647void AliPMDRawStream::Ddl2Mapping(Int_t moduleNo[], Int_t mcmperBus[],
89f0ae35 648 Int_t startRowBus[], Int_t endRowBus[],
649 Int_t startColBus[], Int_t endColBus[])
650{
08cf9354 651 // DDL2 Mapping
89f0ae35 652
3d8b8ac5 653 Int_t iddl = 2;
08cf9354 654
3d8b8ac5 655 for(Int_t ibus = 1; ibus < 51; ibus++)
89f0ae35 656 {
3d8b8ac5 657 moduleNo[ibus] = fMapData->GetModuleNo(iddl,ibus);
658 mcmperBus[ibus] = fMapData->GetMcmperBus(iddl,ibus);
659 startRowBus[ibus] = fMapData->GetStartRowBus(iddl,ibus);
660 startColBus[ibus] = fMapData->GetStartColBus(iddl,ibus);
661 endRowBus[ibus] = fMapData->GetEndRowBus(iddl,ibus);
662 endColBus[ibus] = fMapData->GetEndColBus(iddl,ibus);
08cf9354 663
89f0ae35 664 }
08cf9354 665
89f0ae35 666}
667
668//_____________________________________________________________________________
3d8b8ac5 669void AliPMDRawStream::Ddl3Mapping(Int_t moduleNo[], Int_t mcmperBus[],
89f0ae35 670 Int_t startRowBus[], Int_t endRowBus[],
671 Int_t startColBus[], Int_t endColBus[])
672{
08cf9354 673 // DDL3 Mapping
89f0ae35 674
3d8b8ac5 675 Int_t iddl = 3;
08cf9354 676
3d8b8ac5 677 for(Int_t ibus = 1; ibus < 51; ibus++)
89f0ae35 678 {
3d8b8ac5 679 moduleNo[ibus] = fMapData->GetModuleNo(iddl,ibus);
680 mcmperBus[ibus] = fMapData->GetMcmperBus(iddl,ibus);
681 startRowBus[ibus] = fMapData->GetStartRowBus(iddl,ibus);
682 startColBus[ibus] = fMapData->GetStartColBus(iddl,ibus);
683 endRowBus[ibus] = fMapData->GetEndRowBus(iddl,ibus);
684 endColBus[ibus] = fMapData->GetEndColBus(iddl,ibus);
08cf9354 685
89f0ae35 686 }
08cf9354 687
89f0ae35 688}
689
690//_____________________________________________________________________________
3d8b8ac5 691void AliPMDRawStream::Ddl4Mapping(Int_t moduleNo[], Int_t mcmperBus[],
89f0ae35 692 Int_t startRowBus[], Int_t endRowBus[],
693 Int_t startColBus[], Int_t endColBus[])
694{
08cf9354 695 // DDL4 Mapping
89f0ae35 696
3d8b8ac5 697 Int_t iddl = 4;
89f0ae35 698
3d8b8ac5 699 for(Int_t ibus = 1; ibus < 51; ibus++)
08cf9354 700 {
3d8b8ac5 701 moduleNo[ibus] = fMapData->GetModuleNo(iddl,ibus);
702 mcmperBus[ibus] = fMapData->GetMcmperBus(iddl,ibus);
703 startRowBus[ibus] = fMapData->GetStartRowBus(iddl,ibus);
704 startColBus[ibus] = fMapData->GetStartColBus(iddl,ibus);
705 endRowBus[ibus] = fMapData->GetEndRowBus(iddl,ibus);
706 endColBus[ibus] = fMapData->GetEndColBus(iddl,ibus);
08cf9354 707
89f0ae35 708 }
3d8b8ac5 709
08cf9354 710
89f0ae35 711}
712
713//_____________________________________________________________________________
3d8b8ac5 714void AliPMDRawStream::Ddl5Mapping(Int_t moduleNo[], Int_t mcmperBus[],
89f0ae35 715 Int_t startRowBus[], Int_t endRowBus[],
716 Int_t startColBus[], Int_t endColBus[])
717{
08cf9354 718 // DDL5 Mapping
89f0ae35 719
3d8b8ac5 720 Int_t iddl = 5;
89f0ae35 721
3d8b8ac5 722 for(Int_t ibus = 1; ibus < 51; ibus++)
08cf9354 723 {
3d8b8ac5 724 moduleNo[ibus] = fMapData->GetModuleNo(iddl,ibus);
725 mcmperBus[ibus] = fMapData->GetMcmperBus(iddl,ibus);
726 startRowBus[ibus] = fMapData->GetStartRowBus(iddl,ibus);
727 startColBus[ibus] = fMapData->GetStartColBus(iddl,ibus);
728 endRowBus[ibus] = fMapData->GetEndRowBus(iddl,ibus);
729 endColBus[ibus] = fMapData->GetEndColBus(iddl,ibus);
08cf9354 730
89f0ae35 731 }
3d8b8ac5 732
733}
734//_____________________________________________________________________________
735
736AliPMDMappingData* AliPMDRawStream::GetMappingData() const
737{
738 // Fetching the mapping data from CDB
739
740 AliCDBEntry *entry = AliCDBManager::Instance()->Get("PMD/Calib/Mapping");
741
742 if(!entry) AliFatal("Mapping object retrieval failed!");
08cf9354 743
3d8b8ac5 744 AliPMDMappingData *mapdata=0;
745 if (entry) mapdata = (AliPMDMappingData*) entry->GetObject();
746
747 if (!mapdata) AliFatal("No Mapping data from CDB !");
748
749 return mapdata;
89f0ae35 750}
751
752
3d8b8ac5 753
754//_____________________________________________________________________________
755