Example #1
0
def params_Lorentzian(x, y):
    mod = LorentzianModel()
    params = mod.guess(y, x)
    print(params)
    out = mod.fit(y, params, x=x)
    print(out.fit_report(min_correl=0.3))
    init = mod.eval(params, x=x)
    plt.figure(2)
    plt.plot(x, y, 'b')
    plt.plot(x, init, 'k--')
    plt.plot(x, out.best_fit, 'r-')
Example #2
0
T = nm_per_px
y = projection
yf = scipy.fftpack.fft(y)
xf = np.linspace(0.0, 1.0/(2.0*T), N/2)

fig1, ax = plt.subplots(1)
thegraphy = 2.0/N * np.abs(yf[:N//2])
fromj = 9
toj = 17
ax.plot(xf[:50], thegraphy[:50], '-o')
y = thegraphy[fromj:toj]
x = xf[fromj:toj]
pars = mod.guess(y, x=x)
out = mod.fit(y, pars, x=x)
x2 = np.linspace(np.min(x), np.max(x), 300)
y2 = mod.eval(out.params, x=x2)
plt.plot(x2, y2, '--', alpha=1)
print(out.fit_report(min_correl=0.25))

fromj = 18
toj = 25
y = thegraphy[fromj:toj]
x = xf[fromj:toj]
pars = mod.guess(y, x=x)
out = mod.fit(y, pars, x=x)
x2 = np.linspace(np.min(x), np.max(x), 300)
params2 = out.params
# params2['center'] = 0.15390835*1.3
y2 = mod.eval(params2, x=x2)
plt.plot(x2, y2, '--', alpha=1)
print(out.fit_report(min_correl=0.25))
Example #3
0
            xls = pd.ExcelFile(Matrix_results_name)
            sheets = xls.sheet_names
            ##
            for sh in sheets:
                Matrix_results = pd.read_excel(Matrix_results_name, sheet_name=sh)  
                df = Matrix_results.iloc[:180, :] ### just the quadrant
                df=pd.DataFrame(df)
                for TR in df.columns:
                    data=df[TR] 
                    X=data.index.values
                    Y=data.values
                    mod = LorentzianModel()
                    #mod =GaussianModel()
                    pars = mod.guess(Y, x=X)
                    out = mod.fit(Y, pars, x=X)
                    Y_lorenz = mod.eval(pars, x=X)
                    #print(out.fit_report(min_correl=0.25))
                    #plt.plot(X, Y_lorenz, 'k--', label='Lorentzian')
                    #dec_angle_lorenz =  (90-np.where(Y_lorenz==max(Y_lorenz))[0][0])/2  #out.params['center'].value / 2
                    #error =  abs( (90-np.where(Y_lorenz==max(Y_lorenz))[0][0])/2 ) #round(ref_angle - dec_angle_lorenz, 3) 
                    error =  (90-np.where(Y_lorenz==max(Y_lorenz))[0][0])/2  #round(ref_angle - dec_angle_lorenz, 3) 
                    results.append( [error, TR, CONDITION, SUBJECT_USE_ANALYSIS, sh[-1], brain_region])
            
            
            


df = pd.DataFrame(np.array(results)) 
df.columns = ['error', 'TR', 'CONDITION', 'subject', 'session', 'ROI']
df['TR'] = df.TR.astype(float)
df['TR'] = df['TR'] * 2
def residuals(force_pickrange=False):
    datafolder = filedialog.askopenfilenames(
        initialdir="C:\\Users\Josh\IdeaProjects\OpticalPumping",
        title="Select data for bulk plotting")
    for filename in datafolder:
        if 'data' in filename:
            global dat3
            name_ext = filename.split('/')[-1]
            name_no_ending = name_ext.split('.csv')[0]
            parts = name_no_ending.split('_')
            print(parts)

            dat1 = read_csv(
                "C:\\Users\\Josh\\IdeaProjects\\OpticalPumping\\Sweep_dat\\{}".
                format(name_ext),
                names=['xdat', 'ydat'])
            dat1 = dat1[np.abs(dat1['xdat'] - dat1['xdat'].mean()) <= (
                3 * dat1['xdat'].std())]
            xdat = np.array(dat1['xdat'])
            ydat = np.array(dat1['ydat'])
            if force_pickrange:
                fig1, ax1 = plt.subplots()
                plt.title('Pick Ranges for Exponential decay fit')
                Figure1, = ax1.plot(xdat, ydat, '.')
                print(xdat[5], xdat[-5])
                plt.xlim([xdat[5], xdat[-5]])
                Sel3 = RangeTool(xdat, ydat, Figure1, ax1, name_no_ending)
                fullscreen()
                plt.show()
                dat3 = Sel3.return_range()
            if not force_pickrange:
                try:
                    dat3 = read_csv(
                        "C:\\Users\\Josh\\IdeaProjects\\OpticalPumping\\Sweep_ranges\\{}"
                        .format(name_ext),
                        names=[
                            'Lower Bound', 'LowerIndex', 'Upper Bound',
                            'UpperIndex'
                        ])
                except FileNotFoundError or force_pickrange:
                    fig1, ax1 = plt.subplots()
                    plt.title('Pick Ranges for Exponential decay fit')
                    Figure1, = ax1.plot(xdat, ydat, '.')
                    print(xdat[5], xdat[-5])
                    plt.xlim([xdat[5], xdat[-5]])
                    Sel3 = RangeTool(xdat, ydat, Figure1, ax1, name_no_ending)
                    fullscreen()
                    plt.show()
                    dat3 = Sel3.return_range()

            mdl = LorentzianModel()
            try:
                lowerindex = int(dat3.at[0, 'LowerIndex'])
                upperindex = int(dat3.at[0, 'UpperIndex'])
            except ValueError:
                pass
            try:
                params = mdl.guess(data=ydat[lowerindex:upperindex],
                                   x=xdat[lowerindex:upperindex])
                result = mdl.fit(ydat[lowerindex:upperindex],
                                 params,
                                 x=xdat[lowerindex:upperindex])
                resultdata = mdl.eval(x=xdat[lowerindex:upperindex],
                                      params=result.params)
                # print(result.fit_report())
                MultiPlot(xdat[lowerindex:upperindex],
                          ydat[lowerindex:upperindex], resultdata, xdat, ydat,
                          name_no_ending, parts[1])
            except UnboundLocalError:
                pass