1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 ///////////////////////////////////////////////////////////////////////////////
20 /// This class provides access to PMD digits in raw data.
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.
27 ///////////////////////////////////////////////////////////////////////////////
29 #include <Riostream.h>
30 #include <TObjArray.h>
35 #include "AliPMDBlockHeader.h"
36 #include "AliPMDDspHeader.h"
37 #include "AliPMDPatchBusHeader.h"
38 #include "AliPMDddldata.h"
39 #include "AliPMDRawStream.h"
40 #include "AliRawReader.h"
42 ClassImp(AliPMDRawStream)
45 //_____________________________________________________________________________
46 AliPMDRawStream::AliPMDRawStream(AliRawReader* rawReader) :
47 fRawReader(rawReader),
51 // create an object to read PMD raw digits
54 fRawReader->Select("PMD");
57 //_____________________________________________________________________________
58 AliPMDRawStream::AliPMDRawStream(const AliPMDRawStream& stream) :
66 AliFatal("Copy constructor not implemented");
69 //_____________________________________________________________________________
70 AliPMDRawStream& AliPMDRawStream::operator = (const AliPMDRawStream&
73 // assignment operator
75 AliFatal("operator = assignment operator not implemented");
79 //_____________________________________________________________________________
80 AliPMDRawStream::~AliPMDRawStream()
87 //_____________________________________________________________________________
89 Int_t AliPMDRawStream::DdlData(TObjArray *pmdddlcont)
91 // read the next raw digit
92 // returns kFALSE if there is no digit left
98 AliPMDddldata *pmdddldata;
100 if (!fRawReader->ReadHeader()) return -1;
102 iddl = fRawReader->GetDDLID();
103 Int_t dataSize = fRawReader->GetDataSize();
104 Int_t totaldataword = dataSize/4;
106 if (dataSize <= 0) return -1;
110 fRawReader->ReadNextData(fData);
117 const Int_t kNPatchBus = 51;
119 Int_t moduleNo[kNPatchBus], mcmperBus[kNPatchBus];
120 Int_t startRowBus[kNPatchBus], endRowBus[kNPatchBus];
121 Int_t startColBus[kNPatchBus], endColBus[kNPatchBus];
123 for (ibus = 0; ibus < kNPatchBus; ibus++)
126 mcmperBus[ibus] = -1;
127 startRowBus[ibus] = -1;
128 endRowBus[ibus] = -1;
129 startColBus[ibus] = -1;
130 endColBus[ibus] = -1;
133 // Call the Mapping methods - hard coded
138 Ddl0Mapping(moduleNo, mcmperBus, startRowBus,
139 endRowBus, startColBus, endColBus);
143 Ddl1Mapping(moduleNo, mcmperBus, startRowBus,
144 endRowBus, startColBus, endColBus);
148 Ddl2Mapping(moduleNo, mcmperBus, startRowBus,
149 endRowBus, startColBus, endColBus);
153 Ddl3Mapping(moduleNo, mcmperBus, startRowBus,
154 endRowBus, startColBus, endColBus);
158 Ddl4Mapping(moduleNo, mcmperBus, startRowBus,
159 endRowBus, startColBus, endColBus);
163 Ddl5Mapping(moduleNo, mcmperBus, startRowBus,
164 endRowBus, startColBus, endColBus);
168 AliPMDBlockHeader blockHeader;
169 AliPMDDspHeader dspHeader;
170 AliPMDPatchBusHeader pbusHeader;
172 const Int_t kblHLen = blockHeader.GetHeaderLength();
173 const Int_t kdspHLen = dspHeader.GetHeaderLength();
174 const Int_t kpbusHLen = pbusHeader.GetHeaderLength();
181 Int_t blHeaderWord[8];
182 Int_t dspHeaderWord[10];
183 Int_t pbusHeaderWord[4];
185 Int_t blRawDataLength = 0;
186 Int_t dspRawDataLength = 0;
191 for (Int_t iblock = 0; iblock < 2; iblock++)
193 for (Int_t i = 0; i < kblHLen; i++)
197 blHeaderWord[i] = (Int_t) GetNextWord();
200 blockHeader.SetHeader(blHeaderWord);
201 blRawDataLength = blockHeader.GetRawDataLength();
203 if (iwordddl == totaldataword) break;
207 for (Int_t idsp = 0; idsp < 5; idsp++)
209 for (Int_t i = 0; i < kdspHLen; i++)
213 dspHeaderWord[i] = (Int_t) GetNextWord();
215 dspHeader.SetHeader(dspHeaderWord);
216 dspRawDataLength = dspHeader.GetRawDataLength();
218 if (iwordddl == totaldataword) break;
222 for (ibus = 0; ibus < 5; ibus++)
224 for (Int_t i = 0; i < kpbusHLen; i++)
229 pbusHeaderWord[i] = (Int_t) GetNextWord();
232 pbusHeader.SetHeader(pbusHeaderWord);
233 Int_t rawdatalength = pbusHeader.GetRawDataLength();
234 Int_t pbusid = pbusHeader.GetPatchBusId();
236 if (pbusid < 0 || pbusid > 50) return -1;
238 Int_t imodule = moduleNo[pbusid];
240 if (iwordddl == totaldataword) break;
242 for (Int_t iword = 0; iword < rawdatalength; iword++)
248 data = GetNextWord();
250 Int_t isig = data & 0x0FFF;
251 Int_t ich = (data >> 12) & 0x003F;
252 Int_t imcm = (data >> 18) & 0x07FF;
253 Int_t ibit = (data >> 31) & 0x0001;
257 AliWarning(Form("FEE address WRONG:: Module %d Patch Bus %d MCM %d",imodule,pbusid,imcm));
261 parity = ComputeParity(data);
265 AliWarning(Form("Parity Error:: Patch Bus %d Module %d",pbusid,imodule));
266 fRawReader->AddMajorErrorLog(kParityError);
270 ConvertDDL2SMN(iddl, imodule, ismn, idet);
272 GetRowCol(iddl, ismn, pbusid, imcm, ich,
273 startRowBus, endRowBus,
274 startColBus, endColBus,
277 TransformH2S(ismn, irow, icol);
279 pmdddldata = new AliPMDddldata();
281 pmdddldata->SetDetector(idet);
282 pmdddldata->SetSMN(ismn);
283 pmdddldata->SetModule(imodule);
284 pmdddldata->SetPatchBusId(pbusid);
285 pmdddldata->SetMCM(imcm);
286 pmdddldata->SetChannel(ich);
287 pmdddldata->SetRow(irow);
288 pmdddldata->SetColumn(icol);
289 pmdddldata->SetSignal(isig);
290 pmdddldata->SetParityBit(ibit);
292 pmdddlcont->Add(pmdddldata);
296 if (iwordddl == totaldataword) break;
298 if (dspHeader.GetPaddingWord() == 1)
300 if (iworddsp == dspRawDataLength-1) break; // raw data
304 if (iworddsp == dspRawDataLength) break; // raw data
308 if (dspHeader.GetPaddingWord() == 1)
313 data = GetNextWord();
315 if (iwordddl == totaldataword) break;
317 if (iwordblk == blRawDataLength) break; // for raw data
325 //_____________________________________________________________________________
326 void AliPMDRawStream::GetRowCol(Int_t ddlno, Int_t smn, Int_t pbusid,
327 UInt_t mcmno, UInt_t chno,
328 Int_t startRowBus[], Int_t endRowBus[],
329 Int_t startColBus[], Int_t endColBus[],
330 Int_t &row, Int_t &col) const
332 // decode: ddlno, patchbusid, mcmno, chno -> um, row, col
336 static const UInt_t kChDdl01[64] = { 9, 6, 5, 10, 1, 2, 0, 3,
337 13, 7, 4, 11, 8, 14, 12, 15,
338 16, 19, 17, 23, 20, 27, 24, 18,
339 28, 31, 29, 30, 21, 26, 25, 22,
340 41, 38, 37, 42, 33, 34, 32, 35,
341 45, 39, 36, 43, 40, 46, 44, 47,
342 48, 51, 49, 55, 52, 59, 56, 50,
343 60, 63, 61, 62, 53, 58, 57, 54 };
345 static const UInt_t kChDdl23[64] = { 54, 57, 58, 53, 62, 61, 63, 60,
346 50, 56, 59, 52, 55, 49, 51, 48,
347 47, 44, 46, 40, 43, 36, 39, 45,
348 35, 32, 34, 33, 42, 37, 38, 41,
349 22, 25, 26, 21, 30, 29, 31, 28,
350 18, 24, 27, 20, 23, 17, 19, 16,
351 15, 12, 14, 8, 11, 4, 7, 13,
352 3, 0, 2, 1, 10, 5, 6, 9 };
354 static const UInt_t kChDdl41[64] = { 53, 58, 57, 54, 61, 62, 60, 63,
355 49, 59, 56, 55, 52, 50, 48, 51,
356 44, 47, 45, 43, 40, 39, 36, 46,
357 32, 35, 33, 34, 41, 38, 37, 42,
358 21, 26, 25, 22, 29, 30, 28, 31,
359 17, 27, 24, 23, 20, 18, 16, 19,
360 12, 15, 13, 11, 8, 7, 4, 14,
361 0, 3, 1, 2, 9, 6, 5, 10 };
363 static const UInt_t kChDdl42[64] = { 10, 5, 6, 9, 2, 1, 3, 0,
364 14, 4, 7, 8, 11, 13, 15, 12,
365 19, 16, 18, 20, 23, 24, 27, 17,
366 31, 28, 30, 29, 22, 25, 26, 21,
367 42, 37, 38, 41, 34, 33, 35, 32,
368 46, 36, 39, 40, 43, 45, 47, 44,
369 51, 48, 50, 52, 55, 56, 59, 49,
370 63, 60, 62, 61, 54, 57, 58, 53 };
372 static const UInt_t kChDdl51[64] = { 10, 5, 6, 9, 2, 1, 3, 0,
373 14, 4, 7, 8, 11, 13, 15, 12,
374 19, 16, 18, 20, 23, 24, 27, 17,
375 31, 28, 30, 29, 22, 25, 26, 21,
376 42, 37, 38, 41, 34, 33, 35, 32,
377 46, 36, 39, 40, 43, 45, 47, 44,
378 51, 48, 50, 52, 55, 56, 59, 49,
379 63, 60, 62, 61, 54, 57, 58, 53 };
381 static const UInt_t kChDdl52[64] = { 53, 58, 57, 54, 61, 62, 60, 63,
382 49, 59, 56, 55, 52, 50, 48, 51,
383 44, 47, 45, 43, 40, 39, 36, 46,
384 32, 35, 33, 34, 41, 38, 37, 42,
385 21, 26, 25, 22, 29, 30, 28, 31,
386 17, 27, 24, 23, 20, 18, 16, 19,
387 12, 15, 13, 11, 8, 7, 4, 14,
388 0, 3, 1, 2, 9, 6, 5, 10 };
390 for (Int_t i = 0; i < 64; i++)
392 if (ddlno == 0 || ddlno == 1) iCh[i] = kChDdl01[i];
393 if (ddlno == 2 || ddlno == 3) iCh[i] = kChDdl23[i];
395 if (ddlno == 4 && smn < 6) iCh[i] = kChDdl41[i];
396 if (ddlno == 4 && (smn >= 18 && smn < 24))iCh[i] = kChDdl42[i];
397 if (ddlno == 5 && (smn >= 12 && smn < 18))iCh[i] = kChDdl51[i];
398 if (ddlno == 5 && (smn >= 6 && smn < 12))iCh[i] = kChDdl52[i];
402 Int_t rowcol = iCh[chno];
403 Int_t irownew = rowcol/4;
404 Int_t icolnew = rowcol%4;
408 row = startRowBus[pbusid] + irownew;
409 col = startColBus[pbusid] + (mcmno-1)*4 + icolnew;
413 row = endRowBus[pbusid] - (15 - irownew);
414 col = startColBus[pbusid] + (mcmno-1)*4 + icolnew;
417 else if (ddlno == 2 )
419 row = startRowBus[pbusid] + irownew;
420 col = endColBus[pbusid] - (mcmno-1)*4 - (3 - icolnew);
424 row = endRowBus[pbusid] - (15 - irownew);
425 col = endColBus[pbusid] - (mcmno-1)*4 - (3 - icolnew);
427 else if (ddlno == 4 )
433 // Add 16 to skip the 1st 15 rows
434 row = startRowBus[pbusid] + irownew + 16;
435 col = startColBus[pbusid] + (mcmno-1)*4 + icolnew;
439 row = startRowBus[pbusid] + irownew;
440 col = startColBus[pbusid] + (mcmno-12-1)*4 + icolnew;
447 col = endColBus[pbusid] - (mcmno-1)*4 - (3 - icolnew);
449 if(endRowBus[pbusid] - startRowBus[pbusid] > 16)
450 row = endRowBus[pbusid] - (15 - irownew) - 16 ;
452 row = endRowBus[pbusid] - (15 - irownew) ;
456 row = endRowBus[pbusid] - (15 - irownew) ;
457 col = endColBus[pbusid] - (mcmno - 12 - 1)*4 - (3 - icolnew);
467 // Subtract 16 to skip the 1st 15 rows
468 row = endRowBus[pbusid] - 16 -(15 - irownew);
469 col = startColBus[pbusid] + (mcmno-12 -1)*4 + icolnew;
473 row = endRowBus[pbusid] - (15 - irownew) ;
474 col = startColBus[pbusid] + (mcmno -1)*4 + icolnew;
479 else if (pbusid > 18)
483 // Add 16 to skip the 1st 15 rows
484 row = startRowBus[pbusid] + irownew + 16;
485 col = endColBus[pbusid] - (mcmno - 12 - 1)*4 - (3 - icolnew);
489 row = startRowBus[pbusid] + irownew ;
490 col = endColBus[pbusid] - (mcmno - 1)*4 - (3 - icolnew);
496 //_____________________________________________________________________________
497 void AliPMDRawStream::ConvertDDL2SMN(Int_t iddl, Int_t imodule,
498 Int_t &smn, Int_t &detector) const
500 // This converts the DDL number (0 to 5), Module Number (0-47)
501 // to Serial module number in one detector (SMN : 0-23) and
502 // detector number (0:PRE plane, 1:CPV plane)
514 //_____________________________________________________________________________
516 void AliPMDRawStream::TransformH2S(Int_t smn, Int_t &row, Int_t &col) const
518 // This does the transformation of the hardware coordinate to
520 // i.e., For SuperModule 0 &1, instead of 96x48(hardware),
521 // it is 48x96 (software)
522 // For Supermodule 3 & 4, 48x96
532 else if(smn >= 12 && smn < 24)
541 //_____________________________________________________________________________
542 Int_t AliPMDRawStream::ComputeParity(UInt_t data)
544 // Calculate the parity bit
547 for(Int_t j = 0; j<29; j++)
549 if (data & 0x01 ) count++;
553 Int_t parity = count%2;
558 //_____________________________________________________________________________
559 UInt_t AliPMDRawStream::GetNextWord()
561 // Returns the next 32 bit word
562 // inside the raw data payload.
564 if (!fData || fPosition < 0) AliFatal("Raw data payload buffer is not yet initialized !");
567 word |= fData[fPosition++];
568 word |= fData[fPosition++] << 8;
569 word |= fData[fPosition++] << 16;
570 word |= fData[fPosition++] << 24;
575 //_____________________________________________________________________________
576 void AliPMDRawStream::Ddl0Mapping(Int_t moduleNo[], Int_t mcmperBus[],
577 Int_t startRowBus[], Int_t endRowBus[],
578 Int_t startColBus[], Int_t endColBus[])
582 const Int_t ktotpbus = 36;
583 static const Int_t modno0[ktotpbus] = {0, 0, 0, 0, 0, 0,
592 static const Int_t srbus0[ktotpbus] = {0, 16, 32, 48, 64, 80,
593 0, 16, 32, 48, 64, 80,
594 0, 16, 32, 48, 64, 80,
595 0, 16, 32, 48, 64, 80,
596 0, 16, 32, 48, 64, 80,
597 0, 16, 32, 48, 64, 80};
601 static const Int_t erbus0[ktotpbus] = {15, 31, 47, 63, 79, 95,
602 15, 31, 47, 63, 79, 95,
603 15, 31, 47, 63, 79, 95,
604 15, 31, 47, 63, 79, 95,
605 15, 31, 47, 63, 79, 95,
606 15, 31, 47, 63, 79, 95};
609 for (Int_t ibus = 1; ibus <= ktotpbus; ibus++)
611 moduleNo[ibus] = modno0[ibus-1];
612 mcmperBus[ibus] = 12;
613 startRowBus[ibus] = srbus0[ibus-1];
614 endRowBus[ibus] = erbus0[ibus-1];
615 startColBus[ibus] = 0;
616 endColBus[ibus] = 47;
621 //_____________________________________________________________________________
622 void AliPMDRawStream::Ddl1Mapping(Int_t moduleNo[], Int_t mcmperBus[],
623 Int_t startRowBus[], Int_t endRowBus[],
624 Int_t startColBus[], Int_t endColBus[])
628 const Int_t ktotpbus = 36;
629 static const Int_t kmodno1[ktotpbus] = {6, 6, 6, 6, 6, 6,
633 10, 10, 10, 10, 10, 10,
634 11, 11, 11, 11, 11, 11};
637 static const Int_t ksrbus1[ktotpbus] = {0, 16, 32, 48, 64, 80,
638 0, 16, 32, 48, 64, 80,
639 0, 16, 32, 48, 64, 80,
640 0, 16, 32, 48, 64, 80,
641 0, 16, 32, 48, 64, 80,
642 0, 16, 32, 48, 64, 80};
646 static const Int_t kerbus1[ktotpbus] = {15, 31, 47, 63, 79, 95,
647 15, 31, 47, 63, 79, 95,
648 15, 31, 47, 63, 79, 95,
649 15, 31, 47, 63, 79, 95,
650 15, 31, 47, 63, 79, 95,
651 15, 31, 47, 63, 79, 95};
654 for (Int_t ibus = 1; ibus <= ktotpbus; ibus++)
656 moduleNo[ibus] = kmodno1[ibus-1];
657 mcmperBus[ibus] = 12;
658 startRowBus[ibus] = ksrbus1[ibus-1];
659 endRowBus[ibus] = kerbus1[ibus-1];
660 startColBus[ibus] = 0;
661 endColBus[ibus] = 47;
666 //_____________________________________________________________________________
667 void AliPMDRawStream::Ddl2Mapping(Int_t moduleNo[], Int_t mcmperBus[],
668 Int_t startRowBus[], Int_t endRowBus[],
669 Int_t startColBus[], Int_t endColBus[])
673 const Int_t ktotpbus = 36;
674 static const Int_t kmodno2[ktotpbus] = {12, 12, 12, 12, 12, 12,
675 13, 13, 13, 13, 13, 13,
676 14, 14, 14, 14, 14, 14,
677 15, 15, 15, 15, 15, 15,
678 16, 16, 16, 16, 16, 16,
679 17, 17, 17, 17, 17, 17};
681 static const Int_t ksrbus2[ktotpbus] = {32, 32, 16, 16, 0, 0,
682 32, 32, 16, 16, 0, 0,
683 32, 32, 16, 16, 0, 0,
684 32, 32, 16, 16, 0, 0,
685 32, 32, 16, 16, 0, 0,
686 32, 32, 16, 16, 0, 0};
689 static const Int_t kerbus2[ktotpbus] = {47, 47, 31, 31, 15, 15,
690 47, 47, 31, 31, 15, 15,
691 47, 47, 31, 31, 15, 15,
692 47, 47, 31, 31, 15, 15,
693 47, 47, 31, 31, 15, 15,
694 47, 47, 31, 31, 15, 15};
696 static const Int_t kscbus2[ktotpbus] = {48, 0, 48, 0, 48, 0,
701 48, 0, 48, 0, 48, 0};
703 static const Int_t kecbus2[ktotpbus] = {95, 47, 95, 47, 95, 47,
704 95, 47, 95, 47, 95, 47,
705 95, 47, 95, 47, 95, 47,
706 95, 47, 95, 47, 95, 47,
707 95, 47, 95, 47, 95, 47,
708 95, 47, 95, 47, 95, 47};
712 for (Int_t ibus = 1; ibus <= ktotpbus; ibus++)
714 moduleNo[ibus] = kmodno2[ibus-1];
715 mcmperBus[ibus] = 12;
716 startRowBus[ibus] = ksrbus2[ibus-1];
717 endRowBus[ibus] = kerbus2[ibus-1];
718 startColBus[ibus] = kscbus2[ibus-1];
719 endColBus[ibus] = kecbus2[ibus-1];
724 //_____________________________________________________________________________
725 void AliPMDRawStream::Ddl3Mapping(Int_t moduleNo[], Int_t mcmperBus[],
726 Int_t startRowBus[], Int_t endRowBus[],
727 Int_t startColBus[], Int_t endColBus[])
731 const Int_t ktotpbus = 36;
732 static const Int_t kmodno3[ktotpbus] = {18, 18, 18, 18, 18, 18,
733 19, 19, 19, 19, 19, 19,
734 20, 20, 20, 20, 20, 20,
735 21, 21, 21, 21, 21, 21,
736 22, 22, 22, 22, 22, 22,
737 23, 23, 23, 23, 23, 23};
741 static const Int_t ksrbus3[ktotpbus] = {32, 32, 16, 16, 0, 0,
742 32, 32, 16, 16, 0, 0,
743 32, 32, 16, 16, 0, 0,
744 32, 32, 16, 16, 0, 0,
745 32, 32, 16, 16, 0, 0,
746 32, 32, 16, 16, 0, 0};
749 static const Int_t kerbus3[ktotpbus] = {47, 47, 31, 31, 15, 15,
750 47, 47, 31, 31, 15, 15,
751 47, 47, 31, 31, 15, 15,
752 47, 47, 31, 31, 15, 15,
753 47, 47, 31, 31, 15, 15,
754 47, 47, 31, 31, 15, 15};
756 static const Int_t kscbus3[ktotpbus] = {48, 0, 48, 0, 48, 0,
761 48, 0, 48, 0, 48, 0};
763 static const Int_t kecbus3[ktotpbus] = {95, 47, 95, 47, 95, 47,
764 95, 47, 95, 47, 95, 47,
765 95, 47, 95, 47, 95, 47,
766 95, 47, 95, 47, 95, 47,
767 95, 47, 95, 47, 95, 47,
768 95, 47, 95, 47, 95, 47};
770 for (Int_t ibus = 1; ibus <= ktotpbus; ibus++)
772 moduleNo[ibus] = kmodno3[ibus-1];
773 mcmperBus[ibus] = 12;
774 startRowBus[ibus] = ksrbus3[ibus-1];
775 endRowBus[ibus] = kerbus3[ibus-1];
776 startColBus[ibus] = kscbus3[ibus-1];
777 endColBus[ibus] = kecbus3[ibus-1];
782 //_____________________________________________________________________________
783 void AliPMDRawStream::Ddl4Mapping(Int_t moduleNo[], Int_t mcmperBus[],
784 Int_t startRowBus[], Int_t endRowBus[],
785 Int_t startColBus[], Int_t endColBus[])
789 const Int_t ktotpbus = 42;
790 static const Int_t kmodno4[ktotpbus] = {24, 24, 24, 25, 25, 25,
791 26, 26, 26, 27, 27, 27,
792 28, 28, 28, 29, 29, 29,
793 42, 42, 42, 42, 43, 43, 43, 43,
794 44, 44, 44, 44, 45, 45, 45, 45,
795 46, 46, 46, 46, 47, 47, 47, 47};
798 static const Int_t kmcbus4[ktotpbus] = {24, 24, 24, 24, 24, 24,
799 24, 24, 24, 24, 24, 24,
800 24, 24, 24, 24, 24, 24,
801 12, 12, 24, 24, 12, 12, 24, 24,
802 12, 12, 24, 24, 12, 12, 24, 24,
803 12, 12, 24, 24, 12, 12, 24, 24};
806 static const Int_t ksrbus4[ktotpbus] = {0, 32, 64, 0, 32, 64,
807 0, 32, 64, 0, 32, 64,
808 0, 32, 64, 0, 32, 64,
809 32, 32, 0, 0, 32, 32, 0, 0,
810 32, 32, 0, 0, 32, 32, 0, 0,
811 32, 32, 0, 0, 32, 32, 0, 0};
816 static const Int_t kerbus4[ktotpbus] = {31, 63, 95, 31, 63, 95,
817 31, 63, 95, 31, 63, 95,
818 31, 63, 95, 31, 63, 95,
819 47, 47, 31, 31, 47, 47, 31, 31,
820 47, 47, 31, 31, 47, 47, 31, 31,
821 47, 47, 31, 31, 47, 47, 31, 31};
825 static const Int_t kscbus4[ktotpbus] = {0, 0, 0, 0, 0, 0,
828 48, 0, 48, 0, 48, 0, 48, 0,
829 48, 0, 48, 0, 48, 0, 48, 0,
830 48, 0, 48, 0, 48, 0, 48, 0};
834 static const Int_t kecbus4[ktotpbus] = {47, 47, 47, 47, 47, 47,
835 47, 47, 47, 47, 47, 47,
836 47, 47, 47, 47, 47, 47,
837 95, 47, 95, 47, 95, 47, 95, 47,
838 95, 47, 95, 47, 95, 47, 95, 47,
839 95, 47, 95, 47, 95, 47, 95, 47};
842 for (Int_t ibus = 1; ibus <= ktotpbus; ibus++)
844 moduleNo[ibus] = kmodno4[ibus-1];
845 mcmperBus[ibus] = kmcbus4[ibus-1];
846 startRowBus[ibus] = ksrbus4[ibus-1];
847 endRowBus[ibus] = kerbus4[ibus-1];
848 startColBus[ibus] = kscbus4[ibus-1];
849 endColBus[ibus] = kecbus4[ibus-1];
854 //_____________________________________________________________________________
855 void AliPMDRawStream::Ddl5Mapping(Int_t moduleNo[], Int_t mcmperBus[],
856 Int_t startRowBus[], Int_t endRowBus[],
857 Int_t startColBus[], Int_t endColBus[])
861 const Int_t ktotpbus = 42;
862 static const Int_t kmodno5[ktotpbus] = {30, 30, 30, 31, 31, 31,
863 32, 32, 32, 33, 33, 33,
864 34, 34, 34, 35, 35, 35,
865 36, 36, 36, 36, 37, 37, 37, 37,
866 38, 38, 38, 38, 39, 39, 39, 39,
867 40, 40, 40, 40, 41, 41, 41, 41};
870 static const Int_t kmcbus5[ktotpbus] = {24, 24, 24, 24, 24, 24,
871 24, 24, 24, 24, 24, 24,
872 24, 24, 24, 24, 24, 24,
873 12, 12, 24, 24, 12, 12, 24, 24,
874 12, 12, 24, 24, 12, 12, 24, 24,
875 12, 12, 24, 24, 12, 12, 24, 24};
879 static const Int_t ksrbus5[ktotpbus] = {0, 32, 64, 0, 32, 64,
880 0, 32, 64, 0, 32, 64,
881 0, 32, 64, 0, 32, 64,
882 32, 32, 0, 0, 32, 32, 0, 0,
883 32, 32, 0, 0, 32, 32, 0, 0,
884 32, 32, 0, 0, 32, 32, 0, 0};
889 static const Int_t kerbus5[ktotpbus] = {31, 63, 95, 31, 63, 95,
890 31, 63, 95, 31, 63, 95,
891 31, 63, 95, 31, 63, 95,
892 47, 47, 31, 31, 47, 47, 31, 31,
893 47, 47, 31, 31, 47, 47, 31, 31,
894 47, 47, 31, 31, 47, 47, 31, 31};
898 static const Int_t kscbus5[ktotpbus] = {0, 0, 0, 0, 0, 0,
901 48, 0, 48, 0, 48, 0, 48, 0,
902 48, 0, 48, 0, 48, 0, 48, 0,
903 48, 0, 48, 0, 48, 0, 48, 0};
907 static const Int_t kecbus5[ktotpbus] = {47, 47, 47, 47, 47, 47,
908 47, 47, 47, 47, 47, 47,
909 47, 47, 47, 47, 47, 47,
910 95, 47, 95, 47, 95, 47, 95, 47,
911 95, 47, 95, 47, 95, 47, 95, 47,
912 95, 47, 95, 47, 95, 47, 95, 47};
915 for (Int_t ibus = 1; ibus <= ktotpbus; ibus++)
917 moduleNo[ibus] = kmodno5[ibus-1];
918 mcmperBus[ibus] = kmcbus5[ibus-1];
919 startRowBus[ibus] = ksrbus5[ibus-1];
920 endRowBus[ibus] = kerbus5[ibus-1];
921 startColBus[ibus] = kscbus5[ibus-1];
922 endColBus[ibus] = kecbus5[ibus-1];