casa  5.7.0-16
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Private Attributes | List of all members
casa::ConvolutionEquation Class Reference

Implements the convolution equation. More...

#include <ConvolutionEquation.h>

Inheritance diagram for casa::ConvolutionEquation:
casa::LinearEquation< casacore::Array< casacore::Float >, casacore::Array< casacore::Float > > casa::ResidualEquation< casacore::Array< casacore::Float > >

Public Member Functions

 ConvolutionEquation ()
 Construct the ConvolutionEquation. More...
 
 ConvolutionEquation (const casacore::Array< casacore::Float > &psf, const casacore::Array< casacore::Float > &dirtyImage)
 Construct the ConvolutionEquation setting the psf and measured data. More...
 
 ConvolutionEquation (const casacore::Array< casacore::Float > &psf, const casacore::MaskedArray< casacore::Float > &dirtyImage)
 Construct the ConvolutionEquation setting the psf and measured data Even though a casacore::MaskedArray is used as an arguement the mask is discarded internally and hence not used by residual(). More...
 
 ~ConvolutionEquation ()
 Somewhere I read that a destructor should alway be defined even if it does nothing (as this one does). More...
 
virtual casacore::Bool evaluate (casacore::Array< casacore::Float > &result, const LinearModel< casacore::Array< casacore::Float > > &model)
 Do the convolution of the model supplied by the LinearModel class with the internal psf. More...
 
casacore::Bool evaluate (casacore::Array< casacore::Float > &result, const LinearModel< casacore::MaskedArray< casacore::Float > > &model)
 Do the convolution of the model supplied by the LinearModel class with the internal psf. More...
 
casacore::Bool evaluate (casacore::MaskedArray< casacore::Float > &result, const LinearModel< casacore::MaskedArray< casacore::Float > > &model)
 Do the convolution of the model supplied by the LinearModel class with the internal psf. More...
 
casacore::Bool evaluate (casacore::Array< casacore::Float > &result, const casacore::IPosition &position, const casacore::Float amplitude, const casacore::IPosition &modelShape)
 Do the convolution of the a point source model at position 'position' with amplitude 'amplitude' and the internal psf. More...
 
virtual casacore::Bool residual (casacore::Array< casacore::Float > &result, const LinearModel< casacore::Array< casacore::Float > > &model)
 Calculate the convolution of the model (supplied by the LinearModel class) and the psf and the difference between this and the supplied (presumably measured) convolution. More...
 
virtual casacore::Bool residual (casacore::Array< casacore::Float > &result, casacore::Float &chisq, const LinearModel< casacore::Array< casacore::Float > > &model)
 Calculate the convolution of the model (supplied by the LinearModel class) and the psf and the difference between this and the supplied (presumably measured) convolution. More...
 
virtual casacore::Bool residual (casacore::Array< casacore::Float > &result, casacore::Float &chisq, casacore::Array< casacore::Float > &mask, const LinearModel< casacore::Array< casacore::Float > > &model)
 Calculate the convolution of the model (supplied by the LinearModel class) and the psf and the difference between this and the supplied (presumably measured) convolution. More...
 
casacore::Bool residual (casacore::Array< casacore::Float > &result, const LinearModel< casacore::MaskedArray< casacore::Float > > &model)
 Calculate the convolution of the model (supplied by the LinearModel class) and the psf and the difference between this and the supplied (presumably measured) convolution. More...
 
casacore::Bool residual (casacore::MaskedArray< casacore::Float > &result, const LinearModel< casacore::MaskedArray< casacore::Float > > &model)
 Calculate the convolution of the model (supplied by the LinearModel class) and the psf and the difference between this and the supplied (presumably measured) convolution. More...
 
casacore::IPosition psfSize ()
 return the psf size used in the convolution. More...
 
void flushPsf ()
 release the storage associated with the cached psf. More...
 
- Public Member Functions inherited from casa::LinearEquation< casacore::Array< casacore::Float >, casacore::Array< casacore::Float > >
virtual ~LinearEquation ()
 A virtual destructor may be necessary for use in derived classes. More...
 
- Public Member Functions inherited from casa::ResidualEquation< casacore::Array< casacore::Float > >
virtual ~ResidualEquation ()
 A virtual destructor may be necessary for use in derived classes. More...
 
