13#include "BesVisLib/BesTView.h"
17#include "TPolyLine3D.h"
19#include "TVirtualPad.h"
23#include "TPluginManager.h"
26#include "TVirtualViewer3D.h"
32 const Int_t kCARTESIAN = 1;
34const Double_t
kRad = 3.14159265358979323846 / 180.0;
45 SetBit( kMustCleanup );
46 for ( Int_t i = 0; i < 3; i++ ) {
fX1[i] =
fX2[i] =
fY1[i] =
fY2[i] =
fZ1[i] =
fZ2[i] = 0; }
66 for ( Int_t i = 0; i < 16; i++ )
73 for ( Int_t i = 0; i < 3; i++ )
93 TView::operator=( tv );
106 for ( Int_t i = 0; i < 16; i++ )
113 for ( Int_t i = 0; i < 3; i++ )
161 if ( !gROOT->GetListOfSpecials()->FindObject(
"R__TVirtualUtil3D" ) )
164 if ( ( h = gROOT->GetPluginManager()->FindHandler(
"TVirtualUtil3D" ) ) )
166 if ( h->LoadPlugin() == -1 )
return;
171 SetBit( kMustCleanup );
179 if ( system == kCARTESIAN || system ==
kPOLAR || system == 11 )
fPsi = 0;
185 gPad->Range( -1, -1, 1, 1 );
188 for ( i = 0; i < 3;
fRmin[i] = 0,
fRmax[i] = 1, i++ )
190 for ( i = 0; i < 3; i++ ) {
fX1[i] =
fX2[i] =
fY1[i] =
fY2[i] =
fZ1[i] =
fZ2[i] = 0; }
196 gPad->SetView(
this );
224 if ( !gROOT->GetListOfSpecials()->FindObject(
"R__TVirtualUtil3D" ) )
227 if ( ( h = gROOT->GetPluginManager()->FindHandler(
"TVirtualUtil3D" ) ) )
229 if ( h->LoadPlugin() == -1 )
return;
234 SetBit( kMustCleanup );
241 if ( system == kCARTESIAN || system ==
kPOLAR || system == 11 )
fPsi = 0;
245 gPad->Range( -1, -1, 1, 1 );
249 for ( i = 0; i < 3;
fRmin[i] = rmin[i],
fRmax[i] = rmax[i], i++ )
251 for ( i = 0; i < 3; i++ ) {
fX1[i] =
fX2[i] =
fY1[i] =
fY2[i] =
fZ1[i] =
fZ2[i] = 0; }
257 if ( gPad ) gPad->SetView(
this );
284 if ( !gROOT->GetListOfSpecials()->FindObject(
"R__TVirtualUtil3D" ) )
287 if ( ( h = gROOT->GetPluginManager()->FindHandler(
"TVirtualUtil3D" ) ) )
289 if ( h->LoadPlugin() == -1 )
return;
294 SetBit( kMustCleanup );
301 if ( system == kCARTESIAN || system ==
kPOLAR || system == 11 )
fPsi = 0;
305 gPad->Range( -1, -1, 1, 1 );
309 for ( i = 0; i < 3;
fRmin[i] = rmin[i],
fRmax[i] = rmax[i], i++ )
311 for ( i = 0; i < 3; i++ ) {
fX1[i] =
fX2[i] =
fY1[i] =
fY2[i] =
fZ1[i] =
fZ2[i] = 0; }
317 if ( gPad ) gPad->SetView(
this );
323 Int_t& iy2, Int_t& iz1, Int_t& iz2 ) {
352 Int_t i1, i2, i3, i4,
ix, iy;
358 sina = TMath::Sin( ang *
kRad );
359 cosa = TMath::Cos( ang *
kRad );
370 if (
fTN[0] < 0 ) i1 = 2;
371 if (
fTN[0] * cosa +
fTN[1] * sina < 0 ) i1 = 5 - i1;
380 av[4] = p[( i1 << 1 ) - 2];
381 av[5] = p[( i1 << 1 ) - 1];
382 av[7] = p[( i2 << 1 ) - 2];
383 av[8] = p[( i2 << 1 ) - 1];
384 av[10] = p[( i3 << 1 ) - 2];
385 av[11] = p[( i3 << 1 ) - 1];
386 av[13] = p[( i4 << 1 ) - 2];
387 av[14] = p[( i4 << 1 ) - 1];
388 for ( i = 1; i <= 4; ++i )
390 av[i * 3 + 3] =
fRmin[2];
391 av[i * 3 + 13] = av[i * 3 + 1];
392 av[i * 3 + 14] = av[i * 3 + 2];
393 av[i * 3 + 15] =
fRmax[2];
398 if ( av[4] == av[7] )
ix = 2;
399 if ( av[5] == av[8] )
ix = 1;
403 if ( av[
ix * 3 + 1] > av[(
ix + 1 ) * 3 + 1] ) ix1 =
ix + 1;
404 ix2 = (
ix << 1 ) - ix1 + 1;
407 if ( av[iy * 3 + 2] > av[( iy + 1 ) * 3 + 2] ) iy1 = iy + 1;
408 iy2 = ( iy << 1 ) - iy1 + 1;
413 if (
fTN[10] >= 0 )
return;
414 k = ( ix1 - 1 ) * 3 + ix2;
437 k = ( iy1 - 1 ) * 3 + iy2;
502 for ( i = 0; i < 3; i++ ) cov[i] = 0.5 * (
fRmax[i] +
fRmin[i] );
504 Double_t c1 = TMath::Cos(
fPsi *
kRad );
505 Double_t s1 = TMath::Sin(
fPsi *
kRad );
511 t12[0] = c1 * c3 - s1 * c2 * s3;
512 t12[4] = c1 * s3 + s1 * c2 * c3;
516 t12[1] = -s1 * c3 - c1 * c2 * s3;
517 t12[5] = -s1 * s3 + c1 * c2 * c3;
527 t12[12] = -( cov[0] * t12[0] + cov[1] * t12[4] + cov[2] * t12[8] );
528 t12[13] = -( cov[0] * t12[1] + cov[1] * t12[5] + cov[2] * t12[9] );
529 t12[14] = -( cov[0] * t12[2] + cov[1] * t12[6] + cov[2] * t12[10] );
553 fTnorm[0] = t12[0] + a2 * t12[2];
554 fTnorm[1] = t12[1] + b2 * t12[2];
558 fTnorm[4] = t12[4] + a2 * t12[6];
559 fTnorm[5] = t12[5] + b2 * t12[6];
563 fTnorm[8] = t12[8] + a2 * t12[10];
564 fTnorm[9] = t12[9] + b2 * t12[10];
568 fTnorm[12] = t12[12] + a2 * t12[14];
569 fTnorm[13] = t12[13] + b2 * t12[14];
577 Double_t sz = 1. /
fDproj;
597 Double_t sinphi, Double_t costhe, Double_t sinthe,
598 Double_t cospsi, Double_t sinpsi, Double_t* tnorm,
623 Double_t tran[16] , rota[16] ;
624 Double_t c1, c2, c3, s1, s2, s3, scalex, scaley, scalez;
636 tran[0] = 1 / scalex;
639 tran[3] = -c[0] / scalex;
642 tran[5] = 1 / scaley;
644 tran[7] = -c[1] / scaley;
648 tran[10] = 1 / scalez;
649 tran[11] = -c[2] / scalez;
669 rota[0] = c1 * c3 - s1 * c2 * s3;
670 rota[1] = c1 * s3 + s1 * c2 * c3;
674 rota[4] = -s1 * c3 - c1 * c2 * s3;
675 rota[5] = -s1 * s3 + c1 * c2 * c3;
691 for ( i = 1; i <= 3; ++i )
693 for ( k = 1; k <= 4; ++k )
695 tnorm[k + ( i << 2 )] =
696 rota[( i << 2 ) - 4] * tran[k - 1] + rota[( i << 2 ) - 3] * tran[k + 3] +
697 rota[( i << 2 ) - 2] * tran[k + 7] + rota[( i << 2 ) - 1] * tran[k + 11];
714 for ( i = 1; i <= 3; ++i )
716 for ( k = 1; k <= 4; ++k )
718 tback[k + ( i << 2 )] = tran[( i << 2 ) - 4] * rota[( k << 2 ) - 4] +
719 tran[( i << 2 ) - 3] * rota[( k << 2 ) - 3] +
720 tran[( i << 2 ) - 2] * rota[( k << 2 ) - 2] +
721 tran[( i << 2 ) - 1] * rota[( k << 2 ) - 1];
730 TPolyLine3D::DrawOutlineCube( outline, rmin, rmax );
751 static Int_t system, framewasdrawn;
752 static Double_t xrange, yrange, xmin, ymin, longitude1, latitude1, longitude2, latitude2;
753 static Double_t newlatitude, newlongitude, oldlatitude, oldlongitude;
754 Double_t dlatitude, dlongitude, x, y;
760 if ( !gPad->IsEditable() )
return;
761 gPad->AbsCoordinates( kTRUE );
772 case kMouseMotion: gPad->SetCursor( kRotate );
break;
777 xmin = gPad->GetX1();
778 ymin = gPad->GetY1();
779 xrange = gPad->GetX2() - xmin;
780 yrange = gPad->GetY2() - ymin;
781 x = gPad->PixeltoX( px );
782 y = gPad->PixeltoY( py );
787 longitude1 = 180 * ( x - xmin ) / xrange;
788 latitude1 = 90 * ( y - ymin ) / yrange;
792 latitude1 = 90 * ( x - xmin ) / xrange;
793 longitude1 = 180 * ( y - ymin ) / yrange;
795 newlongitude = oldlongitude = -90 - gPad->GetPhi();
796 newlatitude = oldlatitude = 90 - gPad->GetTheta();
803 case kButton1Motion: {
807 if ( framewasdrawn )
fOutline->Paint();
809 x = gPad->PixeltoX( px );
810 y = gPad->PixeltoY( py );
813 longitude2 = 180 * ( x - xmin ) / xrange;
814 latitude2 = 90 * ( y - ymin ) / yrange;
818 latitude2 = 90 * ( x - xmin ) / xrange;
819 longitude2 = 180 * ( y - ymin ) / yrange;
821 dlongitude = longitude2 - longitude1;
822 dlatitude = latitude2 - latitude1;
823 newlatitude = oldlatitude + dlatitude;
824 newlongitude = oldlongitude - dlongitude;
826 ResetView( newlongitude, newlatitude, psideg, irep );
832 if ( gROOT->IsEscaped() )
834 gROOT->SetEscape( kFALSE );
847 TVirtualViewer3D* viewer = gPad->GetViewer3D();
848 if ( viewer && !strcmp( viewer->IsA()->GetName(),
"TView3Der3DPad" ) )
850 gPad->ReleaseViewer3D();
858 SetView( newlongitude, newlatitude, psideg, irep );
859 gPad->SetPhi( -90 - newlongitude );
860 gPad->SetTheta( 90 - newlatitude );
861 gPad->Modified( kTRUE );
864 gVirtualX->SetLineColor( -1 );
865 gVirtualX->SetLineStyle( -1 );
866 gVirtualX->SetLineWidth( -1 );
871 gPad->AbsCoordinates( kFALSE );
909 Double_t x1, x2, z1, z2,
phi1,
phi2;
914 if ( aphi[kphi + 1] == aphi[1] ) aphi[kphi + 1] += 360;
915 dphi = TMath::Abs( aphi[kphi + 1] - aphi[1] );
918 aphi[kphi + 2] = ( aphi[1] + aphi[kphi + 1] ) / (
float)2. + 180;
919 aphi[kphi + 3] = aphi[1] + 360;
926 for ( i = 1; i <= kphi; ++i )
932 if ( x1 >= 0 && x2 > 0 )
continue;
933 if ( x1 <= 0 && x2 < 0 )
continue;
940 Error(
"FindPhiSectors",
"something strange: num. of critical sector not equal 2" );
948 phi1 =
kRad * ( aphi[iphi[0]] + aphi[iphi[0] + 1] ) / (
float)2.;
949 phi2 =
kRad * ( aphi[iphi[1]] + aphi[iphi[1] + 1] ) / (
float)2.;
952 if ( ( z1 <= z2 && iopt == 1 ) || ( z1 > z2 && iopt == 2 ) )
966 Int_t& ith1, Int_t& ith2 ) {
982 Double_t z1, z2, cosphi, sinphi, tncons, th1, th2, dth;
988 dth = TMath::Abs( ath[kth + 1] - ath[1] );
991 ath[kth + 2] = 0.5 * ( ath[1] + ath[kth + 1] ) + 180;
992 ath[kth + 3] = ath[1] + 360;
998 cosphi = TMath::Cos( phi *
kRad );
999 sinphi = TMath::Sin( phi *
kRad );
1001 for ( i = 1; i <= kth; ++i )
1003 th1 =
kRad * ath[i];
1004 th2 =
kRad * ath[i + 1];
1005 FindNormal( TMath::Cos( th1 ) * cosphi, TMath::Cos( th1 ) * sinphi, -TMath::Sin( th1 ),
1007 FindNormal( TMath::Cos( th2 ) * cosphi, TMath::Cos( th2 ) * sinphi, -TMath::Sin( th2 ),
1009 if ( z1 >= 0 && z2 > 0 )
continue;
1010 if ( z1 <= 0 && z2 < 0 )
continue;
1012 if ( k == 3 )
break;
1017 Error(
"FindThetaSectors",
"Something strange: num. of critical sectors not equal 2" );
1025 tncons =
fTN[8] * TMath::Cos( phi *
kRad ) +
fTN[9] * TMath::Sin( phi *
kRad );
1026 th1 =
kRad * ( ath[ith[0]] + ath[ith[0] + 1] ) / (
float)2.;
1027 th2 =
kRad * ( ath[ith[1]] + ath[ith[1] + 1] ) / (
float)2.;
1028 z1 = tncons * TMath::Sin( th1 ) +
fTN[10] * TMath::Cos( th1 );
1029 z2 = tncons * TMath::Sin( th2 ) +
fTN[10] * TMath::Cos( th2 );
1030 if ( ( z1 <= z2 && iopt == 1 ) || ( z1 > z2 && iopt == 2 ) )
1054 Double_t sqrt3 = 0.5 * TMath::Sqrt( 3.0 );
1056 for ( Int_t i = 0; i < 3; i++ )
1097 Double_t x1, y1, x2, y2;
1102 if (
fSystem != 1 )
return 9998;
1105 x1 = gPad->XtoAbsPixel(
fX1[0] );
1106 y1 = gPad->YtoAbsPixel(
fX1[1] );
1107 x2 = gPad->XtoAbsPixel(
fX2[0] );
1108 y2 = gPad->YtoAbsPixel(
fX2[1] );
1110 else if ( axis == 2 )
1112 x1 = gPad->XtoAbsPixel(
fY1[0] );
1113 y1 = gPad->YtoAbsPixel(
fY1[1] );
1114 x2 = gPad->XtoAbsPixel(
fY2[0] );
1115 y2 = gPad->YtoAbsPixel(
fY2[1] );
1119 x1 = gPad->XtoAbsPixel(
fZ1[0] );
1120 y1 = gPad->YtoAbsPixel(
fZ1[1] );
1121 x2 = gPad->XtoAbsPixel(
fZ2[0] );
1122 y2 = gPad->YtoAbsPixel(
fZ2[1] );
1124 Double_t xx1 = x - x1;
1125 Double_t xx2 = x - x2;
1126 Double_t x1x2 = x1 - x2;
1127 Double_t yy1 = y - y1;
1128 Double_t yy2 = y - y2;
1129 Double_t y1y2 = y1 - y2;
1130 Double_t a = xx1 * xx1 + yy1 * yy1;
1131 Double_t b = xx2 * xx2 + yy2 * yy2;
1132 Double_t c = x1x2 * x1x2 + y1y2 * y1y2;
1133 if ( c <= 0 )
return 9999;
1134 Double_t
v = TMath::Sqrt( c );
1135 Double_t u = ( a - b + c ) / ( 2 *
v );
1136 Double_t d = TMath::Abs( a - u * u );
1138 Int_t dist = Int_t( TMath::Sqrt( d ) - 0.5 );
1151 Double_t extent = TMath::Sqrt( dx * dx + dy * dy + dz * dz );
1185 if ( TMath::Abs( p[0] ) > p[2] )
return kTRUE;
1186 if ( TMath::Abs( p[1] ) > p[2] )
return kTRUE;
1230 Double_t x, y, z, a1, a2, a3, b1, b2, b3, c1, c2, c3;
1244 pn[0] = x * ( b2 * c3 - b3 * c2 ) + y * ( b3 * c1 - b1 * c3 ) + z * ( b1 * c2 - b2 * c1 );
1245 pn[1] = x * ( c2 * a3 - c3 * a2 ) + y * ( c3 * a1 - c1 * a3 ) + z * ( c1 * a2 - c2 * a1 );
1246 pn[2] = x * ( a2 * b3 - a3 * b2 ) + y * ( a3 * b1 - a1 * b3 ) + z * ( a1 * b2 - a2 * b1 );
1259 Double_t x, y, z, a1, a2, a3, b1, b2, b3, c1, c2, c3;
1273 pn[0] = x * ( b2 * c3 - b3 * c2 ) + y * ( b3 * c1 - b1 * c3 ) + z * ( b1 * c2 - b2 * c1 );
1274 pn[1] = x * ( c2 * a3 - c3 * a2 ) + y * ( c3 * a1 - c1 * a3 ) + z * ( c1 * a2 - c2 * a1 );
1275 pn[2] = x * ( a2 * b3 - a3 * b2 ) + y * ( a3 * b1 - a1 * b3 ) + z * ( a1 * b2 - a2 * b1 );
1293 Double_t x, y, z, r1, r2, r3, xx, yy, smax[2];
1294 Double_t xgraf[6], ygraf[6];
1296 for ( i = 1; i <= 2; ++i )
1298 smax[i - 1] =
fTnorm[( i << 2 ) - 1];
1299 for ( k = 1; k <= 3; ++k )
1301 if (
fTnorm[k + ( i << 2 ) - 5] < 0 )
1302 { smax[i - 1] +=
fTnorm[k + ( i << 2 ) - 5] *
fRmin[k - 1]; }
1303 else { smax[i - 1] +=
fTnorm[k + ( i << 2 ) - 5] *
fRmax[k - 1]; }
1308 Double_t xmin = -smax[0];
1309 Double_t xmax = smax[0];
1310 Double_t ymin = -smax[1];
1311 Double_t ymax = smax[1];
1312 Double_t dx = xmax - xmin;
1313 Double_t dy = ymax - ymin;
1314 Double_t dxr = dx / ( 1 - gPad->GetLeftMargin() - gPad->GetRightMargin() );
1315 Double_t dyr = dy / ( 1 - gPad->GetBottomMargin() - gPad->GetTopMargin() );
1319 gPad->Range( xmin - dxr * gPad->GetLeftMargin(), ymin - dyr * gPad->GetBottomMargin(),
1320 xmax + dxr * gPad->GetRightMargin(), ymax + dyr * gPad->GetTopMargin() );
1321 gPad->RangeAxis( xmin, ymin, xmax, ymax );
1330 xgraf[0] = -smax[0];
1331 xgraf[1] = -smax[0];
1332 xgraf[2] = -smax[0];
1333 xgraf[3] = -smax[0];
1336 ygraf[0] = -smax[1];
1338 ygraf[2] = -smax[1];
1341 ygraf[4] = -smax[1];
1342 for ( i = 1; i <= 8; ++i )
1344 x = 0.5 * ( ( 1 - r1 ) *
fRmin[0] + ( r1 + 1 ) *
fRmax[0] );
1345 y = 0.5 * ( ( 1 - r2 ) *
fRmin[1] + ( r2 + 1 ) *
fRmax[1] );
1346 z = 0.5 * ( ( 1 - r3 ) *
fRmin[2] + ( r3 + 1 ) *
fRmax[2] );
1349 if ( TMath::Abs( xx - xgraf[1] ) <= 1e-4 )
1351 if ( ygraf[1] >= yy ) ygraf[1] = yy;
1352 if ( ygraf[2] <= yy ) ygraf[2] = yy;
1354 if ( TMath::Abs( xx - xgraf[5] ) <= 1e-4 )
1356 if ( ygraf[5] >= yy ) ygraf[5] = yy;
1357 if ( ygraf[4] <= yy ) ygraf[4] = yy;
1359 if ( TMath::Abs( yy - ygraf[0] ) <= 1e-4 ) xgraf[0] = xx;
1360 if ( TMath::Abs( yy - ygraf[3] ) <= 1e-4 ) xgraf[3] = xx;
1362 if ( i % 2 == 0 ) r2 = -r2;
1363 if ( i >= 4 ) r3 = 1;
1365 gPad->PaintFillArea( 6, xgraf, ygraf );
1371 const Double_t* y2,
const Double_t* z1,
const Double_t* z2 ) {
1376 for ( Int_t i = 0; i < 3; i++ )
1390 if ( !gPad )
return;
1391 Double_t screen_factor = 1.;
1398 fUpix = gPad->GetWw() * gPad->GetAbsWNDC();
1401 fVpix = gPad->GetWh() * gPad->GetAbsHNDC();
1402 du = 0.5 * screen_factor *
fDproj;
1472 if ( irep < 0 ) Error(
"SetRange",
"problem setting view" );
1478 Double_t z1, Int_t
flag ) {
1490 Double_t rmax[3], rmin[3];
1496 rmin[0] = x0 < rmin[0] ? x0 : rmin[0];
1497 rmin[1] = y0 < rmin[1] ? y0 : rmin[1];
1498 rmin[2] = z0 < rmin[2] ? z0 : rmin[2];
1499 rmax[0] = x1 > rmax[0] ? x1 : rmax[0];
1500 rmax[1] = y1 > rmax[1] ? y1 : rmax[1];
1501 rmax[2] = z1 > rmax[2] ? z1 : rmax[2];
1506 rmin[0] = x0 > rmin[0] ? x0 : rmin[0];
1507 rmin[1] = y0 > rmin[1] ? y0 : rmin[1];
1508 rmin[2] = z0 > rmin[2] ? z0 : rmin[2];
1509 rmax[0] = x1 < rmax[0] ? x1 : rmax[0];
1510 rmax[1] = y1 < rmax[1] ? y1 : rmax[1];
1511 rmax[2] = z1 < rmax[2] ? z1 : rmax[2];
1538 ResetView( longitude, latitude, psi, irep );
1546 Double_t upix =
fUpix;
1547 Double_t vpix =
fVpix;
1549 fUpix = gPad->GetWw() * gPad->GetAbsWNDC();
1551 fVpix = gPad->GetWh() * gPad->GetAbsHNDC();
1575 Double_t scale[3], centre[3];
1576 Double_t c1, c2, c3, s1, s2, s3;
1584 Error(
"ResetView",
"Error in min-max scope" );
1600 c1 = TMath::Cos( longitude *
kRad );
1601 s1 = TMath::Sin( longitude *
kRad );
1602 c2 = TMath::Cos( latitude *
kRad );
1603 s2 = TMath::Sin( latitude *
kRad );
1604 c3 = TMath::Cos( psi *
kRad );
1605 s3 = TMath::Sin( psi *
kRad );
1625 for ( Int_t i = 0; i < 3; i++ )
1659 for ( Int_t i = 0; i < 3; i++ )
1683 TVirtualPad* thisPad = pad;
1684 if ( !thisPad ) thisPad = gPad;
1687 thisPad->Modified();
1701 TVirtualPad* thisPad = pad;
1702 if ( !thisPad ) thisPad = gPad;
1705 thisPad->SetPhi( -90 - p );
1706 thisPad->SetTheta( 90 -
t );
1707 thisPad->Modified();
1733 TAxis3D::ToggleRulers( pad );
1743 TAxis3D::ToggleZoom( pad );
1752 Double_t maxSide = 0;
1754 for ( i = 0; i < 3; i++ ) maxSide = TMath::Max( maxSide,
max[i] -
min[i] );
1756 for ( i = 0; i < 3; i++ )
max[i] += maxSide - (
max[i] -
min[i] );
1769 for ( i = 0; i < 3; i++ )
1781 if ( TMath::Abs( unZoomFactor ) < 0.001 )
return;
1782 ZoomView( pad, 1. / unZoomFactor );
1789 if ( TMath::Abs( zoomFactor ) < 0.001 )
return;
1793 for ( i = 0; i < 3; i++ )
1796 Double_t c = (
max[i] +
min[i] ) / 2;
1798 Double_t
s = (
max[i] -
min[i] ) / ( 2 * zoomFactor );
1809 Double_t dlong, Double_t dlat, Double_t dpsi ) {
1813 if ( nsteps < 1 )
return;
1814 Double_t fc = 1. / Double_t( nsteps );
1815 Double_t oc[3], od[3], dir[3];
1820 for ( i = 0; i < 3; i++ )
1825 Double_t dox = cov[0] - oc[0];
1826 Double_t doy = cov[1] - oc[1];
1827 Double_t doz = cov[2] - oc[2];
1829 Double_t dd = TMath::Sqrt( dox * dox + doy * doy + doz * doz );
1837 dox = fc * ( dx - od[0] );
1838 doy = fc * ( dy - od[1] );
1839 doz = fc * ( dz - od[2] );
1840 for ( i = 0; i < nsteps; i++ )
1842 oc[0] += dd * dir[0];
1843 oc[1] += dd * dir[1];
1844 oc[2] += dd * dir[2];
1848 for ( j = 0; j < 3; j++ )
1850 fRmin[j] = oc[j] - od[j];
1851 fRmax[j] = oc[j] + od[j];
1890 case 'J':
ZoomIn();
break;
1905 Double_t shiftu = 0.1 *
fUVcoord[2];
1906 Double_t shiftv = 0.1 *
fUVcoord[3];
1910 case 'L':
fUVcoord[0] += shiftu;
break;
1912 case 'H':
fUVcoord[0] -= shiftu;
break;
1914 case 'U':
fUVcoord[1] += shiftv;
break;
1916 case 'I':
fUVcoord[1] -= shiftv;
break;
1960void BesTView::Streamer( TBuffer& R__b ) {
1963 if ( R__b.IsReading() )
1966 Version_t R__v = R__b.ReadVersion( &R__s, &R__c );
1970 R__b.ReadClassBuffer( TView::Class(),
this, R__v, R__s, R__c );
1977 if ( R__b.GetParent() && R__b.GetVersionOwner() < 22500 )
1981 TObject::Streamer( R__b );
1982 TAttLine::Streamer( R__b );
1983 Float_t single, sa[12];
1992 R__b.ReadStaticArray( sa );
1993 for ( i = 0; i < 12; i++ )
fTN[i] = sa[i];
1994 R__b.ReadStaticArray( sa );
1995 for ( i = 0; i < 12; i++ )
fTB[i] = sa[i];
1996 R__b.ReadStaticArray( sa );
1997 for ( i = 0; i < 3; i++ )
fRmax[i] = sa[i];
1998 R__b.ReadStaticArray( sa );
1999 for ( i = 0; i < 3; i++ )
fRmin[i] = sa[i];
2000 R__b.ReadStaticArray( sa );
2001 for ( i = 0; i < 12; i++ )
fTnorm[i] = sa[i];
2002 R__b.ReadStaticArray( sa );
2003 for ( i = 0; i < 12; i++ )
fTback[i] = sa[i];
2004 R__b.ReadStaticArray( sa );
2005 for ( i = 0; i < 3; i++ )
fX1[i] = sa[i];
2006 R__b.ReadStaticArray( sa );
2007 for ( i = 0; i < 3; i++ )
fX2[i] = sa[i];
2008 R__b.ReadStaticArray( sa );
2009 for ( i = 0; i < 3; i++ )
fY1[i] = sa[i];
2010 R__b.ReadStaticArray( sa );
2011 for ( i = 0; i < 3; i++ )
fY2[i] = sa[i];
2012 R__b.ReadStaticArray( sa );
2013 for ( i = 0; i < 3; i++ )
fZ1[i] = sa[i];
2014 R__b.ReadStaticArray( sa );
2015 for ( i = 0; i < 3; i++ )
fZ2[i] = sa[i];
2022 TObject::Streamer( R__b );
2023 TAttLine::Streamer( R__b );
2027 R__b.ReadStaticArray(
fTN );
2028 R__b.ReadStaticArray(
fTB );
2029 R__b.ReadStaticArray(
fRmax );
2030 R__b.ReadStaticArray(
fRmin );
2031 R__b.ReadStaticArray(
fTnorm );
2032 R__b.ReadStaticArray(
fTback );
2033 R__b.ReadStaticArray(
fX1 );
2034 R__b.ReadStaticArray(
fX2 );
2035 R__b.ReadStaticArray(
fY1 );
2036 R__b.ReadStaticArray(
fY2 );
2037 R__b.ReadStaticArray(
fZ1 );
2038 R__b.ReadStaticArray(
fZ2 );
2048 R__b.WriteClassBuffer( TView::Class(),
this );
ClassImp(BesTView) const Int_t kCARTESIAN
DOUBLE_PRECISION count[3]
**********Class see also m_nmax DOUBLE PRECISION m_amel DOUBLE PRECISION m_x2 DOUBLE PRECISION m_alfinv DOUBLE PRECISION m_Xenph INTEGER m_KeyWtm INTEGER m_idyfs DOUBLE PRECISION m_zini DOUBLE PRECISION m_q2 DOUBLE PRECISION m_Wt_KF DOUBLE PRECISION m_WtCut INTEGER m_KFfin *COMMON c_KarLud $ !Input CMS energy[GeV] $ !CMS energy after beam spread beam strahlung[GeV] $ !Beam energy spread[GeV] $ !z boost due to beam spread $ !electron beam mass *ff pair spectrum $ !minimum v
virtual void FrontView(TVirtualPad *pad=0)
virtual Int_t GetDistancetoAxis(Int_t axis, Int_t px, Int_t py, Double_t &ratio)
virtual void TopView(TVirtualPad *pad=0)
virtual void SetOutlineToCube()
virtual void WCtoNDC(const Float_t *pw, Float_t *pn)
virtual void UnzoomView(TVirtualPad *pad=0, Double_t unZoomFactor=1.25)
virtual void SetAxisNDC(const Double_t *x1, const Double_t *x2, const Double_t *y1, const Double_t *y2, const Double_t *z1, const Double_t *z2)
Bool_t IsClippedNDC(Double_t *p) const
virtual void FindNormal(Double_t x, Double_t y, Double_t z, Double_t &zn)
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
virtual void AdjustScales(TVirtualPad *pad=0)
virtual void FindPhiSectors(Int_t iopt, Int_t &kphi, Double_t *aphi, Int_t &iphi1, Int_t &iphi2)
void SetWindow(Double_t u0, Double_t v0, Double_t du, Double_t dv)
Double_t GetExtent() const
virtual void ToggleRulers(TVirtualPad *pad=0)
virtual void DefinePerspectiveView()
virtual void ToggleZoom(TVirtualPad *pad=0)
virtual void Centered3DImages(TVirtualPad *pad=0)
virtual void NDCtoWC(const Float_t *pn, Float_t *pw)
virtual void AxisVertex(Double_t ang, Double_t *av, Int_t &ix1, Int_t &ix2, Int_t &iy1, Int_t &iy2, Int_t &iz1, Int_t &iz2)
virtual void ZoomView(TVirtualPad *pad=0, Double_t zoomFactor=1.25)
virtual void SetRange(const Double_t *min, const Double_t *max)
virtual void RotateView(Double_t phi, Double_t theta, TVirtualPad *pad=0)
virtual void NormalWCtoNDC(const Float_t *pw, Float_t *pn)
BesTView(const BesTView &)
Set to TRUE after ExecuteRotateView.
Bool_t IsPerspective() const
static void AdjustPad(TVirtualPad *pad=0)
void MoveFocus(Double_t *center, Double_t dx, Double_t dy, Double_t dz, Int_t nsteps=10, Double_t dlong=0, Double_t dlat=0, Double_t dpsi=0)
virtual void PadRange(Int_t rback)
virtual void SetParallel()
virtual void GetRange(Float_t *min, Float_t *max)
void ResetView(Double_t longitude, Double_t latitude, Double_t psi, Int_t &irep)
virtual void SideView(TVirtualPad *pad=0)
virtual void DefineViewDirection(const Double_t *s, const Double_t *c, Double_t cosphi, Double_t sinphi, Double_t costhe, Double_t sinthe, Double_t cospsi, Double_t sinpsi, Double_t *tnorm, Double_t *tback)
virtual void SetView(Double_t longitude, Double_t latitude, Double_t psi, Int_t &irep)
TSeqCollection * fOutline
virtual void ExecuteRotateView(Int_t event, Int_t px, Int_t py)
virtual void SetPerspective()
virtual void MoveViewCommand(Char_t chCode, Int_t count=1)
void MoveWindow(Char_t option)
virtual void DrawOutlineCube(TList *outline, Double_t *rmin, Double_t *rmax)
virtual void FindThetaSectors(Int_t iopt, Double_t phi, Int_t &kth, Double_t *ath, Int_t &ith1, Int_t &ith2)
void GetWindow(Double_t &u0, Double_t &v0, Double_t &du, Double_t &dv) const
virtual void FindScope(Double_t *scale, Double_t *center, Int_t &irep)
BesTView & operator=(const BesTView &)