# Base Model Classes¶

All the extinction models are based on either provided in dust_extinction
or an astropy.modeling `FittableModel`

.

For examples of how all the classes in `dust_extinction`

are used, see the
implemented models.

## All¶

All dust extinction models have at least the following:

A member variable

`x_range`

that that define the valid range of wavelengths. These are defined in inverse microns as is common for extinction curve research.A member function

`evaluate`

that computes the extinction at a given`x`

and any model parameter values. The`x`

values are checked to be within the valid`x_range`

. The`x`

values should have astropy.units. If they do not, then they are assumed to be in inverse microns and a warning is issued stating such.

All of these classes used in `dust_extinction`

are based on the
Model astropy.modeling class.
See the astropy docs for the full details of all that is possible with this class.

## FittableModel¶

The `dust_extinction`

`shape`

models are based on the astropy `FittableModel`

.
One general use case for these models is to fit observed dust extinction curves.
See Fit Extinction Curves. These models follow the standard astropy setup for such
models. This includes defining the parameters to be fit with the astropy `Parameter`

function.

Thus all `shape`

models have:

The member variable

`x_range`

and function`evaluate`

are set in each`shape`

model explicitly.Member parameters are explicitly defined with the astropy

`Parameter`

function. This includes default starting values and any standard bounds on the parameters. The number and name of the paramaeters varies by`shape`

model.The

`evaluate`

function that calculates the extinction curve based on the input parameters. This is explicitly defined in each`shape`

model.

## BaseExtModel¶

The `BaseExtModel`

provides the base model for all
the rest of the `dust_extinction`

models. This model provides the
`extinguish`

member function (see Extinguish or Unextinguish Data).

All of the `average`

models are based on `BaseExtModel`

directly. Thus
all the `average`

models have:

The member variable

`x_range`

and function`evaluate`

(see All). These are set explicitly for each`average`

model. The`evaluate`

function may interpolate the observed average extinction curve or it may be based on a`shape`

fit to the observed data.The member function

`extinguish`

inherited from the`BaseExtModel`

.A member parameter

`Rv`

that gives the ratio of absolute to selective extinction (i.e., R(V) = A(V)/E(B-V)). This is not set with the astropy`Parameter`

function as is included mainly for reference.Member variables that give the tabulated observed extinction curve as a function of wavelength. The variables for this information are

`obsdata_x`

and`obsdata_axav`

. The accuracy of this tabulated information is given as`obsdata_tolerance`

and this is used for the automated testing and in plotting. Some models also have an`obsdata_azav_unc`

if such is available from the literature.

## BaseExtRvModel¶

The `BaseExtRvModel`

provides the base model for all
the `dust_extinction`

models that are depending on `Rv`

only. `Rv`

is the
ratio of absolute to selective extinction (i.e., R(V) = A(V)/E(B-V)). This model defines
the member variable `Rv`

that is defined using the astropy `Parameter`

function and a validator
member function `Rv`

that validates the input `Rv`

is in the `Rv_range`

. This model is based
on the `BaseExtModel`

, hence inherits the `extinguish`

member functionf

These are the majority of the `parameter_average`

models and they have:

The member variable

`x_range`

and function`evaluate`

(see All) are explicitly defined for each`paramter_average`

model. The`evaluate`

function calculates the extinction curve based on the`Rv`

value.The member function

`extinguish`

inherited from the`BasedExtRvModel`

.A member variable

`Rv`

inherited from the`BaseExtRvModel`

.A member variable

`Rv_range`

that provides the valid range of`Rv`

values.A validator member function called

`Rv`

tagged with`@Rv.validator`

that validates the input`Rv`

based on the`Rv_range`

. This is inherited from the`BaseExtRvModel`

## BaseExtRvAfAModel¶

The `BaseExtRvAfAModel`

provides the base model for all
the `dust_extinction`

models that are depending on `RvA`

and `fA`

.
These models are a mixture of two `dust_extinction`

models where the A component
is dependent on `Rv`

and the B component is not.
The `RvA`

gives the R(V) value of component A and `fA`

gives the fraction of the A
component and (1 - fA) gives the fraction of the B component.
This model defines
the member variables `RvA`

and `fA`

that are defined using the astropy `Parameter`

function and validator
member functions `RvA`

and `fA`

that validate the input `RvA`

and `fA`

are in the `Rv_range`

and `fA_range`

.
This model is based on the `BaseExtModel`

, hence inherits the `extinguish`

member function.

These `parameter_average`

models have:

The member variable

`x_range`

and function`evaluate`

(see All). The`evaluate`

function that calculates the extinction curve based on the`RvA`

and`fA`

values.The member function

`extinguish`

inherited from the`BasedExtRvAfAModel`

.Member variables

`RvA`

and`fA`

defined using the astropy`Parameter`

function inherited from the`BasedExtRvAfAModel`

.A member variable

`RvA_range`

that provides the valid range of`RvA`

values inherited from the`BasedExtRvAfAModel`

.A member variable

`fA_range`

that provides the valid range of`fA`

values inherited from the`BasedExtRvAfAModel`

.A validator member function called

`RvA`

tagged with`@RvA.validator`

that validates the input`Rv`

based on the`Rv_range`

inherited from the`BasedExtRvAfAModel`

.A validator member function called

`fA`

tagged with`@fA.validator`

that validates the input`fA`

based on the`fA_range`

inherited from the`BasedExtRvAfAModel`

.

## BaseExtGrainModel¶

The `BaseExtGrainModel`

provides the base model for all
the `dust_extinction`

models that are based on dust grain models. All these
models are provided as tabulated data tables.
This model defines a member function `evaluate`

thats interpolates the model extinction curve.
This model is based on the `BaseExtModel`

, hence inherits the `extinguish`

member function.

These `grain_model`

models have:

The member variable

`x_range`

and function`evaluate`

(see All). The`evaluate`

function is inherited from the`BaseExtGrainModel`

.The member function

`extinguish`

inherited from the`BaseExtGrainModel`

.A member parameter

`possnames`

that is a dictionary with a key that is a tag for the model (e.g.,`MWRV31`

) and a tuple that is (filename, Rv). This key is used when initialized a`grain_model`

.The member function

`__init__`

that reads in the tabular data into member functions`data_x`

and`data_axav`

.