virtual casacore::Bool residual (Domain &answer, const LinearModel< Domain > &model)=0
 The canonical member of this class defines a function which gives the residual when the model is propagated through the equation and compared with the data. More...
 
virtual casacore::Bool residual (Domain &answer, casacore::Float &chisq, const LinearModel< Domain > &model)=0
 Same as above, but also calculates Chi^2 (rms of residual image) More...
 
virtual casacore::Bool residual (Domain &answer, casacore::Float &chisq, Domain &mask, const LinearModel< Domain > &model)=0
 Same as above, but also calculates Chi^2 (rms of residual image) considering a mask image. More...
 

Private Attributes

casacore::Array< casacore::FloattheMeas
 
casacore::Array< casacore::FloatthePsf
 
casacore::IPosition theRealPsfSize
 
casacore::IPosition thePsfOrigin
 
casacore::Convolver
< casacore::Float
theConv
 

Detailed Description

Implements the convolution equation.

Intended use:

Internal

Review Status

Date Reviewed:
yyyy/mm/dd

Prerequisite

Etymology

This class implements convolution within the LinearEquation framework.

Synopsis

This class is used in conjunction with classes like HogbomCleanModel to implement deconvolution algorithms. This class contains the point spread function (psf) and the convolved data (dirty image), and is able to convolve a supplied model with the psf to produce a predicted output (using the evaluate() function), or to subtract the convolved data and produce a residual (using the residual() function).

See the documentation for HogbomCleanModel for an example of how this class can be used to perform deconvolution.

This class also contains specialised functions (like the version of evaluate() for a point source model) that speed up the calculation of the convolution. This specialised version of evaluate() does not need to actually perform the convolution and instead returns a suitable part of the psf (zero padded if necessary). When this function is called this class will get the psf from the convolver and cache it, on the assumption that many evaluations of this function will be requested (as occurs in Clean algorithms).

The size and shape of the psf and the supplied model may be different. The only restriction is that the dimension of the psf must be less than or equal to the dimension of the model. If the dimension of the model is larger than the dimension of the psf then the convolution will be repeated along the slowest moving (last) axis. The dirty image and the supplied model must be the same size and shape.

This class can also operate on MaskedArrays (and models representable by MaskedArrays). But the mask is currently discarded and the convolution performed on the entire supplied model. This may change in the future.

Example

casacore::Matrix<casacore::Float> psf(4,4), dirty(20,20), model(20,20);
.... put some meaningful values into these Arrays...\.
// create a convolution equation, and an array model
ConvolutionEquation convEqn(psf, dirty);
ArrayModel<casacore::Float> myModel(model);
// now calculate the convolution of the model and the psf
convEqn.evaluate(myModel, prediction);
// and calculate the difference between the predicted and actual convolution
convEqn.residual(mymodel, residual)

Motivation

This class was designed with deconvolution in mind.

To Do

Definition at line 123 of file ConvolutionEquation.h.

Constructor & Destructor Documentation

casa::ConvolutionEquation::ConvolutionEquation ( )

Construct the ConvolutionEquation.

Until I write some functions for setting the private data the default constructor is essentially useless

casa::ConvolutionEquation::ConvolutionEquation ( const casacore::Array< casacore::Float > &  psf,
const casacore::Array< casacore::Float > &  dirtyImage 
)

Construct the ConvolutionEquation setting the psf and measured data.

casa::ConvolutionEquation::ConvolutionEquation ( const casacore::Array< casacore::Float > &  psf,
const casacore::MaskedArray< casacore::Float > &  dirtyImage 
)

Construct the ConvolutionEquation setting the psf and measured data Even though a casacore::MaskedArray is used as an arguement the mask is discarded internally and hence not used by residual().

casa::ConvolutionEquation::~ConvolutionEquation ( )

Somewhere I read that a destructor should alway be defined even if it does nothing (as this one does).

Member Function Documentation

virtual casacore::Bool casa::ConvolutionEquation::evaluate ( casacore::Array< casacore::Float > &  result,
const LinearModel< casacore::Array< casacore::Float > > &  model 
)
virtual

Do the convolution of the model supplied by the LinearModel class with the internal psf.

Return the answer in result.

Implements casa::LinearEquation< casacore::Array< casacore::Float >, casacore::Array< casacore::Float > >.

