]>
Commit | Line | Data |
---|---|---|
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 | ||
24 | ClassImp(AliEveEventSelectorWindow) | |
25 | //______________________________________________________________________________ | |
26 | AliEveEventSelectorWindow::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 | //______________________________________________________________________________ | |
160 | AliEveEventSelectorWindow::~AliEveEventSelectorWindow() | |
161 | { | |
162 | } | |
163 | ||
164 | //______________________________________________________________________________ | |
165 | void 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 | //______________________________________________________________________________ | |
206 | void 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 | //______________________________________________________________________________ | |
230 | void 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 | //______________________________________________________________________________ | |
243 | void AliEveEventSelectorWindow::DoSetTriggerSelectionString() | |
244 | { | |
245 | TString string = fPEntryTriggerSelection->GetText(); | |
246 | fPSelector->SetTriggerSelectionString(string); | |
247 | fPEntryTriggerSelection->SetToolTipText(fPSelector->GetTriggerSelectionString()); | |
248 | } | |
249 | ||
250 | //______________________________________________________________________________ | |
251 | void 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 | //______________________________________________________________________________ | |
263 | void AliEveEventSelectorWindow::DoSetMultiplicityRange() | |
264 | { | |
265 | fPSelector->SetMultiplicityLow(fPEntryMultLow->GetNumber()); | |
266 | fPSelector->SetMultiplicityHigh(fPEntryMultHigh->GetNumber()); | |
267 | } |