Xmipp  v3.23.11-Nereus
Public Member Functions | Public Attributes | List of all members
ProgTomoTSFilterDose Class Reference

#include <tomo_tiltseries_dose_filter.h>

Inheritance diagram for ProgTomoTSFilterDose:
Inheritance graph
[legend]
Collaboration diagram for ProgTomoTSFilterDose:
Collaboration graph
[legend]

Public Member Functions

void readParams ()
 Read argument from command line. More...
 
void show ()
 Show. More...
 
void defineParams ()
 Define parameters. More...
 
void run ()
 Run. More...
 
void initParameters ()
 
void readInputData (MetaDataVec &md)
 
double doseFilter (double dose_at_end_of_frame, double critical_dose)
 Compute the dose filter, which is the signal attenuation. More...
 
double criticalDose (double spatial_frequency)
 Given a spatial frequency, return the critical dose in electrons per square Angstroms. More...
 
double optimalDoseGivenCriticalDose (double critical_dose)
 Given the critical dose, return an estimate of the optimal dose (at which the SNR is maximised) More...
 
void applyDoseFilterToImage (int Ydim, int Xdim, const MultidimArray< std::complex< double > > &FFT1, const double dose_finish)
 Apply a dose filter to the image Fourier transform. More...
 
- Public Member Functions inherited from XmippProgram
const char * getParam (const char *param, int arg=0)
 
const char * getParam (const char *param, const char *subparam, int arg=0)
 
int getIntParam (const char *param, int arg=0)
 
int getIntParam (const char *param, const char *subparam, int arg=0)
 
double getDoubleParam (const char *param, int arg=0)
 
double getDoubleParam (const char *param, const char *subparam, int arg=0)
 
float getFloatParam (const char *param, int arg=0)
 
float getFloatParam (const char *param, const char *subparam, int arg=0)
 
void getListParam (const char *param, StringVector &list)
 
int getCountParam (const char *param)
 
bool checkParam (const char *param)
 
bool existsParam (const char *param)
 
void addParamsLine (const String &line)
 
void addParamsLine (const char *line)
 
ParamDefgetParamDef (const char *param) const
 
virtual void quit (int exit_code=0) const
 
virtual int tryRun ()
 
void initProgress (size_t total, size_t stepBin=60)
 
void setProgress (size_t value=0)
 
void endProgress ()
 
void processDefaultComment (const char *param, const char *left)
 
void setDefaultComment (const char *param, const char *comment)
 
virtual void initComments ()
 
void setProgramName (const char *name)
 
void addUsageLine (const char *line, bool verbatim=false)
 
void clearUsage ()
 
void addExampleLine (const char *example, bool verbatim=true)
 
void addSeeAlsoLine (const char *seeAlso)
 
void addKeywords (const char *keywords)
 
const char * name () const
 
virtual void usage (int verb=0) const
 
virtual void usage (const String &param, int verb=2)
 
int version () const
 
virtual void show () const
 
virtual void read (int argc, const char **argv, bool reportErrors=true)
 
virtual void read (int argc, char **argv, bool reportErrors=true)
 
void read (const String &argumentsLine)
 
 XmippProgram ()
 
 XmippProgram (int argc, const char **argv)
 
virtual ~XmippProgram ()
 

Public Attributes

double critical_dose_a
 
double critical_dose_b
 
double critical_dose_c
 
double critical_dose_at_dc
 
double voltage_scaling_factor
 
double accVoltage
 
double dose_per_image
 
double pre_exposure_amount
 
FileName fnTs
 
FileName fnOut
 
int user_supplied_first_frame
 
int user_supplied_last_frame
 
double sampling
 
double maxFreq
 
bool restore_power
 Restore noise power after filtering?', 'Renormalise the summed image after filtering. More...
 
std::vector< MultidimArray< std::complex< double > > *> frameFourierVec
 
- Public Attributes inherited from XmippProgram
bool doRun
 
bool runWithoutArgs
 
int verbose
 Verbosity level. More...
 
int debug
 

Additional Inherited Members

- Protected Member Functions inherited from XmippProgram
void defineCommons ()
 
- Protected Attributes inherited from XmippProgram
int errorCode
 
ProgramDefprogDef
 Program definition and arguments parser. More...
 
std::map< String, CommentListdefaultComments
 
int argc
 Original command line arguments. More...
 
const char ** argv
 

Detailed Description

Movie alignment correlation Parameters.

Definition at line 73 of file tomo_tiltseries_dose_filter.h.

