Splitting Header and payload decoding (Christian)
authormartinez <martinez@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 8 Jun 2006 16:35:09 +0000 (16:35 +0000)
committermartinez <martinez@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 8 Jun 2006 16:35:09 +0000 (16:35 +0000)
MUON/AliMUONRawStreamTracker.cxx
MUON/AliMUONRawStreamTracker.h
MUON/AliMUONRawStreamTrigger.cxx
MUON/AliMUONRawStreamTrigger.h
MUON/MUONrawLinkDef.h
MUON/libMUONraw.pkg

index 5fc444d..327c886 100644 (file)
@@ -21,7 +21,8 @@
 /// It loops over all MUON digits in the raw data given by the AliRawReader.
 /// The Next method goes to the next digit. If there are no digits left
 /// it returns kFALSE (under develpment)
-/// It can loop also over DDL and store the decoded rawdata in TClonesArray.
+/// It can loop also over DDL and store the decoded rawdata in TClonesArray
+/// in Payload class.
 /// 
 /// First version implement for Tracker
 ///
 #include "AliRawDataHeader.h"
 #include "AliLog.h"
 
-#include "AliMUONDspHeader.h"
-#include "AliMUONBlockHeader.h"
-#include "AliMUONBusStruct.h"
-#include "AliMUONDDLTracker.h"
+#include "AliMpBusPatch.h"
 
 ClassImp(AliMUONRawStreamTracker)
 
@@ -48,22 +46,15 @@ AliMUONRawStreamTracker::AliMUONRawStreamTracker()
     fDspId(0),
     fBlkId(0),
     fNextDDL(kTRUE),
-    fMaxDDL(20),
-    fMaxBlock(2),
-    fMaxDsp(5),
-    fMaxBus(5)
+    fMaxDDL(20)
 {
   //
   // create an object to read MUON raw digits
   // Default ctor for monitoring purposes
   //
-  fBusPatchManager = new AliMpBusPatch();
-  fBusPatchManager->ReadBusPatchFile();
 
-  fDDLTracker      = new AliMUONDDLTracker();
-  fBusStruct       = new AliMUONBusStruct();
-  fBlockHeader     = new AliMUONBlockHeader();
-  fDspHeader       = new AliMUONDspHeader();
+  fPayload = new AliMUONPayloadTracker();
+
 }
 
 //_________________________________________________________________
@@ -74,25 +65,16 @@ AliMUONRawStreamTracker::AliMUONRawStreamTracker(AliRawReader* rawReader)
     fDspId(0),
     fBlkId(0),
     fNextDDL(kTRUE),
-    fMaxDDL(20),
-    fMaxBlock(2),
-    fMaxDsp(5),
-    fMaxBus(5)
+    fMaxDDL(20)
 {
   //
   // ctor with AliRawReader as argument
   // for reconstruction purpose
   //
 
-  fRawReader       = rawReader;
-
-  fBusPatchManager = new AliMpBusPatch();
-  fBusPatchManager->ReadBusPatchFile();
+  fRawReader = rawReader;
+  fPayload   = new AliMUONPayloadTracker();
 
-  fDDLTracker      = new AliMUONDDLTracker();
-  fBusStruct       = new AliMUONBusStruct();
-  fBlockHeader     = new AliMUONBlockHeader();
-  fDspHeader       = new AliMUONDspHeader();
 }
 
 //_________________________________________________________________
@@ -123,11 +105,8 @@ AliMUONRawStreamTracker::~AliMUONRawStreamTracker()
   //
   // clean up
   //
-  delete fBusPatchManager;
-  delete fDDLTracker;
-  delete fBusStruct;
-  delete fBlockHeader;
-  delete fDspHeader;
+  delete fPayload;
+
 }
 
 //_____________________________________________________________
@@ -138,63 +117,63 @@ Bool_t AliMUONRawStreamTracker::Next()
   // returns kFALSE if there is no digit left
   // (under development)
 
