大气空气的折射率、折射和色散计算方程集。
项目描述
天文大气
注意: 如果将此代码用于出版物时包含对最初构建此软件包的以下工作的引用,将不胜感激: 量化MICADO 近红外成像仪器的预期残余色散,van den Born & Jellema,2020 年,MNRAS,DOI:10.1093/mnras/staa1870。
作者信息:Joost van den Born,born@astron.nl
例子
计算 Cerro Armazones 1.49 和 1.78 微米之间大气扩散的最小工作示例。
from AstroAtmosphere import *
# Parameters at Cerro Armazones
T = 279.65 # k
P = 71200 # Pa
H = 0.22
xc = 450 # ppm
lat = -24.5983 # degrees
h = 3064 # m
l1 = 1.49 # micron
l2 = 1.78 # micron
z0 = 30
# Initializing dispersion model
at = Observatory()
# Calculating indices of refraction for l1 and l2
n1 = at.n_tph(l=l1, T=T, p=P, RH=H, xc=xc)
n2 = at.n_tph(l=l2, T=T, p=P, RH=H, xc=xc)
# Density of the atmosphere (following CIPM-81/91 equations)
rho = at.rho(p=P, T=T, RH=H, xc=xc)
# Initializing refraction model and setting the reduced height
disp = dispersion(lat, h)
disp.setReducedHeight(P, rho)
# Calculation of the atmopheric dipsersion
atm_dispersion = disp.cassini(n1, n2, z0) * 3.6e6
print ('The dispersion is %.03f milli arc seconds' %(atm_dispersion))
安装
该软件包可通过 Git-Lab 和 PyPI 获得。可以使用该setup.py
文件安装该软件包,但使用pip
.
pip install AstroAtmosphere
AstroAtmosphere 软件包的内容
该软件包包含以下文件:
/data/1976USSA.txt
: 1976 年美国标准大气的数据文件。ciddorModel.py
:包含Observatory()
使用 Ciddor (1996) 模型计算大气折射率的类。dispersionModels.py
:包含可用于计算大气扩散的各种大气模型misc.py
:包含多种其他功能,例如快速计算折射率。neoslalib.py
:包含pyslalib.SLA_REFRO()
例程的 Python 本机端口,从原始 FORTRAN 代码翻译而来。observatories.py
:包含一个字典,其中包含世界各地各种大型天文台的平均大气条件。refractionModels.py
:包含可用于计算大气折射的各种大气模型refractivityModels.py
:包含文献中的各种计算折射率的函数。包括的一些作品示例包括 Ciddor (1996)、Barrell & Sears (1939)、SLALIB、Owens (1967) 和 Edlen (1966)。
Ciddor 折射率模型
Ciddor, 1996 的折射率模型使用以下参数计算空气的折射率:
- T - 开尔文温度
- p - 帕斯卡压力
- RH - 以分数为单位的相对湿度
- xc - 百万分之一的二氧化碳浓度
它是通过首先初始化一个Observatory()
对象来调用的。可以将大气条件解析到n_tph()
函数中。
at = Observatory()
n = at.n_tph(l=0.55, T=273.15, p=101325, RH=0.2, xc=300)
其他折射模型的基本功能也包括在内,并在下面讨论。
大气折射和大气色散模型
如果将大气折射表示为 R(n),则大气色散定义为 R(n1) - R(n2)。因此它们在功能和用途上非常相似。
此软件包中的可用型号:
refractionIntegral()
- 使用折射积分进行完全积分(需要有关大气的详细信息,例如AstroAtmosphere/data/1976USSA.txt
)planeParallel()
- 平面平行大气折射模型cassini()
- 卡西尼的均质大气折射模型oriani()
- 奥里亚尼定理 (Atan(z) + Btan^3(z) )tan5()
- 奥里亚尼定理扩展 (Atan(z) + Btan^3(z) + Ctan^5(z) )corbard()
- 误差函数折射模型matharExponential()
- R. Mathar 的气压指数模型。
该软件包还包括一个SLA_REFRO()
从 pyslalib 移植的 FORTRAN 例程的 python 本机端口。请参阅下面的详细信息。
球形大气模型的输入参数(除了第一个):
- T - 温度 [K]
- p - 压力 [Pa]
- RH - 相对湿度
- xc - 二氧化碳浓度 [ppm]
- lat - 纬度 [度]
- h - 海拔高度 [m]
- l - 波长 [μm]
- z - 天顶角 [deg]
一个例子 - 为了计算大气折射,我们设置了一个refraction()
对象。这需要观察者的纬度和高度。大气色散的计算类似,但通过refraction()
一个dispersion()
对象交换对象并将两个折射率解析为cassini()
函数。
# Density of the atmosphere (following CIPM-81/91 equations)
rho = at.rho(p=101325, T=273.15, RH=0.2, xc=300)
# Initializing refraction model and setting the reduced height
ref = refraction(lat=30, h=2200)
ref.setReducedHeight(p=101325, rho=rho)
# Calculating the atmospheric refraction
atm_ref = ref.cassini(n, zenith=30)
分析误差传播
完整的分析误差传播可用于 Ciddor 色散模型 ( Observatory.dn_tph()
)、Cassini 折射模型 ( refraction.cassiniError()
) 和 Cassini 色散模型 ( dispersion.cassiniError()
)。结果与蒙特卡罗模拟非常吻合,这表明如果没有考虑额外的错误,它们的重要性可以忽略不计。
考虑的不确定性:
Ciddor 分散模型:
参数。 | 描述 | 单元 |
---|---|---|
dl | 波长 | 嗯 |
dT | 温度 | ķ |
DP | 压力 | 帕 |
dRH | 相对湿度 | |
dCO2 | 二氧化碳浓度 | ppm |
卡西尼折射模型:
参数。 | 描述 | 单元 |
---|---|---|
dn | 折射率 | |
dz | 天顶角 | 度 |
卡西尼分散模型:
参数。 | 描述 | 单元 |
---|---|---|
DL1, DL2 | 波长 | 嗯 |
dT | 温度 | ķ |
DP | 压力 | 帕 |
dRH | 相对湿度 | |
dCO2 | 二氧化碳浓度 | ppm |
dz | 天顶角 | 度 |
此处的代码片段中给出了它的使用示例:
# Initializing dispersion object
disp = dispersion(lat, h)
disp.setReducedHeight(P, rho)
# Atmospheric dispersion
dispersion_obs = disp.cassini(n1, n2, zenith_obs)
# Uncertainty in the atmospheric dispersion
dispersion_unc = disp.cassiniError(zenith_obs, l1, l2, T, P, H, xc,
dl1=0.001, dl2=0.001, dT=0.2, dP=30, dRH=0.03, dCO2=25, dz=1/3600) * 3.6e6
其他折射率模型
该软件包还包括其他折射模型的有限功能。与 Ciddor 模型相比,它们没有那么广泛,只能在标准大气条件下或在有限的波长范围内工作。
包括
型号名称 | 功能 | 评论 |
---|---|---|
巴雷尔和西尔斯 (1939) | BarrellAndSears() |
过时的模型,尤其适用于短波长。 |
西多 (1996) | Ciddor() |
仅在标准大气压下。CO2 浓度可以改变。 |
埃德伦 (1953) | Edlen1953() |
Edlèn, 1953 的方程,结合 Barrel (1951) 的修改,包括温度、压力和湿度相关性。 |
埃德伦 (1966) | Edlen1966() |
允许任何温度、压力、湿度和 CO2 密度。 |
欧文斯 (1967) | Owens() |
允许任何温度、压力、湿度。 |
Bonsch & Potulski (1998) | BonschPotulski() |
允许任何温度、压力、湿度和 CO2 密度。 |
桦木与唐斯 (1994) | BirchDowns() |
仅在标准大气压下。功能只需要波长。 |
派克和里德 (1972) | PeckReeder() |
仅在标准大气压下。功能只需要波长。 |
马萨 (2006) | Mathar() |
允许温度、压力和湿度规格。在 1.4 μm 以上的波长下效果最佳。 |
霍亨克尔克和辛克莱 (1985) | HohenkerkAndSinclair() |
基于 Barrell & Sears 方程。通常,给出稍大的值。 |
霍亨克尔克和辛克莱 (1985) | slalib() |
使用 pySLALIB 检索标准大气条件下的折射率。 |
最后一个函数从函数中提取折射率pyslalib.sla_refro()
,因此需要pyslalib。这是设置 AstroAtmosphere 的可选依赖项。
快捷功能
一些函数可以使用observatories
字典作为输入。这些包括这些位置的默认平均大气条件。当使用这些时,只需要波长和天顶角来计算折射和色散。
# Quick refractive index
nq = quick_refractive_index(l=1.49, conditions='STANDARD')
# Quick refraction
rq = quick_refraction(l1, zenith_obs, conditions='STANDARD')
# Quick dispersion
dq = quick_dispersion(l1, l2, zenith_obs, conditions='STANDARD')
目前,已知有几个天文台。这些都可以在observatories
字典中找到。联系作者添加其他标准条件。
天文台 | 旗帜 | 笔记 |
---|---|---|
标准条件 | STANDARD |
|
Cerro Armazones | CERRO_ARMAZONES |
未来 ELT 的位置 |
塞罗帕拉纳尔 | CERRO_PARANAL |
VLT、VISTA、VST、NGTS 和 SSO 的位置 |
Roque de los Muchachos 天文台(拉帕尔马) | LA_PALMA |
GTC、INT、WHT、NOT 等。 |
拉西拉天文台 | LA_SILLA |
ESO 3.6m 望远镜、NTG、BlackGEM 等。 |
拉斯坎帕纳斯天文台 | LAS_CAMPANAS |
未来格林威治标准时间的站点。 |
莫纳克亚天文台(夏威夷) | MAUNA_KEA |
凯克,斯巴鲁,双子座北等的位置。 |
其他
这个包还包含SLA_REFRO()
pyslalib 包的例程的 python 本机端口,该包最初是由 PT Wallace 用 FORTRAN 编写的。可以直接使用sla_refro()
. 当使用与其他折射函数相同的单位时,您可能更喜欢使用slalib_refraction()
或slalib_dispersion()
。请注意,此实现比(编译的)FORTRAN 实现慢。
最后,还包括了 Alexei Filippenko 在 1982 年使用的色散模型。该模型是(修改后的)埃德伦方程和平面平行大气几何的组合。可以通过调用该Filippenko1982()
函数来访问此计算。
项目详情
AstroAtmosphere -1.5.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | dad8f299e8a50775b79adeef15b57c33da60c1806a80987c3cb89b8147fb726b |
|
MD5 | c6940adfa9face95924bcc25e4a20c3f |
|
布莱克2-256 | cedb373859dec15d0447b80410d7170699388d911c50d5fdbb6183d8531b1e4b |