2 // Author: Matevz Tadel 2007
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 **************************************************************************/
10 #include "AliEveTrackCounterEditor.h"
11 #include "AliEveTrackCounter.h"
12 #include "AliEveEventManager.h"
14 #include "TGedEditor.h"
15 #include "TVirtualPad.h"
18 // Cleanup these includes:
20 #include "TGNumberEntry.h"
21 #include "TGComboBox.h"
27 #include "TEveManager.h"
30 #include "TSystem.h" // File input/output for track-count status.
32 //______________________________________________________________________________
33 // GUI editor for AliEveTrackCounter.
36 ClassImp(AliEveTrackCounterEditor)
38 //______________________________________________________________________________
39 AliEveTrackCounterEditor::AliEveTrackCounterEditor(const TGWindow *p, Int_t width, Int_t height,
40 UInt_t options, Pixel_t back) :
41 TGedFrame(p, width, height, options | kVerticalFrame, back),
45 fInfoLabelTracklets(0),
50 MakeTitle("AliEveTrackCounter");
55 TGHorizontalFrame* f = new TGHorizontalFrame(this);
56 TGLabel* lab = new TGLabel(f, "Click:");
57 f->AddFrame(lab, new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 10, 1, 2));
58 fClickAction = new TGComboBox(f);
59 fClickAction->AddEntry("Print", 0);
60 fClickAction->AddEntry("Toggle", 1);
61 TGListBox* lb = fClickAction->GetListBox();
62 lb->Resize(lb->GetWidth(), 2*16);
63 fClickAction->Resize(70, 20);
64 fClickAction->Connect("Selected(Int_t)", "AliEveTrackCounterEditor", this,
65 "DoClickAction(Int_t)");
66 f->AddFrame(fClickAction, new TGLayoutHints(kLHintsLeft, 1, 2, 1, 1));
72 TGHorizontalFrame* f = new TGHorizontalFrame(this);
73 TGLabel* lab = new TGLabel(f, "Tracks:");
74 f->AddFrame(lab, new TGLayoutHints(kLHintsLeft, 1, 5, 1, 2));
76 fInfoLabelTracks = new TGLabel(f);
77 f->AddFrame(fInfoLabelTracks, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 9, 1, 2));
81 { // fInfoLabelTracklets
82 TGHorizontalFrame* f = new TGHorizontalFrame(this);
83 TGLabel* lab = new TGLabel(f, "Tracklets:");
84 f->AddFrame(lab, new TGLayoutHints(kLHintsLeft, 1, 5, 1, 2));
86 fInfoLabelTracklets = new TGLabel(f);
87 f->AddFrame(fInfoLabelTracklets, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 9, 1, 2));
93 TGHorizontalFrame* f = new TGHorizontalFrame(this, 210, 20, kFixedWidth);
95 TGHorizontalFrame* g = new TGHorizontalFrame(f, labelW, 0, kFixedWidth);
96 TGLabel* l = new TGLabel(g, "Event:");
97 g->AddFrame(l, new TGLayoutHints(kLHintsLeft, 0,0,4,0));
102 b = new TGTextButton(f, "Prev");
103 f->AddFrame(b, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
104 b->Connect("Clicked()", "AliEveTrackCounterEditor", this, "DoPrev()");
106 fEventId = new TGNumberEntry(f, 0, 3, -1,TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
107 TGNumberFormat::kNELLimitMinMax, 0, 10000);
108 f->AddFrame(fEventId, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
109 fEventId->Connect("ValueSet(Long_t)", "AliEveTrackCounterEditor", this, "DoSetEvent()");
111 b = new TGTextButton(f, "Next");
112 f->AddFrame(b, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
113 b->Connect("Clicked()", "AliEveTrackCounterEditor", this, "DoNext()");
119 TGHorizontalFrame* f = new TGHorizontalFrame(this, 210, 20, kFixedWidth);
121 TGHorizontalFrame* g = new TGHorizontalFrame(f, labelW, 0, kFixedWidth);
122 TGLabel* l = new TGLabel(g, "Report:");
123 g->AddFrame(l, new TGLayoutHints(kLHintsLeft, 0,0,4,0));
128 b = new TGTextButton(f, "Print");
129 f->AddFrame(b, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
130 b->Connect("Clicked()", "AliEveTrackCounterEditor", this, "DoPrintReport()");
132 b = new TGTextButton(f, "File");
133 f->AddFrame(b, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
134 b->Connect("Clicked()", "AliEveTrackCounterEditor", this, "DoFileReport()");
136 AddFrame(f, new TGLayoutHints(kLHintsLeft, 0, 0, 4, 0));
139 TGHorizontalFrame* f = new TGHorizontalFrame(this, 210, 20, kFixedWidth);
141 TGHorizontalFrame* g = new TGHorizontalFrame(f, labelW, 0, kFixedWidth);
142 TGLabel* l = new TGLabel(g, "Histos:");
143 g->AddFrame(l, new TGLayoutHints(kLHintsLeft, 0,0,4,0));
148 b = new TGTextButton(f, "Show");
149 f->AddFrame(b, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
150 b->Connect("Clicked()", "AliEveTrackCounterEditor", this, "DoShowHistos()");
152 AddFrame(f, new TGLayoutHints(kLHintsLeft, 0, 0, 0, 0));
155 AliEveEventManager::GetMaster()->Connect("NewEventLoaded()",
156 "AliEveTrackCounterEditor", this, "UpdateModel()");
159 AliEveTrackCounterEditor::~AliEveTrackCounterEditor()
163 AliEveEventManager::GetMaster()->Disconnect("NewEventLoaded()", this);
166 /******************************************************************************/
168 void AliEveTrackCounterEditor::UpdateModel()
170 if (fGedEditor && fM && fGedEditor->GetModel() == fM->GetEditorObject())
172 SetModel(fM->GetEditorObject());
176 //______________________________________________________________________________
177 void AliEveTrackCounterEditor::SetModel(TObject* obj)
181 fM = dynamic_cast<AliEveTrackCounter*>(obj);
183 fClickAction->Select(fM->fClickAction, kFALSE);
184 fInfoLabelTracks ->SetText(Form("All: %3d; Primaries: %3d", fM->fAllTracks, fM->fGoodTracks));
185 fInfoLabelTracklets->SetText(Form("All: %3d; Primaries: %3d", fM->fAllTracklets, fM->fGoodTracklets));
186 fEventId->SetNumber(fM->GetEventId());
189 /******************************************************************************/
191 //______________________________________________________________________________
192 void AliEveTrackCounterEditor::DoPrev()
196 AliEveEventManager::GetMaster()->PrevEvent();
199 //______________________________________________________________________________
200 void AliEveTrackCounterEditor::DoNext()
204 AliEveEventManager::GetMaster()->NextEvent();
207 //______________________________________________________________________________
208 void AliEveTrackCounterEditor::DoSetEvent()
210 // Slot for SetEvent.
211 AliEveEventManager::GetMaster()->GotoEvent((Int_t) fEventId->GetNumber());
214 /******************************************************************************/
216 //______________________________________________________________________________
217 void AliEveTrackCounterEditor::DoPrintReport()
219 // Slot for PrintReport.
221 fM->OutputEventTracks();
224 //______________________________________________________________________________
225 void AliEveTrackCounterEditor::DoFileReport()
227 // Slot for FileReport.
229 TString file(Form("ev-report-%03d.txt", fM->GetEventId()));
230 if (gSystem->AccessPathName(file) == kFALSE)
233 new TGMsgBox(fClient->GetRoot(), GetMainFrame(),
235 Form("Event record for event %d already exist.\n Replace?", fM->GetEventId()),
236 kMBIconQuestion, kMBYes | kMBNo, &ret);
240 FILE* out = fopen(file, "w");
242 fM->OutputEventTracks(out);
245 Error("AliEveTrackCounterEditor::DoFileReport",
246 "Can not open file '%s' for writing.", file.Data());
250 //______________________________________________________________________________
251 void AliEveTrackCounterEditor::DoShowHistos()
253 // Slot for ShowHistos.
255 TH1F* hcnt = new TH1F("cnt", "Primeries per event", 41, -0.5, 40.5);
256 TH1F* hchg = new TH1F("chg", "Primary charge", 3, -1.5, 1.5);
257 TH1F* hpt = new TH1F("pt", "pT distribution", 40, 0.0, 8.0);
258 TH1F* heta = new TH1F("eta", "eta distribution", 40, -1.0, 1.0);
259 TH1F* hphi = new TH1F("phi", "phi distribution", 40, -3.1416, 3.1416);
261 Int_t nn; // fscanf return value
263 for (Int_t i=0; i<1000; ++i)
265 TString file(Form("ev-report-%03d.txt", i));
266 if (gSystem->AccessPathName(file) == kFALSE)
268 Int_t ev, ngoodtr, nalltr;
269 FILE* f = fopen(file, "read");
271 nn = fscanf(f, "Event=%d\n", &ev);
272 if (nn != 1) { printf("SAFR0 %d\n", nn); fclose(f); return; }
274 nn = fscanf(f, "GoodTracks=%d AllTracks=%d\n", &ngoodtr, &nalltr);
275 if (nn != 2) { printf("SAFR1 %d\n", nn); fclose(f); return; }
278 for (Int_t t = 0; t < ngoodtr; ++t)
281 Float_t pt, eta, phi;
282 nn = fscanf(f, "%d: chg=%d pt=%f eta=%f phi=%f\n", &id, &chg, &pt, &eta, &phi);
283 if (nn != 5) { printf("SAFR2 %d\n", nn); fclose(f); return; }
294 if (gPad == 0 || gPad->GetCanvas()->IsEditable() == kFALSE) {
295 c = new TCanvas("Scanwas", "Scanning Results", 800, 600);
297 c = gPad->GetCanvas();
302 c->cd(1); hcnt->Draw();
303 c->cd(2); hchg->Draw();
304 c->cd(3); hpt ->Draw();
305 c->cd(4); heta->Draw();
306 c->cd(5); hphi->Draw();
312 /******************************************************************************/
314 //______________________________________________________________________________
315 void AliEveTrackCounterEditor::DoClickAction(Int_t mode)
317 // Slot for ClickAction.
319 fM->SetClickAction(mode);