#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 6166 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 6176 of file processor.h. 06177 {
06178 return "Replace a source image as a sine wave in specified wave length";
06179 }
|
|
|
Get the processor's name. Each processor is identified by a unique name.
Implements EMAN::Processor. Definition at line 6171 of file processor.h. Referenced by process_inplace(). 06172 {
06173 return NAME;
06174 }
|
|
|
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 6186 of file processor.h. References EMAN::TypeDict::put(). 06187 {
06188 TypeDict d;
06189 d.put("wavelength", EMObject::FLOAT, "wavelength in equation sin(x*2*PI/wavelength - phase*180/PI)");
06190 d.put("axis", EMObject::STRING, "(optional) specify a major axis for asymmetric features, default x axis");
06191 d.put("phase", EMObject::FLOAT, "(optional) the phase in radians");
06192 d.put("az", EMObject::FLOAT, "(optional) angle in degree. for 2D image, this is the rotated angle of the image, \
06193 in 3D image, it's az for euler angle. default is zero");
06194 d.put("alt", EMObject::FLOAT, "(optional) angle in degree. only in 3D case, alt for euler angle, default is zero");
06195 d.put("phi", EMObject::FLOAT, "(optional) angle in degree. only in 3D case, phi for euler angle, default is zero");
06196 return d;
06197 }
|
|
|
Definition at line 6181 of file processor.h. 06182 {
06183 return new TestImageSinewave();
06184 }
|
|
|
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 7300 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(). 07301 {
07302 preprocess(image);
07303
07304 if(!params.has_key("wavelength")) {
07305 LOGERR("%s wavelength is required parameter", get_name().c_str());
07306 throw InvalidParameterException("wavelength parameter is required.");
07307 }
07308 float wavelength = params["wavelength"];
07309
07310 string axis = "";
07311 if(params.has_key("axis")) {
07312 axis = (const char*)params["axis"];
07313 }
07314
07315 float phase = 0;
07316 if(params.has_key("phase")) {
07317 phase = params["phase"];
07318 }
07319
07320 int ndim = image->get_ndim();
07321 float * dat = image->get_data();
07322
07323 if(ndim==1) { //1D
07324 for(int i=0; i<nx; ++i, ++dat) {
07325 *dat = sin(i*(2.0f*M_PI/wavelength) + phase);
07326 }
07327 }
07328 else if(ndim==2) { //2D
07329 float alpha = 0;
07330 if(params.has_key("az")) {
07331 alpha = params["az"];
07332 }
07333 for(int j=0; j<ny; ++j) {
07334 for(int i=0; i<nx; ++i, ++dat) {
07335 if(alpha != 0) {
07336 *dat = sin((i*sin((180-alpha)*M_PI/180)+j*cos((180-alpha)*M_PI/180))*(2.0f*M_PI/wavelength) + phase);
07337 }
07338 else if(axis.compare("y")==0 || axis.compare("Y")==0) {
07339 *dat = sin(j*(2.0f*M_PI/wavelength) + phase);
07340 }
07341 else {
07342 *dat = sin(i*(2.0f*M_PI/wavelength) + phase);
07343 }
07344 }
07345 }
07346 }
07347 else { //3D
07348 float az = 0;
07349 if(params.has_key("az")) {
07350 az = params["az"];
07351 }
07352 float alt = 0;
07353 if(params.has_key("alt")) {
07354 alt = params["alt"];
07355 }
07356 float phi = 0;
07357 if(params.has_key("phi")) {
07358 phi = params["phi"];
07359 }
07360
07361 for(int k=0; k<nz; ++k) {
07362 for(int j=0; j<ny; ++j) {
07363 for(int i=0; i<nx; ++i, ++dat) {
07364 if(axis.compare("z")==0 || axis.compare("Z")==0) {
07365 *dat = sin(k*(2.0f*M_PI/wavelength) + phase);
07366 }
07367 else if(axis.compare("y")==0 || axis.compare("Y")==0) {
07368 *dat = sin(j*(2.0f*M_PI/wavelength) + phase);
07369 }
07370 else {
07371 *dat = sin(i*(2.0f*M_PI/wavelength) + phase);
07372 }
07373 }
07374 }
07375 }
07376
07377 if(az != 0 || alt != 0 || phi != 0) {
07378 Dict d("type","eman");
07379 d["az"] = az; d["phi"] = phi; d["alt"] = alt;
07380 image->transform(Transform(d));
07381 }
07382 }
07383
07384 image->update();
07385 }
|
|
|
Definition at line 201 of file processor.cpp. |
1.3.9.1