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.
Matrix<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<Float> myModel(model); // now calculate the convolution of the model and the psf Matrix<Float> prediction; convEqn.evaluate(myModel, prediction); // and calculate the difference between the predicted and actual convolution Matrix<Float> residual; convEqn.residual(mymodel, residual)
Construct the ConvolutionEquation setting the psf and measured data
Construct the ConvolutionEquation setting the psf and measured data Even though a MaskedArray is used as an arguement the mask is discarded internally and hence not used by residual().
Somewhere I read that a destructor should alway be defined even if it does nothing (as this one does).
Do the convolution of the model supplied by the LinearModel class with the internal psf. Return the answer in result .
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.
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.
Do the convolution of the a point source model at position 'position' with amplitude 'amplitude' and the internal psf. Return the answer in result.
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.
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.
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
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.
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.
return the psf size used in the convolution. The returned size does not include any zero padding