ROOT logo
#ifndef ALIMUONRAWSTREAMTRACKER_H
#define ALIMUONRAWSTREAMTRACKER_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/*$Id$*/

/// \ingroup raw
/// \class AliMUONRawStreamTracker
/// \brief Class for reading MUON raw digits
///
//  Author: Christian Finck

#include <TObject.h>
#include "AliMUONPayloadTracker.h"
#include "AliMUONVRawStreamTracker.h"

class AliRawReader;
class AliMUONDDLTracker;
class AliMUONDspHeader;
class AliMUONBusStruct;
class AliMUONBlockHeader;

class AliMUONRawStreamTracker: public AliMUONVRawStreamTracker {
  public :
    AliMUONRawStreamTracker();
    AliMUONRawStreamTracker(TRootIOCtor* dummy);
    AliMUONRawStreamTracker(AliRawReader* rawReader);
    virtual ~AliMUONRawStreamTracker();

    /// 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 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 SetMaxBlock(Int_t blk);

    /// 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);

    Bool_t GetNextDDL();
    Bool_t GetNextBlockHeader();
    Bool_t GetNextDspHeader();
    Bool_t GetNextBusStruct();

 
 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

    ClassDef(AliMUONRawStreamTracker, 4)    // base class for reading MUON raw digits
};

#endif
 AliMUONRawStreamTracker.h:1
 AliMUONRawStreamTracker.h:2
 AliMUONRawStreamTracker.h:3
 AliMUONRawStreamTracker.h:4
 AliMUONRawStreamTracker.h:5
 AliMUONRawStreamTracker.h:6
 AliMUONRawStreamTracker.h:7
 AliMUONRawStreamTracker.h:8
 AliMUONRawStreamTracker.h:9
 AliMUONRawStreamTracker.h:10
 AliMUONRawStreamTracker.h:11
 AliMUONRawStreamTracker.h:12
 AliMUONRawStreamTracker.h:13
 AliMUONRawStreamTracker.h:14
 AliMUONRawStreamTracker.h:15
 AliMUONRawStreamTracker.h:16
 AliMUONRawStreamTracker.h:17
 AliMUONRawStreamTracker.h:18
 AliMUONRawStreamTracker.h:19
 AliMUONRawStreamTracker.h:20
 AliMUONRawStreamTracker.h:21
 AliMUONRawStreamTracker.h:22
 AliMUONRawStreamTracker.h:23
 AliMUONRawStreamTracker.h:24
 AliMUONRawStreamTracker.h:25
 AliMUONRawStreamTracker.h:26
 AliMUONRawStreamTracker.h:27
 AliMUONRawStreamTracker.h:28
 AliMUONRawStreamTracker.h:29
 AliMUONRawStreamTracker.h:30
 AliMUONRawStreamTracker.h:31
 AliMUONRawStreamTracker.h:32
 AliMUONRawStreamTracker.h:33
 AliMUONRawStreamTracker.h:34
 AliMUONRawStreamTracker.h:35
 AliMUONRawStreamTracker.h:36
 AliMUONRawStreamTracker.h:37
 AliMUONRawStreamTracker.h:38
 AliMUONRawStreamTracker.h:39
 AliMUONRawStreamTracker.h:40
 AliMUONRawStreamTracker.h:41
 AliMUONRawStreamTracker.h:42
 AliMUONRawStreamTracker.h:43
 AliMUONRawStreamTracker.h:44
 AliMUONRawStreamTracker.h:45
 AliMUONRawStreamTracker.h:46
 AliMUONRawStreamTracker.h:47
 AliMUONRawStreamTracker.h:48
 AliMUONRawStreamTracker.h:49
 AliMUONRawStreamTracker.h:50
 AliMUONRawStreamTracker.h:51
 AliMUONRawStreamTracker.h:52
 AliMUONRawStreamTracker.h:53
 AliMUONRawStreamTracker.h:54
 AliMUONRawStreamTracker.h:55
 AliMUONRawStreamTracker.h:56
 AliMUONRawStreamTracker.h:57
 AliMUONRawStreamTracker.h:58
 AliMUONRawStreamTracker.h:59
 AliMUONRawStreamTracker.h:60
 AliMUONRawStreamTracker.h:61
 AliMUONRawStreamTracker.h:62
 AliMUONRawStreamTracker.h:63
 AliMUONRawStreamTracker.h:64
 AliMUONRawStreamTracker.h:65
 AliMUONRawStreamTracker.h:66
 AliMUONRawStreamTracker.h:67
 AliMUONRawStreamTracker.h:68
 AliMUONRawStreamTracker.h:69
 AliMUONRawStreamTracker.h:70
 AliMUONRawStreamTracker.h:71
 AliMUONRawStreamTracker.h:72
 AliMUONRawStreamTracker.h:73
 AliMUONRawStreamTracker.h:74
 AliMUONRawStreamTracker.h:75
 AliMUONRawStreamTracker.h:76
 AliMUONRawStreamTracker.h:77
 AliMUONRawStreamTracker.h:78
 AliMUONRawStreamTracker.h:79
 AliMUONRawStreamTracker.h:80
 AliMUONRawStreamTracker.h:81
 AliMUONRawStreamTracker.h:82
 AliMUONRawStreamTracker.h:83
 AliMUONRawStreamTracker.h:84
 AliMUONRawStreamTracker.h:85
 AliMUONRawStreamTracker.h:86
 AliMUONRawStreamTracker.h:87
 AliMUONRawStreamTracker.h:88
 AliMUONRawStreamTracker.h:89
 AliMUONRawStreamTracker.h:90
 AliMUONRawStreamTracker.h:91
 AliMUONRawStreamTracker.h:92
 AliMUONRawStreamTracker.h:93
 AliMUONRawStreamTracker.h:94
 AliMUONRawStreamTracker.h:95
 AliMUONRawStreamTracker.h:96
 AliMUONRawStreamTracker.h:97
 AliMUONRawStreamTracker.h:98
 AliMUONRawStreamTracker.h:99
 AliMUONRawStreamTracker.h:100
 AliMUONRawStreamTracker.h:101
 AliMUONRawStreamTracker.h:102
 AliMUONRawStreamTracker.h:103
 AliMUONRawStreamTracker.h:104
 AliMUONRawStreamTracker.h:105
 AliMUONRawStreamTracker.h:106
 AliMUONRawStreamTracker.h:107
 AliMUONRawStreamTracker.h:108
 AliMUONRawStreamTracker.h:109
 AliMUONRawStreamTracker.h:110
 AliMUONRawStreamTracker.h:111
 AliMUONRawStreamTracker.h:112
 AliMUONRawStreamTracker.h:113
 AliMUONRawStreamTracker.h:114
 AliMUONRawStreamTracker.h:115
 AliMUONRawStreamTracker.h:116
 AliMUONRawStreamTracker.h:117
 AliMUONRawStreamTracker.h:118
 AliMUONRawStreamTracker.h:119
 AliMUONRawStreamTracker.h:120
 AliMUONRawStreamTracker.h:121
 AliMUONRawStreamTracker.h:122
 AliMUONRawStreamTracker.h:123
 AliMUONRawStreamTracker.h:124
 AliMUONRawStreamTracker.h:125
 AliMUONRawStreamTracker.h:126
 AliMUONRawStreamTracker.h:127
 AliMUONRawStreamTracker.h:128
 AliMUONRawStreamTracker.h:129
 AliMUONRawStreamTracker.h:130