13#include "TVirtualPad.h"
14#include "BesVisLib/BesTView.h"
16#include "TPolyLine3D.h"
22#include "TPluginManager.h"
26#include "TVirtualViewer3D.h"
32const Int_t kCARTESIAN = 1;
34const Double_t
kRad = 3.14159265358979323846/180.0;
49 for (Int_t i=0;i<3;i++) {
57 fLatitude(tv.fLatitude),
58 fLongitude(tv.fLongitude),
65 fOutline(tv.fOutline),
66 fDefaultOutline(tv.fDefaultOutline),
67 fAutoRange(tv.fAutoRange),
72 for (Int_t i=0; i<16; i++) {
78 for(Int_t i=0; i<3; i++) {
88 for(Int_t i=0; i<4; i++)
111 for(Int_t i=0; i<16; i++) {
117 for(Int_t i=0; i<3; i++) {
127 for(Int_t i=0; i<4; i++)
167 if (!gROOT->GetListOfSpecials()->FindObject(
"R__TVirtualUtil3D")) {
169 if ((h = gROOT->GetPluginManager()->FindHandler(
"TVirtualUtil3D"))) {
170 if (h->LoadPlugin() == -1)
176 SetBit(kMustCleanup);
184 if (system == kCARTESIAN || system ==
kPOLAR || system == 11)
fPsi = 0;
189 gPad->Range(-1, -1, 1, 1);
192 for (i = 0; i < 3;
fRmin[i] = 0,
fRmax[i] = 1, i++);
231 if (!gROOT->GetListOfSpecials()->FindObject(
"R__TVirtualUtil3D")) {
233 if ((h = gROOT->GetPluginManager()->FindHandler(
"TVirtualUtil3D"))) {
234 if (h->LoadPlugin() == -1)
240 SetBit(kMustCleanup);
247 if (system == kCARTESIAN || system ==
kPOLAR || system == 11)
fPsi = 0;
251 gPad->Range(-1, -1, 1, 1);
255 for (i = 0; i < 3;
fRmin[i] = rmin[i],
fRmax[i] = rmax[i], i++);
264 if (gPad) gPad->SetView(
this);
293 if (!gROOT->GetListOfSpecials()->FindObject(
"R__TVirtualUtil3D")) {
295 if ((h = gROOT->GetPluginManager()->FindHandler(
"TVirtualUtil3D"))) {
296 if (h->LoadPlugin() == -1)
302 SetBit(kMustCleanup);
309 if (system == kCARTESIAN || system ==
kPOLAR || system == 11)
fPsi = 0;
313 gPad->Range(-1, -1, 1, 1);
317 for (i = 0; i < 3;
fRmin[i] = rmin[i],
fRmax[i] = rmax[i], i++);
326 if (gPad) gPad->SetView(
this);
332void BesTView::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)
362 Int_t i1, i2, i3, i4,
ix, iy;
368 sina = TMath::Sin(ang*
kRad);
369 cosa = TMath::Cos(ang*
kRad);
380 if (
fTN[0] < 0) i1 = 2;
381 if (
fTN[0]*cosa +
fTN[1]*sina < 0) i1 = 5 - i1;
390 av[4] = p[(i1 << 1) - 2];
391 av[5] = p[(i1 << 1) - 1];
392 av[7] = p[(i2 << 1) - 2];
393 av[8] = p[(i2 << 1) - 1];
394 av[10] = p[(i3 << 1) - 2];
395 av[11] = p[(i3 << 1) - 1];
396 av[13] = p[(i4 << 1) - 2];
397 av[14] = p[(i4 << 1) - 1];
398 for (i = 1; i <= 4; ++i) {
399 av[i*3 + 3] =
fRmin[2];
400 av[i*3 + 13] = av[i*3 + 1];
401 av[i*3 + 14] = av[i*3 + 2];
402 av[i*3 + 15] =
fRmax[2];
407 if (av[4] == av[7])
ix = 2;
408 if (av[5] == av[8])
ix = 1;
412 if (av[
ix*3 + 1] > av[(
ix + 1)*3 + 1]) ix1 =
ix + 1;
413 ix2 = (
ix << 1) - ix1 + 1;
416 if (av[iy*3 + 2] > av[(iy + 1)*3 + 2]) iy1 = iy + 1;
417 iy2 = (iy << 1) - iy1 + 1;
422 if (
fTN[10] >= 0)
return;
423 k = (ix1 - 1)*3 + ix2;
442 k = (iy1 - 1)*3 + iy2;
504 for (i=0; i<3; i++) cov[i] = 0.5*(
fRmax[i]+
fRmin[i]);
506 Double_t c1 = TMath::Cos(
fPsi*
kRad);
507 Double_t s1 = TMath::Sin(
fPsi*
kRad);
513 t12[0] = c1*c3 - s1*c2*s3;
514 t12[4] = c1*s3 + s1*c2*c3;
518 t12[1] = -s1*c3 - c1*c2*s3;
519 t12[5] = -s1*s3 + c1*c2*c3;
529 t12[12] = -(cov[0]*t12[0]+cov[1]*t12[4]+cov[2]*t12[8]);
530 t12[13] = -(cov[0]*t12[1]+cov[1]*t12[5]+cov[2]*t12[9]);
531 t12[14] = -(cov[0]*t12[2]+cov[1]*t12[6]+cov[2]*t12[10]);
555 fTnorm[0] = t12[0] + a2*t12[2];
556 fTnorm[1] = t12[1] + b2*t12[2];
560 fTnorm[4] = t12[4] + a2*t12[6];
561 fTnorm[5] = t12[5] + b2*t12[6];
565 fTnorm[8] = t12[8] + a2*t12[10];
566 fTnorm[9] = t12[9] + b2*t12[10];
570 fTnorm[12] = t12[12] + a2*t12[14];
571 fTnorm[13] = t12[13] + b2*t12[14];
601 Double_t cosphi, Double_t sinphi,
602 Double_t costhe, Double_t sinthe,
603 Double_t cospsi, Double_t sinpsi,
604 Double_t *tnorm, Double_t *tback)
628 Double_t tran[16] , rota[16] ;
629 Double_t c1, c2, c3, s1, s2, s3, scalex, scaley, scalez;
641 tran[0] = 1 / scalex;
644 tran[3] = -c[0] / scalex;
647 tran[5] = 1 / scaley;
649 tran[7] = -c[1] / scaley;
653 tran[10] = 1 / scalez;
654 tran[11] = -c[2] / scalez;
674 rota[0] = c1*c3 - s1*c2*s3;
675 rota[1] = c1*s3 + s1*c2*c3;
679 rota[4] = -s1*c3 - c1* c2*s3;
680 rota[5] = -s1*s3 + c1* c2*c3;
696 for (i = 1; i <= 3; ++i) {
697 for (k = 1; k <= 4; ++k) {
698 tnorm[k + (i << 2)] = rota[(i << 2) - 4]*tran[k - 1] + rota[(i
699 << 2) - 3]*tran[k + 3] + rota[(i << 2) - 2]*tran[k +7]
700 + rota[(i << 2) - 1]*tran[k + 11];
717 for (i = 1; i <= 3; ++i) {
718 for (k = 1; k <= 4; ++k) {
719 tback[k + (i << 2)] = tran[(i << 2) - 4]*rota[(k << 2) - 4] +
720 tran[(i << 2) - 3]*rota[(k << 2) - 3] + tran[(i << 2) -2]
721 *rota[(k << 2) - 2] + tran[(i << 2) - 1]*rota[(k <<2) - 1];
732 TPolyLine3D::DrawOutlineCube(outline,rmin,rmax);
756 static Int_t system, framewasdrawn;
757 static Double_t xrange, yrange, xmin, ymin, longitude1, latitude1, longitude2, latitude2;
758 static Double_t newlatitude, newlongitude, oldlatitude, oldlongitude;
759 Double_t dlatitude, dlongitude,
x,
y;
765 if (!gPad->IsEditable())
return;
766 gPad->AbsCoordinates(kTRUE);
777 gPad->SetCursor(kRotate);
783 xmin = gPad->GetX1();
784 ymin = gPad->GetY1();
785 xrange = gPad->GetX2() - xmin;
786 yrange = gPad->GetY2() - ymin;
787 x = gPad->PixeltoX(px);
788 y = gPad->PixeltoY(py);
792 longitude1 = 180*(
x-xmin)/xrange;
793 latitude1 = 90*(
y-ymin)/yrange;
795 latitude1 = 90*(
x-xmin)/xrange;
796 longitude1 = 180*(
y-ymin)/yrange;
798 newlongitude = oldlongitude = -90 - gPad->GetPhi();
799 newlatitude = oldlatitude = 90 - gPad->GetTheta();
812 if (framewasdrawn)
fOutline->Paint();
814 x = gPad->PixeltoX(px);
815 y = gPad->PixeltoY(py);
817 longitude2 = 180*(
x-xmin)/xrange;
818 latitude2 = 90*(
y-ymin)/yrange;
820 latitude2 = 90*(
x-xmin)/xrange;
821 longitude2 = 180*(
y-ymin)/yrange;
823 dlongitude = longitude2 - longitude1;
824 dlatitude = latitude2 - latitude1;
825 newlatitude = oldlatitude + dlatitude;
826 newlongitude = oldlongitude - dlongitude;
828 ResetView(newlongitude, newlatitude, psideg, irep);
834 if (gROOT->IsEscaped()) {
835 gROOT->SetEscape(kFALSE);
847 TVirtualViewer3D *viewer = gPad->GetViewer3D();
848 if (viewer && !strcmp(viewer->IsA()->GetName(),
"TView3Der3DPad")) {
849 gPad->ReleaseViewer3D();
857 SetView(newlongitude, newlatitude, psideg, irep);
858 gPad->SetPhi(-90-newlongitude);
859 gPad->SetTheta(90-newlatitude);
860 gPad->Modified(kTRUE);
863 gVirtualX->SetLineColor(-1);
864 gVirtualX->SetLineStyle(-1);
865 gVirtualX->SetLineWidth(-1);
870 gPad->AbsCoordinates(kFALSE);
910 Double_t x1, x2, z1, z2,
phi1,
phi2;
915 if (aphi[kphi + 1] == aphi[1]) aphi[kphi + 1] += 360;
916 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) {
931 if (x1 >= 0 && x2 > 0)
continue;
932 if (x1 <= 0 && x2 < 0)
continue;
938 Error(
"FindPhiSectors",
"something strange: num. of critical sector not equal 2");
946 phi1 =
kRad*(aphi[iphi[0]] + aphi[iphi[0] + 1]) / (
float)2.;
947 phi2 =
kRad*(aphi[iphi[1]] + aphi[iphi[1] + 1]) / (
float)2.;
950 if ((z1 <= z2 && iopt == 1) || (z1 > z2 && iopt == 2)) {
977 Double_t z1, z2, cosphi, sinphi, tncons, th1, th2, dth;
983 dth = TMath::Abs(ath[kth + 1] - ath[1]);
985 ath[kth + 2] = 0.5*(ath[1] + ath[kth + 1]) + 180;
986 ath[kth + 3] = ath[1] + 360;
992 cosphi = TMath::Cos(phi*
kRad);
993 sinphi = TMath::Sin(phi*
kRad);
995 for (i = 1; i <= kth; ++i) {
997 th2 =
kRad*ath[i + 1];
998 FindNormal(TMath::Cos(th1)*cosphi, TMath::Cos(th1)*sinphi, -TMath::Sin(th1), z1);
999 FindNormal(TMath::Cos(th2)*cosphi, TMath::Cos(th2)*sinphi, -TMath::Sin(th2), z2);
1000 if (z1 >= 0 && z2 > 0)
continue;
1001 if (z1 <= 0 && z2 < 0)
continue;
1007 Error(
"FindThetaSectors",
"Something strange: num. of critical sectors not equal 2");
1015 tncons =
fTN[8]*TMath::Cos(phi*
kRad) +
fTN[9]*TMath::Sin(phi*
kRad);
1016 th1 =
kRad*(ath[ith[0]] + ath[ith[0] + 1]) / (
float)2.;
1017 th2 =
kRad*(ath[ith[1]] + ath[ith[1] + 1]) / (
float)2.;
1018 z1 = tncons*TMath::Sin(th1) +
fTN[10]*TMath::Cos(th1);
1019 z2 = tncons*TMath::Sin(th2) +
fTN[10]*TMath::Cos(th2);
1020 if ((z1 <= z2 && iopt == 1) || (z1 > z2 && iopt == 2)) {
1043 Double_t sqrt3 = 0.5*TMath::Sqrt(3.0);
1045 for (Int_t i = 0; i < 3; i++) {
1046 if (
fRmin[i] >=
fRmax[i]) { irep = -1;
return;}
1082 Double_t x1,y1,x2,y2;
1087 if (
fSystem != 1)
return 9998;
1089 x1 = gPad->XtoAbsPixel(
fX1[0]);
1090 y1 = gPad->YtoAbsPixel(
fX1[1]);
1091 x2 = gPad->XtoAbsPixel(
fX2[0]);
1092 y2 = gPad->YtoAbsPixel(
fX2[1]);
1093 }
else if (axis == 2) {
1094 x1 = gPad->XtoAbsPixel(
fY1[0]);
1095 y1 = gPad->YtoAbsPixel(
fY1[1]);
1096 x2 = gPad->XtoAbsPixel(
fY2[0]);
1097 y2 = gPad->YtoAbsPixel(
fY2[1]);
1099 x1 = gPad->XtoAbsPixel(
fZ1[0]);
1100 y1 = gPad->YtoAbsPixel(
fZ1[1]);
1101 x2 = gPad->XtoAbsPixel(
fZ2[0]);
1102 y2 = gPad->YtoAbsPixel(
fZ2[1]);
1104 Double_t xx1 =
x - x1;
1105 Double_t xx2 =
x - x2;
1106 Double_t x1x2 = x1 - x2;
1107 Double_t yy1 =
y - y1;
1108 Double_t yy2 =
y - y2;
1109 Double_t y1y2 = y1 - y2;
1110 Double_t a = xx1*xx1 + yy1*yy1;
1111 Double_t
b = xx2*xx2 + yy2*yy2;
1112 Double_t c = x1x2*x1x2 + y1y2*y1y2;
1113 if (c <= 0)
return 9999;
1114 Double_t
v = TMath::Sqrt(c);
1115 Double_t u = (a -
b + c)/(2*
v);
1116 Double_t d = TMath::Abs(a - u*u);
1118 Int_t dist = Int_t(TMath::Sqrt(d) - 0.5);
1132 Double_t extent = TMath::Sqrt(dx*dx+dy*dy+dz*dz);
1171 if (TMath::Abs(p[0])>p[2])
return kTRUE;
1172 if (TMath::Abs(p[1])>p[2])
return kTRUE;
1219 Double_t
x,
y, z, a1, a2, a3, b1, b2, b3, c1, c2, c3;
1233 pn[0] =
x*(b2*c3 - b3*c2) +
y*(b3*c1 - b1*c3) + z*(b1*c2 - b2*c1);
1234 pn[1] =
x*(c2*a3 - c3*a2) +
y*(c3*a1 - c1*a3) + z*(c1*a2 - c2*a1);
1235 pn[2] =
x*(a2*b3 - a3*b2) +
y*(a3*b1 - a1*b3) + z*(a1*b2 - a2*b1);
1249 Double_t
x,
y, z, a1, a2, a3, b1, b2, b3, c1, c2, c3;
1263 pn[0] =
x*(b2*c3 - b3*c2) +
y*(b3*c1 - b1*c3) + z*(b1*c2 - b2*c1);
1264 pn[1] =
x*(c2*a3 - c3*a2) +
y*(c3*a1 - c1*a3) + z*(c1*a2 - c2*a1);
1265 pn[2] =
x*(a2*b3 - a3*b2) +
y*(a3*b1 - a1*b3) + z*(a1*b2 - a2*b1);
1284 Double_t
x,
y, z, r1, r2, r3, xx, yy, smax[2];
1285 Double_t xgraf[6], ygraf[6];
1287 for (i = 1; i <= 2; ++i) {
1288 smax[i - 1] =
fTnorm[(i << 2) - 1];
1289 for (k = 1; k <= 3; ++k) {
1290 if (
fTnorm[k + (i << 2) - 5] < 0) {
1291 smax[i - 1] +=
fTnorm[k + (i << 2) - 5]*
fRmin[k-1];
1293 smax[i - 1] +=
fTnorm[k + (i << 2) - 5]*
fRmax[k-1];
1299 Double_t xmin = -smax[0];
1300 Double_t xmax = smax[0];
1301 Double_t ymin = -smax[1];
1302 Double_t ymax = smax[1];
1303 Double_t dx = xmax-xmin;
1304 Double_t dy = ymax-ymin;
1305 Double_t dxr = dx/(1 - gPad->GetLeftMargin() - gPad->GetRightMargin());
1306 Double_t dyr = dy/(1 - gPad->GetBottomMargin() - gPad->GetTopMargin());
1310 gPad->Range(xmin - dxr*gPad->GetLeftMargin(),
1311 ymin - dyr*gPad->GetBottomMargin(),
1312 xmax + dxr*gPad->GetRightMargin(),
1313 ymax + dyr*gPad->GetTopMargin());
1314 gPad->RangeAxis(xmin, ymin, xmax, ymax);
1322 xgraf[0] = -smax[0];
1323 xgraf[1] = -smax[0];
1324 xgraf[2] = -smax[0];
1325 xgraf[3] = -smax[0];
1328 ygraf[0] = -smax[1];
1330 ygraf[2] = -smax[1];
1333 ygraf[4] = -smax[1];
1334 for (i = 1; i <= 8; ++i) {
1337 z = 0.5*((1 - r3)*
fRmin[2] + (r3 + 1)*
fRmax[2]);
1340 if (TMath::Abs(xx - xgraf[1]) <= 1e-4) {
1341 if (ygraf[1] >= yy) ygraf[1] = yy;
1342 if (ygraf[2] <= yy) ygraf[2] = yy;
1344 if (TMath::Abs(xx - xgraf[5]) <= 1e-4) {
1345 if (ygraf[5] >= yy) ygraf[5] = yy;
1346 if (ygraf[4] <= yy) ygraf[4] = yy;
1348 if (TMath::Abs(yy - ygraf[0]) <= 1e-4) xgraf[0] = xx;
1349 if (TMath::Abs(yy - ygraf[3]) <= 1e-4) xgraf[3] = xx;
1351 if (i % 2 == 0) r2 = -r2;
1354 gPad->PaintFillArea(6, xgraf, ygraf);
1359void BesTView::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)
1365 for (Int_t i=0;i<3;i++) {
1380 Double_t screen_factor = 1.;
1387 fUpix = gPad->GetWw()*gPad->GetAbsWNDC();
1390 fVpix = gPad->GetWh()*gPad->GetAbsHNDC();
1391 du = 0.5*screen_factor*
fDproj;
1464 Error(
"SetRange",
"problem setting view");
1484 Double_t rmax[3], rmin[3];
1489 rmin[0] = x0 < rmin[0] ? x0 : rmin[0];
1490 rmin[1] = y0 < rmin[1] ? y0 : rmin[1];
1491 rmin[2] = z0 < rmin[2] ? z0 : rmin[2];
1492 rmax[0] = x1 > rmax[0] ? x1 : rmax[0];
1493 rmax[1] = y1 > rmax[1] ? y1 : rmax[1];
1494 rmax[2] = z1 > rmax[2] ? z1 : rmax[2];
1499 rmin[0] = x0 > rmin[0] ? x0 : rmin[0];
1500 rmin[1] = y0 > rmin[1] ? y0 : rmin[1];
1501 rmin[2] = z0 > rmin[2] ? z0 : rmin[2];
1502 rmax[0] = x1 < rmax[0] ? x1 : rmax[0];
1503 rmax[1] = y1 < rmax[1] ? y1 : rmax[1];
1504 rmax[2] = z1 < rmax[2] ? z1 : rmax[2];
1508 rmin[0] = x0; rmax[0] = x1;
1509 rmin[1] = y0; rmax[1] = y1;
1510 rmin[2] = z0; rmax[2] = z1;
1530 ResetView(longitude, latitude, psi, irep);
1539 Double_t upix =
fUpix;
1540 Double_t vpix =
fVpix;
1542 fUpix = gPad->GetWw()*gPad->GetAbsWNDC();
1544 fVpix = gPad->GetWh()*gPad->GetAbsHNDC();
1569 Double_t scale[3], centre[3];
1570 Double_t c1, c2, c3, s1, s2, s3;
1577 Error(
"ResetView",
"Error in min-max scope");
1593 c1 = TMath::Cos(longitude*
kRad);
1594 s1 = TMath::Sin(longitude*
kRad);
1595 c2 = TMath::Cos(latitude*
kRad);
1596 s2 = TMath::Sin(latitude*
kRad);
1597 c3 = TMath::Cos(psi*
kRad);
1598 s3 = TMath::Sin(psi*
kRad);
1619 for (Int_t i=0; i<3; i++)
1650 for (Int_t i=0; i<3; i++)
1671 TVirtualPad *thisPad = pad;
1672 if (!thisPad) thisPad = gPad;
1674 thisPad->Modified();
1689 TVirtualPad *thisPad = pad;
1690 if (!thisPad) thisPad = gPad;
1692 thisPad->SetPhi(-90-p);
1693 thisPad->SetTheta(90-
t);
1694 thisPad->Modified();
1723 TAxis3D::ToggleRulers(pad);
1733 TAxis3D::ToggleZoom(pad);
1743 Double_t maxSide = 0;
1745 for (i=0;i<3; i++) maxSide = TMath::Max(maxSide,
max[i]-
min[i]);
1747 for (i=0;i<3; i++)
max[i] += maxSide - (
max[i]-
min[i]);
1761 for (i=0;i<3; i++) {
1773 if (TMath::Abs(unZoomFactor) < 0.001)
return;
1782 if (TMath::Abs(zoomFactor) < 0.001)
return;
1786 for (i=0;i<3; i++) {
1788 Double_t c = (
max[i]+
min[i])/2;
1790 Double_t
s = (
max[i]-
min[i])/(2*zoomFactor);
1801 Double_t dlong, Double_t dlat, Double_t dpsi)
1806 if (nsteps<1)
return;
1807 Double_t fc = 1./Double_t(nsteps);
1808 Double_t oc[3], od[3], dir[3];
1813 for (i=0; i<3; i++) {
1817 Double_t dox = cov[0]-oc[0];
1818 Double_t doy = cov[1]-oc[1];
1819 Double_t doz = cov[2]-oc[2];
1821 Double_t dd = TMath::Sqrt(dox*dox+doy*doy+doz*doz);
1828 dox = fc*(dx-od[0]);
1829 doy = fc*(dy-od[1]);
1830 doz = fc*(dz-od[2]);
1831 for (i=0; i<nsteps; i++) {
1838 for (j=0; j<3; j++) {
1839 fRmin[j] = oc[j]-od[j];
1840 fRmax[j] = oc[j]+od[j];
1977void BesTView::Streamer(TBuffer &R__b)
1981 if (R__b.IsReading()) {
1983 Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
1986 R__b.ReadClassBuffer(TView::Class(),
this, R__v, R__s, R__c);
1993 if (R__b.GetParent() && R__b.GetVersionOwner() < 22500) {
1996 TObject::Streamer(R__b);
1997 TAttLine::Streamer(R__b);
1998 Float_t single, sa[12];
2003 R__b >> single;
fPsi = single;
2004 R__b.ReadStaticArray(sa);
for (i=0;i<12;i++)
fTN[i] = sa[i];
2005 R__b.ReadStaticArray(sa);
for (i=0;i<12;i++)
fTB[i] = sa[i];
2006 R__b.ReadStaticArray(sa);
for (i=0;i<3;i++)
fRmax[i] = sa[i];
2007 R__b.ReadStaticArray(sa);
for (i=0;i<3;i++)
fRmin[i] = sa[i];
2008 R__b.ReadStaticArray(sa);
for (i=0;i<12;i++)
fTnorm[i] = sa[i];
2009 R__b.ReadStaticArray(sa);
for (i=0;i<12;i++)
fTback[i] = sa[i];
2010 R__b.ReadStaticArray(sa);
for (i=0;i<3;i++)
fX1[i] = sa[i];
2011 R__b.ReadStaticArray(sa);
for (i=0;i<3;i++)
fX2[i] = sa[i];
2012 R__b.ReadStaticArray(sa);
for (i=0;i<3;i++)
fY1[i] = sa[i];
2013 R__b.ReadStaticArray(sa);
for (i=0;i<3;i++)
fY2[i] = sa[i];
2014 R__b.ReadStaticArray(sa);
for (i=0;i<3;i++)
fZ1[i] = sa[i];
2015 R__b.ReadStaticArray(sa);
for (i=0;i<3;i++)
fZ2[i] = sa[i];
2020 TObject::Streamer(R__b);
2021 TAttLine::Streamer(R__b);
2025 R__b.ReadStaticArray(
fTN);
2026 R__b.ReadStaticArray(
fTB);
2027 R__b.ReadStaticArray(
fRmax);
2028 R__b.ReadStaticArray(
fRmin);
2029 R__b.ReadStaticArray(
fTnorm);
2030 R__b.ReadStaticArray(
fTback);
2031 R__b.ReadStaticArray(
fX1);
2032 R__b.ReadStaticArray(
fX2);
2033 R__b.ReadStaticArray(
fY1);
2034 R__b.ReadStaticArray(
fY2);
2035 R__b.ReadStaticArray(
fZ1);
2036 R__b.ReadStaticArray(
fZ2);
2045 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)
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 &)