c335880fc85d00432e88b01f5f8fa3187e5e64ac
[u/mrichter/AliRoot.git] / TRD / qaGui / AliTRDqaGuiBlackSM.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* $Id: AliTRDqaGuiBlackSM.cxx 23871 2008-02-12 11:48:20Z hristov $ */
17
18 //////////////////////////////////////////////////////////////////////////////////
19 //
20 // This class is a Graphical User Interface for the Quality Monitorig 
21 // of black (non zero zuppresed) events from TRD. 
22 // It lets display and browse throu histograms created by the class 
23 // AliTRDqaBlackEvents.
24 // The class works in cooperation with AliTRDqaGuiMainBlack.
25 //
26 // S. Radomski 
27 // Uni-Heidelberg
28 // Feb. 2008
29 // 
30 //////////////////////////////////////////////////////////////////////////////////
31
32 #include "AliTRDqaGuiBlackSM.h"
33
34 #include "TH1D.h"
35 #include "TFile.h"
36 #include "TCanvas.h"
37 #include "TString.h"
38 #include "TSystem.h"
39
40 #include "TGLabel.h"
41 #include "TGComboBox.h"
42 #include "TGButton.h"
43 #include "TRootEmbeddedCanvas.h"
44
45 ClassImp(AliTRDqaGuiBlackSM)
46
47 //////////////////////////////////////////////////////////////////////////////////
48
49 AliTRDqaGuiBlackSM::AliTRDqaGuiBlackSM() 
50   : fIdx(0),
51     fIdxType(0),
52     fSetRangePed(0),
53     fSetRangeNoise(0),
54     fFileName(0),
55     fGPanel(0),
56     fGCanvas(0),
57     fGSelect(0),
58     fGPrev(0),
59     fGNext(0),
60     fGSelectType(0)
61 {
62 }
63
64 //////////////////////////////////////////////////////////////////////////////////
65
66 AliTRDqaGuiBlackSM::AliTRDqaGuiBlackSM(TGWindow *parent) 
67   : TGCompositeFrame(parent, 720, 500),
68     fIdx(0),
69     fIdxType(0),
70     fSetRangePed(0),
71     fSetRangeNoise(0),
72     fFileName(0),
73     fGPanel(0),
74     fGCanvas(0),
75     fGSelect(0),
76     fGPrev(0),
77     fGNext(0),
78     fGSelectType(0)
79 {
80   //
81   // Main constructor
82   //
83   
84   fIdx = 0;
85   fIdxType = 0;
86
87   // steering panel 
88   
89   SetLayoutManager(new TGVerticalLayout(this));
90
91   fGPanel = new TGHorizontalFrame(this);
92
93   // fGLabel = new TGLabel(fGPanel, "Current SM: ");
94   fGPrev = new TGTextButton(fGPanel, "Prev SM");
95   fGNext = new TGTextButton(fGPanel, "Next SM");
96
97   fGSelect = new TGComboBox(fGPanel);
98   for(int i=0; i<18; i++) fGSelect->AddEntry(Form("SM %d", i), i);
99   fGSelect->Resize(100, fGPrev->GetHeight());
100   fGSelect->Select(fIdx,0);
101
102   const char *textTypes[5] = {
103     "pedestals", "noise", "pedestalDist", "noiseDist", "signal"
104   };
105   
106   fGSelectType = new TGComboBox(fGPanel);
107   for(int i=0; i<5; i++) fGSelectType->AddEntry(textTypes[i], i);
108   fGSelectType->Resize(100, fGPrev->GetHeight());
109   fGSelectType->Select(fIdxType, 0);
110
111   //fGPlay = new TGTextButton(fGPanel, "PLAY");
112
113   TGLayoutHints *hint = new TGLayoutHints(kLHintsNormal, 5, 5, 5, 5);
114   
115   // fGPanel->AddFrame(fGLabel, hint);
116   fGPanel->AddFrame(fGPrev, hint);
117   fGPanel->AddFrame(fGSelect, hint);
118   fGPanel->AddFrame(fGNext, hint);
119   //fGPanel->AddFrame(fGPlay, hint);
120   fGPanel->AddFrame(fGSelectType, hint);
121
122   AddFrame(fGPanel);
123
124   // panel logic
125   fGPrev->Connect("Clicked()", "AliTRDqaGuiBlackSM", this, "PreviusSM()");
126   fGNext->Connect("Clicked()", "AliTRDqaGuiBlackSM", this, "NextSM()");
127   fGSelect->Connect("Selected(Int_t)", "AliTRDqaGuiBlackSM", this, "SelectSM(Int_t)");
128   fGSelectType->Connect("Selected(Int_t)", "AliTRDqaGuiBlackSM", this, "SelectType(Int_t)");
129   //fGPlay->Connect("Clicked()", "AliTRDqaGuiBlackSM", this, "Play()");
130
131   // histograms
132   /**/
133   fGCanvas = new TGCompositeFrame(this);
134   fGCanvas->SetLayoutManager(new TGMatrixLayout(fGCanvas,6,5,0,0));
135
136   for(Int_t i=0; i<30; i++) {
137     fCanvasList[i] = new TRootEmbeddedCanvas(Form("pos_%d", i), fGCanvas, 200, 120);
138     fGCanvas->AddFrame(fCanvasList[i]);
139     fCanvasList[i]->GetCanvas()->SetRightMargin(0.05);
140     fCanvasList[i]->GetCanvas()->SetTopMargin(0.05);
141   }
142   
143   for(Int_t i=0; i<30; i++) {
144     fHistList[i] = 0;
145   }
146
147   AddFrame(fGCanvas);
148   /**/
149 }
150
151 //////////////////////////////////////////////////////////////////////////////////
152
153 void AliTRDqaGuiBlackSM::SetQAFile(const char *filename) {
154   //
155   // Set the file with histograms
156   //
157  
158   const char *names[5] = {"ped", "noise", "pedDist", "noiseDist", "signal"};
159   const char *opt[5] = {"col", "col", "", "", ""};
160   const Int_t kLogy[5] = {0, 0, 1, 1, 0};
161
162   fFileName = filename;
163  
164   for(int i=0; i<30; i++) {
165     if (fHistList[i]) delete fHistList[i];
166   }
167   
168   TFile *file = new TFile(filename);
169
170   for(int i=0; i<30; i++) {
171     Int_t index = i + fIdx * 30;
172     const char *nn = Form("%s_%d", names[fIdxType], index);
173     //printf("%s\n", nn);
174     fHistList[i] = (TH1*)file->Get(nn); //Form("%s_$d", names[fIdxType], index));
175     
176     Int_t s = i/6;
177     Int_t l = i%6;
178     Int_t pos = (5-l) * 5 + s;
179
180     fCanvasList[pos]->GetCanvas()->cd();
181     fCanvasList[pos]->GetCanvas()->SetLogy(kLogy[fIdxType]);
182
183     if (fHistList[i]) fHistList[i]->Draw(opt[fIdxType]);
184
185     if ( fHistList[i] && (fIdxType == 0)  && fSetRangePed) {
186       fHistList[i]->SetMinimum(fRangePed[0]);
187       fHistList[i]->SetMaximum(fRangePed[1]);
188     }
189     
190     if ( fHistList[i] && (fIdxType == 1) && fSetRangeNoise) {
191       fHistList[i]->SetMinimum(fRangeNoise[0]);
192       fHistList[i]->SetMaximum(fRangeNoise[1]);
193     }
194
195     fCanvasList[pos]->GetCanvas()->Update();
196   }
197 }
198
199 //////////////////////////////////////////////////////////////////////////////////
200
201 void AliTRDqaGuiBlackSM::SetSM(Int_t idx) {
202   //
203   // Selects active super module
204   //
205   
206   fIdx = idx; 
207   fGSelect->Select(fIdx, 0); 
208   SetQAFile(fFileName.Data());
209 }
210
211 //////////////////////////////////////////////////////////////////////////////////
212
213 void AliTRDqaGuiBlackSM::SelectType(Int_t idx) {
214   //
215   // Selects data type 
216   //
217
218   fIdxType = idx;
219   fGSelectType->Select(fIdxType, 0);
220   SetQAFile(fFileName.Data());
221 }
222
223 //////////////////////////////////////////////////////////////////////////////////
224 /*
225 void AliTRDqaGuiBlackSM::Play() {
226   
227   SetSM(0);
228   for(Int_t i=0; i<18; i++) {
229     gSystem->Sleep(2 * 1e3);
230     NextSM();
231   }
232 }
233 */
234 //////////////////////////////////////////////////////////////////////////////////
235