Source code for sorts.radar.scans.plane

#!/usr/bin/env python

'''

'''

import numpy as np

from .scan import Scan

[docs]class Plane(Scan): '''A uniform sampling of a horizontal plane. '''
[docs] def __init__(self, min_elevation=30.0, altitude=200e3, x_size=50e3, y_size=50e3, x_num=20, y_num=20, dwell=0.1, x_offset=0.0, y_offset=0.0): super().__init__(coordinates='enu') self._dwell = dwell self.min_elevation = min_elevation self.altitude = altitude self.x_size = x_size self.y_size = y_size self.x_num = x_num self.y_num = y_num k = np.empty((3, x_num*y_num), dtype=np.float64) xv, yv = np.meshgrid( np.linspace(-x_size*0.5, x_size*0.5, num=self.x_num, endpoint=True) + x_offset, np.linspace(-y_size*0.5, y_size*0.5, num=self.y_num, endpoint=True) + y_offset, sparse=False, indexing='ij', ) k[0,:] = xv.flatten() k[1,:] = yv.flatten() k[2,:] = altitude k = k/np.linalg.norm(k, axis=0) min_z = np.sin(np.radians(min_elevation)) k = k[:, k[2,:] >= min_z] self.num = k.shape[1] self.pointings = k
[docs] def dwell(self, t=None): if t is None: return self._dwell else: if isinstance(t, float) or isinstance(t, int): return self._dwell else: return np.ones(t.shape, dtype=t.dtype)*self._dwell
[docs] def min_dwell(self): return self._dwell
[docs] def cycle(self): return self.num*self._dwell
[docs] def pointing(self, t): ind = (np.mod(t/self.cycle(), 1)*self.num).astype(np.int) return self.pointings[:,ind]