#include <processor.h>
Inheritance diagram for EMAN::TestImageCirclesphere:


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 | |
| Processor * | NEW () |
Static Public Attributes | |
| const string | NAME = "testimage.circlesphere" |
| 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.
|
|
Get the descrition of this specific processor. This function must be overwritten by a subclass.
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 }
|
|
|
Get the processor's name. Each processor is identified by a unique name.
Implements EMAN::Processor. Definition at line 6381 of file processor.h. 06382 {
06383 return NAME;
06384 }
|
|
|
Get processor parameter information in a dictionary. Each parameter has one record in the dictionary. Each record contains its name, data-type, and description.
Reimplemented from EMAN::Processor. Definition at line 6396 of file processor.h. References EMAN::TypeDict::put(). 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 }
|
|
|
Definition at line 6391 of file processor.h. 06392 {
06393 return new TestImageCirclesphere();
06394 }
|
|
|
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.
Implements EMAN::Processor. Definition at line 7510 of file processor.cpp. References EMAN::EMData::get_data(), InvalidValueException, nx, ny, 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 }
|
|
|
Definition at line 206 of file processor.cpp. |
1.3.9.1