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

/*$Id$*/

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

#include <TObject.h>
#include "AliMUONPayloadTrigger.h"
#include "AliMUONVRawStreamTrigger.h"
class TArrayS;

class AliRawReader;
class AliMUONDDLTrigger;
class AliMUONDarcHeader;
class AliMUONRegkHeader;
class AliMUONLocalStruct;

class AliMUONRawStreamTrigger: public AliMUONVRawStreamTrigger {
  public :
    AliMUONRawStreamTrigger();
    AliMUONRawStreamTrigger(TRootIOCtor* dummy);
    AliMUONRawStreamTrigger(AliRawReader* rawReader);
    virtual ~AliMUONRawStreamTrigger();

    /// Initialize iterator
    void First();

   /// Returns current DDL object during iteration
    AliMUONDDLTrigger* CurrentDDL() const { return fCurrentDDL; }
    
    /// Returns current DarcHeader object during iteration
    AliMUONDarcHeader* CurrentDarcHeader() const { return fCurrentDarcHeader; }
    
    /// Returns current RegHeader object during iteration
    AliMUONRegHeader* CurrentRegHeader() const { return fCurrentRegHeader; }
    
    /// Returns current LocalStruct object during iteration
    AliMUONLocalStruct* CurrentLocalStruct() const { return fCurrentLocalStruct; }
    
    /// Advance one step in the iteration. Returns false if finished.
    virtual Bool_t Next(UChar_t& id,   UChar_t& dec,     Bool_t& trigY, 
			UChar_t& yPos, UChar_t& sXDev,   UChar_t& xDev,
			UChar_t& xPos, Bool_t& triggerY, Bool_t& triggerX,
			TArrayS& xPattern, TArrayS& yPattern);


    virtual Bool_t   NextDDL();

    /// Return maximum number of DDLs
    Int_t GetMaxDDL() const {return fgkMaxDDL;}
    /// Return maximum number of regional cards in DATE file
    Int_t GetMaxReg() const {return fPayload->GetMaxReg();}
    /// Return maximum number of local cards in DATE file
    Int_t GetMaxLoc() const {return fPayload->GetMaxLoc();}

    //void SetMaxReg(Int_t reg);
    void SetMaxLoc(Int_t loc);

    /// Return pointer for DDL structure
    AliMUONDDLTrigger* GetDDLTrigger() const {return fPayload->GetDDLTrigger();}

    /// Return number of DDL
    Int_t GetDDL() const {return fDDL - 1;}

    /// Return pointer for payload
    AliMUONPayloadTrigger*  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();}
    
    /// error numbers
    enum rawStreamTriggerError {
      kDarcEoWErr   = 6, ///< end of Darc word error 
      kGlobalEoWErr = 7, ///< end of Global word error
      kRegEoWErr    = 8, ///< end of Regional word error 
      kLocalEoWErr  = 9  ///< end of local word error

    };

  private :
    /// Not implemented
    AliMUONRawStreamTrigger(const AliMUONRawStreamTrigger& stream);
    /// Not implemented
    AliMUONRawStreamTrigger& operator = (const AliMUONRawStreamTrigger& stream);

    Bool_t GetNextDDL();
    Bool_t GetNextRegHeader();
    Bool_t GetNextLocalStruct();

 private:

    AliMUONPayloadTrigger* fPayload; ///< pointer to payload decoder
    AliMUONDDLTrigger* fCurrentDDL;          //!< for iterator: current ddl ptr
    Int_t fCurrentDDLIndex;                  //!< for iterator: current ddl index
    AliMUONDarcHeader* fCurrentDarcHeader;   //!< for iterator: current darc ptr
    AliMUONRegHeader* fCurrentRegHeader;     //!< for iterator: current reg ptr
    Int_t fCurrentRegHeaderIndex;            //!< for iterator: current reg index    
    AliMUONLocalStruct* fCurrentLocalStruct; //!< for iterator: current local ptr
    Int_t fCurrentLocalStructIndex;          //!< for iterator: current local index    
    Bool_t fLocalStructRead;                 //!< flag for read out local structure
    Int_t fDDL;                              //!< number of DDL    


    Bool_t fNextDDL;      ///< flag for next DDL to be read

    static const Int_t  fgkMaxDDL;       ///< maximum number of DDLs

    ClassDef(AliMUONRawStreamTrigger, 4)    // base class for reading MUON trigger rawdata
};

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