Adding some further mother volumes to speed-up the overlap checking and particle...
[u/mrichter/AliRoot.git] / ITS / AliITSRawStreamSPDErrorLog.h
1 #ifndef ALIITSRAWSTREAMSPDERRORLOG_H
2 #define ALIITSRAWSTREAMSPDERRORLOG_H
3
4 /* $Id$ */
5
6 ///////////////////////////////////////////////////////////////////////
7 // Author: Henrik Tydesjo                                            //
8 // For easier handling of error messages from AliITSRawStreamSPD.    //
9 // The purpose of this class is to make possible the switch to the   //
10 // AliRoot raw data parsing routines in the onlinte monitoring       //
11 // programs, like SPD-MOOD, and still keep all the old functionality.//
12 ///////////////////////////////////////////////////////////////////////
13
14 #include <TH1F.h>
15 #include <TH2F.h>
16 #include <TGraph.h>
17 #include <TGText.h>
18
19 class AliITSRawStreamSPDErrorLog : public TObject {
20
21  public:
22   AliITSRawStreamSPDErrorLog();
23   AliITSRawStreamSPDErrorLog(const AliITSRawStreamSPDErrorLog& logger);
24   AliITSRawStreamSPDErrorLog& operator=(const AliITSRawStreamSPDErrorLog& logger);
25   virtual ~AliITSRawStreamSPDErrorLog();
26
27   enum    {kNrErrorCodes = 21};
28   enum    {kTotal = 0};
29
30   void    Reset();
31   void    ProcessError(UInt_t errorCode, UInt_t eq, Int_t bytesRead, Int_t headersRead, const Char_t *errMess);
32   void    AddMessage(const Char_t *errMess);
33
34   void    ResetEvent();
35   void    ProcessEvent(UInt_t eventNum);
36   void    AddErrorMessagesFromCurrentEvent(UInt_t eventNum);
37   void    SummarizeEvent(UInt_t eventNum);
38
39   UInt_t  GetNrErrors(UInt_t errorCode, UInt_t eq);
40   UInt_t  GetNrErrorsAllEq(UInt_t errorCode);
41   UInt_t  GetNrErrorsTotal(UInt_t errorCode, UInt_t eq);
42   UInt_t  GetNrErrorsTotalAllEq(UInt_t errorCode);
43
44   void    SetByteOffset(UInt_t eq, Int_t size);
45   void    SuppressErrorMessages(UInt_t errorCode, Bool_t suppr = kTRUE);
46   void    SuppressErrorEq(UInt_t eq, Bool_t suppr = kTRUE);
47
48   static  UInt_t GetNrErrorCodes(){return kNrErrorCodes;}
49
50   TGraph* GetConsErrEvent(UInt_t errorCode, UInt_t eq);
51   TGraph* GetConsErrPos(UInt_t errorCode, UInt_t eq);
52   TH1F*   GetConsErrType(UInt_t eq);
53   TH1F*   GetConsErrFraction(UInt_t eq);        // NB!!! Take care of deleting returned object later
54   TH1F*   GetConsErrFractionUnScaled(UInt_t eq);
55   TGText* GetText() {return fText;}
56   TGText* GetTextThisEvent(UInt_t eq) {if (eq<20) return fTextTmp[eq]; else return NULL;}
57   TGText* GetTextGeneralThisEvent() {return fTextTmpGeneral;}
58
59   UInt_t  GetEventErrPosCounter(UInt_t errorCode, UInt_t eq);
60   UInt_t  GetEventErrPos(UInt_t index, UInt_t errorCode, UInt_t eq);
61
62  private:
63   Int_t   fNErrors[kNrErrorCodes][20];          // number of errors for this event, for each code and eq
64   Int_t   fNErrorsTotal[kNrErrorCodes][20];     // number of errors for all events, for each code and eq
65   UInt_t  fNEvents[20];                         // number of events used, for each eq
66   UInt_t  fErrEventCounter[kNrErrorCodes][20];  // event counter used when filling graph
67   UInt_t  fErrPosCounter[kNrErrorCodes][20];    // event counter used when filling graph
68   UInt_t  fErrPosTMPCounter[kNrErrorCodes][20]; // event counter used when filling graph
69   Int_t   fByteOffset[20];                      // offset: how many bytes in the equipment header, for each eq
70   Bool_t  fSuppressMess[kNrErrorCodes];         // do we suppress error messages for a specific error code?
71   Bool_t  fSuppressEq[20];                      // do we suppress error messages for a specific eq?
72
73   TGraph  *fConsErrEvent[kNrErrorCodes][20];    // graphs to display number of errors found in each event
74   TGraph  *fConsErrPos[kNrErrorCodes][20];      // graphs to display number of bytes read for each error and event
75   TGraph  *fConsErrPosTMP[kNrErrorCodes][20];   // temporary, to fill tgraph above for event
76   TH1F    *fConsErrType[20];                    // histogram of how many errors for each error code
77   TH1F    *fConsErrFraction[20];                // histogram of rate of events with errors for each error code
78
79   TGText  *fText;                               // text buffer for all events analyzed so far
80   TGText  *fTextTmp[20];                        // text buffer for this event (defined error codes)
81   TGText  *fTextTmpGeneral;                     // text buffer for this event (general errors)
82
83   void    InitHistograms();
84   void    DeleteHistograms() const;
85
86   ClassDef(AliITSRawStreamSPDErrorLog, 2);
87 };
88
89 #endif
90