def write_fits(self, filename, clobber=False, length_unit=None, sky_scale=None, sky_center=None): r""" Write the PPVCube to a FITS file. Parameters ---------- filename : string The name of the file to write to. clobber : boolean, optional Whether to overwrite a file with the same name that already exists. Default False. length_unit : string, optional The units to convert the coordinates to in the file. sky_scale : tuple, optional Conversion between an angle unit and a length unit, if sky coordinates are desired, e.g. (1.0, "arcsec/kpc") sky_center : tuple, optional The (RA, Dec) coordinate in degrees of the central pixel. Must be specified with *sky_scale*. Examples -------- >>> cube.write_fits("my_cube.fits", clobber=False, ... sky_scale=(1.0,"arcsec/kpc"), sky_center=(30.,45.)) """ vunit = fits_info[self.axis_type][0] vtype = fits_info[self.axis_type][1] v_center = 0.5 * (self.vbins[0] + self.vbins[-1]).in_units(vunit).value if length_unit is None: units = str(self.ds.get_smallest_appropriate_unit(self.width)) else: units = length_unit units = sanitize_fits_unit(units) dx = self.width.in_units(units).v / self.nx dy = self.width.in_units(units).v / self.ny dv = self.dv.in_units(vunit).v w = _astropy.pywcs.WCS(naxis=3) w.wcs.crpix = [ 0.5 * (self.nx + 1), 0.5 * (self.ny + 1), 0.5 * (self.nv + 1) ] w.wcs.cdelt = [dx, dy, dv] w.wcs.crval = [0.0, 0.0, v_center] w.wcs.cunit = [units, units, vunit] w.wcs.ctype = ["LINEAR", "LINEAR", vtype] fib = FITSImageData(self.data.transpose(), fields=self.field, wcs=w) fib.update_all_headers("bunit", re.sub('()', '', str(self.proj_units))) fib.update_all_headers("btype", self.field) if sky_scale is not None and sky_center is not None: fib.create_sky_wcs(sky_center, sky_scale) fib.writeto(filename, clobber=clobber)
def to_fits_data(self, fields=None, other_keys=None, length_unit=None, **kwargs): r"""Export the fields in this FixedResolutionBuffer instance to a FITSImageData instance. This will export a set of FITS images of either the fields specified or all the fields already in the object. Parameters ---------- fields : list of strings These fields will be pixelized and output. If "None", the keys of the FRB will be used. other_keys : dictionary, optional A set of header keys and values to write into the FITS header. length_unit : string, optional the length units that the coordinates are written in. The default is to use the default length unit of the dataset. """ from yt.visualization.fits_image import FITSImageData if length_unit is None: length_unit = self.ds.length_unit if "units" in kwargs: issue_deprecation_warning("The 'units' keyword argument has been " "replaced by the 'length_unit' keyword " "argument and the former has been " "deprecated. Setting 'length_unit' " "to 'units'.") length_unit = kwargs.pop("units") if fields is None: fields = list(self.data.keys()) else: fields = ensure_list(fields) if len(fields) == 0: raise RuntimeError( "No fields to export. Either pass a field or list of fields to " "to_fits_data or access a field from the FixedResolutionBuffer " "object.") fid = FITSImageData(self, fields=fields, length_unit=length_unit) if other_keys is not None: for k, v in other_keys.items(): fid.update_all_headers(k, v) return fid
def export_fits(self, filename, fields=None, overwrite=False, other_keys=None, units="cm", **kwargs): r"""Export a set of pixelized fields to a FITS file. This will export a set of FITS images of either the fields specified or all the fields already in the object. Parameters ---------- filename : string The name of the FITS file to be written. fields : list of strings These fields will be pixelized and output. If "None", the keys of the FRB will be used. overwrite : boolean If the file exists, this governs whether we will overwrite. other_keys : dictionary, optional A set of header keys and values to write into the FITS header. units : string, optional the length units that the coordinates are written in, default 'cm'. """ from yt.visualization.fits_image import FITSImageData if fields is None: fields = list(self.data.keys()) else: fields = ensure_list(fields) if len(fields) == 0: raise RuntimeError( "No fields to export. Either pass a field or list of fields to " "export_fits or access a field from the fixed resolution buffer " "object.") fib = FITSImageData(self, fields=fields, units=units) if other_keys is not None: for k, v in other_keys.items(): fib.update_all_headers(k, v) fib.writeto(filename, overwrite=overwrite, **kwargs)