sas.qtgui.Utilities.MuMag package

Subpackages

Submodules

sas.qtgui.Utilities.MuMag.MuMag module

class sas.qtgui.Utilities.MuMag.MuMag.MuMag(parent=None)

Bases: QMainWindow, Ui_MuMagTool

Main widget for the MuMag tool

__annotate_func__ = None
__annotations_cache__ = {'data': 'list[ExperimentalData] | None', 'fit_data': 'FitResults | None'}
__doc__ = 'Main widget for the MuMag tool '
__firstlineno__ = 24
__init__(parent=None)
__module__ = 'sas.qtgui.Utilities.MuMag.MuMag'
__static_attributes__ = ('chi_squared_axes', 'comparison_axes', 'comparison_canvas', 'comparison_figure', 'data', 'data_axes', 'data_figure', 'figure_canvas', 'fit_data', 'fit_results_canvas', 'fit_results_figure', 'longitudinal_scattering_axes', 'parent', 'residual_axes', 's_h_axes')
get_fit_parameters() FitParameters

Get an object containing all the parameters needed for doing the fitting

hide_everything()

Hide all plots, disable tabs

importData()

Callback for the import data button

onFit()
onHelp()
onSave()

Save button pressed

show_fit_results()

Show the results of the fit in the widget

show_input_data()

Plot Experimental Data: Generate Figure

staticMetaObject = PySide6.QtCore.QMetaObject("MuMag" inherits "QMainWindow": )
sas.qtgui.Utilities.MuMag.MuMag.main()

Show a demo of the slider

sas.qtgui.Utilities.MuMag.MuMagLib module

class sas.qtgui.Utilities.MuMag.MuMagLib.MuMagLib

Bases: object

Library for methods supporting MuMag

