73 TAttLine::operator=(sp);
74 TAttFill::operator=(sp);
75 TAttMarker::operator=(sp);
139 pmin =
gPad->PadtoX(
gPad->GetUxmin());
140 pmax =
gPad->PadtoX(
gPad->GetUxmax());
144 if (
xmax < pmin)
return;
145 if (
xmin > pmax)
return;
170 xbins[
i] =
gPad->PadtoX(xlogmin+
i*dlogx);
199 char *o = (
char *) opt.
Data();
207 else if (opt ==
"same")
fHistogram->Paint(
"lfsame");
447 const TF1 *func,
Int_t n,
const char *opt,
480 const TGraph *
g,
const char *opt,
496 g->GetPoint(
i,xx,yy);
525 fPoly[
i].X()=
h->GetXaxis()->GetBinCenter(
i+1);
576 const char *b1 = strstr(opt,
"b1");
577 const char *e1 = strstr(opt,
"e1");
578 const char *b2 = strstr(opt,
"b2");
579 const char *e2 = strstr(opt,
"e2");
581 Error(
"SetCond",
"Cannot specify first and second derivative at first point");
583 Error(
"SetCond",
"Cannot specify first and second derivative at last point");
623 printf(
"1 TEST OF TSpline3 WITH NONEQUIDISTANT KNOTS\n");
638 printf(
"\n-N = %3d M =%2d\n",
n,
m);
640 for (
i = 0;
i <
n; ++
i)
643 for (
i = 0;
i < mm1; ++
i) diff[
i] = com[
i] = 0;
644 for (k = 0; k <
n; ++k) {
645 for (
i = 0;
i < mm; ++
i)
c[
i] =
a[k+
i*200];
646 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
647 printf(
"%12.8f\n",
x[k]);
649 printf(
"%16.8f\n",
c[0]);
651 for (
i = 0;
i < mm; ++
i) printf(
"%16.8f",
c[
i]);
653 for (
i = 0;
i < mm1; ++
i)
656 for (
i = 1;
i < mm; ++
i)
657 for (jj =
i; jj < mm; ++jj) {
659 c[j-2] =
c[j-1]*z+
c[j-2];
661 for (
i = 0;
i < mm; ++
i) printf(
"%16.8f",
c[
i]);
663 for (
i = 0;
i < mm1; ++
i)
664 if (!(k >=
n-2 &&
i != 0))
666 > diff[
i]) diff[
i] = z;
669 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
670 for (
i = 0;
i < mm1; ++
i) printf(
"%18.9E",diff[
i]);
672 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
675 for (
i = 0;
i < mm1; ++
i) printf(
"%16.8f",com[
i]);
678 for (
n = 10;
n <= 100;
n += 10) {
682 for (
i = 0;
i < nm1;
i += 2) {
692 printf(
"\n-N = %3d M =%2d\n",
n,
m);
694 for (
i = 0;
i <
n; ++
i)
697 for (
i = 0;
i < mm1; ++
i)
698 diff[
i] = com[
i] = 0;
699 for (k = 0; k <
n; ++k) {
700 for (
i = 0;
i < mm; ++
i)
703 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
704 printf(
"%12.8f\n",
x[k]);
705 if (k ==
n-1) printf(
"%16.8f\n",
c[0]);
709 for (
i = 0;
i < mm; ++
i) printf(
"%16.8f",
c[
i]);
712 for (
i = 0;
i < mm1; ++
i)
716 for (
i = 1;
i < mm; ++
i)
717 for (jj =
i; jj < mm; ++jj) {
719 c[j-2] =
c[j-1]*z+
c[j-2];
722 for (
i = 0;
i < mm; ++
i) printf(
"%16.8f",
c[
i]);
725 for (
i = 0;
i < mm1; ++
i)
726 if (!(k >=
n-2 &&
i != 0))
728 > diff[
i]) diff[
i] = z;
730 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
731 for (
i = 0;
i < mm1; ++
i) printf(
"%18.9E",diff[
i]);
733 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
736 for (
i = 0;
i < mm1; ++
i) printf(
"%16.8E",com[
i]);
751 else if(
x>=
fXmax) klow=khig;
760 else if (klow < khig) {
761 if (
x >
fPoly[klow+1].
X()) ++klow;
768 if(
x>
fPoly[khalf=(klow+khig)/2].
X())
776 "Binary search failed x(%d) = %f < x= %f < x(%d) = %f\n",
789 if (klow >=
fNp-1 &&
fNp > 1) klow =
fNp-2;
790 return fPoly[klow].Eval(
x);
799 if (klow >=
fNp-1) klow =
fNp-2;
800 return fPoly[klow].Derivative(
x);
810 std::ofstream *
f =
new std::ofstream(
filename,std::ios::out);
820 char *dot = strstr(buffer,
".");
822 strlcat(buffer,
"(double x) {\n",512);
823 nch = strlen(buffer);
f->write(buffer,nch);
825 nch = strlen(buffer);
f->write(buffer,nch);
827 nch = strlen(buffer);
f->write(buffer,nch);
831 snprintf(buffer,512,
" const double fX[%d] = {",
fNp);
832 nch = strlen(buffer);
f->write(buffer,nch);
839 if (
i ==
fNp-1) numb[nch-1]=0;
840 strlcat(buffer,numb,512);
841 if (
i%5 == 4 ||
i ==
fNp-1) {
842 nch = strlen(buffer);
f->write(buffer,nch);
847 nch = strlen(buffer);
f->write(buffer,nch);
849 snprintf(buffer,512,
" const double fY[%d] = {",
fNp);
850 nch = strlen(buffer);
f->write(buffer,nch);
855 if (
i ==
fNp-1) numb[nch-1]=0;
856 strlcat(buffer,numb,512);
857 if (
i%5 == 4 ||
i ==
fNp-1) {
858 nch = strlen(buffer);
f->write(buffer,nch);
863 nch = strlen(buffer);
f->write(buffer,nch);
865 snprintf(buffer,512,
" const double fB[%d] = {",
fNp);
866 nch = strlen(buffer);
f->write(buffer,nch);
871 if (
i ==
fNp-1) numb[nch-1]=0;
872 strlcat(buffer,numb,512);
873 if (
i%5 == 4 ||
i ==
fNp-1) {
874 nch = strlen(buffer);
f->write(buffer,nch);
879 nch = strlen(buffer);
f->write(buffer,nch);
881 snprintf(buffer,512,
" const double fC[%d] = {",
fNp);
882 nch = strlen(buffer);
f->write(buffer,nch);
887 if (
i ==
fNp-1) numb[nch-1]=0;
888 strlcat(buffer,numb,512);
889 if (
i%5 == 4 ||
i ==
fNp-1) {
890 nch = strlen(buffer);
f->write(buffer,nch);
895 nch = strlen(buffer);
f->write(buffer,nch);
897 snprintf(buffer,512,
" const double fD[%d] = {",
fNp);
898 nch = strlen(buffer);
f->write(buffer,nch);
903 if (
i ==
fNp-1) numb[nch-1]=0;
904 strlcat(buffer,numb,512);
905 if (
i%5 == 4 ||
i ==
fNp-1) {
906 nch = strlen(buffer);
f->write(buffer,nch);
911 nch = strlen(buffer);
f->write(buffer,nch);
914 snprintf(buffer,512,
" int klow=0;\n");
915 nch = strlen(buffer);
f->write(buffer,nch);
917 snprintf(buffer,512,
" // If out of boundaries, extrapolate. It may be badly wrong\n");
918 snprintf(buffer,512,
" if(x<=fXmin) klow=0;\n");
919 nch = strlen(buffer);
f->write(buffer,nch);
920 snprintf(buffer,512,
" else if(x>=fXmax) klow=fNp-1;\n");
921 nch = strlen(buffer);
f->write(buffer,nch);
923 nch = strlen(buffer);
f->write(buffer,nch);
924 snprintf(buffer,512,
" if(fKstep) {\n");
925 nch = strlen(buffer);
f->write(buffer,nch);
927 snprintf(buffer,512,
" // Equidistant knots, use histogramming\n");
928 nch = strlen(buffer);
f->write(buffer,nch);
929 snprintf(buffer,512,
" klow = int((x-fXmin)/fDelta);\n");
930 nch = strlen(buffer);
f->write(buffer,nch);
931 snprintf(buffer,512,
" if (klow > fNp-1) klow = fNp-1;\n");
932 nch = strlen(buffer);
f->write(buffer,nch);
934 nch = strlen(buffer);
f->write(buffer,nch);
935 snprintf(buffer,512,
" int khig=fNp-1, khalf;\n");
936 nch = strlen(buffer);
f->write(buffer,nch);
938 snprintf(buffer,512,
" // Non equidistant knots, binary search\n");
939 nch = strlen(buffer);
f->write(buffer,nch);
940 snprintf(buffer,512,
" while(khig-klow>1)\n");
941 nch = strlen(buffer);
f->write(buffer,nch);
942 snprintf(buffer,512,
" if(x>fX[khalf=(klow+khig)/2]) klow=khalf;\n");
943 nch = strlen(buffer);
f->write(buffer,nch);
944 snprintf(buffer,512,
" else khig=khalf;\n");
945 nch = strlen(buffer);
f->write(buffer,nch);
947 nch = strlen(buffer);
f->write(buffer,nch);
949 nch = strlen(buffer);
f->write(buffer,nch);
950 snprintf(buffer,512,
" // Evaluate now\n");
951 nch = strlen(buffer);
f->write(buffer,nch);
952 snprintf(buffer,512,
" double dx=x-fX[klow];\n");
953 nch = strlen(buffer);
f->write(buffer,nch);
954 snprintf(buffer,512,
" return (fY[klow]+dx*(fB[klow]+dx*(fC[klow]+dx*fD[klow])));\n");
955 nch = strlen(buffer);
f->write(buffer,nch);
960 if (
f) {
f->close();
delete f;}
975 out<<
"spline3 = new TSpline3("<<quote<<
GetTitle()<<quote<<
","
976 <<
fXmin<<
","<<
fXmax<<
",(TF1*)0,"<<
fNp<<
","<<quote<<quote<<
","
978 out<<
" spline3->SetName("<<quote<<
GetName()<<quote<<
");"<<std::endl;
983 if (
fNpx != 100) out<<
" spline3->SetNpx("<<
fNpx<<
");"<<std::endl;
986 out<<
" spline3->SetPoint("<<
i<<
","<<
fPoly[
i].X()<<
","<<
fPoly[
i].Y()<<
");"<<std::endl;
987 out<<
" spline3->SetPointCoeff("<<
i<<
","<<
fPoly[
i].B()<<
","<<
fPoly[
i].C()<<
","<<
fPoly[
i].D()<<
");"<<std::endl;
989 out<<
" spline3->Draw("<<quote<<
option<<quote<<
");"<<std::endl;
1092 for (
m=1;
m<
l; ++
m) {
1165 fPoly[
i-1].C() = (divdf1 -
fPoly[
i-1].B() - divdf3)/dtau;
1166 fPoly[
i-1].D() = (divdf3/dtau)/dtau;
1220 const char *cb1, *ce1, *cb2, *ce2;
1254 const char *cb1, *ce1, *cb2, *ce2;
1287 const char *cb1, *ce1, *cb2, *ce2;
1321 const char *cb1, *ce1, *cb2, *ce2;
1333 if (func)
fPoly[
i+beg].Y() = ((
TF1*)func)->Eval(
x);
1356 const char *cb1, *ce1, *cb2, *ce2;
1367 g->GetPoint(
i,xx,yy);
1390 const char *cb1, *ce1, *cb2, *ce2;
1400 fPoly[
i+beg].X()=
h->GetXaxis()->GetBinCenter(
i+1);
1401 fPoly[
i+beg].Y()=
h->GetBinContent(
i+1);
1448 const char *&cb1,
const char *&ce1,
1449 const char *&cb2,
const char *&ce2)
1451 cb1=ce1=cb2=ce2=
nullptr;
1454 cb1 = strstr(opt,
"b1");
1455 ce1 = strstr(opt,
"e1");
1456 cb2 = strstr(opt,
"b2");
1457 ce2 = strstr(opt,
"e2");
1479 const char *cb1,
const char *ce1,
const char *cb2,
1545 if(
x>
fPoly[khalf=(klow+khig)/2].
X())
1554 "Binary search failed x(%d) = %f < x(%d) = %f\n",
1566 return fPoly[klow].Eval(
x);
1575 return fPoly[klow].Derivative(
x);
1585 std::ofstream *
f =
new std::ofstream(
filename,std::ios::out);
1595 char *dot = strstr(buffer,
".");
1597 strlcat(buffer,
"(double x) {\n",512);
1598 nch = strlen(buffer);
f->write(buffer,nch);
1600 nch = strlen(buffer);
f->write(buffer,nch);
1602 nch = strlen(buffer);
f->write(buffer,nch);
1606 snprintf(buffer,512,
" const double fX[%d] = {",
fNp);
1607 nch = strlen(buffer);
f->write(buffer,nch);
1614 if (
i ==
fNp-1) numb[nch-1]=0;
1615 strlcat(buffer,numb,512);
1616 if (
i%5 == 4 ||
i ==
fNp-1) {
1617 nch = strlen(buffer);
f->write(buffer,nch);
1622 nch = strlen(buffer);
f->write(buffer,nch);
1624 snprintf(buffer,512,
" const double fY[%d] = {",
fNp);
1625 nch = strlen(buffer);
f->write(buffer,nch);
1630 if (
i ==
fNp-1) numb[nch-1]=0;
1631 strlcat(buffer,numb,512);
1632 if (
i%5 == 4 ||
i ==
fNp-1) {
1633 nch = strlen(buffer);
f->write(buffer,nch);
1638 nch = strlen(buffer);
f->write(buffer,nch);
1640 snprintf(buffer,512,
" const double fB[%d] = {",
fNp);
1641 nch = strlen(buffer);
f->write(buffer,nch);
1646 if (
i ==
fNp-1) numb[nch-1]=0;
1647 strlcat(buffer,numb,512);
1648 if (
i%5 == 4 ||
i ==
fNp-1) {
1649 nch = strlen(buffer);
f->write(buffer,nch);
1654 nch = strlen(buffer);
f->write(buffer,nch);
1656 snprintf(buffer,512,
" const double fC[%d] = {",
fNp);
1657 nch = strlen(buffer);
f->write(buffer,nch);
1662 if (
i ==
fNp-1) numb[nch-1]=0;
1663 strlcat(buffer,numb,512);
1664 if (
i%5 == 4 ||
i ==
fNp-1) {
1665 nch = strlen(buffer);
f->write(buffer,nch);
1670 nch = strlen(buffer);
f->write(buffer,nch);
1672 snprintf(buffer,512,
" const double fD[%d] = {",
fNp);
1673 nch = strlen(buffer);
f->write(buffer,nch);
1678 if (
i ==
fNp-1) numb[nch-1]=0;
1679 strlcat(buffer,numb,512);
1680 if (
i%5 == 4 ||
i ==
fNp-1) {
1681 nch = strlen(buffer);
f->write(buffer,nch);
1686 nch = strlen(buffer);
f->write(buffer,nch);
1688 snprintf(buffer,512,
" const double fE[%d] = {",
fNp);
1689 nch = strlen(buffer);
f->write(buffer,nch);
1694 if (
i ==
fNp-1) numb[nch-1]=0;
1695 strlcat(buffer,numb,512);
1696 if (
i%5 == 4 ||
i ==
fNp-1) {
1697 nch = strlen(buffer);
f->write(buffer,nch);
1702 nch = strlen(buffer);
f->write(buffer,nch);
1704 snprintf(buffer,512,
" const double fF[%d] = {",
fNp);
1705 nch = strlen(buffer);
f->write(buffer,nch);
1710 if (
i ==
fNp-1) numb[nch-1]=0;
1711 strlcat(buffer,numb,512);
1712 if (
i%5 == 4 ||
i ==
fNp-1) {
1713 nch = strlen(buffer);
f->write(buffer,nch);
1718 nch = strlen(buffer);
f->write(buffer,nch);
1721 snprintf(buffer,512,
" int klow=0;\n");
1722 nch = strlen(buffer);
f->write(buffer,nch);
1724 snprintf(buffer,512,
" // If out of boundaries, extrapolate. It may be badly wrong\n");
1725 snprintf(buffer,512,
" if(x<=fXmin) klow=0;\n");
1726 nch = strlen(buffer);
f->write(buffer,nch);
1727 snprintf(buffer,512,
" else if(x>=fXmax) klow=fNp-1;\n");
1728 nch = strlen(buffer);
f->write(buffer,nch);
1730 nch = strlen(buffer);
f->write(buffer,nch);
1731 snprintf(buffer,512,
" if(fKstep) {\n");
1732 nch = strlen(buffer);
f->write(buffer,nch);
1734 snprintf(buffer,512,
" // Equidistant knots, use histogramming\n");
1735 nch = strlen(buffer);
f->write(buffer,nch);
1736 snprintf(buffer,512,
" klow = int((x-fXmin)/fDelta);\n");
1737 nch = strlen(buffer);
f->write(buffer,nch);
1738 snprintf(buffer,512,
" if (klow > fNp-1) klow = fNp-1;\n");
1739 nch = strlen(buffer);
f->write(buffer,nch);
1740 snprintf(buffer,512,
" } else {\n");
1741 nch = strlen(buffer);
f->write(buffer,nch);
1742 snprintf(buffer,512,
" int khig=fNp-1, khalf;\n");
1743 nch = strlen(buffer);
f->write(buffer,nch);
1745 snprintf(buffer,512,
" // Non equidistant knots, binary search\n");
1746 nch = strlen(buffer);
f->write(buffer,nch);
1747 snprintf(buffer,512,
" while(khig-klow>1)\n");
1748 nch = strlen(buffer);
f->write(buffer,nch);
1749 snprintf(buffer,512,
" if(x>fX[khalf=(klow+khig)/2]) klow=khalf;\n");
1750 nch = strlen(buffer);
f->write(buffer,nch);
1751 snprintf(buffer,512,
" else khig=khalf;\n");
1752 nch = strlen(buffer);
f->write(buffer,nch);
1754 nch = strlen(buffer);
f->write(buffer,nch);
1756 nch = strlen(buffer);
f->write(buffer,nch);
1757 snprintf(buffer,512,
" // Evaluate now\n");
1758 nch = strlen(buffer);
f->write(buffer,nch);
1759 snprintf(buffer,512,
" double dx=x-fX[klow];\n");
1760 nch = strlen(buffer);
f->write(buffer,nch);
1761 snprintf(buffer,512,
" return (fY[klow]+dx*(fB[klow]+dx*(fC[klow]+dx*(fD[klow]+dx*(fE[klow]+dx*fF[klow])))));\n");
1762 nch = strlen(buffer);
f->write(buffer,nch);
1767 if (
f) {
f->close();
delete f;}
1776 out<<
" "<<std::endl;
1786 out<<
"spline5 = new TSpline5("<<quote<<
GetTitle()<<quote<<
","
1787 <<
fXmin<<
","<<
fXmax<<
",(TF1*)0,"<<
fNp<<
","<<quote<<quote<<
","
1788 <<b1<<
","<<e1<<
","<<b2<<
","<<e2<<
");"<<std::endl;
1789 out<<
" spline5->SetName("<<quote<<
GetName()<<quote<<
");"<<std::endl;
1794 if (
fNpx != 100) out<<
" spline5->SetNpx("<<
fNpx<<
");"<<std::endl;
1797 out<<
" spline5->SetPoint("<<
i<<
","<<
fPoly[
i].X()<<
","<<
fPoly[
i].Y()<<
");"<<std::endl;
1800 out<<
" spline5->Draw("<<quote<<
option<<quote<<
");"<<std::endl;
1909 b1, p2, p3, q2, q3, r2, pq, pr, qr;
1924 if (
q)
fPoly[1].D() =
q*6.*q2/(qr*qr);
1925 else fPoly[1].D() = 0;
1928 for (
i = 1;
i <
m; ++
i) {
1941 fPoly[
i+1].D() = q3*6./(qr*qr);
1943 *(pr* 20.+q2*7.)+q2*
1944 ((p2+r2)*8.+pr*21.+q2+q2))/(pqqr*pqqr);
1945 fPoly[
i-1].D() += q3*6./(pq*pq);
1946 fPoly[
i].E() = q2*(p*qr+pq*3.*(qr+
r+
r))/(pqqr*qr);
1947 fPoly[
i-1].E() += q2*(
r*pq+qr*3.*(pq+p+p))/(pqqr*pq);
1948 fPoly[
i-1].F() = q3/pqqr;
1953 if (
r)
fPoly[
m-1].D() +=
r*6.*r2/(qr*qr);
1958 for (
i = 1;
i <
fNp; ++
i) {
1967 for (
i = 2;
i <
fNp; ++
i) {
1985 for (
i = 2;
i <
m; ++
i) {
1998 for (
i=
fNp-3;
i > 0; --
i)
2015 else fPoly[0].F() = 0;
2016 for (
i = 1;
i <
m; ++
i) {
2048 s =
fPoly[0].F()*p*p*p;
2094 printf(
"1 TEST OF TSpline5 WITH NONEQUIDISTANT KNOTS\n");
2109 printf(
"\n-N = %3d M =%2d\n",
n,
m);
2111 for (
i = 0;
i <
n; ++
i)
2113 a[
i+600],
a[
i+800],
a[
i+1000]);
2115 for (
i = 0;
i < mm1; ++
i) diff[
i] = com[
i] = 0;
2116 for (k = 0; k <
n; ++k) {
2117 for (
i = 0;
i < mm; ++
i)
c[
i] =
a[k+
i*200];
2118 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
2119 printf(
"%12.8f\n",
x[k]);
2121 printf(
"%16.8f\n",
c[0]);
2123 for (
i = 0;
i < mm; ++
i) printf(
"%16.8f",
c[
i]);
2125 for (
i = 0;
i < mm1; ++
i)
2128 for (
i = 1;
i < mm; ++
i)
2129 for (jj =
i; jj < mm; ++jj) {
2131 c[j-2] =
c[j-1]*z+
c[j-2];
2133 for (
i = 0;
i < mm; ++
i) printf(
"%16.8f",
c[
i]);
2135 for (
i = 0;
i < mm1; ++
i)
2136 if (!(k >=
n-2 &&
i != 0))
2138 > diff[
i]) diff[
i] = z;
2141 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
2142 for (
i = 0;
i < mm1; ++
i) printf(
"%18.9E",diff[
i]);
2144 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
2147 for (
i = 0;
i < mm1; ++
i) printf(
"%16.8f",com[
i]);
2150 for (
n = 10;
n <= 100;
n += 10) {
2154 for (
i = 0;
i < nm1;
i += 2) {
2164 printf(
"\n-N = %3d M =%2d\n",
n,
m);
2166 for (
i = 0;
i <
n; ++
i)
2168 a[
i+600],
a[
i+800],
a[
i+1000]);
2170 for (
i = 0;
i < mm1; ++
i)
2171 diff[
i] = com[
i] = 0;
2172 for (k = 0; k <
n; ++k) {
2173 for (
i = 0;
i < mm; ++
i)
2176 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
2177 printf(
"%12.8f\n",
x[k]);
2178 if (k ==
n-1) printf(
"%16.8f\n",
c[0]);
2180 if (k ==
n-1)
break;
2182 for (
i = 0;
i < mm; ++
i) printf(
"%16.8f",
c[
i]);
2185 for (
i = 0;
i < mm1; ++
i)
2189 for (
i = 1;
i < mm; ++
i)
2190 for (jj =
i; jj < mm; ++jj) {
2192 c[j-2] =
c[j-1]*z+
c[j-2];
2195 for (
i = 0;
i < mm; ++
i) printf(
"%16.8f",
c[
i]);
2198 for (
i = 0;
i < mm1; ++
i)
2199 if (!(k >=
n-2 &&
i != 0))
2201 > diff[
i]) diff[
i] = z;
2203 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
2204 for (
i = 0;
i < mm1; ++
i) printf(
"%18.9E",diff[
i]);
2206 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
2209 for (
i = 0;
i < mm1; ++
i) printf(
"%16.8E",com[
i]);
2214 printf(
"1 TEST OF TSpline5 WITH NONEQUIDISTANT DOUBLE KNOTS\n");
2240 printf(
"-N = %3d M =%2d\n",
n,
m);
2242 for (
i = 0;
i < nn; ++
i)
2244 a[
i+600],
a[
i+800],
a[
i+1000]);
2246 for (
i = 0;
i < mm1; ++
i)
2247 diff[
i] = com[
i] = 0;
2248 for (k = 0; k < nn; ++k) {
2249 for (
i = 0;
i < mm; ++
i)
2251 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
2252 printf(
"%12.8f\n",
x[k]);
2254 printf(
"%16.8f\n",
c[0]);
2257 for (
i = 0;
i < mm; ++
i) printf(
"%16.8f",
c[
i]);
2259 for (
i = 0;
i < mm1; ++
i)
2262 for (
i = 1;
i < mm; ++
i)
2263 for (jj =
i; jj < mm; ++jj) {
2265 c[j-2] =
c[j-1]*z+
c[j-2];
2267 for (
i = 0;
i < mm; ++
i) printf(
"%16.8f",
c[
i]);
2269 for (
i = 0;
i < mm1; ++
i)
2270 if (!(k >= nn-2 &&
i != 0))
2272 > diff[
i]) diff[
i] = z;
2274 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
2275 for (
i = 1;
i <= mm1; ++
i) {
2276 printf(
"%18.9E",diff[
i-1]);
2281 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
2282 for (
i = 0;
i < mm1; ++
i) printf(
"%16.8f",com[
i]);
2285 for (
n = 10;
n <= 100;
n += 10) {
2290 for (
i = 0;
i <
n; ++
i) {
2297 printf(
"-N = %3d M =%2d\n",
n,
m);
2299 for (
i = 0;
i < nn; ++
i)
2301 a[
i+600],
a[
i+800],
a[
i+1000]);
2303 for (
i = 0;
i < mm1; ++
i)
2304 diff[
i] = com[
i] = 0;
2305 for (k = 0; k < nn; ++k) {
2306 for (
i = 0;
i < mm; ++
i)
2309 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
2310 printf(
"%12.8f\n",
x[k]);
2311 if (k == nn-1) printf(
"%16.8f\n",
c[0]);
2313 if (k == nn-1)
break;
2315 for (
i = 0;
i < mm; ++
i) printf(
"%16.8f",
c[
i]);
2318 for (
i = 0;
i < mm1; ++
i)
2321 for (
i = 1;
i < mm; ++
i) {
2322 for (jj =
i; jj < mm; ++jj) {
2324 c[j-2] =
c[j-1]*z+
c[j-2];
2328 for (
i = 0;
i < mm; ++
i) printf(
"%16.8f",
c[
i]);
2331 for (
i = 0;
i < mm1; ++
i)
2332 if (!(k >= nn-2 &&
i != 0))
2334 > diff[
i]) diff[
i] = z;
2336 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
2337 for (
i = 0;
i < mm1; ++
i) printf(
"%18.9E",diff[
i]);
2339 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
2342 for (
i = 0;
i < mm1; ++
i) printf(
"%18.9E",com[
i]);
2348 printf(
"1 TEST OF TSpline5 WITH NONEQUIDISTANT KNOTS,\n");
2349 printf(
" ONE DOUBLE, ONE TRIPLE KNOT\n");
2370 printf(
"-N = %3d M =%2d\n",
n,
m);
2372 for (
i = 0;
i <
n; ++
i)
2374 a[
i+600],
a[
i+800],
a[
i+1000]);
2376 for (
i = 0;
i < mm1; ++
i)
2377 diff[
i] = com[
i] = 0;
2378 for (k = 0; k <
n; ++k) {
2379 for (
i = 0;
i < mm; ++
i)
2381 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
2382 printf(
"%12.8f\n",
x[k]);
2384 printf(
"%16.8f\n",
c[0]);
2387 for (
i = 0;
i < mm; ++
i) printf(
"%16.8f",
c[
i]);
2389 for (
i = 0;
i < mm1; ++
i)
2392 for (
i = 1;
i < mm; ++
i)
2393 for (jj =
i; jj < mm; ++jj) {
2395 c[j-2] =
c[j-1]*z+
c[j-2];
2397 for (
i = 0;
i < mm; ++
i) printf(
"%16.8f",
c[
i]);
2399 for (
i = 0;
i < mm1; ++
i)
2400 if (!(k >=
n-2 &&
i != 0))
2402 > diff[
i]) diff[
i] = z;
2404 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
2405 for (
i = 0;
i < mm1; ++
i) printf(
"%18.9E",diff[
i]);
2407 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
2410 for (
i = 0;
i < mm1; ++
i) printf(
"%16.8f",com[
i]);
2415 printf(
"1 TEST OF TSpline5 WITH NONEQUIDISTANT KNOTS,\n");
2416 printf(
" TWO DOUBLE, ONE TRIPLE KNOT\n");
2441 printf(
"-N = %3d M =%2d\n",
n,
m);
2443 for (
i = 0;
i <
n; ++
i)
2445 a[
i+600],
a[
i+800],
a[
i+1000]);
2447 for (
i = 0;
i < mm1; ++
i)
2448 diff[
i] = com[
i] = 0;
2449 for (k = 0; k <
n; ++k) {
2450 for (
i = 0;
i < mm; ++
i)
2452 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
2453 printf(
"%12.8f\n",
x[k]);
2455 printf(
"%16.8f\n",
c[0]);
2458 for (
i = 0;
i < mm; ++
i) printf(
"%16.8f",
c[
i]);
2460 for (
i = 0;
i < mm1; ++
i)
2463 for (
i = 1;
i < mm; ++
i)
2464 for (jj =
i; jj < mm; ++jj) {
2466 c[j-2] =
c[j-1]*z+
c[j-2];
2468 for (
i = 0;
i < mm; ++
i) printf(
"%16.8f",
c[
i]);
2470 for (
i = 0;
i < mm1; ++
i)
2471 if (!(k >=
n-2 &&
i != 0))
2473 > diff[
i]) diff[
i] = z;
2475 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
2476 for (
i = 0;
i < mm1; ++
i) printf(
"%18.9E",diff[
i]);
2478 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
2481 for (
i = 0;
i < mm1; ++
i) printf(
"%16.8f",com[
i]);
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
R__EXTERN TSystem * gSystem
virtual void Streamer(TBuffer &)
virtual Color_t GetFillColor() const
Return the fill area color.
virtual Style_t GetFillStyle() const
Return the fill area style.
TAttFill()
AttFill default constructor.
virtual void SaveFillAttributes(std::ostream &out, const char *name, Int_t coldef=1, Int_t stydef=1001)
Save fill attributes as C++ statement(s) on output stream out.
virtual void Streamer(TBuffer &)
virtual Color_t GetLineColor() const
Return the line color.
virtual Width_t GetLineWidth() const
Return the line width.
TAttLine()
AttLine default constructor.
virtual Style_t GetLineStyle() const
Return the line style.
virtual void SaveLineAttributes(std::ostream &out, const char *name, Int_t coldef=1, Int_t stydef=1, Int_t widdef=1)
Save line attributes as C++ statement(s) on output stream out.
virtual void SaveMarkerAttributes(std::ostream &out, const char *name, Int_t coldef=1, Int_t stydef=1, Int_t sizdef=1)
Save line attributes as C++ statement(s) on output stream out.
virtual Style_t GetMarkerStyle() const
Return the marker style.
virtual Color_t GetMarkerColor() const
Return the marker color.
virtual Size_t GetMarkerSize() const
Return the marker size.
TAttMarker()
TAttMarker default constructor.
virtual void Streamer(TBuffer &)
Buffer base class used for serializing objects.
virtual Version_t ReadVersion(UInt_t *start=nullptr, UInt_t *bcnt=nullptr, const TClass *cl=nullptr)=0
virtual Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss)=0
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=nullptr)=0
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
A TGraph is an object made of two arrays X and Y with npoints each.
1-D histogram with a float per channel (see TH1 documentation)
TH1 is the base class of all histogram classes in ROOT.
@ kLogX
X-axis in log scale.
@ kNoStats
Don't draw stats box.
const char * GetName() const override
Returns name of object.
void Streamer(TBuffer &) override
Stream an object of class TObject.
const char * GetTitle() const override
Returns title of object.
TNamed & operator=(const TNamed &rhs)
TNamed assignment operator.
TObject & operator=(const TObject &rhs)
TObject assignment operator.
virtual void AppendPad(Option_t *option="")
Append graphics object to current pad.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Class to create third splines to interpolate knots Arbitrary conditions can be introduced for first a...
void SaveAs(const char *filename="", Option_t *option="") const override
Write this spline as a C++ function that can be executed without ROOT the name of the function is the...
Int_t fEndCond
0=no end cond, 1=first derivative, 2=second derivative
Int_t fBegCond
0=no beg cond, 1=first derivative, 2=second derivative
Int_t FindX(Double_t x) const
Find X.
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save primitive as a C++ statement(s) on output stream out.
void GetCoeff(Int_t i, Double_t &x, Double_t &y, Double_t &b, Double_t &c, Double_t &d) const
static void Test()
Test method for TSpline5.
Double_t fValBeg
Initial value of first or second derivative.
void BuildCoeff() override
Build coefficients.
void Streamer(TBuffer &) override
Stream an object of class TSpline3.
Double_t Eval(Double_t x) const override
Eval this spline at x.
Double_t fValEnd
End value of first or second derivative.
void SetCond(const char *opt)
Check the boundary conditions.
Double_t Derivative(Double_t x) const
Derivative.
TSplinePoly3 * fPoly
[fNp] Array of polynomial terms
TSpline3 & operator=(const TSpline3 &)
Assignment operator.
virtual void SetPoint(Int_t i, Double_t x, Double_t y)
Set point number i.
virtual void SetPointCoeff(Int_t i, Double_t b, Double_t c, Double_t d)
Set point coefficient number i.
Class to create quintic natural splines to interpolate knots Arbitrary conditions can be introduced f...
void GetCoeff(Int_t i, Double_t &x, Double_t &y, Double_t &b, Double_t &c, Double_t &d, Double_t &e, Double_t &f) const
static void Test()
Test method for TSpline5.
Double_t Eval(Double_t x) const override
Eval this spline at x.
void Streamer(TBuffer &) override
Stream an object of class TSpline5.
void BuildCoeff() override
Algorithm 600, collected algorithms from acm.
TSplinePoly5 * fPoly
[fNp] Array of polynomial terms
virtual void SetPointCoeff(Int_t i, Double_t b, Double_t c, Double_t d, Double_t e, Double_t f)
Set point coefficient number i.
void SaveAs(const char *filename="", Option_t *option="") const override
Write this spline as a C++ function that can be executed without ROOT the name of the function is the...
Double_t Derivative(Double_t x) const
Derivative.
void BoundaryConditions(const char *opt, Int_t &beg, Int_t &end, const char *&cb1, const char *&ce1, const char *&cb2, const char *&ce2)
Check the boundary conditions and the amount of extra double knots needed.
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save primitive as a C++ statement(s) on output stream out.
void SetBoundaries(Double_t b1, Double_t e1, Double_t b2, Double_t e2, const char *cb1, const char *ce1, const char *cb2, const char *ce2)
Set the boundary conditions at double/triple knots.
Int_t FindX(Double_t x) const
Find X.
virtual void SetPoint(Int_t i, Double_t x, Double_t y)
Set point number i.
TSpline5 & operator=(const TSpline5 &)
Assignment operator.
Double_t fC
Second order expansion coefficient : fC*2! is the second derivative at x.
Double_t fD
Third order expansion coefficient : fD*3! is the third derivative at x.
Double_t fB
First order expansion coefficient : fB*1! is the first derivative at x.
void CopyPoly(TSplinePoly3 const &other)
Utility called by the copy constructors and = operator.
TSplinePoly3 & operator=(TSplinePoly3 const &other)
Assignment operator.
void CopyPoly(TSplinePoly5 const &other)
Utility called by the copy constructors and = operator.
TSplinePoly5 & operator=(TSplinePoly5 const &other)
Assignment operator.
Double_t fF
Fifth order expansion coefficient : fF*5! is the fifth derivative at x.
Double_t fB
First order expansion coefficient : fB*1! is the first derivative at x.
Double_t fC
Second order expansion coefficient : fC*2! is the second derivative at x.
Double_t fD
Third order expansion coefficient : fD*3! is the third derivative at x.
Double_t fE
Fourth order expansion coefficient : fE*4! is the fourth derivative at x.
Base class for TSpline knot.
void CopyPoly(TSplinePoly const &other)
Utility called by the copy constructors and = operator.
TSplinePoly & operator=(TSplinePoly const &other)
Assignment operator.
Double_t fY
Constant term.
Base class for spline implementation containing the Draw/Paint methods.
void Streamer(TBuffer &) override
Stream an object of class TSpline.
virtual Double_t Eval(Double_t x) const =0
void ExecuteEvent(Int_t event, Int_t px, Int_t py) override
Execute action corresponding to one event.
TGraph * fGraph
Graph for drawing the knots.
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
Compute distance from point px,py to a spline.
TSpline(const TSpline &)
Copy constructor.
Double_t fXmin
Minimum value of abscissa.
TClass * IsA() const override
TH1F * fHistogram
Temporary histogram.
void Draw(Option_t *option="") override
Draw this function with its current attributes.
Double_t fDelta
Distance between equidistant knots.
virtual void GetKnot(Int_t i, Double_t &x, Double_t &y) const =0
TSpline & operator=(const TSpline &)
Assignment operator.
void Paint(Option_t *option="") override
Paint this function with its current attributes.
Bool_t fKstep
True of equidistant knots.
Int_t fNp
Number of knots.
~TSpline() override
Destructor.
Double_t fXmax
Maximum value of abscissa.
Int_t fNpx
Number of points used for graphical representation.
void ToLower()
Change string to lower-case.
const char * Data() const
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
Int_t FloorNint(Double_t x)
Returns the nearest integer of TMath::Floor(x).
Short_t Min(Short_t a, Short_t b)
Returns the smallest of a and b.
Double_t Cos(Double_t)
Returns the cosine of an angle of x radians.
Double_t Sin(Double_t)
Returns the sine of an angle of x radians.
Double_t Log10(Double_t x)
Returns the common (base-10) logarithm of x.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.