X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PMD%2FAliPMDRawStream.cxx;h=4ff6d5c48d981a032c183c65c03897b066e41963;hb=069fccec969352d2eac577dd6423a7fbdf11552d;hp=7814f7dd7e4a60de3df67027bc7e291e88e2264d;hpb=362c9d61708912a81d77cb017e1d05fd1f9486a6;p=u%2Fmrichter%2FAliRoot.git diff --git a/PMD/AliPMDRawStream.cxx b/PMD/AliPMDRawStream.cxx index 7814f7dd7e4..4ff6d5c48d9 100644 --- a/PMD/AliPMDRawStream.cxx +++ b/PMD/AliPMDRawStream.cxx @@ -26,28 +26,36 @@ /// /////////////////////////////////////////////////////////////////////////////// +#include +#include +#include +#include + #include "AliLog.h" +#include "AliPMDBlockHeader.h" +#include "AliPMDDspHeader.h" +#include "AliPMDPatchBusHeader.h" +#include "AliPMDddldata.h" #include "AliPMDRawStream.h" +#include "AliPMDMappingData.h" #include "AliRawReader.h" +#include "AliCDBManager.h" +#include "AliCDBStorage.h" +#include "AliCDBEntry.h" ClassImp(AliPMDRawStream) //_____________________________________________________________________________ AliPMDRawStream::AliPMDRawStream(AliRawReader* rawReader) : - fRawReader(rawReader), - fModule(-1), - fPrevModule(-1), - fMCM(-1), - fChannel(-1), - fRow(-1), - fColumn(-1), - fSignal(-1), - fDetector(-1), - fSMN(-1) + fRawReader(rawReader), + fData(NULL), + fPosition(-1), + fMapData(GetMappingData()) { // create an object to read PMD raw digits + fRawReader->Reset(); fRawReader->Select("PMD"); } @@ -55,15 +63,9 @@ AliPMDRawStream::AliPMDRawStream(AliRawReader* rawReader) : AliPMDRawStream::AliPMDRawStream(const AliPMDRawStream& stream) : TObject(stream), fRawReader(NULL), - fModule(-1), - fPrevModule(-1), - fMCM(-1), - fChannel(-1), - fRow(-1), - fColumn(-1), - fSignal(-1), - fDetector(-1), - fSMN(-1) + fData(NULL), + fPosition(-1), + fMapData(GetMappingData()) { // copy constructor @@ -89,207 +91,664 @@ AliPMDRawStream::~AliPMDRawStream() //_____________________________________________________________________________ -Bool_t AliPMDRawStream::Next() + +Int_t AliPMDRawStream::DdlData(TObjArray *pmdddlcont) { -// read the next raw digit -// returns kFALSE if there is no digit left + // read the next raw digit + // returns kFALSE if there is no digit left + + Int_t iddl = -1; - fPrevModule = fModule; + AliPMDddldata *pmdddldata; - UInt_t data; - if (!fRawReader->ReadNextInt(data)) return kFALSE; + if (!fRawReader->ReadHeader()) return -1; - fSignal = data & 0x0FFF; - fChannel = (data >> 12) & 0x003F; - fMCM = (data >> 18) & 0x07FF; + iddl = fRawReader->GetDDLID(); + Int_t dataSize = fRawReader->GetDataSize(); + Int_t totaldataword = dataSize/4; - Int_t iddl = fRawReader->GetDDLID(); - Int_t ium; - GetRowCol(iddl, fMCM, fChannel, ium, fRow, fColumn); - ConvertDDL2SMN(iddl, ium, fSMN, fModule, fDetector); - TransformH2S(fSMN, fRow, fColumn); + if (dataSize <= 0) return -1; - return kTRUE; -} -//_____________________________________________________________________________ -void AliPMDRawStream::GetRowCol(Int_t ddlno, UInt_t mcmno, UInt_t chno, - Int_t &um, Int_t &row, Int_t &col) const -{ -// decode: ddlno, mcmno, chno -> um, row, col + UInt_t data = 0; + // PMD raw data does not contain CDH - Int_t remmcm = 0; - Int_t divmcm = 0; + if (!fRawReader->ReadNextData(fData)) + { + return kFALSE; + } - static const UInt_t kCh[64] = { 21, 25, 29, 28, 17, 24, 20, 16, - 12, 13, 8, 4, 0, 1, 9, 5, - 10, 6, 2, 3, 14, 7, 11, 15, - 19, 18, 23, 27, 31, 30, 22, 26, - 53, 57, 61, 60, 49, 56, 52, 48, - 44, 45, 40, 36, 32, 33, 41, 37, - 42, 38, 34, 35, 46, 39, 43, 47, - 51, 50, 55, 59, 63, 62, 54, 58 }; - if (ddlno == 0 || ddlno == 1) - { - um = mcmno/72; - Int_t mcmnonew = mcmno - 72*um; - Int_t rowcol = kCh[chno]; - Int_t irownew = rowcol/4; - Int_t icolnew = rowcol%4; - - remmcm = mcmnonew%12; - divmcm = mcmnonew/12; - - row = 16*divmcm + irownew; - col = 4*remmcm + icolnew; - // This obtatined row and col (0,0) are the top left corner. - // Needs transformation to get the Geant (0,0) + fPosition = 0; + + Int_t ibus = 0; + + const Int_t kNPatchBus = 51; + Int_t moduleNo[kNPatchBus], mcmperBus[kNPatchBus]; + Int_t startRowBus[kNPatchBus], endRowBus[kNPatchBus]; + Int_t startColBus[kNPatchBus], endColBus[kNPatchBus]; + + for (ibus = 0; ibus < kNPatchBus; ibus++) + { + moduleNo[ibus] = -1; + mcmperBus[ibus] = -1; + startRowBus[ibus] = -1; + endRowBus[ibus] = -1; + startColBus[ibus] = -1; + endColBus[ibus] = -1; } - else if (ddlno == 2 || ddlno == 3) + + if (iddl == 0) { - um = mcmno/72; - Int_t mcmnonew = mcmno - 72*um; - Int_t rowcol = kCh[chno]; - Int_t irownew = rowcol/4; - Int_t icolnew = rowcol%4; - - remmcm = mcmnonew%24; - divmcm = mcmnonew/24; - - row = 16*divmcm + irownew; - col = 4*remmcm + icolnew; - // This obtatined row and col (0,0) are the top left corner. - // Needs transformation to get the Geant (0,0) + Ddl0Mapping(moduleNo, mcmperBus, startRowBus, + endRowBus, startColBus, endColBus); } - else if (ddlno == 4 || ddlno == 5) + else if (iddl == 1) { - um = mcmno/72; - Int_t mcmnonew = mcmno - 72*um; - Int_t rowcol = kCh[chno]; - Int_t irownew = rowcol/4; - Int_t icolnew = rowcol%4; + Ddl1Mapping(moduleNo, mcmperBus, startRowBus, + endRowBus, startColBus, endColBus); - if (um < 6) + } + else if (iddl == 2) + { + Ddl2Mapping(moduleNo, mcmperBus, startRowBus, + endRowBus, startColBus, endColBus); + } + else if (iddl == 3) + { + Ddl3Mapping(moduleNo, mcmperBus, startRowBus, + endRowBus, startColBus, endColBus); + } + else if (iddl == 4) + { + Ddl4Mapping(moduleNo, mcmperBus, startRowBus, + endRowBus, startColBus, endColBus); + } + else if (iddl == 5) + { + Ddl5Mapping(moduleNo, mcmperBus, startRowBus, + endRowBus, startColBus, endColBus); + } + + + AliPMDBlockHeader blockHeader; + AliPMDDspHeader dspHeader; + AliPMDPatchBusHeader pbusHeader; + + const Int_t kblHLen = blockHeader.GetHeaderLength(); + const Int_t kdspHLen = dspHeader.GetHeaderLength(); + const Int_t kpbusHLen = pbusHeader.GetHeaderLength(); + + Int_t parity = 0; + Int_t idet = 0, ismn = 0; + Int_t irow = -1; + Int_t icol = -1; + + Int_t blHeaderWord[8]={0}; + Int_t dspHeaderWord[10]={0}; + Int_t pbusHeaderWord[4]={0}; + + Int_t blRawDataLength = 0; + Int_t dspRawDataLength = 0; + Int_t iwordddl = 2; + + + + for (Int_t iblock = 0; iblock < 2; iblock++) + { + for (Int_t i = 0; i < kblHLen; i++) { - remmcm = mcmnonew%12; - divmcm = mcmnonew/12; + iwordddl++; + + blHeaderWord[i] = (Int_t) GetNextWord(); } - else if (um >= 6) + + blockHeader.SetHeader(blHeaderWord); + blRawDataLength = blockHeader.GetRawDataLength(); + + if (iwordddl == totaldataword) break; + + Int_t iwordblk = 0; + + for (Int_t idsp = 0; idsp < 5; idsp++) { - remmcm = mcmnonew%24; - divmcm = mcmnonew/24; - } + for (Int_t i = 0; i < kdspHLen; i++) + { + iwordddl++; + iwordblk++; + dspHeaderWord[i] = (Int_t) GetNextWord(); + } + dspHeader.SetHeader(dspHeaderWord); + dspRawDataLength = dspHeader.GetRawDataLength(); + + if (iwordddl == totaldataword) break; + + Int_t iworddsp = 0; + + for (ibus = 0; ibus < 5; ibus++) + { + for (Int_t i = 0; i < kpbusHLen; i++) + { + iwordddl++; + iwordblk++; + iworddsp++; + pbusHeaderWord[i] = (Int_t) GetNextWord(); + } - row = 16*divmcm + irownew; - col = 4*remmcm + icolnew; - // This obtatined row and col (0,0) are the top left corner. - // Needs transformation to get the Geant (0,0) + pbusHeader.SetHeader(pbusHeaderWord); + Int_t rawdatalength = pbusHeader.GetRawDataLength(); + Int_t pbusid = pbusHeader.GetPatchBusId(); - } + if (pbusid < 0 || pbusid > 50) return -1; + + Int_t imodule = moduleNo[pbusid]; + + if (iwordddl == totaldataword) break; + + for (Int_t iword = 0; iword < rawdatalength; iword++) + { + iwordddl++; + iwordblk++; + iworddsp++; + data = 0; + data = GetNextWord(); + + Int_t isig = data & 0x0FFF; + Int_t ich = (data >> 12) & 0x003F; + Int_t imcm = (data >> 18) & 0x07FF; + Int_t ibit = (data >> 31) & 0x0001; + + if (imcm == 0) + { + AliWarning(Form("FEE address WRONG:: Module %d Patch Bus %d MCM %d",imodule,pbusid,imcm)); + return -1; + } + + parity = ComputeParity(data); + + if (ibit != parity) + { + AliWarning(Form("Parity Error:: Patch Bus %d Module %d",pbusid,imodule)); + fRawReader->AddMajorErrorLog(kParityError); + return -1; + } + ConvertDDL2SMN(iddl, imodule, ismn, idet); + + GetRowCol(imodule, pbusid, imcm, ich, + startRowBus, endRowBus, + startColBus, endColBus, + irow, icol); + + + 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 (iwordddl == totaldataword) break; + + if (dspHeader.GetPaddingWord() == 1) + { + if (iworddsp == dspRawDataLength-1) break; // raw data + } + else + { + if (iworddsp == dspRawDataLength) break; // raw data + } + + + } // patch bus loop + + + if (dspHeader.GetPaddingWord() == 1) + { + iwordddl++; + iwordblk++; + iworddsp++; + data = GetNextWord(); + } + if (iwordddl == totaldataword) break; + + if (iwordblk == blRawDataLength) break; // for raw data + + + } // end of DSP + + } // end of BLOCK + + return iddl; } //_____________________________________________________________________________ -void AliPMDRawStream::ConvertDDL2SMN(Int_t iddl, Int_t ium, Int_t &smn, - Int_t &module, Int_t &detector) const +void AliPMDRawStream::GetRowCol(Int_t imodule, Int_t pbusid, + UInt_t mcmno, UInt_t chno, + Int_t startRowBus[], Int_t endRowBus[], + Int_t startColBus[], Int_t endColBus[], + Int_t &row, Int_t &col) const { - // This converts the DDL number to Module Number which runs from 0-47 - // Serial module number in one detector which runs from 0-23 - // Also gives the detector number (0:PRE plane, 1:CPV plane) - if (iddl < 4) + // decode: ddlno, patchbusid, mcmno, chno -> um, row, col + + UInt_t iCh[64]; + + static const UInt_t kChDdl01[64] = { 9, 6, 5, 10, 1, 2, 0, 3, + 13, 7, 4, 11, 8, 14, 12, 15, + 16, 19, 17, 23, 20, 27, 24, 18, + 28, 31, 29, 30, 21, 26, 25, 22, + 41, 38, 37, 42, 33, 34, 32, 35, + 45, 39, 36, 43, 40, 46, 44, 47, + 48, 51, 49, 55, 52, 59, 56, 50, + 60, 63, 61, 62, 53, 58, 57, 54 }; + + static const UInt_t kChDdl23[64] = { 54, 57, 58, 53, 62, 61, 63, 60, + 50, 56, 59, 52, 55, 49, 51, 48, + 47, 44, 46, 40, 43, 36, 39, 45, + 35, 32, 34, 33, 42, 37, 38, 41, + 22, 25, 26, 21, 30, 29, 31, 28, + 18, 24, 27, 20, 23, 17, 19, 16, + 15, 12, 14, 8, 11, 4, 7, 13, + 3, 0, 2, 1, 10, 5, 6, 9 }; + + static const UInt_t kChDdl41[64] = { 53, 58, 57, 54, 61, 62, 60, 63, + 49, 59, 56, 55, 52, 50, 48, 51, + 44, 47, 45, 43, 40, 39, 36, 46, + 32, 35, 33, 34, 41, 38, 37, 42, + 21, 26, 25, 22, 29, 30, 28, 31, + 17, 27, 24, 23, 20, 18, 16, 19, + 12, 15, 13, 11, 8, 7, 4, 14, + 0, 3, 1, 2, 9, 6, 5, 10 }; + + static const UInt_t kChDdl42[64] = { 10, 5, 6, 9, 2, 1, 3, 0, + 14, 4, 7, 8, 11, 13, 15, 12, + 19, 16, 18, 20, 23, 24, 27, 17, + 31, 28, 30, 29, 22, 25, 26, 21, + 42, 37, 38, 41, 34, 33, 35, 32, + 46, 36, 39, 40, 43, 45, 47, 44, + 51, 48, 50, 52, 55, 56, 59, 49, + 63, 60, 62, 61, 54, 57, 58, 53 }; + + static const UInt_t kChDdl51[64] = { 10, 5, 6, 9, 2, 1, 3, 0, + 14, 4, 7, 8, 11, 13, 15, 12, + 19, 16, 18, 20, 23, 24, 27, 17, + 31, 28, 30, 29, 22, 25, 26, 21, + 42, 37, 38, 41, 34, 33, 35, 32, + 46, 36, 39, 40, 43, 45, 47, 44, + 51, 48, 50, 52, 55, 56, 59, 49, + 63, 60, 62, 61, 54, 57, 58, 53 }; + + static const UInt_t kChDdl52[64] = { 53, 58, 57, 54, 61, 62, 60, 63, + 49, 59, 56, 55, 52, 50, 48, 51, + 44, 47, 45, 43, 40, 39, 36, 46, + 32, 35, 33, 34, 41, 38, 37, 42, + 21, 26, 25, 22, 29, 30, 28, 31, + 17, 27, 24, 23, 20, 18, 16, 19, + 12, 15, 13, 11, 8, 7, 4, 14, + 0, 3, 1, 2, 9, 6, 5, 10 }; + + for (Int_t i = 0; i < 64; i++) { - module = iddl*6 + ium; - detector = 0; - smn = iddl*6 + ium; + if(imodule < 6) iCh[i] = kChDdl01[i]; + if(imodule >= 6 && imodule <= 11) iCh[i] = kChDdl01[i]; + if(imodule >= 12 && imodule <= 17) iCh[i] = kChDdl23[i]; + if(imodule >= 18 && imodule <= 23) iCh[i] = kChDdl23[i]; + if(imodule >= 24 && imodule <= 29) iCh[i] = kChDdl41[i]; + if(imodule >= 42 && imodule <= 47) iCh[i] = kChDdl42[i]; + if(imodule >= 36 && imodule <= 41) iCh[i] = kChDdl51[i]; + if(imodule >= 30 && imodule <= 35) iCh[i] = kChDdl52[i]; } - else if (iddl == 4) + + + Int_t rowcol = iCh[chno]; + Int_t irownew = rowcol/4; + Int_t icolnew = rowcol%4; + + + if (imodule < 6 ) + { + row = startRowBus[pbusid] + irownew; + col = startColBus[pbusid] + (mcmno-1)*4 + icolnew; + } + else if (imodule >= 6 && imodule < 12) + { + row = endRowBus[pbusid] - (15 - irownew); + col = startColBus[pbusid] + (mcmno-1)*4 + icolnew; + + } + else if (imodule >= 12 && imodule < 18 ) + { + row = startRowBus[pbusid] + irownew; + col = endColBus[pbusid] - (mcmno-1)*4 - (3 - icolnew); + } + else if (imodule >= 18 && imodule < 24) + { + row = endRowBus[pbusid] - (15 - irownew); + col = endColBus[pbusid] - (mcmno-1)*4 - (3 - icolnew); + } + else if (imodule >= 24 && imodule < 30) { - if (ium < 6) + Int_t rowdiff = endRowBus[pbusid] - startRowBus[pbusid]; + if(rowdiff > 16) { - module = 24 + ium; - smn = ium; + if (mcmno <= 12) + { + // Add 16 to skip the 1st 15 rows + row = startRowBus[pbusid] + irownew + 16; + col = startColBus[pbusid] + (mcmno-1)*4 + icolnew; + } + else if(mcmno > 12) + { + row = startRowBus[pbusid] + irownew; + col = startColBus[pbusid] + (mcmno-12-1)*4 + icolnew; + } } - else if (ium >= 6) + else if (rowdiff < 16) { - module = 30 + ium; - smn = 6 + ium; + row = startRowBus[pbusid] + irownew; + col = startColBus[pbusid] + (mcmno-1)*4 + icolnew; } - detector = 1; } - else if (iddl == 5) + else if (imodule >= 42 && imodule < 48) + { + Int_t rowdiff = endRowBus[pbusid] - startRowBus[pbusid]; + + if (mcmno <= 12) + { + col = endColBus[pbusid] - (mcmno-1)*4 - (3 - icolnew); + + if(rowdiff > 16) + row = endRowBus[pbusid] - (15 - irownew) - 16 ; + else + row = endRowBus[pbusid] - (15 - irownew) ; + } + else if(mcmno > 12) + { + row = endRowBus[pbusid] - (15 - irownew) ; + col = endColBus[pbusid] - (mcmno - 12 - 1)*4 - (3 - icolnew); + } + } + + + + else if (imodule >= 30 && imodule < 36) { + if (mcmno > 12) + { + // Subtract 16 to skip the 1st 15 rows + row = endRowBus[pbusid] - 16 -(15 - irownew); + col = startColBus[pbusid] + (mcmno-12 -1)*4 + icolnew; + } + else + { + row = endRowBus[pbusid] - (15 - irownew) ; + col = startColBus[pbusid] + (mcmno -1)*4 + icolnew; + } + + } - if (ium < 6) + else if (imodule >= 36 && imodule < 42) + { + if(mcmno > 12) { - module = 30 + ium; - smn = 6 + ium; + // Add 16 to skip the 1st 15 rows + row = startRowBus[pbusid] + irownew + 16; + col = endColBus[pbusid] - (mcmno - 12 - 1)*4 - (3 - icolnew); } - else if (ium >= 6) + else { - module = 36 + ium; - smn = 12 + ium; + row = startRowBus[pbusid] + irownew ; + col = endColBus[pbusid] - (mcmno - 1)*4 - (3 - icolnew); } + } + + +} +//_____________________________________________________________________________ +void AliPMDRawStream::ConvertDDL2SMN(Int_t iddl, Int_t imodule, + Int_t &smn, Int_t &detector) const +{ + // This converts the DDL number (0 to 5), Module Number (0-47) + // to Serial module number in one detector (SMN : 0-23) and + // detector number (0:PRE plane, 1:CPV plane) + if (iddl < 4) + { + smn = imodule; + detector = 0; + } + else + { + smn = imodule - 24; detector = 1; } } //_____________________________________________________________________________ + void AliPMDRawStream::TransformH2S(Int_t smn, Int_t &row, Int_t &col) const { - // Transform the Hardware (0,0) coordinate to Software (0,0) coordinate - // and also writes in the digit form - // i.e., For SuperModule 1 &2, instead of 96x48 it is 48x96 + // This does the transformation of the hardware coordinate to + // software + // i.e., For SuperModule 0 &1, instead of 96x48(hardware), + // it is 48x96 (software) // For Supermodule 3 & 4, 48x96 - Int_t irownew1 = 0; - Int_t icolnew1 = 0; Int_t irownew = 0; Int_t icolnew = 0; - // Transform all the (0,0) coordinates to the geant frame - if(smn < 6) + + if(smn < 12) { - irownew1 = 95 - row; - icolnew1 = col; + irownew = col; + icolnew = row; } - else if(smn >= 6 && smn < 12) + else if(smn >= 12 && smn < 24) { - irownew1 = row; - icolnew1 = 47 - col; + irownew = row; + icolnew = col; } - else if(smn >= 12 && smn < 18) + + row = irownew; + col = icolnew; +} +//_____________________________________________________________________________ +Int_t AliPMDRawStream::ComputeParity(UInt_t data) +{ +// Calculate the parity bit + + Int_t count = 0; + for(Int_t j = 0; j<29; j++) { - irownew1 = 47 - row; - icolnew1 = col; + if (data & 0x01 ) count++; + data >>= 1; } - else if(smn >= 18 && smn < 24) + + Int_t parity = count%2; + + return parity; +} + +//_____________________________________________________________________________ +UInt_t AliPMDRawStream::GetNextWord() +{ + // Returns the next 32 bit word + // inside the raw data payload. + + if (!fData || fPosition < 0) AliFatal("Raw data payload buffer is not yet initialized !"); + + UInt_t word = 0; + word |= fData[fPosition++]; + word |= fData[fPosition++] << 8; + word |= fData[fPosition++] << 16; + word |= fData[fPosition++] << 24; + + return word; +} + +//_____________________________________________________________________________ +void AliPMDRawStream::Ddl0Mapping(Int_t moduleNo[], Int_t mcmperBus[], + Int_t startRowBus[], Int_t endRowBus[], + Int_t startColBus[], Int_t endColBus[]) +{ + // DDL0 Mapping + + Int_t iddl = 0; + + for(Int_t ibus = 1; ibus < 51; ibus++) { - irownew1 = row; - icolnew1 = 95 - col; + moduleNo[ibus] = fMapData->GetModuleNo(iddl,ibus); + mcmperBus[ibus] = fMapData->GetMcmperBus(iddl,ibus); + startRowBus[ibus] = fMapData->GetStartRowBus(iddl,ibus); + startColBus[ibus] = fMapData->GetStartColBus(iddl,ibus); + endRowBus[ibus] = fMapData->GetEndRowBus(iddl,ibus); + endColBus[ibus] = fMapData->GetEndColBus(iddl,ibus); } - - // for smn < 12 : row = 96, column = 48 - // for smn>= 12 and < 24 : row = 48, column = 96 - // In order to make it uniform dimension, smn < 12 are inverted - // i.e., row becomes column and column becomes row - // for others it remains same - // This is further inverted back while calculating eta and phi - if(smn < 12) + +} + +//_____________________________________________________________________________ +void AliPMDRawStream::Ddl1Mapping(Int_t moduleNo[], Int_t mcmperBus[], + Int_t startRowBus[], Int_t endRowBus[], + Int_t startColBus[], Int_t endColBus[]) +{ + // DDL1 Mapping + + Int_t iddl = 1; + + for(Int_t ibus = 1; ibus < 51; ibus++) { - // SupeModule 1 and 2 : Rows are inverted to columns and vice versa - // and at the time of calculating the eta,phi it is again reverted - // back - irownew = icolnew1; - icolnew = irownew1; + moduleNo[ibus] = fMapData->GetModuleNo(iddl,ibus); + mcmperBus[ibus] = fMapData->GetMcmperBus(iddl,ibus); + startRowBus[ibus] = fMapData->GetStartRowBus(iddl,ibus); + startColBus[ibus] = fMapData->GetStartColBus(iddl,ibus); + endRowBus[ibus] = fMapData->GetEndRowBus(iddl,ibus); + endColBus[ibus] = fMapData->GetEndColBus(iddl,ibus); + } - else if( smn >= 12 && smn < 24) + + +} + +//_____________________________________________________________________________ +void AliPMDRawStream::Ddl2Mapping(Int_t moduleNo[], Int_t mcmperBus[], + Int_t startRowBus[], Int_t endRowBus[], + Int_t startColBus[], Int_t endColBus[]) +{ + // DDL2 Mapping + + Int_t iddl = 2; + + for(Int_t ibus = 1; ibus < 51; ibus++) { - irownew = irownew1; - icolnew = icolnew1; + moduleNo[ibus] = fMapData->GetModuleNo(iddl,ibus); + mcmperBus[ibus] = fMapData->GetMcmperBus(iddl,ibus); + startRowBus[ibus] = fMapData->GetStartRowBus(iddl,ibus); + startColBus[ibus] = fMapData->GetStartColBus(iddl,ibus); + endRowBus[ibus] = fMapData->GetEndRowBus(iddl,ibus); + endColBus[ibus] = fMapData->GetEndColBus(iddl,ibus); + + } + +} + +//_____________________________________________________________________________ +void AliPMDRawStream::Ddl3Mapping(Int_t moduleNo[], Int_t mcmperBus[], + Int_t startRowBus[], Int_t endRowBus[], + Int_t startColBus[], Int_t endColBus[]) +{ + // DDL3 Mapping + + Int_t iddl = 3; + + for(Int_t ibus = 1; ibus < 51; ibus++) + { + moduleNo[ibus] = fMapData->GetModuleNo(iddl,ibus); + mcmperBus[ibus] = fMapData->GetMcmperBus(iddl,ibus); + startRowBus[ibus] = fMapData->GetStartRowBus(iddl,ibus); + startColBus[ibus] = fMapData->GetStartColBus(iddl,ibus); + endRowBus[ibus] = fMapData->GetEndRowBus(iddl,ibus); + endColBus[ibus] = fMapData->GetEndColBus(iddl,ibus); + } - row = irownew; - col = icolnew; } + //_____________________________________________________________________________ +void AliPMDRawStream::Ddl4Mapping(Int_t moduleNo[], Int_t mcmperBus[], + Int_t startRowBus[], Int_t endRowBus[], + Int_t startColBus[], Int_t endColBus[]) +{ + // DDL4 Mapping + + Int_t iddl = 4; + + for(Int_t ibus = 1; ibus < 51; ibus++) + { + moduleNo[ibus] = fMapData->GetModuleNo(iddl,ibus); + mcmperBus[ibus] = fMapData->GetMcmperBus(iddl,ibus); + startRowBus[ibus] = fMapData->GetStartRowBus(iddl,ibus); + startColBus[ibus] = fMapData->GetStartColBus(iddl,ibus); + endRowBus[ibus] = fMapData->GetEndRowBus(iddl,ibus); + endColBus[ibus] = fMapData->GetEndColBus(iddl,ibus); + + } + + +} + +//_____________________________________________________________________________ +void AliPMDRawStream::Ddl5Mapping(Int_t moduleNo[], Int_t mcmperBus[], + Int_t startRowBus[], Int_t endRowBus[], + Int_t startColBus[], Int_t endColBus[]) +{ + // DDL5 Mapping + + Int_t iddl = 5; + + for(Int_t ibus = 1; ibus < 51; ibus++) + { + moduleNo[ibus] = fMapData->GetModuleNo(iddl,ibus); + mcmperBus[ibus] = fMapData->GetMcmperBus(iddl,ibus); + startRowBus[ibus] = fMapData->GetStartRowBus(iddl,ibus); + startColBus[ibus] = fMapData->GetStartColBus(iddl,ibus); + endRowBus[ibus] = fMapData->GetEndRowBus(iddl,ibus); + endColBus[ibus] = fMapData->GetEndColBus(iddl,ibus); + + } + +} +//_____________________________________________________________________________ + +AliPMDMappingData* AliPMDRawStream::GetMappingData() const +{ + // Fetching the mapping data from CDB + + AliCDBEntry *entry = AliCDBManager::Instance()->Get("PMD/Calib/Mapping"); + + if(!entry) AliFatal("Mapping object retrieval failed!"); + + AliPMDMappingData *mapdata=0; + if (entry) mapdata = (AliPMDMappingData*) entry->GetObject(); + + if (!mapdata) AliFatal("No Mapping data from CDB !"); + + return mapdata; +} + + + +//_____________________________________________________________________________ +