]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/EveBase/AliEveLegoEditor.cxx
Resolving all symbols in the library
[u/mrichter/AliRoot.git] / EVE / EveBase / AliEveLegoEditor.cxx
CommitLineData
3d94b490 1// $Id$
cce980ec 2// Author: Stefano Carrazza 2010, CERN, stefano.carrazza@cern.ch
3d94b490 3
4/**************************************************************************
5 * Copyright(c) 1998-2009, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
7 * full copyright notice. *
8 **************************************************************************/
9
3d94b490 10#include "AliEveLego.h"
cce980ec 11#include "AliEveLegoEditor.h"
3d94b490 12
3d94b490 13#include "TColor.h"
3d94b490 14#include "TGButton.h"
3d94b490 15#include "TGButtonGroup.h"
cce980ec 16#include "TGColorSelect.h"
3d94b490 17#include "TGComboBox.h"
cce980ec 18#include "TGDoubleSlider.h"
3d94b490 19#include "TGFrame.h"
cce980ec 20#include "TGLabel.h"
21#include "TGNumberEntry.h"
22#include "TGString.h"
23#include "TVirtualPad.h"
3d94b490 24
25//______________________________________________________________________________
cce980ec 26// This is the GUI editor for AliEveLego.
3d94b490 27//
28
29ClassImp(AliEveLegoEditor)
30
31//______________________________________________________________________________
32AliEveLegoEditor::AliEveLegoEditor(const TGWindow *p, Int_t width, Int_t height,
33 UInt_t options, Pixel_t back) :
34 TGedFrame(p, width, height, options | kVerticalFrame, back),
35 fM(0),
3d94b490 36 fAllEventsButton(0),
37 fParticlesBG(0),
38 fTrackSelection(0),
6e994a7b 39 fPosCharged(0),
40 fNegCharged(0),
41 fElectrons(0),
42 fMuons(0),
43 fPions(0),
44 fKaons(0),
45 fProtons(0),
3d94b490 46 fLabel(0),
47 fLabel1(0),
48 fThreshold(0),
49 fMaxPt(0),
50 fSelect(0),
6e994a7b 51 fParticlesBGAE(0),
3d94b490 52 fTrackSelectionAE(0),
6e994a7b 53 fPosChargedAE(0),
54 fNegChargedAE(0),
55 fElectronsAE(0),
56 fMuonsAE(0),
57 fPionsAE(0),
58 fKaonsAE(0),
59 fProtonsAE(0),
60 fApplyChanges(0),
3d94b490 61 fLabelAE(0),
62 fLabel1AE(0),
63 fThresholdAE(0),
64 fMaxPtAE(0),
6e994a7b 65 fEventControl(0),
e811e94e 66 fIsMC(0),
6e994a7b 67 fCollisionCandidatesOnly(0)
3d94b490 68{
69 // Constructor.
70 MakeTitle("AliEveLego");
71
72 // Create widgets
cce980ec 73
74 //------ AllEventsButton ------
3d94b490 75 fAllEventsButton = new TGTextButton(this, "Create lego of all events");
76 AddFrame(fAllEventsButton, new TGLayoutHints(kLHintsExpandX));
77 fAllEventsButton->Connect("Clicked()", "AliEveLegoEditor", this, "DoAllEvents()");
78
cce980ec 79 //------ Particle Selection ------
6e994a7b 80 fParticlesBG = new TGGroupFrame(this, "Particle selection:", kVerticalFrame);
81 fPosCharged = new TGCheckButton(fParticlesBG, new TGHotString("&Positive charged"));
82 fNegCharged = new TGCheckButton(fParticlesBG, new TGHotString("&Negative charged"));
83 fElectrons = new TGCheckButton(fParticlesBG, new TGHotString("&Electrons"));
84 fMuons = new TGCheckButton(fParticlesBG, new TGHotString("&Muons"));
85 fPions = new TGCheckButton(fParticlesBG, new TGHotString("&Pions"));
86 fKaons = new TGCheckButton(fParticlesBG, new TGHotString("&Kaons"));
87 fProtons = new TGCheckButton(fParticlesBG, new TGHotString("&Protons"));
88
89 fPosCharged->SetState(kButtonDown);
90 fNegCharged->SetState(kButtonDown);
91 fElectrons->SetState(kButtonUp);
92 fMuons->SetState(kButtonUp);
93 fPions->SetState(kButtonUp);
94 fKaons->SetState(kButtonUp);
95 fProtons->SetState(kButtonUp);
96
97 fPosCharged->Connect("Clicked()", "AliEveLegoEditor", this, "ShowPosCharge()");
98 fNegCharged->Connect("Clicked()", "AliEveLegoEditor", this, "ShowNegCharge()");
99 fElectrons->Connect("Clicked()", "AliEveLegoEditor", this, "ShowElectrons()");
100 fMuons->Connect("Clicked()", "AliEveLegoEditor", this, "ShowMuons()");
101 fPions->Connect("Clicked()", "AliEveLegoEditor", this, "ShowPions()");
102 fKaons->Connect("Clicked()", "AliEveLegoEditor", this, "ShowKaons()");
103 fProtons->Connect("Clicked()", "AliEveLegoEditor", this, "ShowProtons()");
104
105 fParticlesBG->AddFrame(fPosCharged, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
106 fParticlesBG->AddFrame(fNegCharged, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
107 fParticlesBG->AddFrame(fElectrons, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
108 fParticlesBG->AddFrame(fMuons, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
109 fParticlesBG->AddFrame(fPions, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
110 fParticlesBG->AddFrame(fKaons, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
111 fParticlesBG->AddFrame(fProtons, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2));
112 fParticlesBG->SetLayoutManager(new TGVerticalLayout(fParticlesBG));
113
3d94b490 114 AddFrame(fParticlesBG, new TGLayoutHints(kLHintsExpandX));
3d94b490 115
cce980ec 116 //------ Track selection ------
3d94b490 117 fTrackSelection = new TGButtonGroup(this, "Track selection:", kHorizontalFrame);
118 fRtracks[0] = new TGRadioButton(fTrackSelection, new TGHotString("&All tracks "));
119 fRtracks[1] = new TGRadioButton(fTrackSelection, new TGHotString("&Primary tracks"));
120 fRtracks[0]->SetState(kButtonDown);
121 AddFrame(fTrackSelection, new TGLayoutHints(kLHintsExpandX));
122 fTrackSelection->Connect("Clicked(Int_t)", "AliEveLegoEditor", this, "ShowByTracks(Int_t)");
123
cce980ec 124 //------ Track threshold ------
3d94b490 125 TGHorizontalFrame *horz = new TGHorizontalFrame(this);
126 AddFrame(horz, new TGLayoutHints(kLHintsExpandX | kLHintsCenterY));
127 fLabel = new TGLabel(horz, "Tracks maximum Pt (GeV): ");
128 horz->AddFrame(fLabel, new TGLayoutHints(kLHintsLeft | kLHintsCenterY));
129
130 fMaxPt = new TGNumberEntry(horz, 10000, 7, -1,
131 TGNumberFormat::kNESRealOne,
132 TGNumberFormat::kNEANonNegative,
133 TGNumberFormat::kNELLimitMinMax,
134 0, 10000);
135
136 fMaxPt->Connect("ValueSet(Long_t)", "AliEveLegoEditor", this, "SetMaxPt()");
137
138 horz->AddFrame( fMaxPt, new TGLayoutHints(kLHintsRight | kLHintsNormal | kLHintsCenterY));
139
140 TGHorizontalFrame *horz1 = new TGHorizontalFrame(this);
141 AddFrame(horz1, new TGLayoutHints(kLHintsExpandX | kLHintsCenterY));
142 fLabel1 = new TGLabel(horz1, "Tracks threshold (GeV): ");
143 horz1->AddFrame(fLabel1, new TGLayoutHints(kLHintsLeft | kLHintsCenterY));
144
145 fThreshold = new TGNumberEntry(horz1, 0, 7, -1,
146 TGNumberFormat::kNESRealOne,
147 TGNumberFormat::kNEANonNegative,
148 TGNumberFormat::kNELLimitMinMax,
149 0, 10000);
150
151 fThreshold->Connect("ValueSet(Long_t)", "AliEveLegoEditor", this, "SetThreshold()");
152 horz1->AddFrame( fThreshold, new TGLayoutHints(kLHintsRight | kLHintsNormal | kLHintsCenterY));
153
154
6e994a7b 155}
3d94b490 156
6e994a7b 157//______________________________________________________________________________
158void AliEveLegoEditor::SetModel(TObject* obj)
159{
cce980ec 160 // Calls the associated AliEveLego object
6e994a7b 161 fM = dynamic_cast<AliEveLego*>(obj);
162}
3d94b490 163
6e994a7b 164//______________________________________________________________________________
165void AliEveLegoEditor::DoAllEvents()
166{
cce980ec 167 // Creates the all events editor
6e994a7b 168 fAllEventsButton->SetEnabled(kFALSE);
169 CreateAllEventsEditor();
170 fM->LoadAllEvents();
171}
3d94b490 172
6e994a7b 173//______________________________________________________________________________
174void AliEveLegoEditor::ShowPosCharge()
175{
cce980ec 176 // Send particle type to main class
177 fM->SetParticleType(0, fPosCharged->IsOn());
6e994a7b 178}
3d94b490 179
6e994a7b 180//______________________________________________________________________________
181void AliEveLegoEditor::ShowNegCharge()
182{
cce980ec 183 // Send particle type to main class
184 fM->SetParticleType(1, fNegCharged->IsOn());
6e994a7b 185}
3d94b490 186
6e994a7b 187//______________________________________________________________________________
188void AliEveLegoEditor::ShowElectrons()
189{
cce980ec 190 // Send particle type to main class
191 fM->SetParticleType(2, fElectrons->IsOn());
6e994a7b 192}
3d94b490 193
6e994a7b 194//______________________________________________________________________________
195void AliEveLegoEditor::ShowMuons()
196{
cce980ec 197 // Send particle type to main class
198 fM->SetParticleType(3, fMuons->IsOn());
6e994a7b 199}
3d94b490 200
6e994a7b 201//______________________________________________________________________________
202void AliEveLegoEditor::ShowPions()
203{
cce980ec 204 // Send particle type to main class
205 fM->SetParticleType(4, fPions->IsOn());
3d94b490 206}
207
6e994a7b 208//______________________________________________________________________________
209void AliEveLegoEditor::ShowKaons()
210{
cce980ec 211 // Send particle type to main class
212 fM->SetParticleType(5, fKaons->IsOn());
6e994a7b 213}
3d94b490 214
215//______________________________________________________________________________
6e994a7b 216void AliEveLegoEditor::ShowProtons()
3d94b490 217{
cce980ec 218 // Send particle type to main class
219 fM->SetParticleType(6, fProtons->IsOn());
3d94b490 220}
221
6e994a7b 222//______________________________________________________________________________
223void AliEveLegoEditor::ShowPosChargeAE()
224{
cce980ec 225 // Send particle type to main class
226 fM->SetParticleTypeAE(0, fPosChargedAE->IsOn());
6e994a7b 227}
3d94b490 228
6e994a7b 229//______________________________________________________________________________
230void AliEveLegoEditor::ShowNegChargeAE()
231{
cce980ec 232 // Send particle type to main class
233 fM->SetParticleTypeAE(1, fNegChargedAE->IsOn());
6e994a7b 234}
3d94b490 235
236//______________________________________________________________________________
6e994a7b 237void AliEveLegoEditor::ShowElectronsAE()
238{
cce980ec 239 // Send particle type to main class
240 fM->SetParticleTypeAE(2, fElectronsAE->IsOn());
6e994a7b 241}
3d94b490 242
243//______________________________________________________________________________
6e994a7b 244void AliEveLegoEditor::ShowMuonsAE()
3d94b490 245{
cce980ec 246 // Send particle type to main class
247 fM->SetParticleTypeAE(3, fMuonsAE->IsOn());
6e994a7b 248}
3d94b490 249
6e994a7b 250//______________________________________________________________________________
251void AliEveLegoEditor::ShowPionsAE()
252{
cce980ec 253 // Send particle type to main class
254 fM->SetParticleTypeAE(4, fPionsAE->IsOn());
3d94b490 255}
256
257//______________________________________________________________________________
6e994a7b 258void AliEveLegoEditor::ShowKaonsAE()
259{
cce980ec 260 // Send particle type to main class
261 fM->SetParticleTypeAE(5, fKaonsAE->IsOn());
3d94b490 262}
263
264//______________________________________________________________________________
6e994a7b 265void AliEveLegoEditor::ShowProtonsAE()
3d94b490 266{
cce980ec 267 // Send particle type to main class
268 fM->SetParticleTypeAE(6, fProtonsAE->IsOn());
3d94b490 269}
270
271//______________________________________________________________________________
272void AliEveLegoEditor::SetMaxPt()
273{
cce980ec 274 // Send particle type to main class
275 fM->SetMaxPt(fMaxPt->GetNumber());
3d94b490 276}
277
278//______________________________________________________________________________
279void AliEveLegoEditor::SetMaxPtAE()
280{
cce980ec 281 // Send particle type to main class
282 fM->SetMaxPtAE(fMaxPtAE->GetNumber());
3d94b490 283}
284
285//______________________________________________________________________________
286void AliEveLegoEditor::SetThreshold()
287{
cce980ec 288 // Send particle type to main class
289 fM->SetThreshold(fThreshold->GetNumber());
3d94b490 290}
291
292//______________________________________________________________________________
293void AliEveLegoEditor::SetThresholdAE()
294{
cce980ec 295 // Send particle type to main class
296 fM->SetThresholdAE(fThresholdAE->GetNumber());
3d94b490 297}
298
299//______________________________________________________________________________
300void AliEveLegoEditor::ShowByTracks(Int_t id)
301{
cce980ec 302 // Send particle type to main class
303 fM->SetTracks(id);
3d94b490 304}
305
306//______________________________________________________________________________
307void AliEveLegoEditor::ShowByTracksAE(Int_t id)
308{
cce980ec 309 // Send particle type to main class
310 fM->SetTracksAE(id);
3d94b490 311}
312
3d94b490 313//______________________________________________________________________________
314void AliEveLegoEditor::CreateAllEventsEditor()
315{
cce980ec 316 // Create the GUI of all events
3d94b490 317 TGVerticalFrame *this2 = this->CreateEditorTabSubFrame("All events style");
318
cce980ec 319 //------ Event control ------
6e994a7b 320 fEventControl = new TGButtonGroup(this2, "Event control:", kVerticalFrame);
321 fIsMC = new TGCheckButton(fEventControl, new TGHotString("&Data is from simulation (MC)"));
322 fCollisionCandidatesOnly = new TGCheckButton(fEventControl, new TGHotString("&Only collision candidates events"));
323
cce980ec 324 //------ Simulation checkbox ------
6e994a7b 325 fIsMC->SetState(kButtonUp);
326 fCollisionCandidatesOnly->SetState(kButtonUp);
6e994a7b 327 fIsMC->Connect("Clicked()", "AliEveLegoEditor", this, "DataIsMC()");
328 fCollisionCandidatesOnly->Connect("Clicked()", "AliEveLegoEditor", this, "CollisionCandidatesOnly()");
329 this2->AddFrame(fEventControl, new TGLayoutHints(kLHintsExpandX));
330
cce980ec 331 //------ Particle selection ------
6e994a7b 332 fParticlesBGAE = new TGButtonGroup(this2, "Particle selection:", kVerticalFrame);
6e994a7b 333 fPosChargedAE = new TGCheckButton(fParticlesBGAE, new TGHotString("&Positive charged"));
334 fNegChargedAE = new TGCheckButton(fParticlesBGAE, new TGHotString("&Negative charged"));
335 fElectronsAE = new TGCheckButton(fParticlesBGAE, new TGHotString("&Electrons"));
336 fMuonsAE = new TGCheckButton(fParticlesBGAE, new TGHotString("&Muons"));
337 fPionsAE = new TGCheckButton(fParticlesBGAE, new TGHotString("&Pions"));
338 fKaonsAE = new TGCheckButton(fParticlesBGAE, new TGHotString("&Kaons"));
339 fProtonsAE = new TGCheckButton(fParticlesBGAE, new TGHotString("&Protons"));
340
341 fPosChargedAE->SetState(kButtonDown);
342 fNegChargedAE->SetState(kButtonDown);
343 fElectronsAE->SetState(kButtonUp);
344 fMuonsAE->SetState(kButtonUp);
345 fPionsAE->SetState(kButtonUp);
346 fKaonsAE->SetState(kButtonUp);
347 fProtonsAE->SetState(kButtonUp);
348
349 fPosChargedAE->Connect("Clicked()", "AliEveLegoEditor", this, "ShowPosChargeAE()");
350 fNegChargedAE->Connect("Clicked()", "AliEveLegoEditor", this, "ShowNegChargeAE()");
351 fElectronsAE->Connect("Clicked()", "AliEveLegoEditor", this, "ShowElectronsAE()");
352 fMuonsAE->Connect("Clicked()", "AliEveLegoEditor", this, "ShowMuonsAE()");
353 fPionsAE->Connect("Clicked()", "AliEveLegoEditor", this, "ShowPionsAE()");
354 fKaonsAE->Connect("Clicked()", "AliEveLegoEditor", this, "ShowKaonsAE()");
355 fProtonsAE->Connect("Clicked()", "AliEveLegoEditor", this, "ShowProtonsAE()");
3d94b490 356
3d94b490 357 this2->AddFrame(fParticlesBGAE, new TGLayoutHints(kLHintsExpandX));
358
cce980ec 359 //------ Apply particle selection criteria ------
6e994a7b 360 fApplyChanges = new TGTextButton(this2, "Apply particle selection");
6e994a7b 361 fApplyChanges->Connect("Clicked()", "AliEveLegoEditor", this, "ApplyChanges()");
cce980ec 362 this2->AddFrame(fApplyChanges, new TGLayoutHints(kLHintsExpandX));
3d94b490 363
cce980ec 364 //------ Track selection ------
3d94b490 365 fTrackSelectionAE = new TGButtonGroup(this2, "Track selection:", kHorizontalFrame);
366 fRtracksAE[0] = new TGRadioButton(fTrackSelectionAE, new TGHotString("&All tracks "));
367 fRtracksAE[1] = new TGRadioButton(fTrackSelectionAE, new TGHotString("&Primary tracks"));
cce980ec 368 fRtracksAE[0]->SetState(kButtonDown);
3d94b490 369 fTrackSelectionAE->Connect("Clicked(Int_t)", "AliEveLegoEditor", this, "ShowByTracksAE(Int_t)");
cce980ec 370 this2->AddFrame(fTrackSelectionAE, new TGLayoutHints(kLHintsExpandX));
3d94b490 371
cce980ec 372 //------ Threshold setup ------
3d94b490 373 TGHorizontalFrame *horzAE = new TGHorizontalFrame(this2);
374
375 fLabelAE = new TGLabel(horzAE, "Tracks maximum Pt (GeV): ");
376 horzAE->AddFrame(fLabelAE, new TGLayoutHints(kLHintsLeft | kLHintsCenterY));
377
378 fMaxPtAE = new TGNumberEntry(horzAE, 10000, 7, -1,
379 TGNumberFormat::kNESRealOne,
380 TGNumberFormat::kNEANonNegative,
381 TGNumberFormat::kNELLimitMinMax,
382 0, 10000);
383
384 fMaxPtAE->Connect("ValueSet(Long_t)", "AliEveLegoEditor", this, "SetMaxPtAE()");
385
386 horzAE->AddFrame( fMaxPtAE, new TGLayoutHints(kLHintsRight | kLHintsNormal | kLHintsCenterY));
387 this2->AddFrame(horzAE, new TGLayoutHints(kLHintsExpandX | kLHintsCenterY));
388
389 TGHorizontalFrame *horz1AE = new TGHorizontalFrame(this2);
390
391 fLabel1AE = new TGLabel(horz1AE, "Tracks threshold (GeV): ");
392 horz1AE->AddFrame(fLabel1AE, new TGLayoutHints(kLHintsLeft | kLHintsCenterY));
393
394 fThresholdAE = new TGNumberEntry(horz1AE, 0, 7, -1,
395 TGNumberFormat::kNESRealOne,
396 TGNumberFormat::kNEANonNegative,
397 TGNumberFormat::kNELLimitMinMax,
398 0, 10000);
399
400 fThresholdAE->Connect("ValueSet(Long_t)", "AliEveLegoEditor", this, "SetThresholdAE()");
401 horz1AE->AddFrame( fThresholdAE, new TGLayoutHints(kLHintsRight | kLHintsNormal | kLHintsCenterY));
402
403 this2->AddFrame(horz1AE, new TGLayoutHints(kLHintsExpandX | kLHintsCenterY));
3d94b490 404}
405
406//______________________________________________________________________________
6e994a7b 407void AliEveLegoEditor::ApplyChanges()
3d94b490 408{
cce980ec 409 // Apply particle selection for all events
6e994a7b 410 fM->ApplyParticleTypeSelectionAE();
3d94b490 411}
412
413//______________________________________________________________________________
6e994a7b 414void AliEveLegoEditor::DataIsMC()
3d94b490 415{
cce980ec 416 // Set data type
417 fM->SwitchDataType(fIsMC->IsOn());
3d94b490 418}
419
6e994a7b 420//______________________________________________________________________________
421void AliEveLegoEditor::CollisionCandidatesOnly()
422{
cce980ec 423 // Activate collision candidates only
6e994a7b 424 fM->SetCollisionCandidatesOnly();
425}