bc55288302a74a5e7def0df66afe41290ac6b7a7
[u/mrichter/AliRoot.git] / MONITOR / AliMonitorProcess.h
1 #ifndef ALIMONITORPROCESS_H
2 #define ALIMONITORPROCESS_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 class TFile;
9 class TFolder;
10 class TGrid;
11 class TServerSocket;
12 class TSocket;
13 class TTimer;
14 class TTree;
15
16 #include <TObjArray.h>
17 #include <TObject.h>
18 #include <TString.h>
19 #include <TSystem.h>
20
21 class AliESD;
22 class AliITSgeom;
23 class AliRawReader;
24 class AliRunLoader;
25 class AliTPCParam;
26 #ifdef ALI_HLT
27 class AliLevel3;
28 class AliL3Hough;
29 #endif
30
31
32 class AliMonitorProcess : public TObject {
33 public:
34   AliMonitorProcess(const char* alienHost,
35                     const char* alienDir,
36                     const char* fileNameGalice = "galice.root");
37   AliMonitorProcess(const AliMonitorProcess& process);
38   AliMonitorProcess& operator = (const AliMonitorProcess& process);
39   virtual ~AliMonitorProcess();
40
41   static const char* GetRevision();
42
43   void             Run();
44   void             Stop();
45   void             Reset();
46
47   void             ProcessFile(const char* fileName);
48
49   UInt_t           GetRunNumber() const {return fRunNumber;};
50   UInt_t           GetEventPeriodNumber() const;
51   UInt_t           GetEventOrbitNumber() const;
52   UInt_t           GetEventBunchNumber() const;
53
54   enum EStatus     {kStopped, kWaiting, kReading, kRecTPC, kRecITS, kRecV0s,
55                     kRecHLT, kFilling, kUpdating, kWriting, kResetting, 
56                     kConnecting, kBroadcasting};
57   EStatus          GetStatus() const 
58     {gSystem->ProcessEvents(); return fStatus;};
59   Bool_t           WillStop() const {return fStopping;};
60   Bool_t           IsStopped() const {return (fStatus == kStopped);};
61
62   Int_t            GetNumberOfEvents() const {return fNEvents;};
63   Int_t            GetNumberOfClients() const 
64     {return fSockets.GetEntriesFast();};
65   TObjArray*       GetListOfClients() {return &fSockets;};
66   Int_t            GetNEventsMin() const {return fNEventsMin;};
67   void             SetNEventsMin(Int_t nEventsMin) {fNEventsMin = nEventsMin;};
68   void             SetWriteHistoList(Bool_t writeHistoList = kTRUE) 
69                                          {fWriteHistoList = writeHistoList;};
70
71   static Int_t     GetPort() {return fgkPort;};
72   
73 private:
74   Bool_t           CheckForNewFile();
75   Bool_t           ProcessFile();
76   Int_t            GetNumberOfEvents(const char* fileName) const;
77   Bool_t           ReconstructTPC(AliRawReader* rawReader, AliESD* esd);
78   Bool_t           ReconstructITS(AliRawReader* rawReader, AliESD* esd);
79   Bool_t           ReconstructV0s(AliESD* esd);
80 #ifdef ALI_HLT
81   void             CreateHLT(const char* fileName);
82   void             CreateHLTHough(const char* fileName);
83 #endif
84   Bool_t           ReconstructHLT(Int_t iEvent);
85   Bool_t           ReconstructHLTHough(Int_t iEvent);
86
87   Bool_t           WriteHistos();
88   void             StartNewRun();
89
90   void             CheckForConnections();
91   void             BroadcastHistos(TSocket* toSocket = NULL);
92   void             SetStatus(EStatus status);
93
94   static const Int_t fgkPort;          // port number for client connections
95
96   TGrid*           fGrid;               // pointer to AliEn
97   TString          fAlienDir;           // name of alien directory
98   AliRunLoader*    fRunLoader;          // the current run loader
99   AliTPCParam*     fTPCParam;           // TPC parameters
100   AliITSgeom*      fITSgeom;            // ITS parameters
101   TString          fLogicalFileName;    // logical AliEn file name
102   TString          fFileName;           // physical file name
103 #ifdef ALI_HLT
104   AliLevel3*       fHLT;                // the HLT tracker
105   AliL3Hough*      fHLTHough;           // the HLT hough transformer
106 #endif
107
108   UInt_t           fRunNumber;          // current run number
109   UInt_t           fSubRunNumber;       // current part (=resets per run)
110   UInt_t           fEventNumber[2];     // current event number
111   Int_t            fNEvents;            // total number of monitored events
112   Int_t            fNEventsMin;         // threshold for writing
113   Bool_t           fWriteHistoList;     // write event histos or not
114
115   TFolder*         fTopFolder;          // folder with histos
116   TObjArray        fMonitors;           // array of monitor objects
117   TFile*           fFile;               // file with tree
118   TTree*           fTree;               // monitor tree
119
120   TServerSocket*   fServerSocket;       // socket for client connections
121   TObjArray        fSockets;            // array of client sockets
122   TSocket*         fDisplaySocket;      // socket for an event display
123
124   EStatus          fStatus;             // current status
125   Bool_t           fStopping;           // stop of process requested or not
126
127   class AliMonitorInterruptHandler : public TSignalHandler {
128   public:
129     AliMonitorInterruptHandler(AliMonitorProcess* process);
130     AliMonitorInterruptHandler(const AliMonitorInterruptHandler& handler);
131     AliMonitorInterruptHandler& operator = 
132       (const AliMonitorInterruptHandler& handler);
133     virtual ~AliMonitorInterruptHandler() {};
134     virtual Bool_t Notify();
135   private:
136     AliMonitorProcess* fProcess;       // process to notify
137   };
138
139   AliMonitorInterruptHandler* fInterruptHandler;  // interrupt handler
140
141   ClassDef(AliMonitorProcess, 0)   // class for performing the monitoring
142 };
143  
144
145 #endif
146
147
148
149
150
151
152
153
154