Code Structure Overview
Most DysmalPy functionality is built around using galaxy objects,
which are instances of the Galaxy class.
The key attributes of galaxy are model and observations,
an ordered list which contains one or more Observation instances that
each have their own instrument attribute,
as well as optional attributes of data, mod_options, fit_options.
The data object contains information about the observed kinematic data,
and any specifics of how it was extracted
(e.g., aperture settings, gaussian or moment extraction).
The instrument object contains beam and lsf, encoding the
information to convolve an intrinsic model cube to match the observational data
(i.e., the PSF and LSF).
First, model itself contains a number of model objects in model.components.
These components are taken together to generate the full intrinsic 3D model cube
using model.simulate_cube().
To generate a model matching the observed data, and including the instrumental effects,
galaxy.create_model_data() is used (which begins by calling
model.simulate_cube() for each observation instance within galaxy
before convolving with that observation’s instrument instance
and performing any extraction).
To perform fitting with DysmalPy, a galaxy must be
constructed containing the appropriate observational data, instrumental settings,
and the model to be fit (including specifying which of the model parameters are
free or fixed, and their constraints).
The galaxy object is then passed as input to
fitter.fit(galaxy, **kwargs), where fitter is an instance of one of the
possible Fitter classes (including MPFITFitter, MCMCFitter, and NestedFitter).
These fitting routines then return a results object,
which is an instance of the MPFITResults, MCMCResults, or NestedResults
class, as appropriate.
Below is an overview schematic of the key classes and functionality of DysmalPy.