#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 8146 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(). 08147 {
08148 if (!image) {
08149 LOGWARN("NULL Image");
08150 return;
08151 }
08152
08153 string axis = (const char*)params["axis"];
08154
08155 float* data = image->EMData::get_data();
08156
08157 int nx = image->get_xsize();
08158 int ny = image->get_ysize();
08159 int nz = image->get_zsize();
08160 size_t nxy = nx*ny;
08161
08162 int x_start = 1-nx%2;
08163 int y_start = 1-ny%2;
08164 int z_start = 1-nz%2;
08165
08166 if (axis == "x" || axis == "X") {
08167 for (int iz = 0; iz < nz; iz++)
08168 for (int iy = 0; iy < ny; iy++) {
08169 int offset = nx*iy + nxy*iz;
08170 reverse(&data[offset+x_start],&data[offset+nx]);
08171 }
08172 } else if (axis == "y" || axis == "Y") {
08173 float *tmp = new float[nx];
08174 int nhalf = ny/2;
08175 size_t beg = 0;
08176 for (int iz = 0; iz < nz; iz++) {
08177 beg = iz*nxy;
08178 for (int iy = y_start; iy < nhalf; iy++) {
08179 memcpy(tmp, &data[beg+iy*nx], nx*sizeof(float));
08180 memcpy(&data[beg+iy*nx], &data[beg+(ny-iy-1+y_start)*nx], nx*sizeof(float));
08181 memcpy(&data[beg+(ny-iy-1+y_start)*nx], tmp, nx*sizeof(float));
08182 }
08183 }
08184 delete[] tmp;
08185 } else if (axis == "z" || axis == "Z") {
08186 if(1-z_start) {
08187 int nhalf = nz/2;
08188 float *tmp = new float[nxy];
08189 for(int iz = 0;iz<nhalf;iz++){
08190 memcpy(tmp,&data[iz*nxy],nxy*sizeof(float));
08191 memcpy(&data[iz*nxy],&data[(nz-iz-1)*nxy],nxy*sizeof(float));
08192 memcpy(&data[(nz-iz-1)*nxy],tmp,nxy*sizeof(float));
08193 }
08194 delete[] tmp;
08195 } else {
08196 float *tmp = new float[nx];
08197 int nhalf = nz/2;
08198 size_t beg = 0;
08199 for (int iy = 0; iy < ny; iy++) {
08200 beg = iy*nx;
08201 for (int iz = z_start; iz < nhalf; iz++) {
08202 memcpy(tmp, &data[beg+ iz*nxy], nx*sizeof(float));
08203 memcpy(&data[beg+iz*nxy], &data[beg+(nz-iz-1+z_start)*nxy], nx*sizeof(float));
08204 memcpy(&data[beg+(nz-iz-1+z_start)*nxy], tmp, nx*sizeof(float));
08205 }
08206 }
08207 delete[] tmp;
08208 }
08209 }
08210
08211 image->update();
08212 }
|
|
|
Definition at line 220 of file processor.cpp. |
1.3.9.1