bug fixed
[u/mrichter/AliRoot.git] / MUON / AliMUONRawStreamTrigger.h
1 #ifndef ALIMUONRAWSTREAMTRIGGER_H
2 #define ALIMUONRAWSTREAMTRIGGER_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /*$Id$*/
7
8 /// \ingroup raw
9 /// \class AliMUONRawStreamTrigger
10 /// \brief Class for reading MUON raw digits
11 ///
12 //  Author: Christian Finck
13
14 #include <TObject.h>
15 #include "AliMUONPayloadTrigger.h"
16 #include "AliMUONVRawStreamTrigger.h"
17 class TArrayS;
18
19 class AliRawReader;
20 class AliMUONDDLTrigger;
21 class AliMUONDarcHeader;
22 class AliMUONRegkHeader;
23 class AliMUONLocalStruct;
24
25 class AliMUONRawStreamTrigger: public AliMUONVRawStreamTrigger {
26   public :
27     AliMUONRawStreamTrigger();
28     AliMUONRawStreamTrigger(AliRawReader* rawReader);
29     virtual ~AliMUONRawStreamTrigger();
30
31     /// Initialize iterator
32     void First();
33
34    /// Returns current DDL object during iteration
35     AliMUONDDLTrigger* CurrentDDL() const { return fCurrentDDL; }
36     
37     /// Returns current DarcHeader object during iteration
38     AliMUONDarcHeader* CurrentDarcHeader() const { return fCurrentDarcHeader; }
39     
40     /// Returns current RegHeader object during iteration
41     AliMUONRegHeader* CurrentRegHeader() const { return fCurrentRegHeader; }
42     
43     /// Returns current LocalStruct object during iteration
44     AliMUONLocalStruct* CurrentLocalStruct() const { return fCurrentLocalStruct; }
45     
46     /// Advance one step in the iteration. Returns false if finished.
47     virtual Bool_t Next(UChar_t& id,   UChar_t& dec,     Bool_t& trigY, 
48                         UChar_t& yPos, UChar_t& sXDev,   UChar_t& xDev,
49                         UChar_t& xPos, Bool_t& triggerY, Bool_t& triggerX,
50                         TArrayS& xPattern, TArrayS& yPattern);
51
52
53     virtual Bool_t   NextDDL();
54
55     /// Return maximum number of DDLs
56     Int_t GetMaxDDL() const {return fgkMaxDDL;}
57     /// Return maximum number of regional cards in DATE file
58     Int_t GetMaxReg() const {return fPayload->GetMaxReg();}
59     /// Return maximum number of local cards in DATE file
60     Int_t GetMaxLoc() const {return fPayload->GetMaxLoc();}
61
62     //void SetMaxReg(Int_t reg);
63     void SetMaxLoc(Int_t loc);
64
65     /// Return pointer for DDL structure
66     AliMUONDDLTrigger* GetDDLTrigger() const {return fPayload->GetDDLTrigger();}
67
68     /// Return number of DDL
69     Int_t GetDDL() const {return fDDL - 1;}
70
71     /// Return pointer for payload
72     AliMUONPayloadTrigger*  GetPayLoad()    const {return fPayload;}
73
74     /// Whether the iteration is finished or not
75     Bool_t IsDone() const;
76
77     /// add error message into error logger
78     void AddErrorMessage();
79
80     /// Disable Warnings
81     void DisableWarnings() {fPayload->DisableWarnings();}
82     
83     /// error numbers
84     enum rawStreamTriggerError {
85       kDarcEoWErr   = 6, ///< end of Darc word error 
86       kGlobalEoWErr = 7, ///< end of Global word error
87       kRegEoWErr    = 8, ///< end of Regional word error 
88       kLocalEoWErr  = 9  ///< end of local word error
89
90     };
91
92   private :
93     /// Not implemented
94     AliMUONRawStreamTrigger(const AliMUONRawStreamTrigger& stream);
95     /// Not implemented
96     AliMUONRawStreamTrigger& operator = (const AliMUONRawStreamTrigger& stream);
97
98     Bool_t GetNextDDL();
99     Bool_t GetNextRegHeader();
100     Bool_t GetNextLocalStruct();
101
102  private:
103
104     AliMUONPayloadTrigger* fPayload; ///< pointer to payload decoder
105     AliMUONDDLTrigger* fCurrentDDL;          //!< for iterator: current ddl ptr
106     Int_t fCurrentDDLIndex;                  //!< for iterator: current ddl index
107     AliMUONDarcHeader* fCurrentDarcHeader;   //!< for iterator: current darc ptr
108     AliMUONRegHeader* fCurrentRegHeader;     //!< for iterator: current reg ptr
109     Int_t fCurrentRegHeaderIndex;            //!< for iterator: current reg index    
110     AliMUONLocalStruct* fCurrentLocalStruct; //!< for iterator: current local ptr
111     Int_t fCurrentLocalStructIndex;          //!< for iterator: current local index    
112     Bool_t fLocalStructRead;                 //!< flag for read out local structure
113     Int_t fDDL;                              //!< number of DDL    
114
115
116     Bool_t fNextDDL;      ///< flag for next DDL to be read
117
118     static const Int_t  fgkMaxDDL;       ///< maximum number of DDLs
119
120     ClassDef(AliMUONRawStreamTrigger, 4)    // base class for reading MUON trigger rawdata
121 };
122
123 #endif