]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONRawStreamTracker.h
AliMUONBlockHeader, AliMUONRawWriter:
[u/mrichter/AliRoot.git] / MUON / AliMUONRawStreamTracker.h
index 9ee543204d2edbbd3ae4504a6f180ec92e6a0206..59c94c615f8bbce188db6be38a19966dc31d048d 100644 (file)
 /// \class AliMUONRawStreamTracker
 /// \brief Class for reading MUON raw digits
 ///
-/// \author Christian Finck
-///
-///////////////////////////////////////////////////////////////////////////////
-///
-/// This class provides access to MUON digits in raw data.
-///
-///////////////////////////////////////////////////////////////////////////////
+//  Author: Christian Finck
 
 #include <TObject.h>
-#include <TClonesArray.h>
-#include "AliMpBusPatch.h"
+#include "AliMUONPayloadTracker.h"
+#include "AliMUONVRawStreamTracker.h"
 
 class AliRawReader;
 class AliMUONDDLTracker;
-class AliMUONBusStruct;
 class AliMUONDspHeader;
+class AliMUONBusStruct;
 class AliMUONBlockHeader;
 
-class AliMUONRawStreamTracker: public TObject {
+class AliMUONRawStreamTracker: public AliMUONVRawStreamTracker {
   public :
     AliMUONRawStreamTracker();
     AliMUONRawStreamTracker(AliRawReader* rawReader);
-    AliMUONRawStreamTracker(const AliMUONRawStreamTracker& stream);
-    AliMUONRawStreamTracker& operator = (const AliMUONRawStreamTracker& stream);
     virtual ~AliMUONRawStreamTracker();
 
-    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;}
+    /// Initialize iterator
+    void First();
+
+    /// Returns current DDL object during iteration
+    AliMUONDDLTracker* CurrentDDL() const { return fCurrentDDL; }
+    
+    /// Returns current BlockHeader object during iteration
+    AliMUONBlockHeader* CurrentBlockHeader() const { return fCurrentBlockHeader; }
+    
+    /// Returns current DspHeader object during iteration
+    AliMUONDspHeader* CurrentDspHeader() const { return fCurrentDspHeader; }
+    
+    /// Returns current BusStruct object during iteration
+    AliMUONBusStruct* CurrentBusStruct() const { return fCurrentBusStruct; }
+    
+    /// Advance one step in the iteration. Returns false if finished.
+    virtual Bool_t Next(Int_t& busPatchId, 
+                        UShort_t& manuId, UChar_t& manuChannel, 
+                        UShort_t& adc);
+    
+    virtual Bool_t NextDDL();
+
+    /// Return maximum number of DDLs
+    Int_t GetMaxDDL() const {return fgkMaxDDL;}
+    /// Return maximum number of block per DDL in DATE file
+    Int_t GetMaxBlock() const {return  fPayload->GetMaxBlock();}
+    /// Return maximum number of Dsp per block in DATE file
+    Int_t GetMaxDsp()   const {return  fPayload->GetMaxDsp();}
+    /// Return maximum number of Buspatch per Dsp in DATE file
+    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 SetReader(AliRawReader* rawReader) {fRawReader = rawReader;}
-
-    AliMUONBusStruct*       GetBusPatchInfo() const {return fBusStructPtr;}
-    AliMUONDDLTracker*      GetDDLTracker()   const {return fDDLTracker;}
-    Int_t                   GetDDL()          const {return fDDL - 1;}
+    /// Set maximum number of Dsp per block in DATE file
+    /// does not check, done via BusPatchManager
+    void SetMaxDsp(Int_t dsp) {fPayload->SetMaxDsp(dsp);}
+    /// Set maximum number of Buspatch per Dsp in DATE file
+    /// does not check, done via BusPatchManager
+    void SetMaxBus(Int_t bus) {fPayload->SetMaxBus(bus);}
+
+    /// Return pointer for DDL
+    AliMUONDDLTracker*      GetDDLTracker() const {return fPayload->GetDDLTracker();}
+
+    /// Return number of DDL
+    Int_t GetDDL() const {return fDDL - 1;}
+               
+               /// Return current DDL index
+    Int_t GetCurentDDL() const {return fCurrentDDLIndex;}
+
+    /// Return pointer for payload
+    AliMUONPayloadTracker*  GetPayLoad()    const {return fPayload;}
+
+    /// Whether the iteration is finished or not
+    Bool_t IsDone() const;
+
+    /// add error message into error logger
+    void AddErrorMessage();
+    
+    /// Disable Warnings
+    void DisableWarnings() {fPayload->DisableWarnings();}
+    
+    /// check error/Warning presence
+    Bool_t IsErrorMessage() const;
+
+    /// error numbers
+    enum rawStreamTrackerError {
+      kGlitchErr      = 1, ///< glitch error 
+      kPaddingWordErr = 2, ///< padding word error
+      kParityErr      = 3  ///< parity error
+    };
+
+  private :
+    /// Not implemented
+    AliMUONRawStreamTracker(const AliMUONRawStreamTracker& stream);
+    /// Not implemented
+    AliMUONRawStreamTracker& operator = (const AliMUONRawStreamTracker& stream);
 
-  protected :
+    Bool_t GetNextDDL();
+    Bool_t GetNextBlockHeader();
+    Bool_t GetNextDspHeader();
+    Bool_t GetNextBusStruct();
 
-    AliRawReader*    fRawReader;    ///< object for reading the raw data
  
-    Int_t  fDDL;          ///< number of DDL
-    Int_t  fBusPatchId;   ///< entry of buspatch structure
-    Int_t  fDspId;        ///< entry of Dsp header
-    Int_t  fBlkId;        ///< entry of Block header
-
-    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 
-
-    AliMUONBusStruct*       fBusStructPtr;    //!< pointer for local structure
-
-    ClassDef(AliMUONRawStreamTracker, 1)    // base class for reading MUON raw digits
+ private:
+
+    AliMUONPayloadTracker* fPayload;         ///< pointer to payload decoder
+    AliMUONDDLTracker* fCurrentDDL;          //!< for iterator: current ddl ptr
+    Int_t fCurrentDDLIndex;                  //!< for iterator: current ddl index
+    AliMUONBlockHeader* fCurrentBlockHeader; //!< for iterator: current block ptr
+    Int_t fCurrentBlockHeaderIndex;          //!< for iterator: current block index    
+    AliMUONDspHeader* fCurrentDspHeader;     //!< for iterator: current dsp ptr
+    Int_t fCurrentDspHeaderIndex;            //!< for iterator: current dsp index    
+    AliMUONBusStruct* fCurrentBusStruct;     //!< for iterator: current bus ptr
+    Int_t fCurrentBusStructIndex;            //!< for iterator: current bus index    
+    Int_t fCurrentDataIndex;                 //!< for iterator: current data index
+    Int_t  fDDL;                             //!< number of DDL
+    static const Int_t  fgkMaxDDL;           //!< maximum number of DDLs
+
+    ClassDef(AliMUONRawStreamTracker, 4)    // base class for reading MUON raw digits
 };
 
 #endif