OMNI¶
NASAのOMNI2は、地球近傍の太陽風と惑星間磁場、地磁気指数を1時間ごとにまとめたデータセットです。 SOPRANはその1時間値を読み、月周辺の観測の上流条件として参照できるようにします。 年ごとのテキストファイルを、足りないときにNASA SPDFから取得してStoreに置きます。
読み込みにはxarray、作図にはmatplotlibが必要です([kaguya,viz]に含まれます)。
import sopran as spn
time = spn.day("2008-05-01")
data = spn.omni.load(time)
data.to_dataframe() # UTCの時刻を索引にしたスカラー変数の表(pandas)
data.to_xarray() # GSEの磁場ベクトルも含む xarray.Dataset
data["bz_gsm"] # SopranArray
spn.omni.pressure.plot(time)
spn.omni.variable("alpha_proton_ratio").plot(time)
Viewから使う場合はview.omni.pressure.plot()、Storeとダウンロード方針を独立させたい場合は
spn.Omni(store=spn.Store("/path/to/sopran_data"), download="never")を使います。
変数¶
| 名前 | 単位 | 内容 |
|---|---|---|
pressure |
nPa | 公開されている太陽風の動圧。密度と速度から再計算しない |
speed |
km/s | 太陽風の速さ |
density、temperature |
cm^-3、K | 陽子の密度・温度 |
magnetic_field |
nT | 平均磁場ベクトル(GSEのx/y/z) |
b_magnitude |
nT | 磁場の強さの平均。平均ベクトルの大きさとは異なる |
bx_gse、by_gse、bz_gse |
nT | GSE成分 |
by_gsm、bz_gsm |
nT | GSM成分 |
beta、alfven_mach、magnetosonic_mach |
1 | プラズマベータ、マッハ数 |
alpha_proton_ratio |
1 | アルファ粒子と陽子の数密度比 |
electric_field |
mV/m | 公開されている対流電場の指標(速度とGSMのBzから計算された値) |
kp |
1 | Kp指数。ファイルのKp×10を0.1倍した値 |
dst、ae、al、au |
nT | 地磁気活動指数 |
imf_spacecraft_id、plasma_spacecraft_id |
1 | 出典の探査機ID |
imf_sample_count、plasma_sample_count |
1 | 1時間平均に使った元のサンプル数 |
代表的な変数はspn.omni.pressureのようなエンドポイントで、すべてのスカラー変数はspn.omni.variable(name)で使えます。
観測時刻に対応付ける¶
upstream = spn.omni.at([
"2008-05-01T00:10:00Z",
"2008-05-01T00:59:59Z",
"2008-05-01T01:00:00Z",
])
at()は各時刻を含む1時間の値を返します。上の例では、最初の2つが00:00〜01:00、最後が01:00〜02:00の値です。
入力の順序と重複を保ち、補間も欠損の前方埋めもしません。source_time列は対応した元の時間ラベルです。
その時間の記録自体が無ければNaT、記録はあっても変数が欠損値ならその変数がNaNになります。
タイムゾーンの無い時刻はUTCとして扱い、NaTの入力は受け付けません。
load(start, stop)は時間ラベルについて半開区間[start, stop)を選びます。00:30から始めると00:00のラベルは含まれません。
00:30時点の上流条件が欲しいときはat()を使います。欠損は公式の変数別のfill値で判定し、記録の無い時間を補いません。
取得¶
download |
動作 |
|---|---|
missing(既定) |
未取得の年だけ取得する |
never |
通信しない。足りないとFileNotFoundError |
always |
取得し直す。進行中の年を更新するときにも使う |
取得はタイムアウト付きで一時ファイルへ書き、内容と年を確かめてから置き換えます。失敗しても以前のファイルは残ります。
新しく取得したファイルはチェックサムをStoreの台帳に記録します。置き場所はraw/omni/omni2_YYYY.datです。
1分値・5分値(HRO・HRO2)と速度ベクトル¶
CDAWebの月別CDFから、bow shock noseへ時間シフトした1分値と5分値を読みます。
1時間値に無い太陽風速度ベクトルvelocity(GSE、km/s)と、NASAが時間シフトに使ったbsn_x・timeshiftを含みます。
読み込みにはcdflibが必要です([kaguya]に含まれます)。
| 入口 | 分解能 | プラズマの元データ | ファイル(raw/omni/<ディレクトリ>/YYYY/) |
|---|---|---|---|
spn.omni.hro |
5分 | Wind/SWEのkey parameter | hro_5min/omni_hro_5min_YYYYMM01_v01.cdf |
spn.omni.hro_1min |
1分 | 同上 | hro_1min/omni_hro_1min_YYYYMM01_v01.cdf |
spn.omni.hro2 |
5分 | Wind/SWEの確定値 | hro2_5min/omni_hro2_5min_YYYYMM01_v01.cdf |
spn.omni.hro2_1min |
1分 | 同上 | hro2_1min/omni_hro2_1min_YYYYMM01_v01.cdf |
HRO2はWind/SWEの確定値を使うため、プラズマの値はより信頼できますが、欠測が増えます
(2008-02-29の1分値では、\(V_x\)の欠測がHROで16%、HRO2で24%)。どちらも変数の構成は同じです。
spn.omni.high_resolution("1min", product="hro2")の形でも選べます。
hro = spn.omni.hro_1min.load(spn.period("2008-04-01", "2008-04-03"))
hro.to_dataframe() # vx_gse, vy_gse, vz_gse, speed, density, pressure, bsn_x, ...
hro.velocity # SopranArray (time, component) in GSE
hro.at(["2008-04-02T08:34:00Z"]) # 最近傍の標本。補間しない。既定の許容差は標本間隔の2倍
公開値の\(V_y\)は地球公転による収差を除いた値です。地心の流れ方向が必要なときは
OMNI_ABERRATION_CORRECTION_KM_S(\(+29.8\,\mathrm{km/s}\))を一度足します。時刻はbow shock noseへの到達時刻のままで、
月への伝搬はdHT座標系が扱います。
解釈上の注意¶
- OMNIは地球近傍の上流条件を表す資料で、月の位置での太陽風の直接測定ではありません。 月までの追加の時間ずれや、月が磁気圏の内側にいるかどうかの判定はこのAPIでは行いません。
- GSEとGSMの値をそのまま返します。
Viewのframeを指定しても他の座標系へは回転しません。 - 1時間値・1分値・5分値のどれも、配布ファイルの全変数は読みません(粒子フラックスやRMSなどは未対応)。