HAPI (HITRAN Application Programming Interface) 是HITRAN数据库提供的一个python包,可以实现对HITRAN online数据库中谱线数据的下载,以及后续谱线的模拟等常用操作。HITRANonline: HAPI​hitran.org

要使用HAPI,直接在上述网站下载.py文件,根据手册配置好环境即可,在脚本中import即可。此外,还需要制定数据存放的文件夹,如data文件夹。

from hapi import *

db_begin('data')

数据存放的文件夹中的数据分为一个.data文件和.header文件。除了通过fetch()从HITRAN online自动下载谱线数据外,还可以手动将符合HITRAN数据格式的.par文件(如HITEMP数据)直接存放在该文件夹下。HAPI会自动识别.par数据并为之生成.header。

HAPI常用的方法如下,详见getHelp()命令及手册:帮助

getHelp(name_of_the_function)

可以查看函数,谱线等的帮助。

从HITRAN online下载单一谱线数据到本地(db_begin()指定的文件夹)

fetch(TableName, M, I, numin, numax)

TableName: 本地保存的文件名

M: HITRAN中的分子编号

I: HITRAN中的同位素编号:

numin: 波数下限

numax: 波数上限

例:

fetch('HOH', 1, 1, 4000, 4100)

下载后,可以在db_begin()指定的文件夹中找到HOH.data和HOH.header文件。

建议下载过数据后不再使用该函数,改为直接读取文件夹中的数据。虽然不会重复下载,连接服务器仍需要一定时间。

过滤谱线数据

select(TableName, DestinationTableName='__BUFFER__', ParameterNames=None, Conditions=None, Output=True, File=None)

TableName: 数据文件名

DestinationTableName: 保存的文件名

ParameterNames: 参数列表

Conditions: 过滤条件,详见手册

Output: 文本输出

File: 文件输出

该函数支持表达式控制的复杂过滤条件,并且可以保存过滤到的数据,不过用DestinationTableName参数保存我自己测试不能用,可以用File参数输出成.par格式,也可以被HAPI读取。详见手册。

例:

