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 将修改基础数据。

你是 必修的 为你的数据提供一个单位。这些对象最常用的单位可能是 aduphotonelectron ,可以通过提供单元的字符串名称(如上面的示例)或从单元对象设置:

>>> 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 对象可以通过两种方式设置。

  • 如果 CCDData 对象是从头中包含WCS关键字的FITS文件创建的 wcs 属性设置为 WCS 对象使用FITS标题中的信息。

  • CCDData 对象是用 wcs 争论。

不管怎样 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 .

另外两种不确定度等级也支持误差传播: VarianceUncertaintyInverseVariance . 使用这三个不确定度中的一个来启用误差传播 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 对象将用于结果对象。