1 #ifndef ALIMUONRAWSTREAMTRACKER_H
2 #define ALIMUONRAWSTREAMTRACKER_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
9 /// \class AliMUONRawStreamTracker
10 /// \brief Class for reading MUON raw digits
12 // Author: Christian Finck
15 #include "AliMUONPayloadTracker.h"
18 class AliMUONDDLTracker;
19 class AliMUONDspHeader;
20 class AliMUONBusStruct;
21 class AliMUONBlockHeader;
23 class AliMUONRawStreamTracker: public TObject {
25 AliMUONRawStreamTracker();
26 AliMUONRawStreamTracker(AliRawReader* rawReader);
27 virtual ~AliMUONRawStreamTracker();
29 /// Initialize iterator
32 /// Returns current DDL object during iteration
33 AliMUONDDLTracker* CurrentDDL() const { return fCurrentDDL; }
35 /// Returns current BlockHeader object during iteration
36 AliMUONBlockHeader* CurrentBlockHeader() const { return fCurrentBlockHeader; }
38 /// Returns current DspHeader object during iteration
39 AliMUONDspHeader* CurrentDspHeader() const { return fCurrentDspHeader; }
41 /// Returns current BusStruct object during iteration
42 AliMUONBusStruct* CurrentBusStruct() const { return fCurrentBusStruct; }
44 /// Advance one step in the iteration. Returns false if finished.
45 virtual Bool_t Next(Int_t& busPatchId,
46 UShort_t& manuId, UChar_t& manuChannel,
49 virtual Bool_t NextDDL();
51 /// Return maximum number of DDL in DATE file
52 Int_t GetMaxDDL() const {return fMaxDDL;}
53 /// Return maximum number of block per DDL in DATE file
54 Int_t GetMaxBlock() const {return fPayload->GetMaxBlock();}
55 /// Return maximum number of Dsp per block in DATE file
56 Int_t GetMaxDsp() const {return fPayload->GetMaxDsp();}
57 /// Return maximum number of Buspatch per Dsp in DATE file
58 Int_t GetMaxBus() const {return fPayload->GetMaxBus();}
60 // check input before assigment
61 void SetMaxDDL(Int_t ddl);
62 void SetMaxBlock(Int_t blk);
64 /// Set maximum number of Dsp per block in DATE file
65 /// does not check, done via BusPatchManager
66 void SetMaxDsp(Int_t dsp) {fPayload->SetMaxDsp(dsp);}
67 /// Set maximum number of Buspatch per Dsp in DATE file
68 /// does not check, done via BusPatchManager
69 void SetMaxBus(Int_t bus) {fPayload->SetMaxBus(bus);}
71 /// Set object for reading the raw data
72 void SetReader(AliRawReader* rawReader) {fRawReader = rawReader;}
74 /// Return pointer for DDL
75 AliMUONDDLTracker* GetDDLTracker() const {return fPayload->GetDDLTracker();}
77 /// Return pointer for payload
78 AliMUONPayloadTracker* GetPayLoad() const {return fPayload;}
80 /// Return number of DDL
81 Int_t GetDDL() const {return fDDL - 1;}
83 /// Whether the iteration is finished or not
84 Bool_t IsDone() const;
87 /// add error message into error logger
88 void AddErrorMessage();
90 /// Enable error info logger
91 void EnabbleErrorLogger() {fEnableErrorLogger = kTRUE;}
94 enum rawStreamTrackerError {
95 kGlitchErr = 1, ///< glitch error
96 kPaddingWordErr = 2, ///< padding word error
97 kParityErr = 3 ///< parity error
102 AliMUONRawStreamTracker(const AliMUONRawStreamTracker& stream);
104 AliMUONRawStreamTracker& operator = (const AliMUONRawStreamTracker& stream);
107 Bool_t GetNextBlockHeader();
108 Bool_t GetNextDspHeader();
109 Bool_t GetNextBusStruct();
113 AliRawReader* fRawReader; ///< object for reading the raw data
114 Int_t fDDL; ///< number of DDL
115 Int_t fMaxDDL; ///< maximum number of DDL in DATE file
116 AliMUONPayloadTracker* fPayload; ///< pointer to payload decoder
118 AliMUONDDLTracker* fCurrentDDL; //!< for iterator: current ddl ptr
119 Int_t fCurrentDDLIndex; //!< for iterator: current ddl index
120 AliMUONBlockHeader* fCurrentBlockHeader; //!< for iterator: current block ptr
121 Int_t fCurrentBlockHeaderIndex; //!< for iterator: current block index
122 AliMUONDspHeader* fCurrentDspHeader; //!< for iterator: current dsp ptr
123 Int_t fCurrentDspHeaderIndex; //!< for iterator: current dsp index
124 AliMUONBusStruct* fCurrentBusStruct; //!< for iterator: current bus ptr
125 Int_t fCurrentBusStructIndex; //!< for iterator: current bus index
126 Int_t fCurrentDataIndex; //!< for iterator: current data index
127 Bool_t fEnableErrorLogger; //!< flag to enable the error info logger
129 ClassDef(AliMUONRawStreamTracker, 3) // base class for reading MUON raw digits