35 #ifndef AIMS_MATH_GRADIENT_H 36 #define AIMS_MATH_GRADIENT_H 456 template <
class C>
inline 459 int beginx=0,endx=0,offx1=0,offx2=0;
471 beginx = 1;endx = data.
dimX()-1;
473 divx=2 * data.
sizeX();
476 beginx = 1;endx = data.
dimX() ;
481 beginx = 0;endx = data.
dimX()-1;
487 for (
int t=0;t<data.
dimT();t++)
488 for (
int z=0;z<data.
dimZ();z++)
489 for (
int y=0;y<data.
dimY();y++)
490 for (
int x=beginx;x<endx;x++)
491 grad(x,y,z,t) = (C)( ((
float)data(x+offx2,y,z,t) -
492 (float)data(x-offx1,y,z,t)) / divx);
497 template <
class C>
inline 500 int beginy=0,endy=0,offy1=0,offy2=0;
511 offy1=1;offy2=1;divy=2 * data.
sizeY();
break;
513 offy1=1;offy2=0;divy=data.
sizeY();
break;
515 offy1=0;offy2=1;divy=data.
sizeY();
break;
518 for (
int t=0;t<data.
dimT();t++)
519 for (
int z=0;z<data.
dimZ();z++)
520 for (
int y=beginy;y<endy;y++)
521 for (
int x=0;x<data.
dimX();x++)
522 grad(x,y,z,t) = (C)(((
float)data(x,y+offy2,z,t) -
523 (float)data(x,y-offy1,z,t)) / divy);
528 template <
class C>
inline 531 int beginz=0,endz=0,offz1=0,offz2=0;
542 offz1=1;offz2=1;divz=2 * data.
sizeZ();
break;
544 offz1=1;offz2=0;divz=data.
sizeZ();
break;
546 offz1=0;offz2=1;divz=data.
sizeZ();
break;
549 for (
int t=0;t<data.
dimT();t++)
550 for (
int z=beginz;z<endz;z++)
551 for (
int y=0;y<data.
dimY();y++)
552 for (
int x=0;x<data.
dimX();x++)
553 grad(x,y,z,t) = (C)(((
float)data(x,y,z+offz2,t) -
554 (float)data(x,y,z-offz1,t)) / divz);
559 template <
class C>
inline 562 int begint=0,endt=0,offt1=0,offt2=0;
573 offt1=1;offt2=1;divt=2 * data.
sizeT();
break;
575 offt1=1;offt2=0;divt=data.
sizeT();
break;
577 offt1=0;offt2=1;divt=data.
sizeT();
break;
580 for (
int t=begint;t<endt;t++)
581 for (
int z=0;z<data.
dimZ();z++)
582 for (
int y=0;y<data.
dimY();y++)
583 for (
int x=0;x<data.
dimX();x++)
584 grad(x,y,z,t) = (C)(((
float)data(x,y,z,t+offt2) -
585 (float)data(x,y,z,t-offt1)) / divt);
592 template <
class C>
inline 594 {
return(
X(
X(data)));
597 template <
class C>
inline 599 {
return(
X(
Y(data)));
602 template <
class C>
inline 604 {
return(
X(
Z(data)));
607 template <
class C>
inline 609 {
return(
X(
T(data)));
613 template <
class C>
inline 615 {
return(
Y(
X(data)));
618 template <
class C>
inline 620 {
return(
Y(
Y(data)));
623 template <
class C>
inline 625 {
return(
Y(
Z(data)));
628 template <
class C>
inline 630 {
return(
Y(
T(data)));
634 template <
class C>
inline 636 {
return(
Z(
X(data)));
639 template <
class C>
inline 641 {
return(
Z(
Y(data)));
644 template <
class C>
inline 646 {
return(
Z(
Z(data)));
649 template <
class C>
inline 651 {
return(
Z(
T(data)));
655 template <
class C>
inline 657 {
return(
T(
X(data)));
660 template <
class C>
inline 662 {
return(
T(
Y(data)));
665 template <
class C>
inline 667 {
return(
T(
Z(data)));
670 template <
class C>
inline 672 {
return(
T(
T(data)));
678 template <
class C>
inline 680 {
return(
X(
XX(data)));
683 template <
class C>
inline 685 {
return(
X(
XY(data)));
688 template <
class C>
inline 690 {
return(
X(
XZ(data)));
693 template <
class C>
inline 695 {
return(
X(
XT(data)));
699 template <
class C>
inline 701 {
return(
X(
YX(data)));
704 template <
class C>
inline 706 {
return(
X(
YY(data)));
709 template <
class C>
inline 711 {
return(
X(
YZ(data)));
714 template <
class C>
inline 716 {
return(
X(
YT(data)));
720 template <
class C>
inline 722 {
return(
X(
ZX(data)));
725 template <
class C>
inline 727 {
return(
X(
ZY(data)));
730 template <
class C>
inline 732 {
return(
X(
ZZ(data)));
735 template <
class C>
inline 737 {
return(
X(
ZT(data)));
741 template <
class C>
inline 743 {
return(
X(
TX(data)));
746 template <
class C>
inline 748 {
return(
X(
TY(data)));
751 template <
class C>
inline 753 {
return(
X(
TZ(data)));
756 template <
class C>
inline 758 {
return(
X(
TT(data)));
762 template <
class C>
inline 764 {
return(
Y(
XX(data)));
767 template <
class C>
inline 769 {
return(
Y(
XY(data)));
772 template <
class C>
inline 774 {
return(
Y(
XZ(data)));
777 template <
class C>
inline 779 {
return(
Y(
XT(data)));
783 template <
class C>
inline 785 {
return(
Y(
YX(data)));
788 template <
class C>
inline 790 {
return(
Y(
YY(data)));
793 template <
class C>
inline 795 {
return(
Y(
YZ(data)));
798 template <
class C>
inline 800 {
return(
Y(
YT(data)));
804 template <
class C>
inline 806 {
return(
Y(
ZX(data)));
809 template <
class C>
inline 811 {
return(
Y(
ZY(data)));
814 template <
class C>
inline 816 {
return(
Y(
ZZ(data)));
819 template <
class C>
inline 821 {
return(
Y(
ZT(data)));
825 template <
class C>
inline 827 {
return(
Y(
TX(data)));
830 template <
class C>
inline 832 {
return(
Y(
TY(data)));
835 template <
class C>
inline 837 {
return(
Y(
TZ(data)));
840 template <
class C>
inline 842 {
return(
Y(
TT(data)));
846 template <
class C>
inline 848 {
return(
Z(
XX(data)));
851 template <
class C>
inline 853 {
return(
Z(
XY(data)));
856 template <
class C>
inline 858 {
return(
Z(
XZ(data)));
861 template <
class C>
inline 863 {
return(
Z(
XT(data)));
867 template <
class C>
inline 869 {
return(
Z(
YX(data)));
872 template <
class C>
inline 874 {
return(
Z(
YY(data)));
877 template <
class C>
inline 879 {
return(
Z(
YZ(data)));
882 template <
class C>
inline 884 {
return(
Z(
YT(data)));
888 template <
class C>
inline 890 {
return(
Z(
ZX(data)));
893 template <
class C>
inline 895 {
return(
Z(
ZY(data)));
898 template <
class C>
inline 900 {
return(
Z(
ZZ(data)));
903 template <
class C>
inline 905 {
return(
Z(
ZT(data)));
909 template <
class C>
inline 911 {
return(
Z(
TX(data)));
914 template <
class C>
inline 916 {
return(
Z(
TY(data)));
919 template <
class C>
inline 921 {
return(
Z(
TZ(data)));
924 template <
class C>
inline 926 {
return(
Z(
TT(data)));
930 template <
class C>
inline 932 {
return(
T(
XX(data)));
935 template <
class C>
inline 937 {
return(
T(
XY(data)));
940 template <
class C>
inline 942 {
return(
T(
XZ(data)));
945 template <
class C>
inline 947 {
return(
T(
XT(data)));
951 template <
class C>
inline 953 {
return(
T(
YX(data)));
956 template <
class C>
inline 958 {
return(
T(
YY(data)));
961 template <
class C>
inline 963 {
return(
T(
YZ(data)));
966 template <
class C>
inline 968 {
return(
T(
YT(data)));
972 template <
class C>
inline 974 {
return(
T(
ZX(data)));
977 template <
class C>
inline 979 {
return(
T(
ZY(data)));
982 template <
class C>
inline 984 {
return(
T(
ZZ(data)));
987 template <
class C>
inline 989 {
return(
T(
ZT(data)));
993 template <
class C>
inline 995 {
return(
T(
TX(data)));
998 template <
class C>
inline 1000 {
return(
T(
TY(data)));
1003 template <
class C>
inline 1005 {
return(
T(
TZ(data)));
1008 template <
class C>
inline 1010 {
return(
T(
TT(data)));
AimsData< C > YT(const AimsData< C > &data)
d2(data)/dydt = YT(data)
AimsData< C > YX(const AimsData< C > &data)
d2(data)/dydx = YX(data)
The template class for estimating gradients.
AimsData< C > YYZ(const AimsData< C > &data)
d3(data)/dy2dz = YYZ(data)
AimsData< C > XXX(const AimsData< C > &data)
d3(data)/dx3 = XXX(data)
AimsData< C > YYX(const AimsData< C > &data)
d3(data)/dy2dx = YYX(data)
AimsData< C > TXZ(const AimsData< C > &data)
d3(data)/dtdxdz = TXZ(data)
AimsData< C > TYT(const AimsData< C > &data)
d3(data)/dtdydt = TYT(data)
AimsData< C > XY(const AimsData< C > &data)
d2(data)/dxdy = XY(data)
AimsData< C > XTY(const AimsData< C > &data)
d3(data)/dxdtdy = XTY(data)
AimsData< C > YZ(const AimsData< C > &data)
d2(data)/dydz = YZ(data)
AimsData< C > ZXT(const AimsData< C > &data)
d3(data)/dzdxdt = ZXT(data)
AimsData< C > ZY(const AimsData< C > &data)
d2(data)/dzdy = ZY(data)
AimsData< C > TTZ(const AimsData< C > &data)
d3(data)/dt2dz = TTZ(data)
AimsData< C > ZZT(const AimsData< C > &data)
d3(data)/dz2dt = ZZT(data)
AimsData< C > T(const AimsData< C > &data)
d(data)/dt = AimsGradientT(data)
AimsData< C > ZXY(const AimsData< C > &data)
d3(data)/dzdxdy = ZXY(data)
AimsData< C > ZXZ(const AimsData< C > &data)
d3(data)/dzdxdz = ZXZ(data)
AimsData< C > TZ(const AimsData< C > &data)
d2(data)/dtdz = TZ(data)
AimsData< C > YYY(const AimsData< C > &data)
d3(data)/dy3 = YYY(data)
AimsData< C > TYY(const AimsData< C > &data)
d3(data)/dtdy2 = TYY(data)
AimsData< C > XX(const AimsData< C > &data)
d2(data)/dx2 = XX(data)
AimsData< C > YTT(const AimsData< C > &data)
d3(data)/dydt2 = YTT(data)
AimsData< C > XZY(const AimsData< C > &data)
d3(data)/dxdzdy = XZY(data)
AimsData< C > X(const AimsData< C > &data)
d(data)/dx = AimsGradientX(data)
AimsFirstOrderGradient
First order.
AimsData< C > ZTT(const AimsData< C > &data)
d3(data)/dzdt2 = ZTT(data)
AimsData< C > TX(const AimsData< C > &data)
d2(data)/dtdx = TX(data)
AimsData< C > YXT(const AimsData< C > &data)
d3(data)/dydxdt = YXT(data)
AimsData< C > XYZ(const AimsData< C > &data)
d3(data)/dxdydz = XYZ(data)
AimsData< C > ZTX(const AimsData< C > &data)
d3(data)/dzdtdx = ZTX(data)
AimsData< C > TT(const AimsData< C > &data)
d2(data)/dt2 = TT(data)
AimsData< C > XZ(const AimsData< C > &data)
d2(data)/dxdz = XZ(data)
void setHeader(aims::Header *hdr)
AimsData< C > TTX(const AimsData< C > &data)
d3(data)/dt2dx = TTX(data)
AimsData< C > TYX(const AimsData< C > &data)
d3(data)/dtdydx = TYX(data)
AimsData< C > YXY(const AimsData< C > &data)
d3(data)/dydxdy = YXY(data)
AimsData< C > XYY(const AimsData< C > &data)
d3(data)/dxdy2 = XYY(data)
int _type
Type of the gradient.
AimsData< C > XYT(const AimsData< C > &data)
d3(data)/dxdydt = XYT(data)
AimsData< C > XZZ(const AimsData< C > &data)
d3(data)/dxdz2 = XZZ(data)
AimsData< C > TY(const AimsData< C > &data)
d2(data)/dtdy = TY(data)
AimsData< C > YTX(const AimsData< C > &data)
d3(data)/dydtdx = YTX(data)
AimsThirdOrderGradient
Third order.
AimsData< C > Y(const AimsData< C > &data)
d(data)/dy = AimsGradientY(data)
AimsData< C > YZX(const AimsData< C > &data)
d3(data)/dydzdx = YZX(data)
AimsData< C > YY(const AimsData< C > &data)
d2(data)/dy2 = YY(data)
AimsData< C > XT(const AimsData< C > &data)
d2(data)/dxdt = XT(data)
AimsData< C > TZZ(const AimsData< C > &data)
d3(data)/dtdz2 = TZZ(data)
AimsData< C > TZX(const AimsData< C > &data)
d3(data)/dtdzdx = TZX(data)
virtual ~ AimsGradient()
Destructor does nothing.
void fillBorder(const T &val)
AimsData< C > YZZ(const AimsData< C > &data)
d3(data)/dydz2 = YZZ(data)
AimsData< C > TZT(const AimsData< C > &data)
d3(data)/dtdzdt = TZT(data)
AimsData< C > ZZX(const AimsData< C > &data)
d3(data)/dz2dx = ZZX(data)
AimsData< C > XXZ(const AimsData< C > &data)
d3(data)/dx2dz = XXZ(data)
AimsData< C > ZYT(const AimsData< C > &data)
d3(data)/dzdydt = ZYT(data)
AimsData< C > Z(const AimsData< C > &data)
d(data)/dz = AimsGradientZ(data)
AimsData< C > YXX(const AimsData< C > &data)
d3(data)/dydx2 = YXX(data)
AimsData< C > XZT(const AimsData< C > &data)
d3(data)/dxdzdt = XZT(data)
AimsData< C > XXT(const AimsData< C > &data)
d3(data)/dx2dt = XXT(data)
AimsSecondOrderGradient
Second order.
AimsData< C > ZXX(const AimsData< C > &data)
d3(data)/dzdx2 = ZXX(data)
AimsData< C > ZTZ(const AimsData< C > &data)
d3(data)/dzdtdz = ZTZ(data)
AimsData< C > ZZZ(const AimsData< C > &data)
d3(data)/dz3 = ZZZ(data)
AimsGradient(int type=AIMS_GRADIENT_CENTRAL)
One argument can be give to the constructor :
AimsData< C > YTY(const AimsData< C > &data)
d3(data)/dydtdy = YTY(data)
AimsData< C > ZYY(const AimsData< C > &data)
d3(data)/dzdy2 = ZYY(data)
const aims::Header * header() const
AimsData< C > ZZY(const AimsData< C > &data)
d3(data)/dz2dy = ZZY(data)
AimsData< C > TXT(const AimsData< C > &data)
d3(data)/dtdxdt = TXT(data)
AimsData< C > TYZ(const AimsData< C > &data)
d3(data)/dtdydz = TYZ(data)
AimsData< C > ZX(const AimsData< C > &data)
d2(data)/dzdx = ZX(data)
AimsData< C > ZYX(const AimsData< C > &data)
d3(data)/dzdydx = ZYX(data)
AimsData< C > XXY(const AimsData< C > &data)
d3(data)/dx2dy = XXY(data)
AimsData< C > XTX(const AimsData< C > &data)
d3(data)/dxdtdx = XTX(data)
AimsData< C > ZT(const AimsData< C > &data)
d2(data)/dzdt = ZT(data)
AimsData< C > XZX(const AimsData< C > &data)
d3(data)/dxdzdx = XZX(data)
AimsData< C > ZTY(const AimsData< C > &data)
d3(data)/dzdtdy = ZTY(data)
AimsData< C > TTT(const AimsData< C > &data)
d3(data)/dt3 = TTT(data)
AimsData< C > TZY(const AimsData< C > &data)
d3(data)/dtdzdy = TZY(data)
AimsData< C > ZZ(const AimsData< C > &data)
d2(data)/dz2 = ZZ(data)
AimsData< C > TXX(const AimsData< C > &data)
d3(data)/dtdx2 = TXX(data)
AimsData< C > TTY(const AimsData< C > &data)
d3(data)/dt2dy = TTY(data)
AimsData< C > YXZ(const AimsData< C > &data)
d3(data)/dydxdz = YXZ(data)
AimsData< C > XTZ(const AimsData< C > &data)
d3(data)/dxdtdz = XTZ(data)
AimsData< C > YZY(const AimsData< C > &data)
d3(data)/dydzdy = YZY(data)
AimsData< C > YTZ(const AimsData< C > &data)
d3(data)/dydtdz = YTZ(data)
AimsData< C > XTT(const AimsData< C > &data)
d3(data)/dxdt2 = XTT(data)
AimsData< C > XYX(const AimsData< C > &data)
d3(data)/dxdydx = XYX(data)
AimsData< C > TXY(const AimsData< C > &data)
d3(data)/dtdxdy = TXY(data)
AimsData< C > ZYZ(const AimsData< C > &data)
d3(data)/dzdydz = ZYZ(data)
AimsData< C > YYT(const AimsData< C > &data)
d3(data)/dy2dt = YYT(data)
AimsGradientMethod
Gradient methods.
AimsData< C > YZT(const AimsData< C > &data)
d3(data)/dydzdt = YZT(data)