#include <FFT3D.h>
Public Types |
|
typedef std::complex< typename ComplexTraits::ComplexPrecision > |
Complex |
typedef TRegularData3D < std::complex< typename ComplexTraits::ComplexPrecision > > |
ComplexVector |
Public Member Functions |
|
Constructors and Destructors
|
|
TFFT3D () | |
Default constructor. |
|
TFFT3D (const TFFT3D &data) | |
Copy constructor. |
|
TFFT3D (Size ldnX, Size ldnY, Size ldnZ, double stepPhysX=1., double stepPhysY=1., double stepPhysZ=1., Vector3 origin=Vector3(0., 0., 0), bool inFourierSpace=false) | |
Detailed constructor. |
|
virtual | ~TFFT3D () |
Destructor. |
|
Assignment
|
|
const TFFT3D & | operator= (const TFFT3D &fft_3d) |
Assignment operator. |
|
virtual void | clear () |
Clear the contents. |
|
virtual void | destroy () |
Clear the contents and reset all
attributes. |
|
Predicates
|
|
bool | operator== (const TFFT3D &fft3d) const |
Equality operator. |
|
void | doFFT () |
Perform a single fast Fourier
transform on the data. |
|
void | doiFFT () |
Perform a single inverse Fourier
transform on the data. |
|
bool | translate (const Vector3 &trans_origin) |
Translate the origin in physical
space about {trans_origin}, i.e. |
|
bool | setPhysStepWidth (double new_width_x, double new_width_y, double new_width_z) |
Set the step width in physical space
to {new_width_x, new_width_y, new_width_z}.
|
|
double | getPhysStepWidthX () const |
Returns the step width in physical
space in X direction. |
|
double | getPhysStepWidthY () const |
Returns the step width in physical
space in Y direction. |
|
double | getPhysStepWidthZ () const |
Returns the step width in physical
space in Z direction. |
|
double | getFourierStepWidthX () const |
Returns the step width in Fourier
space in X direction. |
|
double | getFourierStepWidthY () const |
Returns the step width in Fourier
space in Y direction. |
|
double | getFourierStepWidthZ () const |
Returns the step width in Fourier
space in Z direction. |
|
double | getPhysSpaceMinX () const |
Returns the minimal position of the
grid in physical space in X direction. |
|
double | getPhysSpaceMinY () const |
Returns the minimal position of the
grid in physical space in Y direction. |
|
double | getPhysSpaceMinZ () const |
Returns the minimal position of the
grid in physical space in Z direction. |
|
double | getPhysSpaceMaxX () const |
Returns the maximal position of the
grid in physical space in X direction. |
|
double | getPhysSpaceMaxY () const |
Returns the maximal position of the
grid in physical space in Y direction. |
|
double | getPhysSpaceMaxZ () const |
Returns the maximal position of the
grid in physical space in Z direction. |
|
double | getFourierSpaceMinX () const |
Returns the minimal position of the
grid in Fourier space in X direction. |
|
double | getFourierSpaceMinY () const |
Returns the minimal position of the
grid in Fourier space in Y direction. |
|
double | getFourierSpaceMinZ () const |
Returns the minimal position of the
grid in Fourier space in Z direction. |
|
double | getFourierSpaceMaxX () const |
Returns the maximal position of the
grid in Fourier space in X direction. |
|
double | getFourierSpaceMaxY () const |
Returns the maximal position of the
grid in Fourier space in Y direction. |
|
double | getFourierSpaceMaxZ () const |
Returns the maximal position of the
grid in Fourier space in Z direction. |
|
Size | getMaxXIndex () const |
Return the largest grid position for
the x direction. |
|
Size | getMaxYIndex () const |
Return the largest grid position for
the y direction. |
|
Size | getMaxZIndex () const |
Return the largest grid position for
the z direction. |
|
Size | getNumberOfInverseTransforms () const |
Return the number of inverse
transforms that have been carried out using this class.
|
|
Vector3 | getGridCoordinates (Position position) const |
Returns the grid coordinate
corresponding to the position. |
|
Complex | getData (const Vector3 &pos) const throw (Exception::OutOfGrid) |
Returns the data at the grid
position closest to pos , and automatically includes
the correct phase factor and (symmetric)
normalization. |
|
Complex | getInterpolatedValue (const Vector3 &pos) const throw (Exception::OutOfGrid) |
Returns the data at point
pos. |
|
void | setData (const Vector3 &pos, Complex val) throw (Exception::OutOfGrid) |
Sets the data point at the grid
position closest to pos to the value val ,
and -- if called in Fourier space -- automatically includes
the correct phase factor and (symmetric)
normalization. |
|
Complex & | operator[] (const Vector3 &pos) throw (Exception::OutOfGrid) |
Access the data at the grid position
closest to pos . |
|
const Complex & | operator[] (const Vector3 &pos) const throw (Exception::OutOfGrid) |
Access the data at the grid position
closest to pos . |
|
Complex & | operator[] (const Position &pos) throw (Exception::OutOfGrid) |
Access the (raw) data at Position
pos. |
|
const Complex & | operator[] (const Position &pos) const throw (Exception::OutOfGrid) |
Access the (raw) data at Position
pos. |
|
void | setNumberOfFFTTransforms (Size num) |
void | setNumberOfiFFTTransforms (Size num) |
Complex | phase (const Vector3 &pos) const |
This computes the phase factor in
Fourier space that results if the origin of the coordinate
system in physical space is not in the "lower left
corner". |
|
Predicates
|
|
bool | isInFourierSpace () const |
Returns true if the data is
considered to be in Fourier space, false
otherwise. |
|
Protected Attributes |
|
Size | lengthX_ |
Size | lengthY_ |
Size | lengthZ_ |
bool | inFourierSpace_ |
Size | numPhysToFourier_ |
Size | numFourierToPhys_ |
Vector3 | origin_ |
Origin of the grid
(offset). |
|
double | stepPhysX_ |
double | stepPhysY_ |
double | stepPhysZ_ |
double | stepFourierX_ |
double | stepFourierY_ |
double | stepFourierZ_ |
Vector3 | minPhys_ |
Vector3 | maxPhys_ |
Vector3 | minFourier_ |
Vector3 | maxFourier_ |
ComplexTraits::FftwPlan | planForward_ |
ComplexTraits::FftwPlan | planBackward_ |
Size | dataLength_ |
Complex * | dataAdress_ |
bool | planCalculated_ |
BALL::TFFT3D< ComplexTraits >::TFFT3D | ( | Size | ldnX, | |
Size | ldnY, | |||
Size | ldnZ, | |||
double | stepPhysX =
1. , |
|||
double | stepPhysY =
1. , |
|||
double | stepPhysZ =
1. , |
|||
Vector3 | origin = Vector3(0.,
0., 0) , |
|||
bool | inFourierSpace =
false |
|||
) |
Detailed constructor.
ldnX | The binary logarithm of the number of grid points in X direction (we use the logarithm to ensure that the number of points is a power of two, which is important for the FFT) | |
ldnY | The binary logarithm of the number of grid points in Y direction | |
ldnZ | The binary logarithm of the number of grid points in Z direction | |
stepPhysX | The step width in X direction in physical space | |
stepPhysY | The step width in Y direction in physical space | |
stepPhysZ | The step width in Z direction in physical space | |
origin | The origin of the coordinate system | |
inFourierSpace | Flag to decide whether the data is assumed to be in physical or Fourier space |
TFFT3D< ComplexTraits >::Complex BALL::TFFT3D< ComplexTraits >::getInterpolatedValue | ( | const Vector3 & | pos | ) | const throw (Exception::OutOfGrid) |
Returns the data at point pos.
If pos is not a point on the grid, the data is linearly interpolated. This method automatically includes the correct phase factor and (symmetric) normalization.
Reimplemented from BALL::TRegularData3D< std::complex< ComplexTraits::ComplexPrecision > >.
References BALL::Maths::floor(), BALL::Maths::max(), BALL::Maths::min(), BALL::TVector3< T >::x, BALL::TVector3< T >::y, and BALL::TVector3< T >::z.
Size BALL::TFFT3D< ComplexTraits >::getMaxXIndex | ( | ) | const |
Return the largest grid position for the x direction.
This method returns the maximum position allowed in the grid. As the point in the origin has the indices (0, 0, 0), this method returns the number of points in X direction minus one.
Size BALL::TFFT3D< ComplexTraits >::getMaxYIndex | ( | ) | const |
Return the largest grid position for the y direction.
This method returns the maximum position allowed in the grid. As the point in the origin has the indices (0, 0, 0), this method returns the number of points in Y direction minus one.
Size BALL::TFFT3D< ComplexTraits >::getMaxZIndex | ( | ) | const |
Return the largest grid position for the z direction.
This method returns the maximum position allowed in the grid. As the point in the origin has the indices (0, 0, 0), this method returns the number of points in Z direction minus one.
Size BALL::TFFT3D< ComplexTraits >::getNumberOfInverseTransforms | ( | ) | const |
Return the number of inverse transforms that have been carried out using this class.
This is an important factor for the normalization of the data.
const Complex& BALL::TFFT3D< ComplexTraits >::operator[] | ( | const Position & | pos | ) | const throw (Exception::OutOfGrid) |
Access the (raw) data at Position pos.
Const method.
References BALL::TFFT3D< ComplexTraits >::operator[]().
const TFFT3D< ComplexTraits >::Complex & BALL::TFFT3D< ComplexTraits >::operator[] | ( | const Vector3 & | pos | ) | const throw (Exception::OutOfGrid) |
Access the data at the grid position closest to pos .
This function returns the "raw" data at that position.
References BALL::TRegularData3D< ValueType >::operator[](), BALL::Maths::rint(), BALL::TVector3< T >::x, BALL::TVector3< T >::y, and BALL::TVector3< T >::z.
TFFT3D< ComplexTraits >::Complex & BALL::TFFT3D< ComplexTraits >::operator[] | ( | const Vector3 & | pos | ) | throw (Exception::OutOfGrid) |
Access the data at the grid position closest to pos .
This function returns the "raw" data at that position.
References BALL::TRegularData3D< ValueType >::operator[](), BALL::Maths::rint(), BALL::TVector3< T >::x, BALL::TVector3< T >::y, and BALL::TVector3< T >::z.
Referenced by BALL::TFFT3D< ComplexTraits >::operator[]().
bool BALL::TFFT3D< ComplexTraits >::setPhysStepWidth | ( | double | new_width_x, | |
double | new_width_y, | |||
double | new_width_z | |||
) |
Set the step width in physical space to {new_width_x, new_width_y, new_width_z}.
The step width in Fourier space is automatically adjusted accordingly. {new_width_x, new_width_y and new_width_z} must be positive, otherwise the function does nothing and retuns false .
References BALL::TFFT3D< ComplexTraits >::origin_, BALL::TVector3< T >::x, BALL::TVector3< T >::y, and BALL::TVector3< T >::z.
bool BALL::TFFT3D< ComplexTraits >::translate | ( | const Vector3 & | trans_origin | ) |
Translate the origin in physical space about {trans_origin}, i.e.
the new origin will be located at the former position {trans_origin}. If the result is out of bounds, the function does nothing and returns false .
References BALL::TFFT3D< ComplexTraits >::origin_, BALL::Maths::rint(), BALL::TVector3< T >::x, BALL::TVector3< T >::y, and BALL::TVector3< T >::z.