1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98

* getting NaN as one of X values leads to hard to diagnose problems,
need to filter it out at some stage and warn the user
* handle correlated parameters: use pseudoinverse for covariance matrix
* API: add all_datasets(): for n, title in F:all_datasets() do ...
(or a public class Dataset?)
* API: access to confidence intervals
* GUI: Tools > Macros
* document how to get Gaussian/Lorentzian width from Voigt
* info cov/errors  do not specify dataset
* samples: add CeO2 from http://mysite.du.edu/~balzar/ss_rr.htm
* XRPD  db of popular materials? but which are the most popular?
* GUI: plot histogram of residuals:
http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm
* Use more exact Voigt approximation from Faddeeva Package (by SGJ) or libcerf
* FFT data transformation using FFTW library,
fft[inv]xx, where xx is re, im, amp, e.g. @n = fftre(@3)
* convolution and deconvolution of two datasets or a dataset with Gaussian:
convolve(@0, @1); convolve(@0, 2.3); deconvolve(@0,3.4)
OR conv(@0, gauss(2.3))
* GUI: draw points (handles) for dragging peak width at half height
* CLI/GUI: use sigaction() instead of signal() to handle SIGINT
print a message from interrupt_handler()
* refactor sidebar; use wxDataViewCtrl for the lists at the sidebar,
rewrite ListWithColors::populate(), add sorting by clicking on column
header (use case: sort functions by centers)
* syntax enhancements: $min = @*.min(y if a)
print all: F[*](x) # print all components as columns
* finish the powder diffraction addon (Pawley fitting)
* add functions cot and coth
* allow all the functions from data transformation in variable/UDF definition
* GUI: there is ugly vertical line (a part of the fitted curve) in points
where the value is undefined (e.g. in ReadShockley function for x=0).
* GUI: when dataset is changed and the active function (i.e. the function
in the bottom of the sidebar) is not in the new active dataset, the active
function should also be changed (to the function that was active last time
this dataset was active)
* (?) GUI: possibility to plot horizontal/vertical lines on the main plot
(for example to show theoretical peak positions in XRD or to mark simulation
restarts in data from MD. Syntax: plot line x=42.2 label="foo"
* GUI: a simple (for the user) way to interrupt fitting. Requires two threads.
* confidence bands
* data smoothing (SavitzkyGolay and/or other methods)
* splines: fitting, guessing, handling knots in the GUI
* user defined functions:
 calculating limits, width, area, etc. for UDF
 ?? use LLVM for faster calculation of userdefined functions
* info dpeak [range]: show parameters of selected data range assuming that
this range contains a peak: area, center, FWHM, max, peakarea, backgrarea
(like in the Xview program)
* more sophisticated algorithms for peak detection
 compare methods from origin pkfind, peakfit, fitzpeak and other programs
 research papers: http://dx.doi.org/10.1016/j.chroma.2004.11.073
http://dx.doi.org/10.1002/cem.1005
http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2631518/
* "anonymous" function types: %f = ~1/(1+exp(11*(~0.663x))) > Anon1(a0,a1)
* fitting  external libraries to be considered/tested:
 ceressolver (or http://dlib.net/optimization.html)
 libgencurvefit (Differential Evolution),
 PaGMO library that collects many optimisation methods.
 GSL: https://www.sourceware.org/ml/gsldiscuss/2014q1/msg00025.html
* fitting: in addition to the least squares fit, add socalled robust fit
(it is called robust fit in the Numerical Recipes book), i.e. optimize
assuming the error distribution is other then Gaussian, eg. Lorenzian...;
there is also a literature about so called 'maximumlikelihood method'
in which the exact Poisson error distribution is handled.