-     AliMUONDDLTracker*       ddlTracker = 0x0;
-     AliMUONBlockHeader*      blkHeader  = 0x0;
-     AliMUONDspHeader*        dspHeader  = 0x0;
-     Int_t nBusPatch;
-     Int_t nDsp;
-     Int_t nBlock;
-
- next:  
-     if (fNextDDL){
-       printf("iDDL %d\n", fDDL+1);
-       fBlkId = 0;
-       fDspId = 0;
-       fBusPatchId = 0;
-       if(!NextDDL()) 
-        return kFALSE;
-     }
-     fNextDDL = kFALSE;
-
-     ddlTracker = GetDDLTracker();
-
-     nBlock = ddlTracker->GetBlkHeaderEntries();
-     if (fBlkId <  nBlock) {
-
-       blkHeader = ddlTracker->GetBlkHeaderEntry(fBlkId);
-       nDsp      = blkHeader->GetDspHeaderEntries();
-
-       if( fDspId < nDsp) {
-        dspHeader = blkHeader->GetDspHeaderEntry(fDspId);
-        nBusPatch = dspHeader->GetBusPatchEntries();
-
-        if (fBusPatchId < nBusPatch) {
-          fBusStructPtr = dspHeader->GetBusPatchEntry(fBusPatchId++);
-          return kTRUE;
-
-        } else {// iBusPatch
-          fDspId++;
-          fBusPatchId = 0;
-          goto next;
-          //   Next();
-        }
-
-       } else {// iDsp
-        fBlkId++;
-        fDspId = 0;
-        fBusPatchId = 0;
-        goto next;
-        //      Next();
-       }
-
-     } else {// iBlock
-       fBlkId = 0;
-       fDspId = 0;
-       fBusPatchId = 0;
-       fNextDDL = kTRUE;
-       //return kTRUE;
-       goto next; 
-     }
+//      AliMUONDDLTracker*       ddlTracker = 0x0;
+//      AliMUONBlockHeader*      blkHeader  = 0x0;
+//      AliMUONDspHeader*        dspHeader  = 0x0;
+//      Int_t nBusPatch;
+//      Int_t nDsp;
+//      Int_t nBlock;
+
+//  next:  
+//      if (fNextDDL){
+//        printf("iDDL %d\n", fDDL+1);
+//        fBlkId = 0;
+//        fDspId = 0;
+//        fBusPatchId = 0;
+//        if(!NextDDL()) 
+//      return kFALSE;
+//      }
+//      fNextDDL = kFALSE;
+
+//      ddlTracker = GetDDLTracker();
+
+//      nBlock = ddlTracker->GetBlkHeaderEntries();
+//      if (fBlkId <  nBlock) {
+
+//        blkHeader = ddlTracker->GetBlkHeaderEntry(fBlkId);
+//        nDsp      = blkHeader->GetDspHeaderEntries();
+
+//        if( fDspId < nDsp) {
+//      dspHeader = blkHeader->GetDspHeaderEntry(fDspId);
+//      nBusPatch = dspHeader->GetBusPatchEntries();
+
+//      if (fBusPatchId < nBusPatch) {
+//        fBusStructPtr = dspHeader->GetBusPatchEntry(fBusPatchId++);
+//        return kTRUE;
+
+//      } else {// iBusPatch
+//        fDspId++;
+//        fBusPatchId = 0;
+//        goto next;
+//        //   Next();
+//      }
+
+//        } else {// iDsp
+//      fBlkId++;
+//      fDspId = 0;
+//      fBusPatchId = 0;
+//      goto next;
+//      //      Next();
+//        }
+
+//      } else {// iBlock
+//        fBlkId = 0;
+//        fDspId = 0;
+//        fBusPatchId = 0;
+//        fNextDDL = kTRUE;
+//        //return kTRUE;
+//        goto next; 
+//      }
 
      return kFALSE;
 }
