#include <reconstructor.h>
Inheritance diagram for EMAN::ReconstructorVolumeData:
Public Member Functions | |
ReconstructorVolumeData () | |
Only constructor All member variables are zeroed. | |
virtual | ~ReconstructorVolumeData () |
Destructor safely frees memory. | |
const EMData * | get_emdata () |
Get the main image pointer, probably redundant (not used). | |
Protected Member Functions | |
void | free_memory () |
Free allocated memorys The inherited class may have allocated image of tmp_data In either case you can safely call this function to delete either of those pointers, even if they bdb:refine_03::threed_00are NULL. | |
virtual void | normalize_threed (const bool sqrt_damp=false, const bool wiener=false) |
Normalize on the assumption that image is a Fourier volume and that tmp_data is a volume of weights corresponding in size to this Fourier volume. | |
virtual void | zero_memory () |
Sends the pixels in tmp_data and image to zero Convenience only. | |
Protected Attributes | |
EMData * | image |
Inheriting class allocates this, probably in setup(). | |
EMData * | tmp_data |
Inheriting class may allocate this, probably in setup(). | |
int | nx |
int | nx2 |
int | ny |
int | ny2 |
int | nz |
int | nz2 |
int | subnx |
int | subny |
int | subnz |
int | subx0 |
int | suby0 |
int | subz0 |
Private Member Functions | |
ReconstructorVolumeData (const ReconstructorVolumeData &that) | |
Disallow copy construction. | |
ReconstructorVolumeData & | operator= (const ReconstructorVolumeData &) |
Disallow assignment. |
One EMData object basically stores the real pixel data, the other is used for storing normalization values. This class was originally added simply to encapsulate the the things common to FourierReconstructor, WienerFourierReconstructor and BackProjectionReconstructor. It was never expected to instantiated on its own, and is intended to be a parent of the Reconstructor class. d.woolford May 2007
Definition at line 206 of file reconstructor.h.
EMAN::ReconstructorVolumeData::ReconstructorVolumeData | ( | ) | [inline] |
virtual EMAN::ReconstructorVolumeData::~ReconstructorVolumeData | ( | ) | [inline, virtual] |
Destructor safely frees memory.
Definition at line 216 of file reconstructor.h.
References free_memory().
00216 { free_memory(); }
EMAN::ReconstructorVolumeData::ReconstructorVolumeData | ( | const ReconstructorVolumeData & | that | ) | [private] |
Disallow copy construction.
void EMAN::ReconstructorVolumeData::free_memory | ( | ) | [inline, protected] |
Free allocated memorys The inherited class may have allocated image of tmp_data In either case you can safely call this function to delete either of those pointers, even if they bdb:refine_03::threed_00are NULL.
Reimplemented in EMAN::FourierReconstructor.
Definition at line 247 of file reconstructor.h.
References image, and tmp_data.
Referenced by ~ReconstructorVolumeData().
00248 { 00249 if (image != 0) {delete image; image = 0;} 00250 if ( tmp_data != 0 ) { delete tmp_data; tmp_data = 0; } 00251 }
const EMData* EMAN::ReconstructorVolumeData::get_emdata | ( | ) | [inline] |
Get the main image pointer, probably redundant (not used).
Definition at line 220 of file reconstructor.h.
References image.
00220 { return image; }
void ReconstructorVolumeData::normalize_threed | ( | const bool | sqrt_damp = false , |
|
const bool | wiener = false | |||
) | [protected, virtual] |
Normalize on the assumption that image is a Fourier volume and that tmp_data is a volume of weights corresponding in size to this Fourier volume.
This means tmp_data is assumed to have have as many x pixels as image.
Definition at line 254 of file reconstructor.cpp.
References EMAN::EMData::get_data(), image, norm(), NullPointerException, nx, ny, nz, rdata, sqrt(), subnx, subny, subnz, subx0, tmp_data, and y.
Referenced by EMAN::WienerFourierReconstructor::finish(), EMAN::FourierReconstructor::finish(), and EMAN::FourierReconstructorSimple2D::finish().
00256 { 00257 float* norm = tmp_data->get_data(); 00258 float* rdata = image->get_data(); 00259 00260 // printf("%d %d %d %d %d %d\n",subnx,subny,subnz,image->get_xsize(),image->get_ysize(),image->get_zsize()); 00261 00262 // FIXME should throw a sensible error 00263 if ( 0 == norm ) throw NullPointerException("The normalization volume was null!"); 00264 if ( 0 == rdata ) throw NullPointerException("The complex reconstruction volume was null!"); 00265 00266 // The math is a bit tricky to explain. Wiener filter is basically SNR/(1+SNR) 00267 // In this case, data have already been effectively multiplied by SNR (one image at a time), 00268 // so without Wiener filter, we just divide by total SNR. With Wiener filter, we just add 00269 // 1.0 to total SNR, and we're done --steve 00270 float wfilt=0.0; 00271 if (wiener) wfilt=1.0; 00272 00273 for (size_t i = 0; i < (size_t)subnx * subny * subnz; i += 2) { 00274 float d = norm[i/2]; 00275 if (sqrt_damp) d*=sqrt(d); 00276 if (d == 0) { 00277 rdata[i] = 0; 00278 rdata[i + 1] = 0; 00279 } 00280 else { 00281 // rdata[i]=1.0/d; 00282 // rdata[i+1]=0.0; // for debugging only 00283 rdata[i] /= d+wfilt; 00284 rdata[i + 1] /= d+wfilt; 00285 } 00286 } 00287 00288 // enforce complex conj, only works on subvolumes if the complete conjugate plane is in the volume 00289 if (subx0==0 && subnx>1 && subny==ny && subnz==nz) { 00290 for (int z=0; z<=nz/2; z++) { 00291 for (int y=1; y<=ny; y++) { 00292 if (y==0 && z==0) continue; 00293 // x=0 00294 size_t i=(size_t)(y%ny)*subnx+(size_t)(z%nz)*subnx*subny; 00295 size_t i2=(size_t)(ny-y)*subnx+(size_t)((nz-z)%nz)*subnx*subny; 00296 float ar=(rdata[i]+rdata[i2])/2.0f; 00297 float ai=(rdata[i+1]-rdata[i2+1])/2.0f; 00298 rdata[i]=ar; 00299 rdata[i2]=ar; 00300 rdata[i+1]=ai; 00301 rdata[i2+1]=-ai; 00302 } 00303 } 00304 } 00305 00306 if (subx0+subnx==nx && subnx>1 && subny==ny && subnz==nz) { 00307 for (int z=0; z<=nz/2; z++) { 00308 for (int y=1; y<=ny; y++) { 00309 if (y==0 && z==0) continue; 00310 // x=0 00311 size_t i=(size_t)(y%ny)*subnx+(size_t)(z%nz)*subnx*subny+subnx-2; 00312 size_t i2=(size_t)(ny-y)*subnx+(size_t)((nz-z)%nz)*subnx*subny+subnx-2; 00313 float ar=(rdata[i]+rdata[i2])/2.0f; 00314 float ai=(rdata[i+1]-rdata[i2+1])/2.0f; 00315 rdata[i]=ar; 00316 rdata[i2]=ar; 00317 rdata[i+1]=ai; 00318 rdata[i2+1]=-ai; 00319 } 00320 } 00321 } 00322 }
ReconstructorVolumeData& EMAN::ReconstructorVolumeData::operator= | ( | const ReconstructorVolumeData & | ) | [private] |
Disallow assignment.
virtual void EMAN::ReconstructorVolumeData::zero_memory | ( | ) | [inline, protected, virtual] |
Sends the pixels in tmp_data and image to zero Convenience only.
Definition at line 263 of file reconstructor.h.
References image, tmp_data, and EMAN::EMData::to_zero().
00264 { 00265 if (tmp_data != 0 ) tmp_data->to_zero(); 00266 if (image != 0 ) image->to_zero(); 00267 }
EMData* EMAN::ReconstructorVolumeData::image [protected] |
Inheriting class allocates this, probably in setup().
Definition at line 224 of file reconstructor.h.
Referenced by EMAN::FourierReconstructor::clear(), EMAN::FourierReconstructor::do_compare_slice_work(), EMAN::FourierReconstructor::do_insert_slice_work(), EMAN::BackProjectionReconstructor::finish(), EMAN::WienerFourierReconstructor::finish(), EMAN::FourierReconstructor::finish(), EMAN::FourierReconstructorSimple2D::finish(), free_memory(), EMAN::FourierReconstructor::free_memory(), get_emdata(), EMAN::BackProjectionReconstructor::insert_slice(), EMAN::FourierReconstructorSimple2D::insert_slice(), EMAN::FourierReconstructor::load_default_settings(), EMAN::FourierReconstructor::load_inserter(), normalize_threed(), EMAN::WienerFourierReconstructor::pixel_at(), EMAN::FourierReconstructor::pixel_at(), EMAN::BackProjectionReconstructor::setup(), EMAN::FourierReconstructor::setup(), EMAN::FourierReconstructorSimple2D::setup(), EMAN::FourierReconstructor::setup_seed(), and zero_memory().
int EMAN::ReconstructorVolumeData::nx [protected] |
Definition at line 229 of file reconstructor.h.
Referenced by EMAN::WienerFourierReconstructor::do_compare_slice_work(), EMAN::FourierReconstructor::do_compare_slice_work(), EMAN::WienerFourierReconstructor::do_insert_slice_work(), EMAN::FourierReconstructor::do_insert_slice_work(), EMAN::BackProjectionReconstructor::insert_slice(), EMAN::FourierReconstructorSimple2D::insert_slice(), normalize_threed(), EMAN::WienerFourierReconstructor::pixel_at(), EMAN::FourierReconstructor::pixel_at(), EMAN::BackProjectionReconstructor::setup(), EMAN::FourierReconstructor::setup(), EMAN::FourierReconstructorSimple2D::setup(), and EMAN::FourierReconstructor::setup_seed().
int EMAN::ReconstructorVolumeData::nx2 [protected] |
Definition at line 229 of file reconstructor.h.
Referenced by EMAN::WienerFourierReconstructor::pixel_at(), EMAN::FourierReconstructor::pixel_at(), EMAN::FourierReconstructor::setup(), and EMAN::FourierReconstructor::setup_seed().
int EMAN::ReconstructorVolumeData::ny [protected] |
Definition at line 230 of file reconstructor.h.
Referenced by EMAN::WienerFourierReconstructor::do_compare_slice_work(), EMAN::FourierReconstructor::do_compare_slice_work(), EMAN::WienerFourierReconstructor::do_insert_slice_work(), EMAN::FourierReconstructor::do_insert_slice_work(), EMAN::BackProjectionReconstructor::insert_slice(), EMAN::FourierReconstructorSimple2D::insert_slice(), normalize_threed(), EMAN::WienerFourierReconstructor::pixel_at(), EMAN::FourierReconstructor::pixel_at(), EMAN::BackProjectionReconstructor::setup(), EMAN::FourierReconstructor::setup(), EMAN::FourierReconstructorSimple2D::setup(), and EMAN::FourierReconstructor::setup_seed().
int EMAN::ReconstructorVolumeData::ny2 [protected] |
Definition at line 230 of file reconstructor.h.
Referenced by EMAN::WienerFourierReconstructor::pixel_at(), EMAN::FourierReconstructor::pixel_at(), EMAN::FourierReconstructor::setup(), and EMAN::FourierReconstructor::setup_seed().
int EMAN::ReconstructorVolumeData::nz [protected] |
Definition at line 231 of file reconstructor.h.
Referenced by EMAN::WienerFourierReconstructor::do_compare_slice_work(), EMAN::FourierReconstructor::do_compare_slice_work(), EMAN::WienerFourierReconstructor::do_insert_slice_work(), EMAN::FourierReconstructor::do_insert_slice_work(), EMAN::BackProjectionReconstructor::insert_slice(), normalize_threed(), EMAN::WienerFourierReconstructor::pixel_at(), EMAN::FourierReconstructor::pixel_at(), EMAN::BackProjectionReconstructor::setup(), EMAN::FourierReconstructor::setup(), and EMAN::FourierReconstructor::setup_seed().
int EMAN::ReconstructorVolumeData::nz2 [protected] |
Definition at line 231 of file reconstructor.h.
Referenced by EMAN::WienerFourierReconstructor::pixel_at(), EMAN::FourierReconstructor::pixel_at(), EMAN::FourierReconstructor::setup(), and EMAN::FourierReconstructor::setup_seed().
int EMAN::ReconstructorVolumeData::subnx [protected] |
Definition at line 233 of file reconstructor.h.
Referenced by EMAN::WienerFourierReconstructor::do_compare_slice_work(), EMAN::FourierReconstructor::do_compare_slice_work(), normalize_threed(), EMAN::WienerFourierReconstructor::pixel_at(), EMAN::FourierReconstructor::pixel_at(), EMAN::FourierReconstructor::setup(), and EMAN::FourierReconstructor::setup_seed().
int EMAN::ReconstructorVolumeData::subny [protected] |
Definition at line 234 of file reconstructor.h.
Referenced by EMAN::WienerFourierReconstructor::do_compare_slice_work(), EMAN::FourierReconstructor::do_compare_slice_work(), normalize_threed(), EMAN::FourierReconstructor::setup(), and EMAN::FourierReconstructor::setup_seed().
int EMAN::ReconstructorVolumeData::subnz [protected] |
Definition at line 235 of file reconstructor.h.
Referenced by EMAN::WienerFourierReconstructor::do_compare_slice_work(), EMAN::FourierReconstructor::do_compare_slice_work(), normalize_threed(), EMAN::FourierReconstructor::setup(), and EMAN::FourierReconstructor::setup_seed().
int EMAN::ReconstructorVolumeData::subx0 [protected] |
Definition at line 237 of file reconstructor.h.
Referenced by normalize_threed(), EMAN::WienerFourierReconstructor::pixel_at(), EMAN::FourierReconstructor::pixel_at(), EMAN::FourierReconstructor::setup(), and EMAN::FourierReconstructor::setup_seed().
int EMAN::ReconstructorVolumeData::suby0 [protected] |
Definition at line 238 of file reconstructor.h.
Referenced by EMAN::WienerFourierReconstructor::pixel_at(), EMAN::FourierReconstructor::pixel_at(), EMAN::FourierReconstructor::setup(), and EMAN::FourierReconstructor::setup_seed().
int EMAN::ReconstructorVolumeData::subz0 [protected] |
Definition at line 239 of file reconstructor.h.
Referenced by EMAN::WienerFourierReconstructor::pixel_at(), EMAN::FourierReconstructor::pixel_at(), EMAN::FourierReconstructor::setup(), and EMAN::FourierReconstructor::setup_seed().
EMData* EMAN::ReconstructorVolumeData::tmp_data [protected] |
Inheriting class may allocate this, probably in setup().
Definition at line 226 of file reconstructor.h.
Referenced by EMAN::FourierReconstructor::clear(), EMAN::FourierReconstructor::do_compare_slice_work(), EMAN::FourierReconstructor::do_insert_slice_work(), EMAN::WienerFourierReconstructor::finish(), EMAN::FourierReconstructor::finish(), free_memory(), EMAN::FourierReconstructor::free_memory(), EMAN::BackProjectionReconstructor::insert_slice(), EMAN::FourierReconstructorSimple2D::insert_slice(), EMAN::FourierReconstructor::load_default_settings(), EMAN::FourierReconstructor::load_inserter(), normalize_threed(), EMAN::WienerFourierReconstructor::pixel_at(), EMAN::FourierReconstructor::pixel_at(), EMAN::FourierReconstructor::setup(), EMAN::FourierReconstructorSimple2D::setup(), EMAN::FourierReconstructor::setup_seed(), and zero_memory().