]>
Commit | Line | Data |
---|---|---|
48265b32 | 1 | |
2 | #ifndef ALITPCMONITOR_H | |
3 | #define ALITPCMONITOR_H | |
4 | ||
5 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
6 | * See cxx source for full Copyright notice */ | |
7 | ||
8 | /* $Id$ */ | |
9 | ||
10 | ||
11 | //////////////////////////////////////////////////////////////////////// | |
12 | // | |
13 | // AliTPCMonitor class | |
14 | // | |
15 | // Main class for TPC Monitor | |
16 | // Monitor can handle rootified data, files and online streams in DATE format. | |
17 | // The monitor GUI is started by the macro TPCMonitor.C | |
18 | // | |
19 | // Author: Stefan Kniege, IKF, Frankfurt | |
20 | // | |
21 | // | |
22 | ///////////////////////////////////////////////////////////////////////// | |
23 | ||
24 | ||
25 | #include <stdio.h> | |
26 | #include <fstream> | |
27 | #include <stdlib.h> | |
28 | #include <iostream> | |
29 | #include <istream> | |
30 | #include <ostream> | |
31 | #include "TStyle.h" | |
32 | #include "TSystem.h" | |
33 | #include "TH2F.h" | |
34 | #include "TLegend.h" | |
35 | #include "TF1.h" | |
36 | #include "TMath.h" | |
37 | #include "TFormula.h" | |
38 | #include <string> | |
39 | #include "TROOT.h" | |
40 | #include "TCanvas.h" | |
41 | #include "TApplication.h" | |
42 | #include "TGaxis.h" | |
43 | #include "TPaveText.h" | |
44 | #include "TGButtonGroup.h" | |
45 | #include "TGButton.h" | |
46 | #include "TGTextBuffer.h" | |
47 | #include "TGTextEntry.h" | |
48 | #include "TGLabel.h" | |
49 | #include "TH3S.h" | |
50 | #include "AliTPCMonitorMappingHandler.h" | |
51 | #include "AliTPCMonitorDateFile.h" | |
52 | #include "AliTPCMonitorDateMonitor.h" | |
53 | #include "AliTPCMonitorDateFormat.h" | |
54 | #include "AliTPCMonitorAltro.h" | |
55 | #include "AliTPCMonitorFFT.h" | |
56 | #include "AliTPCMonitorConfig.h" | |
57 | #include "AliSignalProcesor.h" | |
58 | #include "AliRawReaderRoot.h" | |
59 | #include "AliRawReader.h" | |
60 | #include "TGMsgBox.h" | |
61 | #include "TNamed.h" | |
62 | #include "TObject.h" | |
63 | #include "TDirectory.h" | |
64 | #include "AliLog.h" | |
65 | #include "RQ_OBJECT.h" | |
66 | ||
67 | using namespace std; | |
68 | ||
69 | class AliTPCMonitor : public AliTPCMonitorConfig { | |
70 | ||
71 | public: | |
72 | ||
73 | AliTPCMonitor(char* name, char* title); | |
74 | virtual ~AliTPCMonitor(); | |
75 | ||
76 | // stats for size of arrays and histograms ///////////////////////////////////////////////// | |
77 | Int_t** fPad; // array to store channel adc in time | |
78 | Float_t* fPadMapHw; // array to store mapping of hardware address and channel number | |
79 | Int_t** fPadMapRCU; // store multiple information for hardware address for debugging purpose (read out errors occur) | |
80 | ||
81 | ||
82 | // histograms to be used //////////////////////////////////////////////////////////////// | |
83 | TH2F* fHistIROC; // histo for max adc IROC | |
84 | TH2F* fHistOROC; // histo for max adc OROC | |
85 | TH2S* fHistIROCIndex; // histo for channel number in each bin IROC | |
86 | TH2S* fHistOROCIndex; // histo for channel number in each bin OROC | |
87 | TH2F* fHistIROCTime; // histo for peaking time in each bin IROC | |
88 | TH2F* fHistOROCTime; // histo for peaking time in each bin OROC | |
89 | TH2F* fHistIROCClone; // clone histo for max adc IROC (backup when selecting component) | |
90 | TH2F* fHistOROCClone; // clone histo for max adc OROC (backup when selecting component) | |
91 | TH2F* fHistIROCRMS; // histo for RMS IROC | |
92 | TH2F* fHistOROCRMS; // histo for RMS OROC | |
93 | TH2F* fHistIROCBASE; // histo for baseline IROC | |
94 | TH2F* fHistOROCBASE; // histo for baseline OROC | |
95 | TH2F* fHistIROCSUM; // histo for adc sum IROC | |
96 | TH2F* fHistOROCSUM; // histo for adc sum OROC | |
97 | ||
98 | TH2F* fHistChannelTime; // histo for adc(channel,time) | |
99 | TH1F* fHistAddrMapIndex; // histo for channel(hardware address) | |
100 | TH1F* fHistAddrMaxAdc; // histo for max-adc(hardware address) | |
101 | TH1F* fHistAddrBaseMean; // histo for baseline(hardware address) | |
102 | TH1F* fHistAddrMaxAdcX; // histo for max-adc-xposition(hardware address) | |
103 | TH1F* fHistAddrAdcSum; // histo for adc-sum(hardware address) | |
104 | TH1F* fHistAddrBaseRms; // histo for baselinr-rms(hardware address) | |
105 | ||
106 | TH1F* fHistDistrSumIROC; // distribution of adc sum for all channels IROC | |
107 | TH1F* fHistDistrMaxIROC; // distribution of adc max for all channels OROC | |
108 | TH1F* fHistDistrSumOROC; // distribution of adc sum for all channels OROC | |
109 | TH1F* fHistDistrMaxOROC; // distribution of adc max for all channels OROC | |
110 | ||
111 | TH2F* fHistDistrBase2dIROC; // distribution of baseline vs rms for all channels IROC | |
112 | TH2F* fHistDistrBase2dOROC; // distribution of baseline vs rms for all channels OROC | |
113 | TH1D* fHistDistrBaseRmsIROC; // projection of fHistDistrBase2dIROC on Rms | |
114 | TH1D* fHistDistrBaseMeanIROC; // projection of fHistDistrBase2dIROC on Mean | |
115 | TH1D* fHistDistrBaseRmsOROC; // projection of fHistDistrBase2dOROC on Rms | |
116 | TH1D* fHistDistrBaseMeanOROC; // projection of fHistDistrBase2dOROC on Mean | |
117 | ||
118 | TH2S* fHistGlobalMaxA; // global histogramm for max adc of all sectors Side A | |
119 | TH2S* fHistGlobalMaxC; // global histogramm for max adc of all sectors Side C | |
120 | ||
121 | TObjArray* fHistList; // array to store all histogram | |
122 | ||
123 | ||
124 | // row and pad settings | |
125 | Int_t kNRowsIroc; // number of rows in IROC | |
126 | Int_t kNRowsOroc; // number of rows in OROC | |
127 | ||
128 | Int_t kNPadsIroc; // number of pads in IROC | |
129 | Int_t kNPadsOroc; // number of pads in OROC | |
130 | ||
131 | Int_t kNPadMinIroc; // min for pad (y-axis) representation in 2D histogram IROC | |
132 | Int_t kNPadMinOroc; // min for pad (y-axis) representation in 2D histogram OROC | |
133 | Int_t kNPadMaxIroc; // max for pad (y-axis) representation in 2D histogram IROC | |
134 | Int_t kNPadMaxOroc; // max for pad (y-axis) representation in 2D histogram IROC | |
135 | ||
136 | Int_t fVerb; // verbose flag | |
137 | ||
138 | Int_t fLastEv; // flag for last event | |
139 | ||
140 | Int_t fEventNumber; // current event number (ID) | |
141 | Int_t fEventNumberOld; // previous event number | |
142 | ||
143 | Int_t fDisableFit; // flag to disable fit of maximum peak | |
144 | ||
145 | Int_t fExecGlob; // flag to add Executable to global histo | |
146 | Int_t fExecPlaneMax; // flag to add executable for plane view ( max iroc/oroc) | |
147 | Int_t fExecPadIrocRms; // flag to add executable for rms plane view IROC | |
148 | Int_t fExecPadOrocRms; // flag to add executable for rms plane view OROC | |
149 | ||
150 | Int_t fRunId; // current run id | |
151 | Int_t fEqId; // currend equipment id | |
152 | ||
153 | Int_t fPadUsedRoc; // last ROC canvas the mouse pointed at | |
154 | Int_t fPadUsedHwAddr; // hwaddress for last pad the mouse pointed at | |
155 | ||
156 | Int_t fGdcId; // current GDC id | |
157 | Int_t fLdcId; // current LDC id | |
158 | Int_t fLdcIdOld; // previous LDC id | |
159 | ||
160 | Int_t** fMapEqidsSec; // mapping rcu-patch(equipmentid) | |
161 | Int_t* fMapEqidsRcu; // mapping equipmentid(sector,rcu-patch) | |
162 | ||
163 | Int_t fMirror; // mirror x position on C-side | |
164 | Int_t fChannelIter; // counter for channels read | |
165 | ||
166 | ||
167 | AliTPCMonitorMappingHandler* fMapHand; // mapping handler | |
168 | ||
169 | AliRawReaderRoot* fReaderROOT; // reader for ROOT format | |
170 | AliTPCMonitorDateFile* fReaderDATE; // reader for DATE files | |
171 | AliTPCMonitorDateMonitor* fReaderDATEMon; // reader for DATE monitoring | |
172 | ||
173 | ||
174 | Int_t CheckEqId(Int_t secid, Int_t eqid); | |
175 | TCanvas* CreateCanvas(char* name); | |
176 | void CreateHistos(); | |
177 | ||
178 | void DeleteHistos(); | |
179 | void DisableFit(Int_t val) { fDisableFit =val; } | |
180 | void DrawHists(Int_t histos); | |
181 | void DrawRMSMap(); | |
182 | void DumpHeader(AliRawReaderRoot* reader ); | |
183 | void DumpHeader(AliTPCMonitorDateFormat* DateForm); | |
184 | ||
185 | void ExecPad() ; | |
186 | void ExecRow() ; | |
187 | Int_t ExecProcess(); | |
188 | void ExecTransform(); | |
189 | ||
190 | void FillGlobal(Int_t sector); | |
191 | void FillHistsDecode( AliTPCMonitorAltro* altro , Int_t rcu_patch, Int_t id=0); | |
192 | void FillHistsPadPlane(); | |
193 | ||
194 | static double Gamma4(double* x, double* par); | |
195 | Int_t GetChannelsProc() { return fChannelIter ;} | |
196 | Int_t GetEventID() { return fEventNumber ;} | |
197 | TH1* GetHisto(char* histname); | |
198 | Int_t GetRCUPatch(Int_t runid, Int_t eqid); | |
199 | ||
200 | Int_t GetPadAtX(Float_t xval, Int_t row, Int_t padmax); | |
201 | Int_t GetPadAtX(Float_t xval, Int_t row); | |
202 | void GetXY( double& xval , double& yval , Int_t rowmax, Int_t row , Int_t pad); | |
203 | ||
204 | Int_t IsLastEvent() { return fLastEv ;} | |
205 | ||
206 | Int_t ProcessEvent(); | |
207 | ||
208 | void SetEventID(Int_t val) { fEventNumber =val;} | |
209 | void SetMirror(Int_t val) { fMirror=val;} | |
210 | void SetVerbose(Int_t val) { fVerb = val;} | |
211 | void SetMappingHandler(AliTPCMonitorMappingHandler* val ) { fMapHand = val;} | |
212 | void ShowSel(Int_t* comp_val); | |
213 | void SetEqIds(); | |
214 | ||
215 | void ResizeCanv(); | |
216 | void ResetHistos(); | |
217 | void ResetArrays(); | |
218 | Int_t ReadData( Int_t secid); | |
219 | Int_t ReadDataDATE(Int_t secid ,Int_t format); | |
220 | Int_t ReadDataROOT(Int_t secid ); | |
221 | ||
222 | void WriteHistos() ; | |
223 | void Write10bitChannel(); | |
224 | ||
225 | ||
226 | ||
227 | ||
228 | ||
229 | ||
230 | private: | |
231 | ||
232 | ClassDef(AliTPCMonitor,1); | |
233 | }; | |
234 | ||
235 | #endif |