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


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.sinewave" |
| wavelength | wavelength in equation sin(x*2*PI/wavelength - phase*180/PI) | |
| axis | (optional) specify a major axis for asymmetric features, default x axis | |
| phase | (optional) the phase in radians | |
| az | (optional) angle in degree. for 2D image, this is the rotated angle of the image, in 3D image, it's az for euler angle. default is zero | |
| alt | (optional) angle in degree. only in 3D case, alt for euler angle, default is zero | |
| phi | (optional) angle in degree. only in 3D case, phi for euler angle, default is zero |
Definition at line 6204 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 6214 of file processor.h. 06215 {
06216 return "Replace a source image as a sine wave in specified wave length";
06217 }
|
|
|
Get the processor's name. Each processor is identified by a unique name.
Implements EMAN::Processor. Definition at line 6209 of file processor.h. Referenced by process_inplace(). 06210 {
06211 return NAME;
06212 }
|
|
|
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 6224 of file processor.h. References EMAN::TypeDict::put(). 06225 {
06226 TypeDict d;
06227 d.put("wavelength", EMObject::FLOAT, "wavelength in equation sin(x*2*PI/wavelength - phase*180/PI)");
06228 d.put("axis", EMObject::STRING, "(optional) specify a major axis for asymmetric features, default x axis");
06229 d.put("phase", EMObject::FLOAT, "(optional) the phase in radians");
06230 d.put("az", EMObject::FLOAT, "(optional) angle in degree. for 2D image, this is the rotated angle of the image, \
06231 in 3D image, it's az for euler angle. default is zero");
06232 d.put("alt", EMObject::FLOAT, "(optional) angle in degree. only in 3D case, alt for euler angle, default is zero");
06233 d.put("phi", EMObject::FLOAT, "(optional) angle in degree. only in 3D case, phi for euler angle, default is zero");
06234 return d;
06235 }
|
|
|
Definition at line 6219 of file processor.h. 06220 {
06221 return new TestImageSinewave();
06222 }
|
|
|
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 7328 of file processor.cpp. References EMAN::EMData::get_data(), get_name(), EMAN::EMData::get_ndim(), EMAN::Dict::has_key(), InvalidParameterException, LOGERR, phase(), phi, EMAN::TestImageProcessor::preprocess(), EMAN::EMData::transform(), and EMAN::EMData::update(). 07329 {
07330 preprocess(image);
07331
07332 if(!params.has_key("wavelength")) {
07333 LOGERR("%s wavelength is required parameter", get_name().c_str());
07334 throw InvalidParameterException("wavelength parameter is required.");
07335 }
07336 float wavelength = params["wavelength"];
07337
07338 string axis = "";
07339 if(params.has_key("axis")) {
07340 axis = (const char*)params["axis"];
07341 }
07342
07343 float phase = 0;
07344 if(params.has_key("phase")) {
07345 phase = params["phase"];
07346 }
07347
07348 int ndim = image->get_ndim();
07349 float * dat = image->get_data();
07350
07351 if(ndim==1) { //1D
07352 for(int i=0; i<nx; ++i, ++dat) {
07353 *dat = sin(i*(2.0f*M_PI/wavelength) + phase);
07354 }
07355 }
07356 else if(ndim==2) { //2D
07357 float alpha = 0;
07358 if(params.has_key("az")) {
07359 alpha = params["az"];
07360 }
07361 for(int j=0; j<ny; ++j) {
07362 for(int i=0; i<nx; ++i, ++dat) {
07363 if(alpha != 0) {
07364 *dat = sin((i*sin((180-alpha)*M_PI/180)+j*cos((180-alpha)*M_PI/180))*(2.0f*M_PI/wavelength) + phase);
07365 }
07366 else if(axis.compare("y")==0 || axis.compare("Y")==0) {
07367 *dat = sin(j*(2.0f*M_PI/wavelength) + phase);
07368 }
07369 else {
07370 *dat = sin(i*(2.0f*M_PI/wavelength) + phase);
07371 }
07372 }
07373 }
07374 }
07375 else { //3D
07376 float az = 0;
07377 if(params.has_key("az")) {
07378 az = params["az"];
07379 }
07380 float alt = 0;
07381 if(params.has_key("alt")) {
07382 alt = params["alt"];
07383 }
07384 float phi = 0;
07385 if(params.has_key("phi")) {
07386 phi = params["phi"];
07387 }
07388
07389 for(int k=0; k<nz; ++k) {
07390 for(int j=0; j<ny; ++j) {
07391 for(int i=0; i<nx; ++i, ++dat) {
07392 if(axis.compare("z")==0 || axis.compare("Z")==0) {
07393 *dat = sin(k*(2.0f*M_PI/wavelength) + phase);
07394 }
07395 else if(axis.compare("y")==0 || axis.compare("Y")==0) {
07396 *dat = sin(j*(2.0f*M_PI/wavelength) + phase);
07397 }
07398 else {
07399 *dat = sin(i*(2.0f*M_PI/wavelength) + phase);
07400 }
07401 }
07402 }
07403 }
07404
07405 if(az != 0 || alt != 0 || phi != 0) {
07406 Dict d("type","eman");
07407 d["az"] = az; d["phi"] = phi; d["alt"] = alt;
07408 image->transform(Transform(d));
07409 }
07410 }
07411
07412 image->update();
07413 }
|
|
|
Definition at line 206 of file processor.cpp. |
1.3.9.1