Always delete TObjArrays created by TString::Tokenize (Ruben)
[u/mrichter/AliRoot.git] / MUON / AliMUONRawStreamTracker.h
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                               */
5
6 /*$Id$*/
7
8 /// \ingroup raw
9 /// \class AliMUONRawStreamTracker
10 /// \brief Class for reading MUON raw digits
11 ///
12 //  Author: Christian Finck
13
14 #include <TObject.h>
15 #include "AliMUONPayloadTracker.h"
16 #include "AliMUONVRawStreamTracker.h"
17
18 class AliRawReader;
19 class AliMUONDDLTracker;
20 class AliMUONDspHeader;
21 class AliMUONBusStruct;
22 class AliMUONBlockHeader;
23
24 class AliMUONRawStreamTracker: public AliMUONVRawStreamTracker {
25   public :
26     AliMUONRawStreamTracker();
27     AliMUONRawStreamTracker(TRootIOCtor* dummy);
28     AliMUONRawStreamTracker(AliRawReader* rawReader);
29     virtual ~AliMUONRawStreamTracker();
30
31     /// Initialize iterator
32     void First();
33
34     /// Returns current DDL object during iteration
35     AliMUONDDLTracker* CurrentDDL() const { return fCurrentDDL; }
36     
37     /// Returns current BlockHeader object during iteration
38     AliMUONBlockHeader* CurrentBlockHeader() const { return fCurrentBlockHeader; }
39     
40     /// Returns current DspHeader object during iteration
41     AliMUONDspHeader* CurrentDspHeader() const { return fCurrentDspHeader; }
42     
43     /// Returns current BusStruct object during iteration
44     AliMUONBusStruct* CurrentBusStruct() const { return fCurrentBusStruct; }
45     
46     /// Advance one step in the iteration. Returns false if finished.
47     virtual Bool_t Next(Int_t& busPatchId, 
48                         UShort_t& manuId, UChar_t& manuChannel, 
49                         UShort_t& adc);
50     
51     virtual Bool_t NextDDL();
52
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();}
59
60     // check input before assigment
61     void SetMaxBlock(Int_t blk);
62
63     /// Set maximum number of Dsp per block in DATE file
64     /// does not check, done via BusPatchManager
65     void SetMaxDsp(Int_t dsp) {fPayload->SetMaxDsp(dsp);}
66     /// Set maximum number of Buspatch per Dsp in DATE file
67     /// does not check, done via BusPatchManager
68     void SetMaxBus(Int_t bus) {fPayload->SetMaxBus(bus);}
69
70     /// Return pointer for DDL
71     AliMUONDDLTracker*      GetDDLTracker() const {return fPayload->GetDDLTracker();}
72
73     /// Return number of DDL
74     Int_t GetDDL() const {return fDDL - 1;}
75                 
76                 /// Return current DDL index
77     Int_t GetCurentDDL() const {return fCurrentDDLIndex;}
78
79     /// Return pointer for payload
80     AliMUONPayloadTracker*  GetPayLoad()    const {return fPayload;}
81
82     /// Whether the iteration is finished or not
83     Bool_t IsDone() const;
84
85     /// add error message into error logger
86     void AddErrorMessage();
87     
88     /// Disable Warnings
89     void DisableWarnings() {fPayload->DisableWarnings();}
90     
91     /// check error/Warning presence
92     Bool_t IsErrorMessage() const;
93
94     /// error numbers
95     enum rawStreamTrackerError {
96       kGlitchErr      = 1, ///< glitch error 
97       kPaddingWordErr = 2, ///< padding word error
98       kParityErr      = 3  ///< parity error
99     };
100
101   private :
102     /// Not implemented
103     AliMUONRawStreamTracker(const AliMUONRawStreamTracker& stream);
104     /// Not implemented
105     AliMUONRawStreamTracker& operator = (const AliMUONRawStreamTracker& stream);
106
107     Bool_t GetNextDDL();
108     Bool_t GetNextBlockHeader();
109     Bool_t GetNextDspHeader();
110     Bool_t GetNextBusStruct();
111
112  
113  private:
114
115     AliMUONPayloadTracker* fPayload;         ///< pointer to payload decoder
116     AliMUONDDLTracker* fCurrentDDL;          //!< for iterator: current ddl ptr
117     Int_t fCurrentDDLIndex;                  //!< for iterator: current ddl index
118     AliMUONBlockHeader* fCurrentBlockHeader; //!< for iterator: current block ptr
119     Int_t fCurrentBlockHeaderIndex;          //!< for iterator: current block index    
120     AliMUONDspHeader* fCurrentDspHeader;     //!< for iterator: current dsp ptr
121     Int_t fCurrentDspHeaderIndex;            //!< for iterator: current dsp index    
122     AliMUONBusStruct* fCurrentBusStruct;     //!< for iterator: current bus ptr
123     Int_t fCurrentBusStructIndex;            //!< for iterator: current bus index    
124     Int_t fCurrentDataIndex;                 //!< for iterator: current data index
125     Int_t  fDDL;                             //!< number of DDL
126
127     ClassDef(AliMUONRawStreamTracker, 4)    // base class for reading MUON raw digits
128 };
129
130 #endif