質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2784閲覧

pythonを使ってHITRANのライブラリから、CO₂吸光度を温度や気圧を設定して数値データをテキストファイルに落とし込む方法

naiki

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/09/24 08:11

前提・実現したいこと

python 3.8(spyder)を使って, HITRANから、CO₂の吸光度を解析したりしてます。
まず、今私ができることは温度と気圧を設定して、それを横軸単位cm^-1、縦軸単位Absとして、吸光度のグラフを作成することができます。それとデータをテキストファイルに落とし込む方法です。
実現したいことは、上記の二つの応用で、温度と気圧を反映させて吸光度を、横軸単位cm^-1、縦軸単位AbsでCSVかテキストファイルに落とし込む方法が知りたいです。

気圧、温度を設定して、グラフに吸光度を出すプログラム

import numpy as np from hapi import * import matplotlib.pyplot as plt # パラメータを指定 # --- ここから --- # スペクトルの範囲 spectrum_begin = 2280 # cm^-1 spectrum_end = 2400 # HITRAN のパラメータ name = 'CO2' moleculeID = 2 isotopologueID = 1 # 気圧、温度を指定 pressure = 1. # atm temperature = 296. # K # --- ここまで --- db_begin('data') fetch(name, moleculeID, isotopologueID, spectrum_begin, spectrum_end) # 指定した気圧と温度の吸光係数を計算 axis_hitran, value_hitran = absorptionCoefficient_SDVoigt(((moleculeID,isotopologueID),), name, Environment = {'p':pressure,'T':temperature}) # グラフを作成 fig = plt.figure(figsize=(9, 4.5), dpi = 200) ax = fig.add_subplot(111) ax.set_title("Calculated " + str(name) + " absorption coefficient from " + str(spectrum_begin)\ + " to " + str(spectrum_end)) ax.set_xlabel("1/CM") ax.set_ylabel("absorption coefficient") ax.grid(True) ax.set_xlim([spectrum_begin, spectrum_end]) ax.plot(axis_hitran, value_hitran, linewidth = 0.5) # グラフを表示 plt.show()

データをテキストファイルに書き出す方法

import numpy as np from hapi import * # パラメータを指定 # --- ここから --- # スペクトルの範囲 spectrum_begin = 2280 # cm^-1 spectrum_end = 2400 # HITRAN のパラメータ name = 'CO2' moleculeID = 2 isotopologueID = 1 # --- ここまで --- db_begin('data') fetch(name, moleculeID, isotopologueID, spectrum_begin, spectrum_end) file_name = str(name) + '_from_' + str(spectrum_begin) + '_to_'\ + str(spectrum_end) + '.txt' select(name, ParameterNames=('nu','sw','global_upper_quanta', 'global_lower_quanta','local_upper_quanta','local_lower_quanta'), File=file_name)

試したこと

file_name = str(name) + '_from_' + str(spectrum_begin) + '_to_'\ + str(spectrum_end) + '.txt' select(name, ParameterNames=('nu','sw','global_upper_quanta', 'global_lower_quanta','local_upper_quanta','local_lower_quanta'), File=file_name)

