def load_mask_mutable(self, order, dtype=np.double): assert dtype == np.double if self._mask is not None: x = as_single_map(self._mask, dtype=dtype, type='mask') downgrading = self.Nside < x.Nside x = x.reformat_and_discard(order, self.Nside, _strict=True) if downgrading: x = pixel_sphere_map( (x > self._mask_downgrade_treshold).view(np.ndarray), pixel_order=order) else: x = pixel_sphere_map(1, Nside=self.Nside, pixel_order=order) return x
def map_from_fits(desc, type, dtype=np.double): filename, extno, field = desc if extno is None or field is None: raise ValueError("extno and field must be provided") if isinstance(field, int) and field < 0: raise ValueError("field must be >= 0") import pyfits hdulist = pyfits.open(filename) try: ext = hdulist[extno] field = fits_resolve_field(ext, field, desc) mapdata = ext.data.field(field).ravel().astype(dtype) units = ext.columns[field].unit.split(',')[0] if type == 'temperature': if units == 'mK': mapdata *= 1e-3 # convert to Kelvin elif units == 'uK': mapdata *= 1e-6 else: raise FormatError('Do not recognize temperature units: %s' % (units)) elif type == 'count': if units != 'counts': raise FormatError('Do not recognize count units: %s' % (units)) elif type in ('mask', 'raw'): pass else: raise ValueError('Wrong map type: %s' % type) map = pixel_sphere_map(mapdata, pixel_order=ext.header['ORDERING'].lower() # nested or ring ) finally: hdulist.close() return map
def load_temperature(self, order='nested', dtype=np.double): key = ('temperature', order, dtype) x = self._cache.get(key, None) if x is None: map = self.load_temperature_mutable(order, dtype) x = readonly_array(map) x = pixel_sphere_map(x, pixel_order=map.pixel_order, Nside=map.Nside) self._cache[key] = x return x
def _load(self, name, loader, order, dtype, *args): key = (name, order, dtype) x = self._cache.get(key, None) if x is None: map = loader(order, dtype, *args) x = readonly_array(map) x = pixel_sphere_map(x, pixel_order=map.pixel_order, Nside=map.Nside) self._cache[key] = x return x
def wmap_temperature_mask(self, dtype=np.float64): filename = self.path('wmap_temperature_analysis_mask_r9_7yr_v4.fits') import pyfits import maps hdulist = pyfits.open(self.path(filename)) try: data = hdulist[1].data.view(np.ndarray) mapdata = data['N_OBS'].ravel().astype(dtype) finally: hdulist.close() out = maps.pixel_sphere_map(mapdata, nested=True) return out
def load_rms_mutable(self, order='nested', dtype=np.double, include_added_noise=True): if self._uniform_rms is not None: rms = pixel_sphere_map(self._uniform_rms, Nside=self.Nside, pixel_order=order) return rms # We're done -- add_noise disallowed for uniform noise elif self._n_obs is not None: n_obs = as_single_map(self._n_obs, dtype=dtype, type='count', copy=False) rms = self._sigma0 * self._rms_regrade_factor / np.sqrt(n_obs) elif self._rms is not None: rms = as_single_map(self._rms * self._rms_regrade_factor, dtype=dtype, type='temperature', copy=True) else: assert False rms = rms.reformat_and_discard(order, self.Nside, _strict=True) if self._add_noise is not None and include_added_noise: rms += self._add_noise return rms