2 #ifndef ALITPCMONITOR_H
3 #define ALITPCMONITOR_H
5 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
6 * See cxx source for full Copyright notice */
11 ////////////////////////////////////////////////////////////////////////
13 // AliTPCMonitor class
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
19 // Author: Stefan Kniege, IKF, Frankfurt
22 /////////////////////////////////////////////////////////////////////////
41 #include "TApplication.h"
43 #include "TPaveText.h"
44 #include "TGButtonGroup.h"
46 #include "TGTextBuffer.h"
47 #include "TGTextEntry.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"
63 #include "TDirectory.h"
65 #include "RQ_OBJECT.h"
69 class AliTPCMonitor : public AliTPCMonitorConfig {
73 AliTPCMonitor(char* name, char* title);
74 virtual ~AliTPCMonitor();
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)
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
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)
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
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
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
121 TObjArray* fHistList; // array to store all histogram
124 // row and pad settings
125 Int_t kNRowsIroc; // number of rows in IROC
126 Int_t kNRowsOroc; // number of rows in OROC
128 Int_t kNPadsIroc; // number of pads in IROC
129 Int_t kNPadsOroc; // number of pads in OROC
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
136 Int_t fVerb; // verbose flag
138 Int_t fLastEv; // flag for last event
140 Int_t fEventNumber; // current event number (ID)
141 Int_t fEventNumberOld; // previous event number
143 Int_t fDisableFit; // flag to disable fit of maximum peak
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
150 Int_t fRunId; // current run id
151 Int_t fEqId; // currend equipment id
153 Int_t fPadUsedRoc; // last ROC canvas the mouse pointed at
154 Int_t fPadUsedHwAddr; // hwaddress for last pad the mouse pointed at
156 Int_t fGdcId; // current GDC id
157 Int_t fLdcId; // current LDC id
158 Int_t fLdcIdOld; // previous LDC id
160 Int_t** fMapEqidsSec; // mapping rcu-patch(equipmentid)
161 Int_t* fMapEqidsRcu; // mapping equipmentid(sector,rcu-patch)
163 Int_t fMirror; // mirror x position on C-side
164 Int_t fChannelIter; // counter for channels read
167 AliTPCMonitorMappingHandler* fMapHand; // mapping handler
169 AliRawReaderRoot* fReaderROOT; // reader for ROOT format
170 AliTPCMonitorDateFile* fReaderDATE; // reader for DATE files
171 AliTPCMonitorDateMonitor* fReaderDATEMon; // reader for DATE monitoring
174 Int_t CheckEqId(Int_t secid, Int_t eqid);
175 TCanvas* CreateCanvas(char* name);
179 void DisableFit(Int_t val) { fDisableFit =val; }
180 void DrawHists(Int_t histos);
182 void DumpHeader(AliRawReaderRoot* reader );
183 void DumpHeader(AliTPCMonitorDateFormat* DateForm);
188 void ExecTransform();
190 void FillGlobal(Int_t sector);
191 void FillHistsDecode( AliTPCMonitorAltro* altro , Int_t rcu_patch, Int_t id=0);
192 void FillHistsPadPlane();
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);
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);
204 Int_t IsLastEvent() { return fLastEv ;}
206 Int_t ProcessEvent();
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);
218 Int_t ReadData( Int_t secid);
219 Int_t ReadDataDATE(Int_t secid ,Int_t format);
220 Int_t ReadDataROOT(Int_t secid );
223 void Write10bitChannel();
232 ClassDef(AliTPCMonitor,1);