In [1]:
%pylab inline
import numpy as np
import os
from scipy.optimize import curve_fit


Populating the interactive namespace from numpy and matplotlib

In [2]:
ydata = np.multiply([1e-6, .5, 1, 1.5, 2, 2.5, 3, 3.5],(1.410e-3*9.8)/100)
xdata = np.multiply(1.36e-3, [1.45, 1.52, 1.69, 1.8, 1.92, 2, 2.12, 2.25])
xdata_err = np.multiply(np.sqrt( np.power(np.multiply(np.ones_like(xdata), .2),2)
                         +np.power(np.divide(.05, [1.45, 1.52, 1.69, 1.8, 1.92, 2, 2.12, 2.25]), 2)), xdata)
ydata_err = np.multiply( np.sqrt(np.power(np.divide(.05e-2, np.array([1e-6, .5, 1, 1.5, 2, 2.5, 3, 3.5])/100), 2) 
                                 + (1e-6/1.410e-3)**2), ydata )

p, V = np.polyfit(xdata, ydata, 1, cov=True)

lin = np.poly1d(p)

data = np.transpose(vstack((xdata, xdata_err, ydata, ydata_err)))

head = "rmg \t delta_rmg \t muB \t delta_muB"

os.chdir("/users/aman/desktop/phys211/esr/data")

np.savetxt("magnetic_moment_run1.tsv", data, delimiter="\t", header = head)

os.chdir("/users/aman/desktop")

chisq = np.sum( (lin(xdata) - ydata)**2/ydata_err**2 )/len(ydata)

errorbar(xdata, ydata, yerr=ydata_err, fmt='o',ms = .1, label = "Raw Data")
plot(xdata, lin(xdata), label = "Linear Fit")
xlabel("$B \, (T)$")
ylabel("$rmg \, (N-m)$")
title("Finding $\mu$")
text(.002, .0002, "$-rmg = \mu B$"\
         "\n"
        "$\mu = %.4f\pm %.4f$" % (p[0], V[0,0]))
text(.0024, 0, "$\chi^2/N = %f$" % chisq)
legend(loc = 0)
savefig("/users/aman/desktop/phys211/esr/plots/rmgvsmub.pdf")



In [3]:
omega = np.divide(2*np.pi, [np.mean([12.8, 14.15, 12.13, 14.08, 13.60]), 11.41, 7.93, 5.48, 4.5, 3.75])
B = np.multiply(1.36e-3, [.85, 1, 1.5, 2, 2.5, 3])

sigma = np.std([12.8, 14.15, 12.13, 14.08, 13.60])
mu = np.mean([12.8, 14.15, 12.13, 14.08, 13.60])
T = np.array([mu, 11.41, 7.93, 5.48, 4.5, 3.75])
T_err = np.array([sigma/np.sqrt(5), T[1]*(sigma/mu), T[2]*(sigma/mu), T[3]*(sigma/mu), T[4]*(sigma/mu), T[5]*(sigma/mu)])

omega_err = (T_err/T)*omega

B_err = np.multiply(np.sqrt(np.power(np.multiply(np.ones_like(B), .2),2)
                         +np.power(np.divide(.05, [.85, 1, 1.5, 2, 2.5, 3]), 2)), B)

L = .00115
dL = 1e-6

def lin(x, *p):
    return p[0]*x

p, V = curve_fit(lin, B, omega, p0 = [.2])

yFit = lin(B, *p)

data = np.transpose(vstack((omega, omega_err, B, B_err)))

head = "omega \t delta_omega \t B \t delta_B"

os.chdir("/users/aman/desktop/phys211/esr/data")

np.savetxt("magnetic_moment_run2.tsv", data, delimiter="\t", header = head)

os.chdir("/users/aman/desktop")

chisq = np.sum( (yFit - omega)**2/omega_err**2 )/len(omega)

errorbar(B, omega, yerr = omega_err, fmt = 'o', ms = .1, label = "Raw Data")
plot(B, yFit, label = "Linear Fit")
ylabel("$\omega \, (Hz)$")
xlabel("$B \, (T)$")
title("Finding $\mu$")
text(0.0033,0.6, "$\omega = \gamma B$"\
         "\n"\
        "$\gamma = %.0f\pm %.0f$"\
         "\n"\
        "$\mu = %.3f \pm %.3f$"% (p[0], V[0,0], p[0]*L, (V[0,0]/p[0] + dL/L)*p[0]*L))
text(.0015, 1.1, "$\chi^2/N = %f$" % chisq)
plt.legend(loc = 0)
plt.savefig("/users/aman/desktop/phys211/esr/plots/omegavsB.pdf")



In [8]:
frequency = np.array([20.91, 22.93, 24.01, 25.65, 26.5, 27.55, 29.8, 31.07, 31.83])
vplus = np.array([35.2, 39.2, 40.0, 44.0, 44.8, 45.6, 48.8, 51.2, 52.0]) * 1e-3
vminus = np.array([-26.4, -28.8, -29.6, -32.0, -33.6, -34.4, -38.2, -40.0, -41.6]) * 1e-3

Bplus = vplus * 0.48e-3
Bminus = vminus * 0.48e-3

vplus_err = .1/vplus
vminus_err = .1/vminus

