135 pmin =
gPad->PadtoX(
gPad->GetUxmin());
136 pmax =
gPad->PadtoX(
gPad->GetUxmax());
140 if (
xmax < pmin)
return;
141 if (
xmin > pmax)
return;
165 for (i=0;i<=
fNpx;i++) {
166 xbins[i] =
gPad->PadtoX(xlogmin+ i*dlogx);
177 for (i=1;i<=
fNpx;i++) {
195 char *o = (
char *) opt.
Data();
227void TSpline::Streamer(
TBuffer &R__b)
237 TNamed::Streamer(R__b);
238 TAttLine::Streamer(R__b);
239 TAttFill::Streamer(R__b);
240 TAttMarker::Streamer(R__b);
358 fValBeg(valbeg), fValEnd(valend), fBegCond(0), fEndCond(0)
368 for (
Int_t i=0; i<
n; ++i) {
387 fValBeg(valbeg), fValEnd(valend),
388 fBegCond(0), fEndCond(0)
398 for (
Int_t i=0; i<
n; ++i) {
416 fValBeg(valbeg), fValEnd(valend),
417 fBegCond(0), fEndCond(0)
427 for (
Int_t i=0; i<
n; ++i) {
443 const TF1 *func,
Int_t n,
const char *opt,
446 fValBeg(valbeg), fValEnd(valend),
447 fBegCond(0), fEndCond(0)
460 for (
Int_t i=0; i<
n; ++i) {
476 const TGraph *
g,
const char *opt,
479 fValBeg(valbeg), fValEnd(valend),
480 fBegCond(0), fEndCond(0)
492 g->GetPoint(i,xx,yy);
509 fValBeg(valbeg), fValEnd(valend),
510 fBegCond(0), fEndCond(0)
521 fPoly[i].
X()=
h->GetXaxis()->GetBinCenter(i+1);
522 fPoly[i].
Y()=
h->GetBinContent(i+1);
537 fValBeg(sp3.fValBeg),
538 fValEnd(sp3.fValEnd),
539 fBegCond(sp3.fBegCond),
540 fEndCond(sp3.fEndCond)
572 const char *b1 = strstr(opt,
"b1");
573 const char *e1 = strstr(opt,
"e1");
574 const char *b2 = strstr(opt,
"b2");
575 const char *e2 = strstr(opt,
"e2");
577 Error(
"SetCond",
"Cannot specify first and second derivative at first point");
579 Error(
"SetCond",
"Cannot specify first and second derivative at last point");
619 printf(
"1 TEST OF TSpline3 WITH NONEQUIDISTANT KNOTS\n");
634 printf(
"\n-N = %3d M =%2d\n",
n,
m);
636 for (i = 0; i <
n; ++i)
637 spline->
GetCoeff(i,hx,
a[i],
a[i+200],
a[i+400],
a[i+600]);
639 for (i = 0; i < mm1; ++i) diff[i] = com[i] = 0;
640 for (k = 0; k <
n; ++k) {
641 for (i = 0; i <
mm; ++i)
c[i] =
a[k+i*200];
642 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
643 printf(
"%12.8f\n",
x[k]);
645 printf(
"%16.8f\n",
c[0]);
647 for (i = 0; i <
mm; ++i) printf(
"%16.8f",
c[i]);
649 for (i = 0; i < mm1; ++i)
650 if ((z=
TMath::Abs(
a[k+i*200])) > com[i]) com[i] = z;
652 for (i = 1; i <
mm; ++i)
653 for (jj = i; jj <
mm; ++jj) {
655 c[j-2] =
c[j-1]*z+
c[j-2];
657 for (i = 0; i <
mm; ++i) printf(
"%16.8f",
c[i]);
659 for (i = 0; i < mm1; ++i)
660 if (!(k >=
n-2 && i != 0))
662 > diff[i]) diff[i] = z;
665 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
666 for (i = 0; i < mm1; ++i) printf(
"%18.9E",diff[i]);
668 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
671 for (i = 0; i < mm1; ++i) printf(
"%16.8f",com[i]);
674 for (
n = 10;
n <= 100;
n += 10) {
678 for (i = 0; i < nm1; i += 2) {
688 printf(
"\n-N = %3d M =%2d\n",
n,
m);
690 for (i = 0; i <
n; ++i)
693 for (i = 0; i < mm1; ++i)
694 diff[i] = com[i] = 0;
695 for (k = 0; k <
n; ++k) {
696 for (i = 0; i <
mm; ++i)
699 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
700 printf(
"%12.8f\n",
x[k]);
701 if (k ==
n-1) printf(
"%16.8f\n",
c[0]);
705 for (i = 0; i <
mm; ++i) printf(
"%16.8f",
c[i]);
708 for (i = 0; i < mm1; ++i)
712 for (i = 1; i <
mm; ++i)
713 for (jj = i; jj <
mm; ++jj) {
715 c[j-2] =
c[j-1]*z+
c[j-2];
718 for (i = 0; i <
mm; ++i) printf(
"%16.8f",
c[i]);
721 for (i = 0; i < mm1; ++i)
722 if (!(k >=
n-2 && i != 0))
724 > diff[i]) diff[i] = z;
726 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
727 for (i = 0; i < mm1; ++i) printf(
"%18.9E",diff[i]);
729 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
732 for (i = 0; i < mm1; ++i) printf(
"%16.8E",com[i]);
747 else if(
x>=
fXmax) klow=khig;
756 else if (klow < khig) {
757 if (
x >
fPoly[klow+1].X()) ++klow;
764 if(
x>
fPoly[khalf=(klow+khig)/2].X())
772 "Binary search failed x(%d) = %f < x= %f < x(%d) = %f\n",
785 if (klow >=
fNp-1 &&
fNp > 1) klow =
fNp-2;
795 if (klow >=
fNp-1) klow =
fNp-2;
806 std::ofstream *
f =
new std::ofstream(filename,std::ios::out);
808 Error(
"SaveAs",
"Cannot open file:%s\n",filename);
814 Int_t nch = strlen(filename);
815 snprintf(buffer,512,
"double %s",filename);
816 char *dot = strstr(buffer,
".");
818 strlcat(buffer,
"(double x) {\n",512);
819 nch = strlen(buffer);
f->write(buffer,nch);
821 nch = strlen(buffer);
f->write(buffer,nch);
823 nch = strlen(buffer);
f->write(buffer,nch);
827 snprintf(buffer,512,
" const double fX[%d] = {",
fNp);
828 nch = strlen(buffer);
f->write(buffer,nch);
832 for (i=0;i<
fNp;i++) {
835 if (i ==
fNp-1) numb[nch-1]=0;
836 strlcat(buffer,numb,512);
837 if (i%5 == 4 || i ==
fNp-1) {
838 nch = strlen(buffer);
f->write(buffer,nch);
843 nch = strlen(buffer);
f->write(buffer,nch);
845 snprintf(buffer,512,
" const double fY[%d] = {",
fNp);
846 nch = strlen(buffer);
f->write(buffer,nch);
848 for (i=0;i<
fNp;i++) {
851 if (i ==
fNp-1) numb[nch-1]=0;
852 strlcat(buffer,numb,512);
853 if (i%5 == 4 || i ==
fNp-1) {
854 nch = strlen(buffer);
f->write(buffer,nch);
859 nch = strlen(buffer);
f->write(buffer,nch);
861 snprintf(buffer,512,
" const double fB[%d] = {",
fNp);
862 nch = strlen(buffer);
f->write(buffer,nch);
864 for (i=0;i<
fNp;i++) {
867 if (i ==
fNp-1) numb[nch-1]=0;
868 strlcat(buffer,numb,512);
869 if (i%5 == 4 || i ==
fNp-1) {
870 nch = strlen(buffer);
f->write(buffer,nch);
875 nch = strlen(buffer);
f->write(buffer,nch);
877 snprintf(buffer,512,
" const double fC[%d] = {",
fNp);
878 nch = strlen(buffer);
f->write(buffer,nch);
880 for (i=0;i<
fNp;i++) {
883 if (i ==
fNp-1) numb[nch-1]=0;
884 strlcat(buffer,numb,512);
885 if (i%5 == 4 || i ==
fNp-1) {
886 nch = strlen(buffer);
f->write(buffer,nch);
891 nch = strlen(buffer);
f->write(buffer,nch);
893 snprintf(buffer,512,
" const double fD[%d] = {",
fNp);
894 nch = strlen(buffer);
f->write(buffer,nch);
896 for (i=0;i<
fNp;i++) {
899 if (i ==
fNp-1) numb[nch-1]=0;
900 strlcat(buffer,numb,512);
901 if (i%5 == 4 || i ==
fNp-1) {
902 nch = strlen(buffer);
f->write(buffer,nch);
907 nch = strlen(buffer);
f->write(buffer,nch);
910 snprintf(buffer,512,
" int klow=0;\n");
911 nch = strlen(buffer);
f->write(buffer,nch);
913 snprintf(buffer,512,
" // If out of boundaries, extrapolate. It may be badly wrong\n");
914 snprintf(buffer,512,
" if(x<=fXmin) klow=0;\n");
915 nch = strlen(buffer);
f->write(buffer,nch);
916 snprintf(buffer,512,
" else if(x>=fXmax) klow=fNp-1;\n");
917 nch = strlen(buffer);
f->write(buffer,nch);
919 nch = strlen(buffer);
f->write(buffer,nch);
920 snprintf(buffer,512,
" if(fKstep) {\n");
921 nch = strlen(buffer);
f->write(buffer,nch);
923 snprintf(buffer,512,
" // Equidistant knots, use histogramming\n");
924 nch = strlen(buffer);
f->write(buffer,nch);
925 snprintf(buffer,512,
" klow = int((x-fXmin)/fDelta);\n");
926 nch = strlen(buffer);
f->write(buffer,nch);
927 snprintf(buffer,512,
" if (klow < fNp-1) klow = fNp-1;\n");
928 nch = strlen(buffer);
f->write(buffer,nch);
930 nch = strlen(buffer);
f->write(buffer,nch);
931 snprintf(buffer,512,
" int khig=fNp-1, khalf;\n");
932 nch = strlen(buffer);
f->write(buffer,nch);
934 snprintf(buffer,512,
" // Non equidistant knots, binary search\n");
935 nch = strlen(buffer);
f->write(buffer,nch);
936 snprintf(buffer,512,
" while(khig-klow>1)\n");
937 nch = strlen(buffer);
f->write(buffer,nch);
938 snprintf(buffer,512,
" if(x>fX[khalf=(klow+khig)/2]) klow=khalf;\n");
939 nch = strlen(buffer);
f->write(buffer,nch);
940 snprintf(buffer,512,
" else khig=khalf;\n");
941 nch = strlen(buffer);
f->write(buffer,nch);
943 nch = strlen(buffer);
f->write(buffer,nch);
945 nch = strlen(buffer);
f->write(buffer,nch);
946 snprintf(buffer,512,
" // Evaluate now\n");
947 nch = strlen(buffer);
f->write(buffer,nch);
948 snprintf(buffer,512,
" double dx=x-fX[klow];\n");
949 nch = strlen(buffer);
f->write(buffer,nch);
950 snprintf(buffer,512,
" return (fY[klow]+dx*(fB[klow]+dx*(fC[klow]+dx*fD[klow])));\n");
951 nch = strlen(buffer);
f->write(buffer,nch);
956 if (
f) {
f->close();
delete f;}
971 out<<
"spline3 = new TSpline3("<<quote<<
GetTitle()<<quote<<
","
972 <<
fXmin<<
","<<
fXmax<<
",(TF1*)0,"<<
fNp<<
","<<quote<<quote<<
","
974 out<<
" spline3->SetName("<<quote<<
GetName()<<quote<<
");"<<std::endl;
979 if (
fNpx != 100) out<<
" spline3->SetNpx("<<
fNpx<<
");"<<std::endl;
982 out<<
" spline3->SetPoint("<<i<<
","<<
fPoly[i].
X()<<
","<<
fPoly[i].
Y()<<
");"<<std::endl;
983 out<<
" spline3->SetPointCoeff("<<i<<
","<<
fPoly[i].
B()<<
","<<
fPoly[i].
C()<<
","<<
fPoly[i].
D()<<
");"<<std::endl;
985 out<<
" spline3->Draw("<<quote<<option<<quote<<
");"<<std::endl;
993 if (i < 0 || i >=
fNp)
return;
1003 if (i < 0 || i >=
fNp)
return;
1088 for (
m=1;
m<
l; ++
m) {
1157 for (i=1; i<
fNp; ++i) {
1161 fPoly[i-1].
C() = (divdf1 -
fPoly[i-1].
B() - divdf3)/dtau;
1162 fPoly[i-1].
D() = (divdf3/dtau)/dtau;
1169void TSpline3::Streamer(
TBuffer &R__b)
1179 TSpline::Streamer(R__b);
1183 fPoly[i].Streamer(R__b);
1216 const char *cb1, *ce1, *cb2, *ce2;
1225 for (
Int_t i=0; i<
n; ++i) {
1250 const char *cb1, *ce1, *cb2, *ce2;
1259 for (
Int_t i=0; i<
n; ++i) {
1283 const char *cb1, *ce1, *cb2, *ce2;
1292 for (
Int_t i=0; i<
n; i++) {
1317 const char *cb1, *ce1, *cb2, *ce2;
1326 for (
Int_t i=0; i<
n; ++i) {
1329 if (func)
fPoly[i+beg].
Y() = ((
TF1*)func)->Eval(
x);
1352 const char *cb1, *ce1, *cb2, *ce2;
1363 g->GetPoint(i,xx,yy);
1386 const char *cb1, *ce1, *cb2, *ce2;
1396 fPoly[i+beg].
X()=
h->GetXaxis()->GetBinCenter(i+1);
1397 fPoly[i+beg].
Y()=
h->GetBinContent(i+1);
1443 const char *&cb1,
const char *&ce1,
1444 const char *&cb2,
const char *&ce2)
1449 cb1 = strstr(opt,
"b1");
1450 ce1 = strstr(opt,
"e1");
1451 cb2 = strstr(opt,
"b2");
1452 ce2 = strstr(opt,
"e2");
1474 const char *cb1,
const char *ce1,
const char *cb2,
1540 if(
x>
fPoly[khalf=(klow+khig)/2].X())
1549 "Binary search failed x(%d) = %f < x(%d) = %f\n",
1550 klow,
fPoly[klow].X(),klow+1,
fPoly[klow+1].X());
1580 std::ofstream *
f =
new std::ofstream(filename,std::ios::out);
1582 Error(
"SaveAs",
"Cannot open file:%s\n",filename);
1588 Int_t nch = strlen(filename);
1589 snprintf(buffer,512,
"double %s",filename);
1590 char *dot = strstr(buffer,
".");
1592 strlcat(buffer,
"(double x) {\n",512);
1593 nch = strlen(buffer);
f->write(buffer,nch);
1595 nch = strlen(buffer);
f->write(buffer,nch);
1597 nch = strlen(buffer);
f->write(buffer,nch);
1601 snprintf(buffer,512,
" const double fX[%d] = {",
fNp);
1602 nch = strlen(buffer);
f->write(buffer,nch);
1606 for (i=0;i<
fNp;i++) {
1609 if (i ==
fNp-1) numb[nch-1]=0;
1610 strlcat(buffer,numb,512);
1611 if (i%5 == 4 || i ==
fNp-1) {
1612 nch = strlen(buffer);
f->write(buffer,nch);
1617 nch = strlen(buffer);
f->write(buffer,nch);
1619 snprintf(buffer,512,
" const double fY[%d] = {",
fNp);
1620 nch = strlen(buffer);
f->write(buffer,nch);
1622 for (i=0;i<
fNp;i++) {
1625 if (i ==
fNp-1) numb[nch-1]=0;
1626 strlcat(buffer,numb,512);
1627 if (i%5 == 4 || i ==
fNp-1) {
1628 nch = strlen(buffer);
f->write(buffer,nch);
1633 nch = strlen(buffer);
f->write(buffer,nch);
1635 snprintf(buffer,512,
" const double fB[%d] = {",
fNp);
1636 nch = strlen(buffer);
f->write(buffer,nch);
1638 for (i=0;i<
fNp;i++) {
1641 if (i ==
fNp-1) numb[nch-1]=0;
1642 strlcat(buffer,numb,512);
1643 if (i%5 == 4 || i ==
fNp-1) {
1644 nch = strlen(buffer);
f->write(buffer,nch);
1649 nch = strlen(buffer);
f->write(buffer,nch);
1651 snprintf(buffer,512,
" const double fC[%d] = {",
fNp);
1652 nch = strlen(buffer);
f->write(buffer,nch);
1654 for (i=0;i<
fNp;i++) {
1657 if (i ==
fNp-1) numb[nch-1]=0;
1658 strlcat(buffer,numb,512);
1659 if (i%5 == 4 || i ==
fNp-1) {
1660 nch = strlen(buffer);
f->write(buffer,nch);
1665 nch = strlen(buffer);
f->write(buffer,nch);
1667 snprintf(buffer,512,
" const double fD[%d] = {",
fNp);
1668 nch = strlen(buffer);
f->write(buffer,nch);
1670 for (i=0;i<
fNp;i++) {
1673 if (i ==
fNp-1) numb[nch-1]=0;
1674 strlcat(buffer,numb,512);
1675 if (i%5 == 4 || i ==
fNp-1) {
1676 nch = strlen(buffer);
f->write(buffer,nch);
1681 nch = strlen(buffer);
f->write(buffer,nch);
1683 snprintf(buffer,512,
" const double fE[%d] = {",
fNp);
1684 nch = strlen(buffer);
f->write(buffer,nch);
1686 for (i=0;i<
fNp;i++) {
1689 if (i ==
fNp-1) numb[nch-1]=0;
1690 strlcat(buffer,numb,512);
1691 if (i%5 == 4 || i ==
fNp-1) {
1692 nch = strlen(buffer);
f->write(buffer,nch);
1697 nch = strlen(buffer);
f->write(buffer,nch);
1699 snprintf(buffer,512,
" const double fF[%d] = {",
fNp);
1700 nch = strlen(buffer);
f->write(buffer,nch);
1702 for (i=0;i<
fNp;i++) {
1705 if (i ==
fNp-1) numb[nch-1]=0;
1706 strlcat(buffer,numb,512);
1707 if (i%5 == 4 || i ==
fNp-1) {
1708 nch = strlen(buffer);
f->write(buffer,nch);
1713 nch = strlen(buffer);
f->write(buffer,nch);
1716 snprintf(buffer,512,
" int klow=0;\n");
1717 nch = strlen(buffer);
f->write(buffer,nch);
1719 snprintf(buffer,512,
" // If out of boundaries, extrapolate. It may be badly wrong\n");
1720 snprintf(buffer,512,
" if(x<=fXmin) klow=0;\n");
1721 nch = strlen(buffer);
f->write(buffer,nch);
1722 snprintf(buffer,512,
" else if(x>=fXmax) klow=fNp-1;\n");
1723 nch = strlen(buffer);
f->write(buffer,nch);
1725 nch = strlen(buffer);
f->write(buffer,nch);
1726 snprintf(buffer,512,
" if(fKstep) {\n");
1727 nch = strlen(buffer);
f->write(buffer,nch);
1729 snprintf(buffer,512,
" // Equidistant knots, use histogramming\n");
1730 nch = strlen(buffer);
f->write(buffer,nch);
1731 snprintf(buffer,512,
" klow = int((x-fXmin)/fDelta);\n");
1732 nch = strlen(buffer);
f->write(buffer,nch);
1733 snprintf(buffer,512,
" if (klow < fNp-1) klow = fNp-1;\n");
1734 nch = strlen(buffer);
f->write(buffer,nch);
1735 snprintf(buffer,512,
" } else {\n");
1736 nch = strlen(buffer);
f->write(buffer,nch);
1737 snprintf(buffer,512,
" int khig=fNp-1, khalf;\n");
1738 nch = strlen(buffer);
f->write(buffer,nch);
1740 snprintf(buffer,512,
" // Non equidistant knots, binary search\n");
1741 nch = strlen(buffer);
f->write(buffer,nch);
1742 snprintf(buffer,512,
" while(khig-klow>1)\n");
1743 nch = strlen(buffer);
f->write(buffer,nch);
1744 snprintf(buffer,512,
" if(x>fX[khalf=(klow+khig)/2]) klow=khalf;\n");
1745 nch = strlen(buffer);
f->write(buffer,nch);
1746 snprintf(buffer,512,
" else khig=khalf;\n");
1747 nch = strlen(buffer);
f->write(buffer,nch);
1749 nch = strlen(buffer);
f->write(buffer,nch);
1751 nch = strlen(buffer);
f->write(buffer,nch);
1752 snprintf(buffer,512,
" // Evaluate now\n");
1753 nch = strlen(buffer);
f->write(buffer,nch);
1754 snprintf(buffer,512,
" double dx=x-fX[klow];\n");
1755 nch = strlen(buffer);
f->write(buffer,nch);
1756 snprintf(buffer,512,
" return (fY[klow]+dx*(fB[klow]+dx*(fC[klow]+dx*(fD[klow]+dx*(fE[klow]+dx*fF[klow])))));\n");
1757 nch = strlen(buffer);
f->write(buffer,nch);
1762 if (
f) {
f->close();
delete f;}
1771 out<<
" "<<std::endl;
1781 out<<
"spline5 = new TSpline5("<<quote<<
GetTitle()<<quote<<
","
1782 <<
fXmin<<
","<<
fXmax<<
",(TF1*)0,"<<
fNp<<
","<<quote<<quote<<
","
1783 <<b1<<
","<<e1<<
","<<b2<<
","<<e2<<
");"<<std::endl;
1784 out<<
" spline5->SetName("<<quote<<
GetName()<<quote<<
");"<<std::endl;
1789 if (
fNpx != 100) out<<
" spline5->SetNpx("<<
fNpx<<
");"<<std::endl;
1792 out<<
" spline5->SetPoint("<<i<<
","<<
fPoly[i].
X()<<
","<<
fPoly[i].
Y()<<
");"<<std::endl;
1793 out<<
" spline5->SetPointCoeff("<<i<<
","<<
fPoly[i].
B()<<
","<<
fPoly[i].
C()<<
","<<
fPoly[i].
D()<<
","<<
fPoly[i].
E()<<
","<<
fPoly[i].
F()<<
");"<<std::endl;
1795 out<<
" spline5->Draw("<<quote<<option<<quote<<
");"<<std::endl;
1804 if (i < 0 || i >=
fNp)
return;
1815 if (i < 0 || i >=
fNp)
return;
1904 b1, p2, p3, q2, q3, r2, pq, pr, qr;
1919 if (
q)
fPoly[1].
D() =
q*6.*q2/(qr*qr);
1923 for (i = 1; i <
m; ++i) {
1936 fPoly[i+1].
D() = q3*6./(qr*qr);
1938 *(pr* 20.+q2*7.)+q2*
1939 ((p2+r2)*8.+pr*21.+q2+q2))/(pqqr*pqqr);
1940 fPoly[i-1].
D() += q3*6./(pq*pq);
1941 fPoly[i].
E() = q2*(p*qr+pq*3.*(qr+
r+
r))/(pqqr*qr);
1942 fPoly[i-1].
E() += q2*(
r*pq+qr*3.*(pq+p+p))/(pqqr*pq);
1943 fPoly[i-1].
F() = q3/pqqr;
1948 if (
r)
fPoly[
m-1].
D() +=
r*6.*r2/(qr*qr);
1953 for (i = 1; i <
fNp; ++i) {
1962 for (i = 2; i <
fNp; ++i) {
1980 for (i = 2; i <
m; ++i) {
1993 for (i=
fNp-3; i > 0; --i)
2011 for (i = 1; i <
m; ++i) {
2089 printf(
"1 TEST OF TSpline5 WITH NONEQUIDISTANT KNOTS\n");
2104 printf(
"\n-N = %3d M =%2d\n",
n,
m);
2106 for (i = 0; i <
n; ++i)
2108 a[i+600],
a[i+800],
a[i+1000]);
2110 for (i = 0; i < mm1; ++i) diff[i] = com[i] = 0;
2111 for (k = 0; k <
n; ++k) {
2112 for (i = 0; i <
mm; ++i)
c[i] =
a[k+i*200];
2113 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
2114 printf(
"%12.8f\n",
x[k]);
2116 printf(
"%16.8f\n",
c[0]);
2118 for (i = 0; i <
mm; ++i) printf(
"%16.8f",
c[i]);
2120 for (i = 0; i < mm1; ++i)
2121 if ((z=
TMath::Abs(
a[k+i*200])) > com[i]) com[i] = z;
2123 for (i = 1; i <
mm; ++i)
2124 for (jj = i; jj <
mm; ++jj) {
2126 c[j-2] =
c[j-1]*z+
c[j-2];
2128 for (i = 0; i <
mm; ++i) printf(
"%16.8f",
c[i]);
2130 for (i = 0; i < mm1; ++i)
2131 if (!(k >=
n-2 && i != 0))
2133 > diff[i]) diff[i] = z;
2136 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
2137 for (i = 0; i < mm1; ++i) printf(
"%18.9E",diff[i]);
2139 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
2142 for (i = 0; i < mm1; ++i) printf(
"%16.8f",com[i]);
2145 for (
n = 10;
n <= 100;
n += 10) {
2149 for (i = 0; i < nm1; i += 2) {
2159 printf(
"\n-N = %3d M =%2d\n",
n,
m);
2161 for (i = 0; i <
n; ++i)
2163 a[i+600],
a[i+800],
a[i+1000]);
2165 for (i = 0; i < mm1; ++i)
2166 diff[i] = com[i] = 0;
2167 for (k = 0; k <
n; ++k) {
2168 for (i = 0; i <
mm; ++i)
2171 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
2172 printf(
"%12.8f\n",
x[k]);
2173 if (k ==
n-1) printf(
"%16.8f\n",
c[0]);
2175 if (k ==
n-1)
break;
2177 for (i = 0; i <
mm; ++i) printf(
"%16.8f",
c[i]);
2180 for (i = 0; i < mm1; ++i)
2184 for (i = 1; i <
mm; ++i)
2185 for (jj = i; jj <
mm; ++jj) {
2187 c[j-2] =
c[j-1]*z+
c[j-2];
2190 for (i = 0; i <
mm; ++i) printf(
"%16.8f",
c[i]);
2193 for (i = 0; i < mm1; ++i)
2194 if (!(k >=
n-2 && i != 0))
2196 > diff[i]) diff[i] = z;
2198 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
2199 for (i = 0; i < mm1; ++i) printf(
"%18.9E",diff[i]);
2201 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
2204 for (i = 0; i < mm1; ++i) printf(
"%16.8E",com[i]);
2209 printf(
"1 TEST OF TSpline5 WITH NONEQUIDISTANT DOUBLE KNOTS\n");
2235 printf(
"-N = %3d M =%2d\n",
n,
m);
2237 for (i = 0; i < nn; ++i)
2239 a[i+600],
a[i+800],
a[i+1000]);
2241 for (i = 0; i < mm1; ++i)
2242 diff[i] = com[i] = 0;
2243 for (k = 0; k < nn; ++k) {
2244 for (i = 0; i <
mm; ++i)
2246 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
2247 printf(
"%12.8f\n",
x[k]);
2249 printf(
"%16.8f\n",
c[0]);
2252 for (i = 0; i <
mm; ++i) printf(
"%16.8f",
c[i]);
2254 for (i = 0; i < mm1; ++i)
2255 if ((z=
TMath::Abs(
a[k+i*200])) > com[i]) com[i] = z;
2257 for (i = 1; i <
mm; ++i)
2258 for (jj = i; jj <
mm; ++jj) {
2260 c[j-2] =
c[j-1]*z+
c[j-2];
2262 for (i = 0; i <
mm; ++i) printf(
"%16.8f",
c[i]);
2264 for (i = 0; i < mm1; ++i)
2265 if (!(k >= nn-2 && i != 0))
2267 > diff[i]) diff[i] = z;
2269 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
2270 for (i = 1; i <= mm1; ++i) {
2271 printf(
"%18.9E",diff[i-1]);
2276 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
2277 for (i = 0; i < mm1; ++i) printf(
"%16.8f",com[i]);
2280 for (
n = 10;
n <= 100;
n += 10) {
2285 for (i = 0; i <
n; ++i) {
2292 printf(
"-N = %3d M =%2d\n",
n,
m);
2294 for (i = 0; i < nn; ++i)
2296 a[i+600],
a[i+800],
a[i+1000]);
2298 for (i = 0; i < mm1; ++i)
2299 diff[i] = com[i] = 0;
2300 for (k = 0; k < nn; ++k) {
2301 for (i = 0; i <
mm; ++i)
2304 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
2305 printf(
"%12.8f\n",
x[k]);
2306 if (k == nn-1) printf(
"%16.8f\n",
c[0]);
2308 if (k == nn-1)
break;
2310 for (i = 0; i <
mm; ++i) printf(
"%16.8f",
c[i]);
2313 for (i = 0; i < mm1; ++i)
2314 if ((z=
TMath::Abs(
a[k+i*200])) > com[i]) com[i] = z;
2316 for (i = 1; i <
mm; ++i) {
2317 for (jj = i; jj <
mm; ++jj) {
2319 c[j-2] =
c[j-1]*z+
c[j-2];
2323 for (i = 0; i <
mm; ++i) printf(
"%16.8f",
c[i]);
2326 for (i = 0; i < mm1; ++i)
2327 if (!(k >= nn-2 && i != 0))
2329 > diff[i]) diff[i] = z;
2331 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
2332 for (i = 0; i < mm1; ++i) printf(
"%18.9E",diff[i]);
2334 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
2337 for (i = 0; i < mm1; ++i) printf(
"%18.9E",com[i]);
2343 printf(
"1 TEST OF TSpline5 WITH NONEQUIDISTANT KNOTS,\n");
2344 printf(
" ONE DOUBLE, ONE TRIPLE KNOT\n");
2365 printf(
"-N = %3d M =%2d\n",
n,
m);
2367 for (i = 0; i <
n; ++i)
2369 a[i+600],
a[i+800],
a[i+1000]);
2371 for (i = 0; i < mm1; ++i)
2372 diff[i] = com[i] = 0;
2373 for (k = 0; k <
n; ++k) {
2374 for (i = 0; i <
mm; ++i)
2376 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
2377 printf(
"%12.8f\n",
x[k]);
2379 printf(
"%16.8f\n",
c[0]);
2382 for (i = 0; i <
mm; ++i) printf(
"%16.8f",
c[i]);
2384 for (i = 0; i < mm1; ++i)
2385 if ((z=
TMath::Abs(
a[k+i*200])) > com[i]) com[i] = z;
2387 for (i = 1; i <
mm; ++i)
2388 for (jj = i; jj <
mm; ++jj) {
2390 c[j-2] =
c[j-1]*z+
c[j-2];
2392 for (i = 0; i <
mm; ++i) printf(
"%16.8f",
c[i]);
2394 for (i = 0; i < mm1; ++i)
2395 if (!(k >=
n-2 && i != 0))
2397 > diff[i]) diff[i] = z;
2399 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
2400 for (i = 0; i < mm1; ++i) printf(
"%18.9E",diff[i]);
2402 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
2405 for (i = 0; i < mm1; ++i) printf(
"%16.8f",com[i]);
2410 printf(
"1 TEST OF TSpline5 WITH NONEQUIDISTANT KNOTS,\n");
2411 printf(
" TWO DOUBLE, ONE TRIPLE KNOT\n");
2436 printf(
"-N = %3d M =%2d\n",
n,
m);
2438 for (i = 0; i <
n; ++i)
2440 a[i+600],
a[i+800],
a[i+1000]);
2442 for (i = 0; i < mm1; ++i)
2443 diff[i] = com[i] = 0;
2444 for (k = 0; k <
n; ++k) {
2445 for (i = 0; i <
mm; ++i)
2447 printf(
" ---------------------------------------%3d --------------------------------------------\n",k+1);
2448 printf(
"%12.8f\n",
x[k]);
2450 printf(
"%16.8f\n",
c[0]);
2453 for (i = 0; i <
mm; ++i) printf(
"%16.8f",
c[i]);
2455 for (i = 0; i < mm1; ++i)
2456 if ((z=
TMath::Abs(
a[k+i*200])) > com[i]) com[i] = z;
2458 for (i = 1; i <
mm; ++i)
2459 for (jj = i; jj <
mm; ++jj) {
2461 c[j-2] =
c[j-1]*z+
c[j-2];
2463 for (i = 0; i <
mm; ++i) printf(
"%16.8f",
c[i]);
2465 for (i = 0; i < mm1; ++i)
2466 if (!(k >=
n-2 && i != 0))
2468 > diff[i]) diff[i] = z;
2470 printf(
" MAXIMUM ABSOLUTE VALUES OF DIFFERENCES \n");
2471 for (i = 0; i < mm1; ++i) printf(
"%18.9E",diff[i]);
2473 printf(
" MAXIMUM ABSOLUTE VALUES OF COEFFICIENTS \n");
2476 for (i = 0; i < mm1; ++i) printf(
"%16.8f",com[i]);
2483void TSpline5::Streamer(
TBuffer &R__b)
2493 TSpline::Streamer(R__b);
2497 fPoly[i].Streamer(R__b);
Binding & operator=(OUT(*fun)(void))
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 Graph is a graphics 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)}
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.
static constexpr double s
static constexpr double mm
Short_t Max(Short_t a, Short_t b)
Int_t FloorNint(Double_t x)
constexpr Double_t E()
Base of natural log:
Short_t Min(Short_t a, Short_t b)
Double_t Log10(Double_t x)