Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[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(TRootIOCtor* dummy);
29     AliMUONRawStreamTrigger(AliRawReader* rawReader);
30     virtual ~AliMUONRawStreamTrigger();
31
32     /// Initialize iterator
33     void First();
34
35    /// Returns current DDL object during iteration
36     AliMUONDDLTrigger* CurrentDDL() const { return fCurrentDDL; }
37     
38     /// Returns current DarcHeader object during iteration
39     AliMUONDarcHeader* CurrentDarcHeader() const { return fCurrentDarcHeader; }
40     
41     /// Returns current RegHeader object during iteration
42     AliMUONRegHeader* CurrentRegHeader() const { return fCurrentRegHeader; }
43     
44     /// Returns current LocalStruct object during iteration
45     AliMUONLocalStruct* CurrentLocalStruct() const { return fCurrentLocalStruct; }
46     
47     /// Advance one step in the iteration. Returns false if finished.
48     virtual Bool_t Next(UChar_t& id,   UChar_t& dec,     Bool_t& trigY, 
49                         UChar_t& yPos, UChar_t& sXDev,   UChar_t& xDev,
50                         UChar_t& xPos, Bool_t& triggerY, Bool_t& triggerX,
51                         TArrayS& xPattern, TArrayS& yPattern);
52
53
54     virtual Bool_t   NextDDL();
55
56     /// Return maximum number of DDLs
57     Int_t GetMaxDDL() const {return fgkMaxDDL;}
58     /// Return maximum number of regional cards in DATE file
59     Int_t GetMaxReg() const {return fPayload->GetMaxReg();}
60     /// Return maximum number of local cards in DATE file
61     Int_t GetMaxLoc() const {return fPayload->GetMaxLoc();}
62
63     //void SetMaxReg(Int_t reg);
64     void SetMaxLoc(Int_t loc);
65
66     /// Return pointer for DDL structure
67     AliMUONDDLTrigger* GetDDLTrigger() const {return fPayload->GetDDLTrigger();}
68
69     /// Return number of DDL
70     Int_t GetDDL() const {return fDDL - 1;}
71
72     /// Return pointer for payload
73     AliMUONPayloadTrigger*  GetPayLoad()    const {return fPayload;}
74
75     /// Whether the iteration is finished or not
76     Bool_t IsDone() const;
77
78     /// add error message into error logger
79     void AddErrorMessage();
80
81     /// Disable Warnings
82     void DisableWarnings() {fPayload->DisableWarnings();}
83     
84     /// error numbers
85     enum rawStreamTriggerError {
86       kDarcEoWErr   = 6, ///< end of Darc word error 
87       kGlobalEoWErr = 7, ///< end of Global word error
88       kRegEoWErr    = 8, ///< end of Regional word error 
89       kLocalEoWErr  = 9  ///< end of local word error
90
91     };
92
93   private :
94     /// Not implemented
95     AliMUONRawStreamTrigger(const AliMUONRawStreamTrigger& stream);
96     /// Not implemented
97     AliMUONRawStreamTrigger& operator = (const AliMUONRawStreamTrigger& stream);
98
99     Bool_t GetNextDDL();
100     Bool_t GetNextRegHeader();
101     Bool_t GetNextLocalStruct();
102
103  private:
104
105     AliMUONPayloadTrigger* fPayload; ///< pointer to payload decoder
106     AliMUONDDLTrigger* fCurrentDDL;          //!< for iterator: current ddl ptr
107     Int_t fCurrentDDLIndex;                  //!< for iterator: current ddl index
108     AliMUONDarcHeader* fCurrentDarcHeader;   //!< for iterator: current darc ptr
109     AliMUONRegHeader* fCurrentRegHeader;     //!< for iterator: current reg ptr
110     Int_t fCurrentRegHeaderIndex;            //!< for iterator: current reg index    
111     AliMUONLocalStruct* fCurrentLocalStruct; //!< for iterator: current local ptr
112     Int_t fCurrentLocalStructIndex;          //!< for iterator: current local index    
113     Bool_t fLocalStructRead;                 //!< flag for read out local structure
114     Int_t fDDL;                              //!< number of DDL    
115
116
117     Bool_t fNextDDL;      ///< flag for next DDL to be read
118
119     static const Int_t  fgkMaxDDL;       ///< maximum number of DDLs
120
121     ClassDef(AliMUONRawStreamTrigger, 4)    // base class for reading MUON trigger rawdata
122 };
123
124 #endif