def test_ceil_to_odd_valid_angle(self): a = VAngle(4.2) b = utils.ceil_to_odd(a) self.assertEqual(a.original_unit, b.original_unit) self.assertEqual(a.sexa, b.sexa) self.assertEqual(b.deg, 5) a = VAngle(5.2) b = utils.ceil_to_odd(a) self.assertEqual(b.deg, 7)
def _get_spacing(self, receiver, frequency): self.beamsize = VAngle(receiver.get_beamsize(max(frequency))) if receiver.is_multifeed() and receiver.has_derotator: #we can exploit multifeed derotator optimization logger.info("applying multifeed derotator optimization for map generation") if not isinstance(self.spacing, VAngle): approx_spacing = self.beamsize / self.spacing scans_per_interleave = ceil(receiver.interleave / approx_spacing) if not scans_per_interleave == self.spacing: #logger.warning("Rounding to {0} scans per interleave".format(scans_per_interleave)) pass self.spacing = receiver.interleave / scans_per_interleave logger.info("Spacing subscans by {0}".format(self.spacing)) else: if (self.spacing > (receiver.interleave / 2)): logger.warning("Spacing is too high, map will be undersampled") scans_per_interleave = floor(receiver.interleave / self.spacing) #this is necessary for tsys and offsets self.beamsize = receiver.feed_extent * 2 if scans_per_interleave == 0: logger.warning("Spacing is too high for this receiver") scans_per_interleave = 1 self.spacing = 0 major_spacing = receiver.feed_extent * 2 + receiver.interleave + self.spacing _offset_x = (-1 * (self.length_x / 2)) + receiver.feed_extent self.dimension_x = 0 self.offset_x = [] while _offset_x <= (self.length_x / 2 + receiver.feed_extent): for i in range(scans_per_interleave): self.offset_x.append(_offset_x + i * self.spacing) _offset_x = _offset_x + major_spacing self.dimension_x = len(self.offset_x) _offset_y = (-1 * (self.length_y / 2)) + receiver.feed_extent self.dimension_y = 0 self.offset_y = [] while _offset_y <= (self.length_y / 2 + receiver.feed_extent): for i in range(scans_per_interleave): self.offset_y.append(_offset_y + i * self.spacing) _offset_y = _offset_y + major_spacing self.dimension_y = len(self.offset_y) else: if not isinstance(self.spacing, VAngle): self.spacing = self.beamsize / self.spacing self.dimension_x = utils.ceil_to_odd(self.length_x.deg / self.spacing.deg + 1) self.dimension_y = utils.ceil_to_odd(self.length_y.deg / self.spacing.deg + 1) logger.debug("Scan {0:d} dim_x {1:f} dim_y {2:f}".format(self.ID, self.dimension_x, self.dimension_x)) self.offset_x = [i * self.spacing for i in range(int(-1 * (self.dimension_x // 2)), int((self.dimension_x // 2) + 1))] self.offset_y = [i * self.spacing for i in range(int(-1 * (self.dimension_y // 2)), int((self.dimension_y // 2) + 1))]
def _get_spacing(self, receiver, frequency): self.beamsize = VAngle(receiver.get_beamsize(max(frequency))) if receiver.is_multifeed() and receiver.has_derotator: #we can exploit multifeed derotator optimization logger.info( "applying multifeed derotator optimization for map generation") if not isinstance(self.spacing, VAngle): approx_spacing = self.beamsize / self.spacing scans_per_interleave = ceil(receiver.interleave / approx_spacing) if not scans_per_interleave == self.spacing: #logger.warning("Rounding to {0} scans per interleave".format(scans_per_interleave)) pass self.spacing = receiver.interleave / scans_per_interleave logger.info("Spacing subscans by {0}".format(self.spacing)) else: if (self.spacing > (receiver.interleave / 2)): logger.warning( "Spacing is too high, map will be undersampled") scans_per_interleave = floor(receiver.interleave / self.spacing) #this is necessary for tsys and offsets self.beamsize = receiver.feed_extent * 2 if scans_per_interleave == 0: logger.warning("Spacing is too high for this receiver") scans_per_interleave = 1 self.spacing = 0 major_spacing = receiver.feed_extent * 2 + receiver.interleave + self.spacing _offset_x = (-1 * (self.length_x / 2)) + receiver.feed_extent self.dimension_x = 0 self.offset_x = [] while _offset_x <= (self.length_x / 2 + receiver.feed_extent): for i in range(int(scans_per_interleave)): self.offset_x.append(_offset_x + i * self.spacing) _offset_x = _offset_x + major_spacing self.dimension_x = len(self.offset_x) _offset_y = (-1 * (self.length_y / 2)) + receiver.feed_extent self.dimension_y = 0 self.offset_y = [] while _offset_y <= (self.length_y / 2 + receiver.feed_extent): for i in range(int(scans_per_interleave)): self.offset_y.append(_offset_y + i * self.spacing) _offset_y = _offset_y + major_spacing self.dimension_y = len(self.offset_y) else: if not isinstance(self.spacing, VAngle): self.spacing = self.beamsize / self.spacing self.dimension_x = utils.ceil_to_odd(self.length_x.deg / self.spacing.deg + 1) self.dimension_y = utils.ceil_to_odd(self.length_y.deg / self.spacing.deg + 1) logger.debug("Scan {0:d} dim_x {1:f} dim_y {2:f}".format( self.ID, self.dimension_x, self.dimension_x)) self.offset_x = [ i * self.spacing for i in range(int(-1 * (self.dimension_x // 2)), int((self.dimension_x // 2) + 1)) ] self.offset_y = [ i * self.spacing for i in range(int(-1 * (self.dimension_y // 2)), int((self.dimension_y // 2) + 1)) ]
def test_ceil_to_odd(self): self.assertEqual(utils.ceil_to_odd(4.2), 5) self.assertEqual(utils.ceil_to_odd(3.2), 5) self.assertEqual(utils.ceil_to_odd(-4.2), -3)