select('sampletab', File='outtab.par', ParameterNames=(p1,p2), Conditions=(('and', ('>=', 'p1', 1), ('

将sampletab中p1>=1且p1*p2<20的p1,p2保存到outtab.par中。

提取谱线数据

getColumn(TableName, ParameterName)

TableName: 数据文件名

ParameterNames: 参数列表

输出选定数据文件选定参数的列表。

例:

p1 = getColumn('sampletab', 'p1')

可以得到sampletab的p1数据。很实用。

计算线型(以Voigt线型为例)

PROFILE_VOIGT(sg0, GamD, Gam0, sg)

sg0: 线中心位置(cm^-1).

GamD: Doppler HWHM(cm^-1)

Gam0: Speed-averaged line-width(cm^-1)

sg: 供计算的波数(cm^-1)

返回sg给定的波数范围对应的线型。

计算配分函数

partitionSum(M, I, T, step=None)

M: HITRAN中的分子编号

I: HITRAN中的同位素编号

T: 温度(K),可以是数,数组或范围

step: 计算温度的步长。若未指定步长则计算所有T的配分函数,若指定步长则计算T[0]与T[1]间以step为步长的配分函数

输出:

TT: 温度数组,只有当输入T为数组时才输出

PartSum: 与TT对应的配分函数

TIPS-2011提供的配分函数算法。

例:

PartSum = partitionSum(1,1,[296,1000])

TT,PartSum = partitionSum(1,1,[296,1000],step=0.1)

计算吸收系数(以Voigt线型为例)

absorptionCoefficient_Voigt(Components=None, SourceTables=None, partitionFunction=>, Environment=None, OmegaRange=None, OmegaStep=None, OmegaWing=None, IntensityThreshold=0.0, OmegaWingHW=50.0, ParameterBindings={}, EnvironmentDependencyBindings={}, GammaL='gamma_air', Diluent={'air':1.0}, HITRAN_units=True, File=None, Format='%e %e')

Components: [(M,I,D)]的列表,其中

M: HITRAN中的分子编号

I: HITRAN中的同位素编号

D: 丰度(可选)

SourceTables: 计算cross-section的表

partitionFunction: 配分函数指针(默认为TIPS-2011)

Environment: 压强和温度参数的字典(默认{'p':1.,'T' :296.})

'p': 总压强(atm)

'T': 温度(K)

OmegaRange: 波数范围(cm^-1)

OmegaStep: 波数步长(cm^-1)

OmegaWing: 线中心到线强为0之间的距离(cm^-1)

IntensityThreshold: 强度阈值(cm^-1/(molec*cm^-2))

OmegaWingHW : 线中心到线强为0之间的距离的相对值(halfwidths),与OmegaWing取最大

GammaL: 展宽参数('gamma_air'或'self')。建议不要使用这个参数,使用下面的Diluent参数设置各物种浓度。

Diluent: 气体混合物体积比例。默认是{'air':1.0},即纯空气环境,计算展宽系数时相当于\gamma_air。若需要设置其他混合物比例,可以自行设置字典Diluent={'self':A, 'air':B, 'CO_2':C, ...}表示本物种,空气,CO_2的体积比例分别是A,B,C(A+B+C+...=1,但HAPI没有检测,需要自己注意)。注意数据库里只有空气,自身展宽系数,所以实际上其他组分除了浓度外物质种类没有影响。

HITRAN_units: 使用cm^2/molecule (True) 或cm^-1

输出:

Omegas: OmegaRange与OmegaStep给出的波数数组

Xsect: Omegas对应的吸收系数

例:

nu,coef = absorptionCoefficient_Voigt(((2,1),), 'co2', OmegaStep=0.01, HITRAN_units=False)

计算吸收光谱

absorptionSpectrum(Omegas, AbsorptionCoefficient, Environment={'l': 100.0}, File=None, Format='%e %e')

Omegas: 波数数组,一般用absorptionCoefficient_Voigt()输出的Omegas

AbsorptionCoefficient: 吸收系数数组,一般用absorptionCoefficient_Voigt()输出的Xsects

Environment: 吸收光程(cm)的字典,默认为{'l': 100.0}

File: 输出文件名

Format: 文件输出c格式

输出:

Omegas: 波数数组

Xsect: Omegas对应的吸光度

例:

nu,absorp = absorptionSpectrum(nu, coef)

谱线模拟的基本流程

下面简单演示一个基本的谱线模拟的完整过程:

首先是调用模块

from hapi import *

import numpy as np

import matplotlib.pylab as plb

import scipy.constants as C

我们希望用HITRAN数据库模拟

在7178~7192

范围内,296K(HITRAN的参照温度),1atm,吸收光程5cm条件下的吸光度。

选择data文件夹

db_begin('data')

从HITRAN下载谱线数据至data\H2O_7178~7192,并显示数据信息

myTableName = 'H2O_7178~7192'

fetch(myTableName, 1, 1, 7178, 7192)

tableList()

describeTable(myTableName)

绘制线强图

x, y = getStickXY(myTableName)

plb.figure()

plb.plot(x, y)

plb.xlabel('wavenumber($cm^{-1}$)')

plb.ylabel('linestrength($cm^{-1}/(molecule\cdot cm^{-2})$)')

plb.title('$H_2O linestrength @ 296K$')

如图:

用Voigt线型计算吸收系数

并绘图

nu, coef = absorptionCoefficient_Voigt(SourceTables=myTableName, HITRAN_units=False)

plb.figure()

plb.plot(nu, coef)

plb.xlabel('wavenumber($cm^{-1}$)')

plb.ylabel('absorption coefficient($cm^{-1}$)')

plb.title('$H_2O absorption coefficient @ 1atm, 296K$')

如图:

计算吸光度

并绘图

myOpticalL = 5.0

nu, absorp = absorptionSpectrum(nu, coef, Environment={'l':myOpticalL})

plb.figure()

plb.plot(nu, absorp)

plb.xlabel('wavenumber($cm^{-1}$)')

plb.ylabel('absorbance')

plb.title('$H_2O absorbance @ 1atm, 296K$')

plb.show()

如图:

除了HITRAN推出的HAPI外还有其他基于数据库的光谱模拟分析包,如RADIS。有需要的朋友可以自行选用。

python数据库接口_HAPI——HITRAN数据库python接口相关推荐

  1. Python学习八:数据库编程接口

    文章目录 一.数据库编程接口 1.1 连接对象 1.1.1 获取连接对象 1.1.2 连接对象的方法 2.1 游标对象 一.数据库编程接口 1.1 连接对象 1.1.1 获取连接对象 数据库连接对象主 ...

  2. Python实现一个简单数据库查询接口编写

    Flask诞生于2010年,是Armin ronacher(人名)用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架. Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展 ...

  3. Python操作三大主流数据库

    Python操作三大主流数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库, ...

  4. python标准数据库接口是_Python 数据库接口模块_python 数据库模块_python 数据库接口...

    本条目收集了 Python 中的常用数据库接口模块,包括各种主流关系数据库和一些通用接口 如无特别注明,均实现(或部分实现)了 DB-API 标准. 更广泛的 Python 数据库技术参见 Pytho ...

  5. python怎么连接mysql数据库_python如何连接mysql数据库

    Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库:GadFly mSQL MySQL PostgreSQL Microsoft SQL Server 2000 Informix ...

  6. python 内存数据库下载,Python 文件存储和数据库

    Python 中数据存储的方式和其他语言没什么区别,主要分为两个方面:文件存储和数据库存储. 文件存储 文件存储的方法也分为很多种,主要包括:Python 内置方法 NumPy 模块方法 os 模块方 ...

  7. mysql数据库python基础知识_python学习之Mysql数据库编程基础知识介绍

    在Python网络爬虫中,通常是通过TXT纯文本方式存储,其实也是可以存储在数据库中的:同时在WAMP(Windows.Apache.MySQL.PHP或Python)开发网站中,也可以通过Pytho ...

  8. python cgi库_《Python 数据库 GUI CGI编程》

    1. 上次写在前面,我们介绍了一篇关于开始使用Python.今天我们将介绍Python数据库,GUI, CGI编程和Python和Python的区别.2.连接到数据库标准Python数据库接口是Pyt ...

  9. Python学习笔记:使用Python操作数据库

    Python学习笔记:使用Python操作数据库 一.数据库编程接口 为了对数据库进行统一的操作,大多数语言都提供了简单的.标准化的数据库接口(API).在Python Database API 2. ...

最新文章

  1. 陕西打造12项精品体育赛事 加快建设体育强省
  2. 本app(仿手机支付宝界面)ios源码
  3. IIS7.5 部署WCF项目问题集锦
  4. h2o中模型存储与加载
  5. 【玩转Atlas200DK系列】为Atlas200DK配置wifi外挂模块
  6. python电脑配置-Python--获取电脑配置信息--设计代码
  7. 这是我见过Java版的最好的OA系统,拿来即用,非常方便(附项目地址)
  8. 拓端tecdat|R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数
  9. mysql 查询时间戳(TIMESTAMP)转成常用可读时间格式
  10. windows启动winload.exe的数字签名错误问题
  11. 猿创征文 | 国产数据库之南大通用数据库详解安装和使用
  12. Linux make 报错 pkg-config:not found
  13. 微信 php收藏功能,怎样使用微信小程序做出添加收藏
  14. php面向对象常见的专业术语
  15. idea中整合redis中出现 Error creating bean with name ‘com.sxt.redis.RedisApplicationTests‘:
  16. 九龙证券|AI重塑半导体基础设施,人工智能发展持续加速
  17. [转载]海康摄像头_2
  18. 【Matlab绘图进阶第5弹】Matlab绘制三维散点图
  19. 电脑速度慢的原因及解决方法
  20. yum命令下载安装包及依赖包

热门文章

  1. 前端各种分辨率问题总结
  2. 关于uni-app的webview
  3. 我是怎么用大数据分析预测航班延误的?(上)
  4. 盘点一下免费的远程控制软件!
  5. Dubbo+Flutter在线交友平台教程第一天 项目介绍和框架搭建
  6. jQ实现图片翻转抽奖
  7. 微信小程序ar导航特点详解
  8. OJ每日一练——金币
  9. 41F继电器座的解剖与妙用
  10. Qt收缩窗口动态效果