Member Function Documentation

◆ applyDoseFilterToImage()

void ProgTomoTSFilterDose::applyDoseFilterToImage ( int  Ydim,
int  Xdim,
const MultidimArray< std::complex< double > > &  FFT1,
const double  dose_finish 
)

Apply a dose filter to the image Fourier transform.

Definition at line 110 of file tomo_tiltseries_dose_filter.cpp.

111 {
112  double ux, uy;
113  double yy;
114  double current_critical_dose, current_optimal_dose;
115  int sizeX_2 = Xdim / 2;
116  double ixsize = 1.0 / Xdim;
117  int sizeY_2 = Ydim / 2;
118  double iysize = 1.0 / Ydim;
119 
120  for (long int i = 0; i < YSIZE(FFT1); i++) //i->y,j->x xmipp convention is oposite summove
121  {
122  FFT_IDX2DIGFREQ_FAST(i, Ydim, sizeY_2, iysize, uy);
123 
124  yy = uy * uy;
125  for (long int j = 0; j < XSIZE(FFT1); j++)
126  {
127  FFT_IDX2DIGFREQ_FAST(j, Xdim, sizeX_2, ixsize, ux);
128 
129  if (i == 0 && j == 0)
130  {
131  current_critical_dose = critical_dose_at_dc;
132  }
133  else
134  {
135  current_critical_dose = criticalDose(sqrt(ux * ux + yy) / sampling);
136  }
137 
138  current_optimal_dose = 2.51284 * current_critical_dose; //This is the optimal dose given the critical dose (see Grant, Grigorief eLife 2015)
139 
140  DIRECT_A2D_ELEM(FFT1, i, j ) *= doseFilter(dose_finish, current_critical_dose);
141 
142 
143  }
144  }
145 }
#define YSIZE(v)
double criticalDose(double spatial_frequency)
Given a spatial frequency, return the critical dose in electrons per square Angstroms.
void sqrt(Image< double > &op)
#define DIRECT_A2D_ELEM(v, i, j)
#define i
double doseFilter(double dose_at_end_of_frame, double critical_dose)
Compute the dose filter, which is the signal attenuation.
#define FFT_IDX2DIGFREQ_FAST(idx, size, size_2, isize, freq)
Definition: xmipp_fft.h:54
#define XSIZE(v)
#define j

◆ criticalDose()

double ProgTomoTSFilterDose::criticalDose ( double  spatial_frequency)

Given a spatial frequency, return the critical dose in electrons per square Angstroms.

Definition at line 73 of file tomo_tiltseries_dose_filter.cpp.

◆ defineParams()

void ProgTomoTSFilterDose::defineParams ( )
virtual

Define parameters.

Reimplemented from XmippProgram.

Definition at line 55 of file tomo_tiltseries_dose_filter.cpp.

55  {
56  addUsageLine("AThis algorithm applies a dose filter based on Grant & Grigorief eLife 2015. The result will be a low pass filtered tilt series based on the applied dose.");
57  addParamsLine(" -i <tiltseries> : Metadata with the input tilt series");
58  addParamsLine(" [-o <fn=\"out.mrcs\">] : Output path for the filtered tilt series.");
59  addParamsLine(" [--sampling <Ts=1>] : Sampling rate (A/pixel)");
60  addParamsLine(" [--voltage <voltage=300>] : Acceleration voltage (kV) min_value=200.0e0,max_value=300.0e0)");
61  addExampleLine("Example", false);
62  addExampleLine("xmipp_tomo_tiltseries_dose_filter -i tiltseries.xmd -o . --sampling 2.2 --dosePerImage 2 --voltage 300");
63  addExampleLine("xmipp_tomo_tiltseries_dose_filter -i tiltseries.xmd -o . --sampling 2.2 --voltage 300");
64 }
void addExampleLine(const char *example, bool verbatim=true)
void addUsageLine(const char *line, bool verbatim=false)
void addParamsLine(const String &line)

◆ doseFilter()

double ProgTomoTSFilterDose::doseFilter ( double  dose_at_end_of_frame,
double  critical_dose 
)

Compute the dose filter, which is the signal attenuation.

Definition at line 67 of file tomo_tiltseries_dose_filter.cpp.

68 {
69  return exp((-0.5 * dose_at_end_of_frame) / critical_dose);
70 }

◆ initParameters()

void ProgTomoTSFilterDose::initParameters ( )

Set up the critical curve function (summovie)

Definition at line 78 of file tomo_tiltseries_dose_filter.cpp.

