CCDData类#
入门#
正在获取数据#
创建一个 CCDData
对象从任何数组(如数据)中使用 astropy.nddata
方便:
>>> import numpy as np
>>> from astropy.nddata import CCDData
>>> from astropy.utils.data import get_pkg_data_filename
>>> ccd = CCDData(np.arange(10), unit="adu")
请注意,在后台,如果可能,这会创建对数据的引用(而不是副本),因此在中修改数据 ccd
将修改基础数据。
你是 必修的 为你的数据提供一个单位。这些对象最常用的单位可能是 adu
, photon
和 electron
,可以通过提供单元的字符串名称(如上面的示例)或从单元对象设置:
>>> from astropy import units as u
>>> ccd_photon = CCDData([1, 2, 3], unit=u.photon)
>>> ccd_electron = CCDData([1, 2, 3], unit="electron")
如果你喜欢 not 要使用单元功能,请使用特殊单元 u.dimensionless_unscaled
当您创建 CCDData
图像:
>>> ccd_unitless = CCDData(np.zeros((10, 10)),
... unit=u.dimensionless_unscaled)
A CCDData
对象也可以从FITS文件名或URL初始化:
>>> ccd = CCDData.read('my_file.fits', unit="adu")
>>> ccd = CCDData.read(get_pkg_data_filename('tutorials/FITS-images/HorseHead.fits'), unit="adu", cache=True)
如果FITS文件中有一个单位(在 BUNIT
关键字),但显式提供 read
将覆盖FITS文件中的任何单位。
没有任何限制的单位可以是什么-任何单位在 astropy.units
或者你自己创造的另一个也会起作用。
此外,用户可以在FITS文件中指定要使用的扩展名:
>>> ccd = CCDData.read('my_file.fits', hdu=1, unit="adu")
如果 hdu
未指定,它将假定数据位于主扩展中。如果主扩展名中没有数据,则将使用第一个包含图像数据的扩展名。
元数据#
从FITS文件初始化时 header
属性是使用FITS文件的头初始化的。元数据是可选的,可以由任何字典或类似dict的对象提供:
>>> ccd_simple = CCDData(np.arange(10), unit="adu")
>>> my_meta = {'observer': 'Edwin Hubble', 'exposure': 30.0}
>>> ccd_simple.header = my_meta # or use ccd_simple.meta = my_meta
元数据是否区分大小写取决于它的初始化方式。例如,FITS头不区分大小写,但Python字典是区分大小写的。
获取数据#
A CCDData
对象的行为类似于 numpy
数组(如果 CCDData
在表达式中设置掩码),并通过 data
属性:
>>> ccd_masked = CCDData([1, 2, 3], unit="adu", mask=[0, 0, 1])
>>> 2 * np.ones(3) * ccd_masked # one return value will be masked
masked_array(data=[2.0, 4.0, --],
mask=[False, False, True],
fill_value=1e+20)
>>> 2 * np.ones(3) * ccd_masked.data # ignores the mask
array([2., 4., 6.])
可以强制转换为 numpy
数组包含:
>>> np.asarray(ccd_masked)
array([1, 2, 3])
>>> np.ma.array(ccd_masked.data, mask=ccd_masked.mask)
masked_array(data=[1, 2, --],
mask=[False, False, True],
fill_value=999999)
一种转换 CCDData
对象到FITS HDU列表也可用。它将元数据转换为FITS标题:
>>> hdulist = ccd_masked.to_hdu()
也可以直接写入FITS文件:
>>> ccd_masked.write('my_image.fits')
面具和旗帜#
虽然当 CCDData
创建映像后,还可以指定掩码和/或标志。
掩码是一个布尔数组,其大小与 True
指示应屏蔽特定像素( i.e. ,不包括在算术运算或聚合中)。
标志是一个或多个形状与数据形状匹配的附加数组(任何类型)。一种特别有用的标志类型是位平面;有关位平面和函数的详细信息 astropy
用于将它们转换为二进制掩码,请参阅 用于处理位掩码和掩码数组的实用函数 . 有关设置标志的详细信息,请参阅 NDData
.
WCS#
这个 wcs
的属性 CCDData
对象可以通过两种方式设置。
不管怎样 wcs
如果 CCDData
图像被修剪。
PSF#
这个 psf
对象的属性 CCDData
对象可以通过两种方式设置。
如果FITS文件具有与相应名称匹配的图像HDU扩展名(默认为
"PSFIMAGE"
)、psf
属性是从该图像HDU加载的。PSF也可以在以下情况下提供
CCDData
对象是用psf
争论。
这个 psf
属性应该是表示位于 CCDData
,大小适合数据;用户负责在上下文中管理和解释它。有关标准化PSF图像的更多信息,请参见 归一化 。
这个 psf
属性设置为 None
在算术运算的输出中,与输入无关。如果两个输入图像中的任何一个包含非‘None’PSF,则会发出警告消息;用户负责确定在该上下文中要执行的适当操作。
不确定性#
您可以通过创建 StdDevUncertainty
对象优先:
>>> rng = np.random.default_rng()
>>> data = rng.normal(size=(10, 10), loc=1.0, scale=0.1)
>>> ccd = CCDData(data, unit="electron")
>>> from astropy.nddata.nduncertainty import StdDevUncertainty
>>> uncertainty = 0.1 * ccd.data # can be any array whose shape matches the data
>>> my_uncertainty = StdDevUncertainty(uncertainty)
>>> ccd.uncertainty = my_uncertainty
或者提供 ndarray
与数据形状相同:
>>> ccd.uncertainty = 0.1 * ccd.data
INFO: array provided for uncertainty; assuming it is a StdDevUncertainty. [...]
在这种情况下,假设不确定性 StdDevUncertainty
.
另外两种不确定度等级也支持误差传播: VarianceUncertainty
和 InverseVariance
. 使用这三个不确定度中的一个来启用误差传播 CCDData
.
如果您想了解潜在的不确定性,请使用 .array
属性:
>>> ccd.uncertainty.array
array(...)
图像运算#
方法用于使用 CCDData
图像和数字 astropy
Quantity
(带单位的数字)或其他 CCDData
图像。
使用这些方法可以正确地传播错误(如果错误是不相关的),处理任何必要的单位转换,并适当地应用掩码。注意,结果的元数据是 not 如果操作在两个之间,则设置 CCDData
物体。
>>> result = ccd.multiply(0.2 * u.adu)
>>> uncertainty_ratio = result.uncertainty.array[0, 0]/ccd.uncertainty.array[0, 0]
>>> round(uncertainty_ratio, 5)
0.2
>>> result.unit
Unit("adu electron")
备注
附属包 ccdproc 为许多常见的数据缩减操作提供函数。这些函数尝试为结果构造一个合理的头,并提供一种机制来记录头中函数的操作。
算术运算符 *
, /
, `` +``,和 -
是 not 已覆盖。
备注
如果两个图像具有不同的WCS值,则 wcs
论第一 CCDData
对象将用于结果对象。