New ScreenPanel
This commit is contained in:
42
script/scans/PhaseScan.py
Executable file
42
script/scans/PhaseScan.py
Executable file
@@ -0,0 +1,42 @@
|
||||
from mathutils import *
|
||||
from plotutils import *
|
||||
|
||||
if is_ui():
|
||||
start = 0.0
|
||||
end = 360.0
|
||||
step = 10.0
|
||||
plt = plot(None, title="Harmonic Fit")[0]
|
||||
|
||||
#Plot setup
|
||||
plt.clear()
|
||||
plt.removeMarker(None)
|
||||
plt.addSeries(LinePlotSeries("data", color = Color.RED))
|
||||
plt.setLegendVisible(True)
|
||||
plt.getAxis(plt.AxisId.X).setRange(start, end)
|
||||
|
||||
#Creating an averager of the BPM
|
||||
avg = create_averager(bpm_x, 3, 0.100)
|
||||
|
||||
#The scan command
|
||||
def after(rec, scan):
|
||||
plt.getSeries(0).appendData(rec.positions[0], rec.values[0].mean)
|
||||
|
||||
r = lscan(phase, [avg], start, end, step, latency=0.2, after_read=after)
|
||||
|
||||
#Fitting
|
||||
rf_phase = r.getPositions(0)
|
||||
energy = [val.mean for val in r.getReadable(0)]
|
||||
(fit_ampl, fit_freq, fit_phase) = fit_harmonic(energy, rf_phase)
|
||||
ph_crest = round(-fit_phase / fit_freq, 3)
|
||||
function = HarmonicOscillator(fit_ampl, fit_freq, fit_phase)
|
||||
x = frange(min(rf_phase), max(rf_phase), 4.0, True, True)
|
||||
plot_function(plt, function, "fit", x, show_points=False, color=Color.BLUE)
|
||||
plt.addMarker(ph_crest, None, "ph_crest="+str(ph_crest), Color.MAGENTA)
|
||||
|
||||
#Return values
|
||||
print "ph_crest = ", ph_crest
|
||||
phase.write(ph_crest)
|
||||
phase_offset = round(90.0 - ph_crest, 3)
|
||||
amplitude_scale = round(fit_ampl / amplitude.read(), 3)
|
||||
power_scale = round(power.read() / math.pow(fit_ampl,2), 3)
|
||||
set_return([phase_offset, amplitude_scale,power_scale ])
|
||||
Reference in New Issue
Block a user