EMAN::TestImageCirclesphere Class Reference

Replace a source image as a circle or sphere depends on 2D or 3D of the source image. More...

#include <processor.h>

Inheritance diagram for EMAN::TestImageCirclesphere:

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

Collaboration graph
[legend]
List of all members.

Public Member Functions

virtual void process_inplace (EMData *image)
 To process an image in-place.
virtual string get_name () const
 Get the processor's name.
virtual string get_desc () const
 Get the descrition of this specific processor.
virtual TypeDict get_param_types () const
 Get processor parameter information in a dictionary.

Static Public Member Functions

static ProcessorNEW ()

Static Public Attributes

static const string NAME = "testimage.circlesphere"

Detailed Description

Replace a source image as a circle or sphere depends on 2D or 3D of the source image.

Parameters:
radius radius of circle or sphere
axis specify a major axis for asymmetric features
c distance between focus and the center of an ellipse
fill answer 'yes' or 'no' to specify if it's filled or hollow, default filled

Definition at line 6376 of file processor.h.


Member Function Documentation

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

Get the descrition of this specific processor.

This function must be overwritten by a subclass.

Returns:
The description of this processor.

Implements EMAN::Processor.

Definition at line 6386 of file processor.h.

06387                 {
06388                         return "Replace a source image as a circle or sphere depends on 2D or 3D of the source image";
06389                 }

virtual string EMAN::TestImageCirclesphere::get_name (  )  const [inline, virtual]

Get the processor's name.

Each processor is identified by a unique name.

Returns:
The processor's name.

Implements EMAN::Processor.

Definition at line 6381 of file processor.h.

References NAME.

06382                 {
06383                         return NAME;
06384                 }

virtual TypeDict EMAN::TestImageCirclesphere::get_param_types (  )  const [inline, virtual]

Get processor parameter information in a dictionary.

Each parameter has one record in the dictionary. Each record contains its name, data-type, and description.

Returns:
A dictionary containing the parameter info.

Reimplemented from EMAN::Processor.

Definition at line 6396 of file processor.h.

References EMAN::EMObject::FLOAT, EMAN::EMObject::INT, EMAN::TypeDict::put(), and EMAN::EMObject::STRING.

06397                 {
06398                         TypeDict d;
06399                         d.put("radius", EMObject::FLOAT, "radius of circle or sphere, unit: pixel");
06400                         d.put("axis", EMObject::STRING, "specify a major axis for asymmetric features");
06401                         d.put("c", EMObject::FLOAT, "distance between focus and the center of an ellipse");
06402                         d.put("fill", EMObject::INT, "Flag indicating if image is filled, default filled, 1 for filled, 0 for blank.");
06403                         return d;
06404                 }

static Processor* EMAN::TestImageCirclesphere::NEW (  )  [inline, static]

Definition at line 6391 of file processor.h.

06392                 {
06393                         return new TestImageCirclesphere();
06394                 }

void TestImageCirclesphere::process_inplace ( EMData image  )  [virtual]

To process an image in-place.

For those processors which can only be processed out-of-place, override this function to just print out some error message to remind user call the out-of-place version.

Parameters:
image The image to be processed.

Implements EMAN::Processor.

Definition at line 7510 of file processor.cpp.

References EMAN::EMData::get_data(), InvalidValueException, EMAN::Processor::params, EMAN::TestImageProcessor::preprocess(), EMAN::Dict::set_default(), and EMAN::EMData::update().

07511 {
07512         preprocess(image);
07513 
07514         float radius = params.set_default("radius",nx/2.0f);
07515         string axis = (const char*)params["axis"];
07516         float c =  params.set_default("c",nx/2.0f);
07517         int fill = params.set_default("fill",1);
07518 
07519         float *dat = image->get_data();
07520         float x2, y2, z2; //this is coordinates of this pixel from center
07521         float r = 0.0f;
07522         float asy = 0.0f;
07523         if(axis == ""){
07524                 asy = radius;
07525         }
07526         else if(axis == "x" || axis == "y"){
07527                 asy = c;
07528         }
07529         else if(axis=="z"){
07530                 if( nz == 1 ){
07531                         throw InvalidValueException(0, "This is a 2D image, no asymmetric feature for z axis");
07532                 }
07533                 asy = c;
07534         }
07535         else{
07536                 throw InvalidValueException(0, "please specify a valid axis for asymmetric features");
07537         }
07538 
07539         for (int k = 0; k < nz; ++k) {
07540                 for (int j = 0; j < ny; ++j) {
07541                         for (int i = 0; i < nx; ++i, ++dat) {
07542                                 x2 = fabs((float)i - nx/2);
07543                                 y2 = fabs((float)j - ny/2);
07544                                 z2 = fabs((float)k - nz/2);
07545                                 if( axis == "" ){
07546                                         r = (x2*x2)/(radius*radius) + (y2*y2)/(radius*radius) + (z2*z2)/(radius*radius);
07547                                 }
07548                                 else if (axis == "x"){
07549                                         r = (x2*x2)/(asy*asy) + (y2*y2)/(radius*radius) + (z2*z2)/(radius*radius);
07550                                 }
07551                                 else if(axis == "y"){
07552                                         r = (x2*x2)/(radius*radius) + (y2*y2)/(asy*asy) + (z2*z2)/(radius*radius);
07553                                 }
07554                                 else if(axis=="z"){
07555                                         r = (x2*x2)/(radius*radius) + (y2*y2)/(radius*radius) + (z2*z2)/(asy*asy);
07556                                 }
07557                                 if( r<=1 ) {
07558                                         if( !fill) {
07559                                                 *dat = 0;
07560                                         }
07561                                         else {
07562                                                 *dat = 1;
07563                                         }
07564                                 }
07565                                 else {
07566                                         if( !fill ) {
07567                                                 *dat = 1;
07568                                         }
07569                                         else {
07570                                                 *dat = 0;
07571                                         }
07572                                 }
07573                         }
07574                 }
07575         }
07576 
07577         image->update();
07578 }


Member Data Documentation

const string TestImageCirclesphere::NAME = "testimage.circlesphere" [static]

Definition at line 6406 of file processor.h.

Referenced by get_name().


The documentation for this class was generated from the following files:
Generated on Mon May 2 13:31:07 2011 for EMAN2 by  doxygen 1.4.7