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 **************************************************************************/
7 ///////////////////////////////////////////////////////////////////////////
9 // implementation of a GUI for the event/trigger selection
11 // origin: Mikolaj Krzewicki, mikolaj.krzewicki@cern.ch
13 //////////////////////////////////////////////////////////////////////////
15 #include "AliEveEventSelectorWindow.h"
16 #include "AliEveEventSelector.h"
17 #include "AliEveEventManager.h"
18 #include <TGTextEntry.h>
19 #include <TGNumberEntry.h>
20 #include <TRootEmbeddedCanvas.h>
23 #include <TGComboBox.h>
26 #include <AliESDEvent.h>
27 #include <AliESDRun.h>
29 #include <TDirectory.h>
32 ClassImp(AliEveEventSelectorWindow)
33 //______________________________________________________________________________
34 AliEveEventSelectorWindow::AliEveEventSelectorWindow(const TGWindow *p, UInt_t w, UInt_t h,
35 AliEveEventSelector* sel) :
41 fPEntryLowerBound(NULL),
42 fPEntryHigherBound(NULL),
43 fPButtonTextDone(NULL),
44 fPComboBoxTrigger(NULL),
45 fPEntryTriggerSelection(NULL),
46 fPCheckTriggerSimple(NULL),
47 fPCheckTriggerString(NULL)
52 fPCanvas = new TRootEmbeddedCanvas(0,this);
53 Int_t wid = fPCanvas->GetCanvasWindowId();
54 TCanvas *myc = new TCanvas("MyCanvas", 10,10,wid);
55 fPCanvas->AdoptCanvas(myc);
56 AddFrame(fPCanvas, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
59 TGHorizontalFrame* hframedraw = new TGHorizontalFrame(this);
60 AddFrame(hframedraw, new TGLayoutHints((kLHintsExpandX), 5,5));
62 TGLabel* drawlabel = new TGLabel(hframedraw, "Draw expression:");
63 hframedraw->AddFrame(drawlabel, new TGLayoutHints((kLHintsLeft)));
64 fPDrawFormula = new TGTextEntry(hframedraw);
65 hframedraw->AddFrame(fPDrawFormula, new TGLayoutHints(kLHintsExpandX));
66 TGTextButton* buttondraw = new TGTextButton(hframedraw,"Draw");
67 buttondraw->Connect("Clicked()","AliEveEventSelectorWindow",
68 this, "DoDrawHistogram()");
69 hframedraw->AddFrame(buttondraw, new TGLayoutHints(kLHintsLeft));
70 TGTextButton* buttonview = new TGTextButton(hframedraw,"Browse");
71 buttonview->Connect("Clicked()","TTree",fPSelector->GetESDTree(),"StartViewer()");
72 hframedraw->AddFrame(buttonview, new TGLayoutHints(kLHintsLeft));
75 //text selection frame
76 TGHorizontalFrame *hframetxtsel = new TGHorizontalFrame(this);
77 AddFrame(hframetxtsel, new TGLayoutHints((kLHintsExpandX), 5,5));
79 TGLabel* exprlabel = new TGLabel(hframetxtsel, "Expression:");
80 hframetxtsel->AddFrame(exprlabel, new TGLayoutHints(kLHintsLeft));
82 TGCheckButton* checktextsel = new TGCheckButton(hframetxtsel);
83 checktextsel->Connect("Toggled(Bool_t)", "AliEveEventSelector",
84 fPSelector, "SetSelectOnString(Bool_t)");
85 checktextsel->SetState(fPSelector->GetSelectOnString() ? kButtonDown : kButtonUp);
86 hframetxtsel->AddFrame(checktextsel, new TGLayoutHints(kLHintsLeft));
88 fPEntryLowerBound = new TGNumberEntry(hframetxtsel);
89 hframetxtsel->AddFrame(fPEntryLowerBound, new TGLayoutHints(kLHintsLeft));
90 fPEntryFormula = new TGTextEntry(hframetxtsel);
91 hframetxtsel->AddFrame(fPEntryFormula, new TGLayoutHints(kLHintsExpandX));
92 fPEntryHigherBound = new TGNumberEntry(hframetxtsel);
93 hframetxtsel->AddFrame(fPEntryHigherBound, new TGLayoutHints(kLHintsLeft));
94 fPButtonTextDone = new TGTextButton(hframetxtsel,"Set");
95 fPButtonTextDone->Connect("Clicked()", "AliEveEventSelectorWindow",
96 this, "DoSetSelectionString()");
97 hframetxtsel->AddFrame(fPButtonTextDone, new TGLayoutHints(kLHintsLeft));
100 TGHorizontalFrame* hframetrigger = new TGHorizontalFrame(this);
101 AddFrame(hframetrigger, new TGLayoutHints((kLHintsLeft), 5,5));
103 TGLabel* triglabel = new TGLabel(hframetrigger, "Trigger type:");
104 hframetrigger->AddFrame(triglabel, new TGLayoutHints(kLHintsLeft));
105 fPCheckTriggerSimple = new TGCheckButton(hframetrigger);
106 fPCheckTriggerSimple->Connect("Toggled(Bool_t)","AliEveEventSelector",
107 fPSelector,"SetSelectOnTriggerType(Bool_t)");
108 fPCheckTriggerSimple->SetState(fPSelector->GetSelectOnTriggerType() ? kButtonDown : kButtonUp );
109 hframetrigger->AddFrame(fPCheckTriggerSimple, new TGLayoutHints(kLHintsLeft));
110 fPComboBoxTrigger = new TGComboBox(hframetrigger);
111 fPComboBoxTrigger->Resize(100,20);
112 fPComboBoxTrigger->Connect("Selected(const char*)","AliEveEventSelectorWindow",
113 this,"DoHandleTriggerFromComboBox(const char*)");
114 hframetrigger->AddFrame(fPComboBoxTrigger, new TGLayoutHints(kLHintsLeft));
116 TGLabel* labelfreetrig = new TGLabel(hframetrigger, "Trigger type expression:");
117 hframetrigger->AddFrame(labelfreetrig, new TGLayoutHints(kLHintsLeft));
118 fPCheckTriggerString = new TGCheckButton(hframetrigger);
119 hframetrigger->AddFrame(fPCheckTriggerString, new TGLayoutHints(kLHintsLeft));
120 fPCheckTriggerString->Connect("Toggled(Bool_t)","AliEveEventSelector",
121 fPSelector,"SetSelectOnTriggerString(Bool_t)");
122 fPCheckTriggerString->SetState(fPSelector->GetSelectOnTriggerString() ? kButtonDown : kButtonUp );
123 fPEntryTriggerSelection = new TGTextEntry(hframetrigger);
124 hframetrigger->AddFrame(fPEntryTriggerSelection, new TGLayoutHints(kLHintsExpandX));
125 TGTextButton* buttontrigsel = new TGTextButton(hframetrigger,"Set");
126 hframetrigger->AddFrame(buttontrigsel, new TGLayoutHints(kLHintsLeft));
127 buttontrigsel->Connect("Clicked()","AliEveEventSelectorWindow",
128 this, "DoSetTriggerSelectionString()");
130 //multiplicity cuts frame
131 TGHorizontalFrame* hframemult = new TGHorizontalFrame(this);
132 AddFrame(hframemult, new TGLayoutHints((kLHintsLeft), 5,5));
134 TGLabel* multlabel = new TGLabel(hframemult, "Multiplicity:");
135 hframemult->AddFrame(multlabel, new TGLayoutHints(kLHintsLeft));
136 TGCheckButton* checkmult = new TGCheckButton(hframemult);
137 checkmult->Connect("Toggled(Bool_t)", "AliEveEventSelector",
138 fPSelector,"SetSelectOnMultiplicity(Bool_t)");
139 checkmult->SetState(fPSelector->GetSelectOnMultiplicity() ? kButtonDown : kButtonUp );
140 hframemult->AddFrame(checkmult, new TGLayoutHints(kLHintsLeft));
141 fPEntryMultLow = new TGNumberEntry(hframemult);
142 hframemult->AddFrame(fPEntryMultLow, new TGLayoutHints(kLHintsLeft));
143 fPEntryMultHigh = new TGNumberEntry(hframemult);
144 hframemult->AddFrame(fPEntryMultHigh, new TGLayoutHints(kLHintsLeft));
145 TGTextButton* buttonmultset = new TGTextButton(hframemult,"Set");
146 hframemult->AddFrame(buttonmultset, new TGLayoutHints(kLHintsLeft));
147 buttonmultset->Connect("Clicked()","AliEveEventSelectorWindow",
148 this, "DoSetMultiplicityRange()");
151 TGHorizontalFrame* hframewrap = new TGHorizontalFrame(this);
152 AddFrame(hframewrap, new TGLayoutHints((kLHintsLeft), 5,5));
154 TGLabel* wraplabel = new TGLabel(hframewrap, "Wrap around at the end.");
155 hframewrap->AddFrame(wraplabel, new TGLayoutHints(kLHintsLeft));
156 TGCheckButton* checkwraparound = new TGCheckButton(hframewrap);
157 hframewrap->AddFrame(checkwraparound, new TGLayoutHints(kLHintsLeft));
158 checkwraparound->Connect("Toggled(Bool_t)","AliEveEventSelector",
159 fPSelector, "SetWrapAround(Bool_t)");
160 checkwraparound->SetState(fPSelector->GetWrapAround() ? kButtonDown : kButtonUp );
162 SetupTriggerSelect();
165 SetWindowName("Event Selection");
168 Resize(GetDefaultSize());
172 //______________________________________________________________________________
173 AliEveEventSelectorWindow::~AliEveEventSelectorWindow()
178 //______________________________________________________________________________
179 void AliEveEventSelectorWindow::SetupTriggerSelect()
181 //Set up the list of available triggers
183 // Do nothing if already enabled.
184 if (fPComboBoxTrigger->GetNumberOfEntries() > 0)
186 AliEveEventManager* fM = fPSelector->GetEventManager();
187 AliESDEvent* esd = fM->GetESD();
189 if (esd && fM->GetESDFile() != 0)
191 TString activetrg = esd->GetESDRun()->GetActiveTriggerClasses(); //Get list of active classes
192 TObjArray* activetrgarr = activetrg.Tokenize(" "); //break up the classes string, space as separator
193 Int_t entries = activetrgarr->GetEntries(); //how many triggerclasses
194 TString entry; //to hold the triger class name
195 TObjString* entryobj;
198 fPComboBoxTrigger->SetEnabled(kFALSE); //no trigger classes
202 fPComboBoxTrigger->RemoveAll(); //some initial cleanup
203 fPComboBoxTrigger->SetEnabled(kTRUE); //no trigger classes
204 //fPComboBoxTrigger->AddEntry("",-1); //first entry empty - select to not filter by trigger
205 for (Int_t i=0;i<entries;i++)
207 entryobj = (TObjString*)activetrgarr->At(i);
208 entry = entryobj->GetString();
209 fPComboBoxTrigger->AddEntry(entry.Data(), i);
212 fPComboBoxTrigger->Select(0, kTRUE); //set default no filtering and emit
213 fPComboBoxTrigger->SetEnabled(kTRUE);
217 fPComboBoxTrigger->SetEnabled(kFALSE);
221 //______________________________________________________________________________
222 void AliEveEventSelectorWindow::DoSetSelectionString()
224 //process the entered formula and send it to the selector
226 TString str = fPEntryFormula->GetText();
228 if (fPEntryLowerBound->GetNumber()==0&&fPEntryHigherBound->GetNumber()==0)
237 s += fPEntryLowerBound->GetNumber();
242 s += fPEntryHigherBound->GetNumber();
244 fPSelector->SetSelectionString(s);
247 //______________________________________________________________________________
248 void AliEveEventSelectorWindow::DoDrawHistogram()
250 //Draw histogram with formula in the draw field
252 TTree* tree = fPSelector->GetESDTree();
253 TString str = fPDrawFormula->GetText();
254 str += ">>selectionhist";
256 TH1* hist = dynamic_cast<TH1*>(gDirectory->Get("selectionhist"));
257 if (hist) hist->Draw();
258 TCanvas* canvas = fPCanvas->GetCanvas();
262 //______________________________________________________________________________
263 void AliEveEventSelectorWindow::DoSetTriggerSelectionString()
265 //Set trigger selection formula
267 TString string = fPEntryTriggerSelection->GetText();
268 fPSelector->SetTriggerSelectionString(string);
269 fPEntryTriggerSelection->SetToolTipText(fPSelector->GetTriggerSelectionString());
272 //______________________________________________________________________________
273 void AliEveEventSelectorWindow::DoHandleTriggerFromComboBox(const char* str)
275 //Dispatch the trigger selection to proper destination
277 if (fPSelector->GetSelectOnTriggerString() && !fPSelector->GetSelectOnTriggerType())
279 fPEntryTriggerSelection->Insert(str);
280 fPEntryTriggerSelection->SetFocus();
282 if (fPSelector->GetSelectOnTriggerType())
283 fPSelector->SetTriggerType(str);
286 //______________________________________________________________________________
287 void AliEveEventSelectorWindow::DoSetMultiplicityRange()
289 //Set the multiplicity range
291 fPSelector->SetMultiplicityLow(fPEntryMultLow->GetNumber());
292 fPSelector->SetMultiplicityHigh(fPEntryMultHigh->GetNumber());