EMAN::SNRProcessor Class Reference

Processor the images by the estimated SNR in each image.if parameter 'wiener' is 1, then wiener processor the images using the estimated SNR with CTF amplitude correction. More...

#include <processor.h>

Inheritance diagram for EMAN::SNRProcessor:

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

Collaboration graph
[legend]
List of all members.

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

static ProcessorNEW ()

Static Public Attributes

static const string NAME = "eman1.filter.snr"

Detailed Description

Processor the images by the estimated SNR in each image.if parameter 'wiener' is 1, then wiener processor the images using the estimated SNR with CTF amplitude correction.

Parameters:
wiener if set to 1, then use wiener processor to process the images using the estimated SNR with CTF amplitude correction
snrfile structure factor file name

Definition at line 5234 of file processor.h.


Member Function Documentation

virtual string EMAN::SNRProcessor::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 5249 of file processor.h.

05250                 {
05251                         return "Processor the images by the estimated SNR in each image.if parameter 'wiener' is 1, then wiener processor the images using the estimated SNR with CTF amplitude correction.";
05252                 }

virtual string EMAN::SNRProcessor::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 5239 of file processor.h.

References NAME.

05240                 {
05241                         return NAME;
05242                 }

virtual TypeDict EMAN::SNRProcessor::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 5254 of file processor.h.

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

05255                 {
05256                         TypeDict d;
05257                         d.put("wiener", EMObject::INT, "if set to 1,  then use wiener processor to process the images using the estimated SNR with CTF amplitude correction");
05258                         d.put("snrfile", EMObject::STRING, "structure factor file name");
05259                         return d;
05260                 }

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

Definition at line 5244 of file processor.h.

05245                 {
05246                         return new SNRProcessor();
05247                 }

void SNRProcessor::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 5861 of file processor.cpp.

References EMAN::Ctf::apix, EMAN::EMData::apply_radial_func(), EMAN::Ctf::compute_1d(), EMAN::Ctf::CTF_SNR, EMAN::Ctf::CTF_WIENER_FILTER, EMAN::Ctf::CTFOS, EMAN::EMData::do_fft(), EMAN::EMData::do_ift(), EMAN::EMData::get_clip(), EMAN::EMData::get_ctf(), EMAN::XYData::get_size(), EMAN::EMData::get_xsize(), EMAN::XYData::get_y(), EMAN::EMData::get_ysize(), log10(), LOGERR, EMAN::Processor::params, EMAN::EMData::process_inplace(), EMAN::XYData::read_file(), EMAN::XYData::set_y(), and EMAN::XYData::update().

05862 {
05863         if (!image) {
05864                 return;
05865         }
05866 
05867         int wiener = params["wiener"];
05868         const char *snrfile = params["snrfile"];
05869 
05870         XYData sf;
05871         int err = sf.read_file(snrfile);
05872         if (err) {
05873                 LOGERR("couldn't read structure factor file!");
05874                 return;
05875         }
05876 
05877 
05878         for (size_t i = 0; i < sf.get_size(); i++) {
05879                 if (sf.get_y(i) <= 0) {
05880                         sf.set_y(i, -4.0f);
05881                 }
05882                 else {
05883                         sf.set_y(i, log10(sf.get_y(i)));
05884                 }
05885         }
05886         sf.update();
05887 
05888         Ctf *image_ctf = image->get_ctf();
05889 
05890         vector < float >ctf;
05891         if (wiener) {
05892                 ctf = image_ctf->compute_1d(image->get_ysize(),1.0f/(image_ctf->apix*image->get_ysize()), Ctf::CTF_WIENER_FILTER, &sf);
05893         }
05894         else {
05895                 ctf = image_ctf->compute_1d(image->get_ysize(),1.0f/(image_ctf->apix*image->get_ysize()), Ctf::CTF_SNR, &sf);
05896         }
05897 
05898         if(image_ctf) {delete image_ctf; image_ctf=0;}
05899 
05900         image->process_inplace("normalize.circlemean");
05901 
05902         int nx = image->get_xsize();
05903         int ny = image->get_ysize();
05904 
05905         Region clip_r(-nx / 2, -ny / 2, nx * 2, ny * 2);
05906         EMData *d3 = image->get_clip(clip_r);
05907         EMData *d2 = d3->do_fft();
05908 
05909         d2->apply_radial_func(0, 2.0f / Ctf::CTFOS, ctf, 0);
05910 
05911         if( d3 )
05912         {
05913                 delete d3;
05914                 d3 = 0;
05915         }
05916 
05917         if( image )
05918         {
05919                 delete image;
05920                 image = 0;
05921         }
05922 
05923         EMData *d1 = d2->do_ift();
05924         int d1_nx = d1->get_xsize();
05925         int d1_ny = d1->get_ysize();
05926         Region d1_r(d1_nx / 4, d1_ny / 4, d1_nx / 2, d1_ny / 2);
05927 
05928         image = d1->get_clip(d1_r);
05929 
05930         if( d1 )
05931         {
05932                 delete d1;
05933                 d1 = 0;
05934         }
05935 
05936         if( d2 )
05937         {
05938                 delete d2;
05939                 d2 = 0;
05940         }
05941 }


Member Data Documentation

const string SNRProcessor::NAME = "eman1.filter.snr" [static]

Definition at line 5262 of file processor.h.

Referenced by get_name().


The documentation for this class was generated from the following files:
Generated on Fri Aug 10 16:36:32 2012 for EMAN2 by  doxygen 1.4.7