Removed deprecated DaFFT module. This module is replaced by DamarisFFT,
which extends the ADC_Result and Accumulation class.
This commit is contained in:
		| @@ -1,211 +0,0 @@ | ||||
| import warnings | ||||
| # enable warnings in Python 2.7 | ||||
| warnings.simplefilter('default') | ||||
| warnings.warn("use of DaFFT is deprecated, please use the methods of Accumulation and ADC_data classes provided by DamarisFFT.", DeprecationWarning) | ||||
| import numpy as N | ||||
| import numpy.fft as F | ||||
|  | ||||
| class FFT: | ||||
|     def __init__(self, one_result): | ||||
|         # create copy of one_result and work only on the copy | ||||
|         # also extract some informations | ||||
|         self.the_result = one_result + 0 | ||||
|         self.timepoints = N.array(one_result.x) | ||||
|         self.sampling_rate = one_result.get_sampling_rate() | ||||
|         self.data_points = one_result.get_ydata(0).size | ||||
|         self.aquisition_time = self.data_points / float(self.sampling_rate) | ||||
|         self.the_result.set_xlabel('Frequency [Hz]') | ||||
|              | ||||
|     def write_n(self, afile): | ||||
|         filename = open(afile,'w') | ||||
|         filename = open(afile,'a') | ||||
|         #print self.the_result.get_description_dictionary() | ||||
|         #filename.write('%s'%self.get_description_dictionary()) | ||||
|         for i in range(self.data_points): | ||||
|             filename.write('%e\t%e\t%e\n'%(self.the_result.x[i], self.the_result.y[0][i], self.the_result.y[1][i])) | ||||
|         filename.close()     | ||||
|         return self | ||||
|  | ||||
|     def base_corr(self, cutoff=0.3, show=0): | ||||
|         """ | ||||
|         Subtracts the mean of the last cutoff % of the timsignal | ||||
|         to get rid of the  DC part in the FFT and returns the | ||||
|         new data. | ||||
|         If cutoff is not given, the mean of the last 30% will be | ||||
|         subtracted. | ||||
|         If show=1 the result is return and not the instance. This allows to plot the baseline corrected signal | ||||
|         Example: | ||||
|         base_corr(cutoff=0.2, show=1) | ||||
|         """ | ||||
|         last_points = int(cutoff*self.data_points) | ||||
|         for i in range(2): | ||||
|             self.the_result.y[i] = self.the_result.y[i] - self.the_result.y[i][-last_points:].mean() | ||||
|         if show == 1 : | ||||
|             return self.the_result | ||||
|         return self | ||||
|  | ||||
|     def abs_fft(self, points=None, zoom=None,write = 'off'): | ||||
|         """ | ||||
|         Fourier transforms the timesignal; | ||||
|         points is the number of points to transform, if more points given than data points | ||||
|         the rest is zero padded | ||||
|      | ||||
|         absfft(points=4096) | ||||
|         """ | ||||
|         realdata = N.array(self.the_result.y[0]) | ||||
|         imdata = N.array(self.the_result.y[1]) | ||||
|         data = realdata + 1j*imdata | ||||
|         fftdata = F.fftshift(F.fft(data, points)) | ||||
|         absfft = N.sqrt(fftdata.real**2 + fftdata.imag**2) | ||||
|         # create our x axis | ||||
|         n = fftdata.size | ||||
|         self.the_result.x = F.fftshift(F.fftfreq(n, 1.0/self.sampling_rate)) | ||||
|         self.the_result.y[0] = absfft | ||||
|         self.the_result.y[1] = N.zeros(n) | ||||
|         if write == 'on': | ||||
|             return self | ||||
|         else: | ||||
|             if zoom is None: | ||||
|                 return self.the_result | ||||
|             else: | ||||
|                 center, width = zoom | ||||
|                 return self.zoom(self.the_result, center, width) | ||||
|  | ||||
|      | ||||
|     def fft(self, points=None, zoom=None, write='off'): | ||||
|         realdata = N.array(self.the_result.y[0]) | ||||
|         imdata = N.array(self.the_result.y[1]) | ||||
|         data = realdata + 1j*imdata | ||||
|         fftdata = F.fftshift(F.fft(data, points)) | ||||
|         # create our x axis | ||||
|         n = fftdata.size | ||||
|         self.the_result.x = F.fftshift(F.fftfreq(n, 1.0/self.sampling_rate)) | ||||
|         self.the_result.y[0] = fftdata.real | ||||
|         self.the_result.y[1] = fftdata.imag | ||||
|         if write == 'on': | ||||
|             return self | ||||
|         else: | ||||
|             if zoom is None: | ||||
|                 return self.the_result | ||||
|             else: | ||||
|                 center, width = zoom | ||||
|                 return self.zoom(self.the_result, center, width) | ||||
|  | ||||
|     def zoom(self,some_result, center="auto", width=1000): | ||||
|         if center == "auto": | ||||
|             i_center = int(self.the_result.y[0].argmax()) | ||||
|             maximum = self.the_result.y[0][i_center] | ||||
|             print "Maximum at Frequency:", self.the_result.x[i_center] | ||||
|         else: | ||||
|             i_center = int(self.data_points/2.0+self.data_points*center/self.sampling_rate) | ||||
|         #print "TODO: set width automagically" | ||||
|         #if width == "auto": | ||||
|         #    i_width = int(self.data_points*width) | ||||
|         i_width = int(self.data_points*width/self.sampling_rate) | ||||
|         some_result.x=some_result.x[i_center-i_width/2:i_center+i_width/2] | ||||
|         some_result.y[0]=some_result.y[0][i_center-i_width/2:i_center+i_width/2] | ||||
|         some_result.y[1]=some_result.y[1][i_center-i_width/2:i_center+i_width/2] | ||||
|         return some_result | ||||
|  | ||||
|     """  | ||||
|     Apodization functions: | ||||
|     * exp_window and gauss_window are S/N enhancing, | ||||
|     * dexp_window and traf_window are resolution enhancing | ||||
|     * standard windows [hamming, hanning, bartlett, blackman, kaiser-bessel] are also available  | ||||
|     self.timepoints        =    time points | ||||
|     self.aquisition_time    =    aquisition time (no. samples / sampling_rate) | ||||
|     line_broadening        =    line broadening factor (standard = 10 Hz) | ||||
|     gaussian_multiplicator  =    Gaussian Multiplication Factor for  | ||||
|             the double exponential apodization  | ||||
|             function (standard = 0.3) | ||||
|     """ | ||||
|     def exp_window(self, line_broadening=10, show=0): | ||||
|         apod = N.exp(-self.timepoints*line_broadening) | ||||
|         for i in range(2): | ||||
|             self.the_result.y[i] = self.the_result.y[i]*apod | ||||
|         if show == 1 : | ||||
|             return self.the_result | ||||
|         return self | ||||
|      | ||||
|     def gauss_window(self, line_broadening=10, show=0): | ||||
|         apod = N.exp(-(self.timepoints*line_broadening)**2) | ||||
|         for i in range(2): | ||||
|             self.the_result.y[i] = self.the_result.y[i]*apod | ||||
|         if show == 1 : | ||||
|             return self.the_result | ||||
|         return self | ||||
|      | ||||
|     def dexp_window(self, line_broadening=10, gaussian_multiplicator=0.3, show=0): | ||||
|         apod = N.exp(-(self.timepoints*line_broadening - gaussian_multiplicator*self.aquisition_time)**2) | ||||
|         for i in range(2): | ||||
|             self.the_result.y[i] = self.the_result.y[i]*apod  | ||||
|         if show == 1: | ||||
|             return self.the_result | ||||
|         return self | ||||
|      | ||||
|     def traf_window(self, line_broadening=10, show=0): | ||||
|         apod = (N.exp(-self.timepoints*line_broadening))**2 / ( (N.exp(-self.timepoints*line_broadening))**3  | ||||
|             + (N.exp(-self.aquisition_time*line_broadening))**3  ) | ||||
|         for i in range(2): | ||||
|             self.the_result.y[i] = self.the_result.y[i]*apod | ||||
|         if show == 1: | ||||
|             return self.the_result | ||||
|         return self | ||||
|      | ||||
|     def hanning_window(self, show=0): | ||||
|         apod = N.hanning(self.data_points) | ||||
|         for i in range(2): | ||||
|             self.the_result.y[i] = self.the_result.y[i]*apod | ||||
|         if show == 1: | ||||
|             return self.the_result | ||||
|         return self | ||||
|      | ||||
|     def hamming_window(self, show=0): | ||||
|         apod = N.hamming(self.data_points) | ||||
|         for i in range(2): | ||||
|             self.the_result.y[i] = self.the_result.y[i]*apod | ||||
|         if show == 1: | ||||
|             return self.the_result | ||||
|         return self | ||||
|      | ||||
|     def blackman_window(self, show=0): | ||||
|         apod = N.blackman(self.data_points) | ||||
|         for i in range(2): | ||||
|             self.the_result.y[i] = self.the_result.y[i]*apod | ||||
|         if show == 1: | ||||
|             return self.the_result | ||||
|         return self | ||||
|      | ||||
|     def bartlett_window(self, show=0): | ||||
|         apod = N.bartlett(self.data_points) | ||||
|         for i in range(2): | ||||
|             self.the_result.y[i] = self.the_result.y[i]*apod | ||||
|         if show == 1: | ||||
|             return self.the_result | ||||
|         return self | ||||
|      | ||||
|     def kaiser_window(self, beta=4, show=0, use_scipy=None): | ||||
|         if use_scipy == None: | ||||
|             # modified Bessel function of zero kind order from somewhere | ||||
|             def I_0(x): | ||||
|                 i0=0 | ||||
|                 fac = lambda n:reduce(lambda a,b:a*(b+1),range(n),1) | ||||
|                 for n in range(20): | ||||
|                     i0 += ((x/2.0)**n/(fac(n)))**2 | ||||
|                 return i0 | ||||
|          | ||||
|             t = N.arange(self.data_points, type=N.Float) - self.data_points/2.0 | ||||
|             T = self.data_points | ||||
|             # this is the window function array | ||||
|             apod = I_0(beta*N.sqrt(1-(2*t/T)**2))/I_0(beta) | ||||
|         else: | ||||
|             # alternative method using scipy | ||||
|             import scipy  | ||||
|             apod=scipy.kaiser(self.data_points, beta) | ||||
|          | ||||
|         for i in range(2): | ||||
|             self.the_result.y[i] = self.the_result.y[i]*apod | ||||
|         if show == 1: | ||||
|             return self.the_result | ||||
|         return self | ||||
|                          | ||||
		Reference in New Issue
	
	Block a user