この部分をそのまま(# 指定した気圧と温度の吸光係数を計算)の下に書き込んでみました。
プログラムは動きましたが、テキストファイルに書き出された内容が温度、気圧を変えても吸光度が変わっていないことに気づきました。selectの()内がデータを書き出す関数なのですが、()内があまり理解が追い付いていないです。

補足情報(FW/ツールのバージョンなど)

pythonはspyderを使用しています。
私はpython解析をHITARANの公式サイトにあるhapi manual.pdfを読みながらしているのですが、英語マニュアルでわかりづらいかもしれません。hapi manual.pdfは公式サイトのHITRANOnlineのdata accessのHAPIというところにあります。
HAPIをpythonで使うには、hapi.py V.1.1.1.0をダウンロードする必要があります。
デスクトップにpythonのファイルを作ってそこにダウンロードしたhapi.py V.1.1.1.0を格納してます
テキストファイルに落とし込めたらこのような感じになります。

2280.009211 2.330E-30 1 0 0 12 0 2 2 01 R 2e 2280.013257 4.142E-25 1 3 3 12 1 3 3 02 P 13e 2280.014551 4.450E-30 1 3 3 21 1 3 3 11 R 22e 2280.024854 1.129E-27 2 3 3 13 2 3 3 03 R 13e 2280.031945 2.749E-30 0 3 3 21 0 3 3 11 Q 47f 2280.041242 4.648E-28 2 2 2 12 2 2 2 02 Q 13f 2280.052359 4.611E-29 3 2 2 14 3 2 2 04 R 27f 2280.062031 1.306E-30 0 4 4 11 0 4 4 01 Q 80e 2280.062158 1.540E-30 0 3 3 11 1 1 1 01 R 64f 2280.068090 3.299E-28 2 2 2 13 2 2 2 03 Q 23f

吸光度をグラフに表示するプログラムは、上図は気圧と温度を1atmと296K、下図は10atmと296Kのグラフを試しに作成してみましたので、参考に貼っておきます。イメージ説明
イメージ説明
どうかよろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2021/09/24 09:00

> 吸光度を、横軸単位cm^-1、縦軸単位AbsでCSVかテキストファイルに落とし込む方法が知りたい を見たら、グラフを描くのに使ってる「axis_hitran」と「value_hitran」の二つだけがペアになってるテキストファイルが作れたらいいと受け取れますが、質問に「テキストファイルに落とし込めたらこのような感じになります。」と書かれてるのには、二つではなく、もっとたくさん数値が並んでます 作りたいテキストファイルは、どのようなものなのでしょうか?
naiki

2021/09/27 00:29 編集

この貼り付けた画像でいうと、左の二列だけが必要になるので他の数値は無くても問題ないです。テキストファイルに書き出す方法に、selectの()内の'global_upper_quanta', 'global_lower_quanta','local_upper_quanta','local_lower_quanta'の部分がこのプログラムでは不要だと思います。私が作りたいのは、例で貼り付けた2つのグラフのⅹ軸、y軸の数値データを温度、気圧を変更しても、テキストファイルに反映されるようにしたいです。
jbpb0

2021/09/30 01:06

> selectの()内がデータを書き出す関数なのですが、()内があまり理解が追い付いていないです。 https://hitran.org/static/hapi/hapi_manual.pdf をざっと読んだところでは、 from hapi import * spectrum_begin = 2280 # cm^-1 spectrum_end = 2400 name = 'CO2' moleculeID = 2 isotopologueID = 1 db_begin('data') fetch(name, moleculeID, isotopologueID, spectrum_begin, spectrum_end) select(name, Conditions=('between','nu',spectrum_begin,spectrum_begin+0.1)) を実行したら、いろいろ表示されますけど、その中の特定のパラメータだけ「ParameterNames=」で指定して、 select(name, Conditions=('between','nu',spectrum_begin,spectrum_begin+0.1), ParameterNames=('nu','sw')) select(name, Conditions=('between','nu',spectrum_begin,spectrum_begin+0.1), ParameterNames=('global_upper_quanta',)) select(name, Conditions=('between','nu',spectrum_begin,spectrum_begin+0.1), ParameterNames=('global_lower_quanta',)) select(name, Conditions=('between','nu',spectrum_begin,spectrum_begin+0.1), ParameterNames=('local_upper_quanta',)) select(name, Conditions=('between','nu',spectrum_begin,spectrum_begin+0.1), ParameterNames=('local_lower_quanta',)) のようにして取り出すみたいです 「hapi_manual.pdf」の9ページの下〜11ページの表に、「ParameterNames=」で指定するID('nu'とか)が書かれてます
guest

回答1

0

ベストアンサー

python

1# 指定した気圧と温度の吸光係数を計算 2axis_hitran, value_hitran = absorptionCoefficient_SDVoigt(...

よりも下に下記を追加して実行したら、ファイルができます

python

1tmp = np.stack([axis_hitran, value_hitran], 1) 2np.savetxt('tmp.txt', tmp, fmt='%.30e') 3np.savetxt('tmp.csv', tmp, fmt='%.30e', delimiter=',')

「tmp.txt」と「tmp.csv」がファイル名です
お好きなものに変えてください

「%.30e」の「30」が、ファイルの数値の小数点以下の桁数です
あまり多くしても数値計算誤差が表示されるだけなので意味は無いです
(本当は30は多すぎ)

ファイルの数値は、上記コードを実行すると下記のような「指数表記」になります
2.280009211000000050262315198779e+03 4.541947789916274360287115547512e-22
「fmt=」の指定を変えれば、「e」を使わない表記に変えることもできます

参考
NumPyでCSVファイルを読み込み・書き込み(入力・出力)
の「CSVファイルに書き込み(出力): np.savetxt()」

投稿2021/09/29 11:29

jbpb0

総合スコア7653

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2021/09/30 00:09

作成したファイルを読み込んでグラフ表示する例 import numpy as np import matplotlib.pyplot as plt tmp = np.loadtxt("tmp.txt", dtype='float64') #tmp = np.loadtxt("tmp.csv", dtype='float64', delimiter=',') plt.plot(tmp[:, 0], tmp[:, 1]) plt.show()
naiki

2021/09/30 04:11

きちんと反映されました。大変ありがとうございました。ベストアンサーにさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問