Bplus_err = vplus_err*Bplus
Bminus_err = vminus_err*Bminus

freq_err = ones_like(frequency) * .01 * 1e6

def lin(x, *p):
    return p[0]*x

pplus, Vplus = curve_fit(lin, Bplus, frequency, p0 = [2.8e9])

pminus, Vminus = curve_fit(lin, Bminus, frequency, p0 = [-2.8e9])

print pplus, pminus

###chi squared

chisqplus = np.sum( (lin(Bplus, pplus) - frequency)**2/freq_err**2 )/len(frequency)
chisqminus = np.sum( (lin(Bminus, pminus) - frequency)**2/freq_err**2 )/len(frequency)

print chisqplus, chisqminus

##plots
figure(figsize = (5, 5))
errorbar(Bplus, frequency, xerr = Bplus_err, yerr = freq_err, fmt = 'o', ms = .5, label = "Raw Data")
errorbar(Bminus, frequency, xerr = Bminus_err, yerr = freq_err, fmt = 'o', ms = .5, label = "Raw Data")
plot(Bplus, lin(Bplus, pplus), label = "Fit (+)")
plot(Bminus, lin(Bminus, pminus), label = "Fit (-)")
text(-.01,3.2e7, "$\omega = \gamma B$"\
         "\n"\
        "$\gamma_+ = %.2f \,MHz/T$" % (pplus[0]))
text(-.01,3.1e7, "$\gamma_- = %.2f \,MHz/T$" % (pminus[0]))
#text(-.01, 3e7, "$\chi_+^2/N = %f$" % chisqplus)
#text(-.01, 2.9e7, "$\chi_-^2/N = %f$" % chisqminus)
xlabel("B (T)")
ylabel("$\omega$ (MHz)")
title("Finding $\gamma$")
legend(loc = 0)
savefig("/users/aman/desktop/phys211/esr/plots/findinggamma.pdf")


[ 1250526.55920439] [-1639828.86103642]
2.13771491471e-09 2.34518742542e-09
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/usr/local/lib/python2.7/site-packages/IPython/core/formatters.pyc in __call__(self, obj)
    335                 pass
    336             else:
--> 337                 return printer(obj)
    338             # Finally look for special method names
    339             method = _safe_get_formatter_method(obj, self.print_method)

/usr/local/lib/python2.7/site-packages/IPython/core/pylabtools.pyc in <lambda>(fig)
    205 
    206     if 'png' in formats:
--> 207         png_formatter.for_type(Figure, lambda fig: print_figure(fig, 'png', **kwargs))
    208     if 'retina' in formats or 'png2x' in formats:
    209         png_formatter.for_type(Figure, lambda fig: retina_figure(fig, **kwargs))

/usr/local/lib/python2.7/site-packages/IPython/core/pylabtools.pyc in print_figure(fig, fmt, bbox_inches, **kwargs)
    115 
    116     bytes_io = BytesIO()
--> 117     fig.canvas.print_figure(bytes_io, **kw)
    118     data = bytes_io.getvalue()
    119     if fmt == 'svg':

/usr/local/lib/python2.7/site-packages/matplotlib/backend_bases.pyc in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, **kwargs)
   2209                 orientation=orientation,
   2210                 bbox_inches_restore=_bbox_inches_restore,
-> 2211                 **kwargs)
   2212         finally:
   2213             if bbox_inches and restore_bbox:

/usr/local/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in print_png(self, filename_or_obj, *args, **kwargs)
    519 
    520     def print_png(self, filename_or_obj, *args, **kwargs):
--> 521         FigureCanvasAgg.draw(self)
    522         renderer = self.get_renderer()
    523         original_dpi = renderer.dpi

/usr/local/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in draw(self)
    462         if __debug__: verbose.report('FigureCanvasAgg.draw', 'debug-annoying')
    463 
--> 464         self.renderer = self.get_renderer(cleared=True)
    465         # acquire a lock on the shared font cache
    466         RendererAgg.lock.acquire()

/usr/local/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in get_renderer(self, cleared)
    479 
    480         if need_new_renderer:
--> 481             self.renderer = RendererAgg(w, h, self.figure.dpi)
    482             self._lastKey = key
    483         elif cleared:

/usr/local/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in __init__(self, width, height, dpi)
     92         self.height = height
     93         if __debug__: verbose.report('RendererAgg.__init__ width=%s, height=%s'%(width, height), 'debug-annoying')
---> 94         self._renderer = _RendererAgg(int(width), int(height), dpi, debug=False)
     95         self._filter_renderers = []
     96 

ValueError: width and height must each be below 32768
<matplotlib.figure.Figure at 0x10b8174d0>

In [3]:
R = 2.69e-2
M = .13738
Om = 4.6*2*pi

L = .4*M*R**2*Om

f = sqrt( ((.4)*(R**2)*(Om)*(1e-5))**2 + ((.8)*(M)*(R)*(Om)*(5e-4))**2 + ((.4)*(M)*(R**2)*(0.1*2*pi))**2 )

print L, f, .4401/L, sqrt((.0002 * 1/L)**2 + (.4401*f)**2)


0.00114927977327 4.94932098469e-05 382.935478579 0.174022032074

In [ ]: