ComponentUpdate.h
Classes
- ComponentUpdate -- This class updates components in UV plane (full description)
Types
- SEPARATE = 0
-
Sove each source individually
- COMBINED
-
Slove in one solution
- CLUSTER
-
Solve in clusters of sources
- N_Type
-
Number of options
- ILM = 0
-
Solve for I and l,m
- N_Solve
-
Number of solvable parameters
Interface
- Public Members
- ComponentUpdate()
- explicit ComponentUpdate(const ComponentList &model)
- ComponentUpdate(const ComponentList &model, const ComponentUpdate::Solve solve)
- ComponentUpdate(const ComponentList &model, const ComponentUpdate::Solve solve, const ComponentUpdate::Type tp)
- ~ComponentUpdate()
- void makeEquations(const Array<DComplex> &deriv, const Vector<DComplex> &data)
- Bool solve(Matrix<Double> &sol, Matrix<Double> &err)
- Private Members
- ComponentUpdate(const ComponentUpdate &other)
- ComponentUpdate &operator=(const ComponentUpdate &other)
- void init()
- void clean()
Review Status
- Date Reviewed:
- yyyy/mm/dd
Prerequisite
Etymology
Component and Update
Synopsis
This class is an update machine for model components. The updating is
done using UV-plane information (and, of course, already available
calibration information). In principle all the elements of a
component can be updated (like polarisation flux, position, etc),
but certain combinations are more useful (and orthogonal enough) to
be of practical use.
The update process works by comparing the theoretical UV-plane
expectations of a model component, with the actual UV-plane data,
and solve, in the least-squares sense) for the component data
elements. In practice the full nodel sky, as known, is subtracted
from the observed data, after which the solution for for differnces
is done. This solution can proceed in a variety of ways:
- for all model components to be solved for in one solution. In
this case the dependences between the different source components
are taken properly into account, but the number of simultaneously
to be solved unknowns can be very large.
- solve for all model components separately, as if they were the
only one producing UV-plane output. In practice this would cause
dependencies between sources (e.g. if two components have (almost)
the same position, they will both be adjusted e.g, in flux as if
they were the only one, resulting in a twice too high
adjustment. By using an (estimate of the) synthesised beam, this
can be adjusted
- a combination of the above two. If components are close
together, they will be combined as one source to be solved for,
otherwise they will be treated separately.
Non-component sky models (like images) could be adjusted for their
overall parameters (integrated flux, position) as well. This could
be added at a later stage.
Not all of the different possibilities and adjustable parameters
will be implemented initially.
Motivation
To provide an accurate way to adjust model component parameters
from the observed data, using all the available data.
To Do
Member Description
The different solution types
The different solvable parameters
Default constructor -- update not possible without one or more
set() methods.
explicit ComponentUpdate(const ComponentList &model)
Construct an update machine for the sources in the given
ComponentList, using the 'separate' type of solution, and ILM
solve. Note that the component list must be a writable one to
receive the updates.
Construct an update machine for the sources in the given
ComponentList, using the specified sovables and the separate type.
Construct an update machine for the sources in the given
ComponentList, using the specified type of solution and solvables
Destructor
void makeEquations(const Array<DComplex> &deriv, const Vector<DComplex> &data)
Create the solution equations. For each series of UV points,
provide the following information to the engine (we can speed it
up later by having raw rather than Array type interface). Needed:
- data: a vector(=data) of length equal to the number of
UV points provided in one go (nuv) representing the observed
residual data
- A Cube with dimensions (3, nsource, nuv) (the 3 for the ILM
case, but different for other solutions). nsource is the number
of sources, and the 3 are the coefficients of the derivatives (in
the default case the values provided should be X, 2pi.U.i.X and
2pi.V.i.X (i == sqrt(-1); X == the calculated UV plane value for
the source model component). In this we solve dI/I, dl and dm.
Order of indices is determined by VectorIterator...
Extra arguments possible: data weight.
Extra calls: Just provide list of data (and weight) and UVW
coordinates. Calls to some Skymodel.visibility() and/or
.derivative() would then suffice.
Improvements, by providing telescope rather than baseline based
data; proper care taken analytically of integration over time and
frequency.
Bool solve(Matrix<Double> &sol, Matrix<Double> &err)
Provide the solution (i.e. dI/I and dl, dm) with errors (standard
deviation of solution). The Matrices filled (and resized) are of
sizes 3,nsource.
Copy constructor (not implemented)
ComponentUpdate &operator=(const ComponentUpdate &other)
Assignment (not implemented)
Initialise the list of fitting areas
Empty the list of fitting areas