EMAN2
Public Member Functions | Static Public Member Functions | Static Public Attributes | Private Member Functions
EMAN::FourierInserter3DMode3 Class Reference

FourierPixelInserter3DMode3 - encapsulates "method 3" for inserting a 2D Fourier slice into a 3D volume See comments in FourierPixelInserter3D for explanations. More...

#include <reconstructor_tools.h>

Inheritance diagram for EMAN::FourierInserter3DMode3:
Inheritance graph
[legend]
Collaboration diagram for EMAN::FourierInserter3DMode3:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 FourierInserter3DMode3 ()
virtual ~FourierInserter3DMode3 ()
virtual bool insert_pixel (const float &xx, const float &yy, const float &zz, const std::complex< float > dt, const float &weight=1.0)
 Insert a complex pixel [dt[0]+dt[1]i] at (float) coordinate [xx,yy,zz] with weighting into a discrete 3D volume.
virtual string get_name () const
 Get the unique name of this class (especially for factory based instantiation access)
virtual string get_desc () const
 Get a clear, concise description of this class.

Static Public Member Functions

static FourierPixelInserter3DNEW ()

Static Public Attributes

static const string NAME = "gauss_3"

Private Member Functions

 FourierInserter3DMode3 (const FourierInserter3DMode3 &)
FourierInserter3DMode3operator= (const FourierInserter3DMode3 &)

Detailed Description

FourierPixelInserter3DMode3 - encapsulates "method 3" for inserting a 2D Fourier slice into a 3D volume See comments in FourierPixelInserter3D for explanations.

Definition at line 225 of file reconstructor_tools.h.


Constructor & Destructor Documentation

EMAN::FourierInserter3DMode3::FourierInserter3DMode3 ( ) [inline]

Definition at line 228 of file reconstructor_tools.h.

Referenced by NEW().

{}
virtual EMAN::FourierInserter3DMode3::~FourierInserter3DMode3 ( ) [inline, virtual]

Definition at line 229 of file reconstructor_tools.h.

{}
EMAN::FourierInserter3DMode3::FourierInserter3DMode3 ( const FourierInserter3DMode3 ) [private]

Member Function Documentation

virtual string EMAN::FourierInserter3DMode3::get_desc ( ) const [inline, virtual]

Get a clear, concise description of this class.

Returns:
a clear, concise description of this class

Implements EMAN::FactoryBase.

Definition at line 243 of file reconstructor_tools.h.

                        {
                                return "Fourier pixel insertion using a 3x3x3 Gaussian kernel";
                        }
virtual string EMAN::FourierInserter3DMode3::get_name ( ) const [inline, virtual]

Get the unique name of this class (especially for factory based instantiation access)

Returns:
the unique name of this class

Implements EMAN::FactoryBase.

Definition at line 238 of file reconstructor_tools.h.

References NAME.

                        {
                                return NAME;
                        }
bool FourierInserter3DMode3::insert_pixel ( const float &  xx,
const float &  yy,
const float &  zz,
const std::complex< float >  dt,
const float &  weight = 1.0 
) [virtual]

Insert a complex pixel [dt[0]+dt[1]i] at (float) coordinate [xx,yy,zz] with weighting into a discrete 3D volume.

Parameters:
xxthe floating point x coordinate
yythe floating point y coordinate
zzthe floating point z coordinate
dtthe complex pixel value (dt[0] is real, dt[1] is imaginary)
weightthe weight to given to this complex pixel
Returns:
A boolean that indicates the pixel has been inserted (or not)

Implements EMAN::FourierPixelInserter3D.

Definition at line 185 of file reconstructor_tools.cpp.

References EMAN::EMData::add_complex_at_fast(), EMAN::FourierPixelInserter3D::data, EMAN::Util::fast_exp(), EMAN::Util::hypot3(), EMAN::Util::hypot3sq(), EMAN::EMConsts::I3G, EMAN::FourierPixelInserter3D::norm, EMAN::FourierPixelInserter3D::nx2, EMAN::FourierPixelInserter3D::ny2, EMAN::FourierPixelInserter3D::nz2, and EMAN::FourierPixelInserter3D::subx0.

{
        int x0 = (int) floor(xx-.5);
        int y0 = (int) floor(yy-.5);
        int z0 = (int) floor(zz-.5);
        
        if (subx0<0) {                  // normal full reconstruction
                if (x0<-nx2-2 || y0<-ny2-2 || z0<-nz2-2 || x0>nx2+1 || y0>ny2+1 || z0>nz2+1 ) return false;

                // no error checking on add_complex_fast, so we need to be careful here
                int x1=x0+2;
                int y1=y0+2;
                int z1=z0+2;
                if (x0<-nx2) x0=-nx2;
                if (x1>nx2) x1=nx2;
                if (y0<-ny2) y0=-ny2;
                if (y1>ny2) y1=ny2;
                if (z0<-nz2) z0=-nz2;
                if (z1>nz2) z1=nz2;
                
//              float h=2.0/((1.0+pow(Util::hypot3sq(xx,yy,zz),.5))*EMConsts::I2G);
//              float h=2.0/EMConsts::I3G;
                float h=32.0f/((8.0f+Util::hypot3(xx,yy,zz))*EMConsts::I3G);
//              float w=weight;
                float w=weight/(1.0f+6.0f*Util::fast_exp(-h)+12*Util::fast_exp(-h*2.0f)+8*Util::fast_exp(-h*3.0f));     // approx normalization so higer radii aren't upweighted relative to lower due to wider Gaussian
                //size_t idx;
                float r, gg;
//              int pc=0;
                for (int k = z0 ; k <= z1; k++) {
                        for (int j = y0 ; j <= y1; j++) {
                                for (int i = x0; i <= x1; i ++) {
                                        r = Util::hypot3sq((float) i - xx, (float)j - yy, (float)k - zz);
//                                      gg=weight;
                                        gg = Util::fast_exp(-r *h)*w;
//                                      gg = Util::fast_exp(-r / EMConsts::I2G)*weight;
//                                      gg = sqrt(Util::fast_exp(-r / EMConsts::I2G))*weight;
                                        
                                        size_t off;
                                        off=data->add_complex_at_fast(i,j,k,dt*gg);
                                        norm[off/2]+=gg;
                                }
                        }
                }
                return true;
        }
        printf("region writing not supported in mode 3\n");
        return false;
}
static FourierPixelInserter3D* EMAN::FourierInserter3DMode3::NEW ( ) [inline, static]

Definition at line 233 of file reconstructor_tools.h.

References FourierInserter3DMode3().

                        {
                                return new FourierInserter3DMode3();
                        }
FourierInserter3DMode3& EMAN::FourierInserter3DMode3::operator= ( const FourierInserter3DMode3 ) [private]

Member Data Documentation

const string FourierInserter3DMode3::NAME = "gauss_3" [static]

Definition at line 248 of file reconstructor_tools.h.

Referenced by get_name().


The documentation for this class was generated from the following files: