spedas_about - spedas-j/member_contrib GitHub Wiki

(オリジナルドキュメント作成日:2009年7月, ここへの引っ越し日: 2013年9月)

SPEDAS とは?

SPEDAS (http://spedas.org/) は Space Physics Environment Data Analysis System の略。その母体となったのはいわゆるTHEMIS Data Analysis software Suite (TDAS)。THEMISプロジェクトのために開発・公開されてきたTDAS だが、THEMIS以外の衛星・地上データのプラグイン(特定のデータをSPEDAS上で扱うライブラリ)を取り込んで、今後はこのような名前で公開・メンテしていくらしい。2012年12月のAGUの際には「こういう名前にして枠組を拡張してくぞ!」という宣言をTDAS開発チームがしている。そして2014年8月29日にSPEDAS version 1.0 が公式リリースされた。

SPEDAS ver.1.0 は、TDAS ver.9 とERG-SCデータ, IUGONETデータ, GOESデータ用のプラグインが主な構成要素である。また今後は「TDAS」はSPEDASの中のTHEMIS-specificなソフトの部分を指す単語となり、TDAS部やERG-SCプラグイン部、IUGONETプラグイン部などがそれぞれのプロジェクトにより独立したスケジュールで開発・メンテされていくとのこと。

TDAS とはなに?

いわゆるTHEMIS tool, THEMISデータ解析ソフトのこと。カリフォルニア大学バークレー校(UCB)の研究者がでWind, FAST, CLUSTER衛星などのデータ解析ソフトとして長年開発してきた、IDL プログラム集。その後THEMIS PIのV. Angelopoulosがロサンゼルス校(UCLA)移ったので、UCLAの開発チームも一緒に開発を行っている。

IDLのメモリー上に読み込んだ各種データを ”tplot変数”と呼ばれるメタ情報付きデータ構造体 として管理し、tplot変数を直接引数にとる各種procedure, 関数で様々な処理を行うことができる。データの配列数・次元を明示的にプログラムに書かなくてもいいので、データ処理のためのプログラムが非常にシンプルに書ける。そのため割と低learning cost で習得することができる。

またTHEMISプロジェクトに合わせて、データファイルをネットワーク越しに自動でdownloadするprocedureが整備された。この恩恵は絶大で、データの在処を人づてに聞いたり、または計算機で検索したり、またそこからデータファイルをダウンロードしてローカルな計算機に整理整頓して置く(つまりDB化)という作業、さらにそこからデータを読み出すプログラムを自作するなど、データ解析にはいつも付きまとっていた一連の作業からユーザーを解放してくれる。

インストールのやり方

SPEDAS を使うにはIDLがインストールされているPCが必要である。またSPEDAS本体のインストールだけでなく、最近ではCDF形式のデータファイルを読み込むための修正パッチを適用する必要がある。さらに地球磁気圏・電離圏のデータを取り扱う場合には、便利な座標変換・磁力線トレースライブラリを収録した IDL_GEOPACK モジュールを一緒にインストールした方がよい。

IDLのインストール

SPEDASは単なるIDL procedure・function群なので、動作させるためには当然IDLが適切にインストールされたPC,Mac,Linux機が必要である。IDL ver. 8.2以降(2017年4月現在、ver.7系のIDLでは動かないコマンドが出てきているのでver. 8.2 or newerがよい)が動くWindows PC, Mac, Linux, Sunなら、どの環境でも動かすことができる。つまりSPEDASを入れる前に、まずIDLをインストールしておく必要がある。

Macにインストールする際の注意点

IDLでプロット等を描画するにはX-window serverが動作していることが必要であるが、最近のOS XにはX-window serverが付属していないので、別途XQuartzというX-window serverアプリをインストールする。XQuartzをインストール後、さらに下記の設定をする必要がある。

  • デフォルトの状態だとライブラリをうまく参照できなくてX windowが落ちるので、下記の1行を ~/.bash_profile に書いておく。

    export DYLD_LIBRARY_PATH=/opt/X11/lib/flat_namespace:$DYLD_LIBRARY_PATH

また http://spedas.org/wiki/index.php?title=Known_Issues_macOS に書かれているようにlibXt.?.dylib を所定の場所に複製コピーしてもいい。これでプロット等を描画できるようになる。

しかしこの状態でもctime, tlimit 等のマウスクリックを用いるコマンドが正常に動作しないので、さらに下記の設定を行う。

  • XQuartzの環境設定画面を開いて、
    • 「入力」パネル中の、3ボタンマウスをエミュレート、をON
    • 「ウィンドウ」パネル中の、選択されていないウィンドウを直接クリック、をON にしておく。

SPEDASのインストール

SPEDASには公式版(半年~1年に1回リリースされる安定版)と開発版(bleeding edgeと呼ばれる。ほぼ毎日更新)の2種類がある。それぞれ、

 日付が最新のものが最も新しいバージョン。単にそこにあるspdsw_latest.zip (その時点での最新版)をダウンロードしてもいい。 ちなみに同じ場所に置いてあるsslgen_r?????_yyyy-mm-dd.zip はspdsw_r?????_yyyy-mm-ddの中のgeneralディレクトリのみを抜き出したもの。具体的にはTDASのCUIコマンド群である。

開発版(bleeding edge)は最新のライブラリが収録されるが、デバッグが十分されていないこともある。初心者は公式版をインストールすることを推奨されているが、Van Allen Probes (VAP)、MAVEN、MMS、ERGデータなど最新の衛星データを解析したい場合は、プログラムが日々更新されている開発版を使うようにし、さらに定期的に最新のものに入れ替える方がいいだろう。

公式版をインストールする場合、上記の spedas_??? (??? の部分がバージョン番号)というフォルダのうち一番新しいものインストールする。2020年5月現在、最新は spedas_3_20 となっている。 spedas_?_??.zip をダウンロードして、自分のPC上の適当なディレクトリ・フォルダの中で解凍する。解凍すると出てくる idl というディレクトリ以下が 再帰的に(つまりその下のサブディレクトリが全て)含まれるようにコマンド検索パスを設定 するだけ。コマンド検索パスはUnix版およびMac版IDLの場合は IDL_PATH という環境変数にディレクトリパスを書くことで設定するが、Windows版の場合はスタートメニューの中のIDLフォルダにあるIDL Workbench を起動し、[ウィンドウ]→[設定]→[IDL]→[パス] のところのIDLパスとして上記の idl フォルダを指定する。

その後IDLを起動してから、IDLのプロンプトのところで thm_init (テミス・イニットと呼ばれる)コマンドを実行する。

IDL> thm_init 
% Compiled module: THM_INIT.
% Compiled module: FILE_RETRIEVE.
% Compiled module: ROOT_DATA_DIR.
% Compiled module: STRSPLIT.
......
(中略)
...
THM_INIT(141): 
THEMIS countdown:2404 Days, 01 Hours, 56 Minutes, 51 Seconds since launch
THEMIS> 

このようにTHEMIS衛星が打ち上がってからの総時間が出てプロンプトが THEMIS> となれば コマンド検索パスは正しく設定されており、そのままTDASを使うことができる。Graphical User Interface (GUI)ツールを使う場合は、 thm_gui コマンドのみを実行してGUIウィンドウ を起動すればよい。

開発版をインストールする場合も同様で、zipファイルをダウンロードして適当な場所に解凍して、IDLのコマンド検索パスを通すだけ。

ERG-SC, IUGONETプラグインの開発版のインストール

SPEDASの開発版にも各プロジェクトのプラグインが収録されているが、ERG-SCおよびIUGONETのプラグインの最新の開発版はそれぞれのプロジェクトのWebsiteから入手できる。2017年8月現在、ERG-SCプラグインは日々更新されていて、SPEDASに収録されているプログラムはどんどんobsoleteになっていくので、ERG-SC Websiteにある最新版をインストールして、かつ定期的にバージョンアップした方がよい。基本的にはzipファイルをダウンロード・解凍してパスを通せばよいが、コマンド検索パスの順番がSPEDAS本体よりも先になるように設定する。逆にすると、SPEDAS本体の中にある同名のコマンド(半年~1年以上前のバージョン)をコンパイルしてしまう。

SPEDASのソースの中に idl/projects/erg または idl/projects/iugonet というディレクトリがあるので、その中身を、上記のWebsiteから取得した最新の開発版のプラグイン(zipファイル)を解凍してできるソースコードで置き換えてしまえばよい。

ERG-SCプラグインもIUGONETプラグインも公式版SPEDASよりもずっと頻繁に更新されていくので、こちらも新しいバージョンのプラグインが公開されているかどうか定期的にチェックするとよい。

CDFファイル読込のための修正パッチの適用

詳細はCDFの本家サイトhttp://cdf.gsfc.nasa.gov/html/cdf_patch_for_idl.html を参照のこと。特にVAP・MMS・ERG等の最新データを扱う場合、version 3.6.3.1かそれ以降のCDF_TT2000 形式の時刻データに対応したバージョンが必須である。また、最新のうるう秒にも順次対応していくので、なるべく新しいversionをインストールするべきである。(2020年5月時点での最新versionは 3.7.1 )

IDL_GEOPACKをインストールする

JHU/APL のHaje Korth氏より、Tsyganenko model計算およびGEOPACK(地球物理系座標間の座標変換、磁力線トレースツール)をIDL上で動かすためのdynamic link module (DLM) が提供されており、これをインストールするとTDASの中のTsyganenko model関係のprocedureが使用できるようになる。Tsyganenko model計算をするつもりがなければ、インストールする必要はない。 このDLMを使うと、座標変換等の演算がIDL native版のプログラムを使う場合と比較して数十倍(!)速くなるので、必ずインストールするべし。なお2020年5月時点での最新バージョンはver. 10.6 であり、IGRF-13に対応している。

Windows PC, Mac, Linuxマシーンどれでも簡単にインストールできる。以下のサイトに置かれているzipファイルをダウンロードして、適当な場所に展開する。

http://ampere.jhuapl.edu/code/idl_geopack.html

Mac-PPC, Mac-x86, Sun, Sun64, Linux32, Linux64 用のファイルが置いてあるので、自分の計算機環境用のidl_geopack.dlm, idl_geopack.so (Windowsの場合はidl_geopack.dll)を、環境変数 IDL_DLM_PATH通っている場所に置いておくだけでよい。Sun64の場合は一緒にlibfsu.so.1 とlibsunmath.so.1 もコピーしないとうまく動かないらしい(未確認)。DLMファイルを置いたディレクトリパスを /AAA/BB とすれば、Unix版及びMac版IDLでは、環境変数 IDL_DLM_PATH の内容を、

IDL_DLM_PATH = "+/AAA/BB:<IDL_DEFAULT>" 

となるように設定する。<IDL_DEFAULT> はIDLのシステムディレクトリを意味し、これより先に/AAA/BB 下を見に行くようにしている。Windows の場合はコマンド検索パスと同様に、[ウィンドウ]→[設定]→[IDL]→[パス] のところのDLMパスで設定する。

上記のインストール及びDLM検索パスを設定した上で、

IDL> geopack_help 

% IDL_GEOPACK Version 10.6. DLM Interface Copyright (c) 2020 Haje Korth, JHU/APL.
% Disclaimer: This free software comes with ABSOLUTELY NO WARRANTY. Please refer 
% to the documentation for "Rules of the Road".
% Loaded DLM: GEOPACK.
% IDL Geopack Routines:
% GEOPACK_RECALC(_08), year, doy, hh, mm, ss.
% GEOPACK_IGRF_GEO(_08), r, theta, phi, br, btheta, bphi.
% GEOPACK_IGRF_GSM, x, y, z, bx, by, bz.
% GEOPACK_IGRF_GSW_08, x, y, z, bx, by, bz.
% GEOPACK_DIP(_08), x, y, z, bx, by, bz.
% GEOPACK_SPHCAR(_08), r, theta, phi, x, y, z.
% GEOPACK_BSPCAR(_08), theta, phi, br, btheta, bphi, bx, by, bz.
% GEOPACK_BCARSP(_08), x, y, z, bx, by, bz, br, btheta, bphi.
% GEOPACK_CONV_COORD(_08), x0, y0, z0, x1, y1, z1.
.... .... 
.... .... 
...
IDL> 

と入力して、GEOPACK DLMのバージョンとコマンドの使い方が表示されればインストールは成功している。

SPEDAS・TDASのマニュアル等

SPEDAS Wiki

SPEDAS Wiki(http://spedas.org/wiki/index.php?title=Main_Page)のDocumentationのところに各種ガイド、説明へのリンクがまとめられている。

UCBのWebサイトにあるTDASの公式ドキュメント

TDASの公式サイト http://themis.ssl.berkeley.edu/software.shtml の To begin: の 3. のところにあるQuick Reference Guide とUser's Guide。TDASを使う際には面倒でも一度目を通しておきたい。特にTHEMISデータ取り扱いを例にして書かれているので、THEMISデータを扱う場合は必読。

IUGONETの解析講習会で使用された資料

IUGONETプロジェクトが定期的に開催しているデータ解析講習会の資料には、TDASの初歩的な使い方を説明した講習資料がある。SPEDASの概要や、データ読込・プロット・加工のステップなどが平易に説明されている。以下のサイトから入手できる。

http://www.iugonet.org/software/documentation.html

ただし、実際にはIDLの基本的な文法やコマンドの知識が無いとどうにもならないので、SPEDASだけでなく、IDLのマニュアルや市販されているテキスト本等である程度勉強しておくこと。

SPEDASでプロットを作る際の標準的な手順

1. 日時を指定 (GUI: time range をクリック, CUI: timespan )

2. データを指定、ロード (GUI: Data Choices  Load Data, CUI: thm_load_xxx, “xxx”は観測器の略称)

3. プロットする (GUI: Active Data欄に対象tplot変数を入れてDraw Plot, CUI: tplot, vars)

tplot変数について

tplot変数とはなんぞや?

スカラー量またはベクトル量の時系列データと、そのデータについての情報(作成日時、作成者、単位、データ構造、プロット属性など)が入った構造体を指すタグのようなもの。IDL上では単なる文字列であるが、tplot変数を引数にとるIDL procedure (subroutineとかfunction、例えばtplot )に与えると、その文字列が指す構造体を参照して処理を行う。またIDL のメモリー上にある全てのtplot 変数には通し番号が振られており、tplot変数を引数にとるprocedureはその通し番号を引数としてとることもできる。tplot変数の概要および取扱い方についてはSPEDAS wikiにも説明がある (http://spedas.org/wiki/index.php?title=Data_model)。

時系列の時刻ラベルはTDAS内部での時刻表現、1970年1月1日00:00:00 UTCからの秒数を倍精度小数(double)で表したもの、を使用している。自分で計算すると間違えやすいので、time_double() 関数を使って計算する方がよい。こちらについてもSPEDAS wikiに簡単な説明が書かれている(http://spedas.org/wiki/index.php?title=Time_handling)。

tplot変数を文字列でtplot 等の引数にする場合case-sensitiveになるので、大文字・小文字を正確に書く必要がある。また*, ? などのワイルドカードが使える。例えばtha_dens, tha_temp, tha_vel_x, tha_vel_y, tha_vel_z という5つのtplot変数がある場合:

tplot, 'tha*' 	;; 全てプロット

tplot,'tha_vel_?'	;; tha_vel_x, tha_vel_y, tha_vel_z の3つをプロット

メモリー上のtplot変数をリスト表示: tplot_names, tnames()コマンド

tplot_names はそのまま実行すると、メモリー上にあるtplot変数 全部のリストを通し番号付きで表示する。またこれもワイルドカード付きの文字列を引数にとることができ、例えばtplot_names, ‘tha*’ とやることで、THEMIS-A probeに関するtplot変数のみをリストアップしたりできる。またtplot_names, /current とすると、直前のtplot commandでプロットされたtplot変数をリストアップする。さらにtplot_names, ‘tplot_var’,/verbose とすることで、tplot変数の詳細な情報(配列構造、データ属性など)が表示される。

THEMIS> tplot_names
   1 mm210_mag_rik_1sec_hdz 
   2 mm210_mag_rik_1min_hdz 
   3 mm210_mag_rik_1h_hdz   

THEMIS> tplot_names, 'm210_mag_rik_1min_hdz', /verbose 
   1 mm210_mag_rik_1sec_hdz 
     DQ = STRUCT   = TPLOT_QUANT --(7 Tags/56 Bytes)-->
        NAME        = STRING   = 'mm210_mag_rik_1sec_hdz'
        DH          = POINTER  = <PtrHeapVar807>
          *(DH) = *<PtrHeapVar807> = STRUCT   =  --(4 Tags/16 Bytes)-->
             X     = POINTER  = <PtrHeapVar810>
               *(X) = *<PtrHeapVar810> = DOUBLE[86400] = [1.1661408e+009, 1.1661408e+009,  ...]
             X_IND = LONG     = 86400
             Y     = POINTER  = <PtrHeapVar811>
               *(Y) = *<PtrHeapVar811> = DOUBLE[86400,3] = [18.072859, 18.040413, 18.105305, 18.062042,  ...]
             Y_IND = LONG     = 86400
...
..

       DL          = POINTER  = <PtrHeapVar809>
          *(DL) = *<PtrHeapVar809> = STRUCT   =  --(4 Tags/940 Bytes)-->
             CDF       = STRUCT   =  --(4 Tags/924 Bytes)-->
                FILENAME = STRING   = 'I:\work\data\ergsc\ground\geomag\mm210\1sec\rik\2006\mm210_1sec_rik_20061215_v01'
                GATT     = STRUCT   =  --(50 Tags/684 Bytes)-->
                   PROJECT                    = STRING   = '210 MM Magnetic Observation'
                   DISCIPLINE                 = STRING   = 'Space Physics>Magnetospheric Science'
                   SOURCE_NAME                = STRING   = '210MM>210 Magnetic Meridian Geomagnetic Field'
...
..
(略) 

tnames()も同様にメモリー上に存在するtplot変数のリストを返すが、これはprocedureではなく関数なので、str = tnames() のようにして使う。str にはtplot変数の名前(文字列)が代入される。tnames()が返すtplot変数が複数あれば、str は文字列配列になる。またキーワードセットとして/tplotを加えると,直前のtplotコマンドで描画されたtplot変数名のみがstrに格納される。

tplot変数の中身を吸いだしてIDLの通常の変数に代入する: get_dataコマンド

get_data, 'tplot_var', data=d 

d はX, Yという2つの要素を持つ構造体になる。粒子スペクトルのようなデータ(時間のほかに2次元、計3次元)ではさらにVという要素も付け加わる。

d.x : 時系列の時刻ラベルが入った倍精度小数値の配列

d.y : 各時刻でのデータ値が入った配列。データがスカラー量ならXと同じ数の1-D配列、ベクトル量なら[時刻ラベルの数] x 3という2-D配列、さらにenergy spectrum のようなデータの場合、[時刻ラベルの数] x [energy channel数] という2-D配列になる

d.v : データのうちの第2次元目が物理量を伴う場合、その値がこの配列に入る。具体的には粒子のenergy spectrumの場合、各energy channelのエネルギーの値がここに入る

例えば時刻N個分の30 energy channelのエネルギースペクトルデータの場合、d.x はN個の1次元配列、d.y はN×30の2次元配列となり、d.vもN×30の2次元配列となる。

またtplot変数の中の時刻配列およびデータ配列をIDLの配列(以下の例ではtime, var)として直接取り出すこともできる。

get_data, 'tplot_var', time, var 

IDL上の変数・配列から新たなtplot変数を生成する: store_dataコマンド

store_data, ’tplot_var’, data=d      (tplot_var は新しいtplot変数の名前を指す文字列)

d は上記のget_data のところで書いたようなX, Yの要素を持つ構造体。Xは時刻ラベルであるがTDAS内部の時刻表記にする必要がある。 また”data”の後ろにIDLの構造体定義式をそのまま書くこともできる。例えば時刻ラベルが入った1440個のdouble配列、tlbl (dblarr(1440)) と、3-Dベクトル量のデータが入った配列、vec (fltarr(1440,3))を作成したあと、以下のようなcommandでtplot_varという名前のtplot変数を生成することができる。

store_data, ‘tplot_var’, data={ x:tlbl, y:vec }