aimsalgo  5.1.2
Neuroimaging image processing
gradient.h
Go to the documentation of this file.
1 /* This software and supporting documentation are distributed by
2  * Institut Federatif de Recherche 49
3  * CEA/NeuroSpin, Batiment 145,
4  * 91191 Gif-sur-Yvette cedex
5  * France
6  *
7  * This software is governed by the CeCILL-B license under
8  * French law and abiding by the rules of distribution of free software.
9  * You can use, modify and/or redistribute the software under the
10  * terms of the CeCILL-B license as circulated by CEA, CNRS
11  * and INRIA at the following URL "http://www.cecill.info".
12  *
13  * As a counterpart to the access to the source code and rights to copy,
14  * modify and redistribute granted by the license, users are provided only
15  * with a limited warranty and the software's author, the holder of the
16  * economic rights, and the successive licensors have only limited
17  * liability.
18  *
19  * In this respect, the user's attention is drawn to the risks associated
20  * with loading, using, modifying and/or developing or reproducing the
21  * software by the user in light of its specific status of free software,
22  * that may mean that it is complicated to manipulate, and that also
23  * therefore means that it is reserved for developers and experienced
24  * professionals having in-depth computer knowledge. Users are therefore
25  * encouraged to load and test the software's suitability as regards their
26  * requirements in conditions enabling the security of their systems and/or
27  * data to be ensured and, more generally, to use and operate it in the
28  * same conditions as regards security.
29  *
30  * The fact that you are presently reading this means that you have had
31  * knowledge of the CeCILL-B license and that you accept its terms.
32  */
33 
34 
35 #ifndef AIMS_MATH_GRADIENT_H
36 #define AIMS_MATH_GRADIENT_H
37 
38 
40 
48 {
55 };
56 
57 
63 {
72 };
73 
76 {
109 };
110 
113 {
242 };
243 
245 
246 
250 template <class C>
252 { protected :
256  int _type;
258 
259  public :
267  virtual ~ AimsGradient() {}
269 
281 
317 
449 };
450 
451 
452 
453 
454 /* gradient 1st order */
455 
456 template <class C> inline
458  const carto::rc_ptr<carto::Volume<C> > &data)
459 {
460  int beginx=0,endx=0,offx1=0,offx2=0;
461  float divx=0;
462  std::vector<int> dims = data->getSize();
463  std::vector<float> vs = data->getVoxelSize();
464 
465  carto::VolumeRef<C> grad( dims, data->getBorders() );
466  grad = (C)0;
467  grad.fillBorder(0);
468  grad.copyHeaderFrom( data->header() );
469 
470  switch (_type)
471  {
472  case AIMS_GRADIENT_CENTRAL :
473  beginx = 1;
474  endx = dims[0]-1;
475  offx1 = 1;
476  offx2 = 1;
477  divx = 2 * vs[0];
478  break;
479  case AIMS_GRADIENT_DMINUS :
480  beginx = 1;
481  endx = dims[0];
482  offx1 = 1;
483  offx2 = 0;
484  divx = vs[0];
485  break;
486  case AIMS_GRADIENT_DPLUS :
487  beginx = 0;
488  endx = dims[0]-1;
489  offx1 = 0;
490  offx2 = 1;
491  divx = vs[0];
492  break;
493  }
494 
495  for (int t=0;t<dims[3];t++)
496  for (int z=0;z<dims[2];z++)
497  for (int y=0;y<dims[1];y++)
498  for (int x=beginx;x<endx;x++)
499  grad(x,y,z,t) = (C)( ((float)data->at(x+offx2,y,z,t) -
500  (float)data->at(x-offx1,y,z,t)) / divx);
501  return grad;
502 }
503 
504 
505 template <class C> inline
507  const carto::rc_ptr<carto::Volume<C> > &data)
508 {
509  int beginy=0,endy=0,offy1=0,offy2=0;
510  float divy=0;
511  std::vector<int> dims = data->getSize();
512  std::vector<float> vs = data->getVoxelSize();
513 
514  carto::VolumeRef<C> grad( dims, data->getBorders() );
515  grad = (C)0;
516  grad.fillBorder(0);
517  grad.copyHeaderFrom( data->header() );
518 
519  switch (_type)
520  { case AIMS_GRADIENT_CENTRAL : beginy = 1;endy = dims[1]-1;
521  offy1=1;offy2=1;divy=2 * vs[1];break;
522  case AIMS_GRADIENT_DMINUS : beginy = 1;endy = dims[1] ;
523  offy1=1;offy2=0;divy=vs[1];break;
524  case AIMS_GRADIENT_DPLUS : beginy = 0;endy = dims[1]-1;
525  offy1=0;offy2=1;divy=vs[1];break;
526  }
527 
528  for (int t=0;t<dims[3];t++)
529  for (int z=0;z<dims[2];z++)
530  for (int y=beginy;y<endy;y++)
531  for (int x=0;x<dims[0];x++)
532  grad(x,y,z,t) = (C)(((float)data->at(x,y+offy2,z,t) -
533  (float)data->at(x,y-offy1,z,t)) / divy);
534  return grad;
535 }
536 
537 
538 template <class C> inline
540  const carto::rc_ptr<carto::Volume<C> > &data)
541 {
542  int beginz=0,endz=0,offz1=0,offz2=0;
543  float divz=0;
544  std::vector<int> dims = data->getSize();
545  std::vector<float> vs = data->getVoxelSize();
546 
547  carto::VolumeRef<C> grad( dims, data->getBorders() );
548  grad = (C)0;
549  grad.fillBorder(0);
550  grad.copyHeaderFrom( data->header() );
551 
552  switch (_type)
553  { case AIMS_GRADIENT_CENTRAL : beginz = 1;endz = dims[2]-1;
554  offz1=1;offz2=1;divz=2 * vs[2];break;
555  case AIMS_GRADIENT_DMINUS : beginz = 1;endz = dims[2] ;
556  offz1=1;offz2=0;divz=vs[2];break;
557  case AIMS_GRADIENT_DPLUS : beginz = 0;endz = dims[2]-1;
558  offz1=0;offz2=1;divz=vs[2];break;
559  }
560 
561  for (int t=0;t<dims[3];t++)
562  for (int z=beginz;z<endz;z++)
563  for (int y=0;y<dims[1];y++)
564  for (int x=0;x<dims[0];x++)
565  grad(x,y,z,t) = (C)(((float)data->at(x,y,z+offz2,t) -
566  (float)data->at(x,y,z-offz1,t)) / divz);
567  return grad;
568 }
569 
570 
571 template <class C> inline
573  const carto::rc_ptr<carto::Volume<C> > &data)
574 {
575  int begint=0,endt=0,offt1=0,offt2=0;
576  float divt=0;
577  std::vector<int> dims = data->getSize();
578  std::vector<float> vs = data->getVoxelSize();
579 
580  carto::VolumeRef<C> grad( dims, data->getBorders() );
581  grad = (C)0;
582  grad.fillBorder(0);
583  grad.copyHeaderFrom( data->header() );
584 
585  switch (_type)
586  { case AIMS_GRADIENT_CENTRAL : begint = 1;endt = dims[3]-1;
587  offt1=1;offt2=1;divt=2 * vs[3];break;
588  case AIMS_GRADIENT_DMINUS : begint = 1;endt = dims[3] ;
589  offt1=1;offt2=0;divt=vs[3];break;
590  case AIMS_GRADIENT_DPLUS : begint = 0;endt = dims[3]-1;
591  offt1=0;offt2=1;divt=vs[3];break;
592  }
593 
594  for (int t=begint;t<endt;t++)
595  for (int z=0;z<dims[2];z++)
596  for (int y=0;y<dims[1];y++)
597  for (int x=0;x<dims[0];x++)
598  grad(x,y,z,t) = (C)(((float)data->at(x,y,z,t+offt2) -
599  (float)data->at(x,y,z,t-offt1)) / divt);
600  return grad;
601 }
602 
603 
604 /* gradient 2nd order */
605 
606 template <class C> inline
608 { return(X(X(data)));
609 }
610 
611 template <class C> inline
613 { return(X(Y(data)));
614 }
615 
616 template <class C> inline
618 { return(X(Z(data)));
619 }
620 
621 template <class C> inline
623 { return(X(T(data)));
624 }
625 
626 
627 template <class C> inline
629 { return(Y(X(data)));
630 }
631 
632 template <class C> inline
634 { return(Y(Y(data)));
635 }
636 
637 template <class C> inline
639 { return(Y(Z(data)));
640 }
641 
642 template <class C> inline
644 { return(Y(T(data)));
645 }
646 
647 
648 template <class C> inline
650 { return(Z(X(data)));
651 }
652 
653 template <class C> inline
655 { return(Z(Y(data)));
656 }
657 
658 template <class C> inline
660 { return(Z(Z(data)));
661 }
662 
663 template <class C> inline
665 { return(Z(T(data)));
666 }
667 
668 
669 template <class C> inline
671 { return(T(X(data)));
672 }
673 
674 template <class C> inline
676 { return(T(Y(data)));
677 }
678 
679 template <class C> inline
681 { return(T(Z(data)));
682 }
683 
684 template <class C> inline
686 { return(T(T(data)));
687 }
688 
689 
690 /* gradient 3rd order */
691 
692 template <class C> inline
694 { return(X(XX(data)));
695 }
696 
697 template <class C> inline
699 { return(X(XY(data)));
700 }
701 
702 template <class C> inline
704 { return(X(XZ(data)));
705 }
706 
707 template <class C> inline
709 { return(X(XT(data)));
710 }
711 
712 
713 template <class C> inline
715 { return(X(YX(data)));
716 }
717 
718 template <class C> inline
720 { return(X(YY(data)));
721 }
722 
723 template <class C> inline
725 { return(X(YZ(data)));
726 }
727 
728 template <class C> inline
730 { return(X(YT(data)));
731 }
732 
733 
734 template <class C> inline
736 { return(X(ZX(data)));
737 }
738 
739 template <class C> inline
741 { return(X(ZY(data)));
742 }
743 
744 template <class C> inline
746 { return(X(ZZ(data)));
747 }
748 
749 template <class C> inline
751 { return(X(ZT(data)));
752 }
753 
754 
755 template <class C> inline
757 { return(X(TX(data)));
758 }
759 
760 template <class C> inline
762 { return(X(TY(data)));
763 }
764 
765 template <class C> inline
767 { return(X(TZ(data)));
768 }
769 
770 template <class C> inline
772 { return(X(TT(data)));
773 }
774 
775 
776 template <class C> inline
778 { return(Y(XX(data)));
779 }
780 
781 template <class C> inline
783 { return(Y(XY(data)));
784 }
785 
786 template <class C> inline
788 { return(Y(XZ(data)));
789 }
790 
791 template <class C> inline
793 { return(Y(XT(data)));
794 }
795 
796 
797 template <class C> inline
799 { return(Y(YX(data)));
800 }
801 
802 template <class C> inline
804 { return(Y(YY(data)));
805 }
806 
807 template <class C> inline
809 { return(Y(YZ(data)));
810 }
811 
812 template <class C> inline
814 { return(Y(YT(data)));
815 }
816 
817 
818 template <class C> inline
820 { return(Y(ZX(data)));
821 }
822 
823 template <class C> inline
825 { return(Y(ZY(data)));
826 }
827 
828 template <class C> inline
830 { return(Y(ZZ(data)));
831 }
832 
833 template <class C> inline
835 { return(Y(ZT(data)));
836 }
837 
838 
839 template <class C> inline
841 { return(Y(TX(data)));
842 }
843 
844 template <class C> inline
846 { return(Y(TY(data)));
847 }
848 
849 template <class C> inline
851 { return(Y(TZ(data)));
852 }
853 
854 template <class C> inline
856 { return(Y(TT(data)));
857 }
858 
859 
860 template <class C> inline
862 { return(Z(XX(data)));
863 }
864 
865 template <class C> inline
867 { return(Z(XY(data)));
868 }
869 
870 template <class C> inline
872 { return(Z(XZ(data)));
873 }
874 
875 template <class C> inline
877 { return(Z(XT(data)));
878 }
879 
880 
881 template <class C> inline
883 { return(Z(YX(data)));
884 }
885 
886 template <class C> inline
888 { return(Z(YY(data)));
889 }
890 
891 template <class C> inline
893 { return(Z(YZ(data)));
894 }
895 
896 template <class C> inline
898 { return(Z(YT(data)));
899 }
900 
901 
902 template <class C> inline
904 { return(Z(ZX(data)));
905 }
906 
907 template <class C> inline
909 { return(Z(ZY(data)));
910 }
911 
912 template <class C> inline
914 { return(Z(ZZ(data)));
915 }
916 
917 template <class C> inline
919 { return(Z(ZT(data)));
920 }
921 
922 
923 template <class C> inline
925 { return(Z(TX(data)));
926 }
927 
928 template <class C> inline
930 { return(Z(TY(data)));
931 }
932 
933 template <class C> inline
935 { return(Z(TZ(data)));
936 }
937 
938 template <class C> inline
940 { return(Z(TT(data)));
941 }
942 
943 
944 template <class C> inline
946 { return(T(XX(data)));
947 }
948 
949 template <class C> inline
951 { return(T(XY(data)));
952 }
953 
954 template <class C> inline
956 { return(T(XZ(data)));
957 }
958 
959 template <class C> inline
961 { return(T(XT(data)));
962 }
963 
964 
965 template <class C> inline
967 { return(T(YX(data)));
968 }
969 
970 template <class C> inline
972 { return(T(YY(data)));
973 }
974 
975 template <class C> inline
977 { return(T(YZ(data)));
978 }
979 
980 template <class C> inline
982 { return(T(YT(data)));
983 }
984 
985 
986 template <class C> inline
988 { return(T(ZX(data)));
989 }
990 
991 template <class C> inline
993 { return(T(ZY(data)));
994 }
995 
996 template <class C> inline
998 { return(T(ZZ(data)));
999 }
1000 
1001 template <class C> inline
1003 { return(T(ZT(data)));
1004 }
1005 
1006 
1007 template <class C> inline
1009 { return(T(TX(data)));
1010 }
1011 
1012 template <class C> inline
1014 { return(T(TY(data)));
1015 }
1016 
1017 template <class C> inline
1019 { return(T(TZ(data)));
1020 }
1021 
1022 template <class C> inline
1024 { return(T(TT(data)));
1025 }
1026 
1027 #endif
The template class for estimating gradients.
Definition: gradient.h:252
carto::VolumeRef< C > XYY(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dxdy2 = XYY(data)
Definition: gradient.h:719
carto::VolumeRef< C > XXZ(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dx2dz = XXZ(data)
Definition: gradient.h:703
carto::VolumeRef< C > YZX(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dydzdx = YZX(data)
Definition: gradient.h:819
carto::VolumeRef< C > TYY(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dtdy2 = TYY(data)
Definition: gradient.h:971
carto::VolumeRef< C > YZ(const carto::rc_ptr< carto::Volume< C > > &data)
d2(data)/dydz = YZ(data)
Definition: gradient.h:638
carto::VolumeRef< C > ZTZ(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dzdtdz = ZTZ(data)
Definition: gradient.h:934
carto::VolumeRef< C > T(const carto::rc_ptr< carto::Volume< C > > &data)
d(data)/dt = AimsGradientT(data)
Definition: gradient.h:572
carto::VolumeRef< C > XYX(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dxdydx = XYX(data)
Definition: gradient.h:714
carto::VolumeRef< C > TXX(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dtdx2 = TXX(data)
Definition: gradient.h:945
carto::VolumeRef< C > YZY(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dydzdy = YZY(data)
Definition: gradient.h:824
carto::VolumeRef< C > ZZX(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dz2dx = ZZX(data)
Definition: gradient.h:903
carto::VolumeRef< C > ZTY(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dzdtdy = ZTY(data)
Definition: gradient.h:929
carto::VolumeRef< C > YYX(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dy2dx = YYX(data)
Definition: gradient.h:798
carto::VolumeRef< C > YTZ(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dydtdz = YTZ(data)
Definition: gradient.h:850
carto::VolumeRef< C > TTT(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dt3 = TTT(data)
Definition: gradient.h:1023
carto::VolumeRef< C > TTX(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dt2dx = TTX(data)
Definition: gradient.h:1008
carto::VolumeRef< C > YZZ(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dydz2 = YZZ(data)
Definition: gradient.h:829
carto::VolumeRef< C > ZTX(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dzdtdx = ZTX(data)
Definition: gradient.h:924
carto::VolumeRef< C > ZYX(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dzdydx = ZYX(data)
Definition: gradient.h:882
carto::VolumeRef< C > TY(const carto::rc_ptr< carto::Volume< C > > &data)
d2(data)/dtdy = TY(data)
Definition: gradient.h:675
carto::VolumeRef< C > TZT(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dtdzdt = TZT(data)
Definition: gradient.h:1002
AimsGradient(int type=AIMS_GRADIENT_CENTRAL)
One argument can be give to the constructor :
Definition: gradient.h:265
carto::VolumeRef< C > ZXX(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dzdx2 = ZXX(data)
Definition: gradient.h:861
carto::VolumeRef< C > YT(const carto::rc_ptr< carto::Volume< C > > &data)
d2(data)/dydt = YT(data)
Definition: gradient.h:643
carto::VolumeRef< C > YTX(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dydtdx = YTX(data)
Definition: gradient.h:840
carto::VolumeRef< C > TYT(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dtdydt = TYT(data)
Definition: gradient.h:981
carto::VolumeRef< C > TYZ(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dtdydz = TYZ(data)
Definition: gradient.h:976
carto::VolumeRef< C > TT(const carto::rc_ptr< carto::Volume< C > > &data)
d2(data)/dt2 = TT(data)
Definition: gradient.h:685
carto::VolumeRef< C > TTZ(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dt2dz = TTZ(data)
Definition: gradient.h:1018
carto::VolumeRef< C > XYZ(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dxdydz = XYZ(data)
Definition: gradient.h:724
carto::VolumeRef< C > ZXZ(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dzdxdz = ZXZ(data)
Definition: gradient.h:871
carto::VolumeRef< C > XTZ(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dxdtdz = XTZ(data)
Definition: gradient.h:766
int _type
Type of the gradient.
Definition: gradient.h:256
carto::VolumeRef< C > XZY(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dxdzdy = XZY(data)
Definition: gradient.h:740
carto::VolumeRef< C > YTT(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dydt2 = YTT(data)
Definition: gradient.h:855
carto::VolumeRef< C > TXY(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dtdxdy = TXY(data)
Definition: gradient.h:950
carto::VolumeRef< C > TX(const carto::rc_ptr< carto::Volume< C > > &data)
d2(data)/dtdx = TX(data)
Definition: gradient.h:670
carto::VolumeRef< C > XXT(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dx2dt = XXT(data)
Definition: gradient.h:708
carto::VolumeRef< C > ZXT(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dzdxdt = ZXT(data)
Definition: gradient.h:876
carto::VolumeRef< C > ZYZ(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dzdydz = ZYZ(data)
Definition: gradient.h:892
carto::VolumeRef< C > XZT(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dxdzdt = XZT(data)
Definition: gradient.h:750
carto::VolumeRef< C > YXT(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dydxdt = YXT(data)
Definition: gradient.h:792
carto::VolumeRef< C > Z(const carto::rc_ptr< carto::Volume< C > > &data)
d(data)/dz = AimsGradientZ(data)
Definition: gradient.h:539
carto::VolumeRef< C > YYY(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dy3 = YYY(data)
Definition: gradient.h:803
carto::VolumeRef< C > TTY(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dt2dy = TTY(data)
Definition: gradient.h:1013
carto::VolumeRef< C > YZT(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dydzdt = YZT(data)
Definition: gradient.h:834
carto::VolumeRef< C > X(const carto::rc_ptr< carto::Volume< C > > &data)
d(data)/dx = AimsGradientX(data)
Definition: gradient.h:457
carto::VolumeRef< C > ZX(const carto::rc_ptr< carto::Volume< C > > &data)
d2(data)/dzdx = ZX(data)
Definition: gradient.h:649
carto::VolumeRef< C > XZX(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dxdzdx = XZX(data)
Definition: gradient.h:735
carto::VolumeRef< C > YXX(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dydx2 = YXX(data)
Definition: gradient.h:777
virtual ~ AimsGradient()
Destructor does nothing.
Definition: gradient.h:267
carto::VolumeRef< C > YYT(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dy2dt = YYT(data)
Definition: gradient.h:813
carto::VolumeRef< C > ZXY(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dzdxdy = ZXY(data)
Definition: gradient.h:866
carto::VolumeRef< C > TXZ(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dtdxdz = TXZ(data)
Definition: gradient.h:955
carto::VolumeRef< C > XY(const carto::rc_ptr< carto::Volume< C > > &data)
d2(data)/dxdy = XY(data)
Definition: gradient.h:612
carto::VolumeRef< C > YXZ(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dydxdz = YXZ(data)
Definition: gradient.h:787
carto::VolumeRef< C > TZY(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dtdzdy = TZY(data)
Definition: gradient.h:992
carto::VolumeRef< C > ZZZ(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dz3 = ZZZ(data)
Definition: gradient.h:913
carto::VolumeRef< C > XTY(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dxdtdy = XTY(data)
Definition: gradient.h:761
carto::VolumeRef< C > YYZ(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dy2dz = YYZ(data)
Definition: gradient.h:808
carto::VolumeRef< C > ZT(const carto::rc_ptr< carto::Volume< C > > &data)
d2(data)/dzdt = ZT(data)
Definition: gradient.h:664
carto::VolumeRef< C > ZZT(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dz2dt = ZZT(data)
Definition: gradient.h:918
carto::VolumeRef< C > TZZ(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dtdz2 = TZZ(data)
Definition: gradient.h:997
carto::VolumeRef< C > Y(const carto::rc_ptr< carto::Volume< C > > &data)
d(data)/dy = AimsGradientY(data)
Definition: gradient.h:506
carto::VolumeRef< C > YX(const carto::rc_ptr< carto::Volume< C > > &data)
d2(data)/dydx = YX(data)
Definition: gradient.h:628
carto::VolumeRef< C > XXY(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dx2dy = XXY(data)
Definition: gradient.h:698
carto::VolumeRef< C > YTY(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dydtdy = YTY(data)
Definition: gradient.h:845
carto::VolumeRef< C > YXY(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dydxdy = YXY(data)
Definition: gradient.h:782
carto::VolumeRef< C > TXT(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dtdxdt = TXT(data)
Definition: gradient.h:960
carto::VolumeRef< C > YY(const carto::rc_ptr< carto::Volume< C > > &data)
d2(data)/dy2 = YY(data)
Definition: gradient.h:633
carto::VolumeRef< C > XYT(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dxdydt = XYT(data)
Definition: gradient.h:729
carto::VolumeRef< C > ZYT(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dzdydt = ZYT(data)
Definition: gradient.h:897
carto::VolumeRef< C > ZZY(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dz2dy = ZZY(data)
Definition: gradient.h:908
carto::VolumeRef< C > TYX(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dtdydx = TYX(data)
Definition: gradient.h:966
carto::VolumeRef< C > XX(const carto::rc_ptr< carto::Volume< C > > &data)
d2(data)/dx2 = XX(data)
Definition: gradient.h:607
carto::VolumeRef< C > XT(const carto::rc_ptr< carto::Volume< C > > &data)
d2(data)/dxdt = XT(data)
Definition: gradient.h:622
carto::VolumeRef< C > ZZ(const carto::rc_ptr< carto::Volume< C > > &data)
d2(data)/dz2 = ZZ(data)
Definition: gradient.h:659
carto::VolumeRef< C > ZY(const carto::rc_ptr< carto::Volume< C > > &data)
d2(data)/dzdy = ZY(data)
Definition: gradient.h:654
carto::VolumeRef< C > TZX(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dtdzdx = TZX(data)
Definition: gradient.h:987
carto::VolumeRef< C > TZ(const carto::rc_ptr< carto::Volume< C > > &data)
d2(data)/dtdz = TZ(data)
Definition: gradient.h:680
carto::VolumeRef< C > XXX(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dx3 = XXX(data)
Definition: gradient.h:693
carto::VolumeRef< C > ZYY(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dzdy2 = ZYY(data)
Definition: gradient.h:887
carto::VolumeRef< C > XTX(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dxdtdx = XTX(data)
Definition: gradient.h:756
carto::VolumeRef< C > XZZ(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dxdz2 = XZZ(data)
Definition: gradient.h:745
carto::VolumeRef< C > XTT(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dxdt2 = XTT(data)
Definition: gradient.h:771
carto::VolumeRef< C > ZTT(const carto::rc_ptr< carto::Volume< C > > &data)
d3(data)/dzdt2 = ZTT(data)
Definition: gradient.h:939
carto::VolumeRef< C > XZ(const carto::rc_ptr< carto::Volume< C > > &data)
d2(data)/dxdz = XZ(data)
Definition: gradient.h:617
void fillBorder(const T &value)
virtual void copyHeaderFrom(const PropertySet &other)
AimsGradientMethod
Gradient methods.
Definition: gradient.h:48
@ AIMS_GRADIENT_DPLUS
Definition: gradient.h:54
@ AIMS_GRADIENT_CENTRAL
Definition: gradient.h:50
@ AIMS_GRADIENT_DMINUS
Definition: gradient.h:52
AimsFirstOrderGradient
First order.
Definition: gradient.h:63
@ AIMS_GRADIENT_T
Definition: gradient.h:71
@ AIMS_GRADIENT_X
Definition: gradient.h:65
@ AIMS_GRADIENT_Z
Definition: gradient.h:69
@ AIMS_GRADIENT_Y
Definition: gradient.h:67
AimsThirdOrderGradient
Third order.
Definition: gradient.h:113
@ AIMS_GRADIENT_ZZX
Definition: gradient.h:195
@ AIMS_GRADIENT_TTX
Definition: gradient.h:235
@ AIMS_GRADIENT_TZX
Definition: gradient.h:227
@ AIMS_GRADIENT_ZTX
Definition: gradient.h:203
@ AIMS_GRADIENT_ZZZ
Definition: gradient.h:199
@ AIMS_GRADIENT_ZXX
Definition: gradient.h:179
@ AIMS_GRADIENT_XXX
Definition: gradient.h:115
@ AIMS_GRADIENT_YTY
Definition: gradient.h:173
@ AIMS_GRADIENT_YYX
Definition: gradient.h:155
@ AIMS_GRADIENT_TYX
Definition: gradient.h:219
@ AIMS_GRADIENT_TYY
Definition: gradient.h:221
@ AIMS_GRADIENT_TTT
Definition: gradient.h:241
@ AIMS_GRADIENT_YZT
Definition: gradient.h:169
@ AIMS_GRADIENT_ZXZ
Definition: gradient.h:183
@ AIMS_GRADIENT_XTY
Definition: gradient.h:141
@ AIMS_GRADIENT_ZTZ
Definition: gradient.h:207
@ AIMS_GRADIENT_XXZ
Definition: gradient.h:119
@ AIMS_GRADIENT_XYY
Definition: gradient.h:125
@ AIMS_GRADIENT_XTX
Definition: gradient.h:139
@ AIMS_GRADIENT_YTX
Definition: gradient.h:171
@ AIMS_GRADIENT_XTT
Definition: gradient.h:145
@ AIMS_GRADIENT_YZZ
Definition: gradient.h:167
@ AIMS_GRADIENT_TZZ
Definition: gradient.h:231
@ AIMS_GRADIENT_ZZT
Definition: gradient.h:201
@ AIMS_GRADIENT_TXZ
Definition: gradient.h:215
@ AIMS_GRADIENT_TZY
Definition: gradient.h:229
@ AIMS_GRADIENT_YTT
Definition: gradient.h:177
@ AIMS_GRADIENT_YYY
Definition: gradient.h:157
@ AIMS_GRADIENT_XZT
Definition: gradient.h:137
@ AIMS_GRADIENT_YZY
Definition: gradient.h:165
@ AIMS_GRADIENT_TTY
Definition: gradient.h:237
@ AIMS_GRADIENT_ZZY
Definition: gradient.h:197
@ AIMS_GRADIENT_ZYX
Definition: gradient.h:187
@ AIMS_GRADIENT_YXZ
Definition: gradient.h:151
@ AIMS_GRADIENT_ZXY
Definition: gradient.h:181
@ AIMS_GRADIENT_TXX
Definition: gradient.h:211
@ AIMS_GRADIENT_TZT
Definition: gradient.h:233
@ AIMS_GRADIENT_XZX
Definition: gradient.h:131
@ AIMS_GRADIENT_TYZ
Definition: gradient.h:223
@ AIMS_GRADIENT_YTZ
Definition: gradient.h:175
@ AIMS_GRADIENT_YXY
Definition: gradient.h:149
@ AIMS_GRADIENT_ZTT
Definition: gradient.h:209
@ AIMS_GRADIENT_XYT
Definition: gradient.h:129
@ AIMS_GRADIENT_XYZ
Definition: gradient.h:127
@ AIMS_GRADIENT_YXX
Definition: gradient.h:147
@ AIMS_GRADIENT_XTZ
Definition: gradient.h:143
@ AIMS_GRADIENT_ZYT
Definition: gradient.h:193
@ AIMS_GRADIENT_TTZ
Definition: gradient.h:239
@ AIMS_GRADIENT_TXY
Definition: gradient.h:213
@ AIMS_GRADIENT_ZYY
Definition: gradient.h:189
@ AIMS_GRADIENT_YYZ
Definition: gradient.h:159
@ AIMS_GRADIENT_YZX
Definition: gradient.h:163
@ AIMS_GRADIENT_TYT
Definition: gradient.h:225
@ AIMS_GRADIENT_XZZ
Definition: gradient.h:135
@ AIMS_GRADIENT_ZYZ
Definition: gradient.h:191
@ AIMS_GRADIENT_YYT
Definition: gradient.h:161
@ AIMS_GRADIENT_XZY
Definition: gradient.h:133
@ AIMS_GRADIENT_XXY
Definition: gradient.h:117
@ AIMS_GRADIENT_ZTY
Definition: gradient.h:205
@ AIMS_GRADIENT_YXT
Definition: gradient.h:153
@ AIMS_GRADIENT_XYX
Definition: gradient.h:123
@ AIMS_GRADIENT_ZXT
Definition: gradient.h:185
@ AIMS_GRADIENT_XXT
Definition: gradient.h:121
@ AIMS_GRADIENT_TXT
Definition: gradient.h:217
AimsSecondOrderGradient
Second order.
Definition: gradient.h:76
@ AIMS_GRADIENT_XT
Definition: gradient.h:84
@ AIMS_GRADIENT_XZ
Definition: gradient.h:82
@ AIMS_GRADIENT_TX
Definition: gradient.h:102
@ AIMS_GRADIENT_ZY
Definition: gradient.h:96
@ AIMS_GRADIENT_XY
Definition: gradient.h:80
@ AIMS_GRADIENT_TZ
Definition: gradient.h:106
@ AIMS_GRADIENT_TT
Definition: gradient.h:108
@ AIMS_GRADIENT_XX
Definition: gradient.h:78
@ AIMS_GRADIENT_ZT
Definition: gradient.h:100
@ AIMS_GRADIENT_YX
Definition: gradient.h:86
@ AIMS_GRADIENT_YZ
Definition: gradient.h:90
@ AIMS_GRADIENT_ZZ
Definition: gradient.h:98
@ AIMS_GRADIENT_ZX
Definition: gradient.h:94
@ AIMS_GRADIENT_YY
Definition: gradient.h:88
@ AIMS_GRADIENT_YT
Definition: gradient.h:92
@ AIMS_GRADIENT_TY
Definition: gradient.h:104