@@ -203,164 +182,35 @@ Bool_t AliMUONRawStreamTracker::Next()
 Bool_t AliMUONRawStreamTracker::NextDDL()
 {
   // reading tracker DDL
-  // store buspatch info into Array
-  // store only non-empty structures (buspatch info with datalength !=0)
-
-  fDDLTracker->GetBlkHeaderArray()->Delete();
-  // fDDLTracker->GetBlkHeaderArray()->Clear("C");
-
-  //Read Header Size of DDL,Block,DSP and BusPatch
-
-  Int_t kDDLHeaderSize      = sizeof(AliRawDataHeader)/4;;
-  Int_t kBlockHeaderSize    = fBlockHeader->GetHeaderLength();
-  Int_t kDspHeaderSize      = fDspHeader->GetHeaderLength();
-  Int_t kBusPatchHeaderSize = fBusStruct->GetHeaderLength();
 
-  Int_t totalDDLSize, totalBlockSize, totalDspSize , totalBusPatchSize, dataSize; 
+  fPayload->ResetDDL();
 
 
-  Int_t iBusPerDSP[5]; // number of bus patches per DSP
-  Int_t iDspMax;       // number max of DSP per block
-
-  // minimum data size (only header's)
-  Int_t blankDDLSize;
-  Int_t blankBlockSize;
-  Int_t blankDspSize; 
-
   if (fDDL >= 20) {
     fDDL = 0;
     return kFALSE;
   }
   AliDebug(3, Form("DDL Number %d\n", fDDL ));
 
-  // getting DSP info
-  fBusPatchManager->GetDspInfo(fDDL/2, iDspMax, iBusPerDSP);
-
-  // Each DDL is made with 2 Blocks each of which consists of 5 DSP's at most 
-  // and each of DSP has at most 5 buspatches.
-  // This information is used to calculate the size of headers (DDL,Block and DSP) 
-  // which has no interesting data.
-  blankDDLSize   = kDDLHeaderSize + 2*kBlockHeaderSize + 2*iDspMax*kDspHeaderSize;
-  blankBlockSize = kBlockHeaderSize + iDspMax*kDspHeaderSize;
-
-  for (Int_t i = 0; i < iDspMax; i++) {
-    blankDDLSize   += 2*iBusPerDSP[i]*kBusPatchHeaderSize;
-    blankBlockSize +=   iBusPerDSP[i]*kBusPatchHeaderSize;
-  }
   fRawReader->Reset();
   fRawReader->Select(0X9, fDDL, fDDL);  //Select the DDL file to be read  
 
   fRawReader->ReadHeader();
 
-  // 4 is multiplied to convert 2 bytes words
-  totalDDLSize = (fRawReader->GetDataSize() + sizeof(AliRawDataHeader))/4; 
-
-  // Compare the DDL header with an empty DDL header size to read the file
-  if(totalDDLSize > blankDDLSize) {      
-
-    Int_t totalDataWord = fRawReader->GetDataSize(); // in bytes
-    UInt_t *buffer = new UInt_t[totalDataWord/4];
-  
-    fRawReader->ReadNext((UChar_t*)buffer, totalDataWord); 
-    // indexes
-    Int_t indexDsp;
-    Int_t indexBusPatch;
-    Int_t index = 0;
-
-    for(Int_t iBlock = 0; iBlock < 2 ;iBlock++){  // loop over 2 blocks
-
-      // copy within padding words
-      memcpy(fBlockHeader->GetHeader(),&buffer[index], (kBlockHeaderSize+1)*4);
-
-      totalBlockSize = fBlockHeader->GetTotalLength();
-
-      fDDLTracker->AddBlkHeader(*fBlockHeader);
-
-      if (fBlockHeader->GetPadding() == 0xDEAD) // skipping padding word
-       index++;
-
-      if(totalBlockSize > blankBlockSize) {        // compare block header
-       index += kBlockHeaderSize;
-
-       for(Int_t iDsp = 0; iDsp < iDspMax ;iDsp++){   //DSP loop
-
-         if (iDsp > fMaxDsp) break;
-         
-         memcpy(fDspHeader->GetHeader(),&buffer[index], kDspHeaderSize*4);
+  Int_t totalDataWord  = fRawReader->GetDataSize(); // in bytes
 
-         totalDspSize = fDspHeader->GetTotalLength();
-         indexDsp = index;
+  UInt_t *buffer = new UInt_t[totalDataWord/4];
 
-         blankDspSize =  kDspHeaderSize + iBusPerDSP[iDsp]*kBusPatchHeaderSize; // no data just header
+  fRawReader->ReadNext((UChar_t*)buffer, totalDataWord); 
 
-         fDDLTracker->AddDspHeader(*fDspHeader, iBlock);
-
-         if(totalDspSize > blankDspSize) {       // Compare DSP Header
-           index += kDspHeaderSize;
-               
-           for(Int_t iBusPatch = 0; iBusPatch < iBusPerDSP[iDsp]; iBusPatch++) {  
-
-             if (iBusPatch > fMaxBus) break; 
-
-             //copy buffer into header structure
-             memcpy(fBusStruct->GetBusPatchHeader(), &buffer[index], kBusPatchHeaderSize*4);
-
-             totalBusPatchSize = fBusStruct->GetTotalLength();
-             indexBusPatch     = index;
-               
-             //Check Buspatch header, not empty events
-             if(totalBusPatchSize > kBusPatchHeaderSize) {    
-
-               index   += kBusPatchHeaderSize;
-               dataSize = fBusStruct->GetLength();
-               Int_t bufSize = fBusStruct->GetBufSize();
-
-               if(dataSize > 0) { // check data present
-                 if (dataSize > bufSize) fBusStruct->SetAlloc(dataSize);
-
-                 //copy buffer into data structure
-                 memcpy(fBusStruct->GetData(), &buffer[index], dataSize*4);
-                 fBusStruct->SetBlockId(iBlock); // could be usefull in future applications ?
-                 fBusStruct->SetDspId(iDsp);
-                 fDDLTracker->AddBusPatch(*fBusStruct, iBlock, iDsp);
-
-               } // dataSize test
-
-             } // testing buspatch
-
-             index = indexBusPatch + totalBusPatchSize;
-
-           }  //buspatch loop
-               
-         }  // dsp test
-
-         index = indexDsp + totalDspSize;
-             
-       }  // dsp loop
-
-      }   //block test
-
-      index = totalBlockSize;
-
-    }  //block loop
-
-    delete[] buffer;
-  } //loop checking the header size of DDL
+  fPayload->Decode(buffer, fDDL);
 
+  delete[] buffer;
 
   fDDL++;
 
   return kTRUE;
 }