79 {
81  critical_dose_a = 0.24499;
82  critical_dose_b = -1.6649;
83  critical_dose_c = 2.8141;
84  // init with a very large number
86 
87  // Defining the scaling factor given the acceleration voltage. The methods considers only two voltage 200keV and 300keV
88  // Any other voltage would result in an error
89  if (accVoltage < 301 && accVoltage > 299.)
90  {
91  accVoltage = 300.0;
93  }
94  else
95  {
96  if (accVoltage < 201.0 && accVoltage > 199.0)
97  {
98  accVoltage = 200.0;
100  }
101  else
102  {
103  REPORT_ERROR(ERR_ARG_INCORRECT, "Bad acceleration voltage (must be 200 or 300 kV");
104  }
105 
106  }
107 
108 }
#define REPORT_ERROR(nerr, ErrormMsg)
Definition: xmipp_error.h:211
Incorrect argument received.
Definition: xmipp_error.h:113
void max(Image< double > &op1, const Image< double > &op2)

◆ optimalDoseGivenCriticalDose()

double ProgTomoTSFilterDose::optimalDoseGivenCriticalDose ( double  critical_dose)

Given the critical dose, return an estimate of the optimal dose (at which the SNR is maximised)

◆ readInputData()

void ProgTomoTSFilterDose::readInputData ( MetaDataVec md)

Definition at line 148 of file tomo_tiltseries_dose_filter.cpp.

149 {
150  size_t Xdim, Ydim, Zdim, Ndim;
151 
152  //if input is an stack create a metadata.
153  if (fnTs.isMetaData())
154  mdts.read(fnTs);
155  else
156  {
157  REPORT_ERROR(ERR_ARG_INCORRECT, "The input must be a metadata with the image filenames and the accumulated dose");
158  }
159 }
#define REPORT_ERROR(nerr, ErrormMsg)
Definition: xmipp_error.h:211
Incorrect argument received.
Definition: xmipp_error.h:113
bool isMetaData(bool failIfNotExists=true) const

◆ readParams()

void ProgTomoTSFilterDose::readParams ( )
virtual

Read argument from command line.

Reimplemented from XmippProgram.

Definition at line 35 of file tomo_tiltseries_dose_filter.cpp.

35  {
36  fnTs = getParam("-i");
37  fnOut = getParam("-o");
38  sampling = getDoubleParam("--sampling");
39  accVoltage = getDoubleParam("--voltage");
40 }
double getDoubleParam(const char *param, int arg=0)
const char * getParam(const char *param, int arg=0)

◆ run()

void ProgTomoTSFilterDose::run ( )
virtual

Run.

Reimplemented from XmippProgram.

Definition at line 162 of file tomo_tiltseries_dose_filter.cpp.

163 {
164 
165  show();
166 
167  initParameters();
168 
169  MetaDataVec mdts;
170 
171  readInputData(mdts);
172 
173  std::cout << " Starting filtering..."<< std::endl;
174 
175 
176  FourierTransformer transformer;
177  FileName fnti;
178  FileName fnOutFrame;
179 
180  Image<double> tiltImage;
181  MultidimArray<double> &ptrtiltImage = tiltImage();
182 
183  int mode = WRITE_OVERWRITE;
184  double doseTi;
185 
186  FileName fnk;
187  std::vector<FileName> ti_fn;
188  std::vector<double> ti_dose;
189 
190  for (size_t objId : mdts.ids())
191  {
192  mdts.getValue(MDL_IMAGE, fnti, objId);
193 
194  mdts.getValue(MDL_DOSE, doseTi, objId);
195 
196  ti_fn.push_back(fnti);
197  ti_dose.push_back(doseTi);
198  }
199 
200  FileName fnTsOut;
201 
202  size_t n = 0;
204 
205  for (size_t objId : mdts.ids())
206  {
207  mdts.getValue(MDL_IMAGE, fnti, objId);
208  mdts.getValue(MDL_DOSE, doseTi, objId);
209 
210  tiltImage.read(fnti);
211 
212  // Now do the Fourier transform and filter
213  transformer.FourierTransform(ptrtiltImage, FFT1, false);
214 
215  applyDoseFilterToImage((int) YSIZE(ptrtiltImage), (int) XSIZE(ptrtiltImage), FFT1, doseTi);
216 
217  transformer.inverseFourierTransform();
218 
219  fnTsOut = fnOut;
220  tiltImage.write(fnTsOut, n+FIRST_IMAGE, true, mode);
221  mode = WRITE_APPEND;
222 
223  ++n;
224 
225  }
226 }
#define YSIZE(v)
void inverseFourierTransform()
Definition: xmipp_fftw.cpp:329
void applyDoseFilterToImage(int Ydim, int Xdim, const MultidimArray< std::complex< double > > &FFT1, const double dose_finish)
Apply a dose filter to the image Fourier transform.
void write(const FileName &name="", size_t select_img=ALL_IMAGES, bool isStack=false, int mode=WRITE_OVERWRITE, CastWriteMode castMode=CW_CAST, int _swapWrite=0)
virtual IdIteratorProxy< false > ids()
#define XSIZE(v)
void mode
void FourierTransform(T &v, T1 &V, bool getCopy=true)
Definition: xmipp_fftw.h:166
bool getValue(MDObject &mdValueOut, size_t id) const override
int read(const FileName &name, DataMode datamode=DATA, size_t select_img=ALL_IMAGES, bool mapData=false, int mode=WRITE_READONLY)
#define FIRST_IMAGE
int * n
Name of an image (std::string)
void readInputData(MetaDataVec &md)
Dose e/A^2 (double)

