]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/EveBase/AliEveEventSelectorWindow.cxx
From Mikolaj: Implementation of event / trigger selection mechanism
[u/mrichter/AliRoot.git] / EVE / EveBase / AliEveEventSelectorWindow.cxx
CommitLineData
008ac94c 1/**************************************************************************
2 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
3 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
4 * full copyright notice. *
5 **************************************************************************/
6
7#include "AliEveEventSelectorWindow.h"
8#include "AliEveEventSelector.h"
9#include "AliEveEventManager.h"
10#include <TGTextEntry.h>
11#include <TGNumberEntry.h>
12#include <TRootEmbeddedCanvas.h>
13#include <TCanvas.h>
14#include <TGButton.h>
15#include <TGComboBox.h>
16#include <TGLabel.h>
17#include <TTree.h>
18#include <AliESDEvent.h>
19#include <AliESDRun.h>
20#include <TH1.h>
21#include <TDirectory.h>
22#include <TROOT.h>
23
24ClassImp(AliEveEventSelectorWindow)
25//______________________________________________________________________________
26AliEveEventSelectorWindow::AliEveEventSelectorWindow(const TGWindow *p, UInt_t w, UInt_t h,
27 AliEveEventSelector* sel) :
28 TGMainFrame(p, w, h),
29 fPSelector(sel),
30 fPCanvas(NULL),
31 fPDrawFormula(NULL),
32 fPEntryFormula(NULL),
33 fPEntryLowerBound(NULL),
34 fPEntryHigherBound(NULL),
35 fPButtonTextDone(NULL),
36 fPComboBoxTrigger(NULL),
37 fPEntryTriggerSelection(NULL),
38 fPCheckTriggerSimple(NULL),
39 fPCheckTriggerString(NULL)
40{
41 //ctor
42
43 //the canvas
44 fPCanvas = new TRootEmbeddedCanvas(0,this);
45 Int_t wid = fPCanvas->GetCanvasWindowId();
46 TCanvas *myc = new TCanvas("MyCanvas", 10,10,wid);
47 fPCanvas->AdoptCanvas(myc);
48 AddFrame(fPCanvas, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
49
50 //draw box frame
51 TGHorizontalFrame* hframedraw = new TGHorizontalFrame(this);
52 AddFrame(hframedraw, new TGLayoutHints((kLHintsExpandX), 5,5));
53
54 TGLabel* drawlabel = new TGLabel(hframedraw, "Draw expression:");
55 hframedraw->AddFrame(drawlabel, new TGLayoutHints((kLHintsLeft)));
56 fPDrawFormula = new TGTextEntry(hframedraw);
57 hframedraw->AddFrame(fPDrawFormula, new TGLayoutHints(kLHintsExpandX));
58 TGTextButton* buttondraw = new TGTextButton(hframedraw,"Draw");
59 buttondraw->Connect("Clicked()","AliEveEventSelectorWindow",
60 this, "DoDrawHistogram()");
61 hframedraw->AddFrame(buttondraw, new TGLayoutHints(kLHintsLeft));
62 TGTextButton* buttonview = new TGTextButton(hframedraw,"Browse");
63 buttonview->Connect("Clicked()","TTree",fPSelector->GetESDTree(),"StartViewer()");
64 hframedraw->AddFrame(buttonview, new TGLayoutHints(kLHintsLeft));
65
66
67 //text selection frame
68 TGHorizontalFrame *hframetxtsel = new TGHorizontalFrame(this);
69 AddFrame(hframetxtsel, new TGLayoutHints((kLHintsExpandX), 5,5));
70
71 TGLabel* exprlabel = new TGLabel(hframetxtsel, "Expression:");
72 hframetxtsel->AddFrame(exprlabel, new TGLayoutHints(kLHintsLeft));
73
74 TGCheckButton* checktextsel = new TGCheckButton(hframetxtsel);
75 checktextsel->Connect("Toggled(Bool_t)", "AliEveEventSelector",
76 fPSelector, "SetSelectOnString(Bool_t)");
77 hframetxtsel->AddFrame(checktextsel, new TGLayoutHints(kLHintsLeft));
78
79 fPEntryLowerBound = new TGNumberEntry(hframetxtsel);
80 hframetxtsel->AddFrame(fPEntryLowerBound, new TGLayoutHints(kLHintsLeft));
81 fPEntryFormula = new TGTextEntry(hframetxtsel);
82 hframetxtsel->AddFrame(fPEntryFormula, new TGLayoutHints(kLHintsExpandX));
83 fPEntryHigherBound = new TGNumberEntry(hframetxtsel);
84 hframetxtsel->AddFrame(fPEntryHigherBound, new TGLayoutHints(kLHintsLeft));
85 fPButtonTextDone = new TGTextButton(hframetxtsel,"Set");
86 fPButtonTextDone->Connect("Clicked()", "AliEveEventSelectorWindow",
87 this, "DoSetSelectionString()");
88 hframetxtsel->AddFrame(fPButtonTextDone, new TGLayoutHints(kLHintsLeft));
89
90 //trigger cuts frame
91 TGHorizontalFrame* hframetrigger = new TGHorizontalFrame(this);
92 AddFrame(hframetrigger, new TGLayoutHints((kLHintsLeft), 5,5));
93
94 TGLabel* triglabel = new TGLabel(hframetrigger, "Trigger type:");
95 hframetrigger->AddFrame(triglabel, new TGLayoutHints(kLHintsLeft));
96 fPCheckTriggerSimple = new TGCheckButton(hframetrigger);
97 fPCheckTriggerSimple->Connect("Toggled(Bool_t)","AliEveEventSelector",
98 fPSelector,"SetSelectOnTriggerType(Bool_t)");
99 hframetrigger->AddFrame(fPCheckTriggerSimple, new TGLayoutHints(kLHintsLeft));
100 fPComboBoxTrigger = new TGComboBox(hframetrigger);
101 fPComboBoxTrigger->Resize(100,20);
102 fPComboBoxTrigger->Connect("Selected(const char*)","AliEveEventSelectorWindow",
103 this,"DoHandleTriggerFromComboBox(const char*)");
104 hframetrigger->AddFrame(fPComboBoxTrigger, new TGLayoutHints(kLHintsLeft));
105
106 TGLabel* labelfreetrig = new TGLabel(hframetrigger, "Trigger type expression:");
107 hframetrigger->AddFrame(labelfreetrig, new TGLayoutHints(kLHintsLeft));
108 fPCheckTriggerString = new TGCheckButton(hframetrigger);
109 hframetrigger->AddFrame(fPCheckTriggerString, new TGLayoutHints(kLHintsLeft));
110 fPCheckTriggerString->Connect("Toggled(Bool_t)","AliEveEventSelector",
111 fPSelector,"SetSelectOnTriggerString(Bool_t)");
112 fPEntryTriggerSelection = new TGTextEntry(hframetrigger);
113 hframetrigger->AddFrame(fPEntryTriggerSelection, new TGLayoutHints(kLHintsExpandX));
114 TGTextButton* buttontrigsel = new TGTextButton(hframetrigger,"Set");
115 hframetrigger->AddFrame(buttontrigsel, new TGLayoutHints(kLHintsLeft));
116 buttontrigsel->Connect("Clicked()","AliEveEventSelectorWindow",
117 this, "DoSetTriggerSelectionString()");
118
119 //multiplicity cuts frame
120 TGHorizontalFrame* hframemult = new TGHorizontalFrame(this);
121 AddFrame(hframemult, new TGLayoutHints((kLHintsLeft), 5,5));
122
123 TGLabel* multlabel = new TGLabel(hframemult, "Multiplicity:");
124 hframemult->AddFrame(multlabel, new TGLayoutHints(kLHintsLeft));
125 TGCheckButton* checkmult = new TGCheckButton(hframemult);
126 checkmult->Connect("Toggled(Bool_t)", "AliEveEventSelector",
127 fPSelector,"SetSelectOnMultiplicity(Bool_t)");
128 hframemult->AddFrame(checkmult, new TGLayoutHints(kLHintsLeft));
129 fPEntryMultLow = new TGNumberEntry(hframemult);
130 hframemult->AddFrame(fPEntryMultLow, new TGLayoutHints(kLHintsLeft));
131 fPEntryMultHigh = new TGNumberEntry(hframemult);
132 hframemult->AddFrame(fPEntryMultHigh, new TGLayoutHints(kLHintsLeft));
133 TGTextButton* buttonmultset = new TGTextButton(hframemult,"Set");
134 hframemult->AddFrame(buttonmultset, new TGLayoutHints(kLHintsLeft));
135 buttonmultset->Connect("Clicked()","AliEveEventSelectorWindow",
136 this, "DoSetMultiplicityRange()");
137
138 //wrap around
139 TGHorizontalFrame* hframewrap = new TGHorizontalFrame(this);
140 AddFrame(hframewrap, new TGLayoutHints((kLHintsLeft), 5,5));
141
142 TGLabel* wraplabel = new TGLabel(hframewrap, "Wrap around at the end.");
143 hframewrap->AddFrame(wraplabel, new TGLayoutHints(kLHintsLeft));
144 TGCheckButton* checkwraparound = new TGCheckButton(hframewrap);
145 hframewrap->AddFrame(checkwraparound, new TGLayoutHints(kLHintsLeft));
146 checkwraparound->Connect("Toggled(Bool_t)","AliEveEventSelector",
147 fPSelector, "SetWrapAround(Bool_t)");
148
149 SetupTriggerSelect();
150
151 //bookkeeping
152 SetWindowName("Event Selection");
153 MapSubwindows();
154
155 Resize(GetDefaultSize());
156 MapWindow();
157}
158
159//______________________________________________________________________________
160AliEveEventSelectorWindow::~AliEveEventSelectorWindow()
161{
162}
163
164//______________________________________________________________________________
165void AliEveEventSelectorWindow::SetupTriggerSelect()
166{
167 // Do nothing if already enabled.
168 if (fPComboBoxTrigger->GetNumberOfEntries() > 0)
169 return;
170 AliEveEventManager* fM = fPSelector->GetEventManager();
171 AliESDEvent* esd = fM->GetESD();
172
173 if (esd && fM->GetESDFile() != 0)
174 {
175 TString activetrg = esd->GetESDRun()->GetActiveTriggerClasses(); //Get list of active classes
176 TObjArray* activetrgarr = activetrg.Tokenize(" "); //break up the classes string, space as separator
177 Int_t entries = activetrgarr->GetEntries(); //how many triggerclasses
178 TString entry; //to hold the triger class name
179 TObjString* entryobj;
180 if (entries == 0)
181 {
182 fPComboBoxTrigger->SetEnabled(kFALSE); //no trigger classes
183 }
184 else
185 {
186 fPComboBoxTrigger->RemoveAll(); //some initial cleanup
187 fPComboBoxTrigger->SetEnabled(kTRUE); //no trigger classes
188 //fPComboBoxTrigger->AddEntry("",-1); //first entry empty - select to not filter by trigger
189 for (Int_t i=0;i<entries;i++)
190 {
191 entryobj = (TObjString*)activetrgarr->At(i);
192 entry = entryobj->GetString();
193 fPComboBoxTrigger->AddEntry(entry.Data(), i);
194 }
195 }
196 fPComboBoxTrigger->Select(0, kTRUE); //set default no filtering and emit
197 fPComboBoxTrigger->SetEnabled(kTRUE);
198 }
199 else
200 {
201 fPComboBoxTrigger->SetEnabled(kFALSE);
202 }
203}
204
205//______________________________________________________________________________
206void AliEveEventSelectorWindow::DoSetSelectionString()
207{
208 TString str = fPEntryFormula->GetText();
209 TString s;
210 if (fPEntryLowerBound->GetNumber()==0&&fPEntryHigherBound->GetNumber()==0)
211 {
212 s = str;
213 }
214 else
215 {
216 s += "(";
217 s += str;
218 s += ")>";
219 s += fPEntryLowerBound->GetNumber();
220 s += "&&";
221 s += "(";
222 s += str;
223 s += ")<";
224 s += fPEntryHigherBound->GetNumber();
225 }
226 fPSelector->SetSelectionString(s);
227}
228
229//______________________________________________________________________________
230void AliEveEventSelectorWindow::DoDrawHistogram()
231{
232 TTree* tree = fPSelector->GetESDTree();
233 TString str = fPDrawFormula->GetText();
234 str += ">>selectionhist";
235 tree->Draw(str);
236 TH1* hist = dynamic_cast<TH1*>(gDirectory->Get("selectionhist"));
237 if (hist) hist->Draw();
238 TCanvas* canvas = fPCanvas->GetCanvas();
239 canvas->Update();
240}
241
242//______________________________________________________________________________
243void AliEveEventSelectorWindow::DoSetTriggerSelectionString()
244{
245 TString string = fPEntryTriggerSelection->GetText();
246 fPSelector->SetTriggerSelectionString(string);
247 fPEntryTriggerSelection->SetToolTipText(fPSelector->GetTriggerSelectionString());
248}
249
250//______________________________________________________________________________
251void AliEveEventSelectorWindow::DoHandleTriggerFromComboBox(const char* str)
252{
253 if (fPSelector->GetSelectOnTriggerString() && !fPSelector->GetSelectOnTriggerType())
254 {
255 fPEntryTriggerSelection->Insert(str);
256 fPEntryTriggerSelection->SetFocus();
257 }
258 if (fPSelector->GetSelectOnTriggerType())
259 fPSelector->SetTriggerType(str);
260}
261
262//______________________________________________________________________________
263void AliEveEventSelectorWindow::DoSetMultiplicityRange()
264{
265 fPSelector->SetMultiplicityLow(fPEntryMultLow->GetNumber());
266 fPSelector->SetMultiplicityHigh(fPEntryMultHigh->GetNumber());
267}