-//______________________________________________________
-void AliMUONRawStreamTracker::ResetDDL()
-{
-  // reseting TClonesArray
-  // after each DDL
-  //
-  fDDLTracker->GetBlkHeaderArray()->Clear("C");
-}
 
 //______________________________________________________
 void AliMUONRawStreamTracker::SetMaxDDL(Int_t ddl) 
@@ -368,12 +218,12 @@ void AliMUONRawStreamTracker::SetMaxDDL(Int_t ddl)
   // set DDL number
   if (ddl > 20) ddl = 20;
   fMaxDDL = ddl;
+
 }
 
 //______________________________________________________
 void AliMUONRawStreamTracker::SetMaxBlock(Int_t blk) 
 {
   // set regional card number
-  if (blk > 2) blk = 2;
-  fMaxBlock = blk;
+  fPayload->SetMaxBlock(blk);
 }
index 9ee5432..88434e1 100644 (file)
 
 #include <TObject.h>
 #include <TClonesArray.h>
-#include "AliMpBusPatch.h"
+#include "AliMUONPayloadTracker.h"
 
 class AliRawReader;
 class AliMUONDDLTracker;
-class AliMUONBusStruct;
-class AliMUONDspHeader;
-class AliMUONBlockHeader;
+
 
 class AliMUONRawStreamTracker: public TObject {
   public :
@@ -37,26 +35,24 @@ class AliMUONRawStreamTracker: public TObject {
 
     virtual Bool_t   Next();
     virtual Bool_t   NextDDL();
-    virtual void     ResetDDL();
 
     Int_t GetMaxDDL()   const {return fMaxDDL;}
-    Int_t GetMaxBlock() const {return fMaxBlock;}
-    Int_t GetMaxDsp()   const {return fMaxDsp;}
-    Int_t GetMaxBus()   const {return fMaxBus;}
+    Int_t GetMaxBlock() const {return  fPayload->GetMaxBlock();}
+    Int_t GetMaxDsp()   const {return  fPayload->GetMaxDsp();}
+    Int_t GetMaxBus()   const {return  fPayload->GetMaxBus();}
 
     // check input before assigment
     void SetMaxDDL(Int_t ddl);
     void SetMaxBlock(Int_t blk);
 
     // does not check, done via BusPatchManager
-    void SetMaxDsp(Int_t dsp) {fMaxDsp = dsp;}
-    void SetMaxBus(Int_t bus) {fMaxBus = bus;}
+    void SetMaxDsp(Int_t dsp) {fPayload->SetMaxDsp(dsp);}
+    void SetMaxBus(Int_t bus) {fPayload->SetMaxBus(bus);}
 
 
     void SetReader(AliRawReader* rawReader) {fRawReader = rawReader;}
 
-    AliMUONBusStruct*       GetBusPatchInfo() const {return fBusStructPtr;}
-    AliMUONDDLTracker*      GetDDLTracker()   const {return fDDLTracker;}
+    AliMUONDDLTracker*      GetDDLTracker()   const {return fPayload->GetDDLTracker();}
     Int_t                   GetDDL()          const {return fDDL - 1;}
 
   protected :
@@ -70,22 +66,11 @@ class AliMUONRawStreamTracker: public TObject {
 
     Bool_t fNextDDL;      ///< flag for next DDL to be read
 
-    Int_t fMaxDDL;        ///< maximum number of DDL in DATE file
-    Int_t fMaxBlock;      ///< maximum number of block per DDL in DATE file
-    Int_t fMaxDsp;        ///< maximum number of Dsp per block in DATE file
-    Int_t fMaxBus;        ///< maximum number of Buspatch per Dsp in DATE file
-
-
-    AliMpBusPatch* fBusPatchManager; //!< buspatch versus DE's & DDL
-
-    AliMUONDDLTracker*      fDDLTracker;      //!< pointer for buspatch structure
-    AliMUONBusStruct*       fBusStruct;       //!< pointer for local structure
-    AliMUONBlockHeader*     fBlockHeader;     //!< pointer for block structure 
-    AliMUONDspHeader*       fDspHeader;       //!< pointer for dsp structure 
+    Int_t  fMaxDDL;       ///< maximum number of DDL in DATE file
 
-    AliMUONBusStruct*       fBusStructPtr;    //!< pointer for local structure
+    AliMUONPayloadTracker* fPayload; ///< pointer to payload decoder
 
-    ClassDef(AliMUONRawStreamTracker, 1)    // base class for reading MUON raw digits
+    ClassDef(AliMUONRawStreamTracker, 2)    // base class for reading MUON raw digits
 };
 
 #endif
index 0d9e959..db675c6 100644 (file)
@@ -22,6 +22,7 @@
 /// The Next method goes to the next digit. If there are no digits left
 /// it returns kFALSE(under develpment).
 /// It can loop also over DDL and store the decoded rawdata in TClonesArrays
+/// in payload class.
 /// 
 /// First version implement for Trigger
 ///
 #include "AliRawDataHeader.h"
 #include "AliLog.h"
 
-#include "AliMUONDarcHeader.h"
-#include "AliMUONRegHeader.h"
-#include "AliMUONLocalStruct.h"
-#include "AliMUONDDLTrigger.h"
 
 ClassImp(AliMUONRawStreamTrigger)
 
@@ -46,18 +43,14 @@ AliMUONRawStreamTrigger::AliMUONRawStreamTrigger()
     fDDL(0),
     fSubEntries(0),
     fNextDDL(kTRUE),
-    fMaxDDL(2),
-    fMaxReg(8),
-    fMaxLoc(16)
+    fMaxDDL(2)
 {
   //
   // create an object to read MUON raw digits
   // Default ctor for monitoring purposes
   //
 
-  fDDLTrigger  = new AliMUONDDLTrigger();
-  fRegHeader   = new AliMUONRegHeader();  
-  fLocalStruct = new AliMUONLocalStruct();
+  fPayload = new AliMUONPayloadTrigger();
 
 }
 
@@ -67,21 +60,17 @@ AliMUONRawStreamTrigger::AliMUONRawStreamTrigger(AliRawReader* rawReader)
     fDDL(0),
     fSubEntries(0),
     fNextDDL(kTRUE),
-    fMaxDDL(2),
-    fMaxReg(8),
-    fMaxLoc(16)
+    fMaxDDL(2)
+
 {
   //
   // ctor with AliRawReader as argument
   // for reconstruction purpose
   //
 
-  fRawReader   = rawReader;
+  fRawReader = rawReader;
+  fPayload   = new AliMUONPayloadTrigger();
 
-  fDDLTrigger  = new AliMUONDDLTrigger();
-  fRegHeader   = new AliMUONRegHeader();
-  fLocalStruct = new AliMUONLocalStruct();
-  
 }
 
 //_________________________________________________________________
@@ -111,9 +100,7 @@ AliMUONRawStreamTrigger::~AliMUONRawStreamTrigger()
   //
   // clean up
   //
-  delete fDDLTrigger;
-  delete fLocalStruct;
-  delete fRegHeader;
+  delete fPayload;
 }
 
 //_____________________________________________________________
@@ -149,24 +136,15 @@ Bool_t AliMUONRawStreamTrigger::NextDDL()
   // store buspatch info into Array
   // store only non-empty structures (buspatch info with datalength !=0)
 
- // reading DDL for trigger
-
-  AliMUONDarcHeader* darcHeader = fDDLTrigger->GetDarcHeader();
-
-  Int_t kDarcHeaderSize = darcHeader->GetHeaderLength(); 
-  Int_t kRegHeaderSize  = fRegHeader->GetHeaderLength() ;
-  Bool_t scalerEvent    = kFALSE;
-
   // reset TClones
-  darcHeader->GetRegHeaderArray()->Delete();
-  //darcHeader->GetRegHeaderArray()->Clear("C");
+  fPayload->ResetDDL();
+
 
   // loop over the two ddl's
   if (fDDL >= fMaxDDL) {
     fDDL = 0;
     return kFALSE;
   }
-
   fRawReader->Reset();
   fRawReader->Select(0XA,fDDL,fDDL);  //Select the DDL file to be read  
 
@@ -177,93 +155,15 @@ Bool_t AliMUONRawStreamTrigger::NextDDL()
 
   fRawReader->ReadNext((UChar_t*)buffer, totalDataWord); 
   
-  Int_t index = 0;
-  darcHeader->SetWord(buffer[index++]);
-
-  if(darcHeader->GetEventType() == 2) {
-    scalerEvent = kTRUE;
-  } else
-    scalerEvent = kFALSE;
-
-  if(scalerEvent) {
-    // 6 DARC scaler words
-    memcpy(darcHeader->GetDarcScalers(), &buffer[index], darcHeader->GetDarcScalerLength()*4);
-    index += darcHeader->GetDarcScalerLength();
-  }
-
-  if (buffer[index++] != darcHeader->GetEndOfDarc())
-    AliWarning(Form("Wrong end of Darc word %x instead of %x\n",buffer[index-1], darcHeader->GetEndOfDarc())); 
-
-  // 4 words of global board input + Global board output
-  memcpy(darcHeader->GetGlobalInput(), &buffer[index], (kDarcHeaderSize-1)*4); 
-  index += kDarcHeaderSize- 1; // kind tricky cos scaler info in-between Darc header
+  fPayload->Decode(buffer);
 
-  if(scalerEvent) {
-    // 10 Global scaler words
-    memcpy(darcHeader->GetGlobalScalers(), &buffer[index], darcHeader->GetGlobalScalerLength()*4);
-    index += darcHeader->GetGlobalScalerLength();
-  }
+  fDDL++;
 
-  if (buffer[index++] != darcHeader->GetEndOfGlobal())
-    AliWarning(Form("Wrong end of Global word %d instead of %d\n",buffer[index-1], darcHeader->GetEndOfGlobal()));
-    
-  // 8 regional boards
-  for (Int_t iReg = 0; iReg < fMaxReg; iReg++) {           //loop over regeonal card
-
-    memcpy(fRegHeader->GetHeader(), &buffer[index], kRegHeaderSize*4);
-    index += kRegHeaderSize;
-
-    fDDLTrigger->AddRegHeader(*fRegHeader);
-    // 11 regional scaler word
-    if(scalerEvent) {
-      memcpy(fRegHeader->GetScalers(), &buffer[index], fRegHeader->GetScalerLength()*4);
-      index += fRegHeader->GetScalerLength();
-    }
-
-    if (buffer[index++] != fRegHeader->GetEndOfReg())
-      AliWarning(Form("Wrong end of Reg word %x instead of %x\n",buffer[index-1], fRegHeader->GetEndOfReg()));
-
-    // 16 local cards per regional board
-    for (Int_t iLoc = 0; iLoc < fMaxLoc; iLoc++) {         //loop over local card
-         
-      Int_t dataSize = fLocalStruct->GetLength();;
-
-      // 5 word trigger information
-      memcpy(fLocalStruct->GetData(), &buffer[index], dataSize*4); 
-      index += dataSize;        
-
-      // 45 regional scaler word
-      if(scalerEvent) {
-       memcpy(fLocalStruct->GetScalers(), &buffer[index], fLocalStruct->GetScalerLength()*4);
-       index += fLocalStruct->GetScalerLength();
-      }
-
-      if (buffer[index++] != fLocalStruct->GetEndOfLocal())
-       AliWarning(Form("Wrong end of local word %x instead of %x\n",buffer[index-1], fLocalStruct->GetEndOfLocal()));
-         
-      fDDLTrigger->AddLocStruct(*fLocalStruct, iReg);
-
-    } // local card loop
-       
-  } // regional card loop
-      
   delete [] buffer;
 
-
-  fDDL++;
-
   return kTRUE;
 }
 
