#include <processor_sparx.h>
Inheritance diagram for EMAN::MirrorProcessor:
Public Member Functions | |
void | process_inplace (EMData *image) |
To process an image in-place. | |
string | get_name () const |
Get the processor's name. | |
TypeDict | get_param_types () const |
Get processor parameter information in a dictionary. | |
string | get_desc () const |
Get the descrition of this specific processor. | |
Static Public Member Functions | |
Processor * | NEW () |
Static Public Attributes | |
const string | NAME = "mirror" |
axis | ''x', 'y', or 'z' axis, means mirror by changing the sign of the respective axis; |
Definition at line 48 of file processor_sparx.h.
|
Get the descrition of this specific processor. This function must be overwritten by a subclass.
Implements EMAN::Processor. Definition at line 71 of file processor_sparx.h. 00072 { 00073 return "mirror an image."; 00074 }
|
|
Get the processor's name. Each processor is identified by a unique name.
Implements EMAN::Processor. Definition at line 54 of file processor_sparx.h. 00055 {
00056 return NAME;
00057 }
|
|
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 64 of file processor_sparx.h. References EMAN::TypeDict::put(). 00065 { 00066 TypeDict d; 00067 d.put("axis", EMObject::STRING, "'x', 'y', or 'z' axis, means mirror by changing the sign of the respective axis;"); 00068 return d; 00069 }
|
|
Definition at line 59 of file processor_sparx.h. 00060 { 00061 return new MirrorProcessor(); 00062 }
|
|
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 8077 of file processor.cpp. References data, EMAN::EMData::get_xsize(), EMAN::EMData::get_ysize(), EMAN::EMData::get_zsize(), LOGWARN, nx, ny, and EMAN::EMData::update(). 08078 { 08079 if (!image) { 08080 LOGWARN("NULL Image"); 08081 return; 08082 } 08083 08084 string axis = (const char*)params["axis"]; 08085 08086 float* data = image->EMData::get_data(); 08087 08088 int nx = image->get_xsize(); 08089 int ny = image->get_ysize(); 08090 int nz = image->get_zsize(); 08091 size_t nxy = nx*ny; 08092 08093 int x_start = 1-nx%2; 08094 int y_start = 1-ny%2; 08095 int z_start = 1-nz%2; 08096 08097 if (axis == "x" || axis == "X") { 08098 for (int iz = 0; iz < nz; iz++) 08099 for (int iy = 0; iy < ny; iy++) { 08100 int offset = nx*iy + nxy*iz; 08101 reverse(&data[offset+x_start],&data[offset+nx]); 08102 } 08103 } 08104 08105 if (axis == "y" || axis == "Y") { 08106 float *tmp = new float[nx]; 08107 int nhalf = ny/2; 08108 size_t beg = 0; 08109 for (int iz = 0; iz < nz; iz++) { 08110 beg = iz*nxy; 08111 for (int iy = y_start; iy < nhalf; iy++) { 08112 memcpy(tmp, &data[beg+iy*nx], nx*sizeof(float)); 08113 memcpy(&data[beg+iy*nx], &data[beg+(ny-iy-1+y_start)*nx], nx*sizeof(float)); 08114 memcpy(&data[beg+(ny-iy-1+y_start)*nx], tmp, nx*sizeof(float)); 08115 } 08116 } 08117 delete[] tmp; 08118 } 08119 08120 if (axis == "z" || axis == "Z") { 08121 if(1-z_start){ 08122 int nhalf = nz/2; 08123 float *tmp = new float[nxy]; 08124 for(int iz = 0;iz<nhalf;iz++){ 08125 memcpy(tmp,&data[iz*nxy],nxy*sizeof(float)); 08126 memcpy(&data[iz*nxy],&data[(nz-iz-1)*nxy],nxy*sizeof(float)); 08127 memcpy(&data[(nz-iz-1)*nxy],tmp,nxy*sizeof(float)); 08128 } 08129 delete[] tmp; 08130 } 08131 else{ 08132 float *tmp = new float[nx]; 08133 int nhalf = nz/2; 08134 size_t beg = 0; 08135 for (int iy = 0; iy < ny; iy++) { 08136 beg = iy*nx; 08137 for (int iz = z_start; iz < nhalf; iz++) { 08138 memcpy(tmp, &data[beg+ iz*nxy], nx*sizeof(float)); 08139 memcpy(&data[beg+iz*nxy], &data[beg+(nz-iz-1+z_start)*nxy], nx*sizeof(float)); 08140 memcpy(&data[beg+(nz-iz-1+z_start)*nxy], tmp, nx*sizeof(float)); 08141 } 08142 } 08143 delete[] tmp; 08144 } 08145 } 08146 08147 image->update(); 08148 }
|
|
Definition at line 215 of file processor.cpp. |