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 5062 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 5077 of file processor.h.

05078                 {
05079                         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.";
05080                 }

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 5067 of file processor.h.

References NAME.

05068                 {
05069                         return NAME;
05070                 }

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 5082 of file processor.h.

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

05083                 {
05084                         TypeDict d;
05085                         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");
05086                         d.put("snrfile", EMObject::STRING, "structure factor file name");
05087                         return d;
05088                 }

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

Definition at line 5072 of file processor.h.

05073                 {
05074                         return new SNRProcessor();
05075                 }

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 5669 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().

05670 {
05671         if (!image) {
05672                 return;
05673         }
05674 
05675         int wiener = params["wiener"];
05676         const char *snrfile = params["snrfile"];
05677 
05678         XYData sf;
05679         int err = sf.read_file(snrfile);
05680         if (err) {
05681                 LOGERR("couldn't read structure factor file!");
05682                 return;
05683         }
05684 
05685 
05686         for (size_t i = 0; i < sf.get_size(); i++) {
05687                 if (sf.get_y(i) <= 0) {
05688                         sf.set_y(i, -4.0f);
05689                 }
05690                 else {
05691                         sf.set_y(i, log10(sf.get_y(i)));
05692                 }
05693         }
05694         sf.update();
05695 
05696         Ctf *image_ctf = image->get_ctf();
05697 
05698         vector < float >ctf;
05699         if (wiener) {
05700                 ctf = image_ctf->compute_1d(image->get_ysize(),1.0f/(image_ctf->apix*image->get_ysize()), Ctf::CTF_WIENER_FILTER, &sf);
05701         }
05702         else {
05703                 ctf = image_ctf->compute_1d(image->get_ysize(),1.0f/(image_ctf->apix*image->get_ysize()), Ctf::CTF_SNR, &sf);
05704         }
05705 
05706         if(image_ctf) {delete image_ctf; image_ctf=0;}
05707 
05708         image->process_inplace("normalize.circlemean");
05709 
05710         int nx = image->get_xsize();
05711         int ny = image->get_ysize();
05712 
05713         Region clip_r(-nx / 2, -ny / 2, nx * 2, ny * 2);
05714         EMData *d3 = image->get_clip(clip_r);
05715         EMData *d2 = d3->do_fft();
05716 
05717         d2->apply_radial_func(0, 2.0f / Ctf::CTFOS, ctf, 0);
05718 
05719         if( d3 )
05720         {
05721                 delete d3;
05722                 d3 = 0;
05723         }
05724 
05725         if( image )
05726         {
05727                 delete image;
05728                 image = 0;
05729         }
05730 
05731         EMData *d1 = d2->do_ift();
05732         int d1_nx = d1->get_xsize();
05733         int d1_ny = d1->get_ysize();
05734         Region d1_r(d1_nx / 4, d1_ny / 4, d1_nx / 2, d1_ny / 2);
05735 
05736         image = d1->get_clip(d1_r);
05737 
05738         if( d1 )
05739         {
05740                 delete d1;
05741                 d1 = 0;
05742         }
05743 
05744         if( d2 )
05745         {
05746                 delete d2;
05747                 d2 = 0;
05748         }
05749 }


Member Data Documentation

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

Definition at line 5090 of file processor.h.

Referenced by get_name().


The documentation for this class was generated from the following files:
Generated on Mon Mar 7 18:10:30 2011 for EMAN2 by  doxygen 1.4.7