-//______________________________________________________
-void AliMUONRawStreamTrigger::ResetDDL()
-{
-  // reseting TClonesArray
-  // after each DDL
-  //
-  AliMUONDarcHeader* darcHeader = fDDLTrigger->GetDarcHeader();
-  darcHeader->GetRegHeaderArray()->Clear("C");
-}
 
 //______________________________________________________
 void AliMUONRawStreamTrigger::SetMaxDDL(Int_t ddl) 
@@ -277,14 +177,12 @@ void AliMUONRawStreamTrigger::SetMaxDDL(Int_t ddl)
 void AliMUONRawStreamTrigger::SetMaxReg(Int_t reg) 
 {
   // set regional card number
-  if (reg > 8) reg = 8;
-  fMaxReg = reg;
+  fPayload->SetMaxReg(reg);
 }
 
 //______________________________________________________
 void AliMUONRawStreamTrigger::SetMaxLoc(Int_t loc) 
 {
   // set local card number
-  if (loc > 16) loc = 16;
-  fMaxLoc = loc;
+  fPayload->SetMaxLoc(loc);
 }
index 30c307f..78b0ed5 100644 (file)
 
 #include <TObject.h>
 #include <TClonesArray.h>
+#include "AliMUONPayloadTrigger.h"
 
 class AliRawReader;
 class AliMUONDDLTrigger;
