Resistribute vib_analyze pylab.hold()s to avoid auto-generated axis.
[calibcant.git] / calibcant / vib_analyze.py
index f7d8033e2678f45f146f2c5fb3ecca3d96ad2891..dc4af3b494684117127e619e3098ddbefd87024f 100755 (executable)
@@ -95,7 +95,8 @@ def vib_analyze(deflection_bits, freq, minFreq=500, maxFreq=7000,
         print "Fitted f(x) = C / ((A**2-x**2)**2 + (x*B)**2) with"
         print "A = %g, \t B = %g, \t C = %g" % (A, B, C)
 
-    vib_plot(deflection_bits, freq_axis, power, A, B, C, plotVerbose=plotVerbose)
+    vib_plot(deflection_bits, freq_axis, power, A, B, C,
+             plotVerbose=plotVerbose)
 
     # Our A is in uV**2, so convert back to Volts**2
     return lorentzian_area(A,B,C) * 1e-12
@@ -253,19 +254,20 @@ def vib_plot(deflection_bits, freq_axis, power, A, B, C,
         print "plotting"
         common._import_pylab()
         common._pylab.figure(config.BASE_FIGNUM+2)
-        common._pylab.hold(False)
 
         # plot time series
         common._pylab.subplot(311)
+        common._pylab.hold(False)
         common._pylab.plot(deflection_bits, 'r.')
         common._pylab.title("free oscillation")
 
         # plot histogram distribution and gaussian fit
         common._pylab.subplot(312)
+        common._pylab.hold(False)
         n, bins, patches = \
             common._pylab.hist(deflection_bits, bins=30,
                                normed=1, align='center')
-        gaus = numpy.zeros((len(bins),))
+        gaus = numpy.zeros((len(bins),), dtype=numpy.float)
         mean = deflection_bits.mean()
         std = deflection_bits.std()
         pi = numpy.pi
@@ -277,10 +279,19 @@ def vib_plot(deflection_bits, freq_axis, power, A, B, C,
         common._pylab.hold(False)
 
         # plot FFTed data
-        common._pylab.subplot(313)
+        axes = common._pylab.subplot(313)
+        common._pylab.hold(False)
         common._pylab.semilogy(freq_axis, power, 'r.-')
+        fitdata = C / ((A**2-freq_axis**2)**2 + (B*freq_axis)**2)
+        xmin,xmax = axes.get_xbound()
+        ymin,ymax = axes.get_ybound()
+        common._pylab.hold(True)
+        common._pylab.plot(freq_axis, fitdata, 'b-');
+        common._pylab.hold(False)
+        axes.axis([xmin,xmax,ymin,ymax])
+
         common._flush_plot()
-    if (plotVerbose or config.GNUPLOT_VERBOSE):
+    if (plotVerbose or config.GNUPLOT_VERBOSE): # TODO: cleanup and test
         # write all the ft data now
         fd = file(datafilename, 'w')
         for i in range(len(freq_axis)) :