13#include "TVirtualPad.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]);
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);
776 gPad->SetCursor(kRotate);
782 xmin = gPad->GetX1();
783 ymin = gPad->GetY1();
784 xrange = gPad->GetX2() - xmin;
785 yrange = gPad->GetY2() - ymin;
786 x = gPad->PixeltoX(px);
787 y = gPad->PixeltoY(py);
791 longitude1 = 180*(
x-xmin)/xrange;
792 latitude1 = 90*(y-ymin)/yrange;
794 latitude1 = 90*(
x-xmin)/xrange;
795 longitude1 = 180*(y-ymin)/yrange;
797 newlongitude = oldlongitude = -90 - gPad->GetPhi();
798 newlatitude = oldlatitude = 90 - gPad->GetTheta();
811 if (framewasdrawn)
fOutline->Paint();
813 x = gPad->PixeltoX(px);
814 y = gPad->PixeltoY(py);
816 longitude2 = 180*(
x-xmin)/xrange;
817 latitude2 = 90*(y-ymin)/yrange;
819 latitude2 = 90*(
x-xmin)/xrange;
820 longitude2 = 180*(y-ymin)/yrange;
822 dlongitude = longitude2 - longitude1;
823 dlatitude = latitude2 - latitude1;
824 newlatitude = oldlatitude + dlatitude;
825 newlongitude = oldlongitude - dlongitude;
827 ResetView(newlongitude, newlatitude, psideg, irep);
833 if (gROOT->IsEscaped()) {
834 gROOT->SetEscape(kFALSE);
846 TVirtualViewer3D *viewer = gPad->GetViewer3D();
847 if (viewer && !strcmp(viewer->IsA()->GetName(),
"TView3Der3DPad")) {
848 gPad->ReleaseViewer3D();
856 SetView(newlongitude, newlatitude, psideg, irep);
857 gPad->SetPhi(-90-newlongitude);
858 gPad->SetTheta(90-newlatitude);
859 gPad->Modified(kTRUE);
862 gVirtualX->SetLineColor(-1);
863 gVirtualX->SetLineStyle(-1);
864 gVirtualX->SetLineWidth(-1);
869 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]);
917 aphi[kphi + 2] = (aphi[1] + aphi[kphi + 1]) / (
float)2. + 180;
918 aphi[kphi + 3] = aphi[1] + 360;
925 for (i = 1; i <= kphi; ++i) {
930 if (x1 >= 0 && x2 > 0)
continue;
931 if (x1 <= 0 && x2 < 0)
continue;
937 Error(
"FindPhiSectors",
"something strange: num. of critical sector not equal 2");
945 phi1 =
kRad*(aphi[iphi[0]] + aphi[iphi[0] + 1]) / (
float)2.;
946 phi2 =
kRad*(aphi[iphi[1]] + aphi[iphi[1] + 1]) / (
float)2.;
949 if ((z1 <= z2 && iopt == 1) || (z1 > z2 && iopt == 2)) {
976 Double_t z1, z2, cosphi, sinphi, tncons, th1, th2, dth;
982 dth = TMath::Abs(ath[kth + 1] - ath[1]);
984 ath[kth + 2] = 0.5*(ath[1] + ath[kth + 1]) + 180;
985 ath[kth + 3] = ath[1] + 360;
991 cosphi = TMath::Cos(phi*
kRad);
992 sinphi = TMath::Sin(phi*
kRad);
994 for (i = 1; i <= kth; ++i) {
996 th2 =
kRad*ath[i + 1];
997 FindNormal(TMath::Cos(th1)*cosphi, TMath::Cos(th1)*sinphi, -TMath::Sin(th1), z1);
998 FindNormal(TMath::Cos(th2)*cosphi, TMath::Cos(th2)*sinphi, -TMath::Sin(th2), z2);
999 if (z1 >= 0 && z2 > 0)
continue;
1000 if (z1 <= 0 && z2 < 0)
continue;
1006 Error(
"FindThetaSectors",
"Something strange: num. of critical sectors not equal 2");
1014 tncons =
fTN[8]*TMath::Cos(phi*
kRad) +
fTN[9]*TMath::Sin(phi*
kRad);
1015 th1 =
kRad*(ath[ith[0]] + ath[ith[0] + 1]) / (
float)2.;
1016 th2 =
kRad*(ath[ith[1]] + ath[ith[1] + 1]) / (
float)2.;
1017 z1 = tncons*TMath::Sin(th1) +
fTN[10]*TMath::Cos(th1);
1018 z2 = tncons*TMath::Sin(th2) +
fTN[10]*TMath::Cos(th2);
1019 if ((z1 <= z2 && iopt == 1) || (z1 > z2 && iopt == 2)) {
1042 Double_t sqrt3 = 0.5*TMath::Sqrt(3.0);
1044 for (Int_t i = 0; i < 3; i++) {
1045 if (
fRmin[i] >=
fRmax[i]) { irep = -1;
return;}
1081 Double_t x1,y1,x2,y2;
1086 if (
fSystem != 1)
return 9998;
1088 x1 = gPad->XtoAbsPixel(
fX1[0]);
1089 y1 = gPad->YtoAbsPixel(
fX1[1]);
1090 x2 = gPad->XtoAbsPixel(
fX2[0]);
1091 y2 = gPad->YtoAbsPixel(
fX2[1]);
1092 }
else if (axis == 2) {
1093 x1 = gPad->XtoAbsPixel(
fY1[0]);
1094 y1 = gPad->YtoAbsPixel(
fY1[1]);
1095 x2 = gPad->XtoAbsPixel(
fY2[0]);
1096 y2 = gPad->YtoAbsPixel(
fY2[1]);
1098 x1 = gPad->XtoAbsPixel(
fZ1[0]);
1099 y1 = gPad->YtoAbsPixel(
fZ1[1]);
1100 x2 = gPad->XtoAbsPixel(
fZ2[0]);
1101 y2 = gPad->YtoAbsPixel(
fZ2[1]);
1103 Double_t xx1 =
x - x1;
1104 Double_t xx2 =
x - x2;
1105 Double_t x1x2 = x1 - x2;
1106 Double_t yy1 = y - y1;
1107 Double_t yy2 = y - y2;
1108 Double_t y1y2 = y1 - y2;
1109 Double_t a = xx1*xx1 + yy1*yy1;
1110 Double_t b = xx2*xx2 + yy2*yy2;
1111 Double_t c = x1x2*x1x2 + y1y2*y1y2;
1112 if (c <= 0)
return 9999;
1113 Double_t
v = TMath::Sqrt(c);
1114 Double_t u = (a - b + c)/(2*
v);
1115 Double_t d = TMath::Abs(a - u*u);
1117 Int_t dist = Int_t(TMath::Sqrt(d) - 0.5);
1131 Double_t extent = TMath::Sqrt(dx*dx+dy*dy+dz*dz);
1142 for (Int_t i = 0; i < 3; max[i] =
fRmax[i], min[i] =
fRmin[i], i++);
1151 for (Int_t i = 0; i < 3; max[i] =
fRmax[i], min[i] =
fRmin[i], i++) { }
1170 if (TMath::Abs(p[0])>p[2])
return kTRUE;
1171 if (TMath::Abs(p[1])>p[2])
return kTRUE;
1218 Double_t
x, y, z, a1, a2, a3, b1, b2, b3,
c1, c2, c3;
1232 pn[0] =
x*(b2*c3 - b3*c2) + y*(b3*
c1 - b1*c3) + z*(b1*c2 - b2*
c1);
1233 pn[1] =
x*(c2*a3 - c3*a2) + y*(c3*a1 -
c1*a3) + z*(
c1*a2 - c2*a1);
1234 pn[2] =
x*(a2*b3 - a3*b2) + y*(a3*b1 - a1*b3) + z*(a1*b2 - a2*b1);
1248 Double_t
x, y, z, a1, a2, a3, b1, b2, b3,
c1, c2, c3;
1262 pn[0] =
x*(b2*c3 - b3*c2) + y*(b3*
c1 - b1*c3) + z*(b1*c2 - b2*
c1);
1263 pn[1] =
x*(c2*a3 - c3*a2) + y*(c3*a1 -
c1*a3) + z*(
c1*a2 - c2*a1);
1264 pn[2] =
x*(a2*b3 - a3*b2) + y*(a3*b1 - a1*b3) + z*(a1*b2 - a2*b1);
1283 Double_t
x, y, z, r1, r2, r3, xx, yy, smax[2];
1284 Double_t xgraf[6], ygraf[6];
1286 for (i = 1; i <= 2; ++i) {
1287 smax[i - 1] =
fTnorm[(i << 2) - 1];
1288 for (k = 1; k <= 3; ++k) {
1289 if (
fTnorm[k + (i << 2) - 5] < 0) {
1290 smax[i - 1] +=
fTnorm[k + (i << 2) - 5]*
fRmin[k-1];
1292 smax[i - 1] +=
fTnorm[k + (i << 2) - 5]*
fRmax[k-1];
1298 Double_t xmin = -smax[0];
1299 Double_t xmax = smax[0];
1300 Double_t ymin = -smax[1];
1301 Double_t ymax = smax[1];
1302 Double_t dx = xmax-xmin;
1303 Double_t dy = ymax-ymin;
1304 Double_t dxr = dx/(1 - gPad->GetLeftMargin() - gPad->GetRightMargin());
1305 Double_t dyr = dy/(1 - gPad->GetBottomMargin() - gPad->GetTopMargin());
1309 gPad->Range(xmin - dxr*gPad->GetLeftMargin(),
1310 ymin - dyr*gPad->GetBottomMargin(),
1311 xmax + dxr*gPad->GetRightMargin(),
1312 ymax + dyr*gPad->GetTopMargin());
1313 gPad->RangeAxis(xmin, ymin, xmax, ymax);
1321 xgraf[0] = -smax[0];
1322 xgraf[1] = -smax[0];
1323 xgraf[2] = -smax[0];
1324 xgraf[3] = -smax[0];
1327 ygraf[0] = -smax[1];
1329 ygraf[2] = -smax[1];
1332 ygraf[4] = -smax[1];
1333 for (i = 1; i <= 8; ++i) {
1335 y = 0.5*((1 - r2)*
fRmin[1] + (r2 + 1)*
fRmax[1]);
1336 z = 0.5*((1 - r3)*
fRmin[2] + (r3 + 1)*
fRmax[2]);
1339 if (TMath::Abs(xx - xgraf[1]) <= 1e-4) {
1340 if (ygraf[1] >= yy) ygraf[1] = yy;
1341 if (ygraf[2] <= yy) ygraf[2] = yy;
1343 if (TMath::Abs(xx - xgraf[5]) <= 1e-4) {
1344 if (ygraf[5] >= yy) ygraf[5] = yy;
1345 if (ygraf[4] <= yy) ygraf[4] = yy;
1347 if (TMath::Abs(yy - ygraf[0]) <= 1e-4) xgraf[0] = xx;
1348 if (TMath::Abs(yy - ygraf[3]) <= 1e-4) xgraf[3] = xx;
1350 if (i % 2 == 0) r2 = -r2;
1353 gPad->PaintFillArea(6, xgraf, ygraf);
1358void 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)
1364 for (Int_t i=0;i<3;i++) {
1379 Double_t screen_factor = 1.;
1386 fUpix = gPad->GetWw()*gPad->GetAbsWNDC();
1389 fVpix = gPad->GetWh()*gPad->GetAbsHNDC();
1390 du = 0.5*screen_factor*
fDproj;
1459 for (Int_t i = 0; i < 3;
fRmax[i] = max[i],
fRmin[i] = min[i], i++) { }
1463 Error(
"SetRange",
"problem setting view");
1469void BesTView::SetRange(Double_t x0, Double_t y0, Double_t z0, Double_t x1, Double_t y1, Double_t z1, Int_t flag)
1483 Double_t rmax[3], rmin[3];
1488 rmin[0] = x0 < rmin[0] ? x0 : rmin[0];
1489 rmin[1] = y0 < rmin[1] ? y0 : rmin[1];
1490 rmin[2] = z0 < rmin[2] ? z0 : rmin[2];
1491 rmax[0] = x1 > rmax[0] ? x1 : rmax[0];
1492 rmax[1] = y1 > rmax[1] ? y1 : rmax[1];
1493 rmax[2] = z1 > rmax[2] ? z1 : rmax[2];
1498 rmin[0] = x0 > rmin[0] ? x0 : rmin[0];
1499 rmin[1] = y0 > rmin[1] ? y0 : rmin[1];
1500 rmin[2] = z0 > rmin[2] ? z0 : rmin[2];
1501 rmax[0] = x1 < rmax[0] ? x1 : rmax[0];
1502 rmax[1] = y1 < rmax[1] ? y1 : rmax[1];
1503 rmax[2] = z1 < rmax[2] ? z1 : rmax[2];
1507 rmin[0] = x0; rmax[0] = x1;
1508 rmin[1] = y0; rmax[1] = y1;
1509 rmin[2] = z0; rmax[2] = z1;
1529 ResetView(longitude, latitude, psi, irep);
1538 Double_t upix =
fUpix;
1539 Double_t vpix =
fVpix;
1541 fUpix = gPad->GetWw()*gPad->GetAbsWNDC();
1543 fVpix = gPad->GetWh()*gPad->GetAbsHNDC();
1568 Double_t scale[3], centre[3];
1569 Double_t
c1, c2, c3, s1, s2, s3;
1576 Error(
"ResetView",
"Error in min-max scope");
1592 c1 = TMath::Cos(longitude*
kRad);
1593 s1 = TMath::Sin(longitude*
kRad);
1594 c2 = TMath::Cos(latitude*
kRad);
1595 s2 = TMath::Sin(latitude*
kRad);
1596 c3 = TMath::Cos(psi*
kRad);
1597 s3 = TMath::Sin(psi*
kRad);
1618 for (Int_t i=0; i<3; i++)
1649 for (Int_t i=0; i<3; i++)
1670 TVirtualPad *thisPad = pad;
1671 if (!thisPad) thisPad = gPad;
1673 thisPad->Modified();
1688 TVirtualPad *thisPad = pad;
1689 if (!thisPad) thisPad = gPad;
1691 thisPad->SetPhi(-90-p);
1692 thisPad->SetTheta(90-
t);
1693 thisPad->Modified();
1722 TAxis3D::ToggleRulers(pad);
1732 TAxis3D::ToggleZoom(pad);
1739 Double_t min[3],max[3];
1742 Double_t maxSide = 0;
1744 for (i=0;i<3; i++) maxSide = TMath::Max(maxSide,max[i]-min[i]);
1746 for (i=0;i<3; i++) max[i] += maxSide - (max[i]-min[i]);
1757 Double_t min[3],max[3];
1760 for (i=0;i<3; i++) {
1761 if (max[i] > 0) min[i] = -max[i];
1762 else max[i] = -min[i];
1772 if (TMath::Abs(unZoomFactor) < 0.001)
return;
1781 if (TMath::Abs(zoomFactor) < 0.001)
return;
1782 Double_t min[3],max[3];
1785 for (i=0;i<3; i++) {
1787 Double_t c = (max[i]+min[i])/2;
1789 Double_t
s = (max[i]-min[i])/(2*zoomFactor);
1799 Double_t dlong, Double_t dlat, Double_t dpsi)
1804 if (nsteps<1)
return;
1805 Double_t fc = 1./Double_t(nsteps);
1806 Double_t oc[3], od[3], dir[3];
1811 for (i=0; i<3; i++) {
1815 Double_t dox = cov[0]-oc[0];
1816 Double_t doy = cov[1]-oc[1];
1817 Double_t doz = cov[2]-oc[2];
1819 Double_t dd = TMath::Sqrt(dox*dox+doy*doy+doz*doz);
1826 dox = fc*(dx-od[0]);
1827 doy = fc*(dy-od[1]);
1828 doz = fc*(dz-od[2]);
1829 for (i=0; i<nsteps; i++) {
1836 for (j=0; j<3; j++) {
1837 fRmin[j] = oc[j]-od[j];
1838 fRmax[j] = oc[j]+od[j];
1859 if (count <= 0) count = 1;
1975void BesTView::Streamer(TBuffer &R__b)
1979 if (R__b.IsReading()) {
1981 Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
1984 R__b.ReadClassBuffer(TView::Class(),
this, R__v, R__s, R__c);
1991 if (R__b.GetParent() && R__b.GetVersionOwner() < 22500) {
1994 TObject::Streamer(R__b);
1995 TAttLine::Streamer(R__b);
1996 Float_t single, sa[12];
2001 R__b >> single;
fPsi = single;
2002 R__b.ReadStaticArray(sa);
for (i=0;i<12;i++)
fTN[i] = sa[i];
2003 R__b.ReadStaticArray(sa);
for (i=0;i<12;i++)
fTB[i] = sa[i];
2004 R__b.ReadStaticArray(sa);
for (i=0;i<3;i++)
fRmax[i] = sa[i];
2005 R__b.ReadStaticArray(sa);
for (i=0;i<3;i++)
fRmin[i] = sa[i];
2006 R__b.ReadStaticArray(sa);
for (i=0;i<12;i++)
fTnorm[i] = sa[i];
2007 R__b.ReadStaticArray(sa);
for (i=0;i<12;i++)
fTback[i] = sa[i];
2008 R__b.ReadStaticArray(sa);
for (i=0;i<3;i++)
fX1[i] = sa[i];
2009 R__b.ReadStaticArray(sa);
for (i=0;i<3;i++)
fX2[i] = sa[i];
2010 R__b.ReadStaticArray(sa);
for (i=0;i<3;i++)
fY1[i] = sa[i];
2011 R__b.ReadStaticArray(sa);
for (i=0;i<3;i++)
fY2[i] = sa[i];
2012 R__b.ReadStaticArray(sa);
for (i=0;i<3;i++)
fZ1[i] = sa[i];
2013 R__b.ReadStaticArray(sa);
for (i=0;i<3;i++)
fZ2[i] = sa[i];
2018 TObject::Streamer(R__b);
2019 TAttLine::Streamer(R__b);
2023 R__b.ReadStaticArray(
fTN);
2024 R__b.ReadStaticArray(
fTB);
2025 R__b.ReadStaticArray(
fRmax);
2026 R__b.ReadStaticArray(
fRmin);
2027 R__b.ReadStaticArray(
fTnorm);
2028 R__b.ReadStaticArray(
fTback);
2029 R__b.ReadStaticArray(
fX1);
2030 R__b.ReadStaticArray(
fX2);
2031 R__b.ReadStaticArray(
fY1);
2032 R__b.ReadStaticArray(
fY2);
2033 R__b.ReadStaticArray(
fZ1);
2034 R__b.ReadStaticArray(
fZ2);
2043 R__b.WriteClassBuffer(TView::Class(),
this);
ClassImp(BesTView) const Int_t kCARTESIAN
**********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)
TSeqCollection * fOutline
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)
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 &)