]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/EveBase/AliEveTrackCounterEditor.cxx
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / EVE / EveBase / AliEveTrackCounterEditor.cxx
CommitLineData
f76c9e9b 1// @(#)root/eve:$Id$
2// Author: Matevz Tadel 2007
3
4/**************************************************************************
5 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
7 * full copyright notice. *
8 **************************************************************************/
9
10#include "AliEveTrackCounterEditor.h"
11#include "AliEveTrackCounter.h"
12365217 12#include "AliEveEventManager.h"
f262c692 13#include "AliESDEvent.h"
f76c9e9b 14
12365217 15#include "TGedEditor.h"
f76c9e9b 16#include "TVirtualPad.h"
17#include "TColor.h"
18
19// Cleanup these includes:
20#include "TGLabel.h"
21#include "TGNumberEntry.h"
22#include "TGComboBox.h"
23#include "TGMsgBox.h"
24
f262c692 25#include "TGButtonGroup.h"
26
786d9102 27#include "TTree.h"
f76c9e9b 28#include "TH1F.h"
29
30#include "TCanvas.h"
786d9102 31#include "TLatex.h"
f76c9e9b 32#include "TEveManager.h"
33
34#include "TROOT.h"
35#include "TSystem.h" // File input/output for track-count status.
f262c692 36#include "TDatime.h"
f76c9e9b 37
38//______________________________________________________________________________
39// GUI editor for AliEveTrackCounter.
40//
41
42ClassImp(AliEveTrackCounterEditor)
43
44//______________________________________________________________________________
45AliEveTrackCounterEditor::AliEveTrackCounterEditor(const TGWindow *p, Int_t width, Int_t height,
46 UInt_t options, Pixel_t back) :
47 TGedFrame(p, width, height, options | kVerticalFrame, back),
c12be4d4 48 fM(0), fAF(0), fDF(0),
3a20f984 49 fClickAction(0),
50 fInfoLabelTracks (0),
51 fInfoLabelTracklets(0),
f262c692 52 fEventId(0),
53 fEventCat(0),
54 fScanSummaryFile(0)
f76c9e9b 55{
56 // Constructor.
57
58 MakeTitle("AliEveTrackCounter");
59
60 Int_t labelW = 42;
61
c12be4d4 62
63 // Active frame
64
65 fAF = new TGVerticalFrame(this);
66
67 { // Deactivate button
68 TGHorizontalFrame* f = new TGHorizontalFrame(fAF, 210, 20, kFixedWidth);
69
70 TGTextButton* b = new TGTextButton(f, "Deactivate");
71 f->AddFrame(b, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 4));
72 b->Connect("Clicked()", "AliEveTrackCounterEditor", this, "DoDeactivate()");
73
74 fAF->AddFrame(f, new TGLayoutHints(kLHintsLeft, 0, 0, 0, 0));
75 }
f76c9e9b 76 { // ClickAction
c12be4d4 77 TGHorizontalFrame* f = new TGHorizontalFrame(fAF);
f76c9e9b 78 TGLabel* lab = new TGLabel(f, "Click:");
79 f->AddFrame(lab, new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 10, 1, 2));
80 fClickAction = new TGComboBox(f);
81 fClickAction->AddEntry("Print", 0);
82 fClickAction->AddEntry("Toggle", 1);
83 TGListBox* lb = fClickAction->GetListBox();
84 lb->Resize(lb->GetWidth(), 2*16);
85 fClickAction->Resize(70, 20);
86 fClickAction->Connect("Selected(Int_t)", "AliEveTrackCounterEditor", this,
87 "DoClickAction(Int_t)");
88 f->AddFrame(fClickAction, new TGLayoutHints(kLHintsLeft, 1, 2, 1, 1));
89
c12be4d4 90 fAF->AddFrame(f);
f76c9e9b 91 }
3a20f984 92 { // fInfoLabelTracks
c12be4d4 93 TGHorizontalFrame* f = new TGHorizontalFrame(fAF);
3a20f984 94 TGLabel* lab = new TGLabel(f, "Tracks:");
f76c9e9b 95 f->AddFrame(lab, new TGLayoutHints(kLHintsLeft, 1, 5, 1, 2));
96
3a20f984 97 fInfoLabelTracks = new TGLabel(f);
98 f->AddFrame(fInfoLabelTracks, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 9, 1, 2));
99
c12be4d4 100 fAF->AddFrame(f);
3a20f984 101 }
102 { // fInfoLabelTracklets
c12be4d4 103 TGHorizontalFrame* f = new TGHorizontalFrame(fAF);
3a20f984 104 TGLabel* lab = new TGLabel(f, "Tracklets:");
105 f->AddFrame(lab, new TGLayoutHints(kLHintsLeft, 1, 5, 1, 2));
106
107 fInfoLabelTracklets = new TGLabel(f);
108 f->AddFrame(fInfoLabelTracklets, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 9, 1, 2));
f76c9e9b 109
c12be4d4 110 fAF->AddFrame(f);
f76c9e9b 111 }
f76c9e9b 112 {
c12be4d4 113 TGHorizontalFrame* f = new TGHorizontalFrame(fAF, 210, 20, kFixedWidth);
f76c9e9b 114
115 TGHorizontalFrame* g = new TGHorizontalFrame(f, labelW, 0, kFixedWidth);
116 TGLabel* l = new TGLabel(g, "Event:");
117 g->AddFrame(l, new TGLayoutHints(kLHintsLeft, 0,0,4,0));
118 f->AddFrame(g);
119
120 TGTextButton* b;
121
122 b = new TGTextButton(f, "Prev");
123 f->AddFrame(b, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
124 b->Connect("Clicked()", "AliEveTrackCounterEditor", this, "DoPrev()");
125
126 fEventId = new TGNumberEntry(f, 0, 3, -1,TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
127 TGNumberFormat::kNELLimitMinMax, 0, 10000);
128 f->AddFrame(fEventId, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
129 fEventId->Connect("ValueSet(Long_t)", "AliEveTrackCounterEditor", this, "DoSetEvent()");
130
131 b = new TGTextButton(f, "Next");
132 f->AddFrame(b, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
133 b->Connect("Clicked()", "AliEveTrackCounterEditor", this, "DoNext()");
134
c12be4d4 135 fAF->AddFrame(f);
f76c9e9b 136 }
f76c9e9b 137 {
c12be4d4 138 TGHorizontalFrame* f = new TGHorizontalFrame(fAF, 210, 20, kFixedWidth);
f76c9e9b 139
140 TGHorizontalFrame* g = new TGHorizontalFrame(f, labelW, 0, kFixedWidth);
141 TGLabel* l = new TGLabel(g, "Report:");
142 g->AddFrame(l, new TGLayoutHints(kLHintsLeft, 0,0,4,0));
143 f->AddFrame(g);
144
145 TGTextButton* b;
146
147 b = new TGTextButton(f, "Print");
148 f->AddFrame(b, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
149 b->Connect("Clicked()", "AliEveTrackCounterEditor", this, "DoPrintReport()");
150
151 b = new TGTextButton(f, "File");
152 f->AddFrame(b, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
153 b->Connect("Clicked()", "AliEveTrackCounterEditor", this, "DoFileReport()");
154
c12be4d4 155 fAF->AddFrame(f, new TGLayoutHints(kLHintsLeft, 0, 0, 4, 0));
f76c9e9b 156 }
157 {
c12be4d4 158 TGHorizontalFrame* f = new TGHorizontalFrame(fAF, 210, 20, kFixedWidth);
f76c9e9b 159
160 TGHorizontalFrame* g = new TGHorizontalFrame(f, labelW, 0, kFixedWidth);
161 TGLabel* l = new TGLabel(g, "Histos:");
162 g->AddFrame(l, new TGLayoutHints(kLHintsLeft, 0,0,4,0));
163 f->AddFrame(g);
164
165 TGTextButton* b;
166
167 b = new TGTextButton(f, "Show");
168 f->AddFrame(b, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
169 b->Connect("Clicked()", "AliEveTrackCounterEditor", this, "DoShowHistos()");
170
c12be4d4 171 fAF->AddFrame(f, new TGLayoutHints(kLHintsLeft, 0, 0, 0, 0));
f76c9e9b 172 }
f262c692 173 {
174 TGHorizontalFrame* f = new TGHorizontalFrame(fAF, 210, 20, kFixedWidth);
175
176 TGButtonGroup *fTypeSelector = new TGButtonGroup(f, "Event Categorization");
177 new TGRadioButton(fTypeSelector, "Good");
178 new TGRadioButton(fTypeSelector, "Splash");
179 new TGRadioButton(fTypeSelector, "Empty");
180 new TGRadioButton(fTypeSelector, "Background");
181 new TGRadioButton(fTypeSelector, "Unclear/Other");
182 fTypeSelector->Connect("Clicked(Int_t)", "AliEveTrackCounterEditor", this, "DoEventCategorization(Int_t)");
183
184 f->AddFrame(fTypeSelector, new TGLayoutHints(kLHintsTop | kLHintsCenterX | kLHintsExpandX, 2, 3, 2, 2));
185
186 fAF->AddFrame(f, new TGLayoutHints(kLHintsLeft, 0, 0, 0, 0));
187 }
f76c9e9b 188
c12be4d4 189 AddFrame(fAF, new TGLayoutHints(kLHintsNormal|kLHintsExpandX|kLHintsExpandY));
190
191
192 // Disabled frame
193
194 fDF = new TGVerticalFrame(this);
195
196 { // Activate button
197 TGHorizontalFrame* f = new TGHorizontalFrame(fDF, 210, 20, kFixedWidth);
198
199 TGTextButton* b = new TGTextButton(f, "Activate");
200 f->AddFrame(b, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
201 b->Connect("Clicked()", "AliEveTrackCounterEditor", this, "DoActivate()");
202
203 fDF->AddFrame(f, new TGLayoutHints(kLHintsLeft, 0, 0, 0, 0));
204 }
205
206 AddFrame(fDF, new TGLayoutHints(kLHintsNormal|kLHintsExpandX|kLHintsExpandY));
207
208 AliEveEventManager::GetMaster()->Connect("NewEventLoaded()", "AliEveTrackCounterEditor", this, "UpdateModel()");
12365217 209}
210
211AliEveTrackCounterEditor::~AliEveTrackCounterEditor()
212{
213 // Destructor.
214
4d62585e 215 AliEveEventManager::GetMaster()->Disconnect("NewEventLoaded()", this);
f262c692 216
217 if (fScanSummaryFile) {
218 fScanSummaryFile->close();
219 delete fScanSummaryFile;
220 fScanSummaryFile = 0;
221 }
f76c9e9b 222}
223
224/******************************************************************************/
225
12365217 226void AliEveTrackCounterEditor::UpdateModel()
227{
25e6c229 228 TEveException e;
229 if (fGedEditor && fM && fGedEditor->GetModel() == fM->GetEditorObject(e))
12365217 230 {
25e6c229 231 SetModel(fM->GetEditorObject(e));
12365217 232 }
233}
234
f76c9e9b 235//______________________________________________________________________________
236void AliEveTrackCounterEditor::SetModel(TObject* obj)
237{
238 // Set model object.
239
469ca156 240 fM = static_cast<AliEveTrackCounter*>(obj);
f76c9e9b 241
c12be4d4 242 if (fM->GetActive())
243 {
244 ShowFrame(fAF); HideFrame(fDF);
245
246 fClickAction->Select(fM->fClickAction, kFALSE);
247 fInfoLabelTracks ->SetText(Form("All: %3d; Primaries: %3d", fM->fAllTracks, fM->fGoodTracks));
248 fInfoLabelTracklets->SetText(Form("All: %3d; Primaries: %3d", fM->fAllTracklets, fM->fGoodTracklets));
249 fEventId->SetNumber(fM->GetEventId());
250 }
251 else
252 {
253 ShowFrame(fDF); HideFrame(fAF);
254 }
255
256 Layout();
257}
258
259/******************************************************************************/
260
261void AliEveTrackCounterEditor::DoActivate()
262{
263 // Activate track-counter
264
265 fM->SetActive(kTRUE);
266 AliEveEventManager::GetMaster()->GotoEvent(AliEveEventManager::GetMaster()->GetEventId());
267 fGedEditor->Layout();
f262c692 268
269 if (fScanSummaryFile) {
270 fScanSummaryFile->close();
271 delete fScanSummaryFile;
272 }
273
274 char fname[200];
275 TDatime dat;
1c7b4c01 276 snprintf(fname, 200,"ScanSummary.%i.%i.txt", dat.GetDate(), dat.GetTime());
f262c692 277 fScanSummaryFile = new ofstream(fname);
278 (*fScanSummaryFile) << "Scan summary" << std::endl;
279 (*fScanSummaryFile) << "Scan started at " << dat.GetDate() << " " << dat.GetTime() << std::endl;
280 AliESDEvent *esd = AliEveEventManager::AssertESD();
281 (*fScanSummaryFile) << "Run number " << esd->GetRunNumber() << std::endl;
c12be4d4 282}
283
284void AliEveTrackCounterEditor::DoDeactivate()
285{
286 // Deactivate track-counter.
287
288 fM->SetActive(kFALSE);
289 AliEveEventManager::GetMaster()->GotoEvent(AliEveEventManager::GetMaster()->GetEventId());
f262c692 290
291 if (fScanSummaryFile) {
292 fScanSummaryFile->close();
293 delete fScanSummaryFile;
294 fScanSummaryFile = 0;
295 }
f76c9e9b 296}
297
298/******************************************************************************/
299
300//______________________________________________________________________________
301void AliEveTrackCounterEditor::DoPrev()
302{
303 // Slot for Prev.
304
4d62585e 305 AliEveEventManager::GetMaster()->PrevEvent();
f76c9e9b 306}
307
308//______________________________________________________________________________
309void AliEveTrackCounterEditor::DoNext()
310{
311 // Slot for Next.
312
f262c692 313 if (fScanSummaryFile) {
314 AliESDEvent *esd = AliEveEventManager::AssertESD();
315 (*fScanSummaryFile) << std::hex << std::right ;
316 fScanSummaryFile->width(5); (*fScanSummaryFile) << esd->GetPeriodNumber() << " " ;
317 fScanSummaryFile->width(6); (*fScanSummaryFile) << esd->GetOrbitNumber() << " ";
318 fScanSummaryFile->width(4); (*fScanSummaryFile) << esd->GetBunchCrossNumber() << " ";
319 switch (fEventCat) {
320 case 1: (*fScanSummaryFile) << "GOOD "; break;
321 case 2: (*fScanSummaryFile) << "SPLASH "; break;
322 case 3: (*fScanSummaryFile) << "EMPTY "; break;
323 case 4: (*fScanSummaryFile) << "BACKGROUND "; break;
324 case 5: (*fScanSummaryFile) << "OTHER "; break;
325 default: break;
326 }
327 if (fM->GetActive())
328 {
329 (*fScanSummaryFile) << std::dec;
330 fScanSummaryFile->width(5); (*fScanSummaryFile) << fM->fAllTracks << " ";
331 fScanSummaryFile->width(5); (*fScanSummaryFile) << fM->fGoodTracks << " ";
332 fScanSummaryFile->width(5); (*fScanSummaryFile) << fM->fAllTracklets << " ";
333 fScanSummaryFile->width(5); (*fScanSummaryFile) << fM->fGoodTracklets << " ";
334 }
335 if ((esd->GetPrimaryVertex()) && (esd->GetPrimaryVertex()->GetStatus()))
336 { fScanSummaryFile->width(9); (*fScanSummaryFile) << esd->GetPrimaryVertex()->GetZ(); }
337 else { (*fScanSummaryFile) << "NOVTX "; }
338
339 (*fScanSummaryFile) << std::endl;
340 }
341
4d62585e 342 AliEveEventManager::GetMaster()->NextEvent();
f76c9e9b 343}
344
345//______________________________________________________________________________
346void AliEveTrackCounterEditor::DoSetEvent()
347{
348 // Slot for SetEvent.
c12be4d4 349
4d62585e 350 AliEveEventManager::GetMaster()->GotoEvent((Int_t) fEventId->GetNumber());
f76c9e9b 351}
352
353/******************************************************************************/
354
355//______________________________________________________________________________
356void AliEveTrackCounterEditor::DoPrintReport()
357{
358 // Slot for PrintReport.
359
786d9102 360 fM->PrintEventTracks();
f76c9e9b 361}
362
363//______________________________________________________________________________
364void AliEveTrackCounterEditor::DoFileReport()
365{
366 // Slot for FileReport.
367
786d9102 368 fM->OutputEventTracks();
f76c9e9b 369}
370
371//______________________________________________________________________________
372void AliEveTrackCounterEditor::DoShowHistos()
373{
374 // Slot for ShowHistos.
375
c12be4d4 376 TEveUtil::Macro("make_scan_results.C");
786d9102 377 TEveUtil::Macro("show_scan_results.C");
f76c9e9b 378}
379
380/******************************************************************************/
381
382//______________________________________________________________________________
383void AliEveTrackCounterEditor::DoClickAction(Int_t mode)
384{
385 // Slot for ClickAction.
386
387 fM->SetClickAction(mode);
388}
f262c692 389
390//______________________________________________________________________________
391void AliEveTrackCounterEditor::DoEventCategorization(Int_t mode)
392{
393 // Slot for ClickAction.
394
395 printf("Mode is %i\n", mode);
396 fEventCat = mode;
397}