]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/Alieve/CascadeEditors.cxx
Remove MCTrackRef class.
[u/mrichter/AliRoot.git] / EVE / Alieve / CascadeEditors.cxx
CommitLineData
ed412809 1
2/***********************************************************************
3 This editor appears in the Reve window when v0 are visualize.
4It allows to select the v0 as a function of some useful parameters.
5
6Ludovic Gaudichet (gaudichet@to.infn.it)
7************************************************************************/
8
9#include "CascadeEditors.h"
10#include <Alieve/Cascade.h>
11
12#include <Reve/RGValuators.h>
13
14#include <TVirtualPad.h>
15#include <TColor.h>
16
17#include <TGLabel.h>
18#include <TGButton.h>
19#include <TGNumberEntry.h>
20#include <TGColorSelect.h>
21#include <TGDoubleSlider.h>
22
23#include <TGTab.h>
24#include <TRootEmbeddedCanvas.h>
25#include <TCanvas.h>
26#include <TH1.h>
27#include <TH1F.h>
28#include <TH2F.h>
29
30
31using namespace Reve;
32using namespace Alieve;
33
34//______________________________________________________________________
35// CascadeListEditor
36//
37
38ClassImp(Alieve::CascadeListEditor)
39
40CascadeListEditor::CascadeListEditor(const TGWindow *p,
41 Int_t width, Int_t height,
42 UInt_t options, Pixel_t back) :
43 TGedFrame(p, width, height, options | kVerticalFrame, back),
44 fMList(0),
45 fRnrV0Daughters(0),
46 fRnrV0path(0),
47 fRnrVtx(0),
48 fRnrBach(0),
49 fRnrCasPath(0),
50 fMainTabA(0),
51 fMainTabB(0)
52{
53 MakeTitle("CascadeList");
54
55 //TGHorizontalFrame* frame = new TGHorizontalFrame(this);
56
57 // --- Rendering control
58
59 fRnrVtx = new TGCheckButton(this, "Render v0 and cascade vertices");
60 AddFrame(fRnrVtx, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
61 fRnrVtx->Connect("Toggled(Bool_t)",
62 "Alieve::CascadeListEditor", this, "DoRnrVtx()");
63
64 fRnrV0path = new TGCheckButton(this, "Render v0 path");
65 AddFrame(fRnrV0path, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
66 fRnrV0path->Connect("Toggled(Bool_t)",
67 "Alieve::CascadeListEditor", this, "DoRnrV0path()");
68
69 fRnrCasPath = new TGCheckButton(this, "Render cascade path");
70 AddFrame(fRnrCasPath, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
71 fRnrCasPath->Connect("Toggled(Bool_t)",
72 "Alieve::CascadeListEditor", this, "DoRnrCasPath()");
73
74 fRnrV0Daughters = new TGCheckButton(this, "Render v0 daughter tracks");
75 AddFrame(fRnrV0Daughters, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
76 fRnrV0Daughters->Connect("Toggled(Bool_t)",
77 "Alieve::CascadeListEditor", this, "DoRnrV0Daughters()");
78
79 fRnrBach = new TGCheckButton(this, "Render bachelor track");
80 AddFrame(fRnrBach, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
81 fRnrBach->Connect("Toggled(Bool_t)",
82 "Alieve::CascadeListEditor", this, "DoRnrBach()");
83
84 for (Int_t i=0; i<fgkNRange; i++) fRange[i]=0;
85 for (Int_t i=0; i<fgkNCanvas; i++) fCanvasA[i]=0;
86 for (Int_t i=0; i<fgkNCanvas; i++) fCanvasB[i]=0;
87
88 AddSelectTab();
89 AddSeeTab();
90
91 TGTextButton* resetCutsButton = new TGTextButton(this, "Reset all cuts", 40);
92 resetCutsButton->Connect("Clicked()", "Alieve::CascadeListEditor", this, "ResetCuts()");
93 AddFrame(resetCutsButton, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
94}
95
96CascadeListEditor::~CascadeListEditor()
97{}
98
99
100//_________________________________________________________________________
101void CascadeListEditor::SetModel(TObject* obj)
102{
103 fMList = dynamic_cast<CascadeList*>(obj);
104
105 for (Int_t i=0; i<fgkNRange; i++)
106 if (fRange[i])
107 fRange[i]->SetValues( fMList->GetMin(i), fMList->GetMax(i) );
108
109 fRnrV0Daughters->SetState(fMList->GetRnrV0Daughters() ? kButtonDown : kButtonUp);
110 fRnrV0path->SetState(fMList->GetRnrV0path() ? kButtonDown : kButtonUp);
111 fRnrVtx->SetState(fMList->GetRnrCasVtx() ? kButtonDown : kButtonUp);
112 fRnrBach->SetState(fMList->GetRnrBachelor() ? kButtonDown : kButtonUp);
113 fRnrCasPath->SetState(fMList->GetRnrCasPath() ? kButtonDown : kButtonUp);
114
115 FillCanvas();
116}
117
118
119//_________________________________________________________________________
120TGCompositeFrame* CascadeListEditor::AddTab(TGTab* tab, Int_t i, Int_t can,
121 char *name) {
122
123 TGCompositeFrame* frameTab = tab->AddTab(name);
124 frameTab->SetLayoutManager(new TGVerticalLayout( frameTab ));
125
126 TRootEmbeddedCanvas** embeddedCanvas = 0;
127
128 if (can==1) embeddedCanvas = &fCanvasA[i];
129 else if (can==2) embeddedCanvas = &fCanvasB[i];
130
131 *embeddedCanvas = new TRootEmbeddedCanvas("EmbeddedCanvas", frameTab, 200, 200);
132 TCanvas *c1 = (*embeddedCanvas)->GetCanvas();
133 c1->SetBorderMode(0);
134 c1->SetTicks(1,0);
135 c1->SetGrid();
136 c1->SetBorderMode(0);
137
138 frameTab->AddFrame(*embeddedCanvas, new TGLayoutHints(kLHintsTop|kLHintsExpandX,
139 0, 0, 0, 0));
140 return frameTab;
141}
142
143
144//_________________________________________________________________________
145TGCompositeFrame** CascadeListEditor::CreateTab(TGTab **pMainTab, TGTab **ptab, Int_t can) {
146
147 //------
148 // tab widget
149 pMainTab[0] = new TGTab(this,0,0);
150 pMainTab[0]->Connect("Selected(Int_t)", "Alieve::CascadeListEditor", this, "UpdateSelectedTab()");
151 this->AddFrame(pMainTab[0], new TGLayoutHints( kLHintsTop | kLHintsExpandX,2,2,2,2));
152
153 //------
154 // container of "Tab1"
155 TGCompositeFrame *frameTab1 = pMainTab[0]->AddTab("ident.");
156 frameTab1->SetLayoutManager(new TGVerticalLayout(frameTab1));
157
158 // tab widget
159 ptab[0] = new TGTab(frameTab1,2,2);
160 ptab[0]->Resize(ptab[0]->GetDefaultSize());
161 // The following is for updating the canvas of a tab if this one is selected
162 // (it updates every canvas)
163 ptab[0]->Connect("Selected(Int_t)", "Alieve::CascadeListEditor", this, "UpdateSelectedTab()");
164 frameTab1->AddFrame(ptab[0], new TGLayoutHints(kLHintsLeft| kLHintsExpandX,0,0,0,0));
165
166 //------
167 // container of "Tab2"
168 TGCompositeFrame *frameTab2 = pMainTab[0]->AddTab("cascade");
169 frameTab2->SetLayoutManager(new TGVerticalLayout(frameTab2));
170
171 // tab widget
172 ptab[1] = new TGTab(frameTab2,440,299);
173 ptab[1]->Resize(ptab[1]->GetDefaultSize());
174 ptab[1]->Connect("Selected(Int_t)", "Alieve::CascadeListEditor", this, "UpdateSelectedTab()");
175 frameTab2->AddFrame(ptab[1], new TGLayoutHints(kLHintsLeft| kLHintsExpandX ,0,0,0,0));
176
177 //------
178 // container of "Tab3"
179 TGCompositeFrame *frameTab3 = pMainTab[0]->AddTab("V0daugh/bach.");
180 frameTab3->SetLayoutManager(new TGVerticalLayout(frameTab3));
181
182 // tab widget
183 ptab[2] = new TGTab(frameTab3,440,299);
184 ptab[2]->Resize(ptab[2]->GetDefaultSize());
185 ptab[2]->Connect("Selected(Int_t)", "Alieve::CascadeListEditor", this, "UpdateSelectedTab()");
186 frameTab3->AddFrame(ptab[2], new TGLayoutHints(kLHintsLeft| kLHintsExpandX ,0,0,0,0));
187
188 //------
189 TGCompositeFrame **frameTab = new TGCompositeFrame*[fgkNCanvas];
190
191 frameTab[0] = AddTab(ptab[0], 0, can, "Xi");
192 frameTab[1] = AddTab(ptab[0], 1, can, "Omega");
193 frameTab[2] = AddTab(ptab[0], 2, can, "Arm.Podo.");
194 frameTab[3] = AddTab(ptab[0], 3, can, "Index");
195
196 frameTab[4] = AddTab(ptab[1], 4, can, "cosPointing");
197 frameTab[5] = AddTab(ptab[1], 5, can, "bachV0DCA");
198 frameTab[6] = AddTab(ptab[1], 6, can, "radius");
199 frameTab[7] = AddTab(ptab[1], 7, can, "Pt");
200 frameTab[8] = AddTab(ptab[1], 8, can, "eta");
201
202 frameTab[9] = AddTab(ptab[2], 9, can, "neg Pt");
203 frameTab[10] = AddTab(ptab[2], 10, can, "neg eta");
204 frameTab[11] = AddTab(ptab[2], 11, can, "pos Pt");
205 frameTab[12] = AddTab(ptab[2], 12, can, "pos eta");
206 frameTab[13] = AddTab(ptab[2], 13, can, "bach Pt");
207 frameTab[14] = AddTab(ptab[2], 14, can, "bach eta");
208
209 pMainTab[0]->SetTab(0);
210 ptab[0]->SetTab(0);
211 ptab[1]->SetTab(0);
212 ptab[2]->SetTab(0);
213
214 Pixel_t darkgrey;
215 gClient->GetColorByName("grey50", darkgrey);
216 ptab[0]->SetBackgroundColor(darkgrey);
217 ptab[1]->SetBackgroundColor(darkgrey);
218 ptab[2]->SetBackgroundColor(darkgrey);
219
220 return frameTab;
221}
222
223
224//_________________________________________________________________________
225void CascadeListEditor::AddValuator(TGCompositeFrame* frame, char *name,
226 Float_t min, Float_t max, Int_t pres,
227 char *func, Int_t iHist) {
228
229 TGCompositeFrame* downFrame = new TGCompositeFrame(frame,
230 60, 60, kHorizontalFrame);
231
232 // --- Selectors
233 fRange[iHist] = new RGDoubleValuator(downFrame, name, 200, 0);
234 fRange[iHist]->SetNELength(6);
235 fRange[iHist]->Build();
236 fRange[iHist]->GetSlider()->SetWidth(200);
237
238 fRange[iHist]->SetLimits(min, max, TGNumberFormat::kNESRealTwo);
239 if (pres==0)
240 fRange[iHist]->SetLimits(min, max, TGNumberFormat::kNESInteger);
241 else if (pres==3)
242 fRange[iHist]->SetLimits(min, max, TGNumberFormat::kNESRealThree);
243 else if (pres==4)
244 fRange[iHist]->SetLimits(min, max, TGNumberFormat::kNESRealFour);
245 else if (pres==5)
246 fRange[iHist]->SetLimits(min, max, TGNumberFormat::kNESReal);
247
248 fRange[iHist]->Connect("ValueSet()",
249 "Alieve::CascadeListEditor", this, func);
250 downFrame->AddFrame(fRange[iHist], new TGLayoutHints(kLHintsLeft,
251 0, 0, 0, 0));
252
253 TGTextButton* adjustButton = new TGTextButton(downFrame, "Adjust Hist", 40);
254
255 char ch[40];
256 sprintf(ch,"AdjustHist(=%i)",iHist);
257 adjustButton->Connect("Clicked()", "Alieve::CascadeListEditor", this, ch);
258 downFrame->AddFrame(adjustButton, new TGLayoutHints(kLHintsTop, 0, 0, 0, 0));
259
260 frame->AddFrame(downFrame, new TGLayoutHints(kLHintsTop| kLHintsExpandY,
261 0, 0, 0, 0));
262}
263
264
265//_________________________________________________________________________
266void CascadeListEditor::AddSelectTab() {
267
268 TGCompositeFrame** tab = CreateTab(&fMainTabA, fTabA, 1);
269
270 AddValuator(tab[0], "mass Xi", 0, 5, 3, "MassXiRange()", 0);
271 AddValuator(tab[1], "mass Omega", 0, 5, 3, "MassOmegaRange()", 1);
272
273 AddValuator(tab[3], "Index", 0, 1e5, 0, "IndexRange()", 2);
274 AddValuator(tab[4], "cos pointing angle", 0.8, 1, 5, "CosPointingRange()", 3);
275 AddValuator(tab[5], "bach-V0 DCA", 0, 5, 3, "BachV0DCARange()", 4);
276 AddValuator(tab[6], "radius", 0, 100, 2, "RadiusRange()", 5);
277 AddValuator(tab[7], "Pt", 0, 10, 2, "PtRange()", 6);
278 AddValuator(tab[8], "Pseudo-rapidity", -2, 2, 2, "PseudoRapRange()", 7);
279
280 AddValuator(tab[9], "neg Pt", 0, 10, 2, "NegPtRange()", 8);
281 AddValuator(tab[10], "neg pseudo-rapidity", -2, 2, 2, "NegEtaRange()", 9);
282 AddValuator(tab[11], "pos Pt", 0, 10, 2, "PosPtRange()", 10);
283 AddValuator(tab[12], "pos pseudo-rapidity", -2, 2, 2, "PosEtaRange()", 11);
284 AddValuator(tab[13], "bach. Pt", 0, 10, 2, "BachPtRange()", 12);
285 AddValuator(tab[14], "bach. pseudo-rapidity", -2, 2, 2, "BachEtaRange()", 13);
286
287 delete[] tab;
288}
289
290
291//_________________________________________________________________________
292void CascadeListEditor::AddSeeTab() {
293
294 TGCompositeFrame** tab = CreateTab(&fMainTabB, fTabB, 2);
295 delete[] tab;
296}
297
298
299//_________________________________________________________________________
300void CascadeListEditor::AdjustHist(Int_t iHist) {
301
302 if (! fMList) return;
303 fMList->AdjustHist(iHist);
304
305 FillCanvas();
306}
307
308//_________________________________________________________________________
309void CascadeListEditor::ResetCuts() {
310
311 if (! fMList) return;
312
313 Float_t min,max;
314
315 for (Int_t i=0; i<fgkNRange;i++) {
316
317 if (i==2) continue;
318 min = fRange[i]->GetLimitMin();
319 max = fRange[i]->GetLimitMax();
320 fMList->SetMin(i, min);
321 fMList->SetMax(i, max);
322 fRange[i]->SetValues(min, max);
323 fMList->AdjustHist(i);
324 }
325
326 // for the Index we scan its actual range
327 Int_t imin, imax;
328 fMList->GetCasIndexRange(imin, imax);
329 if (imin<imax) {
330 Int_t minH = imin-(imax-imin)/20;
331 Int_t maxH = imax+(imax-imin)/20;
332 fMList->SetMin(2, minH);
333 fMList->SetMax(2, maxH);
334 fRange[2]->SetLimits(minH, maxH, TGNumberFormat::kNESInteger);
335 fRange[2]->SetValues(minH, maxH);
336 fMList->AdjustHist(2);
337
338 }
339 FillCanvas();
340 Update();
341}
342
343
344//_________________________________________________________________________
345void CascadeListEditor::FillCanvas() {
346
347 fMList->FilterAll();
348
349 TCanvas *c1, *c1b;
350 TH1F *hist = 0;
351 TH2F *hist2D = 0;
352 Bool_t is2D;
353
354 Int_t canvasMap[fgkNCanvas]={0,1,1000,2,3,4,5,6,7,8,9,10,11,12,13};
355
356 for (Int_t i=0; i<fgkNCanvas; i++)
357 if (fCanvasA[i]) {
358
359 is2D = canvasMap[i]>999;
360
361 if (is2D) hist2D = fMList->GetHist2D(canvasMap[i]-1000);
362 else hist = fMList->GetHist(canvasMap[i]);
363
364 c1 = fCanvasA[i]->GetCanvas();
365 c1->cd();
366 if (is2D) hist2D->Draw("colz"); else hist->Draw();
367 c1->Modified();
368 c1->Update();
369
370 c1b = fCanvasB[i]->GetCanvas();
371 c1b->cd();
372 if (is2D) hist2D->Draw("colz"); else hist->Draw();
373 c1b->Modified();
374 c1b->Update();
375 }
376 UpdateSelectedTab();
377}
378//_________________________________________________________________________
379void CascadeListEditor::UpdateSelectedTab() {
380
381 Int_t i,j;
382 Pixel_t yellow;
383 Pixel_t grey;
384 gClient->GetColorByName("yellow", yellow);
385 gClient->GetColorByName("grey", grey);
386
387 TGTabElement *tabElem;
388 for (i=0; i<fMainTabA->GetNumberOfTabs(); i++) {
389
390 tabElem = fMainTabA->GetTabTab(i);
391 tabElem->ChangeBackground(grey);
392
393 for (j=0; j<fTabA[i]->GetNumberOfTabs();j++) {
394 tabElem = fTabA[i]->GetTabTab(j);
395 tabElem->ChangeBackground(grey);
396 }
397 }
398
399 Int_t currentTab = fMainTabA->GetCurrent();
400 Int_t currentSubTab = fTabA[currentTab]->GetCurrent();
401 tabElem = fMainTabA->GetTabTab(currentTab);
402 tabElem->ChangeBackground(yellow);
403 tabElem = fTabA[currentTab]->GetTabTab(currentSubTab);
404 tabElem->ChangeBackground(yellow);
405
406 TCanvas *c1;
407 Int_t iCan = 0;
408 i=0;
409
410 while (currentTab>i) {
411 iCan += fTabA[i]->GetNumberOfTabs();
412 i++;
413 }
414 iCan += currentSubTab;
415 c1 = fCanvasA[iCan]->GetCanvas();
416 c1->GetCanvas()->Modified();
417 c1->GetCanvas()->Update();
418
419 //---
420
421 for (i=0; i<fMainTabB->GetNumberOfTabs(); i++) {
422
423 tabElem = fMainTabB->GetTabTab(i);
424 tabElem->ChangeBackground(grey);
425
426 for (j=0; j<fTabB[i]->GetNumberOfTabs();j++) {
427 tabElem = fTabB[i]->GetTabTab(j);
428 tabElem->ChangeBackground(grey);
429 }
430 }
431
432 currentTab = fMainTabB->GetCurrent();
433 currentSubTab = fTabB[currentTab]->GetCurrent();
434 tabElem = fMainTabB->GetTabTab(currentTab);
435 tabElem->ChangeBackground(yellow);
436 tabElem = fTabB[currentTab]->GetTabTab(currentSubTab);
437 tabElem->ChangeBackground(yellow);
438
439 iCan = 0;
440 i=0;
441
442 while (currentTab>i) {
443 iCan += fTabB[i]->GetNumberOfTabs();
444 i++;
445 }
446 iCan += currentSubTab;
447 c1 = fCanvasB[iCan]->GetCanvas();
448 c1->GetCanvas()->Modified();
449 c1->GetCanvas()->Update();
450}
451
452
453//_________________________________________________________________________
454void CascadeListEditor::UpdateAll(Int_t iCanA) {
455
456 TCanvas *c1 = fCanvasA[iCanA]->GetCanvas();
457 c1->Modified();
458 c1->Update();
459
460 static Int_t iCan, i;
461 iCan=0;
462 i=0;
463 while (fMainTabB->GetCurrent()>i) {
464 iCan += fTabB[i]->GetNumberOfTabs();
465 i++;
466 }
467 iCan += fTabB[i]->GetCurrent();
468 c1 = fCanvasB[iCan]->GetCanvas();
469 c1->GetCanvas()->Modified();
470 c1->GetCanvas()->Update();
471
472 Update();
473}
474
475
476//_________________________________________________________________________
477
478void CascadeListEditor::DoRnrVtx()
479{
480 fMList->SetRnrCasVtx(fRnrVtx->IsOn());
481 Update();
482}
483
484void CascadeListEditor::DoRnrV0path()
485{
486 fMList->SetRnrV0path(fRnrV0path->IsOn());
487 Update();
488}
489
490void CascadeListEditor::DoRnrV0Daughters()
491{
492 fMList->SetRnrV0Daughters(fRnrV0Daughters->IsOn());
493 Update();
494}
495
496void CascadeListEditor::DoRnrBach()
497{
498 fMList->SetRnrBachelor(fRnrBach->IsOn());
499 Update();
500}
501
502void CascadeListEditor::DoRnrCasPath()
503{
504 fMList->SetRnrCasPath(fRnrCasPath->IsOn());
505 Update();
506}
507
508
509//_________________________________________________________________________
510void CascadeListEditor::MassXiRange() {
511
512 fMList->XiMassFilter(fRange[0]->GetMin(), fRange[0]->GetMax());
513 UpdateAll(0);
514}
515
516//_________________________________________________________________________
517 void CascadeListEditor::MassOmegaRange() {
518 fMList->OmegaMassFilter(fRange[1]->GetMin(), fRange[1]->GetMax());
519 UpdateAll(1);
520}
521
522//_________________________________________________________________________
523 void CascadeListEditor::IndexRange() {
524 fMList->IndexFilter(fRange[2]->GetMin(), fRange[2]->GetMax());
525 UpdateAll(3);
526}
527//_________________________________________________________________________
528 void CascadeListEditor::CosPointingRange() {
529 fMList->CosPointingFilter(fRange[3]->GetMin(), fRange[3]->GetMax());
530 UpdateAll(4);
531}
532
533//_________________________________________________________________________
534 void CascadeListEditor::BachV0DCARange() {
535 fMList->BachV0DCAFilter(fRange[4]->GetMin(), fRange[4]->GetMax());
536 UpdateAll(5);
537}
538
539//_________________________________________________________________________
540 void CascadeListEditor::RadiusRange() {
541 fMList->RadiusFilter(fRange[5]->GetMin(), fRange[5]->GetMax());
542 UpdateAll(6);
543}
544
545//_________________________________________________________________________
546 void CascadeListEditor::PtRange() {
547 fMList->PtFilter(fRange[6]->GetMin(), fRange[6]->GetMax());
548 UpdateAll(7);
549}
550
551//_________________________________________________________________________
552 void CascadeListEditor::PseudoRapRange() {
553 fMList->PseudoRapFilter(fRange[7]->GetMin(), fRange[7]->GetMax());
554 UpdateAll(8);
555}
556
557//_________________________________________________________________________
558 void CascadeListEditor::NegPtRange() {
559 fMList->NegPtFilter(fRange[8]->GetMin(), fRange[8]->GetMax());
560 UpdateAll(9);
561}
562
563//_________________________________________________________________________
564 void CascadeListEditor::NegEtaRange() {
565 fMList->NegEtaFilter(fRange[9]->GetMin(), fRange[9]->GetMax());
566 UpdateAll(10);
567}
568
569//_________________________________________________________________________
570 void CascadeListEditor::PosPtRange() {
571 fMList->PosPtFilter(fRange[10]->GetMin(), fRange[10]->GetMax());
572 UpdateAll(11);
573}
574
575//_________________________________________________________________________
576 void CascadeListEditor::PosEtaRange() {
577 fMList->PosEtaFilter(fRange[11]->GetMin(), fRange[11]->GetMax());
578 UpdateAll(12);
579}
580
581//_________________________________________________________________________
582 void CascadeListEditor::BachPtRange() {
583 fMList->BachPtFilter(fRange[12]->GetMin(), fRange[12]->GetMax());
584 UpdateAll(13);
585}
586
587//_________________________________________________________________________
588 void CascadeListEditor::BachEtaRange() {
589 fMList->BachEtaFilter(fRange[13]->GetMin(), fRange[13]->GetMax());
590 UpdateAll(14);
591}
592
593