mdefine

**Syntax: mdefine**`[<name>[<expression>[: [<type>] [<emin><emax>]]]`

where `<name>` = the name of the model. If `<name>` is a previously
defined model with mdefine, the current definition will overwrite
the old one, and the user is warned; if it is a built-in model, however,
the user will be asked to use a different name.

`<expression>` = a string of arithmetic expression. Simple rules for expression:

- The energy term, must be 'e' or 'E' in the expression. Other words, which are not numerical constants nor internal functions, are assumed to be model parameters.
- If a convolution model varies with the location on the spectrum to be convolved, the special variable '.e' or '.E' may be used to refer to the convolution point.
- The expression may contain spaces for better readability.

`<type>` = user may optionally specify the type of the model, the valid
types are `add, mul, con`. (Mix models are not yet implemented)
Please note that the character ':' must be used to separate the
options from the `<expression>`. If `<type>` is not given default
is `add`.

`<emin>` `<emax>` = user may also specify the minimum and
maximum energy values for the model, the default values are 1.e-20 and 1.e+20, respectively.

Note that mdefine can also be used to display and delete previously defined models:

- To display the name, type and expression of all previously defined models:
XSPEC12>mdefine

- To display the name, type and expression of a previously defined model by the name, MNAME:
XSPEC12> mdefine MNAME

- To delete a previously defined model by the name, MNAME:
XSPEC12> mdefine MNAME :

**Operators:**

The following operators are recognized in an expression:

+ | = | plus operator |

- | = | minus operator |

= | multiplying operator | |

/ | = | dividing operator |

= | exponentiation operator | |

^ | = | exponentiation operator |

**Functions:**

The following internal functions are supported:

unary functions |
|||

EXP | (expr) | = | exp of a vector expression |

SIN | (expr) | = | sine of vector expression in rad |

SIND | (expr) | = | sine of a vector expression in degree |

COS | (expr) | = | cosine of a vector expression in rad |

COSD | (expr) | = | cosine of a vector expression in degree |

TAN | (expr) | = | tangent of a vector expression in rad |

TAND | (expr) | = | tangent of a vector expression in degree |

LOG | (expr) | = | base 10 log of a vector expression |

LN | (expr) | = | natural log of a vector expression |

SQRT | (expr) | = | sqrt of a vector expression |

ABS | (expr) | = | absolute value of a vector expression |

INT | (expr) | = | integer part of a vector expression |

ASIN | (expr) | = | sin^-1 of a vector expression in rad |

ACOS | (expr) | = | cos^-1 of a vector expression in rad |

MEAN | (expr) | = | mean value of a vector expression |

DIM | (expr) | = | dimension of a vector expression |

SMIN | (expr) | = | minimum value of a vector expression |

SMAX | (expr) | = | maximum value of a vector expression |

binary functions |
|||

MAX | (expr1, expr2) | = | maximum of the two vector expressions |

MIN | (expr1, expr2) | = | minimum of the two vector expressions |

**XSPEC Model Functions:**

Any XSPEC model function can be included in an mdefine expression. The complete name of the function must be used (no abbreviations) and the name should be followed by parentheses enclosing the function parameter values separated by commas. The energy is assumed and should not be included within the parentheses. For additive models the normalization parameter is not included within the parentheses but can obviously be added as a parameter in the expression.

**Examples:**

// define a model named "dplaw" with 3 parameters, p1, p2, f XSPEC12> mdef dplaw E**p1 + f*E**p2 // define a model named "junk" with 2 parameters (a, b) XSPEC12> mdef junk a*e+b*log(e)/sin(e) // define a model named "junk2" with 1 parameter, a; the option // following ":" says that it will be a multiplicative model. XSPEC12> mdef junk2 exp(-a*e) : mul // define a model named "junk3" with 1 parameter, B, options // following ":" says that this will be a multiplicative model XSPEC12> mdef junk3 0.2+B*e : mul // try to define a blackbody model with name "bb", you get warning: XSPEC12> mdef bb E**2/T**4/(exp(E/T)-1) ***Warning: bb is a pre-defined model Please use a different name for your model. // this defines a Gaussian convolution model with sigma varying with // square root of energy. XSPEC12> mdef sg exp(-E^2/(2*A*.E)) / sqrt(6.283*A*sqrt(.E)) : con // delete junk2 XSPEC12> mdef junk2 : // define a two-temperature model with common abundance and redshift XSPEC12> mdef twotemp (1-f)*apec(T1,A,z) + f*apec(T2,A,z) // define a pexrav model with parameter inclination instead of its cosine XSPEC12> mdef mypex pexrav(g,f,refl,z,A,FeA,cos(Incl)) // display all user-defined models XSPEC12> mdef -- Name ---- Type ------ Expression ----- dplaw add E**p1+f*E**p2 junk add a*E+b*LOG(E)/SIN(E) junk3 mul a+b*E sg con EXP(-E^2/(2*A*.E))/SQRT(6.283*A*SQRT(.E)) twotemp add (1-f)*apec(T1,A,z)+f*apec(T2,A,z) mypex add pexrav(g,f,refl,z,A,FeA,cos(Incl)) -----------------------------------------