Author: tlinnet Date: Fri Nov 28 22:33:10 2014 New Revision: 26812 URL: http://svn.gna.org/viewcvs/relax?rev=26812&view=rev Log: Initial implementation of a gauss function and its chi2 function, to prepare for minfx minimisation. Task #7873 (https://gna.org/task/index.php?7873): Write wrapper function to nmrglue, to read .ft2 files and process them. Homepage: http://www.nmrglue.com/ Link to nmrglue discussion: https://groups.google.com/forum/#!forum/nmrglue-discuss The code is develop at Github: https://github.com/jjhelmus/nmrglue/ Google code: https://code.google.com/p/nmrglue/ Documentation: http://nmrglue.readthedocs.org/en/latest/index.html Modified: branches/nmrglue/lib/software/nmrglue.py Modified: branches/nmrglue/lib/software/nmrglue.py URL: http://svn.gna.org/viewcvs/relax/branches/nmrglue/lib/software/nmrglue.py?rev=26812&r1=26811&r2=26812&view=diff ============================================================================== --- branches/nmrglue/lib/software/nmrglue.py (original) +++ branches/nmrglue/lib/software/nmrglue.py Fri Nov 28 22:33:10 2014 @@ -23,7 +23,7 @@ """Module for the wrapper functions around the nmrglue module.""" # Python module imports. -from numpy import arange, argmax, exp, log, pi, sqrt +from numpy import arange, argmax, exp, log, ones, pi, sqrt import matplotlib.pyplot as plt import matplotlib.cm @@ -32,6 +32,7 @@ from lib.errors import RelaxError from lib.io import get_file_path from lib.spectrum.objects import Nmrglue_data +from target_functions.chi2 import chi2_rankN def contour_plot(spectrum_id=None, contour_start=30000., contour_num=20, contour_factor=1.20, ppm=True, show=False): @@ -109,6 +110,51 @@ return ax +def func_gauss(params=None, x=None): + """Calculate the Gaussian distribution for a given x value. + + @param params: The vector of parameter values. + @type params: numpy rank-1 float array + @keyword x: The x value to calculate the probability for. + @type x: numpy array + @return: The probability corresponding to x. + @rtype: float + """ + + # Unpack, + # a: The amplitude of the distribution. + # x0: The center of the distribution. + # sigma: The standard deviation of the distribution. + a, x0, sigma = params + + # Calculate and return the probability. + return a*exp(-(x-x0)**2/(2*sigma**2)) + + +def func_gauss_chi2(params=None, x=None, values=None): + """Target function for minimising chi2 in minfx, for Gaussian function fit. + + @param params: The vector of parameter values. + @type params: numpy rank-1 float array + @keyword x: The x points. + @type x: numpy array + @param values: The measured y values. + @type values: numpy array + @return: The chi2 value. + @rtype: float + """ + + # Calculate. + back_calc = func_gauss(params=params, x=x) + + # Return the total chi-squared value. + errors = ones(values.shape) + chi2 = chi2_rankN(data=values, back_calc_vals=back_calc, errors=errors) + + # Calculate and return the chi-squared value. + return chi2 + + def hist_plot(ndarray=None, hist_kwargs=None, show=False): """Flatten the 2D numpy array, and plot as histogram. @@ -178,13 +224,10 @@ #ax.annotate("Test 1", xy=(0.5, 0.5), xycoords="data", va="center", ha="center", bbox=dict(boxstyle="round", fc="w")) ax.annotate("FWHM=%3.2f std=%3.2f"%(fwhm, fwhm_std), xy=(x0, hm), xycoords="data", size=8, va="center", horizontalalignment="center", bbox=dict(boxstyle="round", facecolor="w")) - # Plot the gaussian function. - a = amp + # Calculate the gauss values. + params = amp, x0, fwhm_std + gauss = func_gauss(params=params, x=bincenters) sigma = fwhm_std - x = bincenters - - # Calculate the gauss values. - gauss = a*exp(-(x-x0)**2/(2*sigma**2)) # Plot the values. ax.plot(bincenters, gauss, 'r-', label='gauss')