]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/Alieve/blacklisted-classes/CascadeEditors.cxx
Remove EVE/Reve/ sub-module.
[u/mrichter/AliRoot.git] / EVE / Alieve / blacklisted-classes / CascadeEditors.cxx
1
2 /***********************************************************************
3   This editor appears in the Reve window when v0 are visualize.
4 It allows to select the v0 as a function of some useful parameters.
5
6 Ludovic 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
31 using namespace Reve;
32 using namespace Alieve;
33
34 //______________________________________________________________________
35 // CascadeListEditor
36 //
37
38 ClassImp(Alieve::CascadeListEditor)
39
40 CascadeListEditor::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
96 CascadeListEditor::~CascadeListEditor()
97 {}
98
99
100 //_________________________________________________________________________
101 void 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 //_________________________________________________________________________
120 TGCompositeFrame* 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 //_________________________________________________________________________
145 TGCompositeFrame** 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 //_________________________________________________________________________
225 void 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 //_________________________________________________________________________
266 void 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 //_________________________________________________________________________
292 void CascadeListEditor::AddSeeTab() {
293
294   TGCompositeFrame** tab = CreateTab(&fMainTabB, fTabB, 2);
295   delete[] tab;
296 }
297
298
299 //_________________________________________________________________________
300 void CascadeListEditor::AdjustHist(Int_t iHist) {
301
302   if (! fMList) return;
303   fMList->AdjustHist(iHist);
304
305   FillCanvas();
306 }
307
308 //_________________________________________________________________________
309 void 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 //_________________________________________________________________________
345 void 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 //_________________________________________________________________________
379 void 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 //_________________________________________________________________________
454 void 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
478 void CascadeListEditor::DoRnrVtx()
479 {
480   fMList->SetRnrCasVtx(fRnrVtx->IsOn());
481   Update();
482 }
483
484 void CascadeListEditor::DoRnrV0path()
485 {
486   fMList->SetRnrV0path(fRnrV0path->IsOn());
487   Update();
488 }
489
490 void CascadeListEditor::DoRnrV0Daughters()
491 {
492   fMList->SetRnrV0Daughters(fRnrV0Daughters->IsOn());
493   Update();
494 }
495
496 void CascadeListEditor::DoRnrBach()
497 {
498   fMList->SetRnrBachelor(fRnrBach->IsOn());
499   Update();
500 }
501
502 void CascadeListEditor::DoRnrCasPath()
503 {
504   fMList->SetRnrCasPath(fRnrCasPath->IsOn());
505   Update();
506 }
507
508
509 //_________________________________________________________________________
510 void 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