Release Notes#

Legend

  • Feature : Features something new which could not be done before

  • Efficiency : A change which affects the performance or memory usage.

  • Enhancement : An improvement to a previously existing feature.

  • Fix : Something which was not working as expected or leading to errors has been fixed.

  • API Change : This will require changes in your scripts or code.

Release v0.14.1 - June 2022#

Overall changes

  • Fix Use Scipy’s eigh instead of Numpy’s to avoid convergence error numpy.linalg.LinAlgError: Eigenvalues did not converge during model uncertainty propagation (#310, #311).

  • Fix Refactored the code to avoid the use of lambda and nested functions. This enables pickling DeerLab’s objects with Python’s pickle module without errors (#312).

  • Feature Added two new utility functions store_pickle and read_pickle that implement pickling with the dill package to be more robust against potential lambda functions defined by the users in scripts (#312).

  • Fix Fixed minor bug when printing fit results with many model parameters being frozen. The print command would return an error message (#329).

  • Fix Fixed bug when propagating bootstrapped uncertainty in presence of round-off errors (#325).

  • Fix Enhancement Multiple minor improvements and corrections in the documentation.

Release v0.14.0 - April 2022#

Overall changes

  • Feature API Change Complete overhaul of the DeerLab modelling and fitting interface. Check the new documentation for help and details. (#218, #223, #228, #237, #225, #243).

    • A new modelling system has been introduced. DeerLab main interface runs on a new Model object class. Models implement and provide the distinction between linear and non-linear parameters.

    • Model parameters are no longer (solely) identified by their indexing inside a parameter vector, but are referenced by name. This avoids the need for a user to recall the ordering of the parameters. This is now all handled internally. For example, before paramA = parameters[idxA] is now model.paramA.

    • Any model parameter is accessible from the model object and its boundaries, start values and other properties can be easily modified. For example, to change the lower boundary of a parameter: model.paramA.lb = 0.

    • A new general fit function that fits arbitrary Model objects to single or multiple datasets has been implemented. The function automatically handles the selection of solvers to optimally fit the data to the model.

    • Implemented a new function link to link model parameters (setting equality constraints in models).

    • Implemented a new function merge to create a model returning more than one response (allowing the creation of global models).

    • Implemented a new function relate to define functional relationships between model parameters.

    • Implemented a new function lincombine to create a model whose response is a linear combination of the inputs’ model responses.

    • Model parameters can now be frozen (set to a constant value and ignored during optimization) in the Model object and on the back-end snlls solver. For examples, to fix a parameter to a certain value: model.paramA.freeze(0.5).

    • Arbitrary normalization conditions can be imposed to the linear parameters.

    • Bootstrapping can now be requested directly from the fit function via the bootstrap keyword argument. The function will then return the bootstrap uncertainty quantification of all model parameters and of the model’s response instead of the covariance-based uncertainty.

    • Implemented a new function dipolarmodel, which generates models based on the dipolar EPR multi-pathway theoretical model.

    • Added new examples, adapted existing ones, and removed unneeded examples.

    • Add many new tests and removed tests related to deprecated functionality.

    • All the built-in parametric models are now pre-compiled Model objects instead of just functions.

    • The function fitmodel has been deprecated and removed. The original has been substituted (and greatly expanded) by the new dipolarmodel and fit functions.

    • The function fitmultimodel has been deprecated and removed. The original functionality can be easily scripted with the new modelling system. An example of has been added, describing how to script the same functionality.

  • Feature Introduced the profile-likelihood methodology both for uncertainty quantification based on likelihood-confidence intervals, and for identifiability analysis (#222).

    • Added a new function profile_analysis to calculate the objective function profiles from model object parameters.

    • Implemented a new uncertainty quantification UQResult object type 'profile' for results obtained from profile_analysis.

  • Feature Implemented a system to specify arbitrary penalty functions to be included in the non-linear part of the objective function during optimization. The penalties can be custom-defined and constructed into a Penalty object that can be passed to the fit function. Outer optimization of the penalty weights can also be included based on certain information-based criteria (#197, #218, #225).

    • Implemented a new object Penalty that includes the penalty function, weight parameter (and its boundaries), and the selection functional for optimization.

    • Adds new outer optimization options for the penalty weights, based on hard-coded model selection functionals. For now, the ICC, AIC, AICc, and BIC functionals are available.

    • Implemented a new function dipolarpenalty that generates dipolar-EPR-specific penalties, e.g. to induce compactness and/or smoothness.

  • Feature Implemented masking of datasets during optimization (#250).

  • Feature Added a verbose option to display progress of the fit routines (#250).

  • Feature Added support for analyzing and fitting complex-valued models and data (#127, #218).

  • Feature Orientation selection in dipolar signals can now be simulated for arbitrary orientation weights distributions via the orisel keyword argument in the new dipolarmodel or the dipolarkernel functions (#183, #203).

  • Feature Re-purposed the ex_ models. Each of these function represents a specific dipolar EPR experiment. These now take the experimental time delays as input, and return a new ExperimentInfo object. This can be passed to dipolarmodel via the optional keyword argument experiment to refine the boundaries and start values of the dipolar pathway refocusing times and amplitudes based on the experimental setup (#225).

  • Feature Implemented masking of datasets during optimization (#250).

  • Enhancement Overhaul of the DeerLab documentation website (#235).

    • Full HTML/CSS overhaul. The new web design based on the PyData theme has a clearer design, with more readable pages and code blocks.

    • Deprecates the use of the RTD theme. This removes the hard constraint of using Sphinx 1.8.0. Now the documentation builds with the latest Sphinx release.

    • Add a user-guide for the new modelling and fitting system.

    • Re-organize all of the website content.

    • Improved the dipolar EPR starting guide, and adapted it to the new system.

    • Fixed some minor errors in the examples.

    • Redesigned all examples towards the use of actual experimental data files in BES3T format. Examples can now be taken and easily adapted by users to their experiment data files (#304).

  • Enhancement Added the functionality to print a FitResult object to display a summary of the fit goodness-of-fit statistics and a table of all estimated parameters and their uncertainties (#234).

  • Enhancement Added a new keyword argument regparamrange to snlls and fit to specify the search range of the optimal regularization parameter (#225).

  • Enhancement Noise levels of the datasets can be optionally specified in all functions taking datasets (#213).

  • Enhancement Added the option to include or exclude the edges of vector in regoperator via a new keyword argument includeedges (#204). The default for all functions in DeerLab has been set to includeedges=False (#205, #230).

  • Enhancement Generalized the regularization operator. Related functions no longer take regorder (regularization operator order) as an argument. Instead they now take regop (the full regularization operator) as an argument (#216).

  • Enhancement Generalized the regularized linear least-squares functionality. Now it can handle arbitrary bounds on linear parameters and adapts the linear LSQ solver back end accordingly (#216).

  • Efficiency Improved performance of post-optimization model evaluation/propagation for large datasets (#200, #238).

  • Efficiency Implemented (adaptable) memory limits for potentially memory-intense functions (#201, #239).

  • API Change The function correctscale has been deprecated (#293). Its limited functionality is included in the now broader functionality provided by the new modelling and fitting system.

  • API Change The functions fitregmodel and fitparamodel have been deprecated and their core functionality merged into snlls. The snlls function now handles any kind of least-squares problem and automatically employs optimal combinations of solvers to find the solution to the problems (#218).

  • API Change Renamed the function bootan to bootstrap_analysis (#227).

  • API Change Deprecated TV and Huber regularization. Accordingly the keyword arguments regtype, huberparameter have been removed throughout (#216).

  • API Change Deprecated the nnlsbpp NNLS solver (#231).

  • API Change Deprecated the regparamrange function (#232). It depended on home-written code for the GSVD, which (as shown in previous issues) was prone to LAPACK backend problems and other bugs. This function was still a derelict from DeerAnalysis methodology.

  • API Change The function time2dist has been renamed to distancerange (#273, #274).- API Change The function time2dist has been renamed to distancerange (#273, #274).

  • API Change The convergence control arguments of the fit functions have now been renamed for consistency with the least_squares function of the SciPy package (#296).

  • API Change Changed the name of the parameter width to std in the dd_gauss, dd_gauss2, dd_gauss3, and ``dd_skewgauss``models (#278, #280).

  • Fix When using the multistart keyword argument, no longer includes the parameter boundaries in the set of multiple start values (#218).

  • Fix Fixed error (manifesting as nan values in the confidence intervals) caused by a division-by-zero in the covariance matrix estimation (#218).

  • Fix Fix encoding error during installation (#252). This error could disrupt the installation in OS with default encoding different from CP-1252.

  • Fix Implement a new function to ensure that estimated Jacobians are positive semi-definite matrices. This fixes the appearance of warnings and bugs when calculating confidence intervals (#216).

  • Fix Corrected the scale invariance behavior of the covariance-based uncertainty estimates (#218).

  • Fix Fixed multiple numpy.VisibleDeprecationWarning and RunTime warnings (#207, #212).

  • Fix Corrected the math in the documentation of some distance distribution models (#215).

  • Fix Corrected the behavior of dataset weights. These are no longer normalized at runtime and kept as specified by the users (#248, #250).

  • Fix While testing, now skips a unit test if an error with the Tk backend of Matplotlib occurs (#211).

  • Fix Fix multiple bugs and errors related to the new modelling and fitting system (#226, #233, #235, #241, #242, #244, #245, #246, #249).

  • Fix Correct behavior of multistart optimization for one-sided parameter boundaries (#252).

  • Fix Fix bug when globally fitting multiple datasets. The global weights were not being manipulated correctly in the estimation of the linear parameters leading to incorrect results (#302)

bootstrap_analysis

  • Efficiency Added a new keyword argument memorylimit to specify the maximal memory used by the bootstrap analysis (by default 8GB). If the total analysis is expected to exceed the memory limit, the function will abort the execution (#200, #238).

dipolarkernel

  • Feature Added a new option complex to request the complex-valued dipolar kernel to simulate the out-of-phase contributions to the dipolar signals (#258).

  • Efficiency Added a new keyword argument memorylimit to specify the maximal memory used by the dipolar kernel (by default 8GB). If the dipolar kernel is expected to exceed the memory limit, the function will abort the execution (#200, #238).

  • Fix Prompts error if wrong method is selected when specifying a limited excitation bandwidth (#181, #183).

bg_models

  • Feature Implemented the time-dependent phase shifts for all the built-in physical background models, namely bg_hon3d_phase, bg_hom3dex_phase, and bg_homfractal_phase (#258).

  • Enhancement Changed the implementation of bg_hom3dex (#258). This avoids the use of tabulated pre-calculated values. Accordingly the utility functions calculate_exvolume_redfactor and load_exvolume_redfactor have been removed.

  • Fix Improved the implementation and behavior of the bg_homfractal model (#258).

diststats

  • Fix Fixed the behavior when dealing with distributions with arbitrary integral values

selregparam

  • Enhancement Implemented a general LSQ solver as backend to adapt to different regularized optimization problem structures.

  • Enhancement Generalized the linear least-squares solver. (#216).

  • Enhancement In the brent mode, the search range is no longer selected from the min/max of regparamrange output, but from a new keyword argument searchrange set by default to [1e-8,1e2]. The default values were chosen as the statistical means of Monte-Carlo simulations of the min/max values of regparamrange’s output for typical 4-pulse DEER kernels (#232).

  • Enhancement In the grid mode, the grid-values are passed by the pre-existing keyword argument candidates. By default, if not specified, a grid will be generated from the searchrange argument (#232).

UQResult

  • Fix Ensures non-negativity of estimated parameter uncertainty probability density functions.

  • Enhancement Improve the behavior of UQresult.propagate() for bootstrapped uncertainty results. Now, instead of propagating bootstrapped uncertainty via the estimated covariance matrix, the uncertainty is propagated by bootstrapping from the bootstrapped uncertainty distributions (#218).

  • Fix Fix behavior of the bootstrap median (#254).

  • Fix Suppress multiple DeprecationWarning warnings during uncertainty calculations (#255).

  • Fix Fix error prompt when requesting private methods such as __deepcopy__ (#301, #303).

correctphase

  • Fix Implement a fully vectorized analytical solution, resulting in a 30-150x speedup (#256, #279).

  • API Change Eliminate the phase='posrealint' and phase='negrealint' options (#279).

deerload

  • Fix Raise warning instead of exception when parsing lines without key-value pairs (#256). This avoid errors when trying to load BES3T files with PulseSPEL scripts edited in different OS systems.

whitegaussnoise

  • API Change Renamed the argument level to std for clarity (#276).

  • API Change Make the argument std a required positional argument and no longer provide a default value (#276).

Release v0.13.2 - July 2021#

Overall changes

  • Fix Fixed an error appearing during installation in Windows systems. If during installation a python executable alias was not created, the call to the pipwin manager returned an error and the installation failed to download and install Numpy, SciPy and CVXOpt (#187).

  • Fix Fixed the rendering of certain code-blocks in the documentation examples which were appearing as plain text (#179, #184).

  • Fix Fixed the execution and rendering of the model examples in the documentation (#189, #190).

  • Fix Fixed a bug in snlls where one of the linear least-squares solvers can return results that violate the boundary conditions due to float-point round-off errors (#177, #188).

Release v0.13.1 - May 2021#

Overall changes

  • Fix Fixed the behavior of global weights throughout DeerLab fit functions. The keyword argument weights was not having any or the expected effect in the results in some fit functions. Also fixes the behavior of built-in plots for global fits (#168, #171).

  • Enhancement Optimize default weights in global fitting according to the datasets noise levels (#169, #174).

  • Fix Fixed a bug in snlls that was causing the confidence intervals in snlls, fitmodel and fitmultimodel to vanish for large signal scales (#165, #166).

deerload

  • Fix Corrected a bug that happened in certain BES3T Bruker spectrometer files, when there are entries under the MANIPULATION HISTORY LAYER section at the end of the descriptor file. Also fixed the reading of .XGF partner files (#164).

snlls

  • Enhancement The keyword argument extrapenalty now requires a function that takes both non-linear and linear parameters. Corrected the name of the keyword in the documentation (#175).

fitparamodel

  • Fix Fixed the scaling of the output FitResult.model and FitResult.modelUncert (#173).

ex_pseudotitration_parameter_free:

  • Fix Removed Ctot from second order term in the chemicalequalibrium polynomial (#163).


Release v0.13.0 - April 2021#

Overall changes

  • Feature DeerLab is now distributed via the Anaconda repository and can be installed with the conda package manager (#12, #157). The installation instructions have been expanded to describe the Anaconda installation (#155).

  • Feature DeerLab now supports Python 3.9.

  • Enhancement The function fitsignal has been re-named to fitmodel for correctness and consistency with other functions (#102).

  • Feature Added new experiment models for RIDME on systems with one to seven harmonic pathways (S=1/2 to S=7/2) to include all higher harmonics (overtones) (#79).

  • Enhancement Bootstrapping is now embedded into fitmodel to automatically bootstrap all output quantities without the need to write additional script lines (#55). In fitmodel a new option uq allows to switch between covariance or bootstrapping uncertainty quantification (#88).

  • Feature The function fitmodel now returns Vmod and Vunmod, the modulated and unmodulated contributions to the fitted dipolar signal, respectively, along their uncertainties as additional outputs (#78).

  • Feature Implemented several initialization strategies in fitmultimodel for multi-model components (#67). Three different new strategies 'spread', 'split' and 'merge' will initialize the parameter values of the N-component fit based on the results of the N-1/N+1 component fit to improve quality of results and speed.

  • Feature Added contribution guidelines to the documentation and automated list of DeerLab contributors.

  • Feature The function snlls now accepts additional custom penalties to include in the optimization (#76, #112).

  • Feature All fit functions now return the fit of the data along its uncertainty automatically as part of the FitResult object(#130, #134).

  • Feature Implemented a new method UQResult.join() to merge multiple uncertainty quantification objects (#154). This permits error propagation from multiple uncertainty sources to a common function.

  • Efficiency The performance of all fit functions has been considerably accelerated by removing call overheads in built-in DeerLab models (#100, #101, #143).

  • Fix Improved robustness of the installation from PyPI (#65):

  • Fix The installer no longer assumes the alias pip to be setup on the system.

  • Fix The installation will now handle cases when system-wide privileges are not available (#52).

  • Fix Improved robustness of the installation in Windows systems to avoid missing DLL errors (#64).

  • Fix The installer will now get the latest Numpy/Scipy releases in Windows systems available at the [Gohlke repository](https://www.lfd.uci.edu/~gohlke/pythonlibs/).

  • Fix Adapted piece of code leading to a VisibleDeprecationWarning visible during execution of certain DeerLab functions.

  • Enhancement Improved interface of built-in plots in FitResult.plot(). The method now returns a Matplotlib figure object (matplotlib.figure.Figure) instead of an axes object (matplotlib.axes._subplots.AxesSubplot) which can be modified more freely to adjust graphical elements (#85). The method now takes an optional keyword FitResult.plot(show=True\False) to enable/disable rendering of the graphics upon calling the method (#87).

  • Fix The fit objective values returned in FitResult.cost are now correct (previous versions had an erroneous 1/2 factor) (#80). The value is now returned as a scalar value instead of a single-element list (#81).

  • Enhancement Removed the re-normalization conventions K(t=0,r)=1 and B(t=0)=1 and associated options renormalize and renormpaths in the dipolarkernel and dipolarbackground functions (#99) to avoid identifiability issues between dipolar pathway amplitudes and signal scales during fitting (#76).

  • Enhancement The fit convergence criteria tol (objective function tolerance) and maxiter (iteration limit) are now exposed as keyword argument in all fit functions (#111, #112).

  • Enhancement Multiple improvements and corrections to the documentation (#95, #96, #104, #106, #107, #115, #122)

  • Fix Corrections in the metadata of multiple dd_models. The key Parameters of some models contained the wrong names.

  • Enhancement The metadata of the built-in models is now accessible and manipulable via function attributes (e.g. dd_gauss.parameters) rather than trought a returned dictionary (e.g. dd_gauss()['Parameters']) (#143).

  • Enhancement The keyword argument to request uncertainty quantification has been unified across all fitting functions. It is now uq (#120).

  • API Change The UncertQuant class has been renamed into UQResult (#123).

  • Enhancement Uncertainty quantification is now tested numerically against an external package (lmfit) to ensue quality and accuracy(#121).

  • Enhancement Expanded the collection of examples in the documentation, and improved existing ones (#144, #148, #153).

deerload

  • Fix Fixed behavior of the function when loading certain 2D-datasets in the BES3T format (#82, #83).

  • Fix In 2D-datasets, the abscissas are now returned as a list of abscissas instead of a single 2D-matrix (#83).

fitmodel

  • Fix Corrected the scaling behaviour of all outputs related to components of the dipolar signal to match the scaling of the original experimental data (#78).

  • Enhancement The built-in plot method FitResult.plot() now plots the unmodulated component fit as well with its uncertainty (#78).

  • Enhancement When plotting bootstrapped results with FitResult.plot(), the fit is substituted with the median of the bootstrapped distribution (#148).

  • Enhancement Extended information included in the verbose summary (#78).

  • Enhancement Simplified the interface for defining initial values and boundaries of parameters in fitsignal (#71). Now instead of defining, e.g., fitsignal(..., lb = [[],[50],[0.2, 0.5]]) one can define the individual vales/boundaries fitsignal(..., bg_lb = 50, ex_lb = [0.2,0.5]) by using the new keywords.

  • API Change Removed the keyword argument uqanalysis=True/False. The uncertainty quantification can now be disabled via the new keyword uq=None (#98).

  • Fix Corrected the behaviour of built-in start values when manually specifying boundaries (#73). If the built-in start values are outside of the user-specified boundaries the program will now automatically set the start values in the middle of the boundaries to avoid errors (#72)).

  • Enhancement Implemented the constraint Lam0+sum(lam)<=1 to ensure the structural-identifiability of Lam0 and V0 during SNLLS optimization of experiment models with more than one modulated dipolar pathway (i.e. does not affect ex_4pdeer) (#76, #108).

  • Enhancement The function now accepts any sequence input (lists, arrays, tuples, etc.) instead of just lists (#152).

  • API Change Removed the optional keyword argument regtype (#137).

  • Fix Fixed a bug in the scaling of the distance distribution uncertainty quantification (#148).

fitregmodel

  • Fix Corrected the behaviour of the uncertainty quantification when disabling the non-negativity constraint (#121).

fitparamodel

  • Fix Made par0 a positional argument instead of an optional keyword (#70). to avoid errors when not defined (#69).

  • API Change Keyword argument rescale has been renamed to fitscale (#128, pr:129).

snlls

  • Fix Corrected bug that was leading to the smoothness penalty being accounted for twice in the least-squares residual during optimization (#103).

  • Enhancement Now returns the uncertainty quantification of linear and nonlinear parts as separate objects nonlinUncert and linUncert (#108).

  • Enhancement Improved the covariance-based uncertainty analysis by including correlations between linear and non-linear parameters(#108).

  • Fix Improved the behavior of signal scale determination (#108).

  • Fix Enabled prescaling of the data to avoid scaling issues during uncertainty quantification (#132, #133).

  • Fix Corrected the behaviour of the uncertainty quantification when disabling the regularization penalty (#121).

diststats

  • Fix Now compatible with non-uniformly defined distance distributions (#92, #94)).

  • Fix Added internal validation step to avoid non-sensical results when confounding the syntax (#91).

dipolarkernel

  • Enhancement Now allows defining pathways without unmodulated components.

  • Fix All optional keyword arguments can only be passed as named and not positional arguments (#138)).

  • API Change The keyword pathways now only takes lists of pathways and not modulation depth parameters. A new separate keyword mod takes the modulation depth parameter for the simplified 4-pulse DEER kernel (#118, #138).

  • API Change Renamed the background argument keyword B into bg (#138).

regparamrange

  • Fix Implemented new CSD algorithm to avoid LAPACK library crashes encountered when using multiple DeerLab functions calling regparamrange internally (#68).

correctphase

  • Feature Implement new keyword phase to select the criterion for optimizing the phase for correction (#114, #131).

  • API Change Deprecated imaginary offset fitting (#131).

  • API Change Deprecated manual phase correction. Manual correction can be done by the user and is now described in the beginner’s guide (#131).


Release v0.12.2 - October 2020#

Overall changes

  • Fix Fit functions using the multistart option are now fully deterministic. The functions was using now a random generator to define the different start points, this is now deterministic.

  • Enhancement Documentation UI has been re-designed for a more confortable reading. Minor errors and outdated information have been corrected throughout. Expanded reference documentation of several functions for better understanding.

regparamrange

  • Fix The exception handling introduced in the previous release was still too specific. The function kept crashing due to SVD non-convergence errors during the GSVD. This has been fixed and the error will not lead to a crash. (#42).

dd_skewgauss

  • Fix Corrected an error in the implementation that was leading to wrong distributions (#61).

dd_models, ex_models

  • Enhancement Adapted numerical boundaries and start values of some built-in models to reflect better the physical reality. Afected models: dd_skewgauss, dd_triangle, dd_gengauss, ex_5pdeer, ex_ovl4pdeer.


Release v0.12.1 - October 2020#

Overall changes

  • Efficiency The calculation of the Jacobian for covariance-based uncertainty analysis has been simplified providing a significant boost in performance for all fit functions (#55).

  • Fix The Jacobian computation is more robust, now taking into consideration parameter boundaries (#58). This solves errors such as the ones reported in (#50).

  • Fix Broken examples in the documentation have been corrected (#57).

  • Enhancement When requesting attributes or method of a UncertQuant object under disabled uncertainty analysis (uqanalysis=False) now it will prompt an explanatory error instead of just crashing (#56).

fitsignal

  • Fix Corrected the behaviour of the scaling output (fit.scale). Now all fitted dipolar signals (fit.V) have the same scaling as the input signal (#53).

regparamrange

  • Fix Relaxed the exception handling to catch errors occuring under certain conditions. The function seems to crash due to LAPACK or SVD non-convergence errors during the GSVD, now these are catched and the alpha-range is estimated using simple SVD as an approximation. This function might be deprecated in a future release (#42).


Release v0.12.0 - October 2020#

Overall changes

  • Feature Added new function diststats to calculate different statistical quantities of the distance distribution and their corresponding uncertainties (#37).

  • Feature Introduced the option cores to bootan parallelize the bootstrapping using multiple CPUs (#35).

  • Enhancement The regularization operator matrices regoperator now include the edges of the distribution (#38). Now the smoothness penalty is imposed on the distribution edges avoiding the accumulation of distribution mass at the edges of r.

  • Enhancement The interface for defining dipolar pathways has been simplified (#41). For example, a signal with two dipolar pathways had to be defined as pathways = [[Lam0,np.nan], [lam1,T0]]. Now the unmodulated pathway must be defined by its amplitude and does not accept the use of np.nan, e.g. pathways = [Lam0, [lam1,T0]].

  • API Change The project version control has been switched from the Git-flow to the GitHub-flow design. The default branch has been switched from master to main, which is now always production-ready. All new contributions are merged into main exclusively by pull requests.

  • Enhancement The dependency on the lambda parameter has been removed from all phenomenological background models, and kept only for physical models (#43). Their interface with dipolarbackground and dipolarkernel have been updated accordingly.

bg_homfractal

  • Fix Corrected behavior of the model. For d=3 the model returned wrong values, and for d~=3 the model resulted in an error.

UncertQuant

  • Fix Fixed bug when propagating uncertainty to scalar functions.

deerload

  • Fix Fixed UTF-8 error when loading certain spectrometer files in MacOS (#30)

fitsignal

  • Fix The fitted scale of the signal is now properly calculated when fitting fully parametric signals.

  • Fix Fixed error occuring when fitting a dipolar evolution function with a non-parametric distribution.

selregparam

  • Fix Fixed bug occuring when requesting the lc or lr selection methods.

regparamange

  • Fix An error occuring at the BLAS/LAPLACK error ocurring under certain conditions in MacOS and Ubuntu is now handled to avoid a crash.


Release v0.11.0 - September 2020#

Overall changes

  • Enhancement All Gauss models (dd_gauss,etc.) now use the standard deviation sigma instead of the FWHM as the width parameter for consistency with other method such as Rice distributions (#19).

  • Fix All hard-wired random seeds have been removed.

  • Feature A new method plot() has been added to the FitResult class returned by all fit functions. This will create a basic plot of the fit results (#7).

snlls

  • API Change Renamed option penalty as reg and improved its interface (#13).

  • Enhancement The regularization parameter of the optimal solution is returned now (#20).

whitegaussnoise

  • Enhancement Added a seed option to select static noise realizations.

correctzerotime

  • Fix Fixed bug when zero-time is at start/end of array (#24).

  • Fix Function no longer rescales the experimental data passed on to the function.

fitsignal

  • Enhancement The regularization parameter of the optimal solution is returned now (#20).

  • Fix Bug fixed when fitting dipolar evolution functions (no background and no experiment models) with a parametric distance distribution.

fitmultimodel

  • Enhancement Start points are now spread over constrained parameter space grid instead of being randomble initiated(#22).

deerload

  • Fix Now returns the time axis in microseconds instead of nanoseconds (#21).

  • Fix The bug appearing when loading certain BES3T files has been fixed (#14).

fitregmodel

  • Enhancement Now returns the fitted dipolar signal in the FitResult output

correctscale

  • Fix The parameter fit ranges have been adjusted.


Release v0.10.0 - August 2020#

As of this version, DeerLab is based on Python in contrast to older versions based on MATLAB found [here](https://github.com/JeschkeLab/DeerLab-Matlab).

Overall changes

  • API Change The following functions have been deprecated due to limited usability or due to functionality overlap with other DeerLab functions: aptkernel, backgroundstart, fitbackground, paramodel, and time2freq.

  • Feature All fit functions now return a single FitResult output which will contain all results.

  • Feature All functions are now compatible with non-uniformly increasing distance axes.

  • Feature All fit functions are completely agnostic with respect of the abolute values of the signal amplitude. This is automatically fitted by all function and return as part of the results.

  • Feature Uncertainty quantification for all fit functions is returned as a UncertQuant object from which confidence intervals, parameter distributions, etc. can be generated generalizing the uncertainty interface for all DeerLab. Uncertainty can now be propagated to arbitrary functions.

fitparamodel

  • Enhancement The functionality has been streamlined. Function now fits arbitrary parametric models using non-linear leas-squares without consideration of whether it is a time-domain or distance-domain model. The models no longer need to take two inputs (axis+parameters) and now only tk the parameters as input.

fitregmodel

  • Fix Goodness-of-fit estimators are now computed using the proper estimation the degrees of freedom.

fitmultimodel

  • Fix Added internal measures to avoid situations where one or several components are suppressed by fitting zero-amplitudes making the method more stable.

uqst

  • Fix The uncertainty distributions of the parameters are now returned as properly normalized probability density functions.

fftspec

  • Fix Frequency axis construction has been corrected.

regoperator

  • Feature Now calculates the numerically exact finite-difference matrix using Fornberg’s method.

correctphase

  • Feature Now can handle 2D-datasets.