使用 StokesCoord 班级#

这个 StokesCoord 类为与由WCS处理的Stokes参数交互提供了最小的包装。在WCS中(如FITS 4.0规范中所述),为Stokes参数分配了一个整数,每个参数代表一个不同的参数,例如,“I”被赋予数字1,“Q”被赋予数字2。 StokesCoord 类使用这些数字和FITS WCS约定所给出的参数名称之间的映射,并允许您通过它们的字符串名称而不是它们的数字来引用参数。例如,的默认表示形式 StokesCoord 对象使用名称而不是数字。

>>> import numpy as np
>>> from astropy.coordinates import StokesCoord
>>> StokesCoord([1, 2, 3, 4])
StokesCoord(['I', 'Q', 'U', 'V'])

这些“符号”被视为 StokesCoord 类引用它们,也可以通过 StokesCoord.symbol 物业::

>>> stokes = StokesCoord([1, 2, 3, 4])
>>> stokes.symbol
array(['I', 'Q', 'U', 'V'], dtype='<U2')

以及 StokesCoord 类也可以用符号而不是数字实例化:

>>> StokesCoord("I")
StokesCoord('I')

映射中不存在的数值将由字符串表示 "?" **

>>> StokesCoord([1, 10])
StokesCoord(['I', '?'])

可以添加自定义数字-符号映射(请参阅 将符号映射到数值

对比符号和数字#

可以比较 StokesCoord 及其参数名称::

>>> stokes = StokesCoord([1, 2, 3, 4])
>>> stokes == "I"
array([ True, False, False, False])

比较 StokesCoord 这样的类通过将符号转换为数字来比较它们的基础数值。要直接比较符号,您可以执行以下操作:

>>> stokes = StokesCoord([1, 2, 3, 4, 5, 6])
>>> stokes.symbol == "?"
array([False, False, False, False, True, True])

与底层数字可能不同但全部未知(因此它们不相等)的值相比,这种比较匹配所有不知道等价符号的值。

请注意,与符号进行比较不适用于 numpy.equal 只有 == 接线员。

将符号映射到数值#

内置符号#

Astery中内置的数字和参数名称之间的映射如下:

>>> from astropy.coordinates.polarization import FITS_STOKES_VALUE_SYMBOL_MAP
>>> for number, symbol in FITS_STOKES_VALUE_SYMBOL_MAP.items():
...     print(f"{number:-2}: {symbol.symbol} - {symbol.description}")
   1: I - Standard Stokes unpolarized
   2: Q - Standard Stokes linear
   3: U - Standard Stokes linear
   4: V - Standard Stokes circular
  -1: RR - Right-right circular: <RR*>
  -2: LL - Left-left circular: <LL*>
  -3: RL - Right-left cross-circular: Re(<RL*>))
  -4: LR - Left-right cross-circular: Re(<LR*>)=Im(<RL*>)
  -5: XX - X parallel linear: <XX*>
  -6: YY - Y parallel linear: <YY*>
  -7: XY - XY cross linear: Re(<XY*>)
  -8: YX - YX cross linear: Im(<XY*>)

添加自定义符号#

可以在数字和参数之间添加自定义映射。

这可以使用 custom_stokes_symbol_mapping 上下文管理器::

>>> from astropy.coordinates import custom_stokes_symbol_mapping, StokesSymbol
>>> with custom_stokes_symbol_mapping({10: StokesSymbol("J", "A custom parameter name")}):
...     print(StokesCoord(10))
StokesCoord('J')