__annotate_func__ = None
__annotations_cache__ = {}
__dict__ = mappingproxy({'__module__': 'sas.qtgui.Utilities.MuMag.MuMagLib', '__firstlineno__': 25, '__doc__': 'Library for methods supporting MuMag', 'logger': <Logger MuMag (WARNING)>, 'mu_0': 1.2566370614359173e-06, 'directory_popup': <staticmethod(<function MuMagLib.directory_popup>)>, 'import_data': <staticmethod(<function MuMagLib.import_data>)>, 'nice_log_plot_bounds': <staticmethod(<function MuMagLib.nice_log_plot_bounds>)>, 'simple_fit': <staticmethod(<function MuMagLib.simple_fit>)>, 'sweep_exchange_A': <staticmethod(<function MuMagLib.sweep_exchange_A>)>, 'least_squares_perpendicular': <staticmethod(<function MuMagLib.least_squares_perpendicular>)>, 'least_squares_parallel': <staticmethod(<function MuMagLib.least_squares_parallel>)>, 'refine_exchange_A': <staticmethod(<function MuMagLib.refine_exchange_A>)>, 'uncertainty': <staticmethod(<function MuMagLib.uncertainty>)>, '_filename_string': <staticmethod(<function MuMagLib._filename_string>)>, 'save_data': <staticmethod(<function MuMagLib.save_data>)>, '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'MuMagLib' objects>, '__weakref__': <attribute '__weakref__' of 'MuMagLib' objects>, '__annotations_cache__': {}})
__doc__ = 'Library for methods supporting MuMag'
__firstlineno__ = 25
__module__ = 'sas.qtgui.Utilities.MuMag.MuMagLib'
__static_attributes__ = ()
__weakref__

list of weak references to the object

static _filename_string(datum: ExperimentalData)

Get the filename string associated with a bit of experimental data

static directory_popup()
static import_data(directory)

Import experimental data and get information from filenames

static least_squares_parallel(data: list[ExperimentalData], A)

Least squares fitting for a given exchange stiffness, A, parallel case

We are fitting the equation:

I_sim = I_res + response_H * S_H

= (I_res, S_H) . (1, response_H) = (I_res, S_H) . least_squares_x

finding I_res and S_H for each q value

static least_squares_perpendicular(data: list[ExperimentalData], A) LeastSquaresOutputPerpendicular

Least squares fitting for a given exchange stiffness, A, perpendicular case

We are fitting the equation:

I_sim = I_res + response_H * S_H + response_M * S_M

= (I_res, S_H, S_M) . (1, response_H, response_M) = (I_res, S_H, S_M) . least_squares_x

finding I_res, S_H, and S_M for each q value

logger = <Logger MuMag (WARNING)>
mu_0 = 1.2566370614359173e-06
static nice_log_plot_bounds(data: list[ndarray])

Get nice bounds for the loglog plots

Returns:

(lower, upper) bounds appropriate to pass to plt.xlim/ylim

static refine_exchange_A(data: list[ExperimentalData], exchange_A_initial: float, geometry: ExperimentGeometry, epsilon: float = 0.0001) LeastSquaresOutputPerpendicular | LeastSquaresOutputParallel

Refines the A parameter using Jarratt’s method of successive parabolic interpolation

static save_data(data: FitResults, directory: str)

Save the data

static simple_fit(data: list[ExperimentalData], parameters: FitParameters)

Main fitting (“simple fit”)

static sweep_exchange_A(parameters: FitParameters, data: list[ExperimentalData]) SweepOutput

Sweep over Exchange Stiffness A for perpendicular SANS geometry to get an initial estimate which can then be refined

static uncertainty(data: list[ExperimentalData], A_opt: float, geometry: ExperimentGeometry) float

Calculate the uncertainty for the optimal exchange stiffness A

sas.qtgui.Utilities.MuMag.datastructures module

class sas.qtgui.Utilities.MuMag.datastructures.ExperimentGeometry(*values)

Bases: Enum

Type of experiment

PARALLEL = 1
PERPENDICULAR = 2
__doc__ = 'Type of experiment '
__module__ = 'sas.qtgui.Utilities.MuMag.datastructures'
class sas.qtgui.Utilities.MuMag.datastructures.ExperimentalData(scattering_curve: Data1D, applied_field: float, saturation_magnetisation: float, demagnetising_field: float)

Bases: object

Datapoint used as input for the MuMag tool

__annotate_func__()
__annotations_cache__ = {'applied_field': <class 'float'>, 'demagnetising_field': <class 'float'>, 'saturation_magnetisation': <class 'float'>, 'scattering_curve': <class 'sas.qtgui.Plotting.PlotterData.Data1D'>}
__dataclass_fields__ = {'applied_field': Field(name='applied_field',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'demagnetising_field': Field(name='demagnetising_field',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'saturation_magnetisation': Field(name='saturation_magnetisation',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'scattering_curve': Field(name='scattering_curve',type=<class 'sas.qtgui.Plotting.PlotterData.Data1D'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD)}
__dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=False,slots=False,weakref_slot=False)
__dict__ = mappingproxy({'__module__': 'sas.qtgui.Utilities.MuMag.datastructures', '__firstlineno__': 40, '__doc__': 'Datapoint used as input for the MuMag tool', 'restrict_by_index': <function ExperimentalData.restrict_by_index>, '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'ExperimentalData' objects>, '__weakref__': <attribute '__weakref__' of 'ExperimentalData' objects>, '__dataclass_params__': _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=False,slots=False,weakref_slot=False), '__annotations_cache__': {'scattering_curve': <class 'sas.qtgui.Plotting.PlotterData.Data1D'>, 'applied_field': <class 'float'>, 'saturation_magnetisation': <class 'float'>, 'demagnetising_field': <class 'float'>}, '__dataclass_fields__': {'scattering_curve': Field(name='scattering_curve',type=<class 'sas.qtgui.Plotting.PlotterData.Data1D'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'applied_field': Field(name='applied_field',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'saturation_magnetisation': Field(name='saturation_magnetisation',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'demagnetising_field': Field(name='demagnetising_field',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD)}, '__replace__': <function _replace>, '__hash__': None, '__init__': <function ExperimentalData.__init__>, '__repr__': <function ExperimentalData.__repr__>, '__eq__': <function ExperimentalData.__eq__>, '__match_args__': ('scattering_curve', 'applied_field', 'saturation_magnetisation', 'demagnetising_field'), '__annotate_func__': None})
__doc__ = 'Datapoint used as input for the MuMag tool'
__eq__(other)

Return self==value.

__firstlineno__ = 40
__hash__ = None
__init__(scattering_curve: Data1D, applied_field: float, saturation_magnetisation: float, demagnetising_field: float) None
__match_args__ = ('scattering_curve', 'applied_field', 'saturation_magnetisation', 'demagnetising_field')
__module__ = 'sas.qtgui.Utilities.MuMag.datastructures'
__replace__(**changes)
__repr__()

Return repr(self).

__static_attributes__ = ()
__weakref__

list of weak references to the object

applied_field: float
demagnetising_field: float
restrict_by_index(max_index: int)

Remove all points from data up to given index

saturation_magnetisation: float
scattering_curve: Data1D
exception sas.qtgui.Utilities.MuMag.datastructures.FitFailure

Bases: Exception

Fit failed

__doc__ = 'Fit failed '
__firstlineno__ = 21
__module__ = 'sas.qtgui.Utilities.MuMag.datastructures'
__static_attributes__ = ()
__weakref__

list of weak references to the object

class sas.qtgui.Utilities.MuMag.datastructures.FitParameters(q_max: float, min_applied_field: float, exchange_A_min: float, exchange_A_max: float, exchange_A_n: int, experiment_geometry: ExperimentGeometry)

Bases: object

Input parameters for the fit

__annotate_func__()
__annotations_cache__ = {'exchange_A_max': <class 'float'>, 'exchange_A_min': <class 'float'>, 'exchange_A_n': <class 'int'>, 'experiment_geometry': <enum 'ExperimentGeometry'>, 'min_applied_field': <class 'float'>, 'q_max': <class 'float'>}
__dataclass_fields__ = {'exchange_A_max': Field(name='exchange_A_max',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'exchange_A_min': Field(name='exchange_A_min',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'exchange_A_n': Field(name='exchange_A_n',type=<class 'int'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'experiment_geometry': Field(name='experiment_geometry',type=<enum 'ExperimentGeometry'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'min_applied_field': Field(name='min_applied_field',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'q_max': Field(name='q_max',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD)}
__dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=False,slots=False,weakref_slot=False)
__dict__ = mappingproxy({'__module__': 'sas.qtgui.Utilities.MuMag.datastructures', '__firstlineno__': 64, '__doc__': 'Input parameters for the fit', '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'FitParameters' objects>, '__weakref__': <attribute '__weakref__' of 'FitParameters' objects>, '__dataclass_params__': _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=False,slots=False,weakref_slot=False), '__annotations_cache__': {'q_max': <class 'float'>, 'min_applied_field': <class 'float'>, 'exchange_A_min': <class 'float'>, 'exchange_A_max': <class 'float'>, 'exchange_A_n': <class 'int'>, 'experiment_geometry': <enum 'ExperimentGeometry'>}, '__dataclass_fields__': {'q_max': Field(name='q_max',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'min_applied_field': Field(name='min_applied_field',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'exchange_A_min': Field(name='exchange_A_min',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'exchange_A_max': Field(name='exchange_A_max',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'exchange_A_n': Field(name='exchange_A_n',type=<class 'int'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'experiment_geometry': Field(name='experiment_geometry',type=<enum 'ExperimentGeometry'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD)}, '__replace__': <function _replace>, '__hash__': None, '__init__': <function FitParameters.__init__>, '__repr__': <function FitParameters.__repr__>, '__eq__': <function FitParameters.__eq__>, '__match_args__': ('q_max', 'min_applied_field', 'exchange_A_min', 'exchange_A_max', 'exchange_A_n', 'experiment_geometry'), '__annotate_func__': None})
__doc__ = 'Input parameters for the fit'
__eq__(other)

Return self==value.

__firstlineno__ = 64
__hash__ = None
__init__(q_max: float, min_applied_field: float, exchange_A_min: float, exchange_A_max: float, exchange_A_n: int, experiment_geometry: ExperimentGeometry) None
__match_args__ = ('q_max', 'min_applied_field', 'exchange_A_min', 'exchange_A_max', 'exchange_A_n', 'experiment_geometry')
__module__ = 'sas.qtgui.Utilities.MuMag.datastructures'
__replace__(**changes)
__repr__()

Return repr(self).

__static_attributes__ = ()
__weakref__

list of weak references to the object

exchange_A_max: float
exchange_A_min: float
exchange_A_n: int
experiment_geometry: ExperimentGeometry
min_applied_field: float
q_max: float
class sas.qtgui.Utilities.MuMag.datastructures.FitResults(parameters: FitParameters, input_data: list[ExperimentalData], sweep_data: SweepOutput, refined_fit_data: LeastSquaresOutputParallel | LeastSquaresOutputPerpendicular, optimal_exchange_A_uncertainty: float)

Bases: object

Output the MuMag fit

__annotate_func__()
__annotations_cache__ = {'input_data': list[sas.qtgui.Utilities.MuMag.datastructures.ExperimentalData], 'optimal_exchange_A_uncertainty': <class 'float'>, 'parameters': <class 'sas.qtgui.Utilities.MuMag.datastructures.FitParameters'>, 'refined_fit_data': sas.qtgui.Utilities.MuMag.datastructures.LeastSquaresOutputParallel | sas.qtgui.Utilities.MuMag.datastructures.LeastSquaresOutputPerpendicular, 'sweep_data': <class 'sas.qtgui.Utilities.MuMag.datastructures.SweepOutput'>}
__dataclass_fields__ = {'input_data': Field(name='input_data',type=list[sas.qtgui.Utilities.MuMag.datastructures.ExperimentalData],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'optimal_exchange_A_uncertainty': Field(name='optimal_exchange_A_uncertainty',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'parameters': Field(name='parameters',type=<class 'sas.qtgui.Utilities.MuMag.datastructures.FitParameters'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'refined_fit_data': Field(name='refined_fit_data',type=sas.qtgui.Utilities.MuMag.datastructures.LeastSquaresOutputParallel | sas.qtgui.Utilities.MuMag.datastructures.LeastSquaresOutputPerpendicular,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'sweep_data': Field(name='sweep_data',type=<class 'sas.qtgui.Utilities.MuMag.datastructures.SweepOutput'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD)}
__dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=False,slots=False,weakref_slot=False)
__dict__ = mappingproxy({'__module__': 'sas.qtgui.Utilities.MuMag.datastructures', '__firstlineno__': 115, '__doc__': 'Output the MuMag fit ', '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'FitResults' objects>, '__weakref__': <attribute '__weakref__' of 'FitResults' objects>, '__dataclass_params__': _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=False,slots=False,weakref_slot=False), '__annotations_cache__': {'parameters': <class 'sas.qtgui.Utilities.MuMag.datastructures.FitParameters'>, 'input_data': list[sas.qtgui.Utilities.MuMag.datastructures.ExperimentalData], 'sweep_data': <class 'sas.qtgui.Utilities.MuMag.datastructures.SweepOutput'>, 'refined_fit_data': sas.qtgui.Utilities.MuMag.datastructures.LeastSquaresOutputParallel | sas.qtgui.Utilities.MuMag.datastructures.LeastSquaresOutputPerpendicular, 'optimal_exchange_A_uncertainty': <class 'float'>}, '__dataclass_fields__': {'parameters': Field(name='parameters',type=<class 'sas.qtgui.Utilities.MuMag.datastructures.FitParameters'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'input_data': Field(name='input_data',type=list[sas.qtgui.Utilities.MuMag.datastructures.ExperimentalData],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'sweep_data': Field(name='sweep_data',type=<class 'sas.qtgui.Utilities.MuMag.datastructures.SweepOutput'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'refined_fit_data': Field(name='refined_fit_data',type=sas.qtgui.Utilities.MuMag.datastructures.LeastSquaresOutputParallel | sas.qtgui.Utilities.MuMag.datastructures.LeastSquaresOutputPerpendicular,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'optimal_exchange_A_uncertainty': Field(name='optimal_exchange_A_uncertainty',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD)}, '__replace__': <function _replace>, '__hash__': None, '__init__': <function FitResults.__init__>, '__repr__': <function FitResults.__repr__>, '__eq__': <function FitResults.__eq__>, '__match_args__': ('parameters', 'input_data', 'sweep_data', 'refined_fit_data', 'optimal_exchange_A_uncertainty'), '__annotate_func__': None})
__doc__ = 'Output the MuMag fit '
__eq__(other)

Return self==value.

__firstlineno__ = 115
__hash__ = None
__init__(parameters: FitParameters, input_data: list[ExperimentalData], sweep_data: SweepOutput, refined_fit_data: LeastSquaresOutputParallel | LeastSquaresOutputPerpendicular, optimal_exchange_A_uncertainty: float) None
__match_args__ = ('parameters', 'input_data', 'sweep_data', 'refined_fit_data', 'optimal_exchange_A_uncertainty')
__module__ = 'sas.qtgui.Utilities.MuMag.datastructures'
__replace__(**changes)
__repr__()

Return repr(self).

__static_attributes__ = ()
__weakref__

list of weak references to the object

input_data: list[ExperimentalData]
optimal_exchange_A_uncertainty: float
parameters: FitParameters
refined_fit_data: LeastSquaresOutputParallel | LeastSquaresOutputPerpendicular
sweep_data: SweepOutput
class sas.qtgui.Utilities.MuMag.datastructures.LeastSquaresOutput(exchange_A: float, exchange_A_chi_sq: float, q: ndarray, I_simulated: ndarray, I_residual: ndarray, S_H: ndarray, I_residual_stdev: ndarray, S_H_stdev: ndarray)

Bases: object

Output from least squares method

I_residual: ndarray
I_residual_stdev: ndarray
I_simulated: ndarray
S_H: ndarray
S_H_stdev: ndarray
__annotate_func__()
__annotations_cache__ = {'I_residual': <class 'numpy.ndarray'>, 'I_residual_stdev': <class 'numpy.ndarray'>, 'I_simulated': <class 'numpy.ndarray'>, 'S_H': <class 'numpy.ndarray'>, 'S_H_stdev': <class 'numpy.ndarray'>, 'exchange_A': <class 'float'>, 'exchange_A_chi_sq': <class 'float'>, 'q': <class 'numpy.ndarray'>}
__dataclass_fields__ = {'I_residual': Field(name='I_residual',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'I_residual_stdev': Field(name='I_residual_stdev',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'I_simulated': Field(name='I_simulated',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'S_H': Field(name='S_H',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'S_H_stdev': Field(name='S_H_stdev',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'exchange_A': Field(name='exchange_A',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'exchange_A_chi_sq': Field(name='exchange_A_chi_sq',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'q': Field(name='q',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD)}
__dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=False,slots=False,weakref_slot=False)
__dict__ = mappingproxy({'__module__': 'sas.qtgui.Utilities.MuMag.datastructures', '__firstlineno__': 75, '__doc__': 'Output from least squares method', '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'LeastSquaresOutput' objects>, '__weakref__': <attribute '__weakref__' of 'LeastSquaresOutput' objects>, '__dataclass_params__': _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=False,slots=False,weakref_slot=False), '__annotations_cache__': {'exchange_A': <class 'float'>, 'exchange_A_chi_sq': <class 'float'>, 'q': <class 'numpy.ndarray'>, 'I_simulated': <class 'numpy.ndarray'>, 'I_residual': <class 'numpy.ndarray'>, 'S_H': <class 'numpy.ndarray'>, 'I_residual_stdev': <class 'numpy.ndarray'>, 'S_H_stdev': <class 'numpy.ndarray'>}, '__dataclass_fields__': {'exchange_A': Field(name='exchange_A',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'exchange_A_chi_sq': Field(name='exchange_A_chi_sq',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'q': Field(name='q',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'I_simulated': Field(name='I_simulated',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'I_residual': Field(name='I_residual',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'S_H': Field(name='S_H',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'I_residual_stdev': Field(name='I_residual_stdev',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'S_H_stdev': Field(name='S_H_stdev',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD)}, '__replace__': <function _replace>, '__hash__': None, '__init__': <function LeastSquaresOutput.__init__>, '__repr__': <function LeastSquaresOutput.__repr__>, '__eq__': <function LeastSquaresOutput.__eq__>, '__match_args__': ('exchange_A', 'exchange_A_chi_sq', 'q', 'I_simulated', 'I_residual', 'S_H', 'I_residual_stdev', 'S_H_stdev'), '__annotate_func__': None})
__doc__ = 'Output from least squares method'
__eq__(other)

Return self==value.

__firstlineno__ = 75
__hash__ = None
__init__(exchange_A: float, exchange_A_chi_sq: float, q: ndarray, I_simulated: ndarray, I_residual: ndarray, S_H: ndarray, I_residual_stdev: ndarray, S_H_stdev: ndarray) None
__match_args__ = ('exchange_A', 'exchange_A_chi_sq', 'q', 'I_simulated', 'I_residual', 'S_H', 'I_residual_stdev', 'S_H_stdev')
__module__ = 'sas.qtgui.Utilities.MuMag.datastructures'
__replace__(**changes)
__repr__()

Return repr(self).

__static_attributes__ = ()
__weakref__

list of weak references to the object

exchange_A: float
exchange_A_chi_sq: float
q: ndarray
class sas.qtgui.Utilities.MuMag.datastructures.LeastSquaresOutputParallel(exchange_A: float, exchange_A_chi_sq: float, q: ndarray, I_simulated: ndarray, I_residual: ndarray, S_H: ndarray, I_residual_stdev: ndarray, S_H_stdev: ndarray)

Bases: LeastSquaresOutput

Output from least squares method for parallel case

__annotate_func__ = None
__annotations_cache__ = {'I_residual': 'np.ndarray', 'I_residual_stdev': 'np.ndarray', 'I_simulated': 'np.ndarray', 'S_H': 'np.ndarray', 'S_H_stdev': 'np.ndarray', 'exchange_A': 'float', 'exchange_A_chi_sq': 'float', 'q': 'np.ndarray'}
__dataclass_fields__ = {'I_residual': Field(name='I_residual',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'I_residual_stdev': Field(name='I_residual_stdev',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'I_simulated': Field(name='I_simulated',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'S_H': Field(name='S_H',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'S_H_stdev': Field(name='S_H_stdev',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'exchange_A': Field(name='exchange_A',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'exchange_A_chi_sq': Field(name='exchange_A_chi_sq',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'q': Field(name='q',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD)}
__dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=False,slots=False,weakref_slot=False)
__doc__ = 'Output from least squares method for parallel case'
__eq__(other)

Return self==value.

__firstlineno__ = 88
__hash__ = None
__init__(exchange_A: float, exchange_A_chi_sq: float, q: ndarray, I_simulated: ndarray, I_residual: ndarray, S_H: ndarray, I_residual_stdev: ndarray, S_H_stdev: ndarray) None
__match_args__ = ('exchange_A', 'exchange_A_chi_sq', 'q', 'I_simulated', 'I_residual', 'S_H', 'I_residual_stdev', 'S_H_stdev')
__module__ = 'sas.qtgui.Utilities.MuMag.datastructures'
__replace__(**changes)
__repr__()

Return repr(self).

__static_attributes__ = ()
class sas.qtgui.Utilities.MuMag.datastructures.LeastSquaresOutputPerpendicular(exchange_A: float, exchange_A_chi_sq: float, q: ndarray, I_simulated: ndarray, I_residual: ndarray, S_H: ndarray, I_residual_stdev: ndarray, S_H_stdev: ndarray, S_M: ndarray, S_M_stdev: ndarray)

Bases: LeastSquaresOutput

Output from least squares method for perpendicular case

S_M: ndarray
S_M_stdev: ndarray
__annotate_func__()
__annotations_cache__ = {'S_M': <class 'numpy.ndarray'>, 'S_M_stdev': <class 'numpy.ndarray'>}
__dataclass_fields__ = {'I_residual': Field(name='I_residual',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'I_residual_stdev': Field(name='I_residual_stdev',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'I_simulated': Field(name='I_simulated',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'S_H': Field(name='S_H',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'S_H_stdev': Field(name='S_H_stdev',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'S_M': Field(name='S_M',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'S_M_stdev': Field(name='S_M_stdev',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'exchange_A': Field(name='exchange_A',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'exchange_A_chi_sq': Field(name='exchange_A_chi_sq',type=<class 'float'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'q': Field(name='q',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD)}
__dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=False,slots=False,weakref_slot=False)
__doc__ = 'Output from least squares method for perpendicular case'
__eq__(other)

Return self==value.

__firstlineno__ = 94
__hash__ = None
__init__(exchange_A: float, exchange_A_chi_sq: float, q: ndarray, I_simulated: ndarray, I_residual: ndarray, S_H: ndarray, I_residual_stdev: ndarray, S_H_stdev: ndarray, S_M: ndarray, S_M_stdev: ndarray) None
__match_args__ = ('exchange_A', 'exchange_A_chi_sq', 'q', 'I_simulated', 'I_residual', 'S_H', 'I_residual_stdev', 'S_H_stdev', 'S_M', 'S_M_stdev')
__module__ = 'sas.qtgui.Utilities.MuMag.datastructures'
__replace__(**changes)
__repr__()

Return repr(self).

__static_attributes__ = ()
exception sas.qtgui.Utilities.MuMag.datastructures.LoadFailure

Bases: Exception

File loading failed

__doc__ = 'File loading failed '
__firstlineno__ = 16
__module__ = 'sas.qtgui.Utilities.MuMag.datastructures'
__static_attributes__ = ()
__weakref__

list of weak references to the object

class sas.qtgui.Utilities.MuMag.datastructures.SweepOutput(exchange_A_checked: ndarray, exchange_A_chi_sq: ndarray, optimal: T)

Bases: Generic[T]

Results from brute force optimisiation of the chi squared for the exchange A parameter

__annotate_func__()
__annotations_cache__ = {'exchange_A_checked': <class 'numpy.ndarray'>, 'exchange_A_chi_sq': <class 'numpy.ndarray'>, 'optimal': ~T}
__dataclass_fields__ = {'exchange_A_checked': Field(name='exchange_A_checked',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'exchange_A_chi_sq': Field(name='exchange_A_chi_sq',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'optimal': Field(name='optimal',type=~T,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD)}
__dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=False,slots=False,weakref_slot=False)
__dict__ = mappingproxy({'__module__': 'sas.qtgui.Utilities.MuMag.datastructures', '__firstlineno__': 104, '__doc__': '\nResults from brute force optimisiation of the chi squared for the exchange A parameter\n', '__static_attributes__': (), '__orig_bases__': (typing.Generic[~T],), '__dict__': <attribute '__dict__' of 'SweepOutput' objects>, '__weakref__': <attribute '__weakref__' of 'SweepOutput' objects>, '__parameters__': (~T,), '__dataclass_params__': _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=False,slots=False,weakref_slot=False), '__annotations_cache__': {'exchange_A_checked': <class 'numpy.ndarray'>, 'exchange_A_chi_sq': <class 'numpy.ndarray'>, 'optimal': ~T}, '__dataclass_fields__': {'exchange_A_checked': Field(name='exchange_A_checked',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'exchange_A_chi_sq': Field(name='exchange_A_chi_sq',type=<class 'numpy.ndarray'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD), 'optimal': Field(name='optimal',type=~T,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,doc=None,_field_type=_FIELD)}, '__replace__': <function _replace>, '__hash__': None, '__init__': <function SweepOutput.__init__>, '__repr__': <function SweepOutput.__repr__>, '__eq__': <function SweepOutput.__eq__>, '__match_args__': ('exchange_A_checked', 'exchange_A_chi_sq', 'optimal'), '__annotate_func__': None})
__doc__ = '\nResults from brute force optimisiation of the chi squared for the exchange A parameter\n'
__eq__(other)

Return self==value.

__firstlineno__ = 104
__hash__ = None
__init__(exchange_A_checked: ndarray, exchange_A_chi_sq: ndarray, optimal: T) None
__match_args__ = ('exchange_A_checked', 'exchange_A_chi_sq', 'optimal')
__module__ = 'sas.qtgui.Utilities.MuMag.datastructures'
__orig_bases__ = (typing.Generic[~T],)
__parameters__ = (~T,)
__replace__(**changes)
__repr__()

Return repr(self).

__static_attributes__ = ()
__weakref__

list of weak references to the object

exchange_A_checked: ndarray
exchange_A_chi_sq: ndarray
optimal: T

sas.qtgui.Utilities.MuMag.models module

sas.qtgui.Utilities.MuMag.models.LorentzianModelPAR(q, A, M_s, H_0, H_dem, a_H, l_c)

Lorentzian Model for the generation of clean synthetic test data for parallel SANS geometry

sas.qtgui.Utilities.MuMag.models.LorentzianModelPERP(q, A, M_s, H_0, H_dem, a_H, a_M, l_c)

Lorentzian Model for the generation of clean synthetic test data for perpendicular SANS geometry

sas.qtgui.Utilities.MuMag.models.LorentzianNoisyModelPERP(q, A, M_s, H_0, H_dem, a_H, a_M, l_c, beta)

Lorentzian Model for the generation of noisy synthetic test data for perpendicular SANS geometry

sas.qtgui.Utilities.MuMag.models.SANS_Model_PAR(q, S_H, I_res, M_s, H_0, H_dem, A)

1D-Cross-Section of the parallel model

sas.qtgui.Utilities.MuMag.models.SANS_Model_PERP(q, S_H, S_M, I_res, M_s, H_0, H_dem, A)

1D-Cross-Section of the perendicular model

Module contents