+ for (Int_t idsp = 0; idsp < 5; idsp++)
+ {
+ ilowLimit = iuppLimit;
+ iuppLimit = ilowLimit + kdspHLen;
+
+ for (Int_t i = ilowLimit; i < iuppLimit; i++)
+ {
+ iwordcount++;
+ dspHeaderWord[i-ilowLimit] = (Int_t) buffer[i];
+ }
+ dspHeader.SetHeader(dspHeaderWord);
+
+ for (Int_t ibus = 0; ibus < 5; ibus++)
+ {
+ ilowLimit = iuppLimit;
+ iuppLimit = ilowLimit + kpbusHLen;
+
+ for (Int_t i = ilowLimit; i < iuppLimit; i++)
+ {
+ iwordcount++;
+ pbusHeaderWord[i-ilowLimit] = (Int_t) buffer[i];
+ }
+ pbusHeader.SetHeader(pbusHeaderWord);
+ Int_t rawdatalength = pbusHeader.GetRawDataLength();
+ Int_t pbusid = pbusHeader.GetPatchBusId();
+
+ ilowLimit = iuppLimit;
+ iuppLimit = ilowLimit + rawdatalength;
+
+ Int_t imodule = moduleNo[pbusid];
+
+
+ for (Int_t iword = ilowLimit; iword < iuppLimit; iword++)
+ {
+ iwordcount++;
+ data = buffer[iword];
+
+ Int_t isig = data & 0x0FFF;
+ Int_t ich = (data >> 12) & 0x003F;
+ Int_t imcm = (data >> 18) & 0x07FF;
+ Int_t ibit = (data >> 31) & 0x0001;
+ parity = ComputeParity(data);
+ if (ibit != parity)
+ {
+ AliWarning("ComputeParity:: Parity Error");
+ fRawReader->AddMajorErrorLog(kParityError);
+ }
+ GetRowCol(iddl, pbusid, imcm, ich,
+ startRowBus, endRowBus,
+ startColBus, endColBus,
+ irow, icol);
+
+ ConvertDDL2SMN(iddl, imodule, ismn, idet);
+ TransformH2S(ismn, irow, icol);
+
+ pmdddldata = new AliPMDddldata();
+
+ pmdddldata->SetDetector(idet);
+ pmdddldata->SetSMN(ismn);
+ pmdddldata->SetModule(imodule);
+ pmdddldata->SetPatchBusId(pbusid);
+ pmdddldata->SetMCM(imcm);
+ pmdddldata->SetChannel(ich);
+ pmdddldata->SetRow(irow);
+ pmdddldata->SetColumn(icol);
+ pmdddldata->SetSignal(isig);
+ pmdddldata->SetParityBit(ibit);
+
+ pmdddlcont->Add(pmdddldata);
+
+ } // data word loop
+
+ if (iwordcount == blRawDataLength) break;
+
+ } // patch bus loop
+
+ if (dspHeader.GetPaddingWord() == 1) iuppLimit++;
+ if (iwordcount == blRawDataLength) break;
+
+ } // end of DSP
+ if (iwordcount == blRawDataLength) break;
+
+ } // end of BLOCK
+
+ delete [] buffer;
+
+ return kTRUE;