annotate fit.py @ 0:98e23dff1de2 draft default tip

planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
author rv43
date Tue, 21 Mar 2023 16:22:42 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1 #!/usr/bin/env python3
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
3 # -*- coding: utf-8 -*-
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
4 """
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
5 Created on Mon Dec 6 15:36:22 2021
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
6
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
7 @author: rv43
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
8 """
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
9
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
10 import logging
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
11
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
12 from asteval import Interpreter, get_ast_names
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
13 from copy import deepcopy
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
14 from lmfit import Model, Parameters
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
15 from lmfit.model import ModelResult
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
16 from lmfit.models import ConstantModel, LinearModel, QuadraticModel, PolynomialModel,\
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
17 ExponentialModel, StepModel, RectangleModel, ExpressionModel, GaussianModel,\
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
18 LorentzianModel
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
19 import numpy as np
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
20 from os import cpu_count, getpid, listdir, mkdir, path
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
21 from re import compile, sub
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
22 from shutil import rmtree
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
23 try:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
24 from sympy import diff, simplify
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
25 except:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
26 pass
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
27 try:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
28 from joblib import Parallel, delayed
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
29 have_joblib = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
30 except:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
31 have_joblib = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
32 try:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
33 import xarray as xr
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
34 have_xarray = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
35 except:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
36 have_xarray = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
37
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
38 try:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
39 from .general import illegal_value, is_int, is_dict_series, is_index, index_nearest, \
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
40 almost_equal, quick_plot #, eval_expr
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
41 except:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
42 try:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
43 from sys import path as syspath
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
44 syspath.append(f'/nfs/chess/user/rv43/msnctools/msnctools')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
45 from general import illegal_value, is_int, is_dict_series, is_index, index_nearest, \
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
46 almost_equal, quick_plot #, eval_expr
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
47 except:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
48 from general import illegal_value, is_int, is_dict_series, is_index, index_nearest, \
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
49 almost_equal, quick_plot #, eval_expr
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
50
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
51 from sys import float_info
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
52 float_min = float_info.min
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
53 float_max = float_info.max
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
54
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
55 # sigma = fwhm_factor*fwhm
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
56 fwhm_factor = {
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
57 'gaussian': f'fwhm/(2*sqrt(2*log(2)))',
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
58 'lorentzian': f'0.5*fwhm',
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
59 'splitlorentzian': f'0.5*fwhm', # sigma = sigma_r
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
60 'voight': f'0.2776*fwhm', # sigma = gamma
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
61 'pseudovoight': f'0.5*fwhm'} # fraction = 0.5
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
62
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
63 # amplitude = height_factor*height*fwhm
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
64 height_factor = {
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
65 'gaussian': f'height*fwhm*0.5*sqrt(pi/log(2))',
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
66 'lorentzian': f'height*fwhm*0.5*pi',
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
67 'splitlorentzian': f'height*fwhm*0.5*pi', # sigma = sigma_r
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
68 'voight': f'3.334*height*fwhm', # sigma = gamma
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
69 'pseudovoight': f'1.268*height*fwhm'} # fraction = 0.5
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
70
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
71 class Fit:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
72 """Wrapper class for lmfit
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
73 """
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
74 def __init__(self, y, x=None, models=None, normalize=True, **kwargs):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
75 if not isinstance(normalize, bool):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
76 raise ValueError(f'Invalid parameter normalize ({normalize})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
77 self._mask = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
78 self._model = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
79 self._norm = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
80 self._normalized = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
81 self._parameters = Parameters()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
82 self._parameter_bounds = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
83 self._parameter_norms = {}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
84 self._linear_parameters = []
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
85 self._nonlinear_parameters = []
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
86 self._result = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
87 self._try_linear_fit = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
88 self._y = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
89 self._y_norm = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
90 self._y_range = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
91 if 'try_linear_fit' in kwargs:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
92 try_linear_fit = kwargs.pop('try_linear_fit')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
93 if not isinstance(try_linear_fit, bool):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
94 illegal_value(try_linear_fit, 'try_linear_fit', 'Fit.fit', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
95 self._try_linear_fit = try_linear_fit
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
96 if y is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
97 if isinstance(y, (tuple, list, np.ndarray)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
98 self._x = np.asarray(x)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
99 elif have_xarray and isinstance(y, xr.DataArray):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
100 if x is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
101 logging.warning('Ignoring superfluous input x ({x}) in Fit.__init__')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
102 if y.ndim != 1:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
103 illegal_value(y.ndim, 'DataArray dimensions', 'Fit:__init__', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
104 self._x = np.asarray(y[y.dims[0]])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
105 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
106 illegal_value(y, 'y', 'Fit:__init__', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
107 self._y = y
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
108 if self._x.ndim != 1:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
109 raise ValueError(f'Invalid dimension for input x ({self._x.ndim})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
110 if self._x.size != self._y.size:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
111 raise ValueError(f'Inconsistent x and y dimensions ({self._x.size} vs '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
112 f'{self._y.size})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
113 if 'mask' in kwargs:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
114 self._mask = kwargs.pop('mask')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
115 if self._mask is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
116 y_min = float(self._y.min())
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
117 self._y_range = float(self._y.max())-y_min
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
118 if normalize and self._y_range > 0.0:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
119 self._norm = (y_min, self._y_range)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
120 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
121 self._mask = np.asarray(self._mask).astype(bool)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
122 if self._x.size != self._mask.size:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
123 raise ValueError(f'Inconsistent x and mask dimensions ({self._x.size} vs '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
124 f'{self._mask.size})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
125 y_masked = np.asarray(self._y)[~self._mask]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
126 y_min = float(y_masked.min())
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
127 self._y_range = float(y_masked.max())-y_min
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
128 if normalize and self._y_range > 0.0:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
129 if normalize and self._y_range > 0.0:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
130 self._norm = (y_min, self._y_range)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
131 if models is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
132 if callable(models) or isinstance(models, str):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
133 kwargs = self.add_model(models, **kwargs)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
134 elif isinstance(models, (tuple, list)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
135 for model in models:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
136 kwargs = self.add_model(model, **kwargs)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
137 self.fit(**kwargs)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
138
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
139 @classmethod
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
140 def fit_data(cls, y, models, x=None, normalize=True, **kwargs):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
141 return(cls(y, x=x, models=models, normalize=normalize, **kwargs))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
142
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
143 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
144 def best_errors(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
145 if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
146 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
147 return({name:self._result.params[name].stderr for name in sorted(self._result.params)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
148 if name != 'tmp_normalization_offset_c'})
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
149
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
150 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
151 def best_fit(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
152 if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
153 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
154 return(self._result.best_fit)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
155
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
156 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
157 def best_parameters(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
158 if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
159 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
160 parameters = {}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
161 for name in sorted(self._result.params):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
162 if name != 'tmp_normalization_offset_c':
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
163 par = self._result.params[name]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
164 parameters[name] = {'value': par.value, 'error': par.stderr,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
165 'init_value': par.init_value, 'min': par.min, 'max': par.max,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
166 'vary': par.vary, 'expr': par.expr}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
167 return(parameters)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
168
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
169 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
170 def best_results(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
171 """Convert the input data array to a data set and add the fit results.
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
172 """
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
173 if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
174 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
175 if isinstance(self._y, xr.DataArray):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
176 best_results = self._y.to_dataset()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
177 dims = self._y.dims
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
178 fit_name = f'{self._y.name}_fit'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
179 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
180 coords = {'x': (['x'], self._x)}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
181 dims = ('x')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
182 best_results = xr.Dataset(coords=coords)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
183 best_results['y'] = (dims, self._y)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
184 fit_name = 'y_fit'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
185 best_results[fit_name] = (dims, self.best_fit)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
186 if self._mask is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
187 best_results['mask'] = self._mask
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
188 best_results.coords['par_names'] = ('peak', [name for name in self.best_values.keys()])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
189 best_results['best_values'] = (['par_names'], [v for v in self.best_values.values()])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
190 best_results['best_errors'] = (['par_names'], [v for v in self.best_errors.values()])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
191 best_results.attrs['components'] = self.components
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
192 return(best_results)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
193
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
194 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
195 def best_values(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
196 if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
197 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
198 return({name:self._result.params[name].value for name in sorted(self._result.params)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
199 if name != 'tmp_normalization_offset_c'})
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
200
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
201 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
202 def chisqr(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
203 if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
204 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
205 return(self._result.chisqr)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
206
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
207 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
208 def components(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
209 components = {}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
210 if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
211 logging.warning('Unable to collect components in Fit.components')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
212 return(components)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
213 for component in self._result.components:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
214 if 'tmp_normalization_offset_c' in component.param_names:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
215 continue
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
216 parameters = {}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
217 for name in component.param_names:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
218 par = self._parameters[name]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
219 parameters[name] = {'free': par.vary, 'value': self._result.params[name].value}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
220 if par.expr is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
221 parameters[name]['expr'] = par.expr
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
222 expr = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
223 if isinstance(component, ExpressionModel):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
224 name = component._name
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
225 if name[-1] == '_':
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
226 name = name[:-1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
227 expr = component.expr
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
228 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
229 prefix = component.prefix
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
230 if len(prefix):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
231 if prefix[-1] == '_':
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
232 prefix = prefix[:-1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
233 name = f'{prefix} ({component._name})'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
234 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
235 name = f'{component._name}'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
236 if expr is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
237 components[name] = {'parameters': parameters}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
238 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
239 components[name] = {'expr': expr, 'parameters': parameters}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
240 return(components)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
241
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
242 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
243 def covar(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
244 if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
245 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
246 return(self._result.covar)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
247
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
248 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
249 def init_parameters(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
250 if self._result is None or self._result.init_params is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
251 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
252 parameters = {}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
253 for name in sorted(self._result.init_params):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
254 if name != 'tmp_normalization_offset_c':
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
255 par = self._result.init_params[name]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
256 parameters[name] = {'value': par.value, 'min': par.min, 'max': par.max,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
257 'vary': par.vary, 'expr': par.expr}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
258 return(parameters)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
259
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
260 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
261 def init_values(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
262 if self._result is None or self._result.init_params is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
263 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
264 return({name:self._result.init_params[name].value for name in
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
265 sorted(self._result.init_params) if name != 'tmp_normalization_offset_c'})
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
266
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
267 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
268 def normalization_offset(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
269 if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
270 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
271 if self._norm is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
272 return(0.0)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
273 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
274 if self._result.init_params is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
275 normalization_offset = self._result.init_params['tmp_normalization_offset_c']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
276 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
277 normalization_offset = self._result.params['tmp_normalization_offset_c']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
278 return(normalization_offset)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
279
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
280 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
281 def num_func_eval(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
282 if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
283 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
284 return(self._result.nfev)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
285
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
286 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
287 def parameters(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
288 return({name:{'min': par.min, 'max': par.max, 'vary': par.vary, 'expr': par.expr}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
289 for name, par in self._parameters.items() if name != 'tmp_normalization_offset_c'})
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
290
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
291 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
292 def redchi(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
293 if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
294 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
295 return(self._result.redchi)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
296
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
297 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
298 def residual(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
299 if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
300 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
301 return(self._result.residual)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
302
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
303 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
304 def success(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
305 if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
306 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
307 if not self._result.success:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
308 # print(f'ier = {self._result.ier}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
309 # print(f'lmdif_message = {self._result.lmdif_message}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
310 # print(f'message = {self._result.message}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
311 # print(f'nfev = {self._result.nfev}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
312 # print(f'redchi = {self._result.redchi}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
313 # print(f'success = {self._result.success}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
314 if self._result.ier == 0 or self._result.ier == 5:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
315 logging.warning(f'ier = {self._result.ier}: {self._result.message}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
316 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
317 logging.warning(f'ier = {self._result.ier}: {self._result.message}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
318 return(True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
319 # self.print_fit_report()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
320 # self.plot()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
321 return(self._result.success)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
322
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
323 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
324 def var_names(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
325 """Intended to be used with covar
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
326 """
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
327 if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
328 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
329 return(getattr(self._result, 'var_names', None))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
330
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
331 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
332 def x(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
333 return(self._x)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
334
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
335 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
336 def y(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
337 return(self._y)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
338
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
339 def print_fit_report(self, result=None, show_correl=False):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
340 if result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
341 result = self._result
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
342 if result is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
343 print(result.fit_report(show_correl=show_correl))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
344
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
345 def add_parameter(self, **parameter):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
346 if not isinstance(parameter, dict):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
347 raise ValueError(f'Invalid parameter ({parameter})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
348 if parameter.get('expr') is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
349 raise KeyError(f'Illegal "expr" key in parameter {parameter}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
350 name = parameter['name']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
351 if not isinstance(name, str):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
352 raise ValueError(f'Illegal "name" value ({name}) in parameter {parameter}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
353 if parameter.get('norm') is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
354 self._parameter_norms[name] = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
355 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
356 norm = parameter.pop('norm')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
357 if self._norm is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
358 logging.warning(f'Ignoring norm in parameter {name} in '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
359 f'Fit.add_parameter (normalization is turned off)')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
360 self._parameter_norms[name] = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
361 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
362 if not isinstance(norm, bool):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
363 raise ValueError(f'Illegal "norm" value ({norm}) in parameter {parameter}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
364 self._parameter_norms[name] = norm
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
365 vary = parameter.get('vary')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
366 if vary is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
367 if not isinstance(vary, bool):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
368 raise ValueError(f'Illegal "vary" value ({vary}) in parameter {parameter}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
369 if not vary:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
370 if 'min' in parameter:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
371 logging.warning(f'Ignoring min in parameter {name} in '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
372 f'Fit.add_parameter (vary = {vary})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
373 parameter.pop('min')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
374 if 'max' in parameter:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
375 logging.warning(f'Ignoring max in parameter {name} in '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
376 f'Fit.add_parameter (vary = {vary})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
377 parameter.pop('max')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
378 if self._norm is not None and name not in self._parameter_norms:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
379 raise ValueError(f'Missing parameter normalization type for paremeter {name}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
380 self._parameters.add(**parameter)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
381
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
382 def add_model(self, model, prefix=None, parameters=None, parameter_norms=None, **kwargs):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
383 # Create the new model
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
384 # print(f'at start add_model:\nself._parameters:\n{self._parameters}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
385 # print(f'at start add_model: kwargs = {kwargs}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
386 # print(f'parameters = {parameters}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
387 # print(f'parameter_norms = {parameter_norms}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
388 # if len(self._parameters.keys()):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
389 # print('\nAt start adding model:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
390 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
391 # print(f'parameter_norms:\n{self._parameter_norms}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
392 if prefix is not None and not isinstance(prefix, str):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
393 logging.warning('Ignoring illegal prefix: {model} {type(model)}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
394 prefix = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
395 if prefix is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
396 pprefix = ''
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
397 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
398 pprefix = prefix
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
399 if parameters is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
400 if isinstance(parameters, dict):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
401 parameters = (parameters, )
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
402 elif not is_dict_series(parameters):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
403 illegal_value(parameters, 'parameters', 'Fit.add_model', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
404 parameters = deepcopy(parameters)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
405 if parameter_norms is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
406 if isinstance(parameter_norms, dict):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
407 parameter_norms = (parameter_norms, )
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
408 if not is_dict_series(parameter_norms):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
409 illegal_value(parameter_norms, 'parameter_norms', 'Fit.add_model', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
410 new_parameter_norms = {}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
411 if callable(model):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
412 # Linear fit not yet implemented for callable models
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
413 self._try_linear_fit = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
414 if parameter_norms is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
415 if parameters is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
416 raise ValueError('Either "parameters" or "parameter_norms" is required in '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
417 f'{model}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
418 for par in parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
419 name = par['name']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
420 if not isinstance(name, str):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
421 raise ValueError(f'Illegal "name" value ({name}) in input parameters')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
422 if par.get('norm') is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
423 norm = par.pop('norm')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
424 if not isinstance(norm, bool):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
425 raise ValueError(f'Illegal "norm" value ({norm}) in input parameters')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
426 new_parameter_norms[f'{pprefix}{name}'] = norm
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
427 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
428 for par in parameter_norms:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
429 name = par['name']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
430 if not isinstance(name, str):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
431 raise ValueError(f'Illegal "name" value ({name}) in input parameters')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
432 norm = par.get('norm')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
433 if norm is None or not isinstance(norm, bool):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
434 raise ValueError(f'Illegal "norm" value ({norm}) in input parameters')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
435 new_parameter_norms[f'{pprefix}{name}'] = norm
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
436 if parameters is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
437 for par in parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
438 if par.get('expr') is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
439 raise KeyError(f'Illegal "expr" key ({par.get("expr")}) in parameter '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
440 f'{name} for a callable model {model}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
441 name = par['name']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
442 if not isinstance(name, str):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
443 raise ValueError(f'Illegal "name" value ({name}) in input parameters')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
444 # RV FIX callable model will need partial deriv functions for any linear pars to get the linearized matrix, so for now skip linear solution option
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
445 newmodel = Model(model, prefix=prefix)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
446 elif isinstance(model, str):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
447 if model == 'constant': # Par: c
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
448 newmodel = ConstantModel(prefix=prefix)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
449 new_parameter_norms[f'{pprefix}c'] = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
450 self._linear_parameters.append(f'{pprefix}c')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
451 elif model == 'linear': # Par: slope, intercept
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
452 newmodel = LinearModel(prefix=prefix)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
453 new_parameter_norms[f'{pprefix}slope'] = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
454 new_parameter_norms[f'{pprefix}intercept'] = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
455 self._linear_parameters.append(f'{pprefix}slope')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
456 self._linear_parameters.append(f'{pprefix}intercept')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
457 elif model == 'quadratic': # Par: a, b, c
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
458 newmodel = QuadraticModel(prefix=prefix)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
459 new_parameter_norms[f'{pprefix}a'] = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
460 new_parameter_norms[f'{pprefix}b'] = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
461 new_parameter_norms[f'{pprefix}c'] = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
462 self._linear_parameters.append(f'{pprefix}a')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
463 self._linear_parameters.append(f'{pprefix}b')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
464 self._linear_parameters.append(f'{pprefix}c')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
465 elif model == 'gaussian': # Par: amplitude, center, sigma (fwhm, height)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
466 newmodel = GaussianModel(prefix=prefix)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
467 new_parameter_norms[f'{pprefix}amplitude'] = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
468 new_parameter_norms[f'{pprefix}center'] = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
469 new_parameter_norms[f'{pprefix}sigma'] = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
470 self._linear_parameters.append(f'{pprefix}amplitude')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
471 self._nonlinear_parameters.append(f'{pprefix}center')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
472 self._nonlinear_parameters.append(f'{pprefix}sigma')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
473 # parameter norms for height and fwhm are needed to get correct errors
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
474 new_parameter_norms[f'{pprefix}height'] = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
475 new_parameter_norms[f'{pprefix}fwhm'] = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
476 elif model == 'lorentzian': # Par: amplitude, center, sigma (fwhm, height)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
477 newmodel = LorentzianModel(prefix=prefix)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
478 new_parameter_norms[f'{pprefix}amplitude'] = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
479 new_parameter_norms[f'{pprefix}center'] = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
480 new_parameter_norms[f'{pprefix}sigma'] = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
481 self._linear_parameters.append(f'{pprefix}amplitude')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
482 self._nonlinear_parameters.append(f'{pprefix}center')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
483 self._nonlinear_parameters.append(f'{pprefix}sigma')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
484 # parameter norms for height and fwhm are needed to get correct errors
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
485 new_parameter_norms[f'{pprefix}height'] = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
486 new_parameter_norms[f'{pprefix}fwhm'] = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
487 elif model == 'exponential': # Par: amplitude, decay
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
488 newmodel = ExponentialModel(prefix=prefix)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
489 new_parameter_norms[f'{pprefix}amplitude'] = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
490 new_parameter_norms[f'{pprefix}decay'] = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
491 self._linear_parameters.append(f'{pprefix}amplitude')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
492 self._nonlinear_parameters.append(f'{pprefix}decay')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
493 elif model == 'step': # Par: amplitude, center, sigma
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
494 form = kwargs.get('form')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
495 if form is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
496 kwargs.pop('form')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
497 if form is None or form not in ('linear', 'atan', 'arctan', 'erf', 'logistic'):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
498 raise ValueError(f'Invalid parameter form for build-in step model ({form})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
499 newmodel = StepModel(prefix=prefix, form=form)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
500 new_parameter_norms[f'{pprefix}amplitude'] = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
501 new_parameter_norms[f'{pprefix}center'] = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
502 new_parameter_norms[f'{pprefix}sigma'] = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
503 self._linear_parameters.append(f'{pprefix}amplitude')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
504 self._nonlinear_parameters.append(f'{pprefix}center')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
505 self._nonlinear_parameters.append(f'{pprefix}sigma')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
506 elif model == 'rectangle': # Par: amplitude, center1, center2, sigma1, sigma2
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
507 form = kwargs.get('form')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
508 if form is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
509 kwargs.pop('form')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
510 if form is None or form not in ('linear', 'atan', 'arctan', 'erf', 'logistic'):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
511 raise ValueError('Invalid parameter form for build-in rectangle model '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
512 f'({form})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
513 newmodel = RectangleModel(prefix=prefix, form=form)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
514 new_parameter_norms[f'{pprefix}amplitude'] = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
515 new_parameter_norms[f'{pprefix}center1'] = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
516 new_parameter_norms[f'{pprefix}center2'] = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
517 new_parameter_norms[f'{pprefix}sigma1'] = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
518 new_parameter_norms[f'{pprefix}sigma2'] = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
519 self._linear_parameters.append(f'{pprefix}amplitude')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
520 self._nonlinear_parameters.append(f'{pprefix}center1')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
521 self._nonlinear_parameters.append(f'{pprefix}center2')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
522 self._nonlinear_parameters.append(f'{pprefix}sigma1')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
523 self._nonlinear_parameters.append(f'{pprefix}sigma2')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
524 elif model == 'expression': # Par: by expression
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
525 expr = kwargs['expr']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
526 if not isinstance(expr, str):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
527 raise ValueError(f'Illegal "expr" value ({expr}) in {model}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
528 kwargs.pop('expr')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
529 if parameter_norms is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
530 logging.warning('Ignoring parameter_norms (normalization determined from '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
531 'linearity)}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
532 if parameters is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
533 for par in parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
534 if par.get('expr') is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
535 raise KeyError(f'Illegal "expr" key ({par.get("expr")}) in parameter '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
536 f'({par}) for an expression model')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
537 if par.get('norm') is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
538 logging.warning(f'Ignoring "norm" key in parameter ({par}) '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
539 '(normalization determined from linearity)}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
540 par.pop('norm')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
541 name = par['name']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
542 if not isinstance(name, str):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
543 raise ValueError(f'Illegal "name" value ({name}) in input parameters')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
544 ast = Interpreter()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
545 expr_parameters = [name for name in get_ast_names(ast.parse(expr))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
546 if name != 'x' and name not in self._parameters
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
547 and name not in ast.symtable]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
548 # print(f'\nexpr_parameters: {expr_parameters}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
549 # print(f'expr = {expr}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
550 if prefix is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
551 newmodel = ExpressionModel(expr=expr)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
552 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
553 for name in expr_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
554 expr = sub(rf'\b{name}\b', f'{prefix}{name}', expr)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
555 expr_parameters = [f'{prefix}{name}' for name in expr_parameters]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
556 # print(f'\nexpr_parameters: {expr_parameters}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
557 # print(f'expr = {expr}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
558 newmodel = ExpressionModel(expr=expr, name=name)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
559 # print(f'\nnewmodel = {newmodel.__dict__}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
560 # print(f'params_names = {newmodel._param_names}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
561 # print(f'params_names = {newmodel.param_names}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
562 # Remove already existing names
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
563 for name in newmodel.param_names.copy():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
564 if name not in expr_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
565 newmodel._func_allargs.remove(name)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
566 newmodel._param_names.remove(name)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
567 # print(f'params_names = {newmodel._param_names}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
568 # print(f'params_names = {newmodel.param_names}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
569 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
570 raise ValueError(f'Unknown build-in fit model ({model})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
571 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
572 illegal_value(model, 'model', 'Fit.add_model', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
573
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
574 # Add the new model to the current one
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
575 # print('\nBefore adding model:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
576 # print(f'\nnewmodel = {newmodel.__dict__}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
577 # if len(self._parameters):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
578 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
579 if self._model is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
580 self._model = newmodel
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
581 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
582 self._model += newmodel
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
583 new_parameters = newmodel.make_params()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
584 self._parameters += new_parameters
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
585 # print('\nAfter adding model:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
586 # print(f'\nnewmodel = {newmodel.__dict__}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
587 # print(f'\nnew_parameters = {new_parameters}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
588 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
589
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
590 # Check linearity of expression model paremeters
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
591 if isinstance(newmodel, ExpressionModel):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
592 for name in newmodel.param_names:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
593 if not diff(newmodel.expr, name, name):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
594 if name not in self._linear_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
595 self._linear_parameters.append(name)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
596 new_parameter_norms[name] = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
597 # print(f'\nADDING {name} TO LINEAR')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
598 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
599 if name not in self._nonlinear_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
600 self._nonlinear_parameters.append(name)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
601 new_parameter_norms[name] = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
602 # print(f'\nADDING {name} TO NONLINEAR')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
603 # print(f'new_parameter_norms:\n{new_parameter_norms}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
604
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
605 # Scale the default initial model parameters
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
606 if self._norm is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
607 for name, norm in new_parameter_norms.copy().items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
608 par = self._parameters.get(name)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
609 if par is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
610 new_parameter_norms.pop(name)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
611 continue
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
612 if par.expr is None and norm:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
613 value = par.value*self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
614 _min = par.min
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
615 _max = par.max
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
616 if not np.isinf(_min) and abs(_min) != float_min:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
617 _min *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
618 if not np.isinf(_max) and abs(_max) != float_min:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
619 _max *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
620 par.set(value=value, min=_min, max=_max)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
621 # print('\nAfter norm defaults:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
622 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
623 # print(f'parameters:\n{parameters}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
624 # print(f'all_parameters:\n{list(self.parameters)}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
625 # print(f'new_parameter_norms:\n{new_parameter_norms}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
626 # print(f'parameter_norms:\n{self._parameter_norms}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
627
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
628 # Initialize the model parameters from parameters
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
629 if prefix is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
630 prefix = ""
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
631 if parameters is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
632 for parameter in parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
633 name = parameter['name']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
634 if not isinstance(name, str):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
635 raise ValueError(f'Illegal "name" value ({name}) in input parameters')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
636 if name not in new_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
637 name = prefix+name
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
638 parameter['name'] = name
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
639 if name not in new_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
640 logging.warning(f'Ignoring superfluous parameter info for {name}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
641 continue
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
642 if name in self._parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
643 parameter.pop('name')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
644 if 'norm' in parameter:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
645 if not isinstance(parameter['norm'], bool):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
646 illegal_value(parameter['norm'], 'norm', 'Fit.add_model',
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
647 raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
648 new_parameter_norms[name] = parameter['norm']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
649 parameter.pop('norm')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
650 if parameter.get('expr') is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
651 if 'value' in parameter:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
652 logging.warning(f'Ignoring value in parameter {name} '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
653 f'(set by expression: {parameter["expr"]})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
654 parameter.pop('value')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
655 if 'vary' in parameter:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
656 logging.warning(f'Ignoring vary in parameter {name} '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
657 f'(set by expression: {parameter["expr"]})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
658 parameter.pop('vary')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
659 if 'min' in parameter:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
660 logging.warning(f'Ignoring min in parameter {name} '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
661 f'(set by expression: {parameter["expr"]})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
662 parameter.pop('min')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
663 if 'max' in parameter:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
664 logging.warning(f'Ignoring max in parameter {name} '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
665 f'(set by expression: {parameter["expr"]})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
666 parameter.pop('max')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
667 if 'vary' in parameter:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
668 if not isinstance(parameter['vary'], bool):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
669 illegal_value(parameter['vary'], 'vary', 'Fit.add_model',
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
670 raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
671 if not parameter['vary']:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
672 if 'min' in parameter:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
673 logging.warning(f'Ignoring min in parameter {name} in '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
674 f'Fit.add_model (vary = {parameter["vary"]})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
675 parameter.pop('min')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
676 if 'max' in parameter:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
677 logging.warning(f'Ignoring max in parameter {name} in '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
678 f'Fit.add_model (vary = {parameter["vary"]})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
679 parameter.pop('max')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
680 self._parameters[name].set(**parameter)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
681 parameter['name'] = name
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
682 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
683 illegal_value(parameter, 'parameter name', 'Fit.model', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
684 self._parameter_norms = {**self._parameter_norms, **new_parameter_norms}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
685 # print('\nAfter parameter init:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
686 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
687 # print(f'parameters:\n{parameters}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
688 # print(f'new_parameter_norms:\n{new_parameter_norms}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
689 # print(f'parameter_norms:\n{self._parameter_norms}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
690 # print(f'kwargs:\n{kwargs}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
691
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
692 # Initialize the model parameters from kwargs
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
693 for name, value in {**kwargs}.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
694 full_name = f'{pprefix}{name}'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
695 if full_name in new_parameter_norms and isinstance(value, (int, float)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
696 kwargs.pop(name)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
697 if self._parameters[full_name].expr is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
698 self._parameters[full_name].set(value=value)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
699 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
700 logging.warning(f'Ignoring parameter {name} in Fit.fit (set by expression: '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
701 f'{self._parameters[full_name].expr})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
702 # print('\nAfter kwargs init:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
703 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
704 # print(f'parameter_norms:\n{self._parameter_norms}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
705 # print(f'kwargs:\n{kwargs}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
706
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
707 # Check parameter norms (also need it for expressions to renormalize the errors)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
708 if self._norm is not None and (callable(model) or model == 'expression'):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
709 missing_norm = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
710 for name in new_parameters.valuesdict():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
711 if name not in self._parameter_norms:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
712 print(f'new_parameters:\n{new_parameters.valuesdict()}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
713 print(f'self._parameter_norms:\n{self._parameter_norms}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
714 logging.error(f'Missing parameter normalization type for {name} in {model}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
715 missing_norm = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
716 if missing_norm:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
717 raise ValueError
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
718
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
719 # print(f'at end add_model:\nself._parameters:\n{list(self.parameters)}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
720 # print(f'at end add_model: kwargs = {kwargs}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
721 # print(f'\nat end add_model: newmodel:\n{newmodel.__dict__}\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
722 return(kwargs)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
723
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
724 def fit(self, interactive=False, guess=False, **kwargs):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
725 # Check inputs
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
726 if self._model is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
727 logging.error('Undefined fit model')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
728 return
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
729 if not isinstance(interactive, bool):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
730 illegal_value(interactive, 'interactive', 'Fit.fit', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
731 if not isinstance(guess, bool):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
732 illegal_value(guess, 'guess', 'Fit.fit', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
733 if 'try_linear_fit' in kwargs:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
734 try_linear_fit = kwargs.pop('try_linear_fit')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
735 if not isinstance(try_linear_fit, bool):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
736 illegal_value(try_linear_fit, 'try_linear_fit', 'Fit.fit', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
737 if not self._try_linear_fit:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
738 logging.warning('Ignore superfluous keyword argument "try_linear_fit" (not '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
739 'yet supported for callable models)')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
740 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
741 self._try_linear_fit = try_linear_fit
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
742 # if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
743 # if 'parameters' in kwargs:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
744 # raise ValueError('Invalid parameter parameters ({kwargs["parameters"]})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
745 # else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
746 if self._result is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
747 if guess:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
748 logging.warning('Ignoring input parameter guess in Fit.fit during refitting')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
749 guess = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
750
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
751 # Check for circular expressions
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
752 # FIX TODO
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
753 # for name1, par1 in self._parameters.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
754 # if par1.expr is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
755
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
756 # Apply mask if supplied:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
757 if 'mask' in kwargs:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
758 self._mask = kwargs.pop('mask')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
759 if self._mask is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
760 self._mask = np.asarray(self._mask).astype(bool)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
761 if self._x.size != self._mask.size:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
762 raise ValueError(f'Inconsistent x and mask dimensions ({self._x.size} vs '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
763 f'{self._mask.size})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
764
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
765 # Estimate initial parameters with build-in lmfit guess method (only for a single model)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
766 # print(f'\nat start fit: kwargs = {kwargs}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
767 #RV print('\nAt start of fit:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
768 #RV self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
769 # print(f'parameter_norms:\n{self._parameter_norms}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
770 if guess:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
771 if self._mask is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
772 self._parameters = self._model.guess(self._y, x=self._x)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
773 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
774 self._parameters = self._model.guess(np.asarray(self._y)[~self._mask],
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
775 x=self._x[~self._mask])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
776 # print('\nAfter guess:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
777 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
778
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
779 # Add constant offset for a normalized model
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
780 if self._result is None and self._norm is not None and self._norm[0]:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
781 self.add_model('constant', prefix='tmp_normalization_offset_', parameters={'name': 'c',
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
782 'value': -self._norm[0], 'vary': False, 'norm': True})
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
783 #'value': -self._norm[0]/self._norm[1], 'vary': False, 'norm': False})
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
784
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
785 # Adjust existing parameters for refit:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
786 if 'parameters' in kwargs:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
787 parameters = kwargs.pop('parameters')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
788 if isinstance(parameters, dict):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
789 parameters = (parameters, )
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
790 elif not is_dict_series(parameters):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
791 illegal_value(parameters, 'parameters', 'Fit.fit', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
792 for par in parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
793 name = par['name']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
794 if name not in self._parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
795 raise ValueError(f'Unable to match {name} parameter {par} to an existing one')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
796 if self._parameters[name].expr is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
797 raise ValueError(f'Unable to modify {name} parameter {par} (currently an '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
798 'expression)')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
799 if par.get('expr') is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
800 raise KeyError(f'Illegal "expr" key in {name} parameter {par}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
801 self._parameters[name].set(vary=par.get('vary'))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
802 self._parameters[name].set(min=par.get('min'))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
803 self._parameters[name].set(max=par.get('max'))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
804 self._parameters[name].set(value=par.get('value'))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
805 #RV print('\nAfter adjust:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
806 #RV self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
807
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
808 # Apply parameter updates through keyword arguments
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
809 # print(f'kwargs = {kwargs}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
810 # print(f'parameter_norms = {self._parameter_norms}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
811 for name in set(self._parameters) & set(kwargs):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
812 value = kwargs.pop(name)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
813 if self._parameters[name].expr is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
814 self._parameters[name].set(value=value)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
815 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
816 logging.warning(f'Ignoring parameter {name} in Fit.fit (set by expression: '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
817 f'{self._parameters[name].expr})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
818
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
819 # Check for uninitialized parameters
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
820 for name, par in self._parameters.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
821 if par.expr is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
822 value = par.value
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
823 if value is None or np.isinf(value) or np.isnan(value):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
824 if interactive:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
825 value = input_num(f'Enter an initial value for {name}', default=1.0)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
826 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
827 value = 1.0
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
828 if self._norm is None or name not in self._parameter_norms:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
829 self._parameters[name].set(value=value)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
830 elif self._parameter_norms[name]:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
831 self._parameters[name].set(value=value*self._norm[1])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
832
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
833 # Check if model is linear
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
834 try:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
835 linear_model = self._check_linearity_model()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
836 except:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
837 linear_model = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
838 # print(f'\n\n--------> linear_model = {linear_model}\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
839 if kwargs.get('check_only_linearity') is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
840 return(linear_model)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
841
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
842 # Normalize the data and initial parameters
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
843 #RV print('\nBefore normalization:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
844 #RV self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
845 # print(f'parameter_norms:\n{self._parameter_norms}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
846 self._normalize()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
847 # print(f'norm = {self._norm}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
848 #RV print('\nAfter normalization:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
849 #RV self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
850 # self.print_fit_report()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
851 # print(f'parameter_norms:\n{self._parameter_norms}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
852
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
853 if linear_model:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
854 # Perform a linear fit by direct matrix solution with numpy
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
855 try:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
856 if self._mask is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
857 self._fit_linear_model(self._x, self._y_norm)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
858 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
859 self._fit_linear_model(self._x[~self._mask],
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
860 np.asarray(self._y_norm)[~self._mask])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
861 except:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
862 linear_model = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
863 if not linear_model:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
864 # Perform a non-linear fit with lmfit
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
865 # Prevent initial values from sitting at boundaries
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
866 self._parameter_bounds = {name:{'min': par.min, 'max': par.max} for name, par in
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
867 self._parameters.items() if par.vary}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
868 for par in self._parameters.values():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
869 if par.vary:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
870 par.set(value=self._reset_par_at_boundary(par, par.value))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
871 # print('\nAfter checking boundaries:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
872 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
873
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
874 # Perform the fit
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
875 # fit_kws = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
876 # if 'Dfun' in kwargs:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
877 # fit_kws = {'Dfun': kwargs.pop('Dfun')}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
878 # self._result = self._model.fit(self._y_norm, self._parameters, x=self._x,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
879 # fit_kws=fit_kws, **kwargs)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
880 if self._mask is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
881 self._result = self._model.fit(self._y_norm, self._parameters, x=self._x, **kwargs)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
882 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
883 self._result = self._model.fit(np.asarray(self._y_norm)[~self._mask],
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
884 self._parameters, x=self._x[~self._mask], **kwargs)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
885 #RV print('\nAfter fit:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
886 # print(f'\nself._result ({self._result}):\n\t{self._result.__dict__}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
887 #RV self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
888 # self.print_fit_report()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
889
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
890 # Set internal parameter values to fit results upon success
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
891 if self.success:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
892 for name, par in self._parameters.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
893 if par.expr is None and par.vary:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
894 par.set(value=self._result.params[name].value)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
895 # print('\nAfter update parameter values:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
896 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
897
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
898 # Renormalize the data and results
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
899 self._renormalize()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
900 #RV print('\nAfter renormalization:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
901 #RV self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
902 # self.print_fit_report()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
903
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
904 def plot(self, y=None, y_title=None, result=None, skip_init=False, plot_comp_legends=False,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
905 plot_residual=False, plot_masked_data=True, **kwargs):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
906 if result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
907 result = self._result
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
908 if result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
909 return
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
910 plots = []
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
911 legend = []
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
912 if self._mask is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
913 mask = np.zeros(self._x.size).astype(bool)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
914 plot_masked_data = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
915 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
916 mask = self._mask
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
917 if y is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
918 if not isinstance(y, (tuple, list, np.ndarray)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
919 illegal_value(y, 'y', 'Fit.plot')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
920 if len(y) != len(self._x):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
921 logging.warning('Ignoring parameter y in Fit.plot (wrong dimension)')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
922 y = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
923 if y is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
924 if y_title is None or not isinstance(y_title, str):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
925 y_title = 'data'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
926 plots += [(self._x, y, '.')]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
927 legend += [y_title]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
928 if self._y is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
929 plots += [(self._x, np.asarray(self._y), 'b.')]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
930 legend += ['data']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
931 if plot_masked_data:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
932 plots += [(self._x[mask], np.asarray(self._y)[mask], 'bx')]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
933 legend += ['masked data']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
934 if isinstance(plot_residual, bool) and plot_residual:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
935 plots += [(self._x[~mask], result.residual, 'k-')]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
936 legend += ['residual']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
937 plots += [(self._x[~mask], result.best_fit, 'k-')]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
938 legend += ['best fit']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
939 if not skip_init and hasattr(result, 'init_fit'):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
940 plots += [(self._x[~mask], result.init_fit, 'g-')]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
941 legend += ['init']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
942 components = result.eval_components(x=self._x[~mask])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
943 num_components = len(components)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
944 if 'tmp_normalization_offset_' in components:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
945 num_components -= 1
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
946 if num_components > 1:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
947 eval_index = 0
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
948 for modelname, y in components.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
949 if modelname == 'tmp_normalization_offset_':
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
950 continue
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
951 if modelname == '_eval':
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
952 modelname = f'eval{eval_index}'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
953 if len(modelname) > 20:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
954 modelname = f'{modelname[0:16]} ...'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
955 if isinstance(y, (int, float)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
956 y *= np.ones(self._x[~mask].size)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
957 plots += [(self._x[~mask], y, '--')]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
958 if plot_comp_legends:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
959 if modelname[-1] == '_':
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
960 legend.append(modelname[:-1])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
961 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
962 legend.append(modelname)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
963 title = kwargs.get('title')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
964 if title is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
965 kwargs.pop('title')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
966 quick_plot(tuple(plots), legend=legend, title=title, block=True, **kwargs)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
967
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
968 @staticmethod
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
969 def guess_init_peak(x, y, *args, center_guess=None, use_max_for_center=True):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
970 """ Return a guess for the initial height, center and fwhm for a peak
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
971 """
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
972 # print(f'\n\nargs = {args}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
973 # print(f'center_guess = {center_guess}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
974 # quick_plot(x, y, vlines=center_guess, block=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
975 center_guesses = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
976 x = np.asarray(x)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
977 y = np.asarray(y)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
978 if len(x) != len(y):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
979 logging.error(f'Invalid x and y lengths ({len(x)}, {len(y)}), skip initial guess')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
980 return(None, None, None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
981 if isinstance(center_guess, (int, float)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
982 if len(args):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
983 logging.warning('Ignoring additional arguments for single center_guess value')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
984 center_guesses = [center_guess]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
985 elif isinstance(center_guess, (tuple, list, np.ndarray)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
986 if len(center_guess) == 1:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
987 logging.warning('Ignoring additional arguments for single center_guess value')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
988 if not isinstance(center_guess[0], (int, float)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
989 raise ValueError(f'Invalid parameter center_guess ({type(center_guess[0])})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
990 center_guess = center_guess[0]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
991 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
992 if len(args) != 1:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
993 raise ValueError(f'Invalid number of arguments ({len(args)})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
994 n = args[0]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
995 if not is_index(n, 0, len(center_guess)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
996 raise ValueError('Invalid argument')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
997 center_guesses = center_guess
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
998 center_guess = center_guesses[n]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
999 elif center_guess is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1000 raise ValueError(f'Invalid center_guess type ({type(center_guess)})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1001 # print(f'x = {x}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1002 # print(f'y = {y}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1003 # print(f'center_guess = {center_guess}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1004
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1005 # Sort the inputs
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1006 index = np.argsort(x)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1007 x = x[index]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1008 y = y[index]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1009 miny = y.min()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1010 # print(f'miny = {miny}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1011 # print(f'x_range = {x[0]} {x[-1]} {len(x)}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1012 # print(f'y_range = {y[0]} {y[-1]} {len(y)}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1013 # quick_plot(x, y, vlines=center_guess, block=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1014
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1015 # xx = x
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1016 # yy = y
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1017 # Set range for current peak
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1018 # print(f'n = {n}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1019 # print(f'center_guesses = {center_guesses}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1020 if center_guesses is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1021 if len(center_guesses) > 1:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1022 index = np.argsort(center_guesses)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1023 n = list(index).index(n)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1024 # print(f'n = {n}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1025 # print(f'index = {index}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1026 center_guesses = np.asarray(center_guesses)[index]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1027 # print(f'center_guesses = {center_guesses}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1028 if n == 0:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1029 low = 0
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1030 upp = index_nearest(x, (center_guesses[0]+center_guesses[1])/2)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1031 elif n == len(center_guesses)-1:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1032 low = index_nearest(x, (center_guesses[n-1]+center_guesses[n])/2)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1033 upp = len(x)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1034 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1035 low = index_nearest(x, (center_guesses[n-1]+center_guesses[n])/2)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1036 upp = index_nearest(x, (center_guesses[n]+center_guesses[n+1])/2)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1037 # print(f'low = {low}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1038 # print(f'upp = {upp}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1039 x = x[low:upp]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1040 y = y[low:upp]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1041 # quick_plot(x, y, vlines=(x[0], center_guess, x[-1]), block=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1042
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1043 # Estimate FHHM
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1044 maxy = y.max()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1045 # print(f'x_range = {x[0]} {x[-1]} {len(x)}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1046 # print(f'y_range = {y[0]} {y[-1]} {len(y)} {miny} {maxy}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1047 # print(f'center_guess = {center_guess}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1048 if center_guess is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1049 center_index = np.argmax(y)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1050 center = x[center_index]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1051 height = maxy-miny
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1052 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1053 if use_max_for_center:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1054 center_index = np.argmax(y)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1055 center = x[center_index]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1056 if center_index < 0.1*len(x) or center_index > 0.9*len(x):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1057 center_index = index_nearest(x, center_guess)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1058 center = center_guess
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1059 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1060 center_index = index_nearest(x, center_guess)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1061 center = center_guess
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1062 height = y[center_index]-miny
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1063 # print(f'center_index = {center_index}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1064 # print(f'center = {center}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1065 # print(f'height = {height}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1066 half_height = miny+0.5*height
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1067 # print(f'half_height = {half_height}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1068 fwhm_index1 = 0
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1069 for i in range(center_index, fwhm_index1, -1):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1070 if y[i] < half_height:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1071 fwhm_index1 = i
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1072 break
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1073 # print(f'fwhm_index1 = {fwhm_index1} {x[fwhm_index1]}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1074 fwhm_index2 = len(x)-1
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1075 for i in range(center_index, fwhm_index2):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1076 if y[i] < half_height:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1077 fwhm_index2 = i
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1078 break
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1079 # print(f'fwhm_index2 = {fwhm_index2} {x[fwhm_index2]}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1080 # quick_plot((x,y,'o'), vlines=(x[fwhm_index1], center, x[fwhm_index2]), block=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1081 if fwhm_index1 == 0 and fwhm_index2 < len(x)-1:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1082 fwhm = 2*(x[fwhm_index2]-center)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1083 elif fwhm_index1 > 0 and fwhm_index2 == len(x)-1:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1084 fwhm = 2*(center-x[fwhm_index1])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1085 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1086 fwhm = x[fwhm_index2]-x[fwhm_index1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1087 # print(f'fwhm_index1 = {fwhm_index1} {x[fwhm_index1]}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1088 # print(f'fwhm_index2 = {fwhm_index2} {x[fwhm_index2]}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1089 # print(f'fwhm = {fwhm}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1090
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1091 # Return height, center and FWHM
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1092 # quick_plot((x,y,'o'), (xx,yy), vlines=(x[fwhm_index1], center, x[fwhm_index2]), block=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1093 return(height, center, fwhm)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1094
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1095 def _check_linearity_model(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1096 """Identify the linearity of all model parameters and check if the model is linear or not
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1097 """
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1098 if not self._try_linear_fit:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1099 logging.info('Skip linearity check (not yet supported for callable models)')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1100 return(False)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1101 free_parameters = [name for name, par in self._parameters.items() if par.vary]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1102 for component in self._model.components:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1103 if 'tmp_normalization_offset_c' in component.param_names:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1104 continue
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1105 if isinstance(component, ExpressionModel):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1106 for name in free_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1107 if diff(component.expr, name, name):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1108 # print(f'\t\t{component.expr} is non-linear in {name}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1109 self._nonlinear_parameters.append(name)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1110 if name in self._linear_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1111 self._linear_parameters.remove(name)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1112 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1113 model_parameters = component.param_names.copy()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1114 for basename, hint in component.param_hints.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1115 name = f'{component.prefix}{basename}'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1116 if hint.get('expr') is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1117 model_parameters.remove(name)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1118 for name in model_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1119 expr = self._parameters[name].expr
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1120 if expr is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1121 for nname in free_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1122 if name in self._nonlinear_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1123 if diff(expr, nname):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1124 # print(f'\t\t{component} is non-linear in {nname} (through {name} = "{expr}")')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1125 self._nonlinear_parameters.append(nname)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1126 if nname in self._linear_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1127 self._linear_parameters.remove(nname)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1128 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1129 assert(name in self._linear_parameters)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1130 # print(f'\n\nexpr ({type(expr)}) = {expr}\nnname ({type(nname)}) = {nname}\n\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1131 if diff(expr, nname, nname):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1132 # print(f'\t\t{component} is non-linear in {nname} (through {name} = "{expr}")')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1133 self._nonlinear_parameters.append(nname)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1134 if nname in self._linear_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1135 self._linear_parameters.remove(nname)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1136 # print(f'\nfree parameters:\n\t{free_parameters}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1137 # print(f'linear parameters:\n\t{self._linear_parameters}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1138 # print(f'nonlinear parameters:\n\t{self._nonlinear_parameters}\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1139 if any(True for name in self._nonlinear_parameters if self._parameters[name].vary):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1140 return(False)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1141 return(True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1142
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1143 def _fit_linear_model(self, x, y):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1144 """Perform a linear fit by direct matrix solution with numpy
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1145 """
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1146 # Construct the matrix and the free parameter vector
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1147 # print(f'\nparameters:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1148 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1149 # print(f'\nparameter_norms:\n\t{self._parameter_norms}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1150 # print(f'\nlinear_parameters:\n\t{self._linear_parameters}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1151 # print(f'nonlinear_parameters:\n\t{self._nonlinear_parameters}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1152 free_parameters = [name for name, par in self._parameters.items() if par.vary]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1153 # print(f'free parameters:\n\t{free_parameters}\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1154 expr_parameters = {name:par.expr for name, par in self._parameters.items()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1155 if par.expr is not None}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1156 model_parameters = []
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1157 for component in self._model.components:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1158 if 'tmp_normalization_offset_c' in component.param_names:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1159 continue
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1160 model_parameters += component.param_names
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1161 for basename, hint in component.param_hints.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1162 name = f'{component.prefix}{basename}'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1163 if hint.get('expr') is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1164 expr_parameters.pop(name)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1165 model_parameters.remove(name)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1166 # print(f'expr parameters:\n{expr_parameters}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1167 # print(f'model parameters:\n\t{model_parameters}\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1168 norm = 1.0
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1169 if self._normalized:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1170 norm = self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1171 # print(f'\n\nself._normalized = {self._normalized}\nnorm = {norm}\nself._norm = {self._norm}\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1172 # Add expression parameters to asteval
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1173 ast = Interpreter()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1174 # print(f'Adding to asteval sym table:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1175 for name, expr in expr_parameters.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1176 # print(f'\tadding {name} {expr}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1177 ast.symtable[name] = expr
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1178 # Add constant parameters to asteval
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1179 # (renormalize to use correctly in evaluation of expression models)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1180 for name, par in self._parameters.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1181 if par.expr is None and not par.vary:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1182 if self._parameter_norms[name]:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1183 # print(f'\tadding {name} {par.value*norm}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1184 ast.symtable[name] = par.value*norm
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1185 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1186 # print(f'\tadding {name} {par.value}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1187 ast.symtable[name] = par.value
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1188 A = np.zeros((len(x), len(free_parameters)), dtype='float64')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1189 y_const = np.zeros(len(x), dtype='float64')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1190 have_expression_model = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1191 for component in self._model.components:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1192 if isinstance(component, ConstantModel):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1193 name = component.param_names[0]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1194 # print(f'\nConstant model: {name} {self._parameters[name]}\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1195 if name in free_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1196 # print(f'\t\t{name} is a free constant set matrix column {free_parameters.index(name)} to 1.0')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1197 A[:,free_parameters.index(name)] = 1.0
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1198 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1199 if self._parameter_norms[name]:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1200 delta_y_const = self._parameters[name]*np.ones(len(x))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1201 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1202 delta_y_const = (self._parameters[name]*norm)*np.ones(len(x))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1203 y_const += delta_y_const
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1204 # print(f'\ndelta_y_const ({type(delta_y_const)}):\n{delta_y_const}\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1205 elif isinstance(component, ExpressionModel):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1206 have_expression_model = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1207 const_expr = component.expr
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1208 # print(f'\nExpression model:\nconst_expr: {const_expr}\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1209 for name in free_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1210 dexpr_dname = diff(component.expr, name)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1211 if dexpr_dname:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1212 const_expr = f'{const_expr}-({str(dexpr_dname)})*{name}'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1213 # print(f'\tconst_expr: {const_expr}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1214 if not self._parameter_norms[name]:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1215 dexpr_dname = f'({dexpr_dname})/{norm}'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1216 # print(f'\t{component.expr} is linear in {name}\n\t\tadd "{str(dexpr_dname)}" to matrix as column {free_parameters.index(name)}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1217 fx = [(lambda _: ast.eval(str(dexpr_dname)))(ast(f'x={v}')) for v in x]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1218 # print(f'\tfx:\n{fx}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1219 if len(ast.error):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1220 raise ValueError(f'Unable to evaluate {dexpr_dname}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1221 A[:,free_parameters.index(name)] += fx
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1222 # if self._parameter_norms[name]:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1223 # print(f'\t\t{component.expr} is linear in {name} add "{str(dexpr_dname)}" to matrix as column {free_parameters.index(name)}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1224 # A[:,free_parameters.index(name)] += fx
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1225 # else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1226 # print(f'\t\t{component.expr} is linear in {name} add "({str(dexpr_dname)})/{norm}" to matrix as column {free_parameters.index(name)}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1227 # A[:,free_parameters.index(name)] += np.asarray(fx)/norm
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1228 # FIX: find another solution if expr not supported by simplify
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1229 const_expr = str(simplify(f'({const_expr})/{norm}'))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1230 # print(f'\nconst_expr: {const_expr}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1231 delta_y_const = [(lambda _: ast.eval(const_expr))(ast(f'x = {v}')) for v in x]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1232 y_const += delta_y_const
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1233 # print(f'\ndelta_y_const ({type(delta_y_const)}):\n{delta_y_const}\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1234 if len(ast.error):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1235 raise ValueError(f'Unable to evaluate {const_expr}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1236 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1237 free_model_parameters = [name for name in component.param_names
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1238 if name in free_parameters or name in expr_parameters]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1239 # print(f'\nBuild-in model ({component}):\nfree_model_parameters: {free_model_parameters}\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1240 if not len(free_model_parameters):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1241 y_const += component.eval(params=self._parameters, x=x)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1242 elif isinstance(component, LinearModel):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1243 if f'{component.prefix}slope' in free_model_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1244 A[:,free_parameters.index(f'{component.prefix}slope')] = x
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1245 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1246 y_const += self._parameters[f'{component.prefix}slope'].value*x
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1247 if f'{component.prefix}intercept' in free_model_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1248 A[:,free_parameters.index(f'{component.prefix}intercept')] = 1.0
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1249 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1250 y_const += self._parameters[f'{component.prefix}intercept'].value* \
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1251 np.ones(len(x))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1252 elif isinstance(component, QuadraticModel):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1253 if f'{component.prefix}a' in free_model_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1254 A[:,free_parameters.index(f'{component.prefix}a')] = x**2
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1255 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1256 y_const += self._parameters[f'{component.prefix}a'].value*x**2
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1257 if f'{component.prefix}b' in free_model_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1258 A[:,free_parameters.index(f'{component.prefix}b')] = x
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1259 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1260 y_const += self._parameters[f'{component.prefix}b'].value*x
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1261 if f'{component.prefix}c' in free_model_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1262 A[:,free_parameters.index(f'{component.prefix}c')] = 1.0
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1263 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1264 y_const += self._parameters[f'{component.prefix}c'].value*np.ones(len(x))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1265 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1266 # At this point each build-in model must be strictly proportional to each linear
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1267 # model parameter. Without this assumption, the model equation is needed
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1268 # For the current build-in lmfit models, this can only ever be the amplitude
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1269 assert(len(free_model_parameters) == 1)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1270 name = f'{component.prefix}amplitude'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1271 assert(free_model_parameters[0] == name)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1272 assert(self._parameter_norms[name])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1273 expr = self._parameters[name].expr
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1274 if expr is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1275 # print(f'\t{component} is linear in {name} add to matrix as column {free_parameters.index(name)}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1276 parameters = deepcopy(self._parameters)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1277 parameters[name].set(value=1.0)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1278 index = free_parameters.index(name)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1279 A[:,free_parameters.index(name)] += component.eval(params=parameters, x=x)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1280 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1281 const_expr = expr
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1282 # print(f'\tconst_expr: {const_expr}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1283 parameters = deepcopy(self._parameters)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1284 parameters[name].set(value=1.0)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1285 dcomp_dname = component.eval(params=parameters, x=x)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1286 # print(f'\tdcomp_dname ({type(dcomp_dname)}):\n{dcomp_dname}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1287 for nname in free_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1288 dexpr_dnname = diff(expr, nname)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1289 if dexpr_dnname:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1290 assert(self._parameter_norms[name])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1291 # print(f'\t\td({expr})/d{nname} = {dexpr_dnname}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1292 # print(f'\t\t{component} is linear in {nname} (through {name} = "{expr}", add to matrix as column {free_parameters.index(nname)})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1293 fx = np.asarray(dexpr_dnname*dcomp_dname, dtype='float64')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1294 # print(f'\t\tfx ({type(fx)}): {fx}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1295 # print(f'free_parameters.index({nname}): {free_parameters.index(nname)}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1296 if self._parameter_norms[nname]:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1297 A[:,free_parameters.index(nname)] += fx
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1298 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1299 A[:,free_parameters.index(nname)] += fx/norm
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1300 const_expr = f'{const_expr}-({dexpr_dnname})*{nname}'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1301 # print(f'\t\tconst_expr: {const_expr}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1302 const_expr = str(simplify(f'({const_expr})/{norm}'))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1303 # print(f'\tconst_expr: {const_expr}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1304 fx = [(lambda _: ast.eval(const_expr))(ast(f'x = {v}')) for v in x]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1305 # print(f'\tfx: {fx}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1306 delta_y_const = np.multiply(fx, dcomp_dname)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1307 y_const += delta_y_const
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1308 # print(f'\ndelta_y_const ({type(delta_y_const)}):\n{delta_y_const}\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1309 # print(A)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1310 # print(y_const)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1311 solution, residual, rank, s = np.linalg.lstsq(A, y-y_const, rcond=None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1312 # print(f'\nsolution ({type(solution)} {solution.shape}):\n\t{solution}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1313 # print(f'\nresidual ({type(residual)} {residual.shape}):\n\t{residual}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1314 # print(f'\nrank ({type(rank)} {rank.shape}):\n\t{rank}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1315 # print(f'\ns ({type(s)} {s.shape}):\n\t{s}\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1316
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1317 # Assemble result (compensate for normalization in expression models)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1318 for name, value in zip(free_parameters, solution):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1319 self._parameters[name].set(value=value)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1320 if self._normalized and (have_expression_model or len(expr_parameters)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1321 for name, norm in self._parameter_norms.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1322 par = self._parameters[name]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1323 if par.expr is None and norm:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1324 self._parameters[name].set(value=par.value*self._norm[1])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1325 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1326 # print(f'\nself._parameter_norms:\n\t{self._parameter_norms}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1327 self._result = ModelResult(self._model, deepcopy(self._parameters))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1328 self._result.best_fit = self._model.eval(params=self._parameters, x=x)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1329 if self._normalized and (have_expression_model or len(expr_parameters)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1330 if 'tmp_normalization_offset_c' in self._parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1331 offset = self._parameters['tmp_normalization_offset_c']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1332 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1333 offset = 0.0
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1334 self._result.best_fit = (self._result.best_fit-offset-self._norm[0])/self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1335 if self._normalized:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1336 for name, norm in self._parameter_norms.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1337 par = self._parameters[name]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1338 if par.expr is None and norm:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1339 value = par.value/self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1340 self._parameters[name].set(value=value)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1341 self._result.params[name].set(value=value)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1342 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1343 self._result.residual = self._result.best_fit-y
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1344 self._result.components = self._model.components
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1345 self._result.init_params = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1346 # quick_plot((x, y, '.'), (x, y_const, 'g'), (x, self._result.best_fit, 'k'), (x, self._result.residual, 'r'), block=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1347
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1348 def _normalize(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1349 """Normalize the data and initial parameters
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1350 """
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1351 if self._normalized:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1352 return
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1353 if self._norm is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1354 if self._y is not None and self._y_norm is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1355 self._y_norm = np.asarray(self._y)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1356 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1357 if self._y is not None and self._y_norm is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1358 self._y_norm = (np.asarray(self._y)-self._norm[0])/self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1359 self._y_range = 1.0
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1360 for name, norm in self._parameter_norms.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1361 par = self._parameters[name]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1362 if par.expr is None and norm:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1363 value = par.value/self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1364 _min = par.min
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1365 _max = par.max
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1366 if not np.isinf(_min) and abs(_min) != float_min:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1367 _min /= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1368 if not np.isinf(_max) and abs(_max) != float_min:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1369 _max /= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1370 par.set(value=value, min=_min, max=_max)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1371 self._normalized = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1372
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1373 def _renormalize(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1374 """Renormalize the data and results
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1375 """
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1376 if self._norm is None or not self._normalized:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1377 return
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1378 self._normalized = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1379 for name, norm in self._parameter_norms.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1380 par = self._parameters[name]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1381 if par.expr is None and norm:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1382 value = par.value*self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1383 _min = par.min
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1384 _max = par.max
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1385 if not np.isinf(_min) and abs(_min) != float_min:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1386 _min *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1387 if not np.isinf(_max) and abs(_max) != float_min:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1388 _max *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1389 par.set(value=value, min=_min, max=_max)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1390 if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1391 return
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1392 self._result.best_fit = self._result.best_fit*self._norm[1]+self._norm[0]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1393 for name, par in self._result.params.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1394 if self._parameter_norms.get(name, False):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1395 if par.stderr is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1396 par.stderr *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1397 if par.expr is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1398 _min = par.min
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1399 _max = par.max
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1400 value = par.value*self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1401 if par.init_value is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1402 par.init_value *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1403 if not np.isinf(_min) and abs(_min) != float_min:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1404 _min *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1405 if not np.isinf(_max) and abs(_max) != float_min:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1406 _max *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1407 par.set(value=value, min=_min, max=_max)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1408 if hasattr(self._result, 'init_fit'):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1409 self._result.init_fit = self._result.init_fit*self._norm[1]+self._norm[0]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1410 if hasattr(self._result, 'init_values'):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1411 init_values = {}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1412 for name, value in self._result.init_values.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1413 if name not in self._parameter_norms or self._parameters[name].expr is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1414 init_values[name] = value
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1415 elif self._parameter_norms[name]:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1416 init_values[name] = value*self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1417 self._result.init_values = init_values
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1418 for name, par in self._result.init_params.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1419 if par.expr is None and self._parameter_norms.get(name, False):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1420 value = par.value
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1421 _min = par.min
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1422 _max = par.max
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1423 value *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1424 if not np.isinf(_min) and abs(_min) != float_min:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1425 _min *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1426 if not np.isinf(_max) and abs(_max) != float_min:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1427 _max *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1428 par.set(value=value, min=_min, max=_max)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1429 par.init_value = par.value
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1430 # Don't renormalize chisqr, it has no useful meaning in physical units
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1431 #self._result.chisqr *= self._norm[1]*self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1432 if self._result.covar is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1433 for i, name in enumerate(self._result.var_names):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1434 if self._parameter_norms.get(name, False):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1435 for j in range(len(self._result.var_names)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1436 if self._result.covar[i,j] is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1437 self._result.covar[i,j] *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1438 if self._result.covar[j,i] is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1439 self._result.covar[j,i] *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1440 # Don't renormalize redchi, it has no useful meaning in physical units
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1441 #self._result.redchi *= self._norm[1]*self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1442 if self._result.residual is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1443 self._result.residual *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1444
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1445 def _reset_par_at_boundary(self, par, value):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1446 assert(par.vary)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1447 name = par.name
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1448 _min = self._parameter_bounds[name]['min']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1449 _max = self._parameter_bounds[name]['max']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1450 if np.isinf(_min):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1451 if not np.isinf(_max):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1452 if self._parameter_norms.get(name, False):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1453 upp = _max-0.1*self._y_range
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1454 elif _max == 0.0:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1455 upp = _max-0.1
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1456 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1457 upp = _max-0.1*abs(_max)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1458 if value >= upp:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1459 return(upp)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1460 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1461 if np.isinf(_max):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1462 if self._parameter_norms.get(name, False):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1463 low = _min+0.1*self._y_range
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1464 elif _min == 0.0:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1465 low = _min+0.1
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1466 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1467 low = _min+0.1*abs(_min)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1468 if value <= low:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1469 return(low)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1470 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1471 low = 0.9*_min+0.1*_max
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1472 upp = 0.1*_min+0.9*_max
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1473 if value <= low:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1474 return(low)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1475 elif value >= upp:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1476 return(upp)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1477 return(value)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1478
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1479
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1480 class FitMultipeak(Fit):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1481 """Fit data with multiple peaks
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1482 """
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1483 def __init__(self, y, x=None, normalize=True):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1484 super().__init__(y, x=x, normalize=normalize)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1485 self._fwhm_max = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1486 self._sigma_max = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1487
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1488 @classmethod
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1489 def fit_multipeak(cls, y, centers, x=None, normalize=True, peak_models='gaussian',
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1490 center_exprs=None, fit_type=None, background_order=None, background_exp=False,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1491 fwhm_max=None, plot_components=False):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1492 """Make sure that centers and fwhm_max are in the correct units and consistent with expr
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1493 for a uniform fit (fit_type == 'uniform')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1494 """
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1495 fit = cls(y, x=x, normalize=normalize)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1496 success = fit.fit(centers, fit_type=fit_type, peak_models=peak_models, fwhm_max=fwhm_max,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1497 center_exprs=center_exprs, background_order=background_order,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1498 background_exp=background_exp, plot_components=plot_components)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1499 if success:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1500 return(fit.best_fit, fit.residual, fit.best_values, fit.best_errors, fit.redchi, \
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1501 fit.success)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1502 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1503 return(np.array([]), np.array([]), {}, {}, float_max, False)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1504
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1505 def fit(self, centers, fit_type=None, peak_models=None, center_exprs=None, fwhm_max=None,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1506 background_order=None, background_exp=False, plot_components=False,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1507 param_constraint=False):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1508 self._fwhm_max = fwhm_max
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1509 # Create the multipeak model
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1510 self._create_model(centers, fit_type, peak_models, center_exprs, background_order,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1511 background_exp, param_constraint)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1512
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1513 # RV: Obsolete Normalize the data and results
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1514 # print('\nBefore fit before normalization in FitMultipeak:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1515 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1516 # self._normalize()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1517 # print('\nBefore fit after normalization in FitMultipeak:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1518 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1519
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1520 # Perform the fit
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1521 try:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1522 if param_constraint:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1523 super().fit(fit_kws={'xtol': 1.e-5, 'ftol': 1.e-5, 'gtol': 1.e-5})
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1524 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1525 super().fit()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1526 except:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1527 return(False)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1528
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1529 # Check for valid fit parameter results
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1530 fit_failure = self._check_validity()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1531 success = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1532 if fit_failure:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1533 if param_constraint:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1534 logging.warning(' -> Should not happen with param_constraint set, fail the fit')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1535 success = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1536 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1537 logging.info(' -> Retry fitting with constraints')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1538 self.fit(centers, fit_type, peak_models, center_exprs, fwhm_max=fwhm_max,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1539 background_order=background_order, background_exp=background_exp,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1540 plot_components=plot_components, param_constraint=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1541 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1542 # RV: Obsolete Renormalize the data and results
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1543 # print('\nAfter fit before renormalization in FitMultipeak:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1544 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1545 # self.print_fit_report()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1546 # self._renormalize()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1547 # print('\nAfter fit after renormalization in FitMultipeak:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1548 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1549 # self.print_fit_report()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1550
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1551 # Print report and plot components if requested
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1552 if plot_components:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1553 self.print_fit_report()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1554 self.plot()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1555
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1556 return(success)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1557
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1558 def _create_model(self, centers, fit_type=None, peak_models=None, center_exprs=None,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1559 background_order=None, background_exp=False, param_constraint=False):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1560 """Create the multipeak model
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1561 """
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1562 if isinstance(centers, (int, float)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1563 centers = [centers]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1564 num_peaks = len(centers)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1565 if peak_models is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1566 peak_models = num_peaks*['gaussian']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1567 elif isinstance(peak_models, str):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1568 peak_models = num_peaks*[peak_models]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1569 if len(peak_models) != num_peaks:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1570 raise ValueError(f'Inconsistent number of peaks in peak_models ({len(peak_models)} vs '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1571 f'{num_peaks})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1572 if num_peaks == 1:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1573 if fit_type is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1574 logging.debug('Ignoring fit_type input for fitting one peak')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1575 fit_type = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1576 if center_exprs is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1577 logging.debug('Ignoring center_exprs input for fitting one peak')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1578 center_exprs = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1579 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1580 if fit_type == 'uniform':
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1581 if center_exprs is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1582 center_exprs = [f'scale_factor*{cen}' for cen in centers]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1583 if len(center_exprs) != num_peaks:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1584 raise ValueError(f'Inconsistent number of peaks in center_exprs '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1585 f'({len(center_exprs)} vs {num_peaks})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1586 elif fit_type == 'unconstrained' or fit_type is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1587 if center_exprs is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1588 logging.warning('Ignoring center_exprs input for unconstrained fit')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1589 center_exprs = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1590 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1591 raise ValueError(f'Invalid fit_type in fit_multigaussian {fit_type}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1592 self._sigma_max = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1593 if param_constraint:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1594 min_value = float_min
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1595 if self._fwhm_max is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1596 self._sigma_max = np.zeros(num_peaks)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1597 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1598 min_value = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1599
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1600 # Reset the fit
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1601 self._model = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1602 self._parameters = Parameters()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1603 self._result = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1604
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1605 # Add background model
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1606 if background_order is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1607 if background_order == 0:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1608 self.add_model('constant', prefix='background', parameters=
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1609 {'name': 'c', 'value': float_min, 'min': min_value})
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1610 elif background_order == 1:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1611 self.add_model('linear', prefix='background', slope=0.0, intercept=0.0)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1612 elif background_order == 2:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1613 self.add_model('quadratic', prefix='background', a=0.0, b=0.0, c=0.0)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1614 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1615 raise ValueError(f'Invalid parameter background_order ({background_order})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1616 if background_exp:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1617 self.add_model('exponential', prefix='background', parameters=(
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1618 {'name': 'amplitude', 'value': float_min, 'min': min_value},
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1619 {'name': 'decay', 'value': float_min, 'min': min_value}))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1620
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1621 # Add peaks and guess initial fit parameters
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1622 ast = Interpreter()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1623 if num_peaks == 1:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1624 height_init, cen_init, fwhm_init = self.guess_init_peak(self._x, self._y)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1625 if self._fwhm_max is not None and fwhm_init > self._fwhm_max:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1626 fwhm_init = self._fwhm_max
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1627 ast(f'fwhm = {fwhm_init}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1628 ast(f'height = {height_init}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1629 sig_init = ast(fwhm_factor[peak_models[0]])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1630 amp_init = ast(height_factor[peak_models[0]])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1631 sig_max = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1632 if self._sigma_max is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1633 ast(f'fwhm = {self._fwhm_max}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1634 sig_max = ast(fwhm_factor[peak_models[0]])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1635 self._sigma_max[0] = sig_max
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1636 self.add_model(peak_models[0], parameters=(
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1637 {'name': 'amplitude', 'value': amp_init, 'min': min_value},
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1638 {'name': 'center', 'value': cen_init, 'min': min_value},
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1639 {'name': 'sigma', 'value': sig_init, 'min': min_value, 'max': sig_max}))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1640 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1641 if fit_type == 'uniform':
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1642 self.add_parameter(name='scale_factor', value=1.0)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1643 for i in range(num_peaks):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1644 height_init, cen_init, fwhm_init = self.guess_init_peak(self._x, self._y, i,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1645 center_guess=centers)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1646 if self._fwhm_max is not None and fwhm_init > self._fwhm_max:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1647 fwhm_init = self._fwhm_max
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1648 ast(f'fwhm = {fwhm_init}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1649 ast(f'height = {height_init}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1650 sig_init = ast(fwhm_factor[peak_models[i]])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1651 amp_init = ast(height_factor[peak_models[i]])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1652 sig_max = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1653 if self._sigma_max is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1654 ast(f'fwhm = {self._fwhm_max}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1655 sig_max = ast(fwhm_factor[peak_models[i]])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1656 self._sigma_max[i] = sig_max
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1657 if fit_type == 'uniform':
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1658 self.add_model(peak_models[i], prefix=f'peak{i+1}_', parameters=(
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1659 {'name': 'amplitude', 'value': amp_init, 'min': min_value},
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1660 {'name': 'center', 'expr': center_exprs[i]},
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1661 {'name': 'sigma', 'value': sig_init, 'min': min_value,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1662 'max': sig_max}))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1663 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1664 self.add_model('gaussian', prefix=f'peak{i+1}_', parameters=(
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1665 {'name': 'amplitude', 'value': amp_init, 'min': min_value},
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1666 {'name': 'center', 'value': cen_init, 'min': min_value},
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1667 {'name': 'sigma', 'value': sig_init, 'min': min_value,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1668 'max': sig_max}))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1669
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1670 def _check_validity(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1671 """Check for valid fit parameter results
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1672 """
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1673 fit_failure = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1674 index = compile(r'\d+')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1675 for name, par in self.best_parameters.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1676 if 'background' in name:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1677 # if ((name == 'backgroundc' and par['value'] <= 0.0) or
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1678 # (name.endswith('amplitude') and par['value'] <= 0.0) or
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1679 if ((name.endswith('amplitude') and par['value'] <= 0.0) or
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1680 (name.endswith('decay') and par['value'] <= 0.0)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1681 logging.info(f'Invalid fit result for {name} ({par["value"]})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1682 fit_failure = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1683 elif (((name.endswith('amplitude') or name.endswith('height')) and
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1684 par['value'] <= 0.0) or
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1685 ((name.endswith('sigma') or name.endswith('fwhm')) and par['value'] <= 0.0) or
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1686 (name.endswith('center') and par['value'] <= 0.0) or
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1687 (name == 'scale_factor' and par['value'] <= 0.0)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1688 logging.info(f'Invalid fit result for {name} ({par["value"]})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1689 fit_failure = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1690 if name.endswith('sigma') and self._sigma_max is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1691 if name == 'sigma':
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1692 sigma_max = self._sigma_max[0]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1693 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1694 sigma_max = self._sigma_max[int(index.search(name).group())-1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1695 if par['value'] > sigma_max:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1696 logging.info(f'Invalid fit result for {name} ({par["value"]})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1697 fit_failure = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1698 elif par['value'] == sigma_max:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1699 logging.warning(f'Edge result on for {name} ({par["value"]})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1700 if name.endswith('fwhm') and self._fwhm_max is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1701 if par['value'] > self._fwhm_max:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1702 logging.info(f'Invalid fit result for {name} ({par["value"]})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1703 fit_failure = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1704 elif par['value'] == self._fwhm_max:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1705 logging.warning(f'Edge result on for {name} ({par["value"]})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1706 return(fit_failure)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1707
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1708
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1709 class FitMap(Fit):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1710 """Fit a map of data
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1711 """
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1712 def __init__(self, ymap, x=None, models=None, normalize=True, transpose=None, **kwargs):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1713 super().__init__(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1714 self._best_errors = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1715 self._best_fit = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1716 self._best_parameters = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1717 self._best_values = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1718 self._inv_transpose = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1719 self._max_nfev = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1720 self._memfolder = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1721 self._new_parameters = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1722 self._out_of_bounds = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1723 self._plot = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1724 self._print_report = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1725 self._redchi = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1726 self._redchi_cutoff = 0.1
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1727 self._skip_init = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1728 self._success = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1729 self._transpose = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1730 self._try_no_bounds = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1731
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1732 # At this point the fastest index should always be the signal dimension so that the slowest
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1733 # ndim-1 dimensions are the map dimensions
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1734 if isinstance(ymap, (tuple, list, np.ndarray)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1735 self._x = np.asarray(x)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1736 elif have_xarray and isinstance(ymap, xr.DataArray):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1737 if x is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1738 logging.warning('Ignoring superfluous input x ({x}) in Fit.__init__')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1739 self._x = np.asarray(ymap[ymap.dims[-1]])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1740 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1741 illegal_value(ymap, 'ymap', 'FitMap:__init__', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1742 self._ymap = ymap
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1743
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1744 # Verify the input parameters
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1745 if self._x.ndim != 1:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1746 raise ValueError(f'Invalid dimension for input x {self._x.ndim}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1747 if self._ymap.ndim < 2:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1748 raise ValueError('Invalid number of dimension of the input dataset '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1749 f'{self._ymap.ndim}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1750 if self._x.size != self._ymap.shape[-1]:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1751 raise ValueError(f'Inconsistent x and y dimensions ({self._x.size} vs '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1752 f'{self._ymap.shape[-1]})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1753 if not isinstance(normalize, bool):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1754 logging.warning(f'Invalid value for normalize ({normalize}) in Fit.__init__: '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1755 'setting normalize to True')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1756 normalize = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1757 if isinstance(transpose, bool) and not transpose:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1758 transpose = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1759 if transpose is not None and self._ymap.ndim < 3:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1760 logging.warning(f'Transpose meaningless for {self._ymap.ndim-1}D data maps: ignoring '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1761 'transpose')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1762 if transpose is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1763 if self._ymap.ndim == 3 and isinstance(transpose, bool) and transpose:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1764 self._transpose = (1, 0)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1765 elif not isinstance(transpose, (tuple, list)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1766 logging.warning(f'Invalid data type for transpose ({transpose}, '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1767 f'{type(transpose)}) in Fit.__init__: setting transpose to False')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1768 elif len(transpose) != self._ymap.ndim-1:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1769 logging.warning(f'Invalid dimension for transpose ({transpose}, must be equal to '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1770 f'{self._ymap.ndim-1}) in Fit.__init__: setting transpose to False')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1771 elif any(i not in transpose for i in range(len(transpose))):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1772 logging.warning(f'Invalid index in transpose ({transpose}) '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1773 f'in Fit.__init__: setting transpose to False')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1774 elif not all(i==transpose[i] for i in range(self._ymap.ndim-1)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1775 self._transpose = transpose
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1776 if self._transpose is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1777 self._inv_transpose = tuple(self._transpose.index(i)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1778 for i in range(len(self._transpose)))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1779
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1780 # Flatten the map (transpose if requested)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1781 # Store the flattened map in self._ymap_norm, whether normalized or not
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1782 if self._transpose is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1783 self._ymap_norm = np.transpose(np.asarray(self._ymap), list(self._transpose)+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1784 [len(self._transpose)])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1785 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1786 self._ymap_norm = np.asarray(self._ymap)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1787 self._map_dim = int(self._ymap_norm.size/self._x.size)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1788 self._map_shape = self._ymap_norm.shape[:-1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1789 self._ymap_norm = np.reshape(self._ymap_norm, (self._map_dim, self._x.size))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1790
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1791 # Check if a mask is provided
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1792 if 'mask' in kwargs:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1793 self._mask = kwargs.pop('mask')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1794 if self._mask is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1795 ymap_min = float(self._ymap_norm.min())
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1796 ymap_max = float(self._ymap_norm.max())
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1797 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1798 self._mask = np.asarray(self._mask).astype(bool)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1799 if self._x.size != self._mask.size:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1800 raise ValueError(f'Inconsistent mask dimension ({self._x.size} vs '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1801 f'{self._mask.size})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1802 ymap_masked = np.asarray(self._ymap_norm)[:,~self._mask]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1803 ymap_min = float(ymap_masked.min())
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1804 ymap_max = float(ymap_masked.max())
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1805
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1806 # Normalize the data
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1807 self._y_range = ymap_max-ymap_min
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1808 if normalize and self._y_range > 0.0:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1809 self._norm = (ymap_min, self._y_range)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1810 self._ymap_norm = (self._ymap_norm-self._norm[0])/self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1811 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1812 self._redchi_cutoff *= self._y_range**2
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1813 if models is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1814 if callable(models) or isinstance(models, str):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1815 kwargs = self.add_model(models, **kwargs)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1816 elif isinstance(models, (tuple, list)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1817 for model in models:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1818 kwargs = self.add_model(model, **kwargs)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1819 self.fit(**kwargs)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1820
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1821 @classmethod
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1822 def fit_map(cls, ymap, models, x=None, normalize=True, **kwargs):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1823 return(cls(ymap, x=x, models=models, normalize=normalize, **kwargs))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1824
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1825 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1826 def best_errors(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1827 return(self._best_errors)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1828
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1829 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1830 def best_fit(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1831 return(self._best_fit)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1832
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1833 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1834 def best_results(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1835 """Convert the input data array to a data set and add the fit results.
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1836 """
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1837 if self.best_values is None or self.best_errors is None or self.best_fit is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1838 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1839 if not have_xarray:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1840 logging.warning('Unable to load xarray module')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1841 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1842 best_values = self.best_values
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1843 best_errors = self.best_errors
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1844 if isinstance(self._ymap, xr.DataArray):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1845 best_results = self._ymap.to_dataset()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1846 dims = self._ymap.dims
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1847 fit_name = f'{self._ymap.name}_fit'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1848 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1849 coords = {f'dim{n}_index':([f'dim{n}_index'], range(self._ymap.shape[n]))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1850 for n in range(self._ymap.ndim-1)}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1851 coords['x'] = (['x'], self._x)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1852 dims = list(coords.keys())
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1853 best_results = xr.Dataset(coords=coords)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1854 best_results['y'] = (dims, self._ymap)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1855 fit_name = 'y_fit'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1856 best_results[fit_name] = (dims, self.best_fit)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1857 if self._mask is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1858 best_results['mask'] = self._mask
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1859 for n in range(best_values.shape[0]):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1860 best_results[f'{self._best_parameters[n]}_values'] = (dims[:-1], best_values[n])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1861 best_results[f'{self._best_parameters[n]}_errors'] = (dims[:-1], best_errors[n])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1862 best_results.attrs['components'] = self.components
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1863 return(best_results)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1864
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1865 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1866 def best_values(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1867 return(self._best_values)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1868
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1869 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1870 def chisqr(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1871 logging.warning('property chisqr not defined for fit.FitMap')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1872 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1873
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1874 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1875 def components(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1876 components = {}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1877 if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1878 logging.warning('Unable to collect components in FitMap.components')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1879 return(components)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1880 for component in self._result.components:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1881 if 'tmp_normalization_offset_c' in component.param_names:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1882 continue
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1883 parameters = {}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1884 for name in component.param_names:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1885 if self._parameters[name].vary:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1886 parameters[name] = {'free': True}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1887 elif self._parameters[name].expr is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1888 parameters[name] = {'free': False, 'expr': self._parameters[name].expr}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1889 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1890 parameters[name] = {'free': False, 'value': self.init_parameters[name]['value']}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1891 expr = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1892 if isinstance(component, ExpressionModel):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1893 name = component._name
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1894 if name[-1] == '_':
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1895 name = name[:-1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1896 expr = component.expr
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1897 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1898 prefix = component.prefix
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1899 if len(prefix):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1900 if prefix[-1] == '_':
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1901 prefix = prefix[:-1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1902 name = f'{prefix} ({component._name})'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1903 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1904 name = f'{component._name}'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1905 if expr is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1906 components[name] = {'parameters': parameters}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1907 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1908 components[name] = {'expr': expr, 'parameters': parameters}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1909 return(components)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1910
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1911 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1912 def covar(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1913 logging.warning('property covar not defined for fit.FitMap')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1914 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1915
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1916 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1917 def max_nfev(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1918 return(self._max_nfev)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1919
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1920 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1921 def num_func_eval(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1922 logging.warning('property num_func_eval not defined for fit.FitMap')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1923 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1924
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1925 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1926 def out_of_bounds(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1927 return(self._out_of_bounds)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1928
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1929 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1930 def redchi(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1931 return(self._redchi)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1932
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1933 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1934 def residual(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1935 if self.best_fit is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1936 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1937 if self._mask is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1938 return(np.asarray(self._ymap)-self.best_fit)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1939 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1940 ymap_flat = np.reshape(np.asarray(self._ymap), (self._map_dim, self._x.size))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1941 ymap_flat_masked = ymap_flat[:,~self._mask]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1942 ymap_masked = np.reshape(ymap_flat_masked,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1943 list(self._map_shape)+[ymap_flat_masked.shape[-1]])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1944 return(ymap_masked-self.best_fit)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1945
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1946 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1947 def success(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1948 return(self._success)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1949
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1950 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1951 def var_names(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1952 logging.warning('property var_names not defined for fit.FitMap')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1953 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1954
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1955 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1956 def y(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1957 logging.warning('property y not defined for fit.FitMap')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1958 return(None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1959
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1960 @property
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1961 def ymap(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1962 return(self._ymap)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1963
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1964 def best_parameters(self, dims=None):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1965 if dims is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1966 return(self._best_parameters)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1967 if not isinstance(dims, (list, tuple)) or len(dims) != len(self._map_shape):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1968 illegal_value(dims, 'dims', 'FitMap.best_parameters', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1969 if self.best_values is None or self.best_errors is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1970 logging.warning(f'Unable to obtain best parameter values for dims = {dims} in '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1971 'FitMap.best_parameters')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1972 return({})
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1973 # Create current parameters
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1974 parameters = deepcopy(self._parameters)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1975 for n, name in enumerate(self._best_parameters):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1976 if self._parameters[name].vary:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1977 parameters[name].set(value=self.best_values[n][dims])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1978 parameters[name].stderr = self.best_errors[n][dims]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1979 parameters_dict = {}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1980 for name in sorted(parameters):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1981 if name != 'tmp_normalization_offset_c':
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1982 par = parameters[name]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1983 parameters_dict[name] = {'value': par.value, 'error': par.stderr,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1984 'init_value': self.init_parameters[name]['value'], 'min': par.min,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1985 'max': par.max, 'vary': par.vary, 'expr': par.expr}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1986 return(parameters_dict)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1987
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1988 def freemem(self):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1989 if self._memfolder is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1990 return
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1991 try:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1992 rmtree(self._memfolder)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1993 self._memfolder = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1994 except:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1995 logging.warning('Could not clean-up automatically.')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1996
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1997 def plot(self, dims, y_title=None, plot_residual=False, plot_comp_legends=False,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1998 plot_masked_data=True):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
1999 if not isinstance(dims, (list, tuple)) or len(dims) != len(self._map_shape):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2000 illegal_value(dims, 'dims', 'FitMap.plot', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2001 if self._result is None or self.best_fit is None or self.best_values is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2002 logging.warning(f'Unable to plot fit for dims = {dims} in FitMap.plot')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2003 return
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2004 if y_title is None or not isinstance(y_title, str):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2005 y_title = 'data'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2006 if self._mask is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2007 mask = np.zeros(self._x.size).astype(bool)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2008 plot_masked_data = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2009 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2010 mask = self._mask
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2011 plots = [(self._x, np.asarray(self._ymap[dims]), 'b.')]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2012 legend = [y_title]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2013 if plot_masked_data:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2014 plots += [(self._x[mask], np.asarray(self._ymap)[(*dims,mask)], 'bx')]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2015 legend += ['masked data']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2016 plots += [(self._x[~mask], self.best_fit[dims], 'k-')]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2017 legend += ['best fit']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2018 if plot_residual:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2019 plots += [(self._x[~mask], self.residual[dims], 'k--')]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2020 legend += ['residual']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2021 # Create current parameters
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2022 parameters = deepcopy(self._parameters)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2023 for name in self._best_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2024 if self._parameters[name].vary:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2025 parameters[name].set(value=
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2026 self.best_values[self._best_parameters.index(name)][dims])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2027 for component in self._result.components:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2028 if 'tmp_normalization_offset_c' in component.param_names:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2029 continue
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2030 if isinstance(component, ExpressionModel):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2031 prefix = component._name
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2032 if prefix[-1] == '_':
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2033 prefix = prefix[:-1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2034 modelname = f'{prefix}: {component.expr}'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2035 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2036 prefix = component.prefix
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2037 if len(prefix):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2038 if prefix[-1] == '_':
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2039 prefix = prefix[:-1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2040 modelname = f'{prefix} ({component._name})'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2041 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2042 modelname = f'{component._name}'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2043 if len(modelname) > 20:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2044 modelname = f'{modelname[0:16]} ...'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2045 y = component.eval(params=parameters, x=self._x[~mask])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2046 if isinstance(y, (int, float)):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2047 y *= np.ones(self._x[~mask].size)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2048 plots += [(self._x[~mask], y, '--')]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2049 if plot_comp_legends:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2050 legend.append(modelname)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2051 quick_plot(tuple(plots), legend=legend, title=str(dims), block=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2052
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2053 def fit(self, **kwargs):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2054 # t0 = time()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2055 # Check input parameters
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2056 if self._model is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2057 logging.error('Undefined fit model')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2058 if 'num_proc' in kwargs:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2059 num_proc = kwargs.pop('num_proc')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2060 if not is_int(num_proc, ge=1):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2061 illegal_value(num_proc, 'num_proc', 'FitMap.fit', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2062 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2063 num_proc = cpu_count()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2064 if num_proc > 1 and not have_joblib:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2065 logging.warning(f'Missing joblib in the conda environment, running FitMap serially')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2066 num_proc = 1
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2067 if num_proc > cpu_count():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2068 logging.warning(f'The requested number of processors ({num_proc}) exceeds the maximum '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2069 f'number of processors, num_proc reduced to ({cpu_count()})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2070 num_proc = cpu_count()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2071 if 'try_no_bounds' in kwargs:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2072 self._try_no_bounds = kwargs.pop('try_no_bounds')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2073 if not isinstance(self._try_no_bounds, bool):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2074 illegal_value(self._try_no_bounds, 'try_no_bounds', 'FitMap.fit', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2075 if 'redchi_cutoff' in kwargs:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2076 self._redchi_cutoff = kwargs.pop('redchi_cutoff')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2077 if not is_num(self._redchi_cutoff, gt=0):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2078 illegal_value(self._redchi_cutoff, 'redchi_cutoff', 'FitMap.fit', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2079 if 'print_report' in kwargs:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2080 self._print_report = kwargs.pop('print_report')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2081 if not isinstance(self._print_report, bool):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2082 illegal_value(self._print_report, 'print_report', 'FitMap.fit', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2083 if 'plot' in kwargs:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2084 self._plot = kwargs.pop('plot')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2085 if not isinstance(self._plot, bool):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2086 illegal_value(self._plot, 'plot', 'FitMap.fit', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2087 if 'skip_init' in kwargs:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2088 self._skip_init = kwargs.pop('skip_init')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2089 if not isinstance(self._skip_init, bool):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2090 illegal_value(self._skip_init, 'skip_init', 'FitMap.fit', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2091
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2092 # Apply mask if supplied:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2093 if 'mask' in kwargs:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2094 self._mask = kwargs.pop('mask')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2095 if self._mask is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2096 self._mask = np.asarray(self._mask).astype(bool)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2097 if self._x.size != self._mask.size:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2098 raise ValueError(f'Inconsistent x and mask dimensions ({self._x.size} vs '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2099 f'{self._mask.size})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2100
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2101 # Add constant offset for a normalized single component model
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2102 if self._result is None and self._norm is not None and self._norm[0]:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2103 self.add_model('constant', prefix='tmp_normalization_offset_', parameters={'name': 'c',
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2104 'value': -self._norm[0], 'vary': False, 'norm': True})
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2105 #'value': -self._norm[0]/self._norm[1], 'vary': False, 'norm': False})
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2106
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2107 # Adjust existing parameters for refit:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2108 if 'parameters' in kwargs:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2109 # print('\nIn FitMap before adjusting existing parameters for refit:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2110 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2111 # if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2112 # raise ValueError('Invalid parameter parameters ({parameters})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2113 # if self._best_values is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2114 # raise ValueError('Valid self._best_values required for refitting in FitMap.fit')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2115 parameters = kwargs.pop('parameters')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2116 # print(f'\nparameters:\n{parameters}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2117 if isinstance(parameters, dict):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2118 parameters = (parameters, )
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2119 elif not is_dict_series(parameters):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2120 illegal_value(parameters, 'parameters', 'Fit.fit', raise_error=True)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2121 for par in parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2122 name = par['name']
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2123 if name not in self._parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2124 raise ValueError(f'Unable to match {name} parameter {par} to an existing one')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2125 if self._parameters[name].expr is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2126 raise ValueError(f'Unable to modify {name} parameter {par} (currently an '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2127 'expression)')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2128 value = par.get('value')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2129 vary = par.get('vary')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2130 if par.get('expr') is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2131 raise KeyError(f'Illegal "expr" key in {name} parameter {par}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2132 self._parameters[name].set(value=value, vary=vary, min=par.get('min'),
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2133 max=par.get('max'))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2134 # Overwrite existing best values for fixed parameters when a value is specified
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2135 # print(f'best values befored resetting:\n{self._best_values}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2136 if isinstance(value, (int, float)) and vary is False:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2137 for i, nname in enumerate(self._best_parameters):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2138 if nname == name:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2139 self._best_values[i] = value
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2140 # print(f'best values after resetting (value={value}, vary={vary}):\n{self._best_values}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2141 #RV print('\nIn FitMap after adjusting existing parameters for refit:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2142 #RV self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2143
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2144 # Check for uninitialized parameters
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2145 for name, par in self._parameters.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2146 if par.expr is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2147 value = par.value
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2148 if value is None or np.isinf(value) or np.isnan(value):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2149 value = 1.0
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2150 if self._norm is None or name not in self._parameter_norms:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2151 self._parameters[name].set(value=value)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2152 elif self._parameter_norms[name]:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2153 self._parameters[name].set(value=value*self._norm[1])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2154
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2155 # Create the best parameter list, consisting of all varying parameters plus the expression
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2156 # parameters in order to collect their errors
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2157 if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2158 # Initial fit
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2159 assert(self._best_parameters is None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2160 self._best_parameters = [name for name, par in self._parameters.items()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2161 if par.vary or par.expr is not None]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2162 num_new_parameters = 0
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2163 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2164 # Refit
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2165 assert(len(self._best_parameters))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2166 self._new_parameters = [name for name, par in self._parameters.items()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2167 if name != 'tmp_normalization_offset_c' and name not in self._best_parameters and
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2168 (par.vary or par.expr is not None)]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2169 num_new_parameters = len(self._new_parameters)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2170 num_best_parameters = len(self._best_parameters)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2171
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2172 # Flatten and normalize the best values of the previous fit, remove the remaining results
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2173 # of the previous fit
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2174 if self._result is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2175 # print('\nBefore flatten and normalize:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2176 # print(f'self._best_values:\n{self._best_values}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2177 self._out_of_bounds = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2178 self._max_nfev = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2179 self._redchi = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2180 self._success = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2181 self._best_fit = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2182 self._best_errors = None
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2183 assert(self._best_values is not None)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2184 assert(self._best_values.shape[0] == num_best_parameters)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2185 assert(self._best_values.shape[1:] == self._map_shape)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2186 if self._transpose is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2187 self._best_values = np.transpose(self._best_values,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2188 [0]+[i+1 for i in self._transpose])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2189 self._best_values = [np.reshape(self._best_values[i], self._map_dim)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2190 for i in range(num_best_parameters)]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2191 if self._norm is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2192 for i, name in enumerate(self._best_parameters):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2193 if self._parameter_norms.get(name, False):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2194 self._best_values[i] /= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2195 #RV print('\nAfter flatten and normalize:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2196 #RV print(f'self._best_values:\n{self._best_values}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2197
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2198 # Normalize the initial parameters (and best values for a refit)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2199 # print('\nIn FitMap before normalize:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2200 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2201 # print(f'\nparameter_norms:\n{self._parameter_norms}\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2202 self._normalize()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2203 # print('\nIn FitMap after normalize:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2204 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2205 # print(f'\nparameter_norms:\n{self._parameter_norms}\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2206
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2207 # Prevent initial values from sitting at boundaries
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2208 self._parameter_bounds = {name:{'min': par.min, 'max': par.max}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2209 for name, par in self._parameters.items() if par.vary}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2210 for name, par in self._parameters.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2211 if par.vary:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2212 par.set(value=self._reset_par_at_boundary(par, par.value))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2213 # print('\nAfter checking boundaries:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2214 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2215
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2216 # Set parameter bounds to unbound (only use bounds when fit fails)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2217 if self._try_no_bounds:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2218 for name in self._parameter_bounds.keys():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2219 self._parameters[name].set(min=-np.inf, max=np.inf)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2220
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2221 # Allocate memory to store fit results
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2222 if self._mask is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2223 x_size = self._x.size
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2224 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2225 x_size = self._x[~self._mask].size
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2226 if num_proc == 1:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2227 self._out_of_bounds_flat = np.zeros(self._map_dim, dtype=bool)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2228 self._max_nfev_flat = np.zeros(self._map_dim, dtype=bool)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2229 self._redchi_flat = np.zeros(self._map_dim, dtype=np.float64)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2230 self._success_flat = np.zeros(self._map_dim, dtype=bool)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2231 self._best_fit_flat = np.zeros((self._map_dim, x_size),
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2232 dtype=self._ymap_norm.dtype)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2233 self._best_errors_flat = [np.zeros(self._map_dim, dtype=np.float64)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2234 for _ in range(num_best_parameters+num_new_parameters)]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2235 if self._result is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2236 self._best_values_flat = [np.zeros(self._map_dim, dtype=np.float64)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2237 for _ in range(num_best_parameters)]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2238 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2239 self._best_values_flat = self._best_values
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2240 self._best_values_flat += [np.zeros(self._map_dim, dtype=np.float64)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2241 for _ in range(num_new_parameters)]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2242 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2243 self._memfolder = './joblib_memmap'
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2244 try:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2245 mkdir(self._memfolder)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2246 except FileExistsError:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2247 pass
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2248 filename_memmap = path.join(self._memfolder, 'out_of_bounds_memmap')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2249 self._out_of_bounds_flat = np.memmap(filename_memmap, dtype=bool,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2250 shape=(self._map_dim), mode='w+')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2251 filename_memmap = path.join(self._memfolder, 'max_nfev_memmap')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2252 self._max_nfev_flat = np.memmap(filename_memmap, dtype=bool,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2253 shape=(self._map_dim), mode='w+')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2254 filename_memmap = path.join(self._memfolder, 'redchi_memmap')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2255 self._redchi_flat = np.memmap(filename_memmap, dtype=np.float64,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2256 shape=(self._map_dim), mode='w+')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2257 filename_memmap = path.join(self._memfolder, 'success_memmap')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2258 self._success_flat = np.memmap(filename_memmap, dtype=bool,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2259 shape=(self._map_dim), mode='w+')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2260 filename_memmap = path.join(self._memfolder, 'best_fit_memmap')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2261 self._best_fit_flat = np.memmap(filename_memmap, dtype=self._ymap_norm.dtype,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2262 shape=(self._map_dim, x_size), mode='w+')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2263 self._best_errors_flat = []
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2264 for i in range(num_best_parameters+num_new_parameters):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2265 filename_memmap = path.join(self._memfolder, f'best_errors_memmap_{i}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2266 self._best_errors_flat.append(np.memmap(filename_memmap, dtype=np.float64,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2267 shape=self._map_dim, mode='w+'))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2268 self._best_values_flat = []
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2269 for i in range(num_best_parameters):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2270 filename_memmap = path.join(self._memfolder, f'best_values_memmap_{i}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2271 self._best_values_flat.append(np.memmap(filename_memmap, dtype=np.float64,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2272 shape=self._map_dim, mode='w+'))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2273 if self._result is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2274 self._best_values_flat[i][:] = self._best_values[i][:]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2275 for i in range(num_new_parameters):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2276 filename_memmap = path.join(self._memfolder,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2277 f'best_values_memmap_{i+num_best_parameters}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2278 self._best_values_flat.append(np.memmap(filename_memmap, dtype=np.float64,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2279 shape=self._map_dim, mode='w+'))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2280
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2281 # Update the best parameter list
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2282 if num_new_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2283 self._best_parameters += self._new_parameters
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2284
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2285 # Perform the first fit to get model component info and initial parameters
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2286 current_best_values = {}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2287 # print(f'0 before:\n{current_best_values}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2288 # t1 = time()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2289 self._result = self._fit(0, current_best_values, return_result=True, **kwargs)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2290 # t2 = time()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2291 # print(f'0 after:\n{current_best_values}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2292 # print('\nAfter the first fit:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2293 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2294 # print(self._result.fit_report(show_correl=False))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2295
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2296 # Remove all irrelevant content from self._result
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2297 for attr in ('_abort', 'aborted', 'aic', 'best_fit', 'best_values', 'bic', 'calc_covar',
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2298 'call_kws', 'chisqr', 'ci_out', 'col_deriv', 'covar', 'data', 'errorbars',
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2299 'flatchain', 'ier', 'init_vals', 'init_fit', 'iter_cb', 'jacfcn', 'kws',
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2300 'last_internal_values', 'lmdif_message', 'message', 'method', 'nan_policy',
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2301 'ndata', 'nfev', 'nfree', 'params', 'redchi', 'reduce_fcn', 'residual', 'result',
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2302 'scale_covar', 'show_candidates', 'calc_covar', 'success', 'userargs', 'userfcn',
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2303 'userkws', 'values', 'var_names', 'weights', 'user_options'):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2304 try:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2305 delattr(self._result, attr)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2306 except AttributeError:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2307 # logging.warning(f'Unknown attribute {attr} in fit.FtMap._cleanup_result')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2308 pass
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2309
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2310 # t3 = time()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2311 if num_proc == 1:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2312 # Perform the remaining fits serially
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2313 for n in range(1, self._map_dim):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2314 # print(f'{n} before:\n{current_best_values}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2315 self._fit(n, current_best_values, **kwargs)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2316 # print(f'{n} after:\n{current_best_values}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2317 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2318 # Perform the remaining fits in parallel
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2319 num_fit = self._map_dim-1
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2320 # print(f'num_fit = {num_fit}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2321 if num_proc > num_fit:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2322 logging.warning(f'The requested number of processors ({num_proc}) exceeds the '+
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2323 f'number of fits, num_proc reduced to ({num_fit})')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2324 num_proc = num_fit
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2325 num_fit_per_proc = 1
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2326 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2327 num_fit_per_proc = round((num_fit)/num_proc)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2328 if num_proc*num_fit_per_proc < num_fit:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2329 num_fit_per_proc +=1
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2330 # print(f'num_fit_per_proc = {num_fit_per_proc}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2331 num_fit_batch = min(num_fit_per_proc, 40)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2332 # print(f'num_fit_batch = {num_fit_batch}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2333 with Parallel(n_jobs=num_proc) as parallel:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2334 parallel(delayed(self._fit_parallel)(current_best_values, num_fit_batch,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2335 n_start, **kwargs) for n_start in range(1, self._map_dim, num_fit_batch))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2336 # t4 = time()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2337
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2338 # Renormalize the initial parameters for external use
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2339 if self._norm is not None and self._normalized:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2340 init_values = {}
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2341 for name, value in self._result.init_values.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2342 if name not in self._parameter_norms or self._parameters[name].expr is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2343 init_values[name] = value
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2344 elif self._parameter_norms[name]:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2345 init_values[name] = value*self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2346 self._result.init_values = init_values
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2347 for name, par in self._result.init_params.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2348 if par.expr is None and self._parameter_norms.get(name, False):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2349 _min = par.min
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2350 _max = par.max
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2351 value = par.value*self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2352 if not np.isinf(_min) and abs(_min) != float_min:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2353 _min *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2354 if not np.isinf(_max) and abs(_max) != float_min:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2355 _max *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2356 par.set(value=value, min=_min, max=_max)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2357 par.init_value = par.value
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2358
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2359 # Remap the best results
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2360 # t5 = time()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2361 self._out_of_bounds = np.copy(np.reshape(self._out_of_bounds_flat, self._map_shape))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2362 self._max_nfev = np.copy(np.reshape(self._max_nfev_flat, self._map_shape))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2363 self._redchi = np.copy(np.reshape(self._redchi_flat, self._map_shape))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2364 self._success = np.copy(np.reshape(self._success_flat, self._map_shape))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2365 self._best_fit = np.copy(np.reshape(self._best_fit_flat,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2366 list(self._map_shape)+[x_size]))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2367 self._best_values = np.asarray([np.reshape(par, list(self._map_shape))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2368 for par in self._best_values_flat])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2369 self._best_errors = np.asarray([np.reshape(par, list(self._map_shape))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2370 for par in self._best_errors_flat])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2371 if self._inv_transpose is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2372 self._out_of_bounds = np.transpose(self._out_of_bounds, self._inv_transpose)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2373 self._max_nfev = np.transpose(self._max_nfev, self._inv_transpose)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2374 self._redchi = np.transpose(self._redchi, self._inv_transpose)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2375 self._success = np.transpose(self._success, self._inv_transpose)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2376 self._best_fit = np.transpose(self._best_fit,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2377 list(self._inv_transpose)+[len(self._inv_transpose)])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2378 self._best_values = np.transpose(self._best_values,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2379 [0]+[i+1 for i in self._inv_transpose])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2380 self._best_errors = np.transpose(self._best_errors,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2381 [0]+[i+1 for i in self._inv_transpose])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2382 del self._out_of_bounds_flat
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2383 del self._max_nfev_flat
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2384 del self._redchi_flat
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2385 del self._success_flat
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2386 del self._best_fit_flat
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2387 del self._best_values_flat
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2388 del self._best_errors_flat
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2389 # t6 = time()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2390
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2391 # Restore parameter bounds and renormalize the parameters
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2392 for name, par in self._parameter_bounds.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2393 self._parameters[name].set(min=par['min'], max=par['max'])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2394 self._normalized = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2395 if self._norm is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2396 for name, norm in self._parameter_norms.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2397 par = self._parameters[name]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2398 if par.expr is None and norm:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2399 value = par.value*self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2400 _min = par.min
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2401 _max = par.max
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2402 if not np.isinf(_min) and abs(_min) != float_min:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2403 _min *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2404 if not np.isinf(_max) and abs(_max) != float_min:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2405 _max *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2406 par.set(value=value, min=_min, max=_max)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2407 # t7 = time()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2408 # print(f'total run time in fit: {t7-t0:.2f} seconds')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2409 # print(f'run time first fit: {t2-t1:.2f} seconds')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2410 # print(f'run time remaining fits: {t4-t3:.2f} seconds')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2411 # print(f'run time remapping results: {t6-t5:.2f} seconds')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2412
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2413 # print('\n\nAt end fit:')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2414 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2415 # print(f'self._best_values:\n{self._best_values}\n\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2416
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2417 # Free the shared memory
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2418 self.freemem()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2419
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2420 def _fit_parallel(self, current_best_values, num, n_start, **kwargs):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2421 num = min(num, self._map_dim-n_start)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2422 for n in range(num):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2423 # print(f'{n_start+n} before:\n{current_best_values}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2424 self._fit(n_start+n, current_best_values, **kwargs)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2425 # print(f'{n_start+n} after:\n{current_best_values}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2426
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2427 def _fit(self, n, current_best_values, return_result=False, **kwargs):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2428 #RV print(f'\n\nstart FitMap._fit {n}\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2429 #RV print(f'current_best_values = {current_best_values}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2430 #RV print(f'self._best_parameters = {self._best_parameters}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2431 #RV print(f'self._new_parameters = {self._new_parameters}\n\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2432 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2433 # Set parameters to current best values, but prevent them from sitting at boundaries
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2434 if self._new_parameters is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2435 # Initial fit
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2436 for name, value in current_best_values.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2437 par = self._parameters[name]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2438 par.set(value=self._reset_par_at_boundary(par, value))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2439 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2440 # Refit
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2441 for i, name in enumerate(self._best_parameters):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2442 par = self._parameters[name]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2443 if name in self._new_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2444 if name in current_best_values:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2445 par.set(value=self._reset_par_at_boundary(par, current_best_values[name]))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2446 elif par.expr is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2447 par.set(value=self._best_values[i][n])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2448 #RV print(f'\nbefore fit {n}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2449 #RV self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2450 if self._mask is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2451 result = self._model.fit(self._ymap_norm[n], self._parameters, x=self._x, **kwargs)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2452 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2453 result = self._model.fit(self._ymap_norm[n][~self._mask], self._parameters,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2454 x=self._x[~self._mask], **kwargs)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2455 # print(f'\nafter fit {n}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2456 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2457 # print(result.fit_report(show_correl=False))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2458 out_of_bounds = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2459 for name, par in self._parameter_bounds.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2460 value = result.params[name].value
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2461 if not np.isinf(par['min']) and value < par['min']:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2462 out_of_bounds = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2463 break
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2464 if not np.isinf(par['max']) and value > par['max']:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2465 out_of_bounds = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2466 break
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2467 self._out_of_bounds_flat[n] = out_of_bounds
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2468 if self._try_no_bounds and out_of_bounds:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2469 # Rerun fit with parameter bounds in place
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2470 for name, par in self._parameter_bounds.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2471 self._parameters[name].set(min=par['min'], max=par['max'])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2472 # Set parameters to current best values, but prevent them from sitting at boundaries
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2473 if self._new_parameters is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2474 # Initial fit
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2475 for name, value in current_best_values.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2476 par = self._parameters[name]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2477 par.set(value=self._reset_par_at_boundary(par, value))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2478 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2479 # Refit
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2480 for i, name in enumerate(self._best_parameters):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2481 par = self._parameters[name]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2482 if name in self._new_parameters:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2483 if name in current_best_values:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2484 par.set(value=self._reset_par_at_boundary(par,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2485 current_best_values[name]))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2486 elif par.expr is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2487 par.set(value=self._best_values[i][n])
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2488 # print('\nbefore fit')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2489 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2490 # print(result.fit_report(show_correl=False))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2491 if self._mask is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2492 result = self._model.fit(self._ymap_norm[n], self._parameters, x=self._x, **kwargs)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2493 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2494 result = self._model.fit(self._ymap_norm[n][~self._mask], self._parameters,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2495 x=self._x[~self._mask], **kwargs)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2496 # print(f'\nafter fit {n}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2497 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2498 # print(result.fit_report(show_correl=False))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2499 out_of_bounds = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2500 for name, par in self._parameter_bounds.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2501 value = result.params[name].value
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2502 if not np.isinf(par['min']) and value < par['min']:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2503 out_of_bounds = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2504 break
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2505 if not np.isinf(par['max']) and value > par['max']:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2506 out_of_bounds = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2507 break
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2508 # print(f'{n} redchi < redchi_cutoff = {result.redchi < self._redchi_cutoff} success = {result.success} out_of_bounds = {out_of_bounds}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2509 # Reset parameters back to unbound
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2510 for name in self._parameter_bounds.keys():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2511 self._parameters[name].set(min=-np.inf, max=np.inf)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2512 assert(not out_of_bounds)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2513 if result.redchi >= self._redchi_cutoff:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2514 result.success = False
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2515 if result.nfev == result.max_nfev:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2516 # print(f'Maximum number of function evaluations reached for n = {n}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2517 # logging.warning(f'Maximum number of function evaluations reached for n = {n}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2518 if result.redchi < self._redchi_cutoff:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2519 result.success = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2520 self._max_nfev_flat[n] = True
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2521 if result.success:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2522 assert(all(True for par in current_best_values if par in result.params.values()))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2523 for par in result.params.values():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2524 if par.vary:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2525 current_best_values[par.name] = par.value
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2526 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2527 logging.warning(f'Fit for n = {n} failed: {result.lmdif_message}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2528 # Renormalize the data and results
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2529 self._renormalize(n, result)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2530 if self._print_report:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2531 print(result.fit_report(show_correl=False))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2532 if self._plot:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2533 dims = np.unravel_index(n, self._map_shape)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2534 if self._inv_transpose is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2535 dims= tuple(dims[self._inv_transpose[i]] for i in range(len(dims)))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2536 super().plot(result=result, y=np.asarray(self._ymap[dims]), plot_comp_legends=True,
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2537 skip_init=self._skip_init, title=str(dims))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2538 #RV print(f'\n\nend FitMap._fit {n}\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2539 #RV print(f'current_best_values = {current_best_values}')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2540 # self._parameters.pretty_print()
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2541 # print(result.fit_report(show_correl=False))
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2542 #RV print(f'\nself._best_values_flat:\n{self._best_values_flat}\n\n')
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2543 if return_result:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2544 return(result)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2545
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2546 def _renormalize(self, n, result):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2547 self._redchi_flat[n] = np.float64(result.redchi)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2548 self._success_flat[n] = result.success
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2549 if self._norm is None or not self._normalized:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2550 self._best_fit_flat[n] = result.best_fit
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2551 for i, name in enumerate(self._best_parameters):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2552 self._best_values_flat[i][n] = np.float64(result.params[name].value)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2553 self._best_errors_flat[i][n] = np.float64(result.params[name].stderr)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2554 else:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2555 pars = set(self._parameter_norms) & set(self._best_parameters)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2556 for name, par in result.params.items():
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2557 if name in pars and self._parameter_norms[name]:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2558 if par.stderr is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2559 par.stderr *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2560 if par.expr is None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2561 par.value *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2562 if self._print_report:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2563 if par.init_value is not None:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2564 par.init_value *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2565 if not np.isinf(par.min) and abs(par.min) != float_min:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2566 par.min *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2567 if not np.isinf(par.max) and abs(par.max) != float_min:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2568 par.max *= self._norm[1]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2569 self._best_fit_flat[n] = result.best_fit*self._norm[1]+self._norm[0]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2570 for i, name in enumerate(self._best_parameters):
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2571 self._best_values_flat[i][n] = np.float64(result.params[name].value)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2572 self._best_errors_flat[i][n] = np.float64(result.params[name].stderr)
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2573 if self._plot:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2574 if not self._skip_init:
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2575 result.init_fit = result.init_fit*self._norm[1]+self._norm[0]
98e23dff1de2 planemo upload for repository https://github.com/rolfverberg/galaxytools commit f8c4bdb31c20c468045ad5e6eb255a293244bc6c-dirty
rv43
parents:
diff changeset
2576 result.best_fit = np.copy(self._best_fit_flat[n])