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