◆ show()

void ProgTomoTSFilterDose::show ( )

Show.

Definition at line 43 of file tomo_tiltseries_dose_filter.cpp.

44 {
45  if (!verbose)
46  return;
47  std::cout << "Input movie: " << fnTs
48  << std::endl << "Output movie: "
49  << fnOut << std::endl
50  << "Sampling: " << sampling << std::endl
51  << "Acceleration_Voltage (kV): " << accVoltage << std::endl;
52 }
int verbose
Verbosity level.

Member Data Documentation

◆ accVoltage

double ProgTomoTSFilterDose::accVoltage

Definition at line 85 of file tomo_tiltseries_dose_filter.h.

◆ critical_dose_a

double ProgTomoTSFilterDose::critical_dose_a

Set up the critical curve function (summovie

Definition at line 78 of file tomo_tiltseries_dose_filter.h.

◆ critical_dose_at_dc

double ProgTomoTSFilterDose::critical_dose_at_dc

Definition at line 82 of file tomo_tiltseries_dose_filter.h.

◆ critical_dose_b

double ProgTomoTSFilterDose::critical_dose_b

Definition at line 79 of file tomo_tiltseries_dose_filter.h.

◆ critical_dose_c

double ProgTomoTSFilterDose::critical_dose_c

Definition at line 80 of file tomo_tiltseries_dose_filter.h.

◆ dose_per_image

double ProgTomoTSFilterDose::dose_per_image

Definition at line 86 of file tomo_tiltseries_dose_filter.h.

◆ fnOut

FileName ProgTomoTSFilterDose::fnOut

output tilt series

Definition at line 93 of file tomo_tiltseries_dose_filter.h.

◆ fnTs

FileName ProgTomoTSFilterDose::fnTs

input tilt series

Definition at line 90 of file tomo_tiltseries_dose_filter.h.

◆ frameFourierVec

std::vector< MultidimArray<std::complex<double> > * > ProgTomoTSFilterDose::frameFourierVec

Definition at line 110 of file tomo_tiltseries_dose_filter.h.

◆ maxFreq

double ProgTomoTSFilterDose::maxFreq

Max freq.

Definition at line 103 of file tomo_tiltseries_dose_filter.h.

◆ pre_exposure_amount

double ProgTomoTSFilterDose::pre_exposure_amount

Definition at line 87 of file tomo_tiltseries_dose_filter.h.

◆ restore_power

bool ProgTomoTSFilterDose::restore_power

Restore noise power after filtering?', 'Renormalise the summed image after filtering.

Definition at line 107 of file tomo_tiltseries_dose_filter.h.

◆ sampling

double ProgTomoTSFilterDose::sampling

Sampling rate

Definition at line 100 of file tomo_tiltseries_dose_filter.h.

◆ user_supplied_first_frame

int ProgTomoTSFilterDose::user_supplied_first_frame

frames of interest in movie

Definition at line 96 of file tomo_tiltseries_dose_filter.h.

◆ user_supplied_last_frame

int ProgTomoTSFilterDose::user_supplied_last_frame

Definition at line 97 of file tomo_tiltseries_dose_filter.h.

◆ voltage_scaling_factor

double ProgTomoTSFilterDose::voltage_scaling_factor

Definition at line 84 of file tomo_tiltseries_dose_filter.h.


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