EMAN::AmpweightFourierProcessor Class Reference

Multiplies each Fourier pixel by its amplitude. More...

#include <processor.h>

Inheritance diagram for EMAN::AmpweightFourierProcessor:

Inheritance graph
[legend]
Collaboration diagram for EMAN::AmpweightFourierProcessor:

Collaboration graph
[legend]

List of all members.

Public Member Functions

string get_name () const
 Get the processor's name.
void process_inplace (EMData *image)
 To process an image in-place.
void set_params (const Dict &new_params)
 Set the processor parameters using a key/value dictionary.
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

static ProcessorNEW ()

Protected Attributes

EMDatasum
int dosqrt


Detailed Description

Multiplies each Fourier pixel by its amplitude.

Parameters:
sum Adds the weights to sum for normalization
sqrt Weights using sqrt of the amplitude if set

Definition at line 441 of file processor.h.


Member Function Documentation

string EMAN::AmpweightFourierProcessor::get_name (  )  const [inline, virtual]

Get the processor's name.

Each processor is identified by a unique name.

Returns:
The processor's name.

Implements EMAN::Processor.

Definition at line 444 of file processor.h.

00445                 {
00446                         return "filter.ampweight";
00447                 }

void AmpweightFourierProcessor::process_inplace ( EMData image  )  [virtual]

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.

Parameters:
image The image to be processed.

Implements EMAN::Processor.

Definition at line 497 of file processor.cpp.

References EMAN::EMData::do_fft(), EMAN::EMData::do_ift(), dosqrt, EMAN::EMData::get_data(), EMAN::EMData::get_xsize(), EMAN::EMData::get_ysize(), EMAN::EMData::get_zsize(), EMAN::EMData::is_complex(), LOGWARN, sum, and EMAN::EMData::update().

00498 {
00499         EMData *fft;
00500         float *fftd;
00501         int i,f=0;
00502 //      static float sum1=0,sum1a=0;
00503 //      static double sum2=0,sum2a=0;
00504 
00505         if (!image) {
00506                 LOGWARN("NULL Image");
00507                 return;
00508         }
00509 
00510         if (!image->is_complex()) {
00511                 fft = image->do_fft();
00512                 fftd = fft->get_data();
00513                 f=1;
00514         }
00515         else {
00516                 fft=image;
00517                 fftd=image->get_data();
00518         }
00519         float *sumd = NULL;
00520         if (sum) sumd=sum->get_data();
00521 //printf("%d %d    %d %d\n",fft->get_xsize(),fft->get_ysize(),sum->get_xsize(),sum->get_ysize());
00522         int n = fft->get_xsize()*fft->get_ysize()*fft->get_zsize();
00523         for (i=0; i<n; i+=2) {
00524                 float c;
00525                 if (dosqrt) c=pow(fftd[i]*fftd[i]+fftd[i+1]*fftd[i+1],0.25f);
00526 #ifdef  _WIN32
00527                 else c = static_cast<float>(_hypot(fftd[i],fftd[i+1]));
00528 #else
00529                 else c = static_cast<float>(hypot(fftd[i],fftd[i+1]));
00530 #endif  //_WIN32
00531                 if (c==0) c=1.0e-30f;   // prevents divide by zero in normalization
00532                 fftd[i]*=c;
00533                 fftd[i+1]*=c;
00534                 if (sumd) { sumd[i]+=c; sumd[i+1]+=0; }
00535 
00536                 // debugging
00537 /*              if (i==290*1+12) {
00538                         sum1+=fftd[i];
00539                         sum2+=fftd[i];
00540                         printf("%f\t%f\t%f\t%f\t%f\t%f\n",sum1,sum2,fftd[i],fftd[i+1],sumd[i],c);
00541                 }
00542                 if (i==290*50+60) {
00543                         sum1a+=fftd[i];
00544                         sum2a+=fftd[i];
00545                         printf("%f\t%f\t%f\t%f\t%f\t%f\n",sum1a,sum2a,fftd[i],fftd[i+1],sumd[i],c);
00546         }*/
00547         }
00548 
00549         if (f) {
00550                 fft->update();
00551                 EMData *ift=fft->do_ift();
00552                 memcpy(image->get_data(),ift->get_data(),n*sizeof(float));
00553                 delete fft;
00554                 delete ift;
00555         }
00556 
00557         sum->update();
00558         image->update();
00559 
00560 }

void EMAN::AmpweightFourierProcessor::set_params ( const Dict new_params  )  [inline, virtual]

Set the processor parameters using a key/value dictionary.

Parameters:
new_params A dictionary containing the new parameters.

Reimplemented from EMAN::Processor.

Definition at line 451 of file processor.h.

References dosqrt, EMAN::Processor::params, and sum.

00452                 {
00453                         params = new_params;
00454                         sum = params["sum"];
00455                         dosqrt = params["sqrt"];
00456 //                      printf("%s %f\n",params.keys()[0].c_str(),lowpass);
00457                 }

TypeDict EMAN::AmpweightFourierProcessor::get_param_types (  )  const [inline, virtual]

Get processor parameter information in a dictionary.

Each parameter has one record in the dictionary. Each record contains its name, data-type, and description.

Returns:
A dictionary containing the parameter info.

Reimplemented from EMAN::Processor.

Definition at line 459 of file processor.h.

References EMAN::EMObject::EMDATA, EMAN::EMObject::INT, and EMAN::TypeDict::put().

00460                 {
00461                         TypeDict d;
00462                         d.put("sum", EMObject::EMDATA, "Adds the weights to sum for normalization");
00463                         d.put("sqrt", EMObject::INT, "Weights using sqrt of the amplitude if set");
00464                         return d;
00465                 }

static Processor* EMAN::AmpweightFourierProcessor::NEW (  )  [inline, static]

Definition at line 467 of file processor.h.

00468                 {
00469                         return new AmpweightFourierProcessor();
00470                 }

string EMAN::AmpweightFourierProcessor::get_desc (  )  const [inline, virtual]

Get the descrition of this specific processor.

This function must be overwritten by a subclass.

Returns:
The description of this processor.

Implements EMAN::Processor.

Definition at line 472 of file processor.h.

00473                 {
00474                         return "Multiplies each Fourier pixel by its amplitude";
00475                 }


Member Data Documentation

Definition at line 478 of file processor.h.

Referenced by process_inplace(), and set_params().

Definition at line 479 of file processor.h.

Referenced by process_inplace(), and set_params().


The documentation for this class was generated from the following files:

Generated on Sat Nov 21 02:20:23 2009 for EMAN2 by  doxygen 1.5.6