This command calculates and selects new restraints that are a spline approximation of the selected restraints of the specified type. The type is specified byform(see Section 5.3.1),feature(Section 5.3.1) andgroup(Table 6.1). It unselects the approximated restraints.

The restraint is approximated in a certain range only, determined differently for different mathematical forms:

- Any form acting on an angle feature will be splined from to
.
`forms.Gaussian`will be splined from to , where is the mean and the standard deviation.`forms.MultiGaussian`will be splined from to , where and are the minimal and maximal means of the basis pdfs, and and are their corresponding standard deviations.`forms.Spline`will be splined using the existing range of the spline.- For user-defined forms (see Section 7.1.2) the range is
defined by their
*get_range*function. - Forms that act on multiple features, such as
`forms.MultiBinormal`or suitable user-defined forms, will result in a`ValueError`. - All other forms cannot be converted to splines, and will result in
a
`NotImplementedError`.

The spline points are distributed evenly over this range with an interval ofspline_dx.spline_dxshould be equal to the scale of the peaks of the restraint that you want to approximate reliably. The value of the restraint beyond the range is determined by linear extrapolation using the first derivatives at the bounds.

If the x-range andspline_dxare such that the number of spline points would be less thanspline_min_points, the high end of the range is increased so that there arespline_min_pointsdefining the “splined” restraint.

Ifoutputis set to'SPLINE', then tables are also written out comparing each pair of original and splined restraints.

**Example:** See **Restraints.make()** command.