Mercurial > ~darius > hgwebdir.cgi > pyinst
diff sitesurvey.py @ 42:184ea77c10e7
Use scipys interpolation routines rather than hand rolling.
author | Daniel O'Connor <darius@dons.net.au> |
---|---|
date | Wed, 28 Sep 2011 14:38:23 +0930 |
parents | 660a2997e720 |
children | 7ba7207df078 |
line wrap: on
line diff
--- a/sitesurvey.py Wed Sep 28 13:35:45 2011 +0930 +++ b/sitesurvey.py Wed Sep 28 14:38:23 2011 +0930 @@ -31,6 +31,7 @@ import exceptions import numpy import os +import scipy.interpolate import scpi import specan import sys @@ -86,21 +87,8 @@ self.calfreqs = freqs self.calgains = gains - def interp(self, freqs): - '''Interoplate the calibration over freqs and return an array''' - deltas = numpy.zeros(freqs.shape) - - for i in range(len(freqs)): - if freqs[i] < self.calfreqs[0] or freqs[i] > self.calfreqs[-1]: - raise exceptions.SyntaxError("Frequency %.1f is out of range of calibration %f - %f" % (f, calfreqs[0], calfreqs[-1])) - - # Find idx such that calfreqs[idx - 1] < freqs[i] <= calfreqs[idx] - idx = self.calfreqs.searchsorted(freqs[i]) - sf = (freqs[i] - self.calfreqs[idx - 1]) / (self.calfreqs[idx] - self.calfreqs[idx - 1]) - delta = ((self.calgains[idx] - self.calgains[idx - 1]) * sf) + self.calgains[idx] - deltas[i] = delta - return deltas - + # Create interpolation function + self.interp = scipy.interpolate.interp1d(self.calfreqs, self.calgains, bound_error = True) def getexpt(sequence): '''Given a sequence return the experiment which should be run next and how long until it should start'''