QuadFit
fit_quadratic(listof TrialPosition trials)
Fit a quadratic to the fluxes measured at various trial offset positions.
listof TrialPosition trials
# Set up a list of trial focus position offsets, with initially zeroed fluxes listof TrialPosition trials = { {-10.0, 0, 0}, # A -10mm focus position offset. { -5.0, 0, 0}, # A -5mm focus position offset. { 0.0, 0, 0}, # A 0mm focus position offset. { 5.0, 0, 0}, # A +5mm focus position offset. { 10.0, 0, 0} # A +10mm focus position offset. } # Start moving to a suitable point source. track saturn until $acquired(source) # Wait to acquire the source. # Go to the focus position indicated by the focus curve. focus until $acquired(focus) # Lookup the acquired focus position. Double origin = $focus_position() # Measure the received power at each of the above trial focus # position offsets from the initial focus position. foreach(TrialPosition p) $trials { set_focus $origin + $p.offset # Move to the latest focus position. until $acquired(focus) # Wait to acquire the focus position. request_flux kuband, ant, 0:0:10 # Ask for a 10s integrated flux. until $acquired(flux) # Wait for the flux to be returned. p.flux = $requested_flux().flux # Record the flux in the list. p.sdev = $requested_flux().sdev # Record the uncertainty in the list. } # Attempt to fit a quadratic curve through the above offset fluxes. QuadFit fit = $fit_quadratic($trials) # Display the results. print "Fit: Origin position of fit=", $origin, "mm rchisq=", $fit.rchisq print "Fit: a=", $fit.a, " b=", $fit.b, " c=", $fit.c if($fit.c < 0) { print "Fit: Focus maximum of ", $fit.mid_flux, "counts at ", $fit.mid_offset + $origin, " mm" } else if($fit.c > 0) { print "Fit: Focus minimum of ", $fit.mid_flux, "counts at ", $fit.mid_offset + $origin, " mm" } else { print "Fit: No focus minimum or maximum found." }TBD.