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 #include "AliEveEventSelectorWindow.h"
8 #include "AliEveEventSelector.h"
9 #include "AliEveEventManager.h"
10 #include <TGTextEntry.h>
11 #include <TGNumberEntry.h>
12 #include <TRootEmbeddedCanvas.h>
15 #include <TGComboBox.h>
18 #include <AliESDEvent.h>
19 #include <AliESDRun.h>
21 #include <TDirectory.h>
24 ClassImp(AliEveEventSelectorWindow)
25 //______________________________________________________________________________
26 AliEveEventSelectorWindow::AliEveEventSelectorWindow(const TGWindow *p, UInt_t w, UInt_t h,
27 AliEveEventSelector* sel) :
33 fPEntryLowerBound(NULL),
34 fPEntryHigherBound(NULL),
35 fPButtonTextDone(NULL),
36 fPComboBoxTrigger(NULL),
37 fPEntryTriggerSelection(NULL),
38 fPCheckTriggerSimple(NULL),
39 fPCheckTriggerString(NULL)
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));
51 TGHorizontalFrame* hframedraw = new TGHorizontalFrame(this);
52 AddFrame(hframedraw, new TGLayoutHints((kLHintsExpandX), 5,5));
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));
67 //text selection frame
68 TGHorizontalFrame *hframetxtsel = new TGHorizontalFrame(this);
69 AddFrame(hframetxtsel, new TGLayoutHints((kLHintsExpandX), 5,5));
71 TGLabel* exprlabel = new TGLabel(hframetxtsel, "Expression:");
72 hframetxtsel->AddFrame(exprlabel, new TGLayoutHints(kLHintsLeft));
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));
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));
91 TGHorizontalFrame* hframetrigger = new TGHorizontalFrame(this);
92 AddFrame(hframetrigger, new TGLayoutHints((kLHintsLeft), 5,5));
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));
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()");
119 //multiplicity cuts frame
120 TGHorizontalFrame* hframemult = new TGHorizontalFrame(this);
121 AddFrame(hframemult, new TGLayoutHints((kLHintsLeft), 5,5));
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()");
139 TGHorizontalFrame* hframewrap = new TGHorizontalFrame(this);
140 AddFrame(hframewrap, new TGLayoutHints((kLHintsLeft), 5,5));
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)");
149 SetupTriggerSelect();
152 SetWindowName("Event Selection");
155 Resize(GetDefaultSize());
159 //______________________________________________________________________________
160 AliEveEventSelectorWindow::~AliEveEventSelectorWindow()
164 //______________________________________________________________________________
165 void AliEveEventSelectorWindow::SetupTriggerSelect()
167 // Do nothing if already enabled.
168 if (fPComboBoxTrigger->GetNumberOfEntries() > 0)
170 AliEveEventManager* fM = fPSelector->GetEventManager();
171 AliESDEvent* esd = fM->GetESD();
173 if (esd && fM->GetESDFile() != 0)
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;
182 fPComboBoxTrigger->SetEnabled(kFALSE); //no trigger classes
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++)
191 entryobj = (TObjString*)activetrgarr->At(i);
192 entry = entryobj->GetString();
193 fPComboBoxTrigger->AddEntry(entry.Data(), i);
196 fPComboBoxTrigger->Select(0, kTRUE); //set default no filtering and emit
197 fPComboBoxTrigger->SetEnabled(kTRUE);
201 fPComboBoxTrigger->SetEnabled(kFALSE);
205 //______________________________________________________________________________
206 void AliEveEventSelectorWindow::DoSetSelectionString()
208 TString str = fPEntryFormula->GetText();
210 if (fPEntryLowerBound->GetNumber()==0&&fPEntryHigherBound->GetNumber()==0)
219 s += fPEntryLowerBound->GetNumber();
224 s += fPEntryHigherBound->GetNumber();
226 fPSelector->SetSelectionString(s);
229 //______________________________________________________________________________
230 void AliEveEventSelectorWindow::DoDrawHistogram()
232 TTree* tree = fPSelector->GetESDTree();
233 TString str = fPDrawFormula->GetText();
234 str += ">>selectionhist";
236 TH1* hist = dynamic_cast<TH1*>(gDirectory->Get("selectionhist"));
237 if (hist) hist->Draw();
238 TCanvas* canvas = fPCanvas->GetCanvas();
242 //______________________________________________________________________________
243 void AliEveEventSelectorWindow::DoSetTriggerSelectionString()
245 TString string = fPEntryTriggerSelection->GetText();
246 fPSelector->SetTriggerSelectionString(string);
247 fPEntryTriggerSelection->SetToolTipText(fPSelector->GetTriggerSelectionString());
250 //______________________________________________________________________________
251 void AliEveEventSelectorWindow::DoHandleTriggerFromComboBox(const char* str)
253 if (fPSelector->GetSelectOnTriggerString() && !fPSelector->GetSelectOnTriggerType())
255 fPEntryTriggerSelection->Insert(str);
256 fPEntryTriggerSelection->SetFocus();
258 if (fPSelector->GetSelectOnTriggerType())
259 fPSelector->SetTriggerType(str);
262 //______________________________________________________________________________
263 void AliEveEventSelectorWindow::DoSetMultiplicityRange()
265 fPSelector->SetMultiplicityLow(fPEntryMultLow->GetNumber());
266 fPSelector->SetMultiplicityHigh(fPEntryMultHigh->GetNumber());