650 int nx =
h->GetNbinsX(), ny =
h->GetNbinsY(), nz =
h->GetNbinsZ();
651 int ibx =
h->GetXaxis()->FindBin(
x), iby =
h->GetYaxis()->FindBin(
y), ibz =
h->GetZaxis()->FindBin(
z);
653 double z000,z010,z110,z100,z001,z011,z111,z101,xc,yc,zc,xc2,yc2,zc2,
u,
t,
v,
r;
654 if (ibx > nx) ibx = nx;
655 if (iby > ny) iby = ny;
656 if (ibz > nz) ibz = nz;
657 xc =
h->GetXaxis()->GetBinCenter(ibx);
658 yc =
h->GetYaxis()->GetBinCenter(iby);
659 zc =
h->GetZaxis()->GetBinCenter(ibz);
661 z111 =
h->GetBinContent(ibx,iby,ibz);
662 if ( (ibx > 1 || (ibx == 1 &&
x > xc) ) &&
663 (ibx < nx || (ibx == nx &&
x < xc) ) ) {
664 if (
x > xc) {ibx2 = ibx + 1;}
else {ibx2 = ibx - 1;}
665 xc2 =
h->GetXaxis()->GetBinCenter(ibx2);
666 if ( (iby > 1 || (iby == 1 &&
y > yc) ) &&
667 (iby < ny || (iby == ny &&
y < yc) ) ) {
668 if (
y > yc) {iby2 = iby + 1;}
else {iby2 = iby - 1;}
669 yc2 =
h->GetYaxis()->GetBinCenter(iby2);
670 if ( (ibz > 1 || (ibz == 1 &&
z > zc) ) &&
671 (ibz < nz || (ibz == nz &&
z < zc) ) ) {
672 if (
z > zc) {ibz2 = ibz + 1;}
else {ibz2 = ibz - 1;}
673 zc2 =
h->GetZaxis()->GetBinCenter(ibz2);
675 z000 =
h->GetBinContent(ibx2,iby2,ibz2);
676 z100 =
h->GetBinContent(ibx,iby2,ibz2);
677 z010 =
h->GetBinContent(ibx2,iby,ibz2);
678 z110 =
h->GetBinContent(ibx,iby,ibz2);
679 z001 =
h->GetBinContent(ibx2,iby2,ibz);
680 z101 =
h->GetBinContent(ibx,iby2,ibz);
681 z011 =
h->GetBinContent(ibx2,iby,ibz);
682 t = (
x - xc2)/(xc-xc2);
683 u = (
y - yc2)/(yc-yc2);
684 v = (
z - zc2)/(zc-zc2);
685 r = z111*
t*
u*
v + z001*(1.-
t)*(1.-
u)*
v
686 + z011*(1.-
t)*
u*
v + z101*
t*(1.-
u)*
v
687 + z110*
t*
u*(1.-
v) + z000*(1.-
t)*(1.-
u)*(1.-
v)
688 + z010*(1.-
t)*
u*(1.-
v) + z100*
t*(1.-
u)*(1.-
v);
690 z011 =
h->GetBinContent(ibx2,iby,ibz);
691 z001 =
h->GetBinContent(ibx2,iby2,ibz);
692 z101 =
h->GetBinContent(ibx,iby2,ibz);
693 t = (
x - xc2)/(xc-xc2);
694 u = (
y - yc2)/(yc-yc2);
695 r = z111*
t*
u + z011*(1.-
t)*
u + z101*
t*(1.-
u) + z001*(1.-
t)*(1.-
u) ;
697 }
else if ((ibz > 1 || (ibz == 1 &&
z > zc) ) &&
698 (ibz < nz || (ibz == nz &&
z < zc) ) ) {
699 if (
z > zc) {ibz2 = ibz + 1;}
else {ibz2 = ibz - 1;}
700 z110 =
h->GetBinContent(ibx,iby,ibz2);
701 z010 =
h->GetBinContent(ibx2,iby,ibz2);
702 z011 =
h->GetBinContent(ibx2,iby,ibz);
703 zc2 =
h->GetYaxis()->GetBinCenter(ibz2);
704 t = (
x - xc2)/(xc-xc2);
705 v = (
z - zc2)/(zc-zc2);
706 r = z111*
t*
v + z011*(1.-
t)*
v + z110*
t*(1.-
v) +z010*(1.-
t)*(1.-
v);
708 z011 =
h->GetBinContent(ibx2,iby,ibz);
709 t = (
x - xc2)/(xc-xc2);
710 r = z111*
t + z011*(1.-
t);
713 if ( (iby > 1 || (iby == 1 &&
y > yc) ) &&
714 (iby < ny || (iby == ny &&
y < yc) ) ) {
715 if (
y > yc) {iby2 = iby + 1;}
else {iby2 = iby - 1;}
716 yc2 =
h->GetYaxis()->GetBinCenter(iby2);
717 if ( (ibz > 1 || (ibz == 1 &&
z > zc) ) &&
718 (ibz < nz || (ibz == nz &&
z < zc) ) ) {
719 if (
z > zc) {ibz2 = ibz + 1;}
else {ibz2 = ibz - 1;}
720 zc2 =
h->GetZaxis()->GetBinCenter(ibz2);
722 z100 =
h->GetBinContent(ibx,iby2,ibz2);
723 z110 =
h->GetBinContent(ibx,iby,ibz2);
724 z101 =
h->GetBinContent(ibx,iby2,ibz);
725 u = (
y - yc2)/(yc-yc2);
726 v = (
z - zc2)/(zc-zc2);
727 r = z111*
u*
v + z101*(1.-
u)*
v
728 + z110*
u*(1.-
v) + z100*(1.-
u)*(1.-
v);
730 z101 =
h->GetBinContent(ibx,iby2,ibz);
731 u = (
y - yc2)/(yc-yc2);
732 r = z111*
u + z101*(1.-
u);
734 }
else if ((ibz > 1 || (ibz == 1 &&
z > zc) ) &&
735 (ibz < nz || (ibz == nz &&
z < zc) ) ) {
736 if (
z > zc) {ibz2 = ibz + 1;}
else {ibz2 = ibz - 1;}
737 z110 =
h->GetBinContent(ibx,iby,ibz2);
738 zc2 =
h->GetYaxis()->GetBinCenter(ibz2);
739 v = (
z - zc2)/(zc-zc2);
740 r = z111*
v + z110*(1.-
v);