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;
169 for (i=0;i<=
fNpx;i++) {
170 xbins[i] =
gPad->PadtoX(xlogmin+ i*dlogx);
181 for (i=1;i<=
fNpx;i++) {
199 char *o = (
char *) opt.
Data();
231void TSpline::Streamer(
TBuffer &R__b)
241 TNamed::Streamer(R__b);
242 TAttLine::Streamer(R__b);
243 TAttFill::Streamer(R__b);
244 TAttMarker::Streamer(R__b);
362 fValBeg(valbeg), fValEnd(valend), fBegCond(0), fEndCond(0)
372 for (
Int_t i=0; i<
n; ++i) {
391 fValBeg(valbeg), fValEnd(valend),
392 fBegCond(0), fEndCond(0)
402 for (
Int_t i=0; i<
n; ++i) {
420 fValBeg(valbeg), fValEnd(valend),
421 fBegCond(0), fEndCond(0)
431 for (
Int_t i=0; i<
n; ++i) {
447 const TF1 *func,
Int_t n,
const char *opt,
450 fValBeg(valbeg), fValEnd(valend),
451 fBegCond(0), fEndCond(0)
464 for (
Int_t i=0; i<
n; ++i) {
480 const TGraph *
g,
const char *opt,
483 fValBeg(valbeg), fValEnd(valend),
484 fBegCond(0), fEndCond(0)
496 g->GetPoint(i,xx,yy);
513 fValBeg(valbeg), fValEnd(valend),
514 fBegCond(0), fEndCond(0)
525 fPoly[i].
X()=
h->GetXaxis()->GetBinCenter(i+1);
526 fPoly[i].
Y()=
h->GetBinContent(i+1);
541 fValBeg(sp3.fValBeg),
542 fValEnd(sp3.fValEnd),
543 fBegCond(sp3.fBegCond),
544 fEndCond(sp3.fEndCond)
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)
641 spline->
GetCoeff(i,hx,
a[i],
a[i+200],
a[i+400],
a[i+600]);
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)
654 if ((z=
TMath::Abs(
a[k+i*200])) > com[i]) com[i] = z;
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;
799 if (klow >=
fNp-1) klow =
fNp-2;
810 std::ofstream *
f =
new std::ofstream(filename,std::ios::out);
812 Error(
"SaveAs",
"Cannot open file:%s\n",filename);
818 Int_t nch = strlen(filename);
819 snprintf(buffer,512,
"double %s",filename);
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);
836 for (i=0;i<
fNp;i++) {
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);
852 for (i=0;i<
fNp;i++) {
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);
868 for (i=0;i<
fNp;i++) {
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);
884 for (i=0;i<
fNp;i++) {
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);
900 for (i=0;i<
fNp;i++) {
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;}
970 if (
gROOT->ClassSaved(TSpline3::Class())) {
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;
997 if (i < 0 || i >=
fNp)
return;
1007 if (i < 0 || i >=
fNp)
return;
1092 for (
m=1;
m<
l; ++
m) {
1161 for (i=1; i<
fNp; ++i) {
1165 fPoly[i-1].
C() = (divdf1 -
fPoly[i-1].
B() - divdf3)/dtau;
1166 fPoly[i-1].
D() = (divdf3/dtau)/dtau;
1173void TSpline3::Streamer(
TBuffer &R__b)
1183 TSpline::Streamer(R__b);
1187 fPoly[i].Streamer(R__b);
1220 const char *cb1, *ce1, *cb2, *ce2;
1229 for (
Int_t i=0; i<
n; ++i) {
1254 const char *cb1, *ce1, *cb2, *ce2;
1263 for (
Int_t i=0; i<
n; ++i) {
1287 const char *cb1, *ce1, *cb2, *ce2;
1296 for (
Int_t i=0; i<
n; i++) {
1321 const char *cb1, *ce1, *cb2, *ce2;
1330 for (
Int_t i=0; i<
n; ++i) {
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);
1447 const char *&cb1,
const char *&ce1,
1448 const char *&cb2,
const char *&ce2)
1453 cb1 = strstr(opt,
"b1");
1454 ce1 = strstr(opt,
"e1");
1455 cb2 = strstr(opt,
"b2");
1456 ce2 = strstr(opt,
"e2");
1478 const char *cb1,
const char *ce1,
const char *cb2,
1544 if(
x>
fPoly[khalf=(klow+khig)/2].X())
1553 "Binary search failed x(%d) = %f < x(%d) = %f\n",
1554 klow,
fPoly[klow].X(),klow+1,
fPoly[klow+1].X());
1584 std::ofstream *
f =
new std::ofstream(filename,std::ios::out);
1586 Error(
"SaveAs",
"Cannot open file:%s\n",filename);
1592 Int_t nch = strlen(filename);
1593 snprintf(buffer,512,
"double %s",filename);
1594 char *dot = strstr(buffer,
".");
1596 strlcat(buffer,
"(double x) {\n",512);
1597 nch = strlen(buffer);
f->write(buffer,nch);
1599 nch = strlen(buffer);
f->write(buffer,nch);
1601 nch = strlen(buffer);
f->write(buffer,nch);
1605 snprintf(buffer,512,
" const double fX[%d] = {",
fNp);
1606 nch = strlen(buffer);
f->write(buffer,nch);
1610 for (i=0;i<
fNp;i++) {
1613 if (i ==
fNp-1) numb[nch-1]=0;
1614 strlcat(buffer,numb,512);
1615 if (i%5 == 4 || i ==
fNp-1) {
1616 nch = strlen(buffer);
f->write(buffer,nch);
1621 nch = strlen(buffer);
f->write(buffer,nch);
1623 snprintf(buffer,512,
" const double fY[%d] = {",
fNp);
1624 nch = strlen(buffer);
f->write(buffer,nch);
1626 for (i=0;i<
fNp;i++) {
1629 if (i ==
fNp-1) numb[nch-1]=0;
1630 strlcat(buffer,numb,512);
1631 if (i%5 == 4 || i ==
fNp-1) {
1632 nch = strlen(buffer);
f->write(buffer,nch);
1637 nch = strlen(buffer);
f->write(buffer,nch);
1639 snprintf(buffer,512,
" const double fB[%d] = {",
fNp);
1640 nch = strlen(buffer);
f->write(buffer,nch);
1642 for (i=0;i<
fNp;i++) {
1645 if (i ==
fNp-1) numb[nch-1]=0;
1646 strlcat(buffer,numb,512);
1647 if (i%5 == 4 || i ==
fNp-1) {
1648 nch = strlen(buffer);
f->write(buffer,nch);
1653 nch = strlen(buffer);
f->write(buffer,nch);
1655 snprintf(buffer,512,
" const double fC[%d] = {",
fNp);
1656 nch = strlen(buffer);
f->write(buffer,nch);
1658 for (i=0;i<
fNp;i++) {
1661 if (i ==
fNp-1) numb[nch-1]=0;
1662 strlcat(buffer,numb,512);
1663 if (i%5 == 4 || i ==
fNp-1) {
1664 nch = strlen(buffer);
f->write(buffer,nch);
1669 nch = strlen(buffer);
f->write(buffer,nch);
1671 snprintf(buffer,512,
" const double fD[%d] = {",
fNp);
1672 nch = strlen(buffer);
f->write(buffer,nch);
1674 for (i=0;i<
fNp;i++) {
1677 if (i ==
fNp-1) numb[nch-1]=0;
1678 strlcat(buffer,numb,512);
1679 if (i%5 == 4 || i ==
fNp-1) {
1680 nch = strlen(buffer);
f->write(buffer,nch);
1685 nch = strlen(buffer);
f->write(buffer,nch);
1687 snprintf(buffer,512,
" const double fE[%d] = {",
fNp);
1688 nch = strlen(buffer);
f->write(buffer,nch);
1690 for (i=0;i<
fNp;i++) {
1693 if (i ==
fNp-1) numb[nch-1]=0;
1694 strlcat(buffer,numb,512);
1695 if (i%5 == 4 || i ==
fNp-1) {
1696 nch = strlen(buffer);
f->write(buffer,nch);
1701 nch = strlen(buffer);
f->write(buffer,nch);
1703 snprintf(buffer,512,
" const double fF[%d] = {",
fNp);
1704 nch = strlen(buffer);
f->write(buffer,nch);
1706 for (i=0;i<
fNp;i++) {
1709 if (i ==
fNp-1) numb[nch-1]=0;
1710 strlcat(buffer,numb,512);
1711 if (i%5 == 4 || i ==
fNp-1) {
1712 nch = strlen(buffer);
f->write(buffer,nch);
1717 nch = strlen(buffer);
f->write(buffer,nch);
1720 snprintf(buffer,512,
" int klow=0;\n");
1721 nch = strlen(buffer);
f->write(buffer,nch);
1723 snprintf(buffer,512,
" // If out of boundaries, extrapolate. It may be badly wrong\n");
1724 snprintf(buffer,512,
" if(x<=fXmin) klow=0;\n");
1725 nch = strlen(buffer);
f->write(buffer,nch);
1726 snprintf(buffer,512,
" else if(x>=fXmax) klow=fNp-1;\n");
1727 nch = strlen(buffer);
f->write(buffer,nch);
1729 nch = strlen(buffer);
f->write(buffer,nch);
1730 snprintf(buffer,512,
" if(fKstep) {\n");
1731 nch = strlen(buffer);
f->write(buffer,nch);
1733 snprintf(buffer,512,
" // Equidistant knots, use histogramming\n");
1734 nch = strlen(buffer);
f->write(buffer,nch);
1735 snprintf(buffer,512,
" klow = int((x-fXmin)/fDelta);\n");
1736 nch = strlen(buffer);
f->write(buffer,nch);
1737 snprintf(buffer,512,
" if (klow < fNp-1) klow = fNp-1;\n");
1738 nch = strlen(buffer);
f->write(buffer,nch);
1739 snprintf(buffer,512,
" } else {\n");
1740 nch = strlen(buffer);
f->write(buffer,nch);
1741 snprintf(buffer,512,
" int khig=fNp-1, khalf;\n");
1742 nch = strlen(buffer);
f->write(buffer,nch);
1744 snprintf(buffer,512,
" // Non equidistant knots, binary search\n");
1745 nch = strlen(buffer);
f->write(buffer,nch);
1746 snprintf(buffer,512,
" while(khig-klow>1)\n");
1747 nch = strlen(buffer);
f->write(buffer,nch);
1748 snprintf(buffer,512,
" if(x>fX[khalf=(klow+khig)/2]) klow=khalf;\n");
1749 nch = strlen(buffer);
f->write(buffer,nch);
1750 snprintf(buffer,512,
" else khig=khalf;\n");
1751 nch = strlen(buffer);
f->write(buffer,nch);
1753 nch = strlen(buffer);
f->write(buffer,nch);
1755 nch = strlen(buffer);
f->write(buffer,nch);
1756 snprintf(buffer,512,
" // Evaluate now\n");
1757 nch = strlen(buffer);
f->write(buffer,nch);
1758 snprintf(buffer,512,
" double dx=x-fX[klow];\n");
1759 nch = strlen(buffer);
f->write(buffer,nch);
1760 snprintf(buffer,512,
" return (fY[klow]+dx*(fB[klow]+dx*(fC[klow]+dx*(fD[klow]+dx*(fE[klow]+dx*fF[klow])))));\n");
1761 nch = strlen(buffer);
f->write(buffer,nch);
1766 if (
f) {
f->close();
delete f;}
1775 out<<
" "<<std::endl;
1776 if (
gROOT->ClassSaved(TSpline5::Class())) {
1785 out<<
"spline5 = new TSpline5("<<quote<<
GetTitle()<<quote<<
","
1786 <<
fXmin<<
","<<
fXmax<<
",(TF1*)0,"<<
fNp<<
","<<quote<<quote<<
","
1787 <<b1<<
","<<e1<<
","<<b2<<
","<<e2<<
");"<<std::endl;
1788 out<<
" spline5->SetName("<<quote<<
GetName()<<quote<<
");"<<std::endl;
1793 if (
fNpx != 100) out<<
" spline5->SetNpx("<<
fNpx<<
");"<<std::endl;
1796 out<<
" spline5->SetPoint("<<i<<
","<<
fPoly[i].
X()<<
","<<
fPoly[i].
Y()<<
");"<<std::endl;
1797 out<<
" spline5->SetPointCoeff("<<i<<
","<<
fPoly[i].
B()<<
","<<
fPoly[i].
C()<<
","<<
fPoly[i].
D()<<
","<<
fPoly[i].
E()<<
","<<
fPoly[i].
F()<<
");"<<std::endl;
1799 out<<
" spline5->Draw("<<quote<<option<<quote<<
");"<<std::endl;
1808 if (i < 0 || i >=
fNp)
return;
1819 if (i < 0 || i >=
fNp)
return;
1908 b1, p2, p3, q2, q3, r2, pq, pr, qr;
1923 if (
q)
fPoly[1].
D() =
q*6.*q2/(qr*qr);
1927 for (i = 1; i <
m; ++i) {
1940 fPoly[i+1].
D() = q3*6./(qr*qr);
1942 *(pr* 20.+q2*7.)+q2*
1943 ((p2+r2)*8.+pr*21.+q2+q2))/(pqqr*pqqr);
1944 fPoly[i-1].
D() += q3*6./(pq*pq);
1945 fPoly[i].
E() = q2*(p*qr+pq*3.*(qr+
r+
r))/(pqqr*qr);
1946 fPoly[i-1].
E() += q2*(
r*pq+qr*3.*(pq+p+p))/(pqqr*pq);
1947 fPoly[i-1].
F() = q3/pqqr;
1952 if (
r)
fPoly[
m-1].
D() +=
r*6.*r2/(qr*qr);
1957 for (i = 1; i <
fNp; ++i) {
1966 for (i = 2; i <
fNp; ++i) {
1984 for (i = 2; i <
m; ++i) {
1997 for (i=
fNp-3; i > 0; --i)
2015 for (i = 1; i <
m; ++i) {
2036 p3-(
v+
fPoly[i].E())*q3)/pq;
2093 printf(
"1 TEST OF TSpline5 WITH NONEQUIDISTANT KNOTS\n");
2108 printf(
"\n-N = %3d M =%2d\n",
n,
m);
2110 for (i = 0; i <
n; ++i)
2112 a[i+600],
a[i+800],
a[i+1000]);
2114 for (i = 0; i < mm1; ++i) diff[i] = com[i] = 0;
2115 for (k = 0; k <
n; ++k) {
2116 for (i = 0; i < mm; ++i)
c[i] =
a[k+i*200];
2117 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
2118 printf(
"%12.8f\n",
x[k]);
2120 printf(
"%16.8f\n",
c[0]);
2122 for (i = 0; i < mm; ++i) printf(
"%16.8f",
c[i]);
2124 for (i = 0; i < mm1; ++i)
2125 if ((z=
TMath::Abs(
a[k+i*200])) > com[i]) com[i] = z;
2127 for (i = 1; i < mm; ++i)
2128 for (jj = i; jj < mm; ++jj) {
2130 c[j-2] =
c[j-1]*z+
c[j-2];
2132 for (i = 0; i < mm; ++i) printf(
"%16.8f",
c[i]);
2134 for (i = 0; i < mm1; ++i)
2135 if (!(k >=
n-2 && i != 0))
2137 > diff[i]) diff[i] = z;
2140 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
2141 for (i = 0; i < mm1; ++i) printf(
"%18.9E",diff[i]);
2143 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
2146 for (i = 0; i < mm1; ++i) printf(
"%16.8f",com[i]);
2149 for (
n = 10;
n <= 100;
n += 10) {
2153 for (i = 0; i < nm1; i += 2) {
2163 printf(
"\n-N = %3d M =%2d\n",
n,
m);
2165 for (i = 0; i <
n; ++i)
2167 a[i+600],
a[i+800],
a[i+1000]);
2169 for (i = 0; i < mm1; ++i)
2170 diff[i] = com[i] = 0;
2171 for (k = 0; k <
n; ++k) {
2172 for (i = 0; i < mm; ++i)
2175 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
2176 printf(
"%12.8f\n",
x[k]);
2177 if (k ==
n-1) printf(
"%16.8f\n",
c[0]);
2179 if (k ==
n-1)
break;
2181 for (i = 0; i < mm; ++i) printf(
"%16.8f",
c[i]);
2184 for (i = 0; i < mm1; ++i)
2188 for (i = 1; i < mm; ++i)
2189 for (jj = i; jj < mm; ++jj) {
2191 c[j-2] =
c[j-1]*z+
c[j-2];
2194 for (i = 0; i < mm; ++i) printf(
"%16.8f",
c[i]);
2197 for (i = 0; i < mm1; ++i)
2198 if (!(k >=
n-2 && i != 0))
2200 > diff[i]) diff[i] = z;
2202 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
2203 for (i = 0; i < mm1; ++i) printf(
"%18.9E",diff[i]);
2205 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
2208 for (i = 0; i < mm1; ++i) printf(
"%16.8E",com[i]);
2213 printf(
"1 TEST OF TSpline5 WITH NONEQUIDISTANT DOUBLE KNOTS\n");
2239 printf(
"-N = %3d M =%2d\n",
n,
m);
2241 for (i = 0; i < nn; ++i)
2243 a[i+600],
a[i+800],
a[i+1000]);
2245 for (i = 0; i < mm1; ++i)
2246 diff[i] = com[i] = 0;
2247 for (k = 0; k < nn; ++k) {
2248 for (i = 0; i < mm; ++i)
2250 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
2251 printf(
"%12.8f\n",
x[k]);
2253 printf(
"%16.8f\n",
c[0]);
2256 for (i = 0; i < mm; ++i) printf(
"%16.8f",
c[i]);
2258 for (i = 0; i < mm1; ++i)
2259 if ((z=
TMath::Abs(
a[k+i*200])) > com[i]) com[i] = z;
2261 for (i = 1; i < mm; ++i)
2262 for (jj = i; jj < mm; ++jj) {
2264 c[j-2] =
c[j-1]*z+
c[j-2];
2266 for (i = 0; i < mm; ++i) printf(
"%16.8f",
c[i]);
2268 for (i = 0; i < mm1; ++i)
2269 if (!(k >= nn-2 && i != 0))
2271 > diff[i]) diff[i] = z;
2273 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
2274 for (i = 1; i <= mm1; ++i) {
2275 printf(
"%18.9E",diff[i-1]);
2280 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
2281 for (i = 0; i < mm1; ++i) printf(
"%16.8f",com[i]);
2284 for (
n = 10;
n <= 100;
n += 10) {
2289 for (i = 0; i <
n; ++i) {
2296 printf(
"-N = %3d M =%2d\n",
n,
m);
2298 for (i = 0; i < nn; ++i)
2300 a[i+600],
a[i+800],
a[i+1000]);
2302 for (i = 0; i < mm1; ++i)
2303 diff[i] = com[i] = 0;
2304 for (k = 0; k < nn; ++k) {
2305 for (i = 0; i < mm; ++i)
2308 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
2309 printf(
"%12.8f\n",
x[k]);
2310 if (k == nn-1) printf(
"%16.8f\n",
c[0]);
2312 if (k == nn-1)
break;
2314 for (i = 0; i < mm; ++i) printf(
"%16.8f",
c[i]);
2317 for (i = 0; i < mm1; ++i)
2318 if ((z=
TMath::Abs(
a[k+i*200])) > com[i]) com[i] = z;
2320 for (i = 1; i < mm; ++i) {
2321 for (jj = i; jj < mm; ++jj) {
2323 c[j-2] =
c[j-1]*z+
c[j-2];
2327 for (i = 0; i < mm; ++i) printf(
"%16.8f",
c[i]);
2330 for (i = 0; i < mm1; ++i)
2331 if (!(k >= nn-2 && i != 0))
2333 > diff[i]) diff[i] = z;
2335 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
2336 for (i = 0; i < mm1; ++i) printf(
"%18.9E",diff[i]);
2338 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
2341 for (i = 0; i < mm1; ++i) printf(
"%18.9E",com[i]);
2347 printf(
"1 TEST OF TSpline5 WITH NONEQUIDISTANT KNOTS,\n");
2348 printf(
" ONE DOUBLE, ONE TRIPLE KNOT\n");
2369 printf(
"-N = %3d M =%2d\n",
n,
m);
2371 for (i = 0; i <
n; ++i)
2373 a[i+600],
a[i+800],
a[i+1000]);
2375 for (i = 0; i < mm1; ++i)
2376 diff[i] = com[i] = 0;
2377 for (k = 0; k <
n; ++k) {
2378 for (i = 0; i < mm; ++i)
2380 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
2381 printf(
"%12.8f\n",
x[k]);
2383 printf(
"%16.8f\n",
c[0]);
2386 for (i = 0; i < mm; ++i) printf(
"%16.8f",
c[i]);
2388 for (i = 0; i < mm1; ++i)
2389 if ((z=
TMath::Abs(
a[k+i*200])) > com[i]) com[i] = z;
2391 for (i = 1; i < mm; ++i)
2392 for (jj = i; jj < mm; ++jj) {
2394 c[j-2] =
c[j-1]*z+
c[j-2];
2396 for (i = 0; i < mm; ++i) printf(
"%16.8f",
c[i]);
2398 for (i = 0; i < mm1; ++i)
2399 if (!(k >=
n-2 && i != 0))
2401 > diff[i]) diff[i] = z;
2403 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
2404 for (i = 0; i < mm1; ++i) printf(
"%18.9E",diff[i]);
2406 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
2409 for (i = 0; i < mm1; ++i) printf(
"%16.8f",com[i]);
2414 printf(
"1 TEST OF TSpline5 WITH NONEQUIDISTANT KNOTS,\n");
2415 printf(
" TWO DOUBLE, ONE TRIPLE KNOT\n");
2440 printf(
"-N = %3d M =%2d\n",
n,
m);
2442 for (i = 0; i <
n; ++i)
2444 a[i+600],
a[i+800],
a[i+1000]);
2446 for (i = 0; i < mm1; ++i)
2447 diff[i] = com[i] = 0;
2448 for (k = 0; k <
n; ++k) {
2449 for (i = 0; i < mm; ++i)
2451 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
2452 printf(
"%12.8f\n",
x[k]);
2454 printf(
"%16.8f\n",
c[0]);
2457 for (i = 0; i < mm; ++i) printf(
"%16.8f",
c[i]);
2459 for (i = 0; i < mm1; ++i)
2460 if ((z=
TMath::Abs(
a[k+i*200])) > com[i]) com[i] = z;
2462 for (i = 1; i < mm; ++i)
2463 for (jj = i; jj < mm; ++jj) {
2465 c[j-2] =
c[j-1]*z+
c[j-2];
2467 for (i = 0; i < mm; ++i) printf(
"%16.8f",
c[i]);
2469 for (i = 0; i < mm1; ++i)
2470 if (!(k >=
n-2 && i != 0))
2472 > diff[i]) diff[i] = z;
2474 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
2475 for (i = 0; i < mm1; ++i) printf(
"%18.9E",diff[i]);
2477 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
2480 for (i = 0; i < mm1; ++i) printf(
"%16.8f",com[i]);
2487void TSpline5::Streamer(
TBuffer &R__b)
2497 TSpline::Streamer(R__b);
2501 fPoly[i].Streamer(R__b);
R__EXTERN TSystem * gSystem
Fill Area Attributes class.
virtual Color_t GetFillColor() const
Return the fill area color.
virtual Style_t GetFillStyle() const
Return the fill area style.
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
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 Color_t GetLineColor() const
Return the line color.
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
virtual Width_t GetLineWidth() const
Return the line width.
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
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 void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
virtual Color_t GetMarkerColor() const
Return the marker color.
virtual Size_t GetMarkerSize() const
Return the marker size.
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
virtual void SetLimits(Double_t xmin, Double_t xmax)
Buffer base class used for serializing objects.
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
virtual Version_t ReadVersion(UInt_t *start=0, UInt_t *bcnt=0, const TClass *cl=0)=0
virtual Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss)=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.
virtual void Paint(Option_t *chopt="")
Draw this graph with its current attributes.
1-D histogram with a float per channel (see TH1 documentation)}
TH1 is the base class of all histogram classes in ROOT.
virtual void SetDirectory(TDirectory *dir)
By default when an histogram is created, it is added to the list of histogram objects in the current ...
virtual Double_t GetBinCenter(Int_t bin) const
Return bin center for 1D histogram.
@ kLogX
X-axis in log scale.
@ kNoStats
don't draw stats box
TAxis * GetXaxis()
Get the behaviour adopted by the object about the statoverflows. See EStatOverflows for more informat...
virtual void SetBinContent(Int_t bin, Double_t content)
Set bin content see convention for numbering bins in TH1::GetBin In case the bin number is greater th...
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Execute action corresponding to one event.
virtual void Paint(Option_t *option="")
Control routine to paint any kind of histograms.
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py)
Compute distance from point px,py to a line.
The TNamed class is the base class for all named ROOT classes.
virtual const char * GetTitle() const
Returns title of object.
TNamed & operator=(const TNamed &rhs)
TNamed assignment operator.
virtual const char * GetName() const
Returns name of object.
TObject & operator=(const TObject &rhs)
TObject assignment operator.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual void AppendPad(Option_t *option="")
Append graphics object to current pad.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
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...
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save primitive as a C++ statement(s) on output stream out.
Int_t FindX(Double_t x) const
Find X.
static void Test()
Test method for TSpline5.
virtual void SaveAs(const char *filename, Option_t *option="") const
Write this spline as a C++ function that can be executed without ROOT the name of the function is the...
void SetCond(const char *opt)
Check the boundary conditions.
Double_t Derivative(Double_t x) const
Derivative.
TSpline3 & operator=(const TSpline3 &)
Assignment operator.
Double_t Eval(Double_t x) const
Eval this spline at x.
virtual void SetPoint(Int_t i, Double_t x, Double_t y)
Set point number i.
void BuildCoeff()
Build coefficients.
void GetCoeff(Int_t i, Double_t &x, Double_t &y, Double_t &b, Double_t &c, Double_t &d)
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...
static void Test()
Test method for TSpline5.
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)
virtual void SaveAs(const char *filename, Option_t *option="") const
Write this spline as a C++ function that can be executed without ROOT the name of the function is the...
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save primitive as a C++ statement(s) on output stream out.
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.
Double_t Derivative(Double_t x) const
Derivative.
Double_t Eval(Double_t x) const
Eval this spline at x.
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 BuildCoeff()
Algorithm 600, collected algorithms from acm.
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 Derivative(Double_t x) const
Double_t Eval(Double_t x) const
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 Derivative(Double_t x) const
Double_t Eval(Double_t x) const
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.
Base class for spline implementation containing the Draw/Paint methods.
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Execute action corresponding to one event.
virtual Double_t Eval(Double_t x) const =0
virtual void Draw(Option_t *option="")
Draw this function with its current attributes.
virtual void GetKnot(Int_t i, Double_t &x, Double_t &y) const =0
TSpline & operator=(const TSpline &)
Assignment operator.
virtual void Paint(Option_t *option="")
Paint this function with its current attributes.
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py)
Compute distance from point px,py to a spline.
virtual ~TSpline()
Destructor.
void ToLower()
Change string to lower-case.
const char * Data() const
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
Short_t Max(Short_t a, Short_t b)
Int_t FloorNint(Double_t x)
Short_t Min(Short_t a, Short_t b)
Double_t Log10(Double_t x)