-class AliMUONLocalStruct;
-class AliMUONRegHeader;
+
 
 class AliMUONRawStreamTrigger: public TObject {
   public :
@@ -35,11 +35,10 @@ class AliMUONRawStreamTrigger: public TObject {
 
     virtual Bool_t   Next();
     virtual Bool_t   NextDDL();
-    virtual void     ResetDDL();
 
     Int_t GetMaxDDL() const {return fMaxDDL;}
-    Int_t GetMaxReg() const {return fMaxReg;}
-    Int_t GetMaxLoc() const {return fMaxLoc;}
+    Int_t GetMaxReg() const {return fPayload->GetMaxReg();}
+    Int_t GetMaxLoc() const {return fPayload->GetMaxLoc();}
 
 
     void SetMaxDDL(Int_t ddl);
@@ -49,27 +48,20 @@ class AliMUONRawStreamTrigger: public TObject {
 
     void SetReader(AliRawReader* rawReader) {fRawReader = rawReader;}
 
-    AliMUONLocalStruct*     GetLocalInfo()  const {return fLocalStruct;}
-    AliMUONDDLTrigger*      GetDDLTrigger() const {return fDDLTrigger;}
-    Int_t                   GetDDL()        const {return fDDL - 1;}
+    AliMUONDDLTrigger* GetDDLTrigger() const {return fPayload->GetDDLTrigger();}
+    Int_t              GetDDL()        const {return fDDL - 1;}
 
   protected :
 
-    AliRawReader*    fRawReader;    ///< object for reading the raw data
+    AliRawReader*    fRawReader;     ///< object for reading the raw data
+    AliMUONPayloadTrigger* fPayload; ///< pointer to payload decoder
+
     Int_t  fDDL;          ///< number of DDL
     Int_t  fSubEntries;   ///< entries of buspatch structure
     Bool_t fNextDDL;      ///< flag for next DDL to be read
+    Int_t  fMaxDDL;       ///< maximum number of DDL in DATE file
 
-    Int_t fMaxDDL;        ///< maximum number of DDL in DATE file
-    Int_t fMaxReg;        ///< maximum number of regional cards in DATE file
-    Int_t fMaxLoc;        ///< maximum number of local cards in DATE file
-
-    AliMUONDDLTrigger*       fDDLTrigger;   //!< pointer for DDL structure
-    AliMUONRegHeader*        fRegHeader;    //!< pointer for regional structure
-    AliMUONLocalStruct*      fLocalStruct;  //!< pointer to local structure
-
-    ClassDef(AliMUONRawStreamTrigger, 2)    // base class for reading MUON trigger rawdata
+    ClassDef(AliMUONRawStreamTrigger, 3)    // base class for reading MUON trigger rawdata
 };
 
 #endif
index c82e9cb..b9b3a98 100644 (file)
@@ -8,11 +8,13 @@
 #pragma link C++ class AliMUONDarcHeader+;
 #pragma link C++ class AliMUONRegHeader+;
 #pragma link C++ class AliMUONLocalStruct+;
+#pragma link C++ class AliMUONPayloadTrigger+;
 #pragma link C++ class AliMUONRawStreamTrigger+;
 #pragma link C++ class AliMUONDDLTracker+;
 #pragma link C++ class AliMUONDspHeader+;
 #pragma link C++ class AliMUONBlockHeader+;
 #pragma link C++ class AliMUONBusStruct+;
+#pragma link C++ class AliMUONPayloadTracker+;
 #pragma link C++ class AliMUONRawStreamTracker+;
 
 #endif
index 89c935c..4f68978 100644 (file)
@@ -4,11 +4,13 @@ SRCS:= AliMUONDDLTrigger.cxx \
        AliMUONDarcHeader.cxx \
        AliMUONRegHeader.cxx \
        AliMUONLocalStruct.cxx \
+       AliMUONPayloadTrigger.cxx \
        AliMUONRawStreamTrigger.cxx \
        AliMUONDDLTracker.cxx \
        AliMUONBlockHeader.cxx \
        AliMUONDspHeader.cxx \
        AliMUONBusStruct.cxx \
+       AliMUONPayloadTracker.cxx \
        AliMUONRawStreamTracker.cxx