1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 Revision 1.5 1999/09/29 09:24:29 fca
19 Introduction of the Copyright and cvs Log
24 //////////////////////////////////////////////////////////////////////////
28 // Utility class to display ALICE outline, tracks, hits,.. //
30 //////////////////////////////////////////////////////////////////////////
39 #include <TPolyMarker3D.h>
40 #include <TPolyMarker.h>
41 #include <TPaveLabel.h>
42 #include <TPaveText.h>
49 #include <TSliderBox.h>
51 #include <TVirtualX.h>
53 #include <X3DBuffer.h>
56 #include "AliDetector.h"
58 #include "AliRICHConst.h"
59 #include "AliRICHdisplay.h"
60 #include "AliRICHpoints.h"
61 #include "TParticle.h"
64 ClassImp(AliRICHdisplay)
67 //____________________________________________________________________________
68 AliRICHdisplay::AliRICHdisplay()
76 //_____________________________________________________________________________
77 AliRICHdisplay::AliRICHdisplay(Int_t size)
79 // Create an event display object.
80 // A canvas named "edisplay" is created with a vertical size in pixels
82 // A QUICK Overview of the Event Display functions
83 // ===============================================
85 // The event display can ve invoked by executing the macro "display.C"
86 // A canvas like in the picture below will appear.
88 // On the left side of the canvas, the following buttons appear:
89 // *Next* to move to the next event
90 // *Previous* to move to the previous event
92 // *Pick* Select this option to be able to point on a track with the
93 // mouse. Once on the track, use the right button to select
94 // an action. For example, select SetMarkerAttributes to
95 // change the marker type/color/size for the track.
96 // *Zoom* Select this option (default) if you want to zoom.
97 // To zoom, simply select the selected area with the left button.
98 // *UnZoom* To revert to the previous picture size.
100 // slider R On the left side, the vertical slider can be used to
101 // set the default picture size.
103 // When you are in Zoom mode, you can click on the black part of the canvas
104 // to select special options with the right mouse button.
107 // When you are in pick mode, you can "Inspect" the object pointed by the mouse.
108 // When you are on a track, select the menu item "InspectParticle"
109 // to display the current particle attributes.
111 // You can activate the Root browser by selecting the Inspect menu
112 // in the canvas tool bar menu. Then select "Start Browser"
113 // This will open a new canvas with the browser. At this point, you may want
114 // to display some histograms (from the Trees). Go to the "File" menu
115 // of the browser and click on "New canvas".
116 // In the browser, click on item "ROOT files" in the left pane.
117 // Click on galice.root.
119 // Click on TPC for example
120 // Click on any variable (eg TPC.fX) to histogram the variable.
122 // If you are lost, you can click on HELP in any Root canvas or browser.
125 <img src="gif/aliRICHdisplay.gif">
132 gAlice->SetDisplay(this);
134 // Initialize display default parameters
137 // Set front view by default
144 fDrawClusters = kTRUE;
153 // Create display canvas
155 if (ysize < 100) ysize = 750;
156 Int_t xsize = Int_t(size*830./ysize);
157 fCanvas = new TCanvas("Canvas", "RICH Clusters Display",14,47,xsize,ysize);
158 fCanvas->SetEditable(kFALSE);
159 fCanvas->ToggleEventStatus();
161 // Create main display pad
162 fPad = new TPad("viewpad", "RICH display",0.15,0,0.9,1);
165 fPad->SetFillColor(1);
166 fPad->SetBorderSize(2);
171 fColPad = new TPad("colpad", "Colors pad",0.9,0,1,1);
174 fColPad->SetFillColor(19);
175 fColPad->SetBorderSize(2);
181 // Create user interface control pad
185 // Create Range and mode pad
188 fTrigPad = new TPad("trigger", "range and mode pad",0,0,dxtr,dytr);
191 fTrigPad->SetFillColor(22);
192 fTrigPad->SetBorderSize(2);
193 fRangeSlider = new TSlider("range","range",0.7,0.42,0.9,0.98);
194 fRangeSlider->SetObject(this);
195 char pickmode[] = "gAlice->Display()->SetPickMode()";
197 fPickButton = new TButton("Pick",pickmode,0.05,0.32,0.65,0.32+db);
198 fPickButton->SetFillColor(38);
200 char zoommode[] = "gAlice->Display()->SetZoomMode()";
201 fZoomButton = new TButton("Zoom",zoommode,0.05,0.21,0.65,0.21+db);
202 fZoomButton->SetFillColor(38);
204 fArcButton = new TArc(.8,fZoomButton->GetYlowNDC()+0.5*db,0.33*db);
205 fArcButton->SetFillColor(kGreen);
207 char butUnzoom[] = "gAlice->Display()->UnZoom()";
208 TButton *button = new TButton("UnZoom",butUnzoom,0.05,0.05,0.95,0.15);
209 button->SetFillColor(38);
211 AppendPad(); // append display object as last object to force selection
218 //_____________________________________________________________________________
219 AliRICHdisplay::~AliRICHdisplay()
221 // Delete space point structure
222 if (fPoints) fPoints->Delete();
226 if (fPhits) fPhits->Delete();
230 if (fPCerenkovs) fPCerenkovs->Delete();
235 //_____________________________________________________________________________
236 void AliRICHdisplay::Clear(Option_t *)
238 // Delete graphics temporary objects
241 //_____________________________________________________________________________
242 void AliRICHdisplay::DisplayButtons()
244 // Create the user interface buttons
247 fButtons = new TPad("buttons", "newpad",0,0.45,0.15,1);
249 fButtons->SetFillColor(38);
250 fButtons->SetBorderSize(2);
253 // Int_t butcolor = 33;
254 Float_t dbutton = 0.08;
261 char but1[] = "gAlice->Display()->ShowNextEvent(1)";
262 button = new TButton("Next",but1,x0,y-dbutton,x1,y);
263 button->SetFillColor(38);
267 char but2[] = "gAlice->Display()->ShowNextEvent(-1)";
268 button = new TButton("Previous",but2,x0,y-dbutton,x1,y);
269 button->SetFillColor(38);
273 TDiamond *diamond = new TDiamond(0.05,0.015,0.95,0.22);
274 diamond->SetFillColor(50);
275 diamond->SetTextAlign(22);
276 diamond->SetTextColor(5);
277 diamond->SetTextSize(0.11);
279 diamond->AddText(".. ");
280 diamond->AddText("ROOT");
281 diamond->AddText("RICH");
282 diamond->AddText("... ");
283 diamond->AddText(" ");
286 //_____________________________________________________________________________
287 void AliRICHdisplay::CreateColors()
289 // Create the colors palette used to display clusters
304 new TColor(color,r,g,b);
314 new TColor(color,r,g,b);
324 new TColor(color,r,g,b);
334 new TColor(color,r,g,b);
344 new TColor(color,r,g,b);
353 //_____________________________________________________________________________
354 void AliRICHdisplay::DisplayColorScale()
359 Float_t xlow, ylow, xup, yup, hs;
360 Float_t x1, y1, x2, y2;
364 gPad->SetFillColor(0);
366 gPad->Range(x1,y1,x2,y2);
367 TText *text = new TText(0,0,"");
368 text->SetTextFont(61);
369 text->SetTextSize(0.03);
370 text->SetTextAlign(22);
374 //*-* draw colortable boxes
375 hs = (y2-y1)/Float_t(22);
379 ylow = y1 + hs*(Float_t(i));
380 yup = y1 + hs*(Float_t(i+1));
382 Double_t logscale=Double_t(i+1)*(TMath::Log(adc_satm)/22);
383 Int_t scale=(Int_t)TMath::Exp(logscale);
384 sprintf(label,"%d",scale);
385 box = new TBox(xlow, ylow, xup, yup);
386 box->SetFillColor(color);
388 text->DrawText(xup+4, 0.5*(ylow+yup),label);
392 //______________________________________________________________________________
393 Int_t AliRICHdisplay::DistancetoPrimitive(Int_t px, Int_t)
395 // Compute distance from point px,py to objects in event
397 gPad->SetCursor(kCross);
399 if (gPad == fTrigPad) return 9999;
401 const Int_t big = 9999;
403 Float_t xmin = gPad->GetX1();
404 Float_t xmax = gPad->GetX2();
405 Float_t dx = 0.02*(xmax - xmin);
406 Float_t x = gPad->AbsPixeltoX(px);
407 if (x < xmin+dx || x > xmax-dx) return dist;
409 if (fZoomMode) return 0;
413 //_____________________________________________________________________________
414 void AliRICHdisplay::Draw(Option_t *)
416 // Display current event
420 DrawView(fTheta, fPhi, fPsi); // see how to draw PGON+inner frames
422 // Display the event number and title
428 //_____________________________________________________________________________
430 void AliRICHdisplay::DrawCerenkovs()
432 // Draw cerenkovs hits for RICH chambers
434 LoadCerenkovs(fChamber);
435 printf("\nDrawCerenkovs\n");
437 Int_t ntracks, track;
442 cpoints = fPCerenkovs;
443 printf ("Cpoints: %p",cpoints);
444 if (!cpoints) return;
445 ntracks = cpoints->GetEntriesFast();
446 printf("DrawCerenkovs - ntracks %d \n",ntracks);
447 for (track=0;track<ntracks;track++) {
448 pm = (AliRICHpoints*)cpoints->UncheckedAt(track);
451 fHitsCuts += pm->GetN();
455 //_____________________________________________________________________________
456 void AliRICHdisplay::DrawClusters()
458 // Draw clusterss for RICH chambers
460 Int_t ndigits, digit;
467 ndigits = points->GetEntriesFast();
468 printf("DrawClusters - ndigits %d \n",ndigits);
469 for (digit=0;digit<ndigits;digit++){
470 pm = (AliRICHpoints*)points->UncheckedAt(digit);
473 fClustersCuts +=pm->GetN();
477 //_____________________________________________________________________________
478 void AliRICHdisplay::DrawHits()
480 // Draw hits for RICH chambers
484 Int_t ntracks, track;
491 ntracks = points->GetEntriesFast();
492 printf("DrawHits - ntracks %d \n",ntracks);
493 for (track=0;track<ntracks;track++) {
494 pm = (AliRICHpoints*)points->UncheckedAt(track);
497 fHitsCuts += pm->GetN();
502 //_____________________________________________________________________________
503 void AliRICHdisplay::DrawTitle(Option_t *option)
505 // Draw the event title
507 Float_t xmin = gPad->GetX1();
508 Float_t xmax = gPad->GetX2();
509 Float_t ymin = gPad->GetY1();
510 Float_t ymax = gPad->GetY2();
511 Float_t dx = xmax-xmin;
512 Float_t dy = ymax-ymin;
514 if (strlen(option) == 0) {
515 TPaveText *title = new TPaveText(xmin +0.01*dx, ymax-0.09*dy, xmin +0.5*dx, ymax-0.01*dy);
516 title->SetBit(kCanDelete);
517 title->SetFillColor(42);
520 sprintf(ptitle,"Alice event: %d, Run:%d",gAlice->GetHeader()->GetEvent(), gAlice->GetHeader()->GetRun());
521 title->AddText(ptitle);
522 Int_t nparticles = gAlice->Particles()->GetEntriesFast();
523 sprintf(ptitle,"Nparticles = %d Nhits = %d Npads fired = %d",nparticles, fHitsCuts,fClustersCuts);
524 title->AddText(ptitle);
526 TPaveLabel *label = new TPaveLabel(xmin +0.01*dx, ymax-0.07*dy, xmin +0.2*dx, ymax-0.01*dy,option);
527 label->SetBit(kCanDelete);
528 label->SetFillColor(42);
533 //_____________________________________________________________________________
534 void AliRICHdisplay::DrawView(Float_t theta, Float_t phi, Float_t psi)
536 // Draw a view of RICH clusters
538 gPad->SetCursor(kWatch);
539 gPad->SetFillColor(1);
543 TView *view = new TView(1);
544 Float_t range = fRrange*fRangeSlider->GetMaximum();
545 view->SetRange(-range,-range,-range,range, range, range);
552 //Display RICH Chamber Geometry
553 gAlice->GetGeometry()->Draw("same");
555 //add clusters to the pad
560 // add itself to the list (must be last)
563 view->SetView(phi, theta, psi, iret);
567 //______________________________________________________________________________
568 void AliRICHdisplay::ExecuteEvent(Int_t event, Int_t px, Int_t py)
570 // Execute action corresponding to the mouse event
572 static Float_t x0, y0, x1, y1;
574 static Int_t pxold, pyold;
575 static Int_t px0, py0;
576 static Int_t linedrawn;
579 if (px == 0 && py == 0) { //when called by sliders
580 if (event == kButton1Up) {
585 if (!fZoomMode && gPad->GetView()) {
586 gPad->GetView()->ExecuteRotateView(event, px, py);
590 // something to zoom ?
591 gPad->SetCursor(kCross);
596 gVirtualX->SetLineColor(-1);
597 gPad->TAttLine::Modify(); //Change line attributes only if necessary
598 x0 = gPad->AbsPixeltoX(px);
599 y0 = gPad->AbsPixeltoY(py);
601 pxold = px; pyold = py;
606 if (linedrawn) gVirtualX->DrawBox(px0, py0, pxold, pyold, TVirtualX::kHollow);
610 gVirtualX->DrawBox(px0, py0, pxold, pyold, TVirtualX::kHollow);
614 gPad->GetCanvas()->FeedbackMode(kFALSE);
615 if (px == px0) return;
616 if (py == py0) return;
617 x1 = gPad->AbsPixeltoX(px);
618 y1 = gPad->AbsPixeltoY(py);
620 if (x1 < x0) {temp = x0; x0 = x1; x1 = temp;}
621 if (y1 < y0) {temp = y0; y0 = y1; y1 = temp;}
622 gPad->Range(x0,y0,x1,y1);
623 if (fZooms < kMAXZOOM-1) {
625 fZoomX0[fZooms] = x0;
626 fZoomY0[fZooms] = y0;
627 fZoomX1[fZooms] = x1;
628 fZoomY1[fZooms] = y1;
630 gPad->Modified(kTRUE);
636 //___________________________________________
637 void AliRICHdisplay::LoadDigits()
639 // Read digits info and store x,y,z info in arrays fPoints
640 // Loop on all detectors
642 printf("Entering Load-digits");
646 AliRICH *RICH = (AliRICH*)gAlice->GetDetector("RICH");
647 AliRICHchamber* iChamber;
648 AliRICHsegmentation* segmentation;
652 for (ich=0; ich<7; ich++) {
653 TClonesArray *RICHdigits = RICH->DigitsAddress(ich);
654 if (RICHdigits == 0) continue;
655 gAlice->ResetDigits();
656 gAlice->TreeD()->GetEvent(1);
657 Int_t ndigits = RICHdigits->GetEntriesFast();
658 printf("Found %d digits in chamber %d \n",ndigits,ich);
661 if (fPoints == 0) fPoints = new TObjArray(NallDigits);
663 for (ich=0; ich<7; ich++) {
664 TClonesArray *RICHdigits = RICH->DigitsAddress(ich);
665 if (RICHdigits == 0) continue;
666 gAlice->ResetDigits();
667 gAlice->TreeD()->GetEvent(1);
668 Int_t ndigits = RICHdigits->GetEntriesFast();
669 printf("Found %d digits in chamber %d \n",ndigits,ich);
670 if (ndigits == 0) continue;
674 iChamber = &(RICH->Chamber(ich));
675 printf("LoadPoints - chamber %d \n",ich);
676 segmentation=iChamber->GetSegmentationModel(1);
677 Float_t dpx = segmentation->Dpx();
678 Float_t dpy = segmentation->Dpy();
679 printf("LoadPoints - dpx, dpy %f %f \n",dpx,dpy);
681 AliRICHpoints *points = 0;
683 //loop over all digits and store their position
686 for (Int_t digit=0;digit<ndigits;digit++) {
687 mdig = (AliRICHdigit*)RICHdigits->UncheckedAt(digit);
688 points = new AliRICHpoints(npoints);
689 fPoints->AddAt(points,counter);
691 Int_t charge=mdig->fSignal;
692 Int_t index=Int_t(TMath::Log(charge)/(TMath::Log(adc_satm)/22));
693 Int_t color=51+index;
694 if (color>72) color=72;
695 points->SetMarkerColor(color);
696 points->SetMarkerStyle(21);
697 points->SetMarkerSize(0.5);
698 // get the center of the pad - add on x and y half of pad size
700 segmentation->GetPadCxy(mdig->fPadX, mdig->fPadY,xpad, ypad);
701 printf("\n chamber x,y, %d %f %f ", ich, xpad, ypad);
703 Float_t VecLoc[3]={xpad,0,ypad};
705 iChamber->LocaltoGlobal(VecLoc,VecGlob);
706 points->SetParticle(-1);
707 points->SetHitIndex(-1);
708 points->SetTrackIndex(-1);
709 points->SetDigitIndex(digit);
710 points->SetPoint(0,VecGlob[0],VecGlob[1],VecGlob[2]);
711 } // loop over digits
712 } // loop over chambers
716 //___________________________________________
717 void AliRICHdisplay::LoadHits(Int_t chamber)
719 // Read hits info and store x,y,z info in arrays fPhits
720 // Loop on all detectors
722 printf("Entering Load-hits");
727 AliRICH *RICH = (AliRICH*)gAlice->GetDetector("RICH");
728 AliRICHchamber* iChamber;
730 iChamber = &(RICH->Chamber(chamber-1));
731 Float_t zpos=iChamber->ZPosition();
732 printf("LoadHits - zpos %f \n",zpos);
734 Int_t ntracks = (Int_t)gAlice->TreeH()->GetEntries();
735 printf("ntracks %d\n",ntracks);
736 Int_t ntrks = gAlice->GetNtrack();
737 printf("ntrks %d\n",ntrks);
739 if (fPhits == 0) fPhits = new TObjArray(ntracks);
740 TVector *xp = new TVector(1000);
741 TVector *yp = new TVector(1000);
742 TVector *zp = new TVector(1000);
743 TVector *ptrk = new TVector(1000);
744 TVector *phit = new TVector(1000);
745 for (Int_t track=0; track<ntracks;track++) {
747 gAlice->TreeH()->GetEvent(track);
748 TClonesArray *RICHhits = RICH->Hits();
749 if (RICHhits == 0) return;
750 Int_t nhits = RICHhits->GetEntriesFast();
751 if (nhits == 0) continue;
753 AliRICHpoints *points = 0;
755 for (Int_t hit=0;hit<nhits;hit++) {
756 mHit = (AliRICHhit*)RICHhits->UncheckedAt(hit);
757 (*xp)(npoints)=mHit->fX;
758 (*yp)(npoints)=mHit->fY;
759 (*zp)(npoints)=mHit->fZ;
760 (*ptrk)(npoints)=Float_t(mHit->GetTrack());
761 (*phit)(npoints)=Float_t(hit);
765 if (npoints == 0) continue;
766 points = new AliRICHpoints(npoints);
767 for (Int_t p=0;p<npoints;p++) {
768 points->SetMarkerColor(kRed);
769 points->SetMarkerStyle(5);
770 points->SetMarkerSize(1.);
771 points->SetParticle(Int_t((*ptrk)(p)));
772 points->SetHitIndex(Int_t((*phit)(p)));
773 points->SetTrackIndex(track);
774 points->SetDigitIndex(-1);
775 points->SetPoint(p,(*xp)(p),(*yp)(p),(*zp)(p));
781 fPhits->AddAt(points,track);
786 //_____________________________________________________________________________
788 void AliRICHdisplay::LoadCerenkovs(Int_t chamber)
790 // Read cerenkov hits info and store x,y,z info in array fPCerenkovs
791 // Loop on all detectors
793 printf("Entering Load-Cerenkovs");
798 AliRICH *RICH = (AliRICH*)gAlice->GetDetector("RICH");
799 AliRICHchamber* iChamber;
801 iChamber = &(RICH->Chamber(chamber-1));
802 Float_t zpos=iChamber->ZPosition();
803 printf("LoadCerenkovs - zpos %f \n",zpos);
805 RICH->SetTreeAddress();
806 Int_t ntracks = (Int_t)gAlice->TreeH()->GetEntries();
807 printf("ntracks %d\n",ntracks);
808 Int_t ntrks = gAlice->GetNtrack();
809 printf("ntrks %d\n",ntrks);
811 if (fPCerenkovs == 0) fPCerenkovs = new TObjArray(ntracks);
812 TVector *xp = new TVector(1000);
813 TVector *yp = new TVector(1000);
814 TVector *zp = new TVector(1000);
815 TVector *ptrk = new TVector(1000);
816 TVector *phit = new TVector(1000);
817 for (Int_t track=0; track<ntracks;track++) {
819 gAlice->TreeH()->GetEvent(track);
820 TClonesArray *RICHCerenkovs = RICH->Cerenkovs();
821 printf("RICHCerenkovs %p\n",RICHCerenkovs);
822 if (RICHCerenkovs == 0) return;
823 Int_t nhits = RICHCerenkovs->GetEntriesFast();
824 if (nhits == 0) continue;
825 printf("nhits %d \n",nhits);
826 AliRICHCerenkov *mCerenkov;
827 AliRICHpoints *cpoints = 0;
830 //Display Cerenkov hits in blue
832 for (Int_t hit=0;hit<nhits;hit++) {
833 mCerenkov = (AliRICHCerenkov*)RICHCerenkovs->UncheckedAt(hit);
834 (*xp)(npoints)=mCerenkov->fX;
835 (*yp)(npoints)=mCerenkov->fY;
836 (*zp)(npoints)=mCerenkov->fZ;
837 (*ptrk)(npoints)=Float_t(mCerenkov->GetTrack());
838 (*phit)(npoints)=Float_t(hit);
839 printf("track, trk %d %d\n",track,mCerenkov->GetTrack());
842 if (npoints == 0) continue;
843 printf("npoints %d \n",npoints);
844 cpoints = new AliRICHpoints(npoints);
845 for (Int_t p=0;p<npoints;p++) {
846 cpoints->SetMarkerColor(kBlue);
847 cpoints->SetMarkerStyle(3);
848 cpoints->SetMarkerSize(1.);
849 cpoints->SetParticle(Int_t((*ptrk)(p)));
850 Int_t index=cpoints->GetIndex();
851 printf("index %d \n",index);
852 cpoints->SetHitIndex(Int_t((*phit)(p)));
853 cpoints->SetTrackIndex(track);
854 cpoints->SetDigitIndex(-1);
855 cpoints->SetPoint(p,(*xp)(p),(*yp)(p),(*zp)(p));
861 fPCerenkovs->AddAt(cpoints,track);
865 //_____________________________________________________________________________
866 void AliRICHdisplay::Paint(Option_t *)
868 // Paint miscellaneous items
872 //_____________________________________________________________________________
873 void AliRICHdisplay::SetPickMode()
877 fArcButton->SetY1(fPickButton->GetYlowNDC()+0.5*fPickButton->GetHNDC());
878 fTrigPad->Modified();
881 //_____________________________________________________________________________
882 void AliRICHdisplay::SetZoomMode()
886 fArcButton->SetY1(fZoomButton->GetYlowNDC()+0.5*fZoomButton->GetHNDC());
887 fTrigPad->Modified();
890 //_____________________________________________________________________________
891 void AliRICHdisplay::SetChamberAndCathode(Int_t chamber, Int_t cathode)
893 // Set chamber and cathode number
897 printf("SetChamberAndCathode - fChamber fCathode %d %d\n",fChamber,fCathode);
904 //_____________________________________________________________________________
905 void AliRICHdisplay::SetRange(Float_t rrange, Float_t zrange)
907 // Set view range along R and Z
916 //_____________________________________________________________________________
917 void AliRICHdisplay::SetView(Float_t theta, Float_t phi, Float_t psi)
919 // change viewing angles for current event
927 TView *view = gPad->GetView();
928 if (view) view->SetView(fPhi, fTheta, fPsi, iret);
934 //_____________________________________________________________________________
935 void AliRICHdisplay::ShowNextEvent(Int_t delta)
937 // Display (current event_number+delta)
938 // delta = 1 shown next event
939 // delta = -1 show previous event
943 Int_t current_event = gAlice->GetHeader()->GetEvent();
944 Int_t new_event = current_event + delta;
945 gAlice->GetEvent(new_event);
946 if (!gAlice->TreeD()) return;
956 //______________________________________________________________________________
957 void AliRICHdisplay::UnZoom()
959 if (fZooms <= 0) return;
961 TPad *pad = (TPad*)gPad->GetPadSave();
962 pad->Range(fZoomX0[fZooms],fZoomY0[fZooms], fZoomX1[fZooms],fZoomY1[fZooms]);
966 //_____________________________________________________________________________
967 void AliRICHdisplay::ResetPoints()
970 // Reset array of points
978 //_____________________________________________________________________________
979 void AliRICHdisplay::ResetPhits()
982 // Reset array of points
990 //_____________________________________________________________________________
991 void AliRICHdisplay::ResetPCerenkovs()
994 // Reset array of points
997 fPCerenkovs->Delete();