* provided "as is" without express or implied warranty. *
**************************************************************************/
-/* $Header$ */
-
+/* $Id$ */
//////////////////////////////////////////////////////////////////////////
// //
// //
//////////////////////////////////////////////////////////////////////////
+#include <RVersion.h>
#include <TArc.h>
#include <TButton.h>
#include <TCanvas.h>
#include <TPaveText.h>
#include <TSlider.h>
#include <TSliderBox.h>
-#include <TTree.h>
+//#include <TTree.h>
+#if ROOT_VERSION_CODE>= 331523
+#include <TView3D.h>
+#else
#include <TView.h>
+#endif
#include <TVirtualX.h>
+#include "AliLog.h"
#include "AliDetector.h"
#include "AliDisplay.h"
#include "AliHeader.h"
#include "AliStack.h"
#include "TGeometry.h"
#include "TParticle.h"
+#include "AliMC.h"
+
+const Float_t AliDisplay::fgkPtCutMax = 2;
+const Float_t AliDisplay::fgkEtaCutMax = 1.5;
+const Int_t AliDisplay::fgkMaxZooms = 20;
-static const Float_t kptcutmax = 2;
-static const Float_t ketacutmax = 1.5;
ClassImp(AliDisplay)
//
}
-//_______________________________________________________________________
+//_____________________________________________________________________________
AliDisplay::AliDisplay(Int_t size):
fZoomMode(1),
fDrawAllViews(kFALSE),
fTracksToDisplay(0),
fNTracksToDisplay(0)
{
- // Create an event display object.
- // A canvas named "edisplay" is created with a vertical size in pixels
- //
- // A QUICK Overview of the Event Display functions
- // ===============================================
- //
- // The event display can ve invoked by executing the macro "display.C"
- // A canvas like in the picture below will appear.
- //
- // On the left side of the canvas, the following buttons appear:
- // *Next* to move to the next event
- // *Previous* to move to the previous event
- // *Top View* to display a top view of the current event
- // *Side View* to display a side view of the current event
- // *Front View* to display a front view of the current event
- // *All Views* to display front/side/top/30-30 views of the current event
- // *OpenGL* to use OpenGl to view the current event.
- // Note that OpenGL cannot be used across the network.
- // Before using OpenGL, load the GL libraries
- // by executing the macro GL.C (in $ROOTSYS/macros/GL.C.
- // Once in GL, click the HELP button of the GL canvas.
- // *X3D* to use X3D to view the current event (Unix only).
- // Once in X3D, type M to see the list of all possible options.
- // for example type J to zoom, K to unzoom
- // use the mouse to rotate.
- // *Pick* Select this option to be able to point on a track with the
- // mouse. Once on the track, use the right button to select
- // an action. For example, select SetMarkerAttributes to
- // change the marker type/color/size for the track.
- // *Zoom* Select this option (default) if you want to zoom.
- // To zoom, simply select the selected area with the left button.
- // *UnZoom* To revert to the previous picture size.
- //
- // slider R On the left side, the vertical slider can be used to
- // set the default picture size.
- // slider pcut At the top of the canvas, a slider can be used to change
- // the momentum cut (or range) to display tracks.
- // slider eta On the right side of the canvas, a vertical slider can be used
- // to specify a rapidity range for the tracks.
- //
- // When you are in Zoom mode, you can click on the black part of the canvas
- // to select special options with the right mouse button.
- // This will display a pop-up menu with items like:
- // *Disable detector*
- // *Enable detector*, etc.
- // For example select "Disable detector". You get a dialog box.
- // Diable detector TRD for example.
- //
- // When you are in pick mode, you can "Inspect" the object pointed by the mouse.
- // When you are on a track, select the menu item "InspectParticle"
- // to display the current particle attributes.
- //
- // You can activate the Root browser by selecting the Inspect menu
- // in the canvas tool bar menu. Then select "Start Browser"
- // This will open a new canvas with the browser. At this point, you may want
- // to display some histograms (from the Trees). Go to the "File" menu
- // of the browser and click on "New canvas".
- // In the browser, click on item "ROOT files" in the left pane.
- // Click on galice.root.
- // Click on TH
- // Click on TPC for example
- // Click on any variable (eg TPC.fX) to histogram the variable.
- //
- // If you are lost, you can click on HELP in any Root canvas or browser.
- //Begin_Html
- /*
- <img src="picts/alidisplay.gif">
- */
- //End_Html
-
+// Create an event display object.
+// A canvas named "edisplay" is created with a vertical size in pixels
+//
+// A QUICK Overview of the Event Display functions
+// ===============================================
+//
+// The event display can ve invoked by executing the macro "display.C"
+// A canvas like in the picture below will appear.
+//
+// On the left side of the canvas, the following buttons appear:
+// *Next* to move to the next event
+// *Previous* to move to the previous event
+// *Top View* to display a top view of the current event
+// *Side View* to display a side view of the current event
+// *Front View* to display a front view of the current event
+// *All Views* to display front/side/top/30-30 views of the current event
+// *OpenGL* to use OpenGl to view the current event.
+// Note that OpenGL cannot be used across the network.
+// Before using OpenGL, load the GL libraries
+// by executing the macro GL.C (in $ROOTSYS/macros/GL.C.
+// Once in GL, click the HELP button of the GL canvas.
+// *X3D* to use X3D to view the current event (Unix only).
+// Once in X3D, type M to see the list of all possible options.
+// for example type J to zoom, K to unzoom
+// use the mouse to rotate.
+// *Pick* Select this option to be able to point on a track with the
+// mouse. Once on the track, use the right button to select
+// an action. For example, select SetMarkerAttributes to
+// change the marker type/color/size for the track.
+// *Zoom* Select this option (default) if you want to zoom.
+// To zoom, simply select the selected area with the left button.
+// *UnZoom* To revert to the previous picture size.
+//
+// slider R On the left side, the vertical slider can be used to
+// set the default picture size.
+// slider pcut At the top of the canvas, a slider can be used to change
+// the momentum cut (or range) to display tracks.
+// slider eta On the right side of the canvas, a vertical slider can be used
+// to specify a rapidity range for the tracks.
+//
+// When you are in Zoom mode, you can click on the black part of the canvas
+// to select special options with the right mouse button.
+// This will display a pop-up menu with items like:
+// *Disable detector*
+// *Enable detector*, etc.
+// For example select "Disable detector". You get a dialog box.
+// Diable detector TRD for example.
+//
+// When you are in pick mode, you can "Inspect" the object pointed by the mouse.
+// When you are on a track, select the menu item "InspectParticle"
+// to display the current particle attributes.
+//
+// You can activate the Root browser by selecting the Inspect menu
+// in the canvas tool bar menu. Then select "Start Browser"
+// This will open a new canvas with the browser. At this point, you may want
+// to display some histograms (from the Trees). Go to the "File" menu
+// of the browser and click on "New canvas".
+// In the browser, click on item "ROOT files" in the left pane.
+// Click on galice.root.
+// Click on TH
+// Click on TPC for example
+// Click on any variable (eg TPC.fX) to histogram the variable.
+//
+// If you are lost, you can click on HELP in any Root canvas or browser.
+//Begin_Html
+/*
+<img src="picts/alidisplay.gif">
+*/
+//End_Html
+
gAlice->SetDisplay(this);
// Initialize display default parameters
SetRange();
SetPTcut();
- // Set front view by default
-
// Create display canvas
Int_t ysize = size;
if (ysize < 100) ysize = 750;
Int_t xsize = Int_t(size*830./ysize);
fCanvas = new TCanvas("Canvas", "ALICE Event Display",14,47,xsize,ysize);
fCanvas->ToggleEventStatus();
-
+
// Create main display pad
fPad = new TPad("viewpad", "Alice display",0.15,0,0.97,0.96);
fPad->Draw();
fPad->Modified();
fPad->SetFillColor(1);
fPad->SetBorderSize(2);
-
+
// Create user interface control pad
DisplayButtons();
fCanvas->cd();
-
+
// Create Range and mode pad
Float_t dxtr = 0.15;
Float_t dytr = 0.45;
fTrigPad->cd();
fTrigPad->SetFillColor(22);
fTrigPad->SetBorderSize(2);
-
fRangeSlider = new TSlider("range","range",0.7,0.42,0.9,0.98);
fRangeSlider->SetObject(this);
char pickmode[] = "gAlice->Display()->SetPickMode()";
Float_t db = 0.09;
-
fPickButton = new TButton("Pick",pickmode,0.05,0.32,0.65,0.32+db);
fPickButton->SetFillColor(38);
fPickButton->Draw();
button->SetFillColor(38);
button->Draw();
AppendPad(); // append display object as last object to force selection
-
// Create momentum cut slider pad
fCanvas->cd();
fCutPad = new TPad("cutSlider", "pcut slider pad",dxtr,.96,1,1);
fCutPad->cd();
fCutPad->SetFillColor(22);
fCutPad->SetBorderSize(2);
-
fCutSlider = new TSlider("pcut","Momentum cut",0,0,1,1);
- fCutSlider->SetRange(fPTcut/kptcutmax,1);
+ fCutSlider->SetRange(fPTcut/fgkPtCutMax,1);
fCutSlider->SetObject(this);
fCutSlider->SetFillColor(45);
TSliderBox *sbox = dynamic_cast<TSliderBox*>(fCutSlider->GetListOfPrimitives()->First());
sbox->SetFillColor(46);
fCutSlider->cd();
- TGaxis *cutaxis = new TGaxis(0.02,0.8,0.98,0.8,0,kptcutmax,510,"");
+ TGaxis *cutaxis = new TGaxis(0.02,0.8,0.98,0.8,0,fgkPtCutMax,510,"");
cutaxis->SetLabelSize(0.5);
cutaxis->SetTitleSize(0.6);
cutaxis->SetTitleOffset(0.5);
cutaxis->SetTitle("pcut . ");
fCutSlider->GetListOfPrimitives()->AddFirst(cutaxis);
-
// Create rapidity cut slider pad
fCanvas->cd();
-
fEtaPad = new TPad("EtaSlider", "Eta slider pad",0.97,0,1,0.96);
fEtaPad->Draw();
fEtaPad->cd();
fEtaPad->SetFillColor(22);
fEtaPad->SetBorderSize(2);
-
fEtaSlider = new TSlider("etacut","Rapidity cut",0,0,1,1);
fEtaSlider->SetObject(this);
fEtaSlider->SetFillColor(45);
TSliderBox *sbox2 = dynamic_cast<TSliderBox*>(fEtaSlider->GetListOfPrimitives()->First());
sbox2->SetFillColor(46);
fEtaSlider->cd();
- TGaxis *etaaxis = new TGaxis(0.9,0.02,0.9,0.98,-ketacutmax,ketacutmax,510,"");
+ TGaxis *etaaxis = new TGaxis(0.9,0.02,0.9,0.98,-fgkEtaCutMax,fgkEtaCutMax,510,"");
etaaxis->SetLabelSize(0.5);
etaaxis->SetTitleSize(0.6);
etaaxis->SetTitleOffset(0.2);
cutaxis->SetTitle("Etacut . ");
fEtaSlider->GetListOfPrimitives()->AddFirst(etaaxis);
fCanvas->cd();
-
+
fTrigPad->SetEditable(kFALSE);
fButtons->SetEditable(kFALSE);
fTracksToDisplay =0;
fNTracksToDisplay =0;
-
+
fCanvas->cd();
fCanvas->Update();
}
}
//_____________________________________________________________________________
-void AliDisplay::Copy(AliDisplay &) const
+void AliDisplay::Copy(TObject &) const
{
//
// Copy *this onto disp -- not implemented
//
- Fatal("Copy","Not implemented~\n");
+ AliFatal("Not implemented");
}
//----------------------------------------------------------------------------
// fPad->Modified();
// TClonesArray *particles=gAlice->Particles();
// TParticle *p = (TParticle*)particles->UncheckedAt(idx);
- TParticle *p = gAlice->Particle(idx);
- printf("\nTrack index %d\n",idx);
- printf("Particle ID %d\n",p->GetPdgCode());
- printf("Parent %d\n",p->GetFirstMother());
- printf("First child %d\n",p->GetFirstDaughter());
- printf("Px,Py,Pz %f %f %f\n",p->Px(),p->Py(),p->Pz());
+ TParticle *p = gAlice->GetMCApp()->Particle(idx);
+ AliInfo(Form("Track index %d",idx));
+ AliInfo(Form("Particle ID %d",p->GetPdgCode()));
+ AliInfo(Form("Parent %d",p->GetFirstMother()));
+ AliInfo(Form("First child %d",p->GetFirstDaughter()));
+ AliInfo(Form("Px,Py,Pz %f %f %f",p->Px(),p->Py(),p->Pz()));
return;
}
}
//Get cut slider
smax = fCutSlider->GetMaximum();
smin = fCutSlider->GetMinimum();
- cutmin = kptcutmax*smin;
- if (smax < 0.98) cutmax = kptcutmax*smax;
+ cutmin = fgkPtCutMax*smin;
+ if (smax < 0.98) cutmax = fgkPtCutMax*smax;
else cutmax = 100000;
//Get eta slider
smax = fEtaSlider->GetMaximum();
smin = fEtaSlider->GetMinimum();
- etamin = ketacutmax*(2*smin-1);
- etamax = ketacutmax*(2*smax-1);
+ etamin = fgkEtaCutMax*(2*smin-1);
+ etamax = fgkEtaCutMax*(2*smax-1);
if (smin < 0.02) etamin = -1000;
if (smax > 0.98) etamax = 1000;
char ptitle[100];
sprintf(ptitle,"Alice event: %d, Run:%d",gAlice->GetHeader()->GetEvent(), gAlice->GetHeader()->GetRun());
title->AddText(ptitle);
- Int_t nparticles = gAlice->Particles()->GetEntriesFast();
+ Int_t nparticles = gAlice->GetMCApp()->Particles()->GetEntriesFast();
sprintf(ptitle,"Nparticles = %d Nhits = %d",nparticles, fHitsCuts);
title->AddText(ptitle);
} else {
gPad->Clear();
Int_t iret;
+#if ROOT_VERSION_CODE>= 331523
+ Double_t rmin[]={-1,-1,-1};
+ Double_t rmax[]={ 1, 1, 1};
+ TView *view = new TView3D(1,rmin,rmax);
+#else
TView *view = new TView(1);
+#endif
Float_t range = fRrange*fRangeSlider->GetMaximum();
view->SetRange(-range,-range,-range,range, range, range);
fZoomX0[0] = -1;
if (x1 < x0) {temp = x0; x0 = x1; x1 = temp;}
if (y1 < y0) {temp = y0; y0 = y1; y1 = temp;}
gPad->Range(x0,y0,x1,y1);
- if (fZooms < kMAXZOOMS-1) {
+ if (fZooms < fgkMaxZooms-1) {
fZooms++;
fZoomX0[fZooms] = x0;
fZoomY0[fZooms] = y0;
gAlice->ResetPoints();
TIter next(gAlice->Modules());
AliModule *module;
- Int_t ntracks = gAlice->GetNtrack();
-
+ Int_t ntracks = gAlice->GetMCApp()->GetNtrack();
+
+ while((module = (AliModule*)next()))
+ {
+ AliDetector* detector = dynamic_cast<AliDetector*>(module);
+ if(detector) detector->SetTreeAddress();
+ }
+ next.Reset();
+
// load only wanted tracks
- if (fNTracksToDisplay>0){
- Int_t nprim = gAlice->Stack()->GetNprimary();
- for (Int_t track=0; track<fNTracksToDisplay;track++) {
+ if (fNTracksToDisplay>0)
+ {
+ Int_t nprim = gAlice->Stack()->GetNprimary();
+ for (Int_t track=0; track<fNTracksToDisplay;track++)
+ {
+ gAlice->ResetHits();
+ Int_t nev = nprim-1-gAlice->GetMCApp()->GetPrimary(fTracksToDisplay[track]);
+ while((module = (AliModule*)next()))
+ {
+ AliDetector* detector = dynamic_cast<AliDetector*>(module);
+ if(detector)
+ {
+ detector->TreeH()->GetEvent(nev);
+ module->LoadPoints(nprim-1-gAlice->GetMCApp()->GetPrimary(fTracksToDisplay[track]));
+ }
+ }
+ next.Reset();
+ }
+ }
+ else
+ {
+
+ for (Int_t track=0; track<ntracks;track++) {
gAlice->ResetHits();
- gAlice->TreeH()->GetEvent(nprim-1-gAlice->GetPrimary(fTracksToDisplay[track]));
- while((module = dynamic_cast<AliModule*>(next()))) {
- module->LoadPoints(nprim-1-gAlice->GetPrimary(fTracksToDisplay[track]));
+ while((module = (AliModule*)next())) {
+ AliDetector* detector = dynamic_cast<AliDetector*>(module);
+ if(detector)
+ {
+ if (detector->TreeH()->GetEvent(track))
+ detector->LoadPoints(track);
+ }
}
next.Reset();
}
}
- else
- for (Int_t track=0; track<ntracks;track++) {
- gAlice->ResetHits();
- gAlice->TreeH()->GetEvent(track);
- while((module = dynamic_cast<AliModule*>(next()))) {
- module->LoadPoints(track);
- }
- next.Reset();
- }
}
//_____________________________________________________________________________
// delta = -1 show previous event
if (delta) {
- gAlice->Clear();
- Int_t currentEvent = gAlice->GetHeader()->GetEvent();
+// gAlice->Clear();
+ //Int_t currentEvent = gAlice->GetHeader()->GetEvent();//event number is not filled correctly
+ Int_t currentEvent = gAlice->GetRunLoader()->GetEventNumber();
Int_t newEvent = currentEvent + delta;
gAlice->GetEvent(newEvent);
- if (!gAlice->TreeH()) return;
+ AliInfo(Form("delta = %d currentEvent = %d newEvent = %d",
+ delta, currentEvent, newEvent));
}
LoadPoints();
fPad->cd();