13#include "BesVisLib/BesCursor.h"
14#include "BesVisLib/BesEvent.h"
15#include "BesVisLib/BesGeometry.h"
16#include "BesVisLib/BesView.h"
32 if ( gDebug ) cout <<
"BesView normal ctor called" << endl;
35 fLabel =
new TPaveLabel( 0.02, 0.17, 0.02, 0.09,
"3D View" );
36 fLabel->SetFillColor( 42 );
55 fStatusCurrent->Transfer( fStatus3D, 1 );
58 cout <<
"BesGeometry does not exist! " << endl;
65 fExtentDefault = GetExtent();
70 ViewCenter[0] = ViewCenter[1] = 0.0;
78 if ( gDebug ) cout <<
"BesView default dtor called" << endl;
85 delete fStatusCurrent;
91 SetRange( -1.0 * m_BesR, -1.0 * m_BesR, -0.5 * m_BesZ, m_BesR, m_BesR, 0.5 * m_BesZ );
103 if ( fViewType &
k3DView ) { fStatus3D->Transfer( fStatusCurrent, 0 ); }
104 else if ( fViewType &
kXYView ) { fStatusXY->Transfer( fStatusCurrent, 0 ); }
105 else if ( fViewType &
kZRView ) { fStatusZR->Transfer( fStatusCurrent, 0 ); }
107 fViewType = ViewType;
119 Int_t iPerspective = 0;
124 fStatusCurrent->Transfer( fStatus3D, 1 );
160 else if ( fViewType &
kXYView )
168 fStatusCurrent->Transfer( fStatusXY, 1 );
206 else if ( fViewType &
kZRView )
214 fStatusCurrent->Transfer( fStatusZR, 1 );
365 if ( gDebug ) cout <<
"BesView::ClearPad called" << endl;
366 if ( gPad->GetListOfPrimitives() ) gPad->GetListOfPrimitives()->Clear();
374 if ( gDebug ) cout <<
"BesView::ExecuteEvent called" << endl;
377 if ( gROOT->GetEditorMode() )
379 gPad->ExecuteEvent( event, px, py );
386 gPad->SetCursor( kMove );
387 static Double_t xmin, ymin, xmax, ymax, x0, y0;
388 Double_t dx, dy, x, y;
394 xmin = gPad->GetX1();
395 ymin = gPad->GetY1();
396 xmax = gPad->GetX2();
397 ymax = gPad->GetY2();
398 x0 = gPad->AbsPixeltoX( px );
399 y0 = gPad->AbsPixeltoY( py );
402 case kButton1Motion: gPad->SetCursor( kMove );
406 x = gPad->AbsPixeltoX( px );
407 y = gPad->AbsPixeltoY( py );
411 gPad->Range( xmin + dx, ymin + dy, xmax + dx, ymax + dy );
415 ViewCenter[0] = ( xmin + xmax ) / 2 + dx;
416 ViewCenter[1] = ( ymin + ymax ) / 2 + dy;
419 default: gPad->SetCursor( kMove );
425 gPad->SetCursor( kPointer );
458 Double_t x1, y1, x2, y2, dx, dy, x, y, x0, y0;
463 x0 = gPad->PixeltoX( 0 );
464 y0 = gPad->PixeltoY( 0 );
465 x = gPad->PixeltoX( px );
466 y = gPad->PixeltoY( py );
470 gPad->Range( x1 + dx, y1 + dy, x2 + dx, y2 + dy );
474 ViewCenter[0] = ( x1 + x2 ) / 2 + dx;
475 ViewCenter[1] = ( y1 + y2 ) / 2 + dy;
486 Double_t xrange, yrange;
487 xrange = gPad->GetX2() - gPad->GetX1();
488 yrange = gPad->GetY2() - gPad->GetY1();
489 gPad->Range( -xrange / 2, -yrange / 2, xrange / 2, yrange / 2 );
493 ViewCenter[0] = ViewCenter[1] = 0.0;
501 Double_t dx = ( ratio /
GetZoomRatio() - 1 ) * ViewCenter[0];
502 Double_t dy = ( ratio /
GetZoomRatio() - 1 ) * ViewCenter[1];
505 fMarkerSize *= ratio;
509 Double_t newx1 = gPad->GetX1() + dx;
510 Double_t newy1 = gPad->GetY1() + dy;
511 Double_t newx2 = gPad->GetX2() + dx;
512 Double_t newy2 = gPad->GetY2() + dy;
513 gPad->Range( newx1, newy1, newx2, newy2 );
515 ViewCenter[0] = ( newx1 + newx2 ) / 2;
516 ViewCenter[1] = ( newy1 + newy2 ) / 2;
519 fStatusCurrent->fZoom = ratio;
520 fStatusXY->fZoom = ratio;
521 fStatusZR->fZoom = ratio;
522 fStatus3D->fZoom = ratio;
531 Double_t dx = ( fZoomFactor - 1 ) * ViewCenter[0];
532 Double_t dy = ( fZoomFactor - 1 ) * ViewCenter[1];
534 fMarkerSize = fMarkerSize * fZoomFactor;
543 Double_t newx1 = gPad->GetX1() + dx;
544 Double_t newy1 = gPad->GetY1() + dy;
545 Double_t newx2 = gPad->GetX2() + dx;
546 Double_t newy2 = gPad->GetY2() + dy;
547 gPad->Range( newx1, newy1, newx2, newy2 );
549 ViewCenter[0] = ( newx1 + newx2 ) / 2;
550 ViewCenter[1] = ( newy1 + newy2 ) / 2;
583 Double_t dx = ( 1 / fZoomFactor - 1 ) * ViewCenter[0];
584 Double_t dy = ( 1 / fZoomFactor - 1 ) * ViewCenter[1];
586 fMarkerSize = fMarkerSize / fZoomFactor;
595 Double_t newx1 = gPad->GetX1() + dx;
596 Double_t newy1 = gPad->GetY1() + dy;
597 Double_t newx2 = gPad->GetX2() + dx;
598 Double_t newy2 = gPad->GetY2() + dy;
599 gPad->Range( newx1, newy1, newx2, newy2 );
601 ViewCenter[0] = ( newx1 + newx2 ) / 2;
602 ViewCenter[1] = ( newy1 + newy2 ) / 2;
633 (
Phi - 2 * TMath::Pi() * Int_t(
Phi / ( 2 * TMath::Pi() ) ) ) * 180. / TMath::Pi();
634 if ( Phi2 < 0 ) Phi2 += 360;
635 if ( Phi2 >= fStatusCurrent->fPhiRangeMin && Phi2 < fStatusCurrent->fPhiRangeMax )
646 if ( gDebug ) cout <<
"BesView::SetPhiRange called" << endl;
648 fStatusCurrent->fPhiRangeMin =
PhiMin;
649 fStatusCurrent->fPhiRangeMax =
PhiMax;
681 fLabel->SetX1( -0.9 );
682 fLabel->SetX2( -0.6 );
683 fLabel->SetY1( -0.9 );
684 fLabel->SetY2( -0.78 );
688 case k3DView: fLabel->SetLabel(
"3D View" );
break;
689 case kXYView: fLabel->SetLabel(
"XY View" );
break;
690 case kZRView: fLabel->SetLabel(
"ZR View" );
break;
692 case kCgemUFView0: fLabel->SetLabel(
"CGEM Layer0" );
break;
693 case kCgemUFView1: fLabel->SetLabel(
"CGEM Layer1" );
break;
694 case kCgemUFView2: fLabel->SetLabel(
"CGEM Layer2" );
break;
696 fLabel->Draw(
"BR,NDC,SAME" );
725 if ( fStatusCurrent->fFishEye == kTRUE )
730 Float_t pvWC[3], pvNDC[3];
735 pn[0] = TMath::Sign( Double_t( TMath::Sqrt( TMath::Abs( pn[0] - pvNDC[0] ) ) ),
736 Double_t( pn[0] - pvNDC[0] ) ) +
738 pn[1] = TMath::Sign( Double_t( TMath::Sqrt( TMath::Abs( pn[1] - pvNDC[1] ) ) ),
739 Double_t( pn[1] - pvNDC[1] ) ) +
744 r = TMath::Sqrt( TMath::Power( pn[0], 2 ) + TMath::Power( pn[1], 2 ) );
745 s = TMath::Sqrt( r ) / r;
762 if ( fStatusCurrent->fFishEye == kTRUE )
767 Double_t pvWC[3], pvNDC[3];
772 pn[0] = TMath::Sign( TMath::Sqrt( TMath::Abs( pn[0] - pvNDC[0] ) ), pn[0] - pvNDC[0] ) +
774 pn[1] = TMath::Sign( TMath::Sqrt( TMath::Abs( pn[1] - pvNDC[1] ) ), pn[1] - pvNDC[1] ) +
780 r = TMath::Sqrt( TMath::Power( pn[0], 2 ) + TMath::Power( pn[1], 2 ) );
781 s = TMath::Sqrt( r ) / r;
798 if ( fStatusCurrent->fFishEye == kTRUE )
803 Float_t pvWC[3], pvNDC[3];
808 p[0] = TMath::Sign( ( pn[0] - pvNDC[0] ) * ( pn[0] - pvNDC[0] ), pn[0] - pvNDC[0] ) +
810 p[1] = TMath::Sign( ( pn[1] - pvNDC[1] ) * ( pn[1] - pvNDC[1] ), pn[1] - pvNDC[1] ) +
815 r = TMath::Sqrt( TMath::Power( p[0], 2 ) + TMath::Power( p[1], 2 ) );
833 if ( fStatusCurrent->fFishEye == kTRUE )
838 Double_t pvWC[3], pvNDC[3];
843 p[0] = TMath::Sign( ( pn[0] - pvNDC[0] ) * ( pn[0] - pvNDC[0] ), pn[0] - pvNDC[0] ) +
845 p[1] = TMath::Sign( ( pn[1] - pvNDC[1] ) * ( pn[1] - pvNDC[1] ), pn[1] - pvNDC[1] ) +
850 r = TMath::Sqrt( TMath::Power( p[0], 2 ) + TMath::Power( p[1], 2 ) );
866 this->
SetView( 0, 90, 270, iret );
875 Double_t Pndc[3] = { gPad->AbsPixeltoX( px ), gPad->AbsPixeltoY( py ), 0 };
885 static char info[64];
888 sprintf( info,
"z=%-.3fmm, r=%-.3fmm", pw[2], pw[1] );
893 sprintf( info,
"x=%-.3fmm, y=%-.3fmm", pw[0], pw[1] );
911 fStatusCurrent->Default( fViewType );
930 case k3DView: fStatus3D->Transfer( fStatusCurrent, 1 );
break;
931 case kXYView: fStatusXY->Transfer( fStatusCurrent, 1 );
break;
932 case kZRView: fStatusZR->Transfer( fStatusCurrent, 1 );
break;
ClassImp(BesView) BesView
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)
R__EXTERN BesCursor * gBesCursor
R__EXTERN BesEvent * gEvent
R__EXTERN BesGeometry * gBesGeometry
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)
Bool_t IsPerspective() const
virtual void SetParallel()
virtual void SetView(Double_t longitude, Double_t latitude, Double_t psi, Int_t &irep)
virtual void ExecuteRotateView(Int_t event, Int_t px, Int_t py)
virtual void SetPerspective()
virtual void WCtoNDC(const Float_t *pw, Float_t *pn)
virtual Int_t GetRSign(Float_t Phi)
void Move(Int_t px, Int_t py)
virtual void UpdateView(Bool_t resetview=kFALSE)
virtual char * GetObjectInfo(Int_t px, Int_t py) const
void SetPhiRange(Float_t PhiMin=0, Float_t PhiMax=180)
virtual void SetViewTypeBare(EBESViewType ViewType, Bool_t resetview=kFALSE)
virtual void SetViewType(EBESViewType ViewType, Bool_t resetview=kFALSE)
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
virtual void NDCtoWC(const Float_t *pn, Float_t *pw)
virtual void DefaultRange()
void SetZoomRatio(Double_t ratio)