Clipper
|
FFTmap: P1 map with symmetry used for calculating FFTs. More...
#include <fftmap.h>
Public Member Functions | |
FFTmap () | |
Null constructor. | |
FFTmap (const Spacegroup &spacegroup, const Cell &cell, const Grid_sampling grid_sam, const FFTtype type=Default) | |
Constructor: takes spacegroup, cell, grid. | |
void | init (const Spacegroup &spacegroup, const Cell &cell, const Grid_sampling grid_sam, const FFTtype type=Default) |
initialiser | |
void | reset () |
Reset. | |
const Cell & | cell () const |
get the cell | |
const Spacegroup & | spacegroup () const |
get the spacegroup | |
const Grid_sampling & | grid_sampling () const |
get the cell grid | |
void | fft_h_to_x () |
Transform to real space. | |
void | fft_x_to_h () |
Transform to reciprocal space. | |
template<class T > | |
void | get_recip_data (const HKL &rfl, datatypes::F_phi< T > &fphi) const |
get reciprocal space data | |
template<class T > | |
void | set_recip_data (const HKL &rfl, const datatypes::F_phi< T > &fphi) |
set reciprocal space data | |
template<class T > | |
void | get_real_data (const Coord_grid &c, T &datum) const |
get real space data | |
template<class T > | |
void | set_real_data (const Coord_grid &c, const T &datum) |
set real space data | |
datatypes::F_phi< ffttype > | get_recip_data (const HKL &rfl) const |
get reciprocal space data (No error checking) | |
const ffttype & | get_real_data (const Coord_grid &c) const |
get real space data (No error checking) | |
template<class H , class X > | |
void | fft_rfl_to_map (const H &h, X &x) |
calculate map-like object from reflection-like object | |
template<class H , class X > | |
void | fft_map_to_rfl (const X &x, H &h) |
calculate reflection-like object from map-like object | |
void | debug () const |
Protected Attributes | |
Cell | cell_ |
unit cell | |
Spacegroup | spacegroup_ |
spacegroup | |
std::vector< Isymop > | isymop |
Integerised symops. |
FFTmap: P1 map with symmetry used for calculating FFTs.
The FFTmap is represented in P1 in memory. However, it also has a spacegroup, and the contained data remains consistent with this spacegroup at all times. It has three states - unassigned, real-space, and reciprocal space. In real space it contains real map data. In reciprocal space it holds a hemisphere of complex structure factors, with the Friedels duplicated on the zero section.
The user should be able to ignore all the issues of spacegroup symmetry, Friedel opposites, and storage order.
clipper::FFTmap::FFTmap | ( | ) |
clipper::FFTmap::FFTmap | ( | const Spacegroup & | spacegroup, |
const Cell & | cell, | ||
const Grid_sampling | grid_sam, | ||
const FFTtype | type = Default |
||
) |
Constructor: takes spacegroup, cell, grid.
Construct an FFTmap for a given spacegroup, cell, and grid. The map values are initialised to zero.
The FFTmap is initially in neither real nor reciprocal spce, however as soon as one of the 'set' methods is called, it will be defined as in either real or reciprocal space until the next fft.
spacegroup | The spacegroup. |
cell | The cell, used for scaling. |
grid_sam | The grid sampling of the unit cell. |
precalc | Perform slow precalculation to get faster FFT. (default: no) |
References init(), and clipper::Message::message().
void clipper::FFTmap::init | ( | const Spacegroup & | spacegroup, |
const Cell & | cell, | ||
const Grid_sampling | grid_sam, | ||
const FFTtype | type = Default |
||
) |
initialiser
Initialise an FFTmap for a given spacegroup, cell, and grid. The map values are initialised to zero.
The FFTmap is initially in neither real nor reciprocal spce, however as soon as one of the 'set' methods is called, it will be defined as in either real or reciprocal space until the next fft.
spacegroup | The spacegroup. |
cell | The cell, used for scaling. |
grid_sam | The grid sampling of the unit cell. |
precalc | Perform slow precalculation to get faster FFT. This adds a penalty of about 4s on Linux for the first FFT of any grid and direction. Subsequent FFTs will be faster. Set to true for programs which will use many FFTs. default: false. |
References cell(), cell_, isymop, clipper::Spacegroup::num_symops(), spacegroup(), spacegroup_, and clipper::Spacegroup::symop().
Referenced by FFTmap().
void clipper::FFTmap::reset | ( | ) |
Reset.
Reset the space and zero all the data, if necessary.
Reimplemented from clipper::FFTmap_p1.
References clipper::FFTmap_p1::datavec, and clipper::FFTmap_p1::mode.
Referenced by fft_map_to_rfl(), and fft_rfl_to_map().
void clipper::FFTmap::fft_h_to_x | ( | ) |
Transform to real space.
The data is transformed from recirocal to real space. A scale factor of 1/v (where v is the cell volume) is applied. If the FFTmap is already in real space, no action is taken.
References cell(), and clipper::FFTmap_p1::mode.
Referenced by fft_rfl_to_map().
void clipper::FFTmap::fft_x_to_h | ( | ) |
Transform to reciprocal space.
The data is transformed from real to recirocal space. A scale factor of v/n (where v is the cell volume and n the number of grid points) is applied. If the FFTmap is already in reciproal space, no action is taken.
References cell(), and clipper::FFTmap_p1::mode.
Referenced by fft_map_to_rfl().
void clipper::FFTmap::get_recip_data | ( | const HKL & | rfl, |
datatypes::F_phi< T > & | fphi | ||
) | const |
get reciprocal space data
The data value for the given HKL, or the conjugate of its Friedel opposite if required, is returned. The symmetry related copies of the data are ignored.
rfl | The HKL of the data to be returned. |
fphi | The value, as a magnitude and phase of type ffttype |
References clipper::FFTmap_p1::get_hkl(), clipper::Message::message(), and clipper::FFTmap_p1::mode.
Referenced by fft_map_to_rfl().
template void clipper::FFTmap::set_recip_data< ftype64 > | ( | const HKL & | rfl, |
const datatypes::F_phi< T > & | fphi | ||
) |
set reciprocal space data
The data value for the given HKL, or the conjugate of its Friedel opposite if required, is set. All the symmetry related copies of the data, and any Friedel copies in the zero section, are also set.
rfl | The HKL of the data to be set. |
fphi | The value, as a magnitude and phase of type ffttype |
References isymop, clipper::Message::message(), clipper::FFTmap_p1::mode, clipper::Spacegroup::num_primops(), clipper::FFTmap_p1::set_hkl(), spacegroup_, clipper::HKL::sym_phase_shift(), clipper::Spacegroup::symop(), and clipper::HKL::transform().
Referenced by fft_rfl_to_map().
void clipper::FFTmap::get_real_data | ( | const Coord_grid & | c, |
T & | datum | ||
) | const |
get real space data
The data value for the given grid coordinate is returned. Symmetry related copies are ignored.
c | The coordinate of the data to be returned. |
datum | The value of the data. |
References clipper::FFTmap_p1::grid_real(), clipper::Message::message(), clipper::FFTmap_p1::mode, clipper::FFTmap_p1::real_data(), and clipper::Coord_grid::unit().
Referenced by fft_rfl_to_map().
template void clipper::FFTmap::set_real_data< ftype64 > | ( | const Coord_grid & | c, |
const T & | datum | ||
) |
set real space data
The data value for the given grid coordinate is set. All the symmetry related copies of the data are also set.
c | The coordinate of the data to be set. |
datum | The value of the data. |
References clipper::FFTmap_p1::grid_sam_, isymop, clipper::Message::message(), clipper::FFTmap_p1::mode, clipper::FFTmap_p1::real_data(), clipper::Coord_grid::transform(), and clipper::Coord_grid::unit().
Referenced by fft_map_to_rfl().
datatypes::F_phi< ffttype > clipper::FFTmap::get_recip_data | ( | const HKL & | rfl | ) | const |
get reciprocal space data (No error checking)
No error is produced if the space is wrong.
rfl | The HKL of the data to be returned. |
ffttype
References clipper::FFTmap_p1::get_hkl().
const ffttype & clipper::FFTmap::get_real_data | ( | const Coord_grid & | c | ) | const [inline] |
get real space data (No error checking)
No error is produced if the space is wrong.
c | The grid coordinate of the data to be returned. |
ffttype
References clipper::FFTmap_p1::grid_real(), clipper::FFTmap_p1::real_data(), and clipper::Coord_grid::unit().
void clipper::FFTmap::fft_rfl_to_map | ( | const H & | h, |
X & | x | ||
) |
calculate map-like object from reflection-like object
Fill this FFTmap object from a reflection object, transform it, and fill the given map object from the FFTmap. This will work for any reflection data object which implements a HKL_reference_index, and every map data object which implements a Map_reference_index.
For the results to be sensible, the spacegroup, cell and grids should match. (The map will be zeroed if necessary).
h | The source reflection data object. |
x | The target map object. |
References fft_h_to_x(), get_real_data(), reset(), and set_recip_data().
void clipper::FFTmap::fft_map_to_rfl | ( | const X & | x, |
H & | h | ||
) |
calculate reflection-like object from map-like object
Fill this FFTmap object from a map object, transform it, and fill the given reflection object from the FFTmap. This will work for any reflection data object which implements a HKL_reference_index, and every map data object which implements a Map_reference_index.
For the results to be sensible, the spacegroup, cell and grids should match. (The map will be zeroed if necessary).
x | The source map object. |
h | The target reflection data object. |
References fft_x_to_h(), get_recip_data(), reset(), and set_real_data().