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
96 AliPMDddldata *pmdddldata;
98 if (!fRawReader->ReadHeader()) return -1;
100 iddl = fRawReader->GetDDLID();
101 Int_t dataSize = fRawReader->GetDataSize();
102 Int_t totaldataword = dataSize/4;
105 if (dataSize <= 0) return -1;
109 fRawReader->ReadNextData(fData);
116 const Int_t kNPatchBus = 51;
118 Int_t moduleNo[kNPatchBus], mcmperBus[kNPatchBus];
119 Int_t startRowBus[kNPatchBus], endRowBus[kNPatchBus];
120 Int_t startColBus[kNPatchBus], endColBus[kNPatchBus];
122 for (ibus = 0; ibus < kNPatchBus; ibus++)
125 mcmperBus[ibus] = -1;
126 startRowBus[ibus] = -1;
127 endRowBus[ibus] = -1;
128 startColBus[ibus] = -1;
129 endColBus[ibus] = -1;
132 // open the ddl file info to know the module
133 TString ddlinfofileName(gSystem->Getenv("ALICE_ROOT"));
134 ddlinfofileName += "/PMD/PMD_ddl_info.dat";
137 infileddl.open(ddlinfofileName.Data(), ios::in); // ascii file
138 if(!infileddl) AliError("Could not read the ddl info file");
145 for(Int_t jddl = 0; jddl < 6; jddl++)
147 if (infileddl.eof()) break;
148 infileddl >> ddlno >> modulePerDDL;
149 moduleddl[jddl] = modulePerDDL;
151 if (modulePerDDL == 0) continue;
152 for (Int_t im = 0; im < modulePerDDL; im++)
162 modulePerDDL = moduleddl[iddl];
163 Ddl0Mapping(modulePerDDL, moduleNo, mcmperBus, startRowBus,
164 endRowBus, startColBus, endColBus);
169 modulePerDDL = moduleddl[iddl];
170 Ddl1Mapping(modulePerDDL, moduleNo, mcmperBus, startRowBus,
171 endRowBus, startColBus, endColBus);
176 modulePerDDL = moduleddl[iddl];
177 Ddl2Mapping(modulePerDDL, moduleNo, mcmperBus, startRowBus,
178 endRowBus, startColBus, endColBus);
182 modulePerDDL = moduleddl[iddl];
183 Ddl3Mapping(modulePerDDL, moduleNo, mcmperBus, startRowBus,
184 endRowBus, startColBus, endColBus);
188 modulePerDDL = moduleddl[iddl];
189 Ddl4Mapping(modulePerDDL, moduleNo, mcmperBus, startRowBus,
190 endRowBus, startColBus, endColBus);
194 modulePerDDL = moduleddl[iddl];
195 Ddl5Mapping(modulePerDDL, moduleNo, mcmperBus, startRowBus,
196 endRowBus, startColBus, endColBus);
200 AliPMDBlockHeader blockHeader;
201 AliPMDDspHeader dspHeader;
202 AliPMDPatchBusHeader pbusHeader;
204 const Int_t kblHLen = blockHeader.GetHeaderLength();
205 const Int_t kdspHLen = dspHeader.GetHeaderLength();
206 const Int_t kpbusHLen = pbusHeader.GetHeaderLength();
213 Int_t blHeaderWord[8];
214 Int_t dspHeaderWord[10];
215 Int_t pbusHeaderWord[4];
217 Int_t blRawDataLength = 0;
218 Int_t dspRawDataLength = 0;
223 for (Int_t iblock = 0; iblock < 2; iblock++)
225 for (Int_t i = 0; i < kblHLen; i++)
229 blHeaderWord[i] = (Int_t) GetNextWord();
232 blockHeader.SetHeader(blHeaderWord);
233 blRawDataLength = blockHeader.GetRawDataLength();
235 if (iwordddl == totaldataword) break;
239 for (Int_t idsp = 0; idsp < 5; idsp++)
241 for (Int_t i = 0; i < kdspHLen; i++)
245 dspHeaderWord[i] = (Int_t) GetNextWord();
247 dspHeader.SetHeader(dspHeaderWord);
248 dspRawDataLength = dspHeader.GetRawDataLength();
250 if (iwordddl == totaldataword) break;
254 for (ibus = 0; ibus < 5; ibus++)
256 for (Int_t i = 0; i < kpbusHLen; i++)
261 pbusHeaderWord[i] = (Int_t) GetNextWord();
264 pbusHeader.SetHeader(pbusHeaderWord);
265 Int_t rawdatalength = pbusHeader.GetRawDataLength();
266 Int_t pbusid = pbusHeader.GetPatchBusId();
268 if (pbusid < 0 || pbusid > 50) return -1;
270 Int_t imodule = moduleNo[pbusid];
272 if (iwordddl == totaldataword) break;
274 for (Int_t iword = 0; iword < rawdatalength; iword++)
280 data = GetNextWord();
282 Int_t isig = data & 0x0FFF;
283 Int_t ich = (data >> 12) & 0x003F;
284 Int_t imcm = (data >> 18) & 0x07FF;
285 Int_t ibit = (data >> 31) & 0x0001;
289 AliWarning(Form("FEE address WRONG:: Module %d Patch Bus %d MCM %d",imodule,pbusid,imcm));
293 parity = ComputeParity(data);
297 AliWarning(Form("Parity Error:: Patch Bus %d Module %d",pbusid,imodule));
298 fRawReader->AddMajorErrorLog(kParityError);
302 ConvertDDL2SMN(iddl, imodule, ismn, idet);
304 GetRowCol(imodule, pbusid, imcm, ich,
305 startRowBus, endRowBus,
306 startColBus, endColBus,
310 TransformH2S(ismn, irow, icol);
312 pmdddldata = new AliPMDddldata();
314 pmdddldata->SetDetector(idet);
315 pmdddldata->SetSMN(ismn);
316 pmdddldata->SetModule(imodule);
317 pmdddldata->SetPatchBusId(pbusid);
318 pmdddldata->SetMCM(imcm);
319 pmdddldata->SetChannel(ich);
320 pmdddldata->SetRow(irow);
321 pmdddldata->SetColumn(icol);
322 pmdddldata->SetSignal(isig);
323 pmdddldata->SetParityBit(ibit);
325 pmdddlcont->Add(pmdddldata);
330 if (iwordddl == totaldataword) break;
332 if (dspHeader.GetPaddingWord() == 1)
334 if (iworddsp == dspRawDataLength-1) break; // raw data
338 if (iworddsp == dspRawDataLength) break; // raw data
345 if (dspHeader.GetPaddingWord() == 1)
350 data = GetNextWord();
352 if (iwordddl == totaldataword) break;
354 if (iwordblk == blRawDataLength) break; // for raw data
363 //_____________________________________________________________________________
364 void AliPMDRawStream::GetRowCol(Int_t imodule, Int_t pbusid,
365 UInt_t mcmno, UInt_t chno,
366 Int_t startRowBus[], Int_t endRowBus[],
367 Int_t startColBus[], Int_t endColBus[],
368 Int_t &row, Int_t &col) const
370 // decode: ddlno, patchbusid, mcmno, chno -> um, row, col
374 static const UInt_t kChDdl01[64] = { 9, 6, 5, 10, 1, 2, 0, 3,
375 13, 7, 4, 11, 8, 14, 12, 15,
376 16, 19, 17, 23, 20, 27, 24, 18,
377 28, 31, 29, 30, 21, 26, 25, 22,
378 41, 38, 37, 42, 33, 34, 32, 35,
379 45, 39, 36, 43, 40, 46, 44, 47,
380 48, 51, 49, 55, 52, 59, 56, 50,
381 60, 63, 61, 62, 53, 58, 57, 54 };
383 static const UInt_t kChDdl23[64] = { 54, 57, 58, 53, 62, 61, 63, 60,
384 50, 56, 59, 52, 55, 49, 51, 48,
385 47, 44, 46, 40, 43, 36, 39, 45,
386 35, 32, 34, 33, 42, 37, 38, 41,
387 22, 25, 26, 21, 30, 29, 31, 28,
388 18, 24, 27, 20, 23, 17, 19, 16,
389 15, 12, 14, 8, 11, 4, 7, 13,
390 3, 0, 2, 1, 10, 5, 6, 9 };
392 static const UInt_t kChDdl41[64] = { 53, 58, 57, 54, 61, 62, 60, 63,
393 49, 59, 56, 55, 52, 50, 48, 51,
394 44, 47, 45, 43, 40, 39, 36, 46,
395 32, 35, 33, 34, 41, 38, 37, 42,
396 21, 26, 25, 22, 29, 30, 28, 31,
397 17, 27, 24, 23, 20, 18, 16, 19,
398 12, 15, 13, 11, 8, 7, 4, 14,
399 0, 3, 1, 2, 9, 6, 5, 10 };
401 static const UInt_t kChDdl42[64] = { 10, 5, 6, 9, 2, 1, 3, 0,
402 14, 4, 7, 8, 11, 13, 15, 12,
403 19, 16, 18, 20, 23, 24, 27, 17,
404 31, 28, 30, 29, 22, 25, 26, 21,
405 42, 37, 38, 41, 34, 33, 35, 32,
406 46, 36, 39, 40, 43, 45, 47, 44,
407 51, 48, 50, 52, 55, 56, 59, 49,
408 63, 60, 62, 61, 54, 57, 58, 53 };
410 static const UInt_t kChDdl51[64] = { 10, 5, 6, 9, 2, 1, 3, 0,
411 14, 4, 7, 8, 11, 13, 15, 12,
412 19, 16, 18, 20, 23, 24, 27, 17,
413 31, 28, 30, 29, 22, 25, 26, 21,
414 42, 37, 38, 41, 34, 33, 35, 32,
415 46, 36, 39, 40, 43, 45, 47, 44,
416 51, 48, 50, 52, 55, 56, 59, 49,
417 63, 60, 62, 61, 54, 57, 58, 53 };
419 static const UInt_t kChDdl52[64] = { 53, 58, 57, 54, 61, 62, 60, 63,
420 49, 59, 56, 55, 52, 50, 48, 51,
421 44, 47, 45, 43, 40, 39, 36, 46,
422 32, 35, 33, 34, 41, 38, 37, 42,
423 21, 26, 25, 22, 29, 30, 28, 31,
424 17, 27, 24, 23, 20, 18, 16, 19,
425 12, 15, 13, 11, 8, 7, 4, 14,
426 0, 3, 1, 2, 9, 6, 5, 10 };
428 for (Int_t i = 0; i < 64; i++)
430 if(imodule < 6) iCh[i] = kChDdl01[i];
431 if(imodule >= 6 && imodule <= 11) iCh[i] = kChDdl01[i];
432 if(imodule >= 12 && imodule <= 17) iCh[i] = kChDdl23[i];
433 if(imodule >= 18 && imodule <= 23) iCh[i] = kChDdl23[i];
434 if(imodule >= 24 && imodule <= 29) iCh[i] = kChDdl41[i];
435 if(imodule >= 42 && imodule <= 47) iCh[i] = kChDdl42[i];
436 if(imodule >= 36 && imodule <= 41) iCh[i] = kChDdl51[i];
437 if(imodule >= 30 && imodule <= 35) iCh[i] = kChDdl52[i];
441 Int_t rowcol = iCh[chno];
442 Int_t irownew = rowcol/4;
443 Int_t icolnew = rowcol%4;
448 row = startRowBus[pbusid] + irownew;
449 col = startColBus[pbusid] + (mcmno-1)*4 + icolnew;
451 else if (imodule >= 6 && imodule < 12)
453 row = endRowBus[pbusid] - (15 - irownew);
454 col = startColBus[pbusid] + (mcmno-1)*4 + icolnew;
457 else if (imodule >= 12 && imodule < 18 )
459 row = startRowBus[pbusid] + irownew;
460 col = endColBus[pbusid] - (mcmno-1)*4 - (3 - icolnew);
462 else if (imodule >= 18 && imodule < 24)
464 row = endRowBus[pbusid] - (15 - irownew);
465 col = endColBus[pbusid] - (mcmno-1)*4 - (3 - icolnew);
467 else if (imodule >= 24 && imodule < 30)
469 Int_t rowdiff = endRowBus[pbusid] - startRowBus[pbusid];
474 // Add 16 to skip the 1st 15 rows
475 row = startRowBus[pbusid] + irownew + 16;
476 col = startColBus[pbusid] + (mcmno-1)*4 + icolnew;
480 row = startRowBus[pbusid] + irownew;
481 col = startColBus[pbusid] + (mcmno-12-1)*4 + icolnew;
484 else if (rowdiff < 16)
486 row = startRowBus[pbusid] + irownew;
487 col = startColBus[pbusid] + (mcmno-1)*4 + icolnew;
490 else if (imodule >= 42 && imodule < 48)
492 Int_t rowdiff = endRowBus[pbusid] - startRowBus[pbusid];
496 col = endColBus[pbusid] - (mcmno-1)*4 - (3 - icolnew);
499 row = endRowBus[pbusid] - (15 - irownew) - 16 ;
501 row = endRowBus[pbusid] - (15 - irownew) ;
505 row = endRowBus[pbusid] - (15 - irownew) ;
506 col = endColBus[pbusid] - (mcmno - 12 - 1)*4 - (3 - icolnew);
512 else if (imodule >= 30 && imodule < 36)
516 // Subtract 16 to skip the 1st 15 rows
517 row = endRowBus[pbusid] - 16 -(15 - irownew);
518 col = startColBus[pbusid] + (mcmno-12 -1)*4 + icolnew;
522 row = endRowBus[pbusid] - (15 - irownew) ;
523 col = startColBus[pbusid] + (mcmno -1)*4 + icolnew;
528 else if (imodule >= 36 && imodule < 42)
532 // Add 16 to skip the 1st 15 rows
533 row = startRowBus[pbusid] + irownew + 16;
534 col = endColBus[pbusid] - (mcmno - 12 - 1)*4 - (3 - icolnew);
538 row = startRowBus[pbusid] + irownew ;
539 col = endColBus[pbusid] - (mcmno - 1)*4 - (3 - icolnew);
545 //_____________________________________________________________________________
546 void AliPMDRawStream::ConvertDDL2SMN(Int_t iddl, Int_t imodule,
547 Int_t &smn, Int_t &detector) const
549 // This converts the DDL number (0 to 5), Module Number (0-47)
550 // to Serial module number in one detector (SMN : 0-23) and
551 // detector number (0:PRE plane, 1:CPV plane)
563 //_____________________________________________________________________________
565 void AliPMDRawStream::TransformH2S(Int_t smn, Int_t &row, Int_t &col) const
567 // This does the transformation of the hardware coordinate to
569 // i.e., For SuperModule 0 &1, instead of 96x48(hardware),
570 // it is 48x96 (software)
571 // For Supermodule 3 & 4, 48x96
581 else if(smn >= 12 && smn < 24)
590 //_____________________________________________________________________________
591 Int_t AliPMDRawStream::ComputeParity(UInt_t data)
593 // Calculate the parity bit
596 for(Int_t j = 0; j<29; j++)
598 if (data & 0x01 ) count++;
602 Int_t parity = count%2;
607 //_____________________________________________________________________________
608 UInt_t AliPMDRawStream::GetNextWord()
610 // Returns the next 32 bit word
611 // inside the raw data payload.
613 if (!fData || fPosition < 0) AliFatal("Raw data payload buffer is not yet initialized !");
616 word |= fData[fPosition++];
617 word |= fData[fPosition++] << 8;
618 word |= fData[fPosition++] << 16;
619 word |= fData[fPosition++] << 24;
624 //_____________________________________________________________________________
625 void AliPMDRawStream::Ddl0Mapping(Int_t modulePerDDL,
626 Int_t moduleNo[], Int_t mcmperBus[],
627 Int_t startRowBus[], Int_t endRowBus[],
628 Int_t startColBus[], Int_t endColBus[])
632 Int_t moduleno, totPatchBus, bPatchBus, ePatchBus;
633 Int_t ibus, totmcm, rows, rowe, cols, cole;
635 TString fileName(gSystem->Getenv("ALICE_ROOT"));
636 fileName += "/PMD/PMD_Mapping_ddl0.dat";
639 infile.open(fileName.Data(), ios::in); // ascii file
641 AliError("Could not read the mapping file for DDL No = 0");
643 for (Int_t im = 0; im < modulePerDDL; im++)
646 infile >> totPatchBus >> bPatchBus >> ePatchBus;
648 if (totPatchBus == 0) continue;
650 for(Int_t i=0; i<totPatchBus; i++)
652 infile >> ibus >> totmcm >> rows >> rowe >> cols >> cole;
654 moduleNo[ibus] = moduleno;
655 mcmperBus[ibus] = totmcm;
656 startRowBus[ibus] = rows;
657 startColBus[ibus] = cols;
658 endRowBus[ibus] = rowe;
659 endColBus[ibus] = cole;
669 //_____________________________________________________________________________
670 void AliPMDRawStream::Ddl1Mapping(Int_t modulePerDDL,
671 Int_t moduleNo[], Int_t mcmperBus[],
672 Int_t startRowBus[], Int_t endRowBus[],
673 Int_t startColBus[], Int_t endColBus[])
677 Int_t moduleno, totPatchBus, bPatchBus, ePatchBus;
678 Int_t ibus, totmcm, rows, rowe, cols, cole;
680 TString fileName(gSystem->Getenv("ALICE_ROOT"));
681 fileName += "/PMD/PMD_Mapping_ddl1.dat";
684 infile.open(fileName.Data(), ios::in); // ascii file
686 AliError("Could not read the mapping file for DDL No = 1");
688 for (Int_t im = 0; im < modulePerDDL; im++)
691 infile >> totPatchBus >> bPatchBus >> ePatchBus;
693 if (totPatchBus == 0) continue;
695 for(Int_t i=0; i<totPatchBus; i++)
697 infile >> ibus >> totmcm >> rows >> rowe >> cols >> cole;
699 moduleNo[ibus] = moduleno;
700 mcmperBus[ibus] = totmcm;
701 startRowBus[ibus] = rows;
702 startColBus[ibus] = cols;
703 endRowBus[ibus] = rowe;
704 endColBus[ibus] = cole;
714 //_____________________________________________________________________________
715 void AliPMDRawStream::Ddl2Mapping(Int_t modulePerDDL,
716 Int_t moduleNo[], Int_t mcmperBus[],
717 Int_t startRowBus[], Int_t endRowBus[],
718 Int_t startColBus[], Int_t endColBus[])
722 Int_t moduleno, totPatchBus, bPatchBus, ePatchBus;
723 Int_t ibus, totmcm, rows, rowe, cols, cole;
726 TString fileName(gSystem->Getenv("ALICE_ROOT"));
727 fileName += "/PMD/PMD_Mapping_ddl2.dat";
730 infile.open(fileName.Data(), ios::in); // ascii file
732 AliError("Could not read the mapping file for DDL No = 2");
734 for (Int_t im = 0; im < modulePerDDL; im++)
737 infile >> totPatchBus >> bPatchBus >> ePatchBus;
739 if (totPatchBus == 0) continue;
741 for(Int_t i=0; i<totPatchBus; i++)
743 infile >> ibus >> totmcm >> rows >> rowe >> cols >> cole;
745 moduleNo[ibus] = moduleno;
746 mcmperBus[ibus] = totmcm;
747 startRowBus[ibus] = rows;
748 startColBus[ibus] = cols;
749 endRowBus[ibus] = rowe;
750 endColBus[ibus] = cole;
760 //_____________________________________________________________________________
761 void AliPMDRawStream::Ddl3Mapping(Int_t modulePerDDL,
762 Int_t moduleNo[], Int_t mcmperBus[],
763 Int_t startRowBus[], Int_t endRowBus[],
764 Int_t startColBus[], Int_t endColBus[])
768 Int_t moduleno, totPatchBus, bPatchBus, ePatchBus;
769 Int_t ibus, totmcm, rows, rowe, cols, cole;
771 TString fileName(gSystem->Getenv("ALICE_ROOT"));
772 fileName += "/PMD/PMD_Mapping_ddl3.dat";
775 infile.open(fileName.Data(), ios::in); // ascii file
777 AliError("Could not read the mapping file for DDL No = 3");
779 for (Int_t im = 0; im < modulePerDDL; im++)
782 infile >> totPatchBus >> bPatchBus >> ePatchBus;
784 if (totPatchBus == 0) continue;
786 for(Int_t i=0; i<totPatchBus; i++)
788 infile >> ibus >> totmcm >> rows >> rowe >> cols >> cole;
790 moduleNo[ibus] = moduleno;
791 mcmperBus[ibus] = totmcm;
792 startRowBus[ibus] = rows;
793 startColBus[ibus] = cols;
794 endRowBus[ibus] = rowe;
795 endColBus[ibus] = cole;
805 //_____________________________________________________________________________
806 void AliPMDRawStream::Ddl4Mapping(Int_t modulePerDDL,
807 Int_t moduleNo[], Int_t mcmperBus[],
808 Int_t startRowBus[], Int_t endRowBus[],
809 Int_t startColBus[], Int_t endColBus[])
813 Int_t moduleno, totPatchBus, bPatchBus, ePatchBus;
814 Int_t ibus, totmcm, rows, rowe, cols, cole;
816 TString fileName(gSystem->Getenv("ALICE_ROOT"));
817 fileName += "/PMD/PMD_Mapping_ddl4.dat";
820 infile.open(fileName.Data(), ios::in); // ascii file
822 AliError("Could not read the mapping file for DDL No = 4");
824 for (Int_t im = 0; im < modulePerDDL; im++)
827 infile >> totPatchBus >> bPatchBus >> ePatchBus;
829 if (totPatchBus == 0) continue;
831 for(Int_t i=0; i<totPatchBus; i++)
833 infile >> ibus >> totmcm >> rows >> rowe >> cols >> cole;
835 moduleNo[ibus] = moduleno;
836 mcmperBus[ibus] = totmcm;
837 startRowBus[ibus] = rows;
838 startColBus[ibus] = cols;
839 endRowBus[ibus] = rowe;
840 endColBus[ibus] = cole;
850 //_____________________________________________________________________________
851 void AliPMDRawStream::Ddl5Mapping(Int_t modulePerDDL,
852 Int_t moduleNo[], Int_t mcmperBus[],
853 Int_t startRowBus[], Int_t endRowBus[],
854 Int_t startColBus[], Int_t endColBus[])
858 Int_t moduleno, totPatchBus, bPatchBus, ePatchBus;
859 Int_t ibus, totmcm, rows, rowe, cols, cole;
862 TString fileName(gSystem->Getenv("ALICE_ROOT"));
863 fileName += "/PMD/PMD_Mapping_ddl5.dat";
866 infile.open(fileName.Data(), ios::in); // ascii file
868 AliError("Could not read the mapping file for DDL No = 5");
870 for (Int_t im = 0; im < modulePerDDL; im++)
873 infile >> totPatchBus >> bPatchBus >> ePatchBus;
875 if (totPatchBus == 0) continue;
877 for(Int_t i=0; i<totPatchBus; i++)
879 infile >> ibus >> totmcm >> rows >> rowe >> cols >> cole;
881 moduleNo[ibus] = moduleno;
882 mcmperBus[ibus] = totmcm;
883 startRowBus[ibus] = rows;
884 startColBus[ibus] = cols;
885 endRowBus[ibus] = rowe;
886 endColBus[ibus] = cole;