1
0

More than 1 year has passed since last update.

sunpy.netを用いてJSOCのFITSデータをダウンロードする

Last updated at Posted at 2022-10-28

NASAのSolar Dynamics Observatory(SDO)で観測されたデータは、Joint Science Operations Center (JSOC)にアーカイブされています。

JSOCのデータにアクセスするには、手動でダウンロードしたり、curlやwgetでダウンロードする方法もありますが、太陽のデータ取得や解析を行うためのライブラリであるsunpyを使うのが一番便利です。

JSOCにアーカイブされたデータをsunpyを使ってダウンロードする方法を解説していきます。

JSOCにメール登録

JSOCのデータをダウンロードするには、まずはJSOCにメールアドレスを登録する必要があります。登録は2~3分ほどで終わります。

①こちらのサイトでメールアドレスを入力します。
http://jsoc.stanford.edu/ajax/register_email.html

②こんなメールが送られてくるので、内容を変更せず返信します。
メール下部に書いてあるハッシュを見てるっぽいですね。
スクリーンショット 2022-10-27 21.11.00.png

返信
スクリーンショット 2022-10-27 21.12.46.png

③メール登録完了の確認メールがきます。

JSOCClientを使ってダウンロード

import astropy.units as u
from sunpy.net import jsoc
from sunpy.net import attrs as a

s_date = '2015/1/1T00:00:00' # 開始日時
e_date = '2015/1/2T00:00:00' # 終了日時
series = 'aia.lev1_euv_12s'  # シリーズ
email = 'me@example.com'     # 登録したメールアドレス

out_dir = "/path/to/save/directory" # 保存先

client = jsoc.JSOCClient()  

response = client.search(a.Time(s_date,e_date),
                         a.jsoc.Series(series),
                         a.jsoc.Segment('image'),
                         a.Wavelength(211*u.AA), #波長
                         a.Sample(72*u.minute), #サンプリング間隔
                         a.jsoc.Notify(email))
print(response)

requests = client.fetch(response, path=out_dir, progress=True)

日時の指定の仕方: http://jsoc.stanford.edu/ajax/RecordSetHelp.html
seriesのリスト: http://jsoc.stanford.edu/JsocSeries_DataProducts_map.html

シリーズに関しては、同じAIAでも、12s、24s、3600sなどいくつかのcadenceの選択肢があります。これらは単に同じデータを異なる時間間隔で保存しているのではなく、それぞれで保存してある波長が異なります。自分がダウンロードしたいシリーズがどれであるかをしっかり確認することをおすすめします。

サンプリング間隔も設定することができます。このコードでは、72分に1枚(24時間で20枚)という設定にしています。何も設定しないと、cadence=12sなので、24時間あたり約7200枚になります。

ちょっと解説

JSOCClientによるダウンロードのプロセスは三段階に分割されます。

searchメソッドにより、検索クエリに一致するJSOCレコードを探索します。一致するレコードのテーブルが返り値としてresponseに格納されます。

       T_REC         TELESCOP INSTRUME WAVELNTH CAR_ROT
-------------------- -------- -------- -------- -------
2011-06-01T00:00:02Z  SDO/AIA    AIA_2      211    2110
2011-06-01T04:48:02Z  SDO/AIA    AIA_2      211    2110
2011-06-01T09:36:02Z  SDO/AIA    AIA_2      211    2110
                 ...      ...      ...      ...     ...

2012-05-31T09:36:02Z  SDO/AIA    AIA_2      211    2124
2012-05-31T14:24:02Z  SDO/AIA    AIA_2      211    2124
2012-05-31T19:12:02Z  SDO/AIA    AIA_2      211    2124
Length = 1822 rows

# このログは例です。上のコードを実行してもこのような結果にはなりません

②次に、fetchメソッドにより、これらのレコードをダウンロード用にステージングするように要求します。このプロセスは結構時間がかかるときがあります。

Export request pending. [id="JSOC_20221028_540", status=2]
Waiting for 0 seconds...
Export request pending. [id="JSOC_20221028_540", status=1]
Waiting for 5 seconds...
Export request pending. [id="JSOC_20221028_540", status=1]

③ステージングが終了し、ダウンロードできるようになると、登録したメールアドレスに通知がきます。同時に、プログレスバーが表示され、ダウンロードが自動的に始まります。

スクリーンショット 2022-10-29 3.24.54.png
スクリーンショット 2022-10-29 3.37.45.png

sunpy.netはdrmsを内部的に使用しているようです。drmsのquery stringなどのわかりにくい部分をよりヒューマンフレンドリーにしたのがsunpy.netということでしょうか。
逆にいえば、drmsを使えば全く同じことができますが、多くの人はsunpy.netで事足りると思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0