9#include "BesVisLib/Bes2DView.h"
13# include <TGeometry.h>
24#ifndef ROOT_TPaveLabel
25# include <TPaveLabel.h>
51 if ( gDebug ) cout <<
"Bes2DView normal ctor called" << endl;
54 fLabel =
new TPaveLabel( 0.02, 0.17, 0.02, 0.09,
"3D View" );
55 fLabel->SetFillColor( 42 );
74 fStatusCurrent->Transfer( fStatus3D, 1 );
75 SetRange( -200, -200, -200, 200, 200, 200 );
86 if ( gDebug ) cout <<
"Bes2DView default dtor called" << endl;
93 delete fStatusCurrent;
104 if ( gDebug ) cout <<
"Bes2DView::ClearPad called" << endl;
105 if ( gPad->GetListOfPrimitives() ) gPad->GetListOfPrimitives()->Clear();
113 if ( gDebug ) cout <<
"Bes2DView::ExecuteEvent called" << endl;
123 if ( gROOT->GetEditorMode() )
125 cout <<
"ROOT" << endl;
126 gPad->ExecuteEvent( event, px, py );
130 static Double_t xmin, ymin, xmax, ymax, x0, y0;
131 Double_t dx, dy, x, y;
136 gPad->SetCursor( kMove );
138 xmin = gPad->GetX1();
139 ymin = gPad->GetY1();
140 xmax = gPad->GetX2();
141 ymax = gPad->GetY2();
142 x0 = gPad->AbsPixeltoX( px );
143 y0 = gPad->AbsPixeltoY( py );
146 case kButton1Motion: gPad->SetCursor( kMove );
150 x = gPad->AbsPixeltoX( px );
151 y = gPad->AbsPixeltoY( py );
155 gPad->Range( xmin + dx, ymin + dy, xmax + dx, ymax + dy );
160 default: gPad->SetCursor( kCross );
169 Double_t x1, y1, x2, y2, dx, dy, x, y, x0, y0;
174 x0 = gPad->PixeltoX( 0 );
175 y0 = gPad->PixeltoY( 0 );
176 x = gPad->PixeltoX( px );
177 y = gPad->PixeltoY( py );
181 gPad->Range( x1 + dx, y1 + dy, x2 + dx, y2 + dy );
196 Double_t xrange, yrange;
197 xrange = gPad->GetX2() - gPad->GetX1();
198 yrange = gPad->GetY2() - gPad->GetY1();
199 gPad->Range( -xrange / 2, -yrange / 2, xrange / 2, yrange / 2 );
208 fMarkerSize = fMarkerSize * fZoomFactor;
217 fMarkerSize = fMarkerSize / fZoomFactor;
231 (
Phi - 2 * TMath::Pi() * Int_t(
Phi / ( 2 * TMath::Pi() ) ) ) * 180. / TMath::Pi();
232 if ( Phi2 < 0 ) Phi2 += 360;
233 if ( Phi2 >= fStatusCurrent->fPhiRangeMin && Phi2 < fStatusCurrent->fPhiRangeMax )
244 if ( !gGeometry )
return;
254 fLabel->SetX1NDC( 0.05 );
255 fLabel->SetX2NDC( 0.20 );
256 fLabel->SetY1NDC( 0.05 );
257 fLabel->SetY2NDC( 0.12 );
259 switch ( f2DViewType )
264 case 0: fLabel->SetLabel(
"XY View" );
break;
265 case 1: fLabel->SetLabel(
"ZR View" );
break;
267 fLabel->Draw(
"BR,NDC,SAME" );
281 if ( fStatusCurrent->fFishEye == kTRUE )
284 if ( f2DViewType == 1 )
286 Float_t pvWC[3], pvNDC[3];
291 pn[0] = TMath::Sign( Double_t( TMath::Sqrt( TMath::Abs( pn[0] - pvNDC[0] ) ) ),
292 Double_t( pn[0] - pvNDC[0] ) ) +
294 pn[1] = TMath::Sign( Double_t( TMath::Sqrt( TMath::Abs( pn[1] - pvNDC[1] ) ) ),
295 Double_t( pn[1] - pvNDC[1] ) ) +
300 r = TMath::Sqrt( TMath::Power( pn[0], 2 ) + TMath::Power( pn[1], 2 ) );
301 s = TMath::Sqrt( r ) / r;
318 if ( fStatusCurrent->fFishEye == kTRUE )
321 if ( f2DViewType == 1 )
323 Double_t pvWC[3], pvNDC[3];
328 pn[0] = TMath::Sign( TMath::Sqrt( TMath::Abs( pn[0] - pvNDC[0] ) ), pn[0] - pvNDC[0] ) +
330 pn[1] = TMath::Sign( TMath::Sqrt( TMath::Abs( pn[1] - pvNDC[1] ) ), pn[1] - pvNDC[1] ) +
336 r = TMath::Sqrt( TMath::Power( pn[0], 2 ) + TMath::Power( pn[1], 2 ) );
337 s = TMath::Sqrt( r ) / r;
350 if ( f2DViewType == 0 )
363 if ( fStatusCurrent->fFishEye == kTRUE )
366 if ( f2DViewType == 1 )
368 Float_t pvWC[3], pvNDC[3];
373 p[0] = TMath::Sign( ( pn[0] - pvNDC[0] ) * ( pn[0] - pvNDC[0] ), pn[0] - pvNDC[0] ) +
375 p[1] = TMath::Sign( ( pn[1] - pvNDC[1] ) * ( pn[1] - pvNDC[1] ), pn[1] - pvNDC[1] ) +
380 r = TMath::Sqrt( TMath::Power( p[0], 2 ) + TMath::Power( p[1], 2 ) );
394 if ( f2DViewType == 0 )
407 if ( fStatusCurrent->fFishEye == kTRUE )
410 if ( f2DViewType == 1 )
412 Double_t pvWC[3], pvNDC[3];
417 p[0] = TMath::Sign( ( pn[0] - pvNDC[0] ) * ( pn[0] - pvNDC[0] ), pn[0] - pvNDC[0] ) +
419 p[1] = TMath::Sign( ( pn[1] - pvNDC[1] ) * ( pn[1] - pvNDC[1] ), pn[1] - pvNDC[1] ) +
424 r = TMath::Sqrt( TMath::Power( p[0], 2 ) + TMath::Power( p[1], 2 ) );
437 Double_t pw[3] = { 0., 0., 0. };
440 static char info[64];
441 if ( f2DViewType == 1 )
443 sprintf( info,
"z=%-.3fcm, r=%-.3fcm", pw[0], pw[1] );
448 sprintf( info,
"x=%-.3fcm, y=%-.3fcm", pw[0], pw[1] );
470 this->
SetRange( -2635, -2635, -2875, 2635, 2635, 2875 );
ClassImp(Bes2DView) Bes2DView
double Phi(RecMdcKalTrack *trk)
sprintf(cut, "kal_costheta0_em>-0.93&&kal_costheta0_em<0.93&&kal_pxy0_em>=0.05+%d*0.1&&kal_" "pxy0_em<0.15+%d*0.1&&NGch>=2", j, j)
virtual char * GetObjectInfo(Int_t px, Int_t py) const
virtual void WCtoNDC(const Float_t *pw, Float_t *pn)
virtual void NDCtoWC(const Float_t *pn, Float_t *pw)
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
virtual Int_t GetRSign(Float_t Phi)
virtual void UpdateView(Bool_t resetview=kFALSE)
void Move(Int_t px, Int_t py)
virtual void WCtoNDC(const Float_t *pw, Float_t *pn)
virtual void UnzoomView(TVirtualPad *pad=0, Double_t unZoomFactor=1.25)
virtual void NDCtoWC(const Float_t *pn, Float_t *pw)
virtual void ZoomView(TVirtualPad *pad=0, Double_t zoomFactor=1.25)
virtual void SetRange(const Double_t *min, const Double_t *max)