From: bnandi Date: Sat, 10 Feb 2007 07:26:12 +0000 (+0000) Subject: parity bit is introduced X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=commitdiff_plain;h=a98f9d265c9cd7c0e5e5402ea11f8c4d46b8fc1a;ds=sidebyside parity bit is introduced --- diff --git a/PMD/AliPMDDDLRawData.cxx b/PMD/AliPMDDDLRawData.cxx index 2a59aefe4bc..83fe3145892 100644 --- a/PMD/AliPMDDDLRawData.cxx +++ b/PMD/AliPMDDDLRawData.cxx @@ -359,6 +359,7 @@ void AliPMDDDLRawData::GetUMDigitsData(TTree *treeD, Int_t imodule, UInt_t mcmno, chno; UInt_t adc; Int_t det, smn, irow, icol; + Int_t parity; const Int_t kMaxBus = 50; Int_t totPatchBus, bPatchBus, ePatchBus; @@ -483,7 +484,8 @@ void AliPMDDDLRawData::GetUMDigitsData(TTree *treeD, Int_t imodule, AliBitPacking::PackWord(chno,baseword,12,17); AliBitPacking::PackWord(mcmno,baseword,18,28); AliBitPacking::PackWord(0,baseword,29,30); - AliBitPacking::PackWord(1,baseword,31,31); + parity = ComputeParity(baseword); // generate the parity bit + AliBitPacking::PackWord(parity,baseword,31,31); Int_t jj = contentsBus[busno]; busPatch[busno][jj] = baseword; @@ -676,3 +678,19 @@ void AliPMDDDLRawData::GetMCMCh(Int_t ddlno, Int_t row, Int_t col, } //____________________________________________________________________________ +Int_t AliPMDDDLRawData::ComputeParity(UInt_t baseword) +{ + // Generate the parity bit + + Int_t count = 0; + for(Int_t j=0; j<29; j++) + { + if (baseword & 0x01 ) count++; + baseword >>= 1; + } + Int_t parity = count%2; + return parity; +} + +//____________________________________________________________________________ + diff --git a/PMD/AliPMDDDLRawData.h b/PMD/AliPMDDDLRawData.h index 1cf705ded15..f6c651bf4ad 100644 --- a/PMD/AliPMDDDLRawData.h +++ b/PMD/AliPMDDDLRawData.h @@ -38,12 +38,14 @@ class AliPMDDDLRawData:public TObject Int_t *endRowBus, Int_t *endColBus, Int_t & busno, UInt_t &mcmno, UInt_t &chno); + protected: + Int_t ComputeParity(UInt_t baseword); + TClonesArray *fDigits; //! List of digits - // AliPMDdigit *fPMDdigit; //! Pointer to digits - ClassDef(AliPMDDDLRawData,6) // To make RAW Data + ClassDef(AliPMDDDLRawData,7) // To make RAW Data }; #endif diff --git a/PMD/AliPMDRawStream.cxx b/PMD/AliPMDRawStream.cxx index d8db2b1e144..e53298b1bc1 100644 --- a/PMD/AliPMDRawStream.cxx +++ b/PMD/AliPMDRawStream.cxx @@ -92,7 +92,6 @@ Bool_t AliPMDRawStream::DdlData(Int_t indexDDL, TObjArray *pmdddlcont) Int_t iddl = fRawReader->GetDDLID(); Int_t dataSize = fRawReader->GetDataSize(); Int_t totaldataword = dataSize/4; - Int_t equipId = fRawReader->GetEquipmentId(); if (dataSize <= 0) return kFALSE; if (indexDDL != iddl) @@ -203,7 +202,7 @@ Bool_t AliPMDRawStream::DdlData(Int_t indexDDL, TObjArray *pmdddlcont) const Int_t kdspHLen = dspHeader.GetHeaderLength(); const Int_t kpbusHLen = pbusHeader.GetHeaderLength(); - + Int_t parity; Int_t idet, ismn; Int_t irow = -1; Int_t icol = -1; @@ -277,6 +276,11 @@ Bool_t AliPMDRawStream::DdlData(Int_t indexDDL, TObjArray *pmdddlcont) Int_t imcm = (data >> 18) & 0x07FF; Int_t ibit = (data >> 31) & 0x0001; + parity = ComputeParity(data); + if (ibit != parity) + { + AliWarning("ComputeParity:: Parity Error"); + } GetRowCol(iddl, pbusid, imcm, ich, startRowBus, endRowBus, startColBus, endColBus, @@ -498,4 +502,23 @@ void AliPMDRawStream::TransformH2S(Int_t smn, Int_t &row, Int_t &col) const row = irownew; col = icolnew; } + +//_____________________________________________________________________________ + +int AliPMDRawStream::ComputeParity(Int_t data) +{ +// Calculate the parity bit + + Int_t count = 0; + for(Int_t j = 0; j<29; j++) + { + if (data & 0x01 ) count++; + data >>= 1; + } + + Int_t parity = count%2; + + return parity; +} + //_____________________________________________________________________________ diff --git a/PMD/AliPMDRawStream.h b/PMD/AliPMDRawStream.h index 38aea85b166..0bb5b0b6a75 100644 --- a/PMD/AliPMDRawStream.h +++ b/PMD/AliPMDRawStream.h @@ -37,6 +37,7 @@ class AliPMDRawStream: public TObject { void ConvertDDL2SMN(Int_t iddl, Int_t imodule, Int_t &smn, Int_t &detector) const; void TransformH2S(Int_t smn, Int_t &row, Int_t &col) const; + int ComputeParity(Int_t data); AliRawReader* fRawReader; // object for reading the raw data diff --git a/PMD/PMDrecLinkDef.h b/PMD/PMDrecLinkDef.h index b49aa7d5878..4c2189913c1 100644 --- a/PMD/PMDrecLinkDef.h +++ b/PMD/PMDrecLinkDef.h @@ -17,6 +17,7 @@ #pragma link C++ class AliPMDClusteringV1+; #pragma link C++ class AliPMDClusteringV2+; #pragma link C++ class AliPMDclupid+; +#pragma link C++ class AliPMDcludata+; #pragma link C++ class AliPMDDiscriminator+; #pragma link C++ class AliPMDEmpDiscriminator+; #pragma link C++ class AliPMDClusterFinder+; diff --git a/PMD/libPMDrec.pkg b/PMD/libPMDrec.pkg index ac6d80612d6..5ee67133357 100644 --- a/PMD/libPMDrec.pkg +++ b/PMD/libPMDrec.pkg @@ -1,9 +1,9 @@ #-*- Mode: Makefile -*- # $Id$ -SRCS:= AliPMDRecPoint.cxx AliPMDUtility.cxx AliPMDrecpoint1.cxx AliPMDrechit.cxx AliPMDcluster.cxx AliPMDClusteringV1.cxx AliPMDClusteringV2.cxx AliPMDclupid.cxx AliPMDEmpDiscriminator.cxx AliPMDClusterFinder.cxx AliPMDtracker.cxx AliPMDReconstructor.cxx +SRCS:= AliPMDRecPoint.cxx AliPMDUtility.cxx AliPMDrecpoint1.cxx AliPMDrechit.cxx AliPMDcluster.cxx AliPMDClusteringV1.cxx AliPMDClusteringV2.cxx AliPMDclupid.cxx AliPMDEmpDiscriminator.cxx AliPMDClusterFinder.cxx AliPMDtracker.cxx AliPMDReconstructor.cxx AliPMDcludata.cxx -HDRS:= $(SRCS:.cxx=.h) AliPMDClustering.h AliPMDDiscriminator.h +HDRS:= $(SRCS:.cxx=.h) AliPMDClustering.h AliPMDDiscriminator.h AliPMDcludata.h DHDR:=PMDrecLinkDef.h