casacore::Bool casa::ConvolutionEquation::evaluate ( casacore::Array< casacore::Float > &  result,
const LinearModel< casacore::MaskedArray< casacore::Float > > &  model 
)

Do the convolution of the model supplied by the LinearModel class with the internal psf.

Return the answer in result. This version uses Masked arrays. but the mask is currently discarded internally.

casacore::Bool casa::ConvolutionEquation::evaluate ( casacore::MaskedArray< casacore::Float > &  result,
const LinearModel< casacore::MaskedArray< casacore::Float > > &  model 
)

Do the convolution of the model supplied by the LinearModel class with the internal psf.

Return the answer in result. This version uses MaskedArrays, but the mask is not currently used. However the model mask is transfered to the result unchanged.

casacore::Bool casa::ConvolutionEquation::evaluate ( casacore::Array< casacore::Float > &  result,
const casacore::IPosition position,
const casacore::Float  amplitude,
const casacore::IPosition modelShape 
)

Do the convolution of the a point source model at position 'position' with amplitude 'amplitude' and the internal psf.

Return the answer in result.

void casa::ConvolutionEquation::flushPsf ( )

release the storage associated with the cached psf.

The psf can however still be recovered from the casacore::Convolver object

casacore::IPosition casa::ConvolutionEquation::psfSize ( )

return the psf size used in the convolution.

The returned size does not include any zero padding

virtual casacore::Bool casa::ConvolutionEquation::residual ( casacore::Array< casacore::Float > &  result,
const LinearModel< casacore::Array< casacore::Float > > &  model 
)
virtual

Calculate the convolution of the model (supplied by the LinearModel class) and the psf and the difference between this and the supplied (presumably measured) convolution.

Implements casa::LinearEquation< casacore::Array< casacore::Float >, casacore::Array< casacore::Float > >.

virtual casacore::Bool casa::ConvolutionEquation::residual ( casacore::Array< casacore::Float > &  result,
casacore::Float chisq,
const LinearModel< casacore::Array< casacore::Float > > &  model 
)
virtual

Calculate the convolution of the model (supplied by the LinearModel class) and the psf and the difference between this and the supplied (presumably measured) convolution.

Also return chisq.

Implements casa::LinearEquation< casacore::Array< casacore::Float >, casacore::Array< casacore::Float > >.

virtual casacore::Bool casa::ConvolutionEquation::residual ( casacore::Array< casacore::Float > &  result,
casacore::Float chisq,
casacore::Array< casacore::Float > &  mask,
const LinearModel< casacore::Array< casacore::Float > > &  model 
)
virtual

Calculate the convolution of the model (supplied by the LinearModel class) and the psf and the difference between this and the supplied (presumably measured) convolution.

Also return chisq, considering a mask image

Implements casa::LinearEquation< casacore::Array< casacore::Float >, casacore::Array< casacore::Float > >.

casacore::Bool casa::ConvolutionEquation::residual ( casacore::Array< casacore::Float > &  result,
const LinearModel< casacore::MaskedArray< casacore::Float > > &  model 
)

Calculate the convolution of the model (supplied by the LinearModel class) and the psf and the difference between this and the supplied (presumably measured) convolution.

This version uses Masked arrays. but the mask is currently discarded internally.

casacore::Bool casa::ConvolutionEquation::residual ( casacore::MaskedArray< casacore::Float > &  result,
const LinearModel< casacore::MaskedArray< casacore::Float > > &  model 
)

Calculate the convolution of the model (supplied by the LinearModel class) and the psf and the difference between this and the supplied (presumably measured) convolution.

This version uses Masked arrays. but the mask is currently discarded in the calculations and transfered unchanged from the model to the result.

Member Data Documentation

casacore::Convolver<casacore::Float> casa::ConvolutionEquation::theConv
private

Definition at line 218 of file ConvolutionEquation.h.

casacore::Array<casacore::Float> casa::ConvolutionEquation::theMeas
private

Definition at line 214 of file ConvolutionEquation.h.

casacore::Array<casacore::Float> casa::ConvolutionEquation::thePsf
private

Definition at line 215 of file ConvolutionEquation.h.

casacore::IPosition casa::ConvolutionEquation::thePsfOrigin
private

Definition at line 217 of file ConvolutionEquation.h.

casacore::IPosition casa::ConvolutionEquation::theRealPsfSize
private

Definition at line 216 of file ConvolutionEquation.h.


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