2008 年 9 月 10 – 12 日 (千葉大・CEReS) 担当 : 樋口篤志,山本宗尚,早崎将光 第 2 回 VL 講習会@千葉大・CEReS 衛星リモートセンシングデータを解析しよう! Last update: 2008 年 9 月 8 日 i 目次 第 1 章 Linux のインストール 1.1 Linux (Vine) のセットアップ . . . . . . . . . . 1.1.1 インストール前に準備すべきモノと情報 1.1.2 インストール . . . . . . . . . . . . . . . 1.1.3 標準パッケージの更新 . . . . . . . . . . 1.1.4 追加ソフトウェアのインストール . . . . 1.1.5 インストール後の諸設定 . . . . . . . . . 1.2 基本コマンドなど . . . . . . . . . . . . . . . . . 1.3 Linux を上手に使うために . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 1 3 5 5 6 6 7 第 2 章 テキストデータ処理とシェルプログラム 2.1 サンプルデータ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 テキストデータ処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 簡単なテキスト処理コマンドとその用例 . . . . . . . . . . . . . 2.2.2 コマンドの複合利用 (パイプ),入出力指定 (リダイレクト) など 2.2.3 上記コマンドを利用したデータ処理の例 . . . . . . . . . . . . . 2.2.4 練習問題:1 – 簡単なデータ処理 – . . . . . . . . . . . . . . . 2.3 データ解析で有用なコマンド,シェルプログラミング . . . . . . . . . . 2.3.1 主な『使える』コマンド . . . . . . . . . . . . . . . . . . . . . . 2.3.2 シェルプログラミング . . . . . . . . . . . . . . . . . . . . . . . 2.3.3 練習問題:2 – 実際の解析で使えるシェルプログラミング – . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 9 9 9 10 11 12 12 12 13 16 第 3 章 GMT の基本的な使用方法 3.1 GMT の使用準備 . . . . . . . . . . . . . . . . . 3.1.1 動作環境 . . . . . . . . . . . . . . . . . . 3.1.2 入手 . . . . . . . . . . . . . . . . . . . . 3.1.3 コンパイルとインストール,初期設定 . 3.2 GMT コマンドとその使用方法 . . . . . . . . . . 3.2.1 基本的な使用方法 . . . . . . . . . . . . . 3.2.2 よく使うコマンドとその実行オプション 3.3 作図練習: 地図・グラフを書く . . . . . . . . . . 3.3.1 作図例 1: 地図を書く . . . . . . . . . . . 3.3.2 作図例 2: 地図に画像を重ねる . . . . . . 3.3.3 作図例 3: 地図に等値線を重ねる . . . . . 3.3.4 作図例 4: XY グラフを書く . . . . . . . 3.4 GMT をさらに学ぶために . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 19 19 20 20 22 22 23 24 24 27 30 32 36 第 4 章 衛星データを扱うための初歩的な知識 4.1 はじめに . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 テキストデータとバイナリデータ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 37 37 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii 4.3 4.4 4.5 4.6 4.2.1 ビット (bit) とバイト (byte) . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.2 バイナリデータ表記 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.3 バイトオーダ - ビックエンディアン・リトルエンディアン . . . . . . . . 衛星データ処理ソフトウエア . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 衛星データ処理で必要なこと . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.1 生データ (raw data) の読み出し . . . . . . . . . . . . . . . . . . . . . . . 4.4.2 Radiometric 補正(カウント値から物理量へ) . . . . . . . . . . . . . . . 4.4.3 Geometric 補正(line, pixel から緯度軽度へ) . . . . . . . . . . . . . . . . 代表的な衛星データフォーマット . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.1 NOAA/AVHRR HRPT (High Resolution Picture Transmission) format 4.5.2 HDF (HDF-EOS) format . . . . . . . . . . . . . . . . . . . . . . . . . . おわりに . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 第 5 章 衛星データ解析 (初級編) 5.1 MTSAT データの解析 . . . . . . . . . . . . . . . . 5.1.1 MTSAT-1R について . . . . . . . . . . . . . 5.1.2 MTSAT-1R グリッドデータの読み出し . . . 5.2 NOAA AVHRR データの解析 . . . . . . . . . . . . 5.2.1 TIROS-N/NOAA について . . . . . . . . . 5.2.2 NOAA AVHRR グリッドデータの読み出し . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 39 39 42 42 43 44 44 45 45 45 46 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 47 47 47 52 52 52 第 6 章 衛星データ解析 (個別データ編) 6.1 応用解析 1: MODIS . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1 必要とする tool . . . . . . . . . . . . . . . . . . . . . . . . 6.1.2 MODIS level1 の主な取得先 . . . . . . . . . . . . . . . . . 6.1.3 MODIS level1 ファイル名ルール . . . . . . . . . . . . . . 6.1.4 サンプルデータの確認(図化) [HDFLook] . . . . . . . . 6.1.5 サンプルデータの読み出し [ModisSwathTool] . . . . . . . 6.1.6 物理量への変換 . . . . . . . . . . . . . . . . . . . . . . . . 6.1.7 CUI での処理 (swath2grid の使用) . . . . . . . . . . . . . 6.1.8 さらなる解析のために . . . . . . . . . . . . . . . . . . . . 6.1.9 GMT による RGB 合成(おまけ) . . . . . . . . . . . . . 6.2 応用解析 2: TRMM . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.1 必要とする tool . . . . . . . . . . . . . . . . . . . . . . . . 6.2.2 tool のインストール . . . . . . . . . . . . . . . . . . . . . 6.2.3 他ディストリビューションでの tool のインストールと補足 6.3 応用解析 3: 静止気象衛星と客観解析気象データの組合せ . . . . . 6.3.1 作業前の準備: 必要ソフト・データ・プログラム . . . . . . 6.3.2 解析に関する基本情報 . . . . . . . . . . . . . . . . . . . . 6.3.3 作業 1: 気象概況の調査 (天気図作成) . . . . . . . . . . . . 6.3.4 作業 2: MTSAT 雲画像と気象要素の複合解析 . . . . . . . 6.3.5 作業 3: 3.7 µm 帯差分画像による雲型判別 . . . . . . . . . 6.3.6 さらなる応用解析のために . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 56 56 57 58 59 59 61 66 68 69 70 70 70 76 78 78 79 80 84 87 90 付 録 A USB ブータブル Linux インストーラの作成方法 A.1 ブータブル USB メモリの作り方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2 PC 側の準備事項と実行手順 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 91 92 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii 付 録 B ソースからコンパイルする方法 付 録C C.1 C.2 C.3 C.4 awk, grep, sed クイックリファレンス 正規表現 . . . . . . . . . . . . . . . . . . grep の基本的使用方法 . . . . . . . . . . sed の基本的使用方法 . . . . . . . . . . awk の基本的使用方法 . . . . . . . . . . C.4.1 awk で使える演算子 . . . . . . . 93 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 97 97 98 98 99 付 録 D vi コマンドリファレンス 101 D.1 基本操作 (起動・終了・保存,カーソル移動) . . . . . . . . . . . . . . . . . . . . . . . . 101 D.2 編集時に利用するコマンド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 付 録 E Intel Fortran のインストール 103 付 録 F wgrib の使用方法,オプション 105 1 第 1 章 Linux のインストール Linux (UN*X 1 ) といっても,数多くのディストリビューション2 がある.本講習では,Vine Linux (ヴァインリナックス version 4.2; 以後は単に Vine と表記) を使用する. Vine の特徴として,以下の事柄が挙げられる: ¶ ³ 長所 • メジャーバージョンアップがそれほど頻繁では無いa • インストール用メディアが CD-R 1 枚におさまる • システムアップデート,ソフトウェアの追加・更新などがコマンド一発で出来る • 日本語環境 (デスクトップ,日本語入力,フォント,LATEX 2ε など) の構築が比較的容易 a Vine 4.0 は 2006 年 11 月リリース.以下,4.1 が 2007 年 2 月,4.2 が同年 12 月.例えば Fedora の場合,出来るだ け最新機能を盛り込むというコンセプトなので,半年で次期バージョンがリリースされる.早過ぎ. µ ¶ 短所 ´ ³ • 収録パッケージが他のディストリビューションに比べやや古い • 現時点では 32-bit 版しか利用できないため,最近の計算機性能を活かしきれないa • PC の最新機能や新規デバイスなどを認識できない (使用できない) 可能性があるb a 具体例は以下のとおり: (1) 大容量メモリを認識できない (最大で約 3.3GB まで),(2) 64-bit 版ソフトウェアが使え ない.Vine ver. 5 からは 64-bit 版も用意される (2008 年 9 月にリリース予定だが,予定通りに出るのかどうか . . . ?) b 筆者は過去 7 年あまり Vine を使用しているが,個人的には「新しすぎて使えなかった」という経験はほとんど無い. カネが無くて最新機種・部品を買えなかった,というのが実状だが . . . µ ´ 以後の節では,OS インストールと講習会で使用する追加パッケージについて解説し,研究に必要な 最低限の計算機環境を独力で構築するための手順を学ぶ. 1.1 Linux (Vine) のセットアップ 本節では, 「研究で使える Linux」をセットアップするための基本手順を解説する.一般的な Linux の インストール手順については,書店で販売されている解説本などを参照の事. 1.1.1 インストール前に準備すべきモノと情報 Windows と比べれば,Linux は動作可能な計算機環境がある程度限定される可能性がある.そのた め,まず最初に Linux インストール・セットアップに必要となるモノ・情報を用意して,インストール が可能である見通しを得ておく. 1 本来は UNIX と書くところ.以前,UNIX という OS の商標権の使用問題があった際に,UN*X という書き方がなされた 事があった.今は気にしなくてもよいはずだが . . . 2 収録パッケージの作成コンセプトなどの違いから生じた派生版のこと 第1章 2 Linux のインストール とはいえ,あまり堅苦しく考える必要は無い.最近の Linux であれば,よほどの最新計算機・特殊機 材でない限りインストール可能である. ¶ ³ モノ • ほどほどの性能のパソコンa CPU なんでもいい.3–4 年前の CPU でも,ちょっとしたデータ処理 (例: 全球客観解析デー タの処理) 程度には十分.ただし,数値気象モデルの実行や大量の画像・動画処理など をおこなう場合には,最近 (2006 年以降くらい?) のマルチコア CPU などを推奨. メモリ とりあえず 1 GB くらい.2GB あればちょっとしたデータ解析には十分だが,衛星 データの大量処理などをし始めると少々不足気味に感じるかもしれない ハードディスクドライブ (HDD) システム領域だけなら,デスクトップ用途の最小構成で数 GB.多少余裕を見て 10∼20 GB.要するに,いまどき売られている HDD なら最安製品 でも十分.あとは各自の研究内容に応じて必要サイズが大きく異なる. 光学ドライブ CD/DVD から起動 (ブート) できれば何でも良いb グラフィックチップ・カード 最新の製品でなければ,(たぶん) なんでも良い.個人的経験上, 画面出力端子はアナログ RGB よりもデジタル接続を使う方が X-Window に関する設定 トラブルが少ない キーボード・マウス 何でも使えるはず.ただし,多機能マウス (例: ボタンの数が 6–7 個つ いてる,など) や高付加価値 and/or 特殊キーボード (例: タッチパッドやマウスホイー ル機能が付属,など) の場合,各装置の性能を完全に発揮できない可能性あり ディスプレイ 何でも良い.利用者の好み次第.ただし,もし予算・設置場所に余裕があるな ら,表示画素数・画面サイズの大きなものの方が後悔せずに済むc • インストール用のメディア. 今回は CD-R からのインストールだが,USB メモリを使ったインストールや Live CD (CD 起動 Linux) の利用など,使い方は様々なバリエーションがある.CD-R に焼くための ISO イ メージは,Vine のメインサイトd や RING サーバe などで入手可能.初めて Linux を使う人 の場合,インストール CD/DVD 付きの書籍・雑誌などを購入しても良い. a 最新の製品でなく,多少古いほうがインストール時の問題が少なく,都合が良いこともある b USB メモリからインストールするなら,これすら無くても良い.Appendix A 参照 (1600 x 1200; 1.9 メガピクセル) or WUXGA (1920 x 1200; 2.3 メガピクセル) で 満足.個人で使うには贅沢な環境かもしれないが,広い作業領域である方が効率よく仕事をこなせる (少なくとも,狭くて ストレスを感じることが無い).ちなみに,一般的なモバイルノート PC だと XGA (1024 x 768; 0.8 メガピクセル),つま り UXGA や WUXGA の作業領域は XGA の 2.5∼3 倍.ただし,UXGA 以上なら大画面の製品 (目安: 19-inch 以上) を推奨.画素数に比して小画面だと,表示文字が小さく読みにくい. d http://vinelinux.org/ e http://www.dnsbalance.ring.gr.jp/ c 筆者の個人的経験では,UXGA µ ´ 1.1. Linux (Vine) のセットアップ 3 ¶ 情報 ³ インストール前の準備として,以下の事柄が挙げられる: ハードウェア情報の調査: 計算機のスペック.最近のインストーラは賢いので,これらを調べなく ても大抵インストール出来る.しかし,トラブル発生時に誰かに質問する際には,自分の計 算機環境の説明は必須a ネットワーク情報の調査: 接続するネットワークの基本パラメータ (ネームサーバ,サブネットマ スク,ゲートウェイ),運用方針 (禁止事項など).具体的には,IP 割り当て方針 (固定 IP or DHCP による自動割り当て),サーバ構築 (Web, Samba など) の可否,ワイヤレス LAN の 可否やその必要設定事項 (暗号化方式),など 使用方針 & パーティション設定: パーティション設定 (ハードディスクを用途別に分割) を決めて おく.使用環境・各自の好みに応じて設定は大きく異なるが,本講習会では 表 1.1 のように 設定する.今回の設定の基本コンセプトは以下の通り: • 維持管理を容易にするため,無駄なサービス (サーバ機能のこと.例: メール (sendmail, qpopper), Web (Apache), Samba, NFS, DHCP,DNS,NIS などの各種サーバ) は停止 ないし後で削除する • 日常作業は一般権限ユーザでおこなうb • Vine だけで研究に必要な環境 (数値データ処理,作図,文書書き,印刷) を構築する • システム領域を 5 つ,ユーザ領域を 2 つにパーティション分割 (表 1.1) • バックアップを容易にするため,/home のサイズは 4 GB 以下とするc • 元データとプログラム類は別パーティションに置く (元データ: /work 以下,プログラ ム類: /home 以下) d a 昔 (少なくとも 1990 年代後半) だと,グラフィックチップの種類とその詳細性能,ディスプレイのリフレッシュレート などは X-Window 設定に必須情報だった b root での操作ミスは,システム領域の破壊など,計算機が起動不能になる可能性を秘めている.root での作業時には, su ないし sudo コマンドなどの「儀式」を入れるのが無難 c /home 全体を ISO イメージ化して,DVD-R 一枚 (最大容量 4.7 GB) に焼いたり,4 GB の USB メモリにまるご とコピーする,というバックアップスタイルを想定.標準設定では各パーティションサイズの 90% までが利用可能なので, 最大容量は約 3.6 GB となる d 一般に,衛星データはファイルサイズが非常に大きい.使用量に依存するが,全データを /home に置いて作業するの は非現実的であろう.また,最重要ファイル (自作のプログラム・文書類) を容易にバックアップするためにも,/home と /work (ディレクトリ名は任意) という使い分けをするのがベターだと思う µ 1.1.2 ´ インストール インストーラの指示に従って順に設定.後はしばらく (10∼15 分程度) 待つ. • 「全てインストール」を選択3 • 管理者 (root) のパスワード設定時に,自分用の一般ユーザアカウントも作成する • パーティションは表 1.1 の設定を参照 3 不要なサービス (サーバ機能) は,インストール後に削除ないし停止する.RPM パッケージの削除は,rpm -e パッケージ 名.詳細は man rpm 参照.稼働しているサービスの確認や停止方法は,ネット上や解説本を調べれば必ず発見できる.Vine の場合には, chkconfig コマンドの使い方を調べれば分かる 第1章 4 Linux のインストール 表 1.1: パーティション設定の例. パーティション名 推奨サイズ 用途 システム領域 (本講習での必須設定) /boot ∼ 500 MB kernel 等が入る領域.複数の kernel を使い分けないのな ら,100MB 程度でも十分に動作可能. / 最上位ディレクトリ.必須.パーティションの設定方針に 4 GB より,必要サイズが大きく変動する.今回は /var や /usr を分離するので 2GB 程度で十分だろうが,念のため 2 倍 のサイズを確保 swap スワップ領域.プログラム動作時,メインメモリが不足し 2 GB た場合に使用される, 「HDD 上のメモリ領域」のようなも の.設定サイズは,昔 (1990 年代後半頃) だと「メモリの /usr 10 GB /var 2 GB 2 倍」が相場だった.最近の PC は搭載メモリが多いので, 絶対量として 2 GB もあれば十分 各種コマンド,ライブラリなどの初期インストール場所.な お,手動にて追加インストールするコマンド群は,OS 標準 コマンドと区別するため/usr/local 以下に置く 各種 log ファイルの保存,プリンタスプール領域.server と して稼働させなければ,それほど大容量は必要ないが,シ ステム更新時に自動取得する RPM パッケージが保存され るため,少なくとも 2 GB 程度を確保. ユーザ領域 (本講習での必須設定) /home ユーザのホームディレクトリ置場.Windows の「(マイ) ド 4 GB キュメント」 に近い存在.標準インストールだと別パーティ ションとしない事が多いが,最重要ファイル (自作のプログ ラム・文書など) の安全対策上,システム領域と分離する. サイズは各自の好み次第だが,バックアップ時の利便性を 考慮し,今回は 4 GB 程度とする /work (残り全て) 解析用の元データ・作業時の中間ファイルなど,大容量デー タ置場.本講習時は /work で統一するが,他と重複しない 限り任意の名前が利用可能. 参考: システム領域 (本講習では設定せず)) /opt 数 GB(?) 商用ソフトウェアの標準インストール先となる事がある.使 用ソフトにより必要サイズが大きく異なるので,万人に推 奨できるサイズは設定できない /tmp (任意 or 不要) ソフトウェアによっては,一時ファイル置場として使われ る事がある.現在ではシステムルート (/) と分離する必然 性に乏しいだろうが,/ が filesystem full になる可能性を 排除したい人は別設定する (かもしれない) 1.1. Linux (Vine) のセットアップ 1.1.3 5 標準パッケージの更新 商用・非商用問わず,OS の正式リリース後には様々なバグが発見される.バグを放置して計算機を インターネットに接続しておくと,簡単に悪用 (例: SPAM メールの中継点,サーバ攻撃の踏台など) さ れてしまうので,システム更新作業をする必要がある. Vine の場合は,apt コマンドを使う: ¶ ³ # vi /etc/apt/sources.list ※ apt の照会先を jaist などに変更 # apt-get update (更新パッケージ情報の取得) # apt-get upgrade (上記情報に基づくシステム更新) µ ´ なお,上記以外で使用頻度が高いと思われる apt コマンドの用法を以下に挙げる: ¶ ³ Case 1: パッケージ名が既知の場合 apt-get install パッケージ名 Case 2: パッケージ名が不明だが,何らかのキーワードを知ってる場合 apt-cache search キーワード 例: Fortran のパッケージを探したい apt-cache search fortran Case 3: 過去に apt で取得したパッケージを消去したい ( /var が容量不足になってきた時) apt-get clean µ 1.1.4 ´ 追加ソフトウェアのインストール Linux を大気科学/衛星リモートセンシングの研究で使うには,標準パッケージだけでは不足である. 必要に応じて,非標準ソフトウェアの追加インストールが必要となる.以下に代表的な追加ソフトウェ アを列挙する: 1. プログラミング言語 (開発環境) 関連コマンド cc ないし gcc (C 言語; 通常はインストール済み),g77, g90, gfortran (GNU の Fortran 77/90/95 関連コマンド),ifort4 (Intel Fortran 90/95),pgf90/pgf955 (PGI Fortran 90/95) 2. 大気科学分野で固有のコマンド wgrib6 (GRIB データの処理) ,ncdump (NetCDF ファイル情報の取得.NetCDF ライブラリ に同梱),GrADS (作図),GMT (作図用コマンド群),... その他,研究分野に応じて多様 3. データ取扱い用のツール・ライブラリ HDF7 (Hierarchical Data Format; 衛星データの記録に利用), NetCDF8 (Network Common Data Format; 気象データを含め,多次元データの記録に利用.GMT のインストールにも必須), MODIS データ取扱い用ツールなど9 ,TSDIS ツールキット10 (TRMM データ取扱い用ツール) 4 http://www.intel.com/cd/software/products/asmo-na/eng/compilers/284264.htm ; 非商用なら利用可能.ユーザ登 録必要.Intel C コンパイラ icc もある 5 http://www.pgroup.com/ ; 有名な商用コンパイラの一つ.試用版がダウンロード可 6 wgrib の使用方法は,Appendix F 参照.GRIB (Gridded Binary) は WMO 推奨のデータフォーマット.客観解析気象 データのような格子点データの記録に利用される.詳細は 6.3.3 節を参照 7 4.5.2 節,6.2.2 節参照 8 http://www.unidata.ucar.edu/software/netcdf/ 9 6.1.1 節, p.56 10 6.2.2 節,p.71 参照 第1章 6 Linux のインストール これらのコマンド・ライブラリは,RPM パッケージが用意されているとは限らない.パッケージイ ンストールが不可能な場合,必要コマンド・ライブラリのソースプログラムを入手して自分でコンパイ ル・インストールせねばならない.ソースからのコンパイル・インストール方法の概要は Appendix B を参照. インストール後の諸設定 1.1.5 以後の実習での作業を円滑にするため,以下を実行する: ¶ ¨ ¥ root での作業 (ここでは行頭が # で始まる行) § ¦ ³ # chmod 777 /work ※ /work のアクセス権を「全ユーザが読み書き実行自由」に変更 !!! 本来はしてはならない設定.実習を容易にするための便宜的措置 !!! # apt-get --yes install gv ggv ※ PS or EPS 画像表示用 # apt-get --yes install libjpeg libjpeg-devel zlib flex bison ※ HDF コンパイル用 # (必要なら標準設定ファイル /etc/profile, /etc/bashrc などを修正) ¥ ¨ 一般ユーザでの作業 (ここでは行頭が $ で始まる行) § ¦ $ (必要なら個人設定ファイル ~/.bashrc , ~/.bash_profile などを修正 ) なお,設定ファイル/etc/{profile,bashrc} や ~/.bashrc , ~/.bash_profile の使い方・実 行順序については,ネット上で様々な解説があるので後日学習の事a . ※キーレイアウト関連・ウィンドウ操作などの GUI インタフェース関連の修正は,GNOME 起動 後の 「デスクトップ」→「設定」以下で各自が必要とするものを修正 a 例えば http://www.itmedia.co.jp/enterprise/articles/0803/10/news012.html µ 1.2 ´ 基本コマンドなど 基本的なコマンドやその用法は,Linux 関連の雑誌・インストール解説本・インターネット上の解説 ページなどで解説されているため,ここでは具体的な用法は説明せず,列挙するだけとする. それぞれのコマンドで利用できるオプションについては,man コマンド名 や info コマンド名などを 使い,必要になったら調べればよい. 1. 基本コマンド (ファイル・ディレクトリ操作など) ls (ファイルリスト表示; LiSt), cd (ディレクトリ変更; Change Directory), cat (ファイルの画面 表示; CATalogue), man (コマンドマニュアル表示; MANual), pwd (現在のディレクトリの表示; Present Working Directory), cp (ファイル・ディレクトリのコピー; CoPy), rm (ファイル・ディ レクトリの削除; ReMove), mv (ファイル・ディレクトリの移動; MoVe), mkdir (ディレクトリの 作成; MaKe DIRectory), rmdir (ディレクトリの削除; ReMove DIRectory), lpr (ファイルの印刷; Line PRint), df (パーティションの使用量表示; Disk Free),du (ディレクトリ容量の表示; Disk Use),less (高機能なファイル表示11 ) 11 UNIX 開発の当初は more というページャがあり,それの機能拡張版の意味で名付けられた (らしい) 1.3. Linux を上手に使うために 7 2. シェルプログラム・テキスト処理で有効なコマンド (一部は 2 章で解説) head/tail (ファイルの先頭・末尾の表示), sort (並び替え), cut/paste (文字列の切り出し・連 結), diff (2 つのファイルの比較,違いを表示.パッチ作成), tr (文字列変換; TRanslate), uniq (重複行の削除),expr (整数演算),bc (複雑な算術計算), date (日付情報の取得) 3. テキスト処理ツール grep (非対話型文字列検索ツール12 ), sed (非対話型テキスト編集ツール13 ), awk (テキスト処理 ツール & スクリプト言語14 ), perl (テキスト処理から CGI までこなせるプログラミング&スクリ プト言語15 ) 4. 画像閲覧コマンド gv (PS, PDF 表示; GhostView),ggv (PS, PDF 表示; GNOME GhostView),eog (様々な画像 表示; Eye of GNOME) 1.3 Linux を上手に使うために Linux を上手に使うために必要と思われる事柄を以下に挙げる: • 習うより慣れろ 使いはじめの頃は,パーティションの切りかたが気にくわない・設定がうまくいかない・ディス トリビューションが自分に合わない・ケアレスミスで起動しなくなった,などが原因で何度もイ ンストールし直す事になる.失敗を恐れず,何度でもやり直せば,自分にあった使いかたをマス ターできる • 自分で問題解決する方法を学ぶ わからないことがあったら,まずはマニュアルを見る.英語だけの場合もあるが,論文に比べりゃ 読みやすいはずなので,面倒に思わずにトライする.それでわからなければネット上で探す.そ れでもダメなら,身近 or ネット上にいる熟練者に聞く16 ,などのステップをふめば,ほとんどの 場合は解決できる. • 自分が得た知識は他者にも還元する Linux というフリー OS を使っていると,さまざまな設定情報・トラブル解決方法がインターネッ ト上に在ることがわかる.自分がそれらの情報によって助けられたなら,今度は自分がその情報 を他者に還元すべきである.ネット上での情報提供が出来なくとも,職場・研究室などで誰かが 質問してきた時に自分が知る範囲の情報は惜しまずに提供しよう 12 発音は「ぐれっぷ」.Global Regular Expression Print ないし Generalized Regular Expresseion Parser の略 or 「せっど」.Stream EDitor の略 14 「おーく」.開発者 3 人 (Alfred V. Aho, Peter J. Weinberger, Brian W. Kernighan) の頭文字 15 「ぱーる」.正式には, 「実用的なデータ取得レポート作成言語 (Practical Extraction and Report Language)」が語源とい われているが, 「病的折衷主義のがらくた出力装置 (Pathologically Eclectic Rubbish Lister)」という説もある . . . らしい 16 ネット上で質問する際には,最低限の手順・礼儀を守ること.手順で重要な事は,正確な現状報告をする,という点.PC 環 境・コマンド実行環境の情報,実行目的,実行結果 (画面表示) などを,洩れなくかつ端的に伝える.礼儀については ... 社会的 な常識の範囲で良い.なお,ネット社会で独特な表現・言い回し (例: 2ch などでよく見るアレ) は,ごく一部の人間にしか通用 しないうえ,嫌悪感を抱く人もいる. 13 「せど」 9 第 2 章 テキストデータ処理とシェルプログラム Linux (UN*X) において,基本操作はコマンドラインでおこなう.このため,マウスでの操作を前提 とした Windows 系 OS と比べ,初学者には使いにくい OS と言える.解析作業をストレス無く行うに は,ある程度の数のコマンドを覚えねばならない.しかし,いったん Linux のコマンド操作に慣れてし まえば,Windows (のソフトウェア) では困難 or 面倒な「単純作業の繰り返し」が容易かつ効率的に出 来るようになる. 本節では,以後の講習で使用する Linux の基本的使用方法と必須コマンドを修得する. サンプルデータ 2.1 テキスト (文字) データ処理で頻繁に使用される基本的なコマンドについて,以下の気象データを用い て使用方法を学ぶ. Global Summary of the Day データより,東アジアの地上気象観測点 (815 地点) を抜粋したデータ (Asia1994-2008.txt ; 約 267MB) を使用する 配布元: National Climate Data Center (NCDC) (http://www.ncdc.noaa.gov) データ期間: 1994 年 1 月 1 日–2008 年 8 月 28 日 (5354 日間);日別値 要素 (列,単位;欠測値): WMO 測定局コード (1 列目),日付 (YYYYMMDD),日平均気温 (3 列目,◦ C;9999.9),日平均露点温度 (4 列目,◦ C;9999.9),日平均海面更正気圧 (5 列目, hPa;9999.9),日最高気温 (6 列目,◦ C;9999.9),日最低気温 (7 列目,◦ C;9999.9),日降 水量 (8 列目,mm;999.9) 配布ファイル: データファイル (Asia1994-2008.txt),データ情報ファイル (00README.txt), station code 対応表 (stnlist.txt),サンプルプログラム (順に解説) テキストデータ処理 2.2 2.2.1 簡単なテキスト処理コマンドとその用例 wc (Word Count): テキストファイル内の文字カウント.オプションで行数 (line ; -l option),単語 数 (word ; -w option),文字数 (character ; -c option) などを数えられる ¶ 用例 ³ pc01{user}101 % wc -l Asia1994-2008.txt ※ Asia1994-2008.txt というファイルの行数 (-l option) を数える µ ´ head (へっど), tail (ている): ファイルの先頭 (head),末尾 (tail) を表示する 第2章 10 テキストデータ処理とシェルプログラム ¶ 用例 ³ pc01{user}102 % head -100 Asia1994-2008.txt ※ Asia1994-2008.txt の先頭 100 行 (-100) を表示 µ ´ grep (ぐれっぷ): ファイル内の文字列を検索し,その文字列が含まれる行を表示 ¶ 用例 ³ pc01{user}103 % grep ^476620 Asia1994-2008.txt ※ Asia1994-2008.txt で行の先頭 ( ^ ) に 476620 という文字列が含まれている行を表示 µ ´ awk (おーく): ファイル内要素を列単位で計算したり,必要要素のみを切り出して出力 ¶ 用例 ³ pc01{user}104 % awk ’{print $2}’ Asia1994-2008.txt ※ Asia1994-2008.txt の 2 列目 ($2) だけを表示. このコマンドを実行すると,かなり長時間にわたり画面表示が流れ続けるので,Ctrl+c (プ ログラムの強制停止) を実行する pc01{user}105 % awk ’$1 >= 472000 && $1 < 479999 {print $0}’ \ Asia1994-2008.txt > Japan1994-2008.txt ※ \ は継続行の意味.Asia1994-2008.txt で,日本が管轄する測定局 (測定局コード 472000 から 479999 まで) ならば行全体 ($0) を Japan1994-2008.txt に出力 (リダイレクトは次節参 照.awk で使える演算などは Appendix C にも記載) µ ´ sort (そーと): ファイル内の文字・数値を使い,行の並べ替えを行う ¶ 用例 ³ pc01{user}106 % sort Japan1994-2008.txt ※ Japan1994-2008.txt の 1 列目の単語を基準に並べ替える pc01{user}107 % sort -k 2 -n Japan1994-2008.txt ※ Japan1994-2008.txt の 2 列目 (YYYYMMDD; -k 2 ) を数字として扱い ( -n ),昇順 に (小から大に向かう.この場合は日付の古い順) に並べ替える.降順の場合は, -nr とす る.列の区切り (Field Separator) はデフォルトでスペース.変更する場合は,-t SEP ないし –field-separator=SEP とする (詳細は man sort 参照) µ 2.2.2 コマンドの複合利用 (パイプ),入出力指定 (リダイレクト) など これらのコマンドは,それぞれ単独では単純な機能しか持たないが,| (パイプ) や > および >> (リダ イレクション) などと組み合わせる事で,複雑な作業が実行できる. コマンドの結果を引き渡す (パイプ)『 | 』 用法: コマンド 1 | コマンド 2 コマンド 1 の結果を使いコマンド 2 を実行 ´ 2.2. テキストデータ処理 ¶ 用例 11 ³ pc01{user}108 % ls -l | less ※ファイルリストを表示し,less で見る µ ´ コマンドの結果をファイルに出力 (リダイレクト)『>』 コマンドの結果をファイルに出力 (リダイレクト; 追加)『>>』 バックグラウンドで実行『&』 用法: コマンド & 複数コマンドの実行『 ; 』 複数のコマンドを 1 行で記述する場合 用法: コマンド 1 ; コマンド 2 & コマンドプロンプトでの実行,シェルスクリプト中での記述のどちらにでも使える1 終了コード コマンド実行が終了すると,そのコマンドの終了状態を示す終了コードを返す.多くの場 合,正常終了ならば「 0 (ゼロ)」,異常終了なら「 1 」2 を返す.シェルスクリプトでは,この終了 コードを使ってコマンド実行の成功/失敗を判定し,条件分岐や繰り返し処理を行う事もある. 終了コードの確認方法: echo $? ¶ リダイレクションの用例 ³ pc01{user}109 % grep ^476620 Japan1994-2008.txt > Tokyo1994-2008.txt ※ Japan1994-2008.txt より東京 (測定局コード 476620) のデータのみを取り出して Tokyo1994- 2008.txt に出力 µ ¶ パイプの用例 ´ ³ pc01{user}110 % awk ’$7 < 0 {print $2,$7}’ Tokyo1994-2008.txt | sort -k 2 -n ※東京で最低気温が氷点下になった日だけを選択して日時 (2 列目) と最低気温 (7 列目) を出力,そ の結果を気温の低い順に並べる pc01{user}111 % awk ’$7 < 0 {print $2,$7}’ Tokyo1994-2008.txt \ | sort -k 2 -n | less 前述の出力結果を less コマンドに渡し,結果の閲覧を容易にする µ また,これらのコマンドはコマンドラインから打ち込んで実行するだけでなく,実行するコマンドを 適切にファイルに記述しておく事で,ファイルを実行するだけで同じ作業をさせる事が出来る (使用例 は下記のサンプルを参照). 2.2.3 上記コマンドを利用したデータ処理の例 以後の例では,東京 (WMO 測定局コード: 476620) のデータのみを使用する (get-Tokyo.sh を実行) 1 原則としてシェルスクリプト中では「1 行にコマンド 1 つ」の方がスクリプトの解読が容易と思われる.個人の好み次第では あるが,節操の無い使い方はおこなうべきでない.少なくとも「自分ルール」を決めておこう 2 0 以外の何らかの数値,という場合もある ´ 第2章 12 テキストデータ処理とシェルプログラム 1. 各年毎の日数を数えて,データ欠損の有無を確認する (awk, wc;count-days.sh) 2. 対象期間での最高気温 (最低気温) の上位 (下位)10 個を表示する (awk, sort, head, tail;max-minT.sh) 3. 気温の日較差を計算してファイル (temp-range.Tokyo) に出力する (awk;temp-range.sh) 4. 日降水量が 100mm 以上となる全日数を数える (over100mm.sh) 2.2.4 練習問題:1 – 簡単なデータ処理 – • 東京の熱帯夜 (最低気温が 25 ◦ C 以上; 7 列目) 日数を年別に数え,画面表示 (標準出力) せよ • get-Tokyo.sh を参考に,北京 (測定局コード: 545110) のデータを切り出すプログラム (ファ イル名を get-Beijing.sh とする) を作成せよ • 上記データを用いて,オリンピック期間中 (2008 年 8 月 8 日∼8 月 24 日) の北京における最 高気温 (6 列目),最低気温 (7 列目),日降水量 (8 列目) を標準出力せよ • (時間に余裕のある場合) 自由課題: 何でも好きな事をやってみよう! (1) 各自で好きな地点を選択して同様の解析をする,(2) 2 点間の比較をする,... など.測定 局コード番号リスト stnlist.txt も参照 (必ずしも全地点のデータがあるわけでは無い). 2.3 2.3.1 データ解析で有用なコマンド,シェルプログラミング 主な『使える』コマンド 2.2 節で示した以外にも,Linux の標準コマンドには『使える』ものが多くある.これらのコマンド は単独だと単純な機能しか持たないが,組み合わせ方次第で非常に強力な「解析ツール」となる. また,解析ツールだけでなく『自分専用コマンド』を整備していけば,日常の作業効率も高まり,自 分にとって使い易い計算機環境が構築できる. at 日付・時刻を指定したプログラム実行に使用 cron 定期的なプログラム実行に使用.日付・時刻・曜日などを指定できる.毎日定期的にデータを自 動取得し,データ取得後に一次加工プログラムの実行 ... などで使われる cut シェル変数・環境変数やテキストファイル中の文字列からの切り出し.文字数単位・バイト単位 での文字の切り出しが出来る.フィールドセパレータ (-d or –delimiter オプション; デフォルトは TAB) を変更すれば,フィールド単位で文字の切り出し可能 date 日付・時刻情報の入出力をするコマンド.日付処理が多い大気科学・衛星リモセン研究において, 最も便利な標準コマンドの一つ.特に,日付・時刻に関する for / while ループ,cron や at を用 いた時刻指定ジョブなどと併用すると威力を発揮 diff 2 つのテキストファイルの比較・差異の検出.微妙に異なる 2 つのプログラムやデータを人間が目 で見て判断すると必ず見落とすが,diff ならば間違いない.プログラミングやテキスト処理におい て最も頻繁に使われる基本コマンドの一つ. expr 整数演算.比較的単純な四則演算などが使える.while ループの条件式で使う数値カウンタの加 算に利用されることがある 2.3. データ解析で有用なコマンド,シェルプログラミング 13 nkf 文字コード3 や改行コード4 の変換.異なる OS 間でのテキストファイルの交換時に世話になる5 paste テキストファイルを横並びで結合 (右側に列で追加) tr 文字列の変換.アルファベットの大文字から小文字への変換などをコマンド一発で出来る uniq 重複行の削除.事前に sort で並べ変えておくと良い シェルプログラミング 2.3.2 引数 (argument) 「ひきすう」と発音.コマンドの後に続くオプションなども引数である.シェルプログラムにお いては,実行に必要なパラメータをプログラム実行時に読み込ませる. ¶ 用例: 引数の使用方法 ³ prog1 arg1 arg2 .... の場合,シェルプログラム prog1 の中では, arg1 が $1,arg2 が $2,... arg9 が $9 という標準のシェル変数に代入される. 利用できる引数の数は 9 個まで. なお,$0 は実行中のシェルプログラム自身の名前が代入されている. µ ´ 繰り返し制御 (for/while ループ) for 文,while 文ともに繰り返し制御文.for 文は与えた文字列分だけ繰り返し,while 文は条件式 が true である限り繰り返す6 .それぞれの特徴を活かし,以下のように使いわけると効果的. for 文: 不連続な数値,文字列を利用した繰り返し while 文: 連続した整数値を使った繰り返し ¶ 用例: for 文 (sample01.sh) ³ for i in 0 1 2 3 4 5 a b c hoge ; do echo $i done µ ´ ¶ 用例: while 文 (sample02.sh) ³ i=0 while [ $i -le 5 ] ; do echo $i i=‘expr $i + 1‘ done µ ´ 条件分岐・条件式判別 (if, case 文) if 文, case 文による条件分岐で,シェルプログラムの動作条件を変更できる 3 最近の Linux ディストリビューションは UTF-8 が主流だが,ちょっと前だと EUC がデフォルト.Windows 系だと Shift-JIS 系は LineFeed (LF),MacOS 系は Cariagge Return (CR),Windows 系は CR+LF と OS により異なる 5 最近は iconv コマンドを紹介する blog や雑誌記事も多いが,古くからのユーザには nkf の方が馴染み深い 6 while とは逆に,条件が偽 (false) である限り繰り返す until という繰り返し制御文もある.書式は while と同じ. 4 UNIX 第2章 14 テキストデータ処理とシェルプログラム ¶ 条件式判定 (test コマンド) ³ 条件式判定は test コマンドでおこなう.しかし,シェルスクリプト中ではスクリプトを読み ] で括ってa 表記することが多 い.[ ] 内では,文字列比較,数値の大小・一致,ファイル有無などの真偽 (true or false) を判定できる.条件判別に関する詳細は,表 2.1 (p.17) を参照. やすくするために test 条件式 の書式よりも条件式を括弧 [ 複数の条件式を利用する場合,NOT,AND,OR 論理を組み合わせる: NOT 論理: [ ! 条件式 1 ] 条件式 1 が false だったときに true を返す (条件式 1 に不一致の場合を選択) AND 論理: [ 条件式 1 -a 条件式 2 ] 条件式 1 と条件式 2 が同時に true のときに true を返す OR 論理: [ 条件式 1 -o 条件式 2 ] 条件式 1 と条件式 2 のどちらかが true のときに true を返す a 実際には,[ は単なる括弧ではなく,test というコマンドのシンボリックリンクである.[ の実体がコマンドで あるため,括弧の直後には必ずスペースが必要.] に至っては,実のところコマンドですらない. µ ¶ 用例: if 文 ´ ³ if [ 条件文 1 ] ; then (コマンド) elif [ 条件文 2 ] ; then (コマンド) else (コマンド) fi ¨ ¥ 例 1: ファイルの有無を確認 (sample03.sh) § ¦ ifile=$1 if [ -e $ifile ] ; then echo "${ifile} exist." else echo "${ifile} is not found." fi ¨ ¥ 例 2: 数値の一致を比較 (sample04.sh) § ¦ year=$1 yr_idx=‘echo if [ $yr_idx echo "Year else echo "Year fi µ "${year} % 4" | bc -q‘ -eq 0 ] ; then ${year} is leap year." ${year} is common year." ´ 2.3. データ解析で有用なコマンド,シェルプログラミング ¶ 用例: case 文 15 ³ case 変数 in 文字列 1) ... 変数が文字列 1 と一致した場合の処理 ;; 文字列 2) ... 変数が文字列 2 と一致した場合の処理 ;; *) ... デフォルト処理 (変数がどの場合分けにも不一致の時) ;; esac ¨ ¥ 文字列に一致する条件で分岐 (sample05.sh) § ¦ var=$1 # argument 1 case $var in Z) var_name="geopotential height" ;; T) var_name="temperature" ;; RH) var_name="relative humidity" ;; *) var_name="NOT DEFINED" ;; esac echo "Variable ${var} is ${var_name}" µ ´ 第2章 16 テキストデータ処理とシェルプログラム シェル関数 シェル関数とは,コマンド実行手順を外部プログラム (サブルーチン) としてシェルに保存してお く機能である. ¶ 用例: シェル関数の使用方法 ³ 関数名 ( ) { 処理 } 例えば,引数にディレクトリ名を与え,そのディレクトリが存在しなければ対象ディレクト リを作成する関数 chk_dir は以下のように書ける: function chk_dir () { target_dir=$1 if [ ! -d ${target_dir} ]; then mkdir ${target_dir} fi } この関数を my_function というファイル名で保存a し,シェルプログラム中で source (ファイルを置いたディレクトリ名)/my_function chk_dir /work/MTSAT のように記述して使うことが出来る. a 配布ファイルの my function には記入済み.保存ファイル名は任意なので,自分好みの名前に変更しても良 い.複数の関数を追記しても良い µ 2.3.3 練習問題:2 ´ – 実際の解析で使えるシェルプログラミング – • 任意の年a の DOY (Day of year) を年月日に変換するシェルプログラムを作成せよ 回答例は ./sec 2-3-3/ 以下を参照. a 大気科学や衛星リモセン研究での使用を想定しているので,とりあえず西暦 1800 ∼ 2200 年くらいまでの期間でエ ラーが出なけりゃ良しとする 2.3. データ解析で有用なコマンド,シェルプログラミング 表 2.1: test コマンドで使える条件判別. ファイルに関する条件式 -d ファイル -e ファイル -h ファイル -s ファイル -w ファイル ファイルがディレクトリなら true -x ファイル ファイル 1 -nt ファイル 2 ファイル 1 -ot ファイル 2 実行可能ならば true ファイルが存在すれば true シンボリックリンクなら true ファイルサイズが 1 以上ならば true 書き込み可能ならば true ファイル 1 がファイル 2 より新しければ true ファイル 1 がファイル 2 より古ければ true 文字列に関する条件式 -n 文字列 -z 文字列 文字列が 1 文字以上であれば true 文字列 1 = 文字列 2 文字列 1 と文字列 2 が一致すれば true 文字列 1 != 文字列 2 文字列 1 と文字列 2 が異なれば true 文字列が 0 文字 (何もない) であれば true 数値に関する条件式 数値 1 -eq 数値 2 数値 1 と数値 2 が同じなら true 数値 1 -lt 数値 2 数値 1 < 数値 2 なら true 数値 1 -gt 数値 2 数値 1 > 数値 2 なら true 数値 1 -le 数値 2 数値 1 ≤ 数値 2 なら true 数値 1 -ge 数値 2 数値 1 ≥ 数値 2 なら true 17 19 第 3 章 GMT の基本的な使用方法 本講習会では,衛星データ・気象データなどの作図に Generic Mapping Tools (GMT) GMT の特徴は以下のとおり: ¶ 長所 1 を使用する. ³ • フリーソフトなので,導入コスト不要 • 選択可能な地図投影法の種類が多いうえに,2 次元・3 次元直交座標の作図も可能なため,解 析の目的に適合する図 (例: 複数要素の水平分布図,RGB 合成,時系列図,散布図や回帰直線 など) を一つのソフトウェアで作成可能 • 画像の標準出力形式は PostScript (PS) ないし Encapsulated PS (EPS) なので,Illustrator での修正や TeX への取り込みなどが容易 • 単純な機能を持つコマンド 60 個以上 (作図コマンド 18 個,データ処理コマンド 45 個) の集 合体なので,コマンドを組合せてシェルスクリプトで実行し,大量の画像作成も容易 µ ¶ 短所 ´ ³ • 米国 (ハワイ大学) で開発しているため,公式の日本語マニュアル・解説本は無く,標準では マルチバイト言語の出力不可a • GrADS や GTOOL のようなインタラクティブ操作が出来ないので,quick-view には不向き • 比較的単純な作図でも,使用コマンドとそのオプションの種類が多いため,慣れるのに時間 がかかるb • 作図の自由度が高い (自分で変更可能な作図要素が多い) ので,図の見た目にこだわる人・凝 り性の人が使うと, 「見た目がきれいな図」を作るのに多大な時間を費す (「ハマる」) 可能性 が高い a 日本語マニュアル・解説も,断片的情報ならネット上を探せば見つけられる.また,旧バージョンなら対応する日本語 化パッチを使って日本語出力も可能 b 裏を返せば,慣れてしまえばあまり短所とならない µ 3.1 3.1.1 ´ GMT の使用準備 動作環境 1. C コンパイラ (普通はインストール済み) 2. NetCDF (ver. 4 もリリースされたが,今のところは ver. 3.6 系列で) 1 http://gmt.soest.hawaii.edu/ GMT 開発者のサイト (ハワイ大学) 第3章 20 GMT の基本的な使用方法 3. PS ファイルビューワ (gv や ggv など) 4. Fortran コンパイラ (NetCDF ライブラリを Fortran でも使うなら必須) 5. GMT 矢羽パッチ2 (作成者:加藤さん@名古屋大 HyARC) このうち,GMT インストール時に最低限必要なのは 1, 2 のみ.3 は本講習で利用 (1.1.5 節でインス トール済み).4 はここでは省略する (6.3.1 節で使用.インストール手順は Appendix E 参照).5 も必 須でないが,水平風はベクトルじゃなく矢羽で書きたい,というこだわりの人がいる可能性を考慮し, ここでは矢羽パッチをあてる. 3.1.2 入手 現在の GMT 最新バージョンは 4.3.1 だが,パッチファイルの都合上 4.2.0 を使用する. GMT 本家の配布場所 : ハワイ大学 ftp://ftp.soest.hawaii.edu/gmt 日本のミラーサイト : 東海大学 ftp://ftp.scc.u-tokai.ac.jp/pub/gmt 矢羽パッチの配布元 : 加藤さん@名古屋大 HyARC http://rain.hyarc.nagoya-u.ac.jp/~kato/work/GMT/index.html 3.1.3 コンパイルとインストール,初期設定 Vine では GMT も apt でインストール可能だが,少々バージョンが古い (執筆時点では GMT v3.4.6). また,ソースからインストールする場合,install.sh を使うのが簡単なようだが,インストール時やその 後にトラブルが発生しても,問題解決に手間取る可能性がある3 .以上の理由から,ここでは GMT を 手動でインストールする. 2 執筆時点では GMT v4.2.0 まで対応 の全自動インストールを覚えても,他のソフトウェアでの応用が効かない.また,全自動に慣れた人の場合,えてして 他人に質問する際に質問のポイントがずれることがある.インストール先すら自分で把握していない事が多い 3 GMT 3.1. GMT の使用準備 ¶ NetCDF インストール手順 21 ³ $ tar xzf (USB メモリのマウント場所)/src/netcdf-3.6.3.tar.gz -C /work/src $ cd /work/src/netcdf-3.6.3 (必要ならコンパイル用設定を追加) $ ./configure --prefix=/usr/local/netcdf-3.6.3 $ make $ make check ※時間が無ければ省略可能 (su で root になって) # cd /work/src/netcdf-3.6.3 # make install # ln -s /usr/local/netcdf-3.6.3 /usr/local/netcdf ( $HOME/.bash_profile に追記./etc/profile へ追記する場合は root にて) $ export NETCDFHOME=/usr/local/netcdf $ export PATH=$NETCDFHOME/bin:$PATH $ export MANPATH=$NETCDFHOME/share/man:$MANPATH µ ´ なお,Intel Fortran を使い NetCDF をコンパイルする場合には,configure の実行前に以下の環境変 数設定も入れる必要がある: ¶ ³ $ FC=ifort $ CPPFLAGS="-DNDEBUG -DpgiFortran" $ CXX=c++ $ CXXFLAGS="-g -O2" µ NetCDF のインストールが無事終了すれば,次は GMT のコンパイル & インストールを行う: ´ 第3章 22 GMT の基本的な使用方法 ¶ GMT インストール手順 $ $ $ $ $ $ $ ³ cp -r (USB メモリのマウント場所)/src/GMT /work/src/. cd /work/src/GMT for i in *bz2 ; do echo "Extracting $i" ; tar xjf $i ; done cd GMT4.2.0 patch -p1 < ../gmt4.2.0_barb_src.patch20070521 patch -p1 < ../gmt4.2.0_barb_man.patch20070519 less README ※ README の中身を見て,コンパイルの流れを確認 $ ./configure --prefix=/usr/local/GMT4.2.0 $ mv ../share/coast ./share/coast $ make $ make run-examples ※動作確認を兼ねたサンプル図の作成 (以下は root での作業;~ /work/src/GMT/GMT4.2.0 に移動後) # make install # make install-data # make install-man # make install-www # ln -s /usr/local/GMT4.2.0 /usr/local/gmt4 ( $HOME/.bash_profile に追記./etc/profile へ追記する場合は root にて) $ export GMTHOME=/usr/local/gmt4 $ export PATH=$GMTHOME/bin:$PATH $ export MANPATH=$GMTHOME/man:$MANPATH µ ´ インストール後,GMT に関する初期設定ファイル .gmtdefaults4 を作成し,必要ならばパラメー タを自分好みに修正する.なお,GMT に慣れていない人の場合,最初は意味がわからないだろうから, ここで修正する必然性は無い (後でいつでも変更できる). ¶ ³ $ gmtdefaults -D > ~/.gmtdefaults4 $ vi ~/.gmtdefaults4 µ 3.2 3.2.1 GMT コマンドとその使用方法 基本的な使用方法 基本は単なるコマンドの羅列.つまり,シェルスクリプトを書けば良い. 例として,PS ファイル hoge.ps を作成する場合の手順を以下に示す: psfile=hoge.ps GMT コマンド 1 (オプション多数) -K > $psfile GMT コマンド 2 (オプション多数) -O -K >> $psfile : : GMT コマンド N (オプション多数) -O >> $psfile ´ 3.2. GMT コマンドとその使用方法 ¶ 注意点 23 ³ • コマンド 1 ∼ コマンド N の順序に注意.実行結果は順に PS ファイルに追加され るため,例えば変数 1 をカラーで塗りつぶし,変数 2 を等値線で書く場合,実行順 序は (1) 変数 1 の塗りつぶし,(2) 変数 2 の等値線表示,とする.逆順だと等値線 の上にカラー表示されるため,等値線が覆い隠されるa • オプション-O (上書き), -K (継続) を使用する作図コマンドの位置に注意.作図コ マンドの最初と最後を除き,全ての作図コマンドで-O と -K は必須.最初のコマ ンドは -O が不要 (-K のみ),最後のコマンドは -K が不要 (-O のみ) a わざと逆順にして覆い隠す事もよく使う.例: 等圧面データ作図後に山岳域を塗りつぶして,地表面以下 の等圧面データマスクアウト µ 3.2.2 ´ よく使うコマンドとその実行オプション 比較的使用頻度の高いコマンドを以下に挙げる: gmtset 標準設定パラメータ4 の値を一時的に変更する psbasemap 図の枠線を書く pscoast 地図を書く (-J オプション5 で地図投影法を選択) grdvector ベクトルを書く grdcontour 等値線を引く (格子点データの場合) pscontour 等値線を引く・数値範囲を塗りつぶす (不等間隔データの場合) psxy x-y グラフを書く (ラインプロットの例: 時系列図,シンボルプロットの例: 散布図) pstext 文字列を書く grdimage 格子点データを使った塗りつぶし makecpt カラーパレット (色の塗分け設定ファイル) を作る psscale カラーの凡例を書く minmax データの最小値・最大値を表示 xyz2grd テキスト・バイナリデータ (格子点値) の NetCDF データ化 surface データ内挿と NetCDF データ化 ps2raster PS ファイルの画像形式変換.EPS, PDF, PNG などに変換可能6 また,作図コマンドに共通するオプションを以下に挙げる: 4 パラメータの種類・意味は,man gmtdefaults を参照 オプションの詳細な解説は,man psbasemap を参照 6 ただし,用紙方向の回転が出来ず出力ファイルは必ず A4 縦置き (Portrait モード) 形式になる.A4 横置き (Landscape モー ド) で作図したファイルは,convert や mogrify コマンドなどで 90 度回転させると良い 5 -J 第3章 24 GMT の基本的な使用方法 -B 図の枠の書式指定.軸の目盛・図中の格子線の間隔や軸のラベルに関して細かい設定が可能 -J 地図投影法の指定 (次節で概要を解説.全部で 29 種類あるので詳細はマニュアル参照) -K 継続 (PostScript コードが追記される) -O 上書き -P 縦置き (Portrait) の指定 (デフォルト: 横置き (Landscape)) -R 作図範囲の指定.-Rwest/east/north/south[r] 地図 (または xy グラフ) の西・東・北・南 (左・右・上・下) 端の数値を指定.最後に r を付加す ると,指定座標は地図の南西 (左下) および北東 (右上) 端の (x, y) を順に記載 -U 作図日時・時刻の表示 -X 作図位置を原点から x 方向にずらす長さの指定 -Y 作図位置を原点から y 方向にずらす長さの指定 3.3 3.3.1 作図練習: 地図・グラフを書く 作図例 1: 地図を書く 研究内容 (研究対象地域) に応じて,適切な地図投影法を選択する必要がある.詳しい解説は地理学や 地図学などの参考書に譲るとして,比較的よく利用される地図投影法とおもな用途を以下に示す: -Jq/-JQ 円筒図法.全球データ表示などでよく利用される -Js/-JS ポーラーステレオ図法.極域データの表示で使われる -Ja/-JA ランベルト図法.中緯度の大陸規模 (数千キロメートル) の分布図などに使われることが多い -Jx/-JX 直交座標.XY グラフや地理的に狭い範囲の作図で使われる -J のアルファベット大文字・小文字は図の大きさの指定方法の違いで,それぞれ横幅の長さ (例: -JX15c なら,幅 15 cm),スケール (例: -Jx0.0001 なら,縮尺が 1:10000) を指定する. このうち,-JQ を使ったサンプル作図プログラム (pscoast コマンド) と作図結果を以下に示す: 3.3. 作図練習: 地図・グラフを書く 25 ¶ ³ 2nd VL lecture (10 − 12 September 2008) Example of Equidistant Cylindrical Projection see "psbasemap" manual 90˚N 60˚N 30˚N 0˚ 30˚S 60˚S 90˚S 180˚ 120˚W 60˚W 0˚ 60˚E 120˚E 180˚ Made by hayasaki 2008 Sep 1 11:08:02 /home/viper/office/VL_lecture/script/GMT_basics/./global_JQ.gmt µ ´ 図 3.1: 地図投影のサンプル (-JQ) 第3章 26 GMT の基本的な使用方法 ¶ global JQ.gmt ³ #!/bin/sh # Sample 1: Equidistant Cylindrical Projection my_name=$PWD/$0 # set this filename psfile=global_JQ.ps ### Set or change defaults gmtset PAPER_MEDIA A4 # PS file gmtset MEASURE_UNIT inch gmtset ANOT_FONT_SIZE 10 gmtset PLOT_DEGREE_FORMAT F gmtset BASEMAP_TYPE plain # choose fancy/plain # *** PLOT *** cat > text.in << EOF 5.5 7.2 15 0 4 2 Example of Equidistant Cylindrical Projection 5.5 6.8 15 0 1 2 see "psbasemap" manual 0.5 7.8 10 0 5 9 2nd VL lecture (10 - 12 September 2008) 11.2 0.4 10 0 5 3 Made by ${USER} EOF pstext text.in -R0/11.7/0/8.2 -Jx1 -U/0.5i/0.2i/"${my_name}" \ -N -K -X0.0 -Y0.0 > $psfile pscoast -R-180/180/-90/90 -JQ0/8i -Ba60f30g60/a30f10g30WeSn -Dc -A5000/1/1 -G130 -O -X1.5 -Y2.0 >> $psfile \ ### Clean-up temporary files \rm -f text.in .gmtdefaults4 .gmtcommands4 µ pscoast で使われているコマンドオプションの意味は以下の通り: -R option: 作図領域 (緯度・経度範囲) の設定 -Rwest/east/south/north -R-180/180/-90/90 (全球) ; -R30/120/-30/30 (南アジア∼インド洋) -J option: 地図投影法の設定.ここでは円筒図法,経度 0 度を中心,横幅 8-inch (-JQ0/8.0i) -Jqlon0 /scale ; set 1:xxxx or UNIT/degree -JQlon0 /width ; set length in cm (c) or inch (i)) -B option: 図の枠線表示に関する設定,-B(x-axis)/(y-axis) a: annotation spacing (数値表示間隔) f: frame tick spacing (枠線上での目盛間隔) g: gridline spacing (地図内の経緯線間隔) -D option: 海陸分布・海岸線の解像度設定 full, high, intermediate, low, crude (順に -Df, -Dh, -Di, -Dl, -Dc) 作図範囲により変更すべき.目安は,全球: -Dc, 東アジア: -Di,日本列島: -Dh, 関東平野: -Df -A option: 小規模地形の表示・非表示,海岸線・湖岸線の表示レベル (0–4) 選択 -A(min area in km2 )/(min level)/(max level) 例: -A5000/1/2 5000 km2 以下の面積の地形は非表示.表示レベルは最小 1,最大が 2. 表示レベル: 0 - 4 の範囲をとる.1 = 海岸線のみ7 ,2 = 陸上の湖沼や規模の大きい河川,... の 7 陸地上の湖沼も全て非表示.カスピ海,アメリカ 5 大湖すら描かなくなるので注意 ´ 3.3. 作図練習: 地図・グラフを書く 27 ように数値が大きいほど細かい地形を表示.デフォルト値の 0 は全レベル (1–4) 表示.実用上は 1 ないし 2 で十分. -G option: 陸地の塗りつぶし情報 (8-bit; 0–255) 用例: -Gred /green/blue or -Ggrayscale -O, -K, -X, -Y option: 説明済み この他,ランベルト図法,ポーラーステレオ図法などのサンプルは,渡邊さん@清水建設 作成のマ ニュアルや GMT Docs.pdf を参照 (p.36). 3.3.2 作図例 2: 地図に画像を重ねる 衛星データ研究・大気科学研究においては,観測で得られた要素を地図上にプロットするのが一般的 に行われる. 特に,衛星データ研究においては,カラーないしモノクロで「画像」を地図上に重ね合わせる事が多 い.このような画像作成 (色の塗りつぶし) をするために,GMT では grdimage コマンドを使う. 図 3.2 は grdimage コマンドを用いた作図例 (MTSAT-1R の IR1 TBB) である. ¶ ³ 0.04 degree interval, 80E − 160W, 60S − 60N 50˚ N data source: CEReS, Chiba Univ. 0000 UTC 01Apr2008 MTSAT−1R IR1 (10.3 − 11.3 µm) 40˚N 300 280 260 240 30˚N 220 140˚E 130˚E /home/viper/office/VL_lecture/script/GMT_basics/image_plot/grdimage.gmt µ 160˚E 2008 Sep 4 12:57:34 150˚E 120˚E 20˚N Options of map projection = −R115/15/180/50r −JA140/35/18.8c hayasaki ´ 図 3.2: grdimage コマンドによる作図サンプル.2008 年 4 月 1 日 0 時 (世界標準時) における MTSAT-1R の赤外 1 チャンネル等価黒体温度 (TBB). 第3章 28 GMT の基本的な使用方法 ¶ grdimage.gmt ³ #!/bin/sh # Example: grdimage, psscale using MTSAT IR1 data my_name=$PWD/$0 # filename of this program ### Input/Output path ipath=$PWD ps_path=../PS ### Set analysis area: East Asia rr="-R115/15/180/50r" # mapping range (rectangle area) jj="-JA140/35/18.8c" # -JA option parameter bb="-Ba10f5g10/a10f5g10" yyyy=2008 ; mm=04 ; dd=01 ; hh=00 yyyymm=${yyyy}${mm} yyyymmddhh=${yyyy}${mm}${dd}${hh} cmon=‘LANG=C ; \date --date="${yyyy}/${mm}/${dd}" +"%b"‘ target_date="${hh}00 UTC ${dd}${cmon}${yyyy}" orgfile=${ipath}/${yyyymmddhh}_ir1.grd psfile=${ps_path}/grdimage_IR1_${yyyymmddhh}.ps echo " PS = ${psfile}" ### gmtset PAPER_MEDIA A4 gmtset ANOT_FONT_SIZE 10p gmtset MEASURE_UNIT cm cat > text.in << EOF 1.2 20.0 10 0 1 1 0.04 degree interval, 80E - 160W, 60S - 60N 28.0 20.0 10 0 1 3 data source: CEReS, Chiba Univ. 3.8 18.0 18 0 1 1 ${target_date} 22.0 18.0 12 0 1 3 MTSAT-1R IR1 ${var} (10.3 - 11.3 @~m@~m) 28.0 0.5 10 0 0 3 ${USER} EOF pstext text.in -R0/29.7/0/21.0 -Jx1 -U/1.0/0.5/"${my_name}" -N -Y0.0 -X0.0 -K > $psfile psbasemap ${rr} ${jj} ${bb}WeSn -O -K -X3.8 -Y3.3 >> $psfile # +++ plot TBB +++ makecpt -I -Cgray -T220/300/20 -Z > ir1.cpt xyz2grd ${orgfile} -Gt.cdf -R80/200/-60/60 -I0.04 -F -N-999.0 -ZTLfw grdimage t.cdf -Cir1.cpt $rr $jj -O -K >> $psfile psscale -Cir1.cpt -D20.8/7.6/5.0/0.30 -E1.2 -L -O -K >> $psfile pscoast $rr $jj -A200/1/2 -Di -W0.5p,20/250/0 -O -K >> $psfile psbasemap $rr $jj ${bb}WeSn -O >> $psfile ### Clean-up temporary files \rm -f text.in t.cdf *.cpt \rm -f .gmtdefaults* .gmtcommand* µ 画像作成時に重要なコマンドは以下の 3 つである: grdimage 「色塗り」.色の塗りつぶし PS ファイル作成コマンド makecpt カラーパレット作成.grdimage, psscale で使用される psscale 色の凡例を付ける ´ 3.3. 作図練習: 地図・グラフを書く 29 grdimage で使われているコマンドオプションの意味は以下の通り: -R,-J option: スクリプト冒頭部のシェル変数 rr= および jj= で -R および -J を設定.-R の末尾 に “r” が付くと,作図範囲は左下 & 右上カドの座標を指定.地図投影法はランベルト図法 (-JA). 「-JA140/35/18.8c」の意味は,140◦ E を中心経度,参照緯度を 35◦ N ,横幅 18.8 cm -C option: 使用するカラーパレットファイル名の指定 ここでは ir1.cpt を指定 カラーパレット (ir1.cpt) は,makecpt コマンドで作成している.作成したカラーパレットファイ ルの内容は,以下を実行すれば確認できる: ¶ ³ pc01{user}301 % makecpt -I -Cgray -T220/300/20 -Z # cpt file created by: makecpt -I -Cgray -T220/300/20 -Z #COLOR_MODEL = RGB # 220 255 255 255 240 191 191 191 240 191 191 191 260 127 127 127 260 127 127 127 280 64 64 64 280 64 64 64 300 0 0 0 B 255 255 255 F 0 0 0 N 128 128 128 µ それぞれの数値の意味は,左から順に Z1 Red1 Green1 Blue1 Z2 Red2 Green2 Blue2 (以下,同様の形式で続く) Z2 Z3 ´ Red2 Green2 Blue2 Red3 Green3 Blue3 である.ここで,Zi (i = 1, 2, . . . , N ) は TBB の色分け階級の区分値,Red, Green, Blue 部分は 8-bit (0 – 255) で与える.B, F, N は,それぞれ Background, Foreground, Not a Number (NaN) 8 のカラー 指定である. makecpt のオプションの意味は以下の通り: -I option: 標準カラーパレットの色のパターンを逆方向にする この実行例の場合,TBB が低温→高温で白→黒になるようにすること (デフォルトでは数値が小 さい方から黒→白) -C option: 参照する標準カラーパレット ここではモノクロ (-Cgray).参照可能な標準カラーパレット (20 個) は, file://$GMTHOME/www/gmt/doc/html/GMT Docs/node197.html 参照9 8 この場合は欠測値 9 cpt ファイルの雛型は $GMTHOME/share/cpt/ 以下 第3章 30 GMT の基本的な使用方法 -T option: カラーパレットで使う数値の範囲指定 -TZmin/Zmax /dz Zmin & Zmax = 最小 & 最大値,dz = 1 階級あたりの数値幅 -Z option: 色調が連続的に変化するカラーパレット (カラーグラデーション付き) 作成 -Z が無いと,cpt ファイル中の Zi と数値 Zi+1 の RGB が同じ (Zi < Z < Zi+1 の階級内では一 定色) になる makecpt の詳しい使用方法は,man makecpt または file://$GMTHOME/www/gmt/doc/html/GMT Docs/node58.html 参照. また,図の凡例を描くコマンド psscale のオプションの意味は以下の通り: -D option: 凡例の位置 カラーパレットを描く座標と長さ・幅を指定.-Dxpos/ypos/length/width xpos および ypos は,凡例の中央・左端の位置 (横向きの凡例だと,中央・上端の位置).末尾に “h” を付けると,凡例が横向きになる (horizontal scale) -C option: 参照する標準カラーパレット 図の凡例なので,grdimage で使用するものと同じにする. -E option: 凡例の両端に三角をつける Background & Foreground の色を表示 -L option: 凡例の階級幅を等間隔にする ※この例では,最初から TBB を等間隔で分割しているので無意味 psscale の詳しい使用方法は,man psscale 参照. 3.3.3 作図例 3: 地図に等値線を重ねる 大気科学・気象学でもっとも基本的な図の一つが「天気図」,つまり海面更正気圧 (SLP) の水平分布 (等圧線図) である.客観解析気象データのような等間隔格子点データを用いて GMT で等値線を描くに は, grdcontour コマンドを使う10 . 図 3.3 は図 3.2 に grdcontour コマンドで SLP の等圧線を追加した例である. 10 不等間隔データの場合には,pscontour が使える 3.3. 作図練習: 地図・グラフを書く 31 ¶ ³ 0.04 degree interval, 80E − 160W, 60S − 60N 50˚ N data source: CEReS, Chiba Univ. 0000 UTC 01Apr2008 SLP & MTSAT−1R IR1 (10.3 − 11.3 µm) 20 10 100 0 40˚N 98 0 300 280 0 102 260 100 30˚N 240 0 220 1020 140˚E 130˚E /home/viper/office/VL_lecture/script/GMT_basics/image_plot/with_grdcontour.gmt 160˚E 2008 Sep 4 16:47:42 150˚E 120˚E 20˚N Options of map projection = −R115/15/180/50r −JA140/35/18.8c hayasaki µ 図 3.3: grdcontour コマンドによる作図サンプル.図 3.2 と同様.ただし海面更正気圧 (SLP) を追加 (赤実線; 4-hPa 間隔). ´ 第3章 32 GMT の基本的な使用方法 ¶ with grdcontour.gmt ³ #!/bin/sh # Example: grdimage, psscale using MTSAT IR1 data # !!! Add grdcontour command (NCEP FNL SLP data) !!! (以下,しばらくは grdimage.gmt と同一) orgfile=${ipath}/${yyyymmddhh}_ir1.grd slp_file=${ipath}/NCEP_FNL_SLP_${yyyymmddhh}.txt psfile=${ps_path}/with_grdcontour_IR1_${yyyymmddhh}.ps echo " PS = ${psfile}" (以下,pstext の記述文を除き grdimage.gmt と同一) pscoast $rr $jj -A200/1/2 -Di -W0.5p,20/250/0 -O -K >> $psfile ### Meteorological data (SLP) awk ’{print $1,$2, 0.01*$3}’ $slp_file | xyz2grd -Gt.cdf -Rg -I1.0 cont_opt=" -C4 -Wc4,white -S2 " anot_opt=" -A- -Wa8,white " grdcontour t.cdf $rr $jj $cont_opt $anot_opt -O -K >> $psfile cont_opt=" -C4 -Wc0.5p,250/20/0 -S2 " anot_opt=" -A20 -Wa1.0p,250/20/0 -A+k0/0/0 " grdcontour t.cdf $rr $jj $cont_opt $anot_opt -O -K >> $psfile psbasemap $rr $jj ${bb}WeSn -O >> $psfile (以下,grdimage.gmt と同一) µ grdcontour コマンドでよく利用されるオプションを以下に示す: ´ -R, -J option: pscoast 部分で説明済み.省略. -C, -A option: 等値線 (-C) およびラベル (等値線の数値) 入り等値線 (-A) の描画間隔の指定 -A で数値を表示したくない場合は,“-A-” とする.この他にも,-A ではフォントの種類・色など の細かい設定が可能.詳細は man grdcontour を参照. -W option: ラインプロットの線やシンボルの外形の線の設定 -Wc が -C と,-Wa が -A で指定した等値線に対応する. 書式は -Wwidth,color,texture という形式. width : 線の太さを数値 (デフォルトは dpi 単位) や,thin, thick, fat などの文字列で指定 color : 8-bit RGB (0 –255) で指定 texture : ダッシュとドットを組合せ点線,破線,一点鎖線などを指定 (デフォルト: 実線) -S option: 等値線のスムーシング用パラメータ -S2 と指定すると,グリッドサイズの 1/2 間隔でリサンプリングする 3.3.4 作図例 4: XY グラフを書く 簡単な XY グラフの作図例として,psxy コマンドを使った時系列図を作成する.psxy コマンドは, 時系列図のようなリニアな直交座標上のラインプロットだけでなく片対数・両対数図を作成したり,散 布図を描くことも可能である. psxy コマンドでよく利用されるオプションを以下に示す: -R option: 作図領域 (x 軸,y 軸の最小/最大値) の設定 -Rx-min/x-max /y-min/y-max 3.3. 作図練習: 地図・グラフを書く 33 -J option: 図法の指定 一般的な XY グラフなら,-Jx / -JX (直交座標) を使う. 用例: -JX(x 軸の長さ)/(y 軸の長さ) 長さを負値にすると,軸の正負の向きを反転できる.また,l (英小文字のエル) を付ければ対数軸 (logarithm) を設定できる11 -B option: 図の枠線表示に関する設定,-B(x-axis)/(y-axis) a, f, g の意味は pscoast 部分と同じ.なお,対数軸の場合は特殊で,1, 2, 3 の数値で指定12 -M option: 入力ファイルが分割されていることを指定 デフォルトのファイル分割マークは “>” .観測データの欠測値処理などで利用される. -S option: シンボルの種類とその大きさを指定 丸 (-Sc),四角 (-Ss),三角 (-St),逆三角 (-Si),星印 (-Sa),楕円 (-Se),5 角形 (-Sn),6 角形 (-Sh),8 角形 (-Sg),菱形 (-Sd),十字 (-Sx),ベクトル (-Sv) などが指定可能. 例: -Sc0.5c = 「直径 0.5 cm の丸」 -G option: 塗りつぶし情報の指定 (8-bit RGB; 0–255) 通常は -S と同時使用し,シンボル内部の色を指定するのに用いる.-S と同時使用ではない (ライ ンプロット) の場合,ポリゴン (指定座標点を直線で結んで取り囲んだ領域) 内部の色やハッチパ ターンを指定できる. 用例: -Gred /green/blue or -Ggrayscale -W option: ラインプロットの線やシンボルの外形の線の設定 書式は -Wwidth,color,texture という形式. grdcontour と同じ. 11 気象学の場合なら,パワースペクトル図や気圧を縦軸にとった片対数グラフなどの作成で使う.例: 気温の鉛直プロファイル を作りたいとき -R-70/20/10/1000 -JX10c/-8cl 横軸の範囲は-70 ℃から 20 ℃で長さ 10 cm,縦軸の範囲は 10 から 1000 hPa で上下反転した対数軸 (10 hPa が上,1000 hPa が図の下にくる),長さは 8 cm. 12 詳しくは man psbasemap の-B オプション部分.“log” で文字検索すればすぐに見つかる 第3章 34 ¶ ³ Daily maximum temperature at Tokyo Tmax = red line Tmax > 30 : red circle Temperature 40 Year: 2008 30 20 10 0 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec hayasaki 2008 Sep 1 11:11:21 /home/viper/office/VL_lecture/script/GMT_basics/xy−plot/psxy_timeseries_maxT.gmt µ ´ 図 3.4: psxy のサンプル (東京の日最高気温) GMT の基本的な使用方法 3.3. 作図練習: 地図・グラフを書く 35 ¶ psxy timeseries maxT.gmt ³ #!/bin/sh my_name=$PWD/$0 yyyy=2008 # Set target year ipath=(データファイルの置き場所) opath=(PS ファイルの出力場所) indata=$ipath/Tokyo1994-2008.txt psfile=$opath/Tokyo_maxT.ps echo " PS file = ${psfile}" sdate="${yyyy}-01-01T00:00:00" edate="${yyyy}-12-31T23:59:59" rr="-R${sdate}/${edate}/-5/45" jj="-JX5.5i/4i" bb="-Ba1Of10dg1o/a10f1g10:Temperature:" gmtset MEASURE_UNIT inch # 1 inch = 2.54 cm gmtset TIME_FORMAT_PRIMARY a # f (full), a (abbreviated), c (character) gmtset PLOT_DATE_FORMAT "o" # abbreviated month (Jan, Feb, ...) cat > text.in << EOF 4.2 10.0 20 0 4 2 Daily maximum temperature at Tokyo 1.5 9.5 15 0 4 1 T@-max@- = red line 2.0 9.2 15 0 4 1 T@-max@- > 30 : red circle 7.7 0.4 10 0 5 3 ${USER} EOF pstext text.in -R0/8.2/0/11.7 -Jx1 -U/0.5/0.2/"${my_name}" -N \ -Y0.0 -X0.0 -P -K > $psfile psbasemap $rr $jj ${bb}WeSn -O -K -X1.5 -Y4.0 >> $psfile cat > max_t.awk << ’EOF’ $6 < 9990 {printf("%4s-%2.2d-%2.2dT00:00:00 %8.1f\n", substr($2,1,4), substr($2,5,2), substr($2,7,2), $6)} $6 > 9990 {print ">"} EOF awk -f max_t.awk $indata > max_t.dat ### Maximum temperature (red line) psxy max_t.dat $rr $jj -M -W2,255/0/0 -O -K >> $psfile ### Plot circles (-Sc) when Tmax >= 30.0 (真夏日) awk ’$2 >= 30.0 {print}’ max_t.dat | \ psxy $rr $jj -M -Sc0.07 -G255/0/0 -L -W1 -O -K >> $psfile psbasemap $rr $jj ${bb}wesn -O -K >> $psfile echo " ${yyyy}-01-15T00:00:00 41 20 0 1 9 pstext $rr $jj -C0.3c -W255/255/255,o0.1c -O Year: ${yyyy}" | >> $psfile \ ### clean-up temporary files and GMT settings files \rm max_t.awk max_t.dat \rm -f text.in .gmtcommands* .gmtdefaults* exit µ ´ 第3章 36 3.4 GMT の基本的な使用方法 GMT をさらに学ぶために GMT が提供するコマンドは,これら以外にも多数存在する.全てを紹介するのは無理なので,未解 説のコマンドや各コマンドの詳細オプションについては,自分でマニュアル (英語) を読みつつ,試して みる事をお薦めします13 man GMT コマンド名 : 御存じオンラインマニュアル.コマンド使用方法やオプションがわからな くなれば,まずはここから探す.もし出てこなかったら,環境変数 MANPATH の設定を確認 GMT 4 Online Services : file://$GMTHOME/www/gmt/gmt_services.html Technical References and Cookbook や Tutorial,マニュアルページなどがローカルにインストー ルされている.Web ブラウザ経由で読むには,ここがポータルサイト的なアドレス.印刷するな ら,$GMTHOME/www/doc/pdf/以下にある PDF ファイルを使うと良い GMT Docs.pdf : GMT の公式マニュアル (英語; 187 ページ).前述のページからもアクセスできる. 当然ながら通読する必要は無いが,コマンドとそのオプションの使用方法について,具体例 (コマ ンド例およびその作図結果) を示してあるため,分からないことがあっても,これを見れば大抵解 決できる また,インターネット上でも幾つか情報源があるので,参考にすると良い. GMT 本家 : http://gmt.soest.hawaii.edu/ GMT の本家,ハワイ大学.見つかり次第バグ報告などが更新されるので,使用中に何か不具合を 感じたら一度は参照すべき.GMT ユーザの ML もある (当然英語). GMT メーリングリスト : http://www.freeml.com/gmt-users-jp 日本人 GMT ユーザによる ML 14 .トラフィックはかなり少ないが,国内のヘビーユーザも参加し ていると思われる.日本語なので,日本人にとっては質問しやすい.上手に質問すれば,問題解 決のための回答が得られる可能性高い. GMT の使い方 : http://www-seis.planet.sci.kobe-u.ac.jp/~kakehi/GMT/ 神戸大学・筧さんの GMT に関するページ.少々古いが,GMT に関する情報を得るためのポータ ルサイトのひとつとして秀逸. このページから取得可能な渡邊さん@清水建設 作成の GMT の簡易日本語マニュアル(PDF ファ イル) は,一部に古い記述があるけれど基本かつ重要事項がほとんど解説してある.初級・中級者 には必携. GMT のメモ&サンプル : http://higu.cr.chiba-u.jp/~hayasaki/meteoro/gmt/ 早崎が個人的に使用していた GMT のサンプルスクリプト&画像集. 「マニュアル」的な使い方は不 向きだが,あるコマンドの簡単な使用方法を知るのには使える (と思う).掲載情報はかなり古い. なお,論文中などで GMT を利用した図を掲載した場合は,謝辞に GMT に関する記述を入れるべき である15 . 13 GMT を使いこなすための一番良い方法は,やはり「習うより慣れろ」です 594 人 (2008 年 8 月 22 日現在) 15 フリーソフトを利用した場合,一般ユーザは「利用した実績」を記録として残し,フリーソフト作成者に対して「お返し」を すべきであろう 14 参加人数は 37 第 4 章 衛星データを扱うための初歩的な知識 ここでは,衛星データを扱うための基礎知識について説明する.リモートセンシングの原理そのもの については殆ど触れない.独学で学びたい諸氏のため例として以下の教科書を挙げておく. • Rees, W.G. 原著,久世宏明・飯倉善和・竹内章司・吉森久共訳 (2005): リモートセンシングの基 礎 (Physical principles of remote sensing). 森北出版, 東京, 320p.(税抜: 5,200 円) • 岡本謙一編著 (1999): 地球環境計測 - ウェーブサミット講座 -. オーム社, 東京, 324p. (税抜: 5,500 円) • 日本リモートセンシング研究会 編 (2001): 改訂版図解リモートセンシング. 日本測量協会, 334p. (税込: 3,600 円) 他の学問体系のいわゆる一般的な教科書に比べ,複合領域である故か値段が高い傾向にあるため,上 記教科書から最初の一冊を推薦しろ!と言われた際には大体「図解リモートセンシング」を薦める.理 由は 2 ページ見開きで簡潔な説明がなされており,リモセン研究はデータを弄らないと始まらないため, データを弄りながら辞書代わりに使える利点があるからである.無論,バッググラウンドを正しく理解 することはデータハンドリングができる以上に重要であるため,データがある程度弄べるようになった ら平行して勉強を始めることが肝要である. 4.1 はじめに 厳密でない表現を使うと,リモートセンシングとは「物体に関する情報を物体に接触することなしに 集めること」である.もう少し限定すると,関心対象を地球表面と地球大気に限定し,これらの対象を 上空の飛翔体から電磁波を観測する手法として再定義することができる.ここではさらに飛翔体を人工 衛星(地球観測衛星)に限定し,話を進める. 地球観測衛星から得られる情報には二つの側面がある.それは「画像」としての情報と「データ(物 理量)」としての情報である.前者は Google Earth を代表として,テレビニュース,web で出てくる ひまわり画像でお馴染みだろう.この講習会では「画像判別」についてのスキルについては時間の関係 上言及しない1 .よってこの章では「データ」として衛星情報を扱う上での実務的な記載に終始する. 4.2 テキストデータとバイナリデータ 計算機で扱うデータにはバイナリ (binary) データとテキスト (text) データの 2 種類(一つのファイ ル中に両方が含まれるものも多い)がある.例として,ページャコマンド less を用いて MS-Word の ファイルの中身を見てみれば良い.示される結果はまったく理解できないであろう.これは doc ファイ ルがバイナリデータ2 であることを示す. テキストデータとバイナリデータの長所・短所を以下に列挙する. 1 さらにこの稿を書いている樋口が画像判別が得意でないことも実はある 2 というよりは某 MS 社が決めたファイルフォーマット ;-) 第4章 38 衛星データを扱うための初歩的な知識 ¶ テキストデータ ³ • 長所: すぐに可視化できる.2 章で示された,UN*X の様々なコマンドを駆使して解析を行 える. • 短所: 数字を扱う際にバイナリに比べファイルサイズが大きくなる.そのため処理により時 間がかかることが多い. µ ¶ バイナリデータ ´ ³ • 長所: テキストデータに比べ,同じ情報量を収める時にファイルサイズが小さくなる.プログ ラミング処理により,処理速度はテキストデータよりも一般的に速い. µ • 短所: データファイルを見てもすぐに値が分からない.事前にファイルフォーマットを把握し ておく必要がある.C や Fortran などのプログラミング言語の習得が必要な場合が多い. 4.2.1 ´ ビット (bit) とバイト (byte) まず最初に計算機(コンピュータ)が数字を認識できるのかを改めて考えてみよう.計算機の CPU は 本質的に 0 か 1 かしか判断できない.これが計算機の中での最小単位でビット (bit) と呼ばれる.0 と 1 は,ない (0) かある (1) かで捉えると解り易い.バイト (byte) はビットの集合体であり,1 バイトは 8 ビットである.表現できる値の範囲は 28 = 256 である3 から 0–255 となる. ここで,テキストデータとバイナリデータの利点・欠点をもう一度見てほしい.テキストデータの欠点 として,バイナリよりファイルサイズが大きくなる,となっているが,実際に見てみよう.テキストデー タの例として,カンマで要素が切れているいわゆる csv (Comma Separated Values) ファイルを示す. ¶ ³ テキストデータの中身を見る pc01{user} 141 % less hogehoge.csv 100,2004,9,121,11,0,19.66,13.82 501,2004,9,121,-6999,-6999,-6999,-6999,-6999,-6999,-6999,-6999,-6999,-6999,-6999 ,-6999,-6999,-6999,-6999,-6999,-6999,-6999,-6999,-6999,-6999,-6999,-6999,-6999,6999,-6999,-6999,-6999,-6999,-6999,-6999,-6999,-6999,-6999,-6999,-6999,-6999,-69 ... 続く µ ´ 最初の一行が何か基礎情報を示すデータで,2 行目からデータが入っている(実際にそういうデータ例 である)ことがわかる.このデータを今度は “バイナリ” データとして見てみよう.UN*X ではバイナ リデータを数値として見るコマンドがあり,od である. ¶ ³ テキストデータをバイナリデータとして見る pc01{user} 142 % od -c hogehoge.csv 0000000 1 0 0 , 2 0 0 0000020 1 , 0 , 1 9 . 0000040 \n 5 0 1 , 2 0 4 6 0 , 6 4 9 , , , 1 9 1 3 , 2 . 1 1 8 2 , 2 1 1 \r , ... 続く µ ´ 一番左の数字は簡便的に od コマンドを使った際に示される行数であるため,気にしなくても良い.コ マンドオプションの -c は 1 バイト整数で読み取りなさい,という意である.less で見た内容と比較して 3 一昔前によくあったコンピュータ関係の入門書に「○○が 256 倍わかる本」の 256 はここから来ている 4.2. テキストデータとバイナリデータ 39 みよう.出だしの値である “100” を表現するために “1” “0” “0” と 3 バイト使われていることがわかる. また要素切り替えのカンマ (,) や,改行を示す \r \n で 2 バイト使われていることが見てわかると思 う.バイナリデータであれば,1 バイトで 0–255 の範囲で表現することが可能であるから,同じ 100 と いう数字を表すにしてもバイナリデータであれば 1 バイトで済むが,テキストデータであれば 3 バイト 必要となることがこの例から容易に理解できるかと思う. 4.2.2 バイナリデータ表記 これまでの説明でバイナリデータの方がファイルサイズが小さくなり,効率よく計算機で扱えること が理解できたと思うが,同時に以下の疑問が生じるはずである4 . 「255 を越える数字はバイナリデータでどう表現するの?小数点データは?正負は?」 無論,計算機は計算機であるから,上記の状況も扱えるように仕様を策定してある.まず,符号は最 初の 1 ビットで表現する.0 なら正,1 なら負となる (signed).絶対値しか数値として出ない場合には符 号なし整数として扱うこと可能である (unsigned).表 4.1 にバイナリデータのデータ型についてまとめ たものを示す. 表 4.1: バイナリデータでのデータ型の種類 種別 符号の有無 ビット長 表現 数値の範囲 あり 8 16 32 (signed) char (signed) short (signed) long -128∼+127 (27 ) -32768∼+32,767 (215 ) -2147483648∼2147483647 (231 ) 整数 なし 8 16 32 unsigned char unsigned short unsigned long 0∼255 (28 ) 0∼65535 (216 ) 0∼4294967295 (232 ) 浮動小数点 あり 〃 〃 32 64 float double (10 進法最大 7 桁精度) (10 進法最大 16 桁精度) 整数 4.2.3 バイトオーダ - ビックエンディアン・リトルエンディアン ここまでバイナリデータに関しての知見を深めれば, (単なるバイナリデータであれば)想定される ファイルサイズの大きさは line(縦)数× pixel (横) 数× 1 ピクセルのバイト数(データ型)=ファイルサイズ となるはずである.衛星データ解析を行う上で最初に必要なことは,こうした情報を集め,手元にある ファイルサイズが合っているか否かをチェックすることであり,電卓は必須 item である.これは自身 でプログラミングを行い,得られた(出力された)データが正しいかどうかをまず確認する上でも役に 立つ. データフォーマット仕様が分かり,プログラム言語に慣れてくれば,読み出すためのプログラム作成 は容易となってくるが,ここで落とし穴がある.それがバイトオーダー (byte order) 問題である.乱暴 に書けば,これは歴史的にパソコンと大型計算機の性能差が著しい時代の名残りである.データ格納の 順序により,バイトオーダは次の 2 種類に分類される. 4 疑問を持たなかった読者はものごとを批判的に見る訓練をした方が良い.非難的ではないところが重要である. 第4章 40 衛星データを扱うための初歩的な知識 ¶ バイトオーダの違い ³ • リトルエンディアン (Little Endian): – 最下位ビット (Least Significant Bit) の属するバイト (Least Significant Byte) を低位の アドレスに格納していく方式.バイナリダンプをすると,順序が逆になって出てくるの が特徴.Intel x86 プロセッサがこの方式a • ビッグエンディアン (Big Endian): – 最上位ビット (Most Significant Bit) の属するバイト (Most Significant Byte) を低位の アドレスに格納していく方式.バイナリダンプするとそのまま読めるのが特徴である. 大型計算機や Sun WS (Sparc 系),Mac (Motorola 製 CPU が積まれているもの; Power PC) 等がこの方式であるb 下の説明図共に http://www.ertl.jp/~takayuki/readings/info/no05.html より引用 a Linux では PC 用で 64bit 対応のもの (x86 64) があるが,データの読み方そのものはプロセッサに依存するため, − 64bit 版を導入してもリトルエンディアンである.x86− 64 にするメリットはより大きな実メモリ空間が使えることで,こ れはこれで大きなアドバンテージとなる b Intel Mac は やっぱり little endian なんでしょうかね….Mac 持っていないから分かりません… µ ´ ¶ ³ µ 図 4.1: バイトオーダの例. ´ これらの確認は実はすぐにわかる.試しに 2byte 整数 (signed short) で書かれたバイナリデータを 前と同じように od で見てみる.このデータは Big Endian の順序で作られており,具体的な中身は NOAA/AVHRR の Channel 1(可視)の反射率データ(%を 10 倍して整数化したもの)である.なの で,データ値が持つ範囲は 0-1000 位であるはずである.読んでいる計算機は普通の PC Linux である ため,この計算機のバイナリデータの読み方はリトルエンディアンである. 4.2. テキストデータとバイナリデータ 41 ¶ ビックエンディアンデータをそのまま見る pc01{user} 143 % od -t d2 hogehoge.dat 0000000 0 -17899 0 256 0 -11215 0 0000020 0 0 0 512 0 512 0 0000040 28009 26465 0 0 0 0 0 0000060 0 0 0 0 0 0 0 * 5776520 0 0 0 0 0 0 -14336 5776540 -16896 0 -16896 0 -16896 0 -15616 5776560 -15616 0 -16128 0 -16128 0 -7936 5776600 -7936 0 -13312 0 -13312 0 -13312 5776620 -5888 0 -5888 0 -20224 0 -20224 ³ 0 20480 0 0 0 0 0 0 0 ... 続く µ ´ 明らかに物理量として変な値として読み取られていることがわかる.2byte データであれば,コマン ド dd のオプションでバイトオーダをひっくり返すことが可能である(プログラミングは必要ない). ¶ ³ ビックエンディアンデータのバイトオーダをひっくり返して見る pc01{user} 144 % dd if=hogehoge.dat of=hogehoge.little.dat conv=swab pc01{user} 145 % od -t d2 hogehoge.little.dat 0000000 0 5562 0 1 0 12756 0 0 0000020 0 0 0 2 0 2 0 80 0000040 26989 24935 0 0 0 0 0 0 0000060 0 0 0 0 0 0 0 0 * 5776520 0 0 0 0 0 0 200 0 5776540 190 0 190 0 190 0 195 0 5776560 195 0 193 0 193 0 225 0 5776600 225 0 204 0 204 0 204 0 5776620 233 0 233 0 177 0 177 0 ... 続く µ ´ これで物理量としても正しい値として読み取れていることがわかる.データ読み取りを行う際には, データドキュメントを精査し,そのデータがリトルエンディアンであるのか,ビックエンディアンであ るのかを確認しておく必要がある.後述する衛星データ処理ソフトウエアではデータをインポート(各 ソフトウエアデフォルトの format に変換する作業)時にこのオプションがある.またプログラミング処 理を行う際には,Intel Fortran ではコンパイル時のオプションでどちらの形式のバイナリを読み出し, どちらの形式のバイナリを吐き出すのか指定可能である.C は他のプログラミング言語と異なり中級言 語である5 ため,コンパイル時のオプション云々は無い6 .なので,サブルーチンを入れるか,include 文 で .h の型を作ってしまう等の処置が必要である. 5 低級言語はアセンブラ(機械語) である ;-) 6 単に私が知らないだけかもしれません 第4章 42 4.3 衛星データを扱うための初歩的な知識 衛星データ処理ソフトウエア 衛星データ処理ソフトウエアは有償(商用)のものと無償(簡易版であったり,オープンソースとなっ ているもの)が存在する.あらかじめ記載しておくが,商用のものは需要と供給の関係でとても個人で買 える金額ではない.個人研究として衛星データを扱うことを想定した場合には,プログラミングとオー プンソースを組み合わせて解析を行う必要がある.無論,商用ソフトと敵対している訳ではない.特に 高空間分解能能衛星データの解析,それらの合成,後述する精密幾何補正等,人間が画像を精査して行 う類の処理では操作性の良い GUI を持つ商用ソフトの独壇場である.研究対象によっては,無理をし てでも購入をした方が目的を達成できる,かもしれない.デモバージョンもあるので,それらを試して から購入を検討するのが良いと思う. この講習会テキストでは,汎用ツールを使って衛星データ解析を行う,というスタンスであるため, これ以上は踏み込まない.参考のため,代表的なソフトウエアを列挙しておく. 表 4.2: 代表的なソフトウエア a). 商用ソフトウエア 世界一のシェアを誇るリモセン,ラスタ GIS ソフトウエア EARDAS IMAGINE Windows のみ.http://www.esrij.com/products/imagine/ ENVI Windows, Mac, Linux, UNIX (SUN) で動作 IDL リモセンに特化したソフトではなく,より汎用性のあるソフトウエア ArcGIS GIS のデファクトスタンダード.いろいろなアプリケーションレベルがある ER-Mapper Windows のみ.圧縮アルゴリズム (ECW) での特許.Web 発信 ほか(全て追えてません, PCI, TNImips 等) b). オープンソースソフトウエア (一例) GRASS GIS 現在はヨーロッパの研究者が中心となって開発.GUI CUI どちらでも稼働 多くの OS で動く.慣れればかなり強力な tool となる.http://grass.itc.it/ MultiSpec HyperCube 4.4 Purdue University で開発.画像分類までできる.Win 版と Mac 版 米国陸軍工兵舞台で開発.Win 版.hyperspectral 解析 衛星データ処理で必要なこと 私見であるが,衛星データ処理到達度の半分は,“対象とする衛星データが読み出せるようになる” こ とだと思う.そのため,バイナリを扱えるプログラミング言語の習得は必須である.C,Fortran, perl, ruby, Java のうち,どれか一つを確実に習得することが肝要である.どの言語を選択するかは,各人の 置かれている環境に依存し,特に初学者にとっては,近くに聞ける人が扱っている言語,研究上今後確 実に使う言語を覚えた方が良い. プログラミング言語習得のコツは,とにかく短期集中で覚えること.プログラミング言語は毎日コツ コツ sample を書けば覚えられるという類ではない.また,困った時にすぐにネットで調べて安易に解 決しないこと.ちゃんと本を買って,最初は紙の上でフローチャートを書き,書いたプログラムを印刷 し,丁寧にデバックすることが習得への近道である. 「急がば回れ」である.個人差もあるが,集中すれ ばひと月で基本的なプログラミングはできるはずである.運転免許と同じ位の期間でできる.できない 場合,集中度が足りないと反省すべし. もう一つ重要なこと.それは “浮気をしないこと”.一つを確実に習得すればプログラミングのセンス を身につけることができる.言い換えれば,確実に習得しないで次々にいろいろな言語に手を出すと, このセンス(言語に依存しない普遍的な部分)を得ることは永遠に無い. 4.4. 衛星データ処理で必要なこと 43 ¶ コラム:商用ソフトウエアの功罪 ³ この稿を書いている樋口も実は大学院∼就職後暫く商用ソフトウエアを使っていた.これは,個人 でどうこうなるというより,研究室の方針が大きく,またその呪縛から逃れるのにもかなり時間が かかった.商用ソフトを敵対視しているわけではない.ただ,それにどっぷり使っていると,以下 の弊害が起きる. • そのソフトの解析 tool を越えた解析がしにくい.特にプログラミング言語を同時に習得して いない場合,絶望的になる. • 仕様しているソフトでのデフォルトフォーマット(通常インポートで変換する)を理解して いないと,違う衛星データを扱うたびに初学者だと 「このフォーマットを○○で読むためにはどうすれば良いのですか?」 という子供電話相談室のような質問をし,相手を閉口させることが増える. • 大量処理を行おうとすると,ソフトで CUI を用意している場合にはよいが,結局プログラミ ングを行わないといけないことに気がつき,気がついた時には time over という最悪の事態 になる可能性が高い • CUI が用意されているソフトウエアでも,そのコマンド体系が独自で汎用性が無いと,その ソフトがなくなると身につけた知識がまったく役に立たない. なので,商用ソフトを使っていても,そのデフォルトフォーマット仕様位は自身で調べ,できるだ け頼らないか,どういうことを内部でしているのかをちゃんと確認しておこう.ここが分かってい ないと,学会発表や卒論・修論発表で「○○の××の機能を用いて解析しました」と発表し,質疑 応答で, 「××はどういうアルゴリズムなのですか?」と質問され,答えられない,という状況に陥 る(最近は減ったが少し前は結構見かけた). µ 4.4.1 生データ (raw data) の読み出し データの読み出しの前に確認しておく事項がある. • readme ドキュメントはあるか: ある場合(無い場合は今一度いろいろな方法を用いて data format に関するドキュメントを探す.それでも無ければ供給元に礼節を持って質問する)以下の確認を する. • readme ドキュメントに従い,ファイルサイズを check する: ファイルが壊れていなければ,あ る規則性を持つはずである.そこを確認する.例えば 1 ライン分で一セットとなっている場合, 1 line 分のファイルサイズ × line 数(+ヘッダ or テイル分) = ファイルサイズ となるはずである. • 生データのビット分解能 これは教科書やネットで調べる.特に 1byte なのか,2byte なのか.2byte の場合,どちらのエンディアンで記載されているのかを確認する必要がある. • マルチチャンネルデータの場合 データはどういう形式なのか? – チャンネル毎に別ファイルなのか? – BIL, BSQ, BIP format なのか? • 汎用性のある format でなければ,校正係数はどこか?: 大概,以下の仕様となっている.それ は readme をよく読む. ´ 第4章 44 衛星データを扱うための初歩的な知識 – 校正係数(ルックアップテーブル)とデータが別ファイル – データのヘッダに含まれている(この場合,変換係数の定数が入れられていることが多い) – データのテイル(フッター)に含まれている. 読み出しプログラム作成が必要であれば,まずはこの段階で生データだけを取り出し,ちゃんと読め ているか確認する必要がある.この段階を飛ばして一気に処理をすると,どこで問題が発生したのか原 因究明がしにくくなる.単純なバイナリであれば,od コマンドで確認できる.ヘッダやテイル分のバ イト数が決まっている場合には,dd コマンドでスキップさせることも可能である.なお,BSQ, BIL, BIP は • BSQ は各チャンネルの塊別に 2 次元の画像データを並べた format ch1(1,1) ... ch1(x,y), ch2(1,1) ... ch2(x,y), ... ... chn(x,y) • BIL はライン別に各画素を各チャンネルの順番で並べた format ch1(1,1) .. ch1(x,1),ch2(1,1) ... ch2(x,1), .. chn(x,1), ch1(1,2).. • BIP は画素毎の各チャンネルの値を集めてライン番号順に並べた format ch1(1,1), ch2(1,1)..chn(1,1), ch1(2,1)..chn(2,1) ... こうしたファイルの違いは,まだ計算機の能力が低かった頃に,バンド間演算をするときには BIL の方 が高速でやりやすい等の名残りであり,一番解り易いのが BSQ である. 個人的な趣味であるが,BIL であろうが BSQ であろうが,解析するときには全て分離 (split) してし まい,バンド間演算が必要な時にはプログラムで複数ファイルを開いた方が,大量計算時には楽だと思 う.ファイル名生成ルールを決めておき,そこを shell で制御でき,かつ処理プログラムをより simple に扱うことができる7 .この方法の欠点は,全てのファイルを自分の計算機に残しておくとファイル数制 限に引っかかってしまう可能性があること,小さいファイルを吐き出すとディスク効率が悪いこと,が ある. 4.4.2 Radiometric 補正(カウント値から物理量へ) 生データを読むことができれば次のステップとして,生データを意味のあるデータに変換する必要が ある.これを Radiometric 補正という.変換係数は光学センサーのほとんどは衛星打ち上げ前に実験室 で絶対校正が行われたランプを用いて感度実験を行い(これを pre-flight calibration と呼ぶ),ここで 得られた変換係数を元に物理量変換を行う8 .Radiometric 補正を行う時にはプログラミングは必須で ある.簡単な衛星データフォーマットを扱う場合,最初のプログラミングはここから始まると言っても 良い. 該当するカウント値に対応する物理量をデータとして吐き出せば良い.変換関数の係数が含まれてい るケースでは,よく readme document を読み,係数を読み取り,生データを変換する. 一般的に生データは整数値が多いので,Radiometric 変換後ファイルサイズは生データが 1 byte の場 合 4 倍,2 byte の場合には 2 倍になる (float 型で出力した場合).プログラムが正しく稼働しているか チェックするには,出力ファイルサイズをまず確認するのが良い.その後,データの中身をチェックする. 4.4.3 Geometric 補正(line, pixel から緯度軽度へ) 既にデータの line pixel が緯度経度直交座標系に変換されたデータセット (grid format) である場合に はこの処理は基本的には必要ない.そうでない場合,可視化したデータは緯度経度座標系とは異なるた 7 あくまでも個人的な趣味の問題である 8 打ち上げ後,大掛かりなフィールドキャンペーンを行い,校正を行うこともある.これらの成果にもアンテナを張っておく と,Radiometric 補正後のデータ解析の意義が違ってくることもある. 4.5. 代表的な衛星データフォーマット 45 め,緯度経度座標系に合わせる(測地系)必要がある.これを 幾何補正 (geometric correction) という. どの程度までの精度を求めるかは,研究の目的に拠る.衛星軌道情報,姿勢情報から,どの範囲を計測し ているのかを計算し,そこから座標変換を行う方法があり,これをバルク補正という.NOAA/AVHRR では PaNDA パッケージを用いて行うことが可能であり9 ,Landsat TM, ETM+ では既にこの処理が 施されている.近年の衛星データはこれらも公開ツールで処理できるようになっており,精度も衛星姿 勢制御精度が上がったために良くなっている. より精度を上げたい場合には,海岸線,湖沼・都市等の地上参照点 (Ground Control Points; GCPs) を手動,あるいは自動で抽出し,さらに幾何補正を行うこともある(精密幾何補正という).自動化が 難しいところでもあるため,幾何精度の良い衛星データを作るためにはかなりの労力を必要とする.ま た,GCPs 同定抽出作業はやはり商用ソフトウエアが使い勝手が良い. 4.5 代表的な衛星データフォーマット 多くの衛星データ format があるが,その多くが解読しやすい構造を持っているか,解析用の tool が 公開されている.また,加工済み(Radiometric 補正,バルク Geometric 補正)のデータを公開してい るところもあるので,最初はそれらのデータを用い,必要に応じてより低次データを扱うようにするの が良いと思う10 .ここでは単純なバイナリデータ以外の代表的な衛星データフォーマットを二つ提示し ておく. 4.5.1 NOAA/AVHRR HRPT (High Resolution Picture Transmission) format 極軌道衛星を代表し,30 年近くオペレーショナルに継続運用されている NOAA/AVHRR (Advanced Very High Resolution Radiometer) の level1b データ format.AVHRR は 10 bit のビット分解能を持 ち,地上受信局で受信出きるように 1 ライン毎にヘッダ,データ部,テール部を持つ.データ部の構成か ら packed format と unpacked format の 2 種類があり,packed format は 4 byte (32 bit) で 10 bit ピク セルデータを 3 つ格納し,2 bit 分空きスペースを持つ.データ構成のマニュアルはいわゆる Kidwell の マニュアルという形で web で公開されている11 .さらに,NOAA-14 までと,NOAA-15∼-17, NOAA-18 (NOAA シリーズ最終号;後継オペレーショナル衛星として NPOESS が計画されている)で format が 異なる12 .多くのケースではこの level1b を扱うことは少ないが,必要であれば,前述した PaNDA (東 大生産研沢田・竹内研で公開,主に竹内氏によってメンテナンスされている13 )で読み出し,バルク幾 何補正が可能である.またプログラミングを行うことが必要であるが,packed format であれば,ビッ ト操作ができないと読み出しが出来ない,というデメリットがある. 4.5.2 HDF (HDF-EOS) format HDF14 (Hierarchical Data Format) はイリノイ大で開発されているが,NASA が EOS での標準 format として HDF を採用し,HDF-EOS 15 として拡張した.HDF は現在 Ver.5 系 (HDF5) と Ver.4 系があり, HDF5 では Ver.4 系での問題点を多く解決している(例:2GB 以上のファイルを生成できない点が克服) が,衛星データに関しては Ver.4 系での記載がメインであるため,未だに問題を抱えている.また,セ 9 ただし,操作方法にやや癖がある 10 我々のところでも日本付近の中分解能衛星,静止気象衛星データを公開しているので積極的に活用してほしい.そのための センター機能である 11 http://www2.ncdc.noaa.gov/docs/podug/index.htm 12 http://www2.ncdc.noaa.gov/docs/intro.htm 13 http://webpanda.iis.u-tokyo.ac.jp/, ftp://webpanda.iis.u-tokyo.ac.jp/PaNDA/ 14 http://www.hdfgroup.org/ 15 http://hdfeos.org/ 第4章 46 衛星データを扱うための初歩的な知識 ンサーによって仕様が異なり,共通フォーマットとはなっているが,一元的にデータをハンドリングで きる状態にはなっておらず,衛星研究初心者の悩みの種?となっている.しかし,多くのセンサーに関 しては,それぞれに特化した toolkit を公開しており,これらを使ってプログラミングをすることによ り,データ読み出し,解析が可能となっている.詳しくはこの後の個別の解析方法を読み進めて欲しい. 無論 HDF tool はオープンソースとなっており,多くの OS で稼働する. 4.6 おわりに 最後に,ある種のコツを列挙しておく.あくまで個人的に気にしていることであり,汎用性は無いが, 参考になれば幸いである. ¶ ³ 衛星データ解析のコツ? • まずはテキストで吐き出せるようにする.最悪の場合,このまま解析を進めることもある.経 度,緯度,必要とするデータ... の形式で吐き出すプログラムをまず書き,これをパイプ,awk を噛ませて GMT へ流し込む(それよりも単純な xgraph の時もある)ことでデータが読み込 めるかどうかの確認が出来る. • 処理の高速化に拘りすぎない.バグ取りに時間をかけすぎて,なかなか本題に入れないのは本 末転倒である.また衛星データの大量処理は劇的な高速化が望みにくい(IO が大きいため). µ • ただし,処理高速化の鍵は如何にして HDD に書き込まないようにするか.である.1.1.1 節 の必要なスペックでは,RAM に関しては 1 GB もあれば充分となっているが,予算にゆと りがあれば,最大容量まで積むことをおすすめする.そうすれば,大きなファイルサイズで あっても 1 回の読み出しですべてのデータをメモリ上に載せることができ,中間生成ファイ ルの書き出しもすべてメモリ上に置くことも可能である(その場合各言語のメモリ管理関数 使用は必須である.C 言語の場合,malloc 関数であり,予約域の開放である free 関数とセッ トでプログラミングする必要がある. ).詳しくは 51 ページ参照 ´ 47 第 5 章 衛星データ解析 (初級編) 5.1 5.1.1 MTSAT データの解析 MTSAT-1R について MTSAT-1R(Multi-functional Transport Satellite - 1 (Replacement):運輸多目的衛星ひまわり 6 号) は 2005 年(平成 17 年)2 月 26 日に打ち上げられ,東経 140◦ の赤道上に位置する対地静止軌道の衛星 である.運用は同年 6 月 28 日に開始された.従来の衛星に対して赤外 4 チャンネルを新たに加え,夜 間の霧や下層雲の判別機能を強化しているほか,北半球の観測間隔が 30 分であることが特徴である. MTSAT-1R の観測チャンネルと観測波長は表の通りである.水平分解能は衛星直下点で可視 1 km,赤 外 4 km,画像の諧調は可視・赤外ともに 10 bit(1024 諧調)である. 観測チャンネル 波長 [µm] 可視 0.55–0.90 赤外 1 赤外 3 10.3–11.3 11.5–12.5 6.5–7.0 赤外 4 3.5–4.0 赤外 2 5.1.2 MTSAT-1R グリッドデータの読み出し 本項では,CEReS が公開している MTSAT-1R グリッドデータの読み出し方法について解説する.デー タは各チャンネルごとに 1 つのデータファイルと 10 のヘッダファイルから構成され,IR と VIS でそれ ぞれ bz2 形式で圧縮されている. まず,MTSAT-1R のデータサーバ (ftp://mtsat-1r.cr.chiba-u.ac.jp/) からファイルをダウン ロードし,展開して中身を確認する. [hoge@hoge MTSAT]$ wget ftp://mtsat-1r.cr.chiba-u.ac.jp/grid-MTSAT-1.01/200 805/200805020530.ir.tar.bz2 [hoge@hoge MTSAT]$ tar xvfj 200805020530.ir.tar.bz2 IMG_DK01IR1_200805020530.geoss IMG_DK01IR2_200805020530.geoss ・ ・ ・ hdr_ir4_200805020530_009.txt hdr_ir4_200805020530_010.txt データファイル(.geoss)は 2 バイト符号無し整数,ビッグエンディアンのバイナリ形式で収録され ている.本講習会で使用する PC はリトルエンディアンなので,dd コマンドを用いてエンディアンの変 換を行う. [hoge@hoge MTSAT]$ cp IMG_DK01IR1_200805020530.geoss big_endian.geoss [hoge@hoge MTSAT]$ dd if=big_endian.geoss of=little_endian.geoss conv=swab 中身を確認すると,リトルエンディアンは 10-bit (0–1024) のカウント値で読めていることがわかる. 第5章 48 [hoge@hoge MTSAT]$ od -t u2 big_endian.geoss 0000000 44802 47618 47618 47618 47618 46082 46082 0000020 46082 46082 54274 51714 51714 51714 55810 ・ ・ ・ [hoge@hoge MTSAT]$ od -t u2 little_endian.geoss 0000000 687 698 698 698 698 698 692 0000020 692 692 724 714 714 714 714 ・ ・ ・ 衛星データ解析 (初級編) 692 730 データファイルは緯度 60◦ N–60◦ S,経度 80◦ E–160◦ W の範囲で,解像度は赤外チャンネルが 0.04◦ (3000 ピクセル × 3000 ライン),可視チャンネルが 0.01◦(12000 ピクセル × 12000 ライン)で,北西 から北東,南西から南東の順に配列されている. この情報をもとに,カウント値を直接 GMT で読み込み,画像化するには以下のようにする. [hoge@hoge MTSAT]$ makecpt -Cgray -T0/1024/64 -Z > count.cpt [hoge@hoge MTSAT]$ xyz2grd little_endian.geoss -Glittle_endian.gmt -I0.04/0. 04 -R80/200/-60/60 -F -N1024 -ZTLH [hoge@hoge MTSAT]$ grdimage little_endian.gmt -JQ140/15 -Ccount.cpt -K -P R80/200/-60/60 > ir1-count.eps [hoge@hoge MTSAT]$ pscoast -Ba20g20/a15g15eWSn -J -R -Dl -K -N1/2t7.5_7.5:0 /0/255/0 -W2/0/255/0 -O >> ir1-count.eps [hoge@hoge MTSAT]$ echo "140 62 18 0 0 CB MTSAT-1R IR1 20080502 0530UTC" | pstext -R -J -G0/0/0 -O -K -N >> ir1-count.eps [hoge@hoge MTSAT]$ psscale -D7.5/-1/12/0.5h -Ccount.cpt -B128/:"[count]": O >> ir1-count.eps [hoge@hoge MTSAT]$ ggv ir1-count.eps 図 5.1: ir1-count.eps ヘッダファイル(.txt)はアスキー形式で収録している.カウント値から輝度温度への変換テーブル は,ヘッダファイルの中に記述されている. [hoge@hoge MTSAT]$ cat hdr_ir1_200805020530_001.txt Header Type #0 - Primary Header Header_Record_Length : 16 ・ ・ ・ 5.1. MTSAT データの解析 49 _UNIT:=KELVIN 0:=330.06 30:=327.69 60:=325.29 ・ ・ ・ 65535:=129.99 ・ ・ ・ 0 bytes left in header awk コマンドを用いてカウント値-輝度温度変換テーブルを作成する. [hoge@hoge MTSAT]$ awk ’/[0-9]:=/ {print}’ hdr_ir1_200805020530_001.txt | c ut -d: -f1 > tmpa.txt [hoge@hoge MTSAT]$ awk ’/[0-9]:=/ {print}’ hdr_ir1_200805020530_001.txt | c ut -d= -f2 > tmpb.txt [hoge@hoge MTSAT]$ paste tmpa.txt tmpb.txt > tbbtable.txt [hoge@hoge MTSAT]$ cat tbbtable.txt 0 330.06 30 327.69 60 325.29 ・ ・ ・ 65535 129.99 サンプルプログラムを用いて,バイナリデータのカウント値を輝度温度に変換する.まず,サンプル プログラムをダウンロードし,展開してコンパイルする. [hoge@hoge programs]$ wget ftp://mtsat-1r.cr.chiba-u.ac.jp/support/c/readMT SAT-1.01.tar.gz [hoge@hoge programs]$ tar xvfz readMTSAT-1.01.tar.gz readMTSAT-1.01/ readMTSAT-1.01/MTSAT-tbb.ctl readMTSAT-1.01/count2tbb.c readMTSAT-1.01/count2tbb.sh [hoge@hoge programs]$ cd readMTSAT-1.01 [hoge@hoge readMTSAT-1.01]$ gcc count2tbb.c -o count2tbb データのあるディレクトリに移動し,プログラムを実行する. [hoge@hoge MTSAT]$ /home/hoge/programs/readMTSAT-1.01/count2tbb little_endi an.geoss 輝度温度に変換されたグリッドファイル tbb little endian.geoss を次のコマンドで画像化する. [hoge@hoge MTSAT]$ makecpt -Cgray -T200/300/10 -I -Z > tbb.cpt [hoge@hoge MTSAT]$ xyz2grd tbb_little_endian.geoss -Gtbb_little_endian.gmt -I0.04/0.04 -R80/200/-60/60 -F -N-999.0 -ZTLf [hoge@hoge MTSAT]$ grdimage tbb_little_endian.gmt -JQ140/15 -Ctbb.cpt -K -P -R80/200/-60/60 > ir1-tbb.eps [hoge@hoge MTSAT]$ pscoast -Ba20g20/a15g15eWSn -J -R -Dl -K -N1/2t7.5_7.5:0 /0/255/0 -W2/0/255/0 -O >> ir1-tbb.eps [hoge@hoge MTSAT]$ echo "140 62 18 0 0 CB MTSAT-1R IR1 20080502 0530UTC" | 第5章 50 衛星データ解析 (初級編) pstext -R -J -G0/0/0 -O -K -N >> ir1-count.eps [hoge@hoge MTSAT]$ psscale -D7.5/-1/12/0.5h -Ctbb.cpt -E -B20:"[K]": -O >> ir1-tbb.eps [hoge@hoge MTSAT]$ ggv ir1-tbb.eps 図 5.2: ir1-tbb.eps CEReS では,本項で取り扱った MTSAT の他に,FY2, GOES のグリッド化データの公開も行ってい る(METEOSAT は著作権の都合上,4 大学連携プロジェクト関係者のみに公開).衛星によってヘッダ ファイルと輝度温度への変換方法が異なるが,基本的な方法は本項の手順と変わらない. CEReS 4VL Wiki (http://www.cr.chiba-u.jp/~4vl/) およびそれぞれの README を参照して頂きたい. 【課題】2008 年 5 月の緯度 0◦ ,経度 90◦ –180◦ における IR1 輝度温度の経度-時間断面図を作成せよ. ¶ 作業手順 ³ 1. 2008 年 5 月の MTSAT-1R グリッド化データをダウンロード 2. 上記コマンドをシェル化し,1ヶ月分のカウント値を輝度温度に変換 3. 指定緯度・経度を切出し,時間の順に結合 µ 4. GMT で描画 ´ 5.1. MTSAT データの解析 51 図 5.3: crosssection.eps ¶ C 言語による高速化のコツ ³ 近年は,計算機の処理能力が向上(CPU の高速化・RAM 容量の増大)し,小規模・単純な計算で あれば処理速度を気にする必要はあまりなくなった.ただし,陸域衛星のような解像度の高いデー タを取り扱う場合や,長期の観測データから気候値を算出する場合には,コーディングを工夫する ことによって,計算の効率を向上させることが可能である.以下に,プログラムを高速化するため のコーディングテクニックを列挙する. ●メモリアクセスに関して • malloc 関数を用いてデータの読み出し,書き出しを一度に行う.大容量データの処理にかか る時間の多くはデータの読み出し,書き出しである.RAM に余裕があるのであれば,これら の作業をできるだけ少なくするほうがよい.また,メモリアクセスの局所性が高まり,キャッ シュの使用効率も向上する.ただし,RAM 容量が不足すると HDD のスワップ領域に書き込 まれる(ページング)ため,著しく速度が低下するので,ページングが起こるような容量の 場合は複数回に分けるほうが高速な場合がある. • 不要なメモリは free 関数で開放する.確保したメモリが不要になったときに,適宜開放する か再利用しなければ,メモリ資源が減少し,ページングを行う可能性が高くなる.メモリ開 放のし忘れがないか必ずチェックする.free 関数を忘れると,最悪の場合 OS が落ちることが ある. • 不要な変数の使用や不必要な精度の定義がないかチェックする.メモリの使用量が少ないほ ど,キャッシュメモリ上にデータがある確率が高いので,プログラムの高速化につながる. ●処理ステップに関して • 整数の変数型は,できる限り unsigned int 型または int 型にする.例えば,i++; の処理を short 型で行った場合は 3 ステップであるが,int 型であれば 1 ステップで済む. • 定数となるものは計算結果を用いる.関数の出力結果が同じになる場合も,出力結果を書く ことでステップ数が減る. µ • ループの終了条件を複雑にしない.例えば,ループの終了条件に関数を用いると,ループ内 部処理回数分だけ関数の呼び出しが行われるため,ステップ数が増加する. ´ 第5章 52 衛星データ解析 (初級編) NOAA AVHRR データの解析 5.2 5.2.1 TIROS-N/NOAA について TIROS-N/NOAA(Television InfraRed Operational Satellite - Next-generation)はアメリカ海洋大 気庁(National Oceanic and Atmospheric Administration)により運用されている太陽同期の極軌道衛 星である.常時複数の衛星が運用されており(現在は 17 号と 18 号),1 衛星あたり少なくとも 1 日 2 回の観測が可能である.軌道高度は 830 km および 870 km で,約 100 分の周期で地球を周回している. NOAA には,今回の講習会で使用する AVHRR(Advanced Very High Resolution Radiometer)は雲の 分布や陸域の観測を主要な目的としている.AVHRR の他には,TOVS(TIROS Operational Vertical Sounder),AMSU(Advanced Microwave Sounding Unit),SBUV(Solar Backscatter Ultra-Violet Experiment)が搭載されている.NOAA/AVHRR の観測幅は 2700 km,空間分解能は 1 km である. 観測チャンネル 波長 [µm] 赤バンド 熱赤外 2 0.58–0.68 0.725–1.1 3.55–3.93 10.30–11.30 熱赤外 3 11.50–12.50 近赤外バンド 熱赤外 1 5.2.2 NOAA AVHRR グリッドデータの読み出し 本項では,CEReS が公開している NOAA AVHRR product データの読み出し方法について解説する. データは各撮影時ごとにそれぞれ bz2 形式で圧縮されている. まず,NOAA AVHRR のデータサーバ (ftp://avhrr.cr.chiba-u.ac.jp/) からファイルをダウン ロードし,展開して中身を確認する. [hoge@hoge AVHRR]$ wget ftp://avhrr.cr.chiba-u.ac.jp/disk2/products/200710/ n1807100204.tar.bz2 [hoge@hoge AVHRR]$ tar xvfj n1807100204.tar.bz2 n1807100204.mb1.gi : 赤バンド n1807100204.mb2.gi : 近赤外バンド n1807100204.mb3.gi : 熱赤外 1 n1807100204.mb4.gi : 熱赤外 2 n1807100204.mb5.gi : 熱赤外 3 n1807100204.sza.gi : Solar zenith angle n1807100204.saa.gi : Solar azimuth angle n1807100204.sca.gi : Scan angle n1807100204.nvi.gi : 植生指標(NDVI) n1807100204.sst.gi : 海表面温度(SST) データファイル(.gi)は 80 バイトのヘッダ部分,70,948,872 バイト(6378 pixels × 5562 lines × 2 byte)のデータ部分,それ以降のフッタ部分から成り立っている.実際のデータ利用には,80 バイトの ヘッダをスキップし,データ部分のみを読み出す操作を行えばよい.データ部分は 2 バイト整数,ビッ グエンディアンのバイナリ形式で収録されている.各ファイルの格納値から物理量への変換は次の通り である. • 赤バンド・近赤外バンド: Albedo (0.0, 100.0%) == (0, 1000) • 熱赤外 1–3: Brightness Temperature (0.0, 320.0 K) == (0,3200) 5.2. NOAA AVHRR データの解析 53 • Solar zenith angle: (−360◦ , +360◦ ) == (−3600, +3600) • Solar azimuth angle: (−360◦ , +360◦ ) == (−3600, +3600) • Scan angle・SST: (0.0, 320.0 K) == (0, 3200) • NDVI: (−1.0, +1.0) == (−100, +100) ヘッダ情報を確認する. [hoge@hoge AVHRR]$ /home/hoge/programs/AVHRR/readheader n1807100204.mb4.gi File name n1807100204.mb4.gi (1) Number of lines per band : 5562 (2) Number of bands in the image : 1 (3) Number of bytes per line : 12756 (4) Number of label records : 0 (5) Number of bytes in one label record : 0 (6) Data_organization : 2 (7) Data type : 2 (8) Starting_byte_number : 80 (9) p file identifier : imag Note: Data type 1:byte,2:integer*2,3:integer*4,4:real*4,5:real*8,6:complex* 8,7:complex*16 データファイルは緯度 60◦ N–9.97971◦ N,経度 100◦ –170.022095◦ の範囲で,解像度は 1 km(0.01097869◦ EW × 0.00899322◦ NS)(6378 ピクセル × 5562 ライン)で,北西から北東,南西から南東の順で配列され ている. データを読み出し,GMT で画像化する. [hoge@hoge AVHRR]$ dd if=n1807100204.mb4.gi of=little_endian.gi conv=swab [hoge@hoge AVHRR]$ /home/hoge/programs/AVHRR/sample-avhrr-c little_endian.g i count.gi [hoge@hoge AVHRR]$ od -t d2 -v -w2 -A n count.gi | awk ’{tbb=$1/10.0} {prin tf("%f\n",tbb)}’ | xyz2grd -Gtbb.gmt -I0.01097869/0.00899322 -R100/170.0220 95/9.97971/60 -ZTLa -N0.0 -F [hoge@hoge AVHRR]$ makecpt -Cgray -T200/300/10 -I -Z > tbb.cpt [hoge@hoge AVHRR]$ grdimage tbb.gmt -JA140/35/15 -Ctbb.cpt -K -P -R115/12.5 /160/50r > mb4-tbb.eps [hoge@hoge AVHRR]$ pscoast -Ba10g10/a10g10eWsN -J -R -Dl -K -N1/2t7.5_7.5:0 /0/255/0 -W2/0/255/0 -O >> mb4-tbb.eps [hoge@hoge AVHRR]$ psscale -D7.5/-1/10/0.4h -Ctbb.cpt -E -B20/:"[K]": -O >> mb4-tbb.eps [hoge@hoge AVHRR]$ ggv mb4-tbb.eps 次に,バンド 1,2 のカウント値を 0–255 に変換し,フォールスカラー合成を行う.AVHRR の場合, R, G, B に対してそれぞれバンド 1, バンド 2, バンド 1 を割り当てて描画する. [hoge@hoge AVHRR]$ for BAND in 1 2 ; do > dd if=n1807100204.mb${BAND}.gi of=mb${BAND}.gi conv=swab 第5章 54 衛星データ解析 (初級編) > /home/hoge/programs/AVHRR/sample-avhrr-c mb${BAND}.gi count_mb${BAND}.gi > /home/hoge/programs/AVHRR/avhrr-rgb-c count_mb${BAND}.gi 1bit_mb${BAND}.gi > xyz2grd 1bit_mb${BAND}.gi -G1bit_mb${BAND}.gmt -I0.01097869/0.00899322 -R1 00/170.022095/9.97971/60 -ZTLc -N0 -F > done [hoge@hoge AVHRR]$ grdimage 1bit_mb1.gi 1bit_mb2.gi 1bit_mb1.gi -JA140/35/1 5 -K -P -R115/12.5/160/50r > false.eps [hoge@hoge AVHRR]$ pscoast -Ba10g10/a10g10eWsN -J -R -Dl -N1/2t7.5_7.5:0/0/ 255/0 -W2/0/255/0 -O >> false.eps [hoge@hoge AVHRR]$ ggv false.eps 図 5.4: (左)mb4-tbb.eps, (右)false.eps このデータには,大気補正がかけられていない(Global Imaging 社のプロダクト生成ルーチン中に大 気補正が組み込まれていないため),経年劣化補正(Sensor degradiation correlation)が施されていな い,など取り扱い上注意が必要である.詳しくは, http://higu.cr.chiba-u.ac.jp/~higu/databases/ceres-avhrr-product-jpn.html を参照のこと. 【課題 1】 他のバンド,プロダクトについて同様に描画せよ. 【課題 2】 任意の一日分のデータをダウンロードし,合成画像を作成せよ.その際,solar zenith angle が小さいものを優先して描画すること. 55 第 6 章 衛星データ解析 (個別データ編) 衛星データを利用した具体的な解析として,本講習では以下の 3 つのテーマを設定する: 1. MODIS (担当: 樋口) 2. TRMM (担当: 山本) 3. MTSAT + 客観解析気象データ (担当: 早崎) 実習を開始するにあたり,配布した USB メモリの対応ディレクトリから使用するデータ・プログラ ム類を作業ディレクトリにコピーする. 第6章 56 衛星データ解析 (個別データ編) 応用解析 1: MODIS 6.1 本節では,EOS(Earth Observation System) 計画で打ち上げられた Terra / Aqua に搭載された光学 センサー MODIS (Moderate Resolution Imaging Spetroradiometer; 中分解能撮像分光放射計) の読み 取りを主に取り扱う.ここでは,MODIS level1B データセットの読み出しについて記載する.講習では 時間の関係上,後半のみを取り扱う.MODIS の主要諸元(チャンネル波長域)を表 6.1 に示す. 表 6.1: MODIS の観測波長 目的 Ch. 波長 [µm] 分解能 Ch. 波長 [µm] 分解能 陸域 1 0.62-0.67 250m 2 0.841-0.876 250m 陸雲エアロゾル 3 5 7 0.459-0.479 1.23-1.25 2.105-2.155 500m 500m 500m 4 6 0.545-0.565 1.628-1.652 500m 500m 8 10 0.405-0.420 0.483-0.493 1km 1km 9 11 0.438-0.448 0.526-0.536 1km 1km 12 14 16 0.546-0.556 0.673-0.683 0.862-0.877 1km 1km 1km 13 15 0.662-0.672 0.743-0.753 1km 1km 3.660-3.840 4.020-4.080 1km 1km 21 3.929-3.989 1km 〃 20 22 大気温度 24 4.433-4.498 1km 25 4.482-4.549 1km 巻雲,水蒸気 26 28 1.360-1.390 7.175-7.475 1km 1km 27 6.535-6.895 1km 〃 雲, オゾン 29 8.400-8.700 1km 30 9.580-9.880 1km 表面, 雲温度 31 10.780-11.280 1km 32 11.770-12.270 1km 雲頂高度 33 35 13.185-13.485 13.785-14.085 1km 1km 34 36 13.485-13.785 14.085-14.385 1km 1km 〃 〃 海洋 〃 〃 〃 〃 表面,雲温度 〃 6.1.1 必要とする tool • Sun Java: ( http://www.java.com/ja/ ) 後述する ModisSwwathTool の GUI インターフェイ スが Java で記載されている.対応パッケージをダウンロードし,インストールする.Linux の場 合,rpm を入れることになるので,distribution に寄るが, /etc/bashrc に path を通す.例) # for JRE (Sun Java) export JRE_HOME=/usr/java/default export PATH=/usr/java/default/bin:$PATH export LD_LIBRARY_PATH=/usr/java/default/lib:$LD_LIBRARY_PATH • ModisSwathTool: ( http://lpdaac.usgs.gov/datatools.asp ) ユーザ登録が必要だが,無 償入手可能な MODIS level1B データ処理用の tool. (註:最新版を今回収録していない.理由は 一時 Java GUI が稼働しなかったため,旧版でも本質的には変わらないと判断).インストール は対話式に行う.MRTSwathLinux.zip と install をダウンロードした後,以下の用に行う. 6.1. 応用解析 1: MODIS 57 # chmod+x install # ./install ここでインストール先を ( /usr/local/MRTSwath ) に設定し,同じく ( /etc/bashrc ) に root 権限で path を通す. # for MODIS repjection tool (for level 1 datasets) export PATH=/usr/local/MRTSwath/bin:$PATH export MRTDATADIR=/usr/local/MRTSwath/data:$MRTDATADIR • HDF: ( http://www.hdfgroup.org/ ) hdf のヘッダ情報が Radiometric 補正で必要となる.今 回使う Vine では # apt-get install hdf hdf-devel とコマンド一発で入るようになったが, ソースから入れる方法も記載する. Vine でソースから入れる際には以下のパッケージを追加しておく必要がある ( # apt-get install libjpeg libjpeg-devel zlib flex bison ) 1 上記 URL から hdf4 系 の最新版を download,ソースから入れる. pc01{usr} 106 %./configure --prefix=/usr/local/hdf4.2r3 <- 4.2r3 の例 $ make # mkdir /usr/local/hdf4.2r3 # make install その後同じく /etc/bashrc に path を通す. #for HDF export PATH=/usr/local/hdf4.2r3/bin:$PATH export LD_LIBRARY_PATH=/usr/local/hdf4.2r3/lib:$LD_LIBRARY_PATH export HDFINC=/usr/local/hdf4.2r3/include • HDFLook: ( http://www-loa.univ-lille1.fr/Hdflook/ ) データのビューワーとして使用 可能.download した後,展開をした後,適当なところに directory 毎コピーし, path を通せば ok. 6.1.2 MODIS level1 の主な取得先 以下のサイトでデータ取得が可能である. 1 これで多分大丈夫だと思うが,こけたら./configure の最後のリストで何が抜けているか確認するのが良い 第6章 58 衛星データ解析 (個別データ編) ¶ MODIS level1 データ取得サイト ³ • WIST: Warehouse Inventory Search Tool. https://wist.echo.nasa.gov/~wist/api/imswelcome/ ユーザ登録が必要.MODIS product もここで検索可能.手順は,検索,必要なデータをカートに入れ,データ準備が 出来るのを待つ.e-mail で通知されるので,e-mail 中の ftp サイトより download する. • LAADS: Level 1 and Atmosphere Archive and Distribution System. http://ladsweb.nascom.nasa.gov/ 検索も可能だが,直接 anonnymous ftp で取得でき るのが魅力. ftp://ladsweb.nascom.nasa.gov/ • JAXA-MODIS: 研究室 or グループで日本の研究に特化している場合,JAXA で受信した MODIS を有償で ftp 取得することができる. • 東京情報大: 切り出したバイナリ作成サービスをする. http://www.frontier.tuis.ac.jp/modis/php/index.php • 東大生産研沢田・竹内研: 生産研およびタイの AIT で受信したデータの切り出しを web 上で 行うことができる. http://webmodis.iis.u-tokyo.ac.jp/ • 千葉大 CEReS JAXA-MODIS: 上記 JAXA 受信 MODIS のアーカイブを 2004 年 8 月か ら継続している.学内では anonymous ftp で取得可能.学外は共同利用申請で提供可能. ftp://modis.cr.chiba-u.jp/ (学内のみa ) a 共同利用申請で取得可能とできるため,気楽に CEReS データベース委員会に問い合せて欲しい.ftp アクセス制限を 変えることで対応する µ 6.1.3 ´ MODIS level1 ファイル名ルール ファイル名ルールが,上記 LAADS と JAXA 受信データで微妙に違うが,本質的には大きな違いで はない.参考のため両方記載しておく. 共通ファイル名ルール: 例:MOD021KM.A2008245.2340.005.2008246074034.hdf (LAADS ftp 公開 hdf) MOD021KM.J200809022340.2008246074034.hdf (JAXA 受信 hdf) • 最初の 3 文字: 衛星判別.MOD ... Terra 衛星,MYD ... Aqua 衛星 • 次の 2 文字: 02 or 03.02 画像データ,03: 軌道関連情報データ • 次の 3 文字: 1KM ... 36 ch. 全てのデータが入ったデータセット.より解像度の細かいデータは 1km にリサンプリングされている.HKM ... 500m (Ch. 3-7) 及び 250m (Ch.1-2) が含まれる 500m データ.250m は 500m にリサンプリング.QKM ... 250m データセット (Ch.1-2 のみ). • .A2008245.: All?の意と撮影時.YYYYDOY.YYYY は西暦,DOY は通年日数で表記される (LAADS).JAXA 受信データ(今回使用するもの)は J2008080902 となり,YYYYMMDD とな る MM は月,DD は日である. • .005. (LAADS only): MODIS 処理 Version.つまり Version 5.ただし,hdf5 でデータが記載さ れているという意味ではない. • その後: データ処理が完了した時刻を記載.本質的ではない. ファイル名からメタ情報がある程度入手可能である. 6.1. 応用解析 1: MODIS 6.1.4 59 サンプルデータの確認(図化) [HDFLook] まずはサンプルデータを HDFLook で見てみよう.path が通っていれば, pc01{usr}107 % HDFLook で GUI が立ち上がる.サンプルデータを適当な directory にコピーし(衛星データと軌道関連データ両方 コピーすること),画像として RGB 合成されたナチュラルカラー画像を見ることができるだろう. 演習課題 1 HDFLook を用いてサンプルデータを図化してみよう. 6.1.5 サンプルデータの読み出し [ModisSwathTool] 画像としての確認は HDFLook で既に行ったので,今度は GMT でも読み出せるように汎用性のある バイナリデータデータへの書き出しをしてみよう.MODISSwathTool を用いてファイル情報を見てみ る.起動は path が通っていれば, pc01{usr}108 % ModisSwathTool で立ち上がる.Java が正しく 設定されていれば,以下の画面が出てくるはずだ. ¶ µ ³ 図 6.1: ModisSwathTool の画面 ´ 英語の画面だが,HDFLook と同様,分かり易い GUI なので直感的に分かると思う.それぞれの項目 の説明は以下のとおり 第6章 60 衛星データ解析 (個別データ編) ¶ ModisSwathTool の GUI の画面項目 ³ • Input File: 対象となる画像データを開く. • Input File Info: Input File を選択すれば,ファイルの内部情報が出てくる. • Available Bands, Selected Bands: 前者は hdf file 内に含まれる channel 情報,後者は変 換をかける target の channel を示す. >> or << ボタンで,どのチャンネルを変換するかを 選択・削除が可能. • UL Corner, LR Corner: 緯度経度直交座標系に変換する際に左上の緯度・経度,右下の 緯度・経度を入力する.表示されるのは画像そのもののの情報.出力ファイルの緯度経度を 変える際には再入力する.分,秒表記ではないので注意. • Spatial Subset: 緯度経度直交座標 (LAT-LONG), 選択図法の形式(PROJ-COORDS), 単純なラインーピクセル(LINE-SAMPLE) の3種のどれかを選択.ここでは他のデータと の整合性を取るために緯度経度直交座標系を選ぶ. • Geolocation File: 同軌道関連 hdf ファイルを選択.これがないと変換できない. • Output File: 出力先.適当に temp.hdr とかしておく. • Output File Type: hdf 形式,geotiff 形式,raw bainary 形式の3つのうちどれかを選択. • Resampling Type: 元データをどの方法でリサンプリングし直すかの設定.NN (Nearest Neighbor) と BL(Bi-Linear) と CC(Cubic Convolution) の3種類.基データと同程度の空間 分解能を出す場合は NN(元データは消えない),より荒いデータに変換する場合には BL か CC という選択が良い.NN, BL, CC の違いはリモセンの教科書に出ているが,簡単に書く と;BB:一番近い場所の pixel を選ぶ,BL:周囲 4 点の pixels を線形内挿.CC:周囲 16 点の pixels を距離の重み付けをして内挿.BB 以外は元データが消えるので要注意. • Output Projection Type: いっぱい選択肢がありますが,上の Spatial Subset で”PROJCOORDS”を選んでいない場合は,GEO が無難. • Output Data Type: raw binary と hdf だけ必要な option.出力 data 関数系を選ぶ. 1byte 整数(符号付き [CHAR8 or INT8], 符号無し [UINT8]),2byte 整数(同じく [INT16, UINT16]) が選べる.選ばなかった場合,元データと同じ(INT16) になる. • Output Pixel Size: 緯度経度直交系を選ぶと degree ( °)になる. 非常に大雑把だが,0.01 ...1km, 0.005 ... 500m, 0.0025 ... 250m と考えると楽. • Load Parameter: 以前設定したパラメータファイルを呼び出す. • Save Parameter: ここで設定した上記パラメータを保存.後述するコマンド,一括処理時 に重要となるので,save した方が無難. µ ´ 早速サンプルデータで変換をしてみよう.サンプルデータの緯度経度範囲は,北緯 14.317883 - 51.43511, 東経 132.059942 - 167.805039 であるが,GMT での描画が楽になるように北緯 20-50,東経 130-160 と 設定する.サンプルデータは 500m データなので,Output Pixel Size は 0.005 °,出力するバンド (チャンネル) は,250m の 1 と 2 (Ch.1, 2; EV250_Agr500_RefSB_b0 と b1) および 500m のバンドす べて (Ch.3-7; RefSB_b0-4 ) 2 を選択.Run で実行.画面に現れないかも知れないが,指定した出力先 2 チャンネルの数えかたがゼロからとなり,また解像度が変わるとまたゼロからカウントするため要注意 6.1. 応用解析 1: MODIS 61 にファイルが出力されていること,別にターミナルを立ち上げ,top コマンドで進捗状況をチェックして おけば終了が分かるはずだ. 処理が終わると以下のファイル群ができているはずである. pc01{usr}109 % ls temp_EV_250_Aggr500_RefSB_b0.dat temp_EV_250_Aggr500_RefSB_b0.hdr temp_EV_250_Aggr500_RefSB_b1.dat temp_EV_250_Aggr500_RefSB_b1.hdr temp_EV_500_RefSB_b0.dat temp_EV_500_RefSB_b0.hdr temp_EV_500_RefSB_b1.dat temp_EV_500_RefSB_b1.hdr temp_EV_500_RefSB_b2.dat temp_EV_500_RefSB_b2.hdr temp_EV_500_RefSB_b3.dat temp_EV_500_RefSB_b3.hdr temp_EV_500_RefSB_b4.dat temp_EV_500_RefSB_b4.hdr ここで*.dat がバイナリファイルそのもの,*.hdr がヘッダファイルである.ファイル名からどのチャン ネルが出力されたか分かるようになっている. このうち,近赤外データ (250m b1) を GMT に読み込ませてみよう.その前に,得られたバイナリの データ範囲を od コマンドで確認し,カラーパレットを作成する.1 万程度を上限にする. pc01{usr} % 110 makecpt -Cgray -T0/15000/5000 -Z > temp.cpt pc01{usr} % 111 xyz2grd temp_EV_250_Aggr500_RefSB_b1.dat -Gtemp.grd \ -R130/160/20/50 -I0.005 -F -Zh (実際には 1 行) pc01{usr} % 112 grdimage -JM15 -R130/160/20/50 -Ba5f2.5 temp.grd \ -Ctemp.cpt -K -P > temp.ps (実際には 1 行) pc01{usr} % 113 pscoast -JM -R -B -W1/0/255/0 -Dh -O -P >> temp.ps pc01{usr} % 114 ggv temp.ps すると,以下の絵が見えるはずである. 演習課題 2 ModisSwathTool を用いてデータを読み出し,単純なバイナリファイルとした後, GMT で描画させてみよう. 6.1.6 物理量への変換 演習課題2で図化したデータは生データ3 であり,物理量換算する必要がある.この値を物理量(反射 率 [無次元],分光放射 [W m−2 µm−1 sr−1 ]) に変換するには hdf ファイルのヘッダに含まれる校正係数 を取り出す必要がある.hdf ファイルのヘッダ情報を取り出すために,hdf ライブラリの ncdump 4 を 使う. 3 正確な表現を使うと,センサーで A/D 変換した後のデジタル値 (CCT 値)を 16bit スケールに変更した(Scaled Integer:SI) 値である 4 netcdf ライブラリにも同名のコマンドがあり,path を通しても netecdf のそれを呼び出すことが多いため,このコマンド を使う時にはフル path で指定する方が失敗が無い. 第6章 62 衛星データ解析 (個別データ編) ¶ ³ 図 6.2: MODIS sample 画像.近赤外.生データ出力例 µ ´ ¶ MODIS 画像 hdf ファイルからヘッダ情報を読み出す ³ pc01{usr} % 115 /usr/local/hdf4.2r3/bin/ncdump -h \ MOD02HKM.J20080807005842.20080807010809.hdf (実際は 1 行.\は入力しない) netcdf MOD02HKM.J20080807005842.20080807010809 { (以下表記同じ) dimensions: 10*nscans:MODIS_SWATH_Type_L1B = 3840 ; Max_EV_frames:MODIS_SWATH_Type_L1B = 1354 ; Band_500M:MODIS_SWATH_Type_L1B = 5 ; 20*nscans:MODIS_SWATH_Type_L1B = 7680 ; 2*Max_EV_frames:MODIS_SWATH_Type_L1B = 2708 ; Band_250M:MODIS_SWATH_Type_L1B = 2 ; Band_250M = 2 ; Band_500M = 5 ; …続く… µ ´ この中に校正係数に関する情報が含まれている.例えば,生データから反射率に変換したい場合には, EV_500_RefSB:reflectance_scales = 500m 解像度データ EV_500_RefSB:reflectance_offsets = 〃 EV_250_Aggr500_RefSB:reflectance_scales = 250m 解像度データ EV_250_Aggr500_RefSB:reflectance_offsets = 〃 で始まる行の情報がそれにあたる.この情報をテキスト処理で身につけたスキルを応用して取り出して みよう. 6.1. 応用解析 1: MODIS 63 ¶ hdf ファイルのヘッダ情報から 250m Ch.2 の変換係数を取り出す ³ pc01{usr} % 116 /usr/local/hdf4.2r3/bin/ncdump -h \ MOD02HKM.J20080807005842.20080807010809.hdf | \ grep EV_250_Aggr500_RefSB:reflectance_scales | \ awk ’{print $4}’ | \ awk -F, ’{printf "%1.12f", $1}’ > scalech2.txt (実際は 1 行) µ ´ 行順に説明する.hdf の ncdump でヘッダ情報を取り出し(1-2 行め),出力結果をパイプでつなぎ, EV_250_Aggr500_RefSB:reflectance_scales の文字列がある行を grep で検索,その結果のみを出 力 (3 行め),同じくパイプでつなぎ,出力中,4 列目(検索結果文字列,“=”, ch1 の係数,ch2 の係数) のみを出力(4 行め),最後に format を awk で整えて,scalech2.txt に書き出す(5 行め),となる.同 様に EV_250_Aggr500_RefSB:reflectance_offsets で切片データを書き出せば校正に関する情報を 得ることが可能である. 変換は次式で行われる. Realvalue = scales × (Rawvalue − of f sets) (6.1) これができるようにプログラムを作成すれば良い.初歩的なプログラミングであるため C での作成 例を示す.1-10 行めはコメント文である.無論ソースファイル名から何をしているのか分かるようにし ておく方がよいが,ここである程度情報を記載しておくと,後でソースを見直す際に自分にとっても他 人にプログラムを渡すにしても解読し易い.11-12 行は呼び出すライブラリであり,これはおまじない である.13-14 行で衛星データのピクセル数,ライン数をあらかじめ定義してある.衛星データによっ て変わった際にはここを書き換えれば良い.15-47 行が実際の処理部である.C 言語は全体を処理する 部分は main 関数として定義する.複雑な処理であれば,サブルーチンを定義するが,ここでは簡単な プログラムなので main 部分のみである. int argc, char **argv はプログラム実行時に引数を与 えるようにするためのまじないである.16-20 行で必要な変数を定義.16 行めは FILE 構造体(ファイ ル呼び出し,書き込み)の定義である.18,19 行めは衛星データ取扱いでは必須となる配列を扱うため, 配列であることを示す * を前につけている.22-26 行がファイルオープンに関する記載で,r が読み出 し (read),w が書き出し (write),b がバイナリモード (binary), t がテキストモード (text) でファイル オープンすることを明示する.この組み合わせ (r or w, b or t) でファイルを制御するのが基本である. 28-30 行が読み出し,書き込みのメモリ領域の確保(malloc 関数)である.処理の高速化はファイル入 出力をできる限り減らすことであり,ここでは,一気にすべてのデータを読み書きするように入出力す べての範囲を予約している.32-34 行めで校正係数を取り出している.取り出した後で不要となったら すぐにファイルを閉じる癖をつけておいた方が良い(34 行め).実際の処理は 35 行めから 46 行めまで である.データを一気に読み出し (36 行め),for ループ(37-43 行)ですべてのデータを見る.その際, 幾何補正時にデータが無いピクセルもあるため(0 が入ってる),データが存在しない場合にはエラー値 として -999.99 を代入 (38-40 行),それ以外はデータがあるとして変換係数を使って変換 (41 行),for ループが終了した後,出力ファイルに変換データを書き出し(44 行),その後,開いているファイルを 閉じ,確保したメモリ領域を開放(45 行),プログラムが成功したことを示す値 (0) を返す(46 行)こ とで処理が終了する. 第6章 64 衛星データ解析 (個別データ編) ¶ MODIS データを物理量(反射率)に換算するサンプルプログラム (radiometric.c) 1 2 3 4 5 6 7 8 9 10 ³ /* conversion from CCT count to real-valur in MODIS * by the equation: real = (CCT - offset) * scale * program runs by * ./radiometric.exe [input (unsigned short)] [output (float)] * [scale file] [offset file] * compile as; gcc radiometric.c -O3 -o radiometric.exe * made by: Atsushi Higuchi, CEReS Chiba University * version history: 11 Dec 2007: start make program * 12 Dec 2007: bug fix & optimize * */ 11 #include<stdio.h> 12 #include<stdlib.h> 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 µ #define PIXEL 6000 #define LINE 6000 main (int argc, char **argv) { FILE *fpi, *fpo, *fps, *fpof; float scale, offset; unsigned short *input; float *output; int i; /* define input & output */ fpi = fopen(argv[1], "rb"); fpo = fopen(argv[2], "wb"); fps = fopen(argv[3], "rt"); fpof = fopen(argv[4], "rt"); /* get memory area */ input=(unsigned short*)malloc(sizeof(unsigned short)*LINE*PIXEL); output=(float*)malloc(sizeof(float)*LINE*PIXEL); /* get coefficients */ fscanf(fps, "%f", &scale); fscanf(fpof, "%f", &offset); fclose(fps); fclose(fpof); /* conversion process */ fread(input, sizeof(unsigned short), LINE*PIXEL, fpi); for(i=0; i<LINE*PIXEL;i++){ if(input[i] == 0){ output[i]=-999.99; }else{ output[i]=((float)input[i] -offset) * scale; } } fwrite(output, sizeof(float), LINE*PIXEL, fpo); fclose(fpi); fclose(fpo); free(input); free(output); return(0); } ´ 6.1. 応用解析 1: MODIS 65 このプログラムをコンパイルし,実行させ,再び GMT で反射率での図化を試みよう.MTSAT での 基礎解析時に使用したようにカラーバーも表示させよう. pc01{usr} % 117 gcc radiometric.c -O3 -o radiometric.exe pc01{usr} % 118 ./radiometric.exe temp_EV_250_Aggr500_RefSB_b1.dat \ temp_EV_250_Aggr500_RefSB_b1.real.dat scalech2.txt offsetch2.txt (実際は 1 行) pc01{usr} % 119 makecpt -Cgray -T0/1/0.1 -Z > temp2.cpt pc01{usr} % 120 xyz2grd temp_EV_250_Aggr500_RefSB_b1.real.dat \ -Gtemp2.grd -R130/160/20/50 -I0.005 -F -Zf (実際は 1 行) pc01{usr} % 121 grdimage -JM15 -R130/160/20/50 -Ba5f2.5 temp2.grd \ -Ctemp2.cpt -K -P > temp2.ps (実際は 1 行) pc01{usr} % 122 pscoast -JM -R -B -W1/0/255/0 -Dh -O -P -K >> temp2.ps pc01{usr} % 123 psscale -Ctemp2.cpt -D7.5c/-0.7c/10c/0.4ch \ -L -B::/:"Ch.2 (NIR)": -O >> temp2.ps (実際は 1 行) pc01{usr} % 124 ggv temp2.ps そうすると以下の図が出きるはずだ.6.1.5 で作成した図との違いを確認してほしい. ¶ ³ 図 6.3: MODIS sample 画像.近赤外.反射率に変換後 µ 演習課題 3 課題 2 で取り出したバイナリデータを校正情報に基づき物理量に換算し,GMT で 再び描画させてみよう.その際,反射率でも分光放射でも構わない.ただし,どちらか分かるよ うにカラーバーに単位を示せ. ´ 第6章 66 6.1.7 衛星データ解析 (個別データ編) CUI での処理 (swath2grid の使用) これまでの演習で MODIS level1B hdf の幾何補正,Radiometric 補正ができるようになった.しか し,いちいち ModisSwathtool を立ち上げて云々とやっていたのでは,作業効率が上がらないし,研究 対象地域(緯度経度範囲)が決まっている場合には同一設定で処理を行った方が速いだろう. MODISWwathTool ではコマンドラインでも処理が出きるようにプログラムが用意されている5 . swath2grid というコマンドがそれにあたり,使い方は簡単である. ¶ ³ swath2grid の使い方 pc01 {usr} 125 swath2grid -if=(画像 hdf) -gf=(軌道情報 hdf) -of=(出力) -pf=(パラメータファイル) µ ´ ここで初めて出てくるのが, -pf= で指定されるパラメータファイルであり,これは,ModisSwathTool 上で Save Parameter: でセーブすることができる.これまで処理してきたパラメータを japan.prm というファイル名でセーブし,中身を見てみよう. ¶ ³ swath2grid で使用するパラメータファイルの中身 INPUT_FILENAME = /work/higu/modistemp/work/MOD02HKM.J20080807005842.200808070108 09.hdf GEOLOCATION_FILENAME = /work/higu/modistemp/work/MOD03.J20080807005842.200808070 10809.hdf INPUT_SDS_NAME = EV_500_RefSB, 1, 1, 1, 1, 1; EV_250_Aggr500_RefSB, 1, 1 OUTPUT_SPATIAL_SUBSET_TYPE = LAT_LONG OUTPUT_SPACE_UPPER_LEFT_CORNER (LONG LAT) = 130.0 50.0 OUTPUT_SPACE_LOWER_RIGHT_CORNER (LONG LAT) = 160.0 20.0 OUTPUT_FILENAME = /work/higu/modistemp/temp/temp OUTPUT_FILE_FORMAT = RB_FMT KERNEL_TYPE (CC/BI/NN) = NN OUTPUT_PROJECTION_NUMBER = GEO OUTPUT_PROJECTION_PARAMETER = 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0. 0 0.0 0.0 OUTPUT_PROJECTION_SPHERE = 8 OUTPUT_PIXEL_SIZE = 0.005 µ ´ このパラメータファイル中,ファイル入出力に関わる行 ( INPUT_FILENAME GEOLOCATION_FILENAME OUTPUT_FILENAME ) をコメントアウト # することで,汎用性のあるパラメータファイルとなる6 .こ れで準備は完了である.端末上でパラメータファイル,他の hdf ファイルを指定して swath2grid を走 らせてみよう. 5 というより,Java で稼働する ModisSwathtool はコマンド処理用のフロントエンドと記載した方がより正確であろう swath2grid でパラメータファイルとして認識されない 6 コメントアウトするだけで,消してはならない.消すと 6.1. 応用解析 1: MODIS 67 ¶ 実際に swath2grid を動かす ³ pc01{usr} % 126 swath2grid -if=MOD02HKM.J20080807005842.20080807010809.hdf \ -gf=MOD03.J20080807005842.20080807010809.hdf \ -of=../temp/temp -pf=japan.prm (実際には 1 行) ****************************************************************************** MODIS Reprojection Tool Swath (v2.0 July 2004) Start Time: Wed Sep 3 19:14:44 2008 -----------------------------------------------------------------Output filename is ../temp/temp General processing info ----------------------input_filename: MOD02HKM.J20080807005842.20080807010809.hdf geoloc_filename: MOD03.J20080807005842.20080807010809.hdf output_filename: ../temp/temp output_filetype: RAW_BINARY output_projection_type: Geographic output_ellipsoid: GRS 1980/WGS 84 output_datum: WGS84 resampling_type: NN output projection parameters: 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 SDS name 1) EV_500_RefSB 2) EV_250_Aggr500_RefSB ... (省略) ... #bands in SDS 5 2 #bands to process 5 2 ... (時間がかかる) ... input resolution: 500 m %% complete: 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% End Time: Wed Sep 3 19:16:50 2008 Finished processing! ****************************************************************************** pc01{usr} % 127 µ ´ ModisSwathTool と同様の結果が得られることが分かるだろう.このコマンドと物理量変換,描画を shell に記載することで自動化することが可能となる.shell の書き方はある程度これまでの演習でスキ ルが上がっていると思うので,書き方のヒントを記載しておく. 第6章 68 衛星データ解析 (個別データ編) ¶ 変換係数を取り出す部分の shell の抜粋(ヒント) ³ hdf=/usr/local/hdf4.2r3/bin/ncdump output1="temp_EV_500_RefSB_b" output2="temp_EV_250_Aggr500_RefSB" for N in 0 1 2 3 4; do x=$(($N+3)) $hdf -h $fname | \ grep EV_500_RefSB:reflectance_scales | \ awk ’{print $’$x’}’ | \ awk -F, ’{printf "%1.12f", $1}’ > scale${N}.txt $hdf -h $fname | \ grep EV_500_RefSB:reflectance_offsets | \ awk ’{print $’$x’}’ | \ awk -F, ’{printf "%1.12f", $1}’ > offset${N}.txt µ done for N in 0 1; do x=$(($N+3)) $hdf -h $fname | \ grep EV_250_Aggr500_RefSB:reflectance_scales | \ awk ’{print $’$x’}’ | \ awk -F, ’{printf "%1.12f", $1}’ > scale${N}.txt $hdf -h $fname | \ grep EV_250_Aggr500_RefSB:reflectance_offsets | \ awk ’{print $’$x’}’ | \ awk -F, ’{printf "%1.12f", $1}’ > offset${N}.txt done ´ 演習課題 4 課題 3 で処理したことを swath2grid を用いて shell として書いて,端末上で自動処 理できるようにしてみよう. 6.1.8 さらなる解析のために • 雲域判別:簡便的な雲域判別 threshold を作り,そこをマスクする. • 陸域研究:マスクされた以外のピクセルに対し,NDVI を算出して map 化する. • 上を過去 1ヶ月,あるいは数年で一律に実行できるよう wget 等を駆使して連続的に job が走るよ うにする.その時にターゲットとする地点,領域を選び,その付近の切り出し,各 Ch データを取 り出し,フェノロジーを見る. 等である.MODIS は汎用性の高いセンサーであり,解像度も比較的細かいことからファイルサイズ が大きくなり,ディスクスペースもさることながら,単純な処理でも時間がかかる.そのため,データ 取得方法も含め,早めに解析に取り組むことが最優先事項かもしれない. 6.1. 応用解析 1: MODIS 6.1.9 69 GMT による RGB 合成(おまけ) GMT Ver.4 以降 GMT でも RGB 合成が出きるようになったが,他の画像処理ソフトウエアのよう に GRB 合成のチューニングは GMT では行わないので,何らかの方法で出力を 1byte に落とす必要が ある.一般的にはガウス分布を仮定して,データの出現頻度 90 %,95 %タイルで正規化,255 倍する という方法があるが,画像の度に RGB 色調整が変わるため,カラーパレットを見せる際にその度に作 るようにプログラミングする必要があり,かつ,計算時間が少しかかる.個人的だが,傾斜配分させる ことで何となく目で見る感じに近いナチュラルカラー RGB にする方法を紹介する.分光反射率データ を以下の閾値で再計算する.if 文だらけの program になるが,正規化計算よりは速い. ¶ ³ 私家版 RGB 合成調合 ;-) 反射率 < 5% : 1byte 値 = 反射率 x 20 5% < 反射率 < 10% : 1byte 値 = (反射率 - 5) x 10 10% < 反射率 < 20% : 1byte 値 = (反射率 - 10) x 5 20% < 反射率 < 40% : 1byte 値 = (反射率 - 20) x 40% < 反射率 < 80% : 1byte 値 = (反射率 - 40) x ( 0 - 100) + 100 + 150 (100 - 150) (150 - 200) 1.25 + 200 0.5 + 225 (200 - 225) (225 - 245) 80% < 反射率 : 1byte 値 = 一律 253 µ ´ 上の変換で RGB 合成をしたものを示す.簡便な方法であるが,それらしく見えること,また変換計算 も早く,同じ変換関数を使うため,図に RGB それぞれのカラーバーを表示することができるのが利点 である.好みの問題なので,GMT で RGB 合成図を作るときには参考にしていただければ幸いである. ¶ ³ 図 6.4: 上記変換に基づきナチュラルカラー RGB 合成したもの.R: Ch.1, G: Ch.4, B: Ch.3. µ ´ 第6章 70 6.2 衛星データ解析 (個別データ編) 応用解析 2: TRMM 本節では,熱帯降雨観測衛星(TRMM; Tropical Rainfall Measuring Mission)観測データを読み込 むためのツールをインストールする方法と,これを用いたデータの描画方法の解説を行う.TRMM の 諸元は地球観測データハンドブック(JAXA/EORC, 2006.trmm handbook j.pdf),観測データにつ いては TRMM データ利用手引書(JAXA/EORC, trmm usersguide j.pdf)を参照のこと(これらは, TRMM JAXA Web Page (http://www.eorc.jaxa.jp/TRMM/index_j.htm) からダウンロード可能). 6.2.1 必要とする tool • HDF (http://hdf.ncsa.uiuc.edu)(最新版は 4.2r3.5 はフォーマットが異なるため使用でき ない. ) • TSDIS Toolkit (http://pps.gsfc.nasa.gov/tsdis/tsdistk.html)(最新版は 6.44) 6.2.2 tool のインストール ソースファイル・プログラム・データは次のディレクトリに置かれているものとして記述する. /home/hoge/src : HDF, toolkit などのソースコード群 /home/hoge/programs/TRMM : TRMM のプログラム類 /home/hoge/sampledata : TRMM データ HDF のインストール HDF のソースコードは,http://hdf.ncsa.uiuc.edu/release4/obtain.html に置かれている.TSDIS Toolkit のコンパイル時,HDF に加え外部ソフトが必要となる.HDF のダウンロード時に,zlib と jpeg のソースファイルも併せてダウンロードしておく.以下のコマンドでもダウンロードは可能. [hoge@hoge src]$ wget ftp://ftp.hdfgroup.org/HDF/HDF_Current/src/HDF4.2r3.ta r.gz [hoge@hoge src]$ wget ftp://ftp.hdfgroup.org/lib-external/zlib/1.2/src/zlib1.2.3.tar.gz [hoge@hoge src]$ wget ftp://ftp.hdfgroup.org/lib-external/jpeg/src/jpegsrc.v 6b.tar.gz HDF のコンパイルに必要なコンパイラをインストールする. [hoge@hoge src]$ su パスワード (P): [root@hoge src]# apt-get install byacc flex HDF をコンパイルし,インストールする. [root@hoge [root@hoge [hoge@hoge [hoge@hoge [hoge@hoge src]# mkdir /usr/local/hdf4.2r3 src]# exit src]$ tar xvfz HDF4.2r3.tar.gz src]$ cd HDF4.2r3 HDF4.2r3]$ configure --prefix=/usr/local/hdf4.2r3 6.2. 応用解析 2: TRMM 71 [hoge@hoge HDF4.2r3]$ make [hoge@hoge HDF4.2r3]$ su パスワード (P): [root@hoge HDF4.2r3]# make install TSDIS toolkit のインストール Toolkit および Toolkit のインストール時に必要な外部プログラムを展開する. [hoge@hoge [hoge@hoge [hoge@hoge [hoge@hoge [hoge@hoge [hoge@hoge src]$ tar xvfz zlib-1.2.3.tar.gz src]$ tar xvfz jpegsrc.v6b.tar.gz src]$ tar xvfz toolkit.r644.tar.Z src]$ cd toolkit_6.44 toolkit_6.44]$ cp MAKE.LINUX Makefile toolkit_6.44]$ vi Makefile ここで,Makefile を自身の PC 環境に合わせて書き換える.具体的には,36–39 行目の HDF1–4 は HDF のソースファイルのディレクトリ,44–45 行目の HDFINC および HDFLIB は HDF のインストー ルディレクトリを指定する. HDF1 HDF2 HDF3 HDF4 = = = = ${HOME}/src/HDF4.2r3/mfhdf/libsrc ${HOME}/src/HDF4.2r3/hdf/src ${HOME}/src/jpeg-6b ${HOME}/src/zlib-1.2.3 HDFINC = -I/usr/local/hdf4.2r3/include HDFLIB = -L/usr/local/hdf4.2r3/lib toolkit をコンパイルし,インストールする. [hoge@hoge toolkit_6.44]$ make [hoge@hoge toolkit_6.44]$ cd ../ [hoge@hoge src]$ su パスワード (P): [root@hoge src]# cp -r toolkit_6.44 /usr/local/ 環境変数(bash および csh)を設定する. [root@hoge src]# vi /etc/bashrc ## HDF export LD_LIBRARY_PATH=/usr/local/hdf4.2r3/lib:$LD_LIBRARY_PATH export HDFINC=/usr/local/hdf4.2r3/include ## TSDIS Toolkit export LD_LIBRARY_PATH=/usr/local/toolkit_6.44/lib:$LD_LIBRARY_PATH export TSDISTK=/usr/local/toolkit_6.44 [root@hoge src]# vi /etc/csh.cshrc ## HDF setenv LD_LIBRARY_PATH 第6章 72 衛星データ解析 (個別データ編) /usr/local/hdf4.2r3/lib:$LD_LIBRARY_PATH set HDFINC /usr/local/hdf4.2r3/include ## TSDISTK setenv LD_LIBRARY_PATH /usr/local/toolkit_6.44:$LD_LIBRARY_PATH setenv TSDISTK /usr/local/toolkit_6.44 プログラムのコンパイルは,次に示すオプションを加える必要がある. [hoge@hoge TRMM]$ gcc -fPIC -DLinux hogehoge.c -o hogehoge -I${HDFINC} -I${ TSDISTK} -L${LD_LIBRARY_PATH} -ltsdistk -lm -lmfhdf -ldf -ljpeg -lz これを毎回打ち込むのは煩雑なので,次の shell を作成し, [hoge@hoge TRMM]$ vi shTRMM.csh #!/bin/tcsh set PROG=‘basename $1 .c‘ gcc -fPIC -Dlinux -o ${PROG} $1 -I${HDFINC} -I${TSDISTK} -L${LD_LIBRARY_PATH} -ltsdistk -lm -lmfhdf -ldf -ljpeg -lz [hoge@hoge TRMM]$ chmod 755 shTRMM.csh [hoge@hoge TRMM]$ ./shTRMM.csh hoge.c とすれば,プログラム hoge が生成される. TRMM データの取得 TRMM データは NASA および JAXA から無償で公開されている.NASA の場合は FTP 経由でダウ ンロードが可能である.ディレクトリ全てを wget でダウンロードする場合,シンボリックリンクが張 られているため–retr-symlinks オプションが必要. • NASA GSFC DAAC TRMM Data Access (http://disc.sci.gsfc.nasa.gov/data/datapool/) JAXA EORC で公開されているサンプルプログラムを用いてデータの中身を確認する.まず,PR2A25 のサンプルプログラムをダウンロードし,コンパイルする. [hoge@hoge TRMM]$ mkdir JAXAsamplecodes [hoge@hoge TRMM]$ cd JAXAsamplecodes [hoge@hoge JAXAsamplecodes]$ wget http://www.eorc.jaxa.jp/TRMM/documents/faq/c _2a25rd.txt [hoge@hoge JAXAsamplecodes]$ mv c_2a25rd.txt c_2a25rd.c [hoge@hoge JAXAsamplecodes]$ ../shTRMM.csh c_2a25rd.c TRMM データをダウンロードしたディレクトリに移動し,サンプルプログラムを実行する. [hoge@hoge sampledata]$ ${HOME}/programs/TRMM/JAXAsamplecodes/c_2a25rd 2A25.080 428.59552.6.HDF beginDate = 2008/4/28 beginTime = 18:3:43 endDate = 2008/4/28 endTime = 19:36:7 6.2. 応用解析 2: TRMM orbitSize = granuleID = algorithmID = algorithmVersion = toolkitVersion = Scan : 1/ 9249 -18.350 0.0 0.0 ・ ・ ・ 73 9249 2A25.080428.59552.6.HDF 2A25 6.67 6.38 ScanTime : 65023.800 Angle : 0.0 0.0 0.0 1 Lat,Lon : -36.246, 0.0 このサンプルプログラムは,あるスキャン,アングルビンにおける降水量をジオイド面からの高度 20 km から 250 m ごとに高度 0 m まで順番に書き出すものである. 別の物理量を読み出すには,TRMM データ利用講習会 Appendix Parameter Dictionary 第 2 版 (NASDA/EORC, 2005. appendix2.pdf. 但し Version 5 に対応)を参考にし,該当部分を書き換え る.この Parameter Dictionary には各プロダクトに収録されているパラメタ(観測値・物理量・計算結 果など),プログラム中で用いる変数,フォーマット,パラメタの説明が記述されている. 各高度の降水量(Rain Rate, 2A25-3 ページ下)から地上付近のレーダ反射因子(Near Surface Z, 2A25-7 ページ下)に出力を変えるには次のようにする. [hoge@hoge JAXAsamplecodes]$ cp c_2a25rd.c c_2a25rd-nearSurfZ.c [hoge@hoge JAXAsamplecodes]$ vi c_2a25rd-nearSurfZ.c // for(j=0;j<80;j++) printf( " %8.1f", /* vertical loop */ // read_L2A25_data.rain[i][j] ); // /* Rain (mm/hr) */ printf("%8.1f", read_L2A25_data.nearSurfZ[i]); printf( "\n" ); [hoge@hoge JAXAsamplecodes]$ ../shTRMM.csh c_2a25rd-nearSurfZ.c [hoge@hoge JAXAsamplecodes]$ cd /home/hoge/sampledata [hoge@hoge sampledata]$ ${HOME}/programs/TRMM/JAXAsamplecodes/c_2a25rd-near SurfZ 2A25.080428.59552.6.HDF beginDate = 2008/4/28 beginTime = 18:3:43 endDate = 2008/4/28 endTime = 19:36:7 orbitSize = 9249 granuleID = 2A25.080428.59552.6.HDF algorithmID = 2A25 algorithmVersion = 6.67 toolkitVersion = 6.38 Scan : 1/ 9249 ScanTime : 65023.800 Angle : 1 Lat,Lon : -36.246, -18.350 0.00 ・ ・ ・ 同様に,JAXA EORC VIRS1B01 のサンプルプログラムをダウンロードし,コンパイルする. [hoge@hoge TRMM]$ wget http://www.eorc.jaxa.jp/TRMM/documents/faq/c_1b01rd. txt 第6章 74 衛星データ解析 (個別データ編) [hoge@hoge TRMM]$ mv c_1b01rd.txt c_1b01rd.c [hoge@hoge TRMM]$ ${HOME}/programs/TRMM/shTRMM.csh c_1b01rd.c TRMM データをダウンロードしたディレクトリに移動し,サンプルプログラムを実行する. [hoge@hoge sampledata]$ ${HOME}/programs/TRMM/c_1b01rd 1B01.080428.59552.6.HDF beginDate = 2008/4/28 beginTime = 18:3:43 endDate = 2008/4/28 endTime = 19:36:7 orbitSize = 18199 granuleID = 1B01.080428.59552.6.HDF algorithmID = 1B01 algorithmVersion = 6.12 toolkitVersion = 6.38 Scan : 1/18199 ScanTime : 65023.590 IFOV : 1 Lat,Lon : -38.926, -18.311 0.86200 0.10500 0.02445 0.69380 0.61650 ・ ・ ・ このサンプルプログラムは,あるスキャン,アングル番号における各チャンネルの放射輝度を書き出 すものである. VIRS 1B01 については,各チャンネルの放射輝度を反射率および輝度温度に変換するプログラムが TSDIS によって公開 (http://pps.gsfc.nasa.gov/tsdis_redesign/software.html#convert) され ている.これをダウンロードする. [hoge@hoge LTB.tar [hoge@hoge [hoge@hoge [hoge@hoge TRMM]$ wget ftp://ftp-tsdis.gsfc.nasa.gov/pub/convertvirs/1B01CA TRMM]$ tar xvf 1B01CALTB.tar TRMM]$ cd 1B01CALTB 1B01CALTB]$ vi Makefile ここで,Makefile を自身の PC 環境に合わせて書き換える.具体的には,3, 5, 6 行目は使用する Linux の環境に,10–14 行目は toolkit のインストールディレクトリを指定する. MACHINE = Linux CC = gcc CFLAGS = -g -D$(MACHINE) ・ ・ ・ HDFINC1 = -I/usr/local/hdf4.2r3/include IOINC = -I/usr/local/toolkit_6.44/include LIBDIR1 = -L/usr/local/hdf4.2r3/lib LIBDIR2 = -L/usr/local/toolkit_6.44/lib 変換プログラムをコンパイルする. [hoge@hoge 1B01CALTB]$ make TRMM データをダウンロードしたディレクトリに移動し,サンプルプログラムを実行する. 6.2. 応用解析 2: TRMM 75 [hoge@hoge sampledata]$ ${HOME}/programs/TRMM/1B01CALTB/1B01.ref.bt 1B01.080428.5 9552.6.HDF 1B01CALTB.080428.59552.6.HDF -1 -1 ${HOME}/programs/TRMM/1B01CAL TB/btttable Input file 1B01.080428.59552.6.HDF Output file 1B01CALTB.080428.59552.6.HDF ・ ・ ・ 変換プログラムの README に記述してあるように,変換後の channel 3–5 は,それぞれ 2000, 200, 200 を掛けると輝度温度となる.そこで,c 1b01rd.c の 116–117 行目を書き換え,アルベドおよび輝度 温度を表示するプログラム c 1b01caltbrd.c を作成してデータの中身を表示する. [hoge@hoge TRMM]$ cp c_1b01rd.c c_1b01caltbrd.c [hoge@hoge TRMM]$ vi c_1b01caltbrd.c ・ ・ ・ // for(j=0;j<5;j++){ printf(" %9.5f", /* channel loop */ // read_L1B01_data.channels[i][j] ); printf("%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f", read_L1B01_data.channels[i][0], read_L1B01_data.channels[i][1], read_L1B01_data.channels[i][2]*2000.0, read_L1B01_data.channels[i][3]*200.0, read_L1B01_data.channels[i][4]*200.0 ); [hoge@hoge TRMM]$ ${HOME}/programs/TRMM/c_1b01caltbrd 1B01CALTB.080428.5955 2.6.HDF beginDate = 2008/4/28 beginTime = 18:3:43 endDate = 2008/4/28 endTime = 19:36:7 orbitSize = 18199 granuleID = 1B01CALTB.080428.59552.6.HDF algorithmID = 1B01 algorithmVersion = NULL toolkitVersion = 6.44 Scan : 1/18199 ScanTime : 65023.590 IFOV : 1 Lat,Lon : -38.926, 18.311 0.49 0.41 284.72 279.40 274.62 ・ ・ ・ 【課題 1】 TMI1B11, TMI2A12, PR2A23 に対して同様のサンプルプログラムをコンパイルして実行し, データの中身が正しく読み込めていることをチェックしなさい. 【課題 2】 任意に選んだ地域の PR near surface rain,TMI surface rain,VIRS ch.4 (IR) Tbb の分布 図を描画しなさい. 第6章 76 衛星データ解析 (個別データ編) ¶ 作業手順 ³ 1. 任意のデータをダウンロードする. 2. データを読み出し,グリッド化する(グリッド化サンプルプログラム(c で始まるもの)を参 考にするとよい.これらは,グリッド内に含まれる変数と回数を積算し,同名の出力ファイ ルと足し合わせるようになっているので,そのまま別のファイルで実行すると合成図を作成 することができる.最後に calc.c で変数の平均を計算する. ). 3. GMT で描画. µ ´ USB メモリに添付したサンプルデータから北緯 10–20 度,東経 80–90 度を切出して図化すると次の ようになる(2008 年 5 月にミャンマーに上陸し多大な被害をもたらした Nargis の事例). 図 6.5: (左)1B01.eps, (中)2A12.eps, (右)2A25.eps 6.2.3 他ディストリビューションでの tool のインストールと補足 Fedora Core, Cent OS ・Fedora Core は,インストール時に開発環境を選択する. ・CentOS は,インストール後に開発環境を追加する. [hoge@hoge src]$ su パスワード (P): [hoge@hoge src]# yum groupinstall "Development Libraries" "Development Tools" さらに,追加パッケージをインストールする. [hoge@hoge src]# yum install libjpeg-devel g77 コマンドが gfortran になっているので,コンパイルの利便性のためシンボリックリンクを作成する. [hoge@hoge src]# cd /bin [hoge@hoge bin]# ln -s gfortran g77 あとは,6.2.2 と同じ手順で HDF,Toolkit のインストールを行う. 6.2. 応用解析 2: TRMM 77 Vine Linux Vine Linux では HDF が Vine Plus で配付されているので,apt-get でインストールができる.これ により,HDF インストール作業は省略が可能.ただし,toolkit のインストール時に HDF のソースファ イルが必要であるため,この方法でインストールするとしてもソースファイルをダウンロードしなけれ ばならない.また,インストールのディレクトリが異なるため,環境変数もこれに合わせて書く必要が ある. [hoge@hoge src]$ su パスワード (P): [root@hoge src]# apt-get install hdf hdf-devel あとは,6.2.2 TSDIS toolkit のインストールと同じ手順で Toolkit のインストールを行う.HDF の 環境変数は次のとおり. LD_LIBRARY_PATH=/usr/lib/hdf:$LD_LIBRARY_PATH HDFLIB=/usr/lib/hdf HDFINC=/usr/include/hdf 第6章 78 衛星データ解析 (個別データ編) 応用解析 3: 静止気象衛星と客観解析気象データの組合せ 6.3 本節では,静止気象衛星データと客観解析気象データを組み合わせた解析をおこなう.解析対象は, 2008 年の 3 月末∼4 月はじめに日本近海で急速に発達した低気圧 (爆弾低気圧7 ) とする. 6.3.1 作業前の準備: 必要ソフト・データ・プログラム 必要環境は以下の通り: • GMT のコマンド群 (3.1.3 節にてインストール済み) • Intel Fortran (ifort コマンド) 8 • wgrib コマンド これら必要環境および使用データ・プログラムの準備は,以下の手順でおこなう 1. 必要データのコピー ¶ $ tar xvf (USB メモリのマウント場所)/data/MTSAT.tar -C /work/. & $ tar xvf (USB メモリのマウント場所)/data/NCEP_FNL.tar -C /work/. µ ³ & 2. 使用するシェルスクリプトのコピー ($HOME/gms_meteor/ 以下に展開) ¶ $ tar xvzf (USB メモリのマウント場所)/prog/gms_meteor.tgz -C $HOME/. & µ ´ ³ ´ 3. Fortran コンパイラのインストール ※ここでは Intel Fortran を使用.具体的なインストール手順は Appendix E (p.103) を参照 4. 必要ソフト (wgrib) のインストール ¶ $ cp (USB メモリのマウント場所)/src/wgrib.c $HOME/src/. $ cd $HOME/src $ gcc -o wgrib wgrib.c (以後は root での作業) # cp -p (ユーザの$HOME)/src/wgrib /usr/local/bin/. ※ wgrib のインストール µ ³ ´ 以後の作業は,全て $HOME/gms_meteor/ 以下でおこなう. 7 24 時間で 24-hPa 以上の中心気圧低下がみられる低気圧と定義される.細かく言えば,低気圧中心の緯度により気圧低下量 を補正する.研究の歴史的背景から,参照緯度を 60◦ N とするのが一般的. 8 ifort に限定されるわけではない.単に他の Fortran コンパイラでの動作を検証していないだけ. 6.3. 応用解析 3: 静止気象衛星と客観解析気象データの組合せ 6.3.2 79 解析に関する基本情報 使用データ 解析期間: 2008 年 3 月 29–4 月 1 日 (4-day) ; 00, 06, 12, 18 UTC を使用 衛星データ: 運輸多目的衛星 MTSAT-1R (ひまわり 6 号) の赤外チャンネル IR1, IR3 (Water Vapor), IR4 (3.7 µm 帯) 緯度経度 0.04 ◦ ,1-hourly, 符号無し 2-byte 整数 (big-endian バイナリ).この データの所在,フォーマットなどに関する情報は,5.1 節 (p.47 ∼) 参照 気象データ: NCEP Tropospheric Final Analyses (NCEP FNL) a 水平格子間隔:1.0 ◦ ,鉛直 26 層,6-hourly, GRIB-1 形式b a b データ入手は http://dss.ucar.edu/datasets/ds083.2/ wgrib 使用時には,現業用の GRIB テーブルを使う (-ncep opn).Appendix F 参照 ¶ 作業内容 ³ • 作業 1: 気象概況の把握 (天気図作成) – 海面更正気圧 (SLP) いわゆる「地上天気図」.総観解析の基本 – 500hPa 面のジオポテンシャル高度と鉛直 p 速度 (ω) 「上層天気図」の基本.対流圏中層のトラフ・リッジや上昇流・下降流の確認 – 850hPa 面の水平風 (u, v),相当温位 θe 下層ジェット,前線位置・強度 (水平温度傾度) • 作業 2: MTSAT 雲画像と気象要素の複合解析 – SLP,850-hPa 面 θe などと IR1, 低気圧・前線と活発な対流活動がみられる雲域との相対的位置関係 – 渦位と IR3(水蒸気チャンネル) 対流圏界面の折れ込み (tropopause folding),乾燥貫入 (dry slot) • 作業 3: 3.7 µm 帯差分画像による雲型判別 (∆IR4−1 = IR4 − IR1) – MTSAT で新規追加された赤外 4 チャンネル (IR4; 3.7 µm 帯) と IR1 との差分 – ∆IR4−1 < 0 なら下層雲,∆IR4−1 > 0 なら薄い上層雲である可能性あり µ ´ 第6章 80 6.3.3 衛星データ解析 (個別データ編) 作業 1: 気象概況の調査 (天気図作成) ¶ 作業手順 ³ 1. NCEP FNL データから必要気象要素を読み出し 2. GMT による作図 (SLP ; 500-hPa Z, θ, and ω ; 850-Pa (u, v), θe , and |∇θe |) 作業ディレクトリ $ncep home = $HOME/gms_meteor/NCEP_FNL/ 実行順は以下の通り: (修正の必要無し) 1. $ncep_home にて,00dir_ready.sh の実行 (作業ディレクトリの一括作成), 2. $ncep_home/module/ に移動, make all の実行 (気象データ読み出し用 Fortran プログ ラムのコンパイル), 3. $ncep_home に戻り,exec dump sfc.sh 実行 (SLP データの読みだし). 4. 同様に exec dump pres.sh (500-hPa Z など等圧面データの読みだし・計算), 5. SLP.gmt の実行, 6. omega z500.gmt の実行, 7. EPT850.gmt の実行 作図結果 (PS および PDF ファイル) は, /work/NCEP_FNL/PS/ 以下の要素別ディレクトリに出力される. µ ´ 使用プログラムの概要 1. GRIB 形式ファイルから必要要素を wgrib で切り出してバイナリに変換,Fortran でバイナリデー タを読み出して作図用のテキストデータに変換 2 次元データ (SLP): exec_dump_sfc.sh (内部で dump_sfc.sh を実行) 気圧面データ: exec_dump_pres.sh (内部で dump_pres.sh を実行) 2. GMT を用いた対象要素の作図 海面更正気圧 (SLP): SLP.gmt 500-hPa 面の高度,温位 θ,鉛直流 ω: omega_z500.gmt 850-hPa 面の水平風 (u, v),相当温位 θe とその水平傾度 |∇θe |: EPT850.gmt 気象データ変換・読み出し 気象データ変換プログラムのうち,ここでは 2 次元データの変換プログラム exec-dump_sfc.sh (以 後,プログラム 1 と表示) について解説する. プログラム 1 では,内部で 2 つの外部プログラムを呼び出してデータ変換をおこなっている.外部プ ログラム名は,プログラム 1 の冒頭部にある 2 つのシェル変数で設定している: 6.3. 応用解析 3: 静止気象衛星と客観解析気象データの組合せ 81 $grib2bin プログラム名: dump_sfc.sh GRIB 形式からバイナリへの変換するためのシェルスクリプト.変数名,日付を引数に与える $bin2ascii プログラム名: BIN2ASCII バイナリデータを GMT で作図するためのテキストデータ (経度,緯度,対象要素のデータ,とい う 3 列並び) に変換するプログラム.Fortran 90 ファイルをコンパイルして作成した実行ファイ ル.Fortran 90 のソースとそのコンパイル手順については,./modules/Makefile を参照9 ¶ コラム: GRIB データ,wgrib コマンドについて ³ Gridded Binary (GRIB) 形式とは: WMO が推奨する気象データの共通フォーマットのひとつ.NCEP NCAR 再解析デー タなどで採用されたa ため,利用者は全世界に多数 (のはず). Fortran 77/90/95, C 言語などでプログラミングして,GRIB ファイルの直接読み出し も可能.しかし,そのためには GRIB 形式に関する理解とある程度のプログラミング 技術が必須となる.初級者には少々敷居が高いと思われる. それに対して,wgrib コマンドを使う場合は,GRIB 形式に関する知識が少なくても, 変数の参照テーブル (GRIB テーブル) とシェルプログラミングの知識さえあれば,比 較的簡単に使用できる. wgrib を使った GRIB データ処理の主な長所/短所は以下の通り: 長所: grep やパイプ処理などを組合せることで,比較的簡単に必要なデータを切り出すことが可 能 (Appendix F 参照) 短所: データ処理に際して中間ファイルが生成されるため,(1) ハードディスク上に中間ファイル 用の作業領域が必要,(2) 処理に要する時間が直接アクセスより長い wgrib の使用方法と GRIB1 形式の具体的情報については,Appendix F 参照. a 最近 (2007 年以後) の気象庁の GPV データ では,GRIB の拡張フォーマットである GRIB ver.2 (GRIB2) 形式で 配布されている.wgrib コマンドは GRIB2 ファイルに非対応.GRIB2 形式を取り扱うために,米国では wgrib2 コマン ドが開発中 (http://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/). µ ´ 天気図の作図 使用する 3 つの作図プログラムに関して,概要を説明する: 全プログラム共通事項 シェルスクリプトの冒頭部分で,スクリプト中で使用する重要なシェル変数を宣 言.入出力ディレクトリ (ps_path および input_data_path),作図期間 (hh_list ,strt_date , end_date),GMT コマンドで使用する共通オプション (rr, jj, bb ; それぞれ -R, -J, -B オプショ ン関連),など.作図は while ループで日付に関する繰り返し,さらに内部の for ループで 時刻 (00, 06, 12, 18 UTC) に関する繰り返し.その内部で下記 GMT コマンドを実行し,PS ファイル を作成. SLP.gmt 使用した GMT コマンドは,実行順 (複数回の場合は最初の実行位置順) に gmtset, pstext, psbasemap, xyz2grd, grdcontour, pscoast, ps2raster,の 7 種類. 9 気圧面データの変換 exec dump pres.sh では,対象要素が温位 θ の場合は気温と気圧のデータから計算.相当温位 θ の e 場合は気温,相対湿度,気圧のデータから計算.θe 計算方法は Bolton (1980) に基づく. 第6章 82 衛星データ解析 (個別データ編) gmtset 図の初期パラメータの設定.なお,長さの単位はインチなので注意10 pstext 図のタイトルや基本的な情報を文字で記入.文字位置は A4 用紙上の左下角を原点とし た座標で指定 psbasemap 図枠を作成 xyz2grd awk で SLP を hPa 単位に変換し,NetCDF 形式に変換 grdcontour xyz2grd で作成した SLP の NetCDF ファイルを用いて等圧線の書き込み.等圧線 間隔は 4-hPa (-C4),8-hPa 間隔ごとに等圧線上に気圧の数値を表示 (-A8) pscoast 海岸線の書き込み (オプションの詳細は 3.3.1 節参照) ps2raster PS を PDF に変換 omega z500.gmt 使用した GMT コマンドは,実行順に gmtset, pstext, psbasemap, xyz2grd, grdimage, psscale, grdcontour, pscoast, ps2raster,の 9 種類. gmtset, pstext, psbasemap, pscoast, ps2raster SLP.gmt とほぼ同じなので省略 xyz2grd awk で ω を読み出し,NetCDF 形式に変換 grdimage xyz2grd で作成した ω の NetCDF ファイルを用いて上昇流域 (負; 青系)・下降流域 (正; 赤系) のグリッドを塗りつぶし.塗りつぶしパターンは,カラーパレット t.cpt で指定. ±0.2 Pa/sec の範囲は塗りつぶし無し grdcontour xyz2grd で作成した ω の NetCDF ファイルを用いて等値線の書き込み.等値線間 隔は 0.4 Pa/sec (-C0.4),白実線で引く.grdimage と同様,ゼロ近辺は等値線を引かない psscale ω の凡例を作成.凡例を書き込む位置は -D で指定 EPT850.gmt 使用した GMT コマンドは,実行順に gmtset, pstext, psxy, psbasemap, minmax, xyz2grd, grdimage, grdcontour, psscale, pscoast, ps2raster,の 11 種類. gmtset, pstext, psbasemap, pscoast, ps2raster 前述 2 ファイルとほぼ同じなので省略 psxy 水平風ベクトルの凡例を作成 minmax 相当温位の水平傾度の絶対値 |∇θe | の数値範囲を画面表示.データの確認・検証目的 で実行しただけなので,作図目的だけならコメントアウト可 xyz2grd プログラム中で 6 回実行.1 回目: 相当温位の水平傾度の絶対値 |∇θe |,2–5 回目: 水 平風の 2 成分 (u, v),6 回目: 相当温位 θe .awk でそれぞれのデータを読み出し,NetCDF 形式に変換.風速の絶対値 |V | が 5 m/s より小さい場合や |V | ≥ 20 m/s の場合など,作図 項目に応じて複数回実行した grdimage プログラム中で 2 回実行.1 回目は相当温位の水平傾度の絶対値 |∇θe | の塗りつぶし. 2 回目は標高 1500 m 以上の地形をマスクアウトするため grdcontour プログラム中で 2 回実行.1 回目は |∇θe | (等値線間隔: 1 K/(100km)),2 回目は θe (等値線間隔: 2 K). psscale |∇θe | の凡例を作成 10 筆者が GMT を使いはじめた頃 (1993 年頃) は,インチしか使えなかった (と思う).cm が使えるようになっても,既存ス クリプトの記述を変更するのが面倒だったため,現在でもズルズルと使いつづけている.cm の方が好みなら,各自が数値を変換 (1 インチ = 2.54 cm) してください. 6.3. 応用解析 3: 静止気象衛星と客観解析気象データの組合せ 1200 UTC 31Mar2008 SLP 50˚ N 1200 UTC 31Mar2008 Z, , & at 500 hPa 08 40˚N 10 40˚N 540 0 50˚ N ³ map option = −R115/15/180/50r ; −JA140/35/7.4i =3K NCEP FNL 1.0−degree contour interval: Z = 60 & 300 m, ¶ NCEP FNL 1.0−degree 83 16 10 8 100 [Pa/s] 0.6 24 0 10 6 101 6 98 4 30˚N 30˚N 0.2 54 00 252 2 16 99 1000 0 10 −0.2 25 8 570 −0.6 0 264 5700 10 16 270 1008 20˚N 20˚N map option = −R115/15/180/50r ; −JA140/35/7.4i NCEP FNL 1.0−degree contour interval: e = 2 K 140˚E 130˚E 120˚E 140˚E 130˚E 120˚E : 20 m/s 160˚E & V at 850 hPa 150˚E e 160˚E 1200 UTC 31Mar2008 150˚E 50˚ N 270 topography: NCEP FNL (1 deg resolution) M. HAYASAKI 2008 Aug 30 16:16:43 2008 Aug 30 16:18:00 /home/viper/office/VL_lecture/script/MTSAT_meteor/NCEP_FNL/SLP.gmt /home/viper/office/VL_lecture/script/MTSAT_meteor/NCEP_FNL/omega_z500.gmt M. HAYASAKI 0 27 | [K/100km] 280 6 300 30˚N e| 8 280 27 0 0 28 40˚N 30 0 28 4 290 0 290 31 0 310 290 130˚E 120˚E /home/viper/office/VL_lecture/script/MTSAT_meteor/NCEP_FNL/EPT850.gmt ´ 160˚E 2008 Aug 30 16:18:40 310 150˚E µ 300 140˚E 20˚N M. HAYASAKI 図 6.6: 2008 年 3 月 31 日 12 時 (世界標準時) における天気図.左上: 海面更正気圧 (SLP),等圧線は 4-hPa 間隔.右上: 500-hPa 面の高度 (実線),鉛直流 ω (カラー),温位 θ (破線).下段: 850-hPa 面の相当温位 θe (実線),水平風 (u, v) (ベクトル),相当温位の水平傾度の絶対値 |∇θe | (赤) 第6章 84 衛星データ解析 (個別データ編) 発展作業 1: 連続表示 (アニメーション) 作業時間に余裕がある場合は,以下の手順で連続表示 (アニメーション的表示) してみよう 1. 作成した PS ファイルを PNG 画像に変換 (convert ps2png.sh) 2. PNG 画像を画像表示ソフト eog で表示 発展作業 2: 結果の解釈 (気象概況の把握) 以下は解析期間前後の気象概況である.作図結果を見て,総観気象場を把握しておこう • 3 月 29 日から 30 日にかけて,東シナ海∼九州南部で南岸低気圧の発生 • 3 月 31 日から 4 月 1 日にかけて,日本列島の南海上を急速に発達しつつ東進 (中心気圧は 24 時間 (31 日∼1 日の 00 UTC) で 46 hPa 低下) • 爆弾低気圧の通過時,太平洋岸を中心に真冬並みの気温.日本列島の広い範囲で強風 6.3.4 作業 2: MTSAT 雲画像と気象要素の複合解析 MTSAT-1R の赤外チャンネルの等価黒体温度 (equivalent black-body temperature; TBB) を用いて, 爆弾低気圧の発生∼急発達∼最盛期の雲画像を作成する.TBB データには,SLP や相当温位,渦位な どの気象要素も重ねて表示する. ¶ 作業手順 ³ 1. IR1 および IR3 TBB(バイナリデータ) の読み出し 2. NCEP FNL データから必要気象要素を読み出し (一部は作業 1 で実行済み) 3. GMT による作図 (IR1 TBB and SLP ; IR3 TBB and 2 PVU Z) 作業ディレクトリ $mtsat home = $HOME/gms_meteor/MTSAT/ (下記 1 のみ作業 1 と同じ) 実行順は以下の通り: 1. $ncep_home/exec_dump_2pvu.sh の実行 , 2. 00dir_ready.sh の実行 (作業ディレクトリの一括作成), 3. compile_count2tbb.sh の実行 (カウント値読み出しの Fortran ソースコンパイル), 4. count2tbb.sh の実行 (IR のカウント値を TBB に変換), 5. SLP-IR1.gmt の実行, 6. Z_2PVU-WV.gmt の実行 作図結果 (PS および PDF ファイル) は, /work/MTSAT/PS/ 以下の要素別ディレクトリに出力される. µ ´ 6.3. 応用解析 3: 静止気象衛星と客観解析気象データの組合せ 85 使用プログラムの概要 1. IR1, IR3 のカウント値を TBB に変換: count2tbb.sh 本節では,IR1, IR3 のみ使用.データのフォーマットや読み出し方法に関しては ??節 (p.??) を参 照.本節では TBB への変換用プログラムを Fortran 90 にて作成している (count2tbb.F90) が, 内部の処理内容は C 言語版 (count2tbb.c) とほぼ同じ 2. 必要要素を wgrib で切り出し,GRIB →バイナリ変換,Fortran で作図用バイナリデータに変換 (一部実行済み) 気圧面データ: exec_dump_pres.sh 2PVU 面データ: ※ 作業 1 で実行済み exec_dump_2pvu.sh (内部で dump_2pvu.sh を実行) 3. GMT を用いた対象要素の作図 SLP + IR1: SLP-IR1.gmt 2PVU 高度 + IR3 (WV): Z_2PVU-WV.gmt 0.04 degree interval, 80E − 160W, 60S − 60N ¶ 50˚ N data source: CEReS, Chiba Univ. MTSAT IR1 TBB (10.3 − 11.3 µm) ³ 1200 UTC 31Mar2008 1020 40˚N 300 10 280 00 980 102 260 1000 0 30˚N 1020 240 220 140˚E 130˚E 160˚E 150˚E µ 120˚E 20˚N ´ Options of map projection = −R115/15/180/50r −JA140/35/18.8c 図 6.7: 2008 年 3 月 31 日 12 時 (世界標準時) における MTSAT 雲画像 (IR1 TBB; 陰影部 )と M. HAYASAKI 2008 Aug 30 16:08:11 /home/viper/hayasaki/office/VL_lecture/script/MTSAT_meteor/MTSAT/SLP−IR1.gmt 海面更正気圧 (SLP; 赤実線). 第6章 86 衛星データ解析 (個別データ編) 発展作業 1: アニメーション (Web ブラウザ表示) 作業時間に余裕がある場合は,以下の手順で「アニメーション」を見てみよう 1. 作成した PS ファイルを PNG 画像に変換する (実行スクリプト: mk web MTSATNCEP.sh).Web ブラウザでアニメーション的に閲覧できるよう,表示用 HTML ファイル ( gms meteor anim.html) を Web 表示用ディレクトリ ( /work/00 web/) にコピー 2. Web ブラウザで表示 (/work/00_web/gms_meteor_anim.html) 発展作業 2: 追加の作図・結果の解釈 • 850-hPa 面の相当温位 (θe ) を IR1 画像に重ねて,寒冷・温暖前線の位置と雲分布との対応 関係を調査しよう (作図プログラム: EPT850-IR1.gmt) • 解析期間中の水蒸気画像にみられる大きな特徴は何か? 爆弾低気圧周辺における暗域 (dark shaded area; 乾燥域) に着目し,顕著な変化 (明度の減少,水平方向の拡大・伸長,など) が 見られる場所・時間帯を確認せよ ¶ コラム: 渦位とは ³ 本実習で使用した渦位 (potential vorticity; PV) は,等温位面上における渦位 (isentropic PV) で あり,以下の式で表される: PV ≡ f + ζθ σ (6.2) ここで σ は鉛直安定度の逆数で σ ≡ −1/g ∂p/∂θ ,f はコリオリパラメータ,ζθ は等温位面上にお ける相対渦度ベクトルの鉛直成分である.また,PVU (Potential Vorticity Unit) は渦位の単位の 略式表記である (1 PVU = 1.0 × 10−6 m2 s−1 Kkg−1 ). 定義より,渦位は低気圧性渦度域 (ζθ が正),高緯度域 (f が大) で大きな正の値となる.鉛直分布 は,対流圏だと 1 PVU 以下,対流圏界面で 1.5 ∼ 2 PVU 程度,成層圏は安定度が大 (σ が小) な ために,例えば極域下部成層圏 (100 hPa) では 10 PVU 以上になる (Bluestein, 1993). 本実習では 2 PVU を力学的対流圏界面とし,tropopause folding の有無を見た. 渦位に関してさらに学ぶための参考文献を以下に挙げる: Hoskins et al. (1985) PV を使うなら必携の論文.ただし総ページ数 70 ページ以上 (!) なので, 読むには気合いと根性が必要 二階堂 (1986a); 二階堂 (1986b) Hoskins et al. (1985) 同様,古い論文ではあるが渦位に関して 詳細に解説した和文論文として有名.理論的背景や事例解析など有益な情報が多く,和文論 文としては最重要と言える 小倉 (2000) 低気圧と渦位に関する包括的記述が 4 章にある.和文テキストとしては必携. Santurette and Georgiev (2005) 水蒸気画像と渦位を組合せた解析について,基礎知識から応 用例までを解説.解析範囲はヨーロッパに限定されるが,実例を用いた解説は興味深い µ ´ 6.3. 応用解析 3: 静止気象衛星と客観解析気象データの組合せ 6.3.5 87 作業 3: 3.7 µm 帯差分画像による雲型判別 MTSAT-1R から新設された観測チャンネルが赤外 4 (IR4; 3.7 µm 帯) である.3.7 µm 帯の特徴とし て,以下の事柄が挙げられる: • 短波 (太陽) 放射と長波 (地球) 放射の両方が混在する波長帯 • 夜間については,IR1, IR4, ∆IR4−1 = IR4 − IR1 を併用することで,薄い上層雲 (氷晶雲) 層雲 (水雲) を区別できる可能性がある (図 6.9) 11 や下 雲型判別に際しては 3.7 µm 帯差分画像だけでなく IR1 TBB とも対比しながら注意深くおこなう必 要があるが,かなり大雑把にいえば,以下のように薄い上層雲と下層雲とを判別できる (図 6.9 参照): • ∆IR4−1 が大きな正 ⇒薄い上層雲 • ∆IR4−1 が負 ⇒下層雲 ¶ 作業手順 ³ 2008 年 3 月 31 日 12UTC (21JST) のみを使用. 1. IR1, IR4 TBB (バイナリデータ) の読み出し,ASCII テキストに変換 (IR4 のみ実行) 2. GMT による作図 (diff_IR4-IR1.gmt) 作業ディレクトリ $mtsat home = $HOME/gms_meteor/MTSAT/ 実行順は以下の通り (!!ファイル修正あり!!): 1. compile_count2tbb.sh を一部修正.-DTEXTOUT を付けて (コンパイルオプション EXT_FCFLAGS を変更して) コンパイル,(カウント値読み出し Fortran ソースの再コンパ イル.バイナリ出力だけでなく,テキスト出力も on にする.), 2. count2tbb.sh を一部修正.解析期間を 12Z 31 March 2008 だけに限定し,IR1 および IR4 のカウント値→ TBB の変換を実施a , 3. diff_IR4-IR1.gmt の実行 作図結果 (PS および PDF ファイル) は, /work/MTSAT/PS/diff_IR4-IR1/ 以下に出力される. a テキスト出力を on にしたため,実行速度が極端に遅くなっている.実習時間の都合上,長期解析は行わない µ ´ 使用プログラムの概要 1. カウント値を TBB に変換: count2tbb.sh IR1, IR4 共にテキスト出力.実行速度かなり遅い. 2. GMT による 3.7 µm 帯差分画像の作図: diff IR4-IR1.gmt スクリプト内で IR1, IR4 の TBB を paste で結合,awk で差分値を計算して作図.図の色分けは, 差分値の正・負を強調するために筆者が自作した,かなり特殊なもの12 11 上層の巻雲などのこと.深い対流雲 (積乱雲) のような,雲頂温度が低く分厚い雲は薄い雲とは異なる見え方をする.IR4 の 観測波長帯は,対流圏界面に近い低温域になると,センサーの温度誤差が大きくなるため,差分画像ではノイズ領域 (ドット状パ ターン) として見える 12 本稿の執筆時点で,雲型分類で使用する閾値に一般性は無いように思われる.対象スクリプトでは,対象時刻において差分値 の正負が大雑把に区別できるよう,大きな正: 黒,正: 赤系色,ほぼゼロ: 黄色,負: 灰色,大きな負: 薄い青,と区分. 第6章 88 0.04 degree interval, 80E − 160W, 60S − 60N ¶ data source: CEReS, Chiba Univ. contour interval: 500 m Z < 8 [km] : blue, 8 < Z < 12 [km] : red MTSAT IR3 TBB (6.5 − 7.0 µm) & 2−PVU height [m] 1200 UTC 31Mar2008 90 00 7000 7000 11000 00 0 9000 9090 0000 11000 0 00 10 1000 00 90 9000 0 10 9000 10 40˚N ³ 00 0 50˚ N 衛星データ解析 (個別データ編) 260 8000 250 70 7000 240 12000 0 00 10 11 00 0 9000 30˚N 12000 600 0 00 00 80 100 00 230 11000 9000 10000 12000 220 140˚E 130˚E 160˚E 150˚E µ 120˚E 12000 20˚N ´ Options of map projection = −R115/15/180/50r −JA140/35/7.4i 図 6.8: 図 6.7 と同時刻.ただし,MTSAT 水蒸気チャンネル画像 (IR3 TBB; 陰影部) と 2 PVU M. HAYASAKI 2008 Aug 30 16:08:43 /home/viper/office/VL_lecture/script/MTSAT_meteor/MTSAT/Z_2PVU−WV.gmt 面の高度 (青実線: 8 km 以下,赤実線: 8 – 12 km.500 m 間隔). ¶ ³ µ ´ 図 6.9: 3.8 µm 差分温度と赤外温度による雲型判別 ( 長谷川ほか (2006) より; 原図 は Lilijas (1989)). 6.3. 応用解析 3: 静止気象衛星と客観解析気象データの組合せ 89 ここで,図 6.10 左列を例として大雑把な分類を試みる. 差分画像で見て,低気圧中心の東 (155◦ E, 40◦ N 付近) から南東方向に伸びる黒色域 (∆IR4−1 が大き な正) は,薄い上層雲だと考えられる.また下層雲は,(1) 低気圧中心の北東および東側 (150◦ E より東, およそ 42∼50◦ N の範囲),(2) 台湾南部から 20◦ N に沿って東側,などでみられる灰色部分 (∆IR4−1 が 負,ただしあまり極端な負値にはなっていない) に対応すると考えられる. ¶ degree interval, 80E − 160W, 60S − 60N 50˚ N ³ data source: CEReS, degreeChiba interval, Univ. 80E − 160W, 60S − 60N data source: CEReS, Chiba Univ. MTSAT IR1 TBB (10.3 − 11.3 µm) 1200 UTC 31Mar2008 MTSAT IR4 TBB (3.5 − 4.0 µm) MTSAT−1R IR1 TBB (10.3 − 11.3 µm) 50˚ N 1200 UTC 31Mar2008 MTSAT−1R IR4 TBB (3.5 − 4.0 µm) TBB (K) 40˚N 30˚N 20˚N TBB (K) 40˚N 320 320 300 300 280 280 260 260 240 30˚N 220 240 200 200 220 20˚N 0.04 degree interval, 80E − 160W, 60S − 60N data source: CEReS, Chiba Univ. 140˚E 130˚E 140˚E 130˚E 120˚E Asia ; −R115/15/180/50r −JA140/35/7.4i in GMT plotting Aug 28 17:55:56 M.2008 HAYASAKI /home/viper/hayasaki/office/VL_lecture/script/MTSAT_meteor/MTSAT/MTSAT_IR.gmt /home/viper/hayasaki/office/VL_lecture/script/MTSAT_meteor/MTSAT/MTSAT_IR.gmt 160˚E MTSAT−1R TBB4−1 = IR4 − IR1 150˚E 2008 Aug 28 17:55:45 160˚E 1200 UTC 31Mar2008 150˚E 120˚E MTSAT IR4 − IR1 image 50˚ N Asia ; −R115/15/180/50r −JA140/35/7.4i in GMT plotting M. HAYASAKI TBB4−1 (K) 40˚N 10 5 1 −1 30˚N −5 −10 140˚E 130˚E /home/viper/hayasaki/office/VL_lecture/script/MTSAT_meteor/MTSAT/IR4−IR1_split.gmt 160˚E 2008 Aug 28 18:19:08 150˚E µ 120˚E 20˚N ´ Asia ; −R115/15/180/50r −JA140/35/7.4i in GMT plotting M. HAYASAKI 図 6.10: 2008 年 3 月 31 日 12 時 (世界標準時) における上段左: IR1, 上段右: IR4 (3.7 µm 帯), 下 段: 3.7 µm 帯差分画像 (∆IR4−1 = IR4 − IR1).∆IR4−1 が大きな正 (画面上で黒) の場合は薄い上層雲, 負 (ここではほぼ灰色) の場合は下層雲と考えられる. 第6章 90 衛星データ解析 (個別データ編) 発展作業: 昼間の 3.7 µm 差分,その他 作業時間に余裕がある場合は,以下の事柄を調査・検討してみよう 1. 3.7 µm 帯差分画像を,日中で書いてみるとどうなる? 2. 赤外差分 (IR1 - IR2) と 3.7 µm 帯差分を比較したら,薄い上層雲の見え方は同じ or 違う? 3. 薄い上層雲や下層雲がみられる場所での雲頂温度 (IR1) や気象要素の鉛直プロファイル (気 温 or 温位,水蒸気量など) はどのようになっているか? ※ 2 以後については,特にプログラム・データを用意していないが,元データは配布済み.ここ までで作業したプログラムをコピー・修正すれば,必要データの加工 & 作図は可能なはず. 6.3.6 さらなる応用解析のために MTSAT のデータに気象データを併用することで,ダイナミックな大気現象の一部を見ることが出来 たと思う.講習の最後に,さらなる応用解析で利用すべき or 利用できるかもしれないデータについて 列挙する.実際には各自の研究目的に応じて必要なデータを使うので,参考まで. • MTSAT 以外の衛星データの併用 降水分布 (海上,鉛直プロファイル): TRMM の PR 13 ,海上風: QuickSCAT 14 ,気温・水蒸気・オ ゾン鉛直プロファイルなど: Aqua/AIRS 15 ,さらに高分解能の雲分布: Terra or Aqua /MODIS の可視画像16 ,など • 時間的・空間的に高解像度な格子点気象データの利用 MTSAT の時空間解像度 30-min (北半球) or 1-hourly (全球) & 0.04 ◦ ならばメソスケール現象の 解析も可能だろうが,使用した客観解析気象データの時空間解像度 (6-hourly & 1.0 ◦ ) が明らかに 不十分.気象庁の GPV 予報値17 や数値気象モデル計算値などの併用が望ましい • 地上からの気象観測データの活用 AMeDAS,地上気象官署,高層ゾンデ,ウィンドプロファイラ (WINDAS),降雨レーダーなど 以上. 13 本講習資料の 6.2 節を参照 http://manati.orbit.nesdis.noaa.gov/quikscat/ ; およそ 1 日 2 回の観測だが,空間分解能 25 km ないし 12.5 km の 海上風が得られる.観測誤差は風速が ±4 m/s,風向が 20◦ 程度 15 http://www-airs.jpl.nasa.gov/ 16 本講習資料の 6.1 節を参照 17 GSM (全球モデル) で 0.5◦ ,GSM 日本周辺域 (120 ◦ – 150◦ E, 20◦ – 50◦ N) で 0.2 × 0.25◦ 間隔.MSM (メソモデル) は 0.05 × 0.0625◦ 間隔,3 時間間隔 (p 面データ) で利用可能.詳細は気象業務支援センター参照 http://www.jmbsc.or.jp/ 14 91 付 録A USB ブータブル Linux インストーラ の作成方法 本講習では,Linux のインストールに際して Vine 4.2 のインストール用 ISO イメージを CD-R に焼 いて使用したが,USB メモリから起動してインストールすることも可能である1 近年では,2∼4 GB 程度の USB メモリなら 3000 円も出せば購入できる.インストール後には通常の 外部記憶装置として利用できるので, 「余計なゴミも出さず,バックアップメディアとしても使える」と いう,ちょっと得した気分が味わえる2 . 以下の作業は,間違えるとパソコン内のシステム部分やデータを消失する可能性があります.心配な 人は,熟練者が立ち合いの元で作業された方が良いでしょう. A.1 ブータブル USB メモリの作り方 以下は,Windows XP を使用した CentOS のインストール用 USB メモリ作成方法3 : 1. USB メモリのファイルシステムが FAT32 であることを確認4 2. syslinux-3.71.zip を取得 http://syslinux.zytor.com/wiki/index.php/The_SYSLINUX_Project 3. 取得ファイルの解凍,解凍先の \syslinux-3.71\win32 フォルダに移動 4. コマンドプロンプト上にて,syslinux ドライブ名: ここで指定するドライブ名は,インストール先 USB メモリを指定する. !!絶対に間違えてはいけない!! 5. CentOS の isolinux 以下の全ファイルを USB メモリのルートに置く ftp://ftp.jaist.ac.jp/pub/Linux/CentOS/5.2/os/i386/isolinux/ (32-bit 版) 6. コピーしたファイルのうち,isolinux.cfg を syslinux.cfg に名前変更 7. ISO イメージを USB メモリのルートに置く.CD 版・DVD 版のどちらでも構わないが,USB メ モリの容量が許すなら,DVD 版の方が楽. 以上で USB メモリの準備は終了. 1 本講習で USB メモリからのインストールを選択しなかったのは,使用した計算機の一部が USB ブート非対応だったためで ある.すこし古い計算機だったので... 2 USB メモリの容量が潤沢ならば,USB メモリ上に Linux のシステム領域・ユーザ領域 (/home など) の全てを置いて, 「自 分専用 Linux 環境」を持ち運ぶことも可能である 3 Vine ではインストール用 USB メモリが正常動作しなかった.筆者の方法に間違いがあったのか,それ以外の要因なのかは 特定できず 4 一般に,販売時の USB メモリは FAT32 なので,購入後にファイルシステム変換をおこなっていないのならば問題無し.た だし,FAT32 だと 4 GB 超のファイルを認識できないため,例えば利用予定の DVD ISO イメージが 4 GB 超過していたら, CD ISO イメージやネットワークインストール用 ISO イメージなどを利用することになる.ちなみに,CentOS のインストール 用 DVD ISO イメージは 32-bit 版が約 3.9 GB,64-bit 版が約 4.4 GB である. 付 録A 92 A.2 USB ブータブル Linux インストーラの作成方法 PC 側の準備事項と実行手順 実際にインストールする PC で実施 1. BIOS メニューで USB ブートできるように変更.もし設定項目が無いなら,ここで諦める 2. 準備した USB メモリを対象 PC に挿して起動 3. 起動時はテキストメニューでインストール環境の選択.言語 (japanese),キーボード (日本語キー ボードなら jp106,英語キーボードなら us),インストール先 (通常はハードディスクドライブ) 4. 上記の設定後は,通常のグラフィカルメニューによるインストールが開始 93 付 録B ソースからコンパイルする方法 自分の研究に必要なコマンド・ソフトウェアは,必ずしも RPM パッケージが用意されているわけで はない.その場合には,ソースプログラムを自分でコンパイル・インストールすれば良い. ソースプログラムからコンパイル・インストールする一般的な手順は以下の通り: 1. ソース (tar ボール) を入手 ※ソースの入手元は,ソフトウェアにより異なる 2. 取得したソースを作業領域に展開 3. configure の実行 (インストール先 (–prefix=hogehoge),必要な環境変数やコンパイルオプション (CFLAGS, CPPFLAGS) などに注意) 4. make の実行 (デバッグを容易にするため,必ず make の実行メッセージを出力しておく) 5. root になって make install の実行 最後の make install より前の部分なら,システムに悪影響が出ることは無い.何度失敗しても良いのだ から,自分で手を動かしてやってみよう! ... と,これだけ書いても,Linux の初級者には敷居が高くて出来ないだろう.具体例として,GNU の coreutils のコンパイル & インストールを解説する. 例: coreutils のインストール手順 1. ソース (tar ボール) を入手 coreutils の場合は,RING サーバを使うのが手頃であろう.RING サーバのアドレス http://www.dnsbalance.ring.gr.jp/ このページの真ん中付近にある「毎日更新! ソフトウェアライブラリ」を起点に, 「GNU ツール群」 →「GNU」を選択, 「Index of /archives/GNU」から coreutils/ を選択.最新のファイル (ここ では coreutils-6.12.tar.gz) をダウンロードする. 2. 取得したソースを作業領域に展開 ここでは,作業領域を /work/src/tmp とする ¶ pc01{user}201 % tar xzf coreutils-6.12.tar.gz -C /work/src/tmp pc01{user}202 % cd /work/src/tmp/coreutils-6.12 µ ³ ´ 3. configure の実行 ソースからのコンパイルに慣れていない人は,実行の前に必ず手順を確認する.tar ボールを展開 した作業ディレクトリには,必ず README や INSTALL などのファイルが付属しているはず. 付 録B 94 ソースからコンパイルする方法 コンパイル・インストールするための諸注意が書いてあるので,ざっくりと読む.coreutils の場 合は INSTALL の方. ¶ ³ pc01{user}203 % less INSTALL pc01{user}204 % ./configure --prefix=/usr/local µ –prefix= は,インストール先ディレクトリのベースにあたるところ. ´ configure を実行すると,“checking ” で始まるメッセージがしばらく続く1 .特に問題が無ければ, 最後の表示は以下のようになるはず: ¶ ³ : : (たくさんのメッセージ) : config.status: creating lib/config.h config.status: WARNING: not linking GNUmakefile to itself config.status: executing depfiles commands config.status: executing po-directories commands config.status: creating po/POTFILES config.status: creating po/Makefile µ ´ WARNING っていうのがあるけど,気にしなくてよい.最初は何が成功で何が失敗か分からない ので不安になるだろうが,とにかく make install をするまでは,システムに悪影響が出ることは 無い. 4. make の実行 とにかく make と実行してみる.ダメで元々.ここで,単純に make するのでは無く,make の実 行結果を保存しておく: ¶ ³ pc01{user}205 % make >& compile_err.log > compile.log & µ ´ 「 >& 」 は,エラー部分だけを指定ファイル 1 (compile err.log) に記録.実行結果全体の標準出 力 (画面出力) も指定ファイル 2 (compile.log) に出力. ¶ ³ pc01{user}206 % make check > chk.log & µ ´ Vine の場合,コンパイルは停止することなく終了するはずですが,作成したコマンドの動作が完 全かどうかを make check により確認します. 実を言うと,このソフトウェアの場合は複数箇所で make check に失敗します (chk.log を “FAILED” で検索すると発見できる).本来なら,全ての問題を解決してすっきりしたいところで すが,ざっと見た限り特に critical なエラーとも思えない (make で失敗したわけではない) ので, ここでは無視します2 5. root になって make install の実行 1 ここでは,コンパイルに必要なコマンド・ライブラリ・ヘッダファイルをチェックしている 2 研究や日常業務に追われていると,インストール失敗の原因究明などする時間的余裕がありません.筆者ではコンパイル失 敗のデバッグをする能力が無い,というのも大きな理由ですが,正直に言うと「面倒だから」です 95 ¶ ³ pc01{user}207 % su パスワード: (root パスワードの入力) [root@pc01 root]# make install µ ´ これで configure 時の設定通り,/usr/local/ 以下にインストールされます.もし,いきなりインス トールするのが嫌だったら,-n オプションつきで実行 (make -n install) してみてください.-n オプションがあると,実際にはインストールせず,インストールの手順だけが画面上に出力され ます. インストール先ディレクトリは,コマンド群: /usr/local/bin/ 以下,マニュアル; /usr/local/man/ 以下,などです. 97 付 録C awk, grep, sed クイックリファレ ンス 正規表現 C.1 正規表現 (Regular Expression) とは,文字を柔軟に表すための特殊文字 (メタキャラクタ) である.こ れらの正規表現は,grep, sed, awk などのテキスト編集ツールをフル活用するために,極めて重要な役 割を果たしている. 以下に正規表現の基本要素を挙げる: 正規表現 意味 \ . (ピリオド) * (アスタリスク) ^ (ハット) $ メタキャラクタのエスケープ (通常文字として扱う) {n,m} 直前の文字の n 回以上 m 回までの繰り返し [ ] [^ ] + ? 括弧内の任意の 1 文字に一致.ハイフンで範囲指定も可能 パターン 1\|パターン 2 パターン 1 またはパターン 2 のいずれかに一致 \(パターン\) パターンをグループ化する (\n で参照できる) 改行文字以外の任意の 1 文字 直前の 1 文字の 0 回以上の繰り返しに一致 行の先頭 行の末尾 括弧内の任意の 1 文字に不一致.ハイフンで範囲指定も可能 直前の文字の 1 個以上の繰り返しに一致 直前の文字の 0 または 1 文字に一致 また,利用価値が高いと思われる正規表現の例を以下に挙げる: 正規表現の例 意味 p.t a.*t [a-zA-Z]+ 文字 p で始まり文字 t で終わる 3 文字の文字列 (例: pat, pet, pit, put, pot など) [0-9]+ 1 文字以上の数字の並び 2 文字以上の数字の並び 行頭が大文字から始まる行 [0-9][0-9]+ ^[A-Z] ^$ ^.*$ C.2 文字 a で始まり文字 t で終わる 2 文字以上の文字列 (例: at, ant, abort, adjust など) アルファベットからなる 1 文字以上の文字列 空行 行全体 grep の基本的使用方法 grep は,文字列検索の際に利用される,非対話型テキスト検索ツールである. 付 録C 98 awk, grep, sed クイックリファレンス grep の基本的な使用方法は以下の通り: ¶ ³ grep -e パターン 対象ファイル または grep -f パターンファイル 対象ファイル パターン部分には,各種の正規表現が利用可能である.なお,検索パターン中に半角スペースが含 まれていたり複数の正規表現を使ったりする場合を考慮し,パターン部分はシングルクオートない しダブルクオートで囲むのを習慣づけておくと良い. µ C.3 ´ sed の基本的使用方法 sed は非対話型テキスト編集ツールであり,特にテキストファイル中の文字列置換に利用される事が 多い1 . sed を使った置換 (substitute) の基本的な使用方法は以下の通り: ¶ ³ sed -e 条件 対象ファイル または echo $変数名 | sed -e 条件 または sed -f 条件スクリプトファイル 対象ファイル 文字列 1 を文字列 2 に置換したい場合の書式は以下の通り: sed -e s/文字列 1/文字列 2/フラグ echo $変数名 | sed -e s/文字列 1/文字列 2/フラグ 文字列部分には,各種の正規表現が利用可能.フラグでよく使われるのは,g (global; 1 行中に 2 個 以上文字列 1 があっても,全置換する),n (n 番目にマッチした文字列 1 を置換する),などがある. µ ´ C.4 awk の基本的使用方法 awk の基本的な使用方法は以下の通り: ¶ ³ awk ’ 条件 {実行内容}’ 対象ファイル または awk -f 条件・実行スクリプト 対象ファイル 条件部分には,各種の正規表現が利用可能.実行内容部分でも様々なコマンド実行が可能だが,最 もよく使うのは print ないし printf 文. µ 1 置換以外にも sed が出来ることは数多くあるが,置換を使いこなせれば実用上困らないと思われるため,置換以外の解説は 省略する ´ C.4. awk の基本的使用方法 C.4.1 99 awk で使える演算子 awk では以下のような各種の演算が使用出来る: 演算子 意味 == != < > <= >= && | | +, -, *, / 等しい % ^ 剰余 等しくない 小なり 大なり 以下 以上 かつ (AND 条件) または (OR 条件) 加減乗除 累乗 例 $2 == 273.0 $2 != 180.0 $2 < 14.0 $2 > 300.0 $2 <= 100.0 $2 >= 2.0 $2 >0.0 && $2 < 10.0 $2 < 0.0 | | $2 >10.0 $2 * 100 , ($2 + 100) / 255 $2 % 3 $2^2 101 付 録D D.1 vi コマンドリファレンス 基本操作 (起動・終了・保存,カーソル移動) ¶ ³ ● vi の起動 (コマンドラインで) vi ファイル名 ● vi の終了 :q ないし ZZ ● ファイルへの書き込み (上書き保存) :w ● ファイルへの書き込み (別名で保存) :w new-file [応用例] ・保存して終了 :wq ・強制保存して終了 :wq! ・保存せず強制終了 :q! ● 文字挿入モードへの移行 i (カーソル移動モード時) ● カーソル移動モードへの移行 ESC (挿入モード時) [ "i" 以外で,挿入モード移行に類似・関連したコマンド] ・カーソル位置の右隣から挿入 a ・行末から挿入 A ・行頭から挿入 I ・新規行挿入 ・上書きモード o (カーソルの次行) ; O (カーソルの前行) r (一文字のみ) ; R (連続上書き; ESC で上書きモード終了) ● カーソルの移動 * ← h (backward) * ↓ j (next line) * ↑ k (previous line) * → l (forward) * 行頭へ 0 ("zero") * 行の最後へ $ ("dollar") * 1-word 単位 (前方・後方) E と B * 表示ページ内の先頭行,中央,最終行 * 1 画面進む・戻る CTRL-f , CTRL-b * ファイルの先頭・末尾 1G , G [応用例] 5 行下に移動 = 5j ,8 文字左に移動 = 8h µ H, M, L ´ 付 録D 102 D.2 vi コマンドリファレンス 編集時に利用するコマンド ¶ ³ ● ファイル関連情報,カーソル位置などの表示 CTRL-g (編集ファイル名,全体行数,カーソル位置の行数,がウィンドウ下部に表示) ● アンドゥ :u (直前の実行を取消) ● N 文字削除 Nx (例. 2 文字削除 = 2x) (対象行で,カーソル位置より行末までの文字列を削除 D) ● N 行コピー Nyy (例. 3 行コピー = 3yy) p ● N 行削除 Ndd (例. 3 行削除 = 3dd) ● m 行目から n 行目まで削除 m,ndd (例.10 行目から 15 行目まで削除 = 10,15d) ● 行の連結 J ● 張り付け ● 文字列前方検索 /文字列 ("slash") ● 文字列後方検索 ?文字列 ("question") ※同じ文字列検索を続ける場合,2 回目以降は文字列部分を省略可能 ● コマンドマクロの割り当て (自分用コマンド,のようなもの) :map 文字 実行コマンド (例: 「各行の先頭 4 文字削除して次行に移動」という作業を 文字 Q に割り当てる :map Q 04xj0 ● ファイル挿入 :r insert-filename (挿入ファイル名部分は,相対パス・絶対パスのどちらでも可) ● 文字列の置換 (文字列 1 を文字列 2 に置換) :%s/文字列 1/文字列 2/gc [それぞれの意味] % = おまじない (ex コマンドの実行) s = 置換 (substitute) g = ファイル全体 (global) c = 置換時に確認 (confirm) µ ´ 103 付 録E Intel Fortran のインストール Intel Fortran は,個人的な非商用利用に限れば無償利用可能である.以下に Vine 4.2 でのインストー ル手順を示す.なお,執筆時点での Intel Fortran の最新バージョンは 10.1.018 であるが,Vine 4.2 だ と install.sh によるインストールが出来ないので注意していただきたい1 . なお,本来は Intel Fortran 使用に際しては,使用者本人が Intel のダウンロードサイトに アクセスし,使用許諾書・個人情報取扱い確認書などを自分で確認した上で,メールアドレ スの登録をせねばならない.登録すると,登録したメールアドレス宛にシリアル番号とライ センスファイルが送付されてくる. 従って,本実習で用意したライセンスは継続的に使用しないでいただきたい. ¶ Intel Fortran インストール手順 (1) $ $ $ $ ³ cp -pr (USB メモリのマウント場所)/src/ifort /work/src/. cd /work/src/ifort tar xzf l_fc_p_10.1.008.tar.gz cd l_fc_p_10.1.008/ (su で root になって) # mkdir /usr/local/opt # ln -s /usr/local/opt /opt µ ※標準インストール先をシンボリックリンクで修正 1 ネット上では幾つかの解決策が提示されていたが,筆者がそれらを試した限りでは最新版のインストールが出来なかった ´ 付 録E 104 Intel Fortran のインストール ¶ Intel Fortran インストール手順 (2) ³ # ./install.sh (エラーが表示されるが無視して Enter) ※以後の (1) から (9) は install.sh による画面表示 (1) "1. Install" を選択 (2) "2. Provide the absolute path ...." を選択 (3) "Provide License File" のメニューで,以下を入力 /work/src/ifort/NCOM_L_CMP__NF83-7BDPDRXM.lic ※ ライセンスファイル名の所在を絶対パスで入力 (4) "Would you like to perform ... [yes/no] (no)" で yes と入力 (5) "Which of the following ..." で 1 を入力 ("Typical Install ..." を選択.インストール先は /opt/ 以下. シンボリックリンクを張ってるので,実際には /usr/local/opt/ 以下) (6) Enter 入力後,ライセンス許諾書が表示される. スペースでページめくりし,最後まで読む (7) 許諾書承諾のため,accept を入力 (8) 以後,インストール先ディレクトリの確認画面が 2 回表示される (ifort & idb).どちらも Enter. (9) 終了 # cp /opt/intel/fc/10.1.008/bin/ifortvars.* /etc/profile.d/ ※ PATH, LD_LIBRARY_PATH, MANPATH などを設定するファイルを システム領域に置く. これらは次回ログインから自動実行される. インストール後,ログアウトせずに ifort を使いたければ, $ source /opt/intel/fc/10.1.008/bin/ifortvars.sh とすれば良い. µ ´ 105 付 録F wgrib の使用方法,オプション wgrib 1 は GRIB 形式ファイルの取扱いをおこなうコマンドである.よく利用するオプションと使用 方法の具体例を以下に挙げる: よく利用するオプション -4yr 日付部分の年を 4 桁で表示 (デフォルトは西暦年の下 2 桁のみ表示) -s / -v 実行結果を簡略表示 (-s) ないし冗長表示 (-v) -ieee / -bin / -grib / -text 出力形式の指定. -ieee = IEEE (あいとりぷるいー; 端的にいうとビッグエンディアンバイナリ形式) -bin = バイナリ形式 (CPU に依存するが,最も普及率の高い x86 系 CPU (Intel や AMD の CPU) の場合はリトルエンディアン) -grib = GRIB 形式2 -text = アスキーテキスト形式 -nh / -h ヘッダなし (-nh ; no header) ・ヘッダ付き (-h) の選択.Direct-Access バイナリ (具体的に は,CTL ファイルを用意するだけで GrADS で直接取り扱える形式) に変換する場合,-ieee ない し -bin と -nh オプションを併用すれば良い -append データの追加.例えば,細かく分割された GRIB ファイルを 1 つの GRIB ファイルに結合 する場合に使われる -o ofile 出力ファイル名 (ofile 部分) の指定.相対パス・絶対パスのどちらでも可能 -ncep opn / -ncep rean 変数の参照テーブルの変更.それぞれ,NCEP 現業 (operational) データ / NCEP 再解析 (reanalysis) データ.デフォルトは再解析用のテーブル (-ncep rean).NCEP FNL は現業用オプション (-ncep opn) を使うべき.しかし,よほどマイナーな気象要素でない限り違 いは無い. その他のオプションは,引数無しで wgrib コマンドを実行すれば画面表示される. これらのオプションを使って wgrib を実行すると,例えば以下のような画面表示がされる: 1 http://www.cpc.ncep.noaa.gov/products/wesley/wgrib.html 2 GRIB 形式ファイルを読み込んで GRIB 形式で出力する意味がわからないかもしれないが,意外に『使える』オプションで ある.具体的には以下のような用途で有効である: (1) -append オプションと併用して多数の GRIB ファイルを 1 ファイルに 結合する (ただし 32-bit 機では最大容量 2 GB の制約アリ),(2) 壊れかけた GRIB ファイルの修正 (が可能な時もある),(3) ECMWF が提供する GRIB ファイルを grib2ctl.pl を利用して GrADS から直接アクセスできるようにする (筆者の個人的経 験). 付 録F 106 wgrib の使用方法,オプション ¶ ³ pc01{user}220 % wgrib -ncep_opn -4yr fnl_080401_00_00 1:0:d=2008040100:HGT:kpds5=7:kpds6=100:kpds7=1000:TR=10:P1=0:P2=0:TimeU=1:1000 mb:anl:NAve=0 2:105968:d=2008040100:HGT:kpds5=7:kpds6=100:kpds7=975:TR=10:P1=0:P2=0:TimeU=1:975 mb:anl:NAve=0 3:211936:d=2008040100:HGT:kpds5=7:kpds6=100:kpds7=950:TR=10:P1=0:P2=0:TimeU=1:950 mb:anl:NAve=0 4:317904:d=2008040100:HGT:kpds5=7:kpds6=100:kpds7=925:TR=10:P1=0:P2=0:TimeU=1:925 mb:anl:NAve=0 5:423872:d=2008040100:HGT:kpds5=7:kpds6=100:kpds7=900:TR=10:P1=0:P2=0:TimeU=1:900 mb:anl:NAve=0 : (中略) : 282:23233682:d=2008040100:UGRD:kpds5=33:kpds6=105:kpds7=10:TR=10:P1=0:P2=0:TimeU=1:10 m above gnd:anl:NAve=0 283:23315216:d=2008040100:VGRD:kpds5=34:kpds6=105:kpds7=10:TR=10:P1=0:P2=0:TimeU=1:10 m above gnd:anl:NAve=0 284:23388604:d=2008040100:GPA:kpds5=27:kpds6=100:kpds7=1000:TR=10:P1=0:P2=0:TimeU=1:1000 mb:anl:NAve=0 285:23502718:d=2008040100:GPA:kpds5=27:kpds6=100:kpds7=500:TR=10:P1=0:P2=0:TimeU=1:500 mb:anl:NAve=0 286:23616832:d=2008040100:5WAVA:kpds5=230:kpds6=100:kpds7=500:TR=10:P1=0:P2=0:TimeU=1:500 mb:anl:NAve=0 µ ´ 3 wgrib の実行結果は,コロン ( : ) 区切りで 14 列の文字列である .この 14 列の情報のうち,wgrib を用いた GRIB データの切り出しで比較的よく使われるものを以下にまとめる: ¶ ³ wgrib で得られる GRIB ファイルの情報 1 列目 (番号): GRIB ファイル中でのデータの並び順. 「通し番号」 3 列目 (d=YYYYMMDDHH): 日付・時刻 (YYYYMMDDHH の順.-4yr オプションが無い と,YYMMDDHH となる) 4 列目 (文字列): 変数名.ジオポテンシャル高度: HGT,気温: TMP,東西風: UGRD,南北風: VGRD,ω: VVEL,相対湿度: RH,SLP: PRMSL,など 5 列目 (kpds5=数値): 変数コード.ジオポテンシャル高度: 7,気温: 11,東西風: 33,南北風: 34,ω: 39,相対湿度: 52,SLP: 2,など 6 列目 (kpds6=数値): 鉛直座標の識別コード.p 面: 100,地上 10m : 105,地表面: 1,海面更 正レベル: 102,など 7 列目 (kpds7=数値): 鉛直座標での高度に関する数値.p 面なら気圧 (hPa),地上データなら対 地高度 (m),など 10 列目 (例: 1000 mb): 11 列目 (anl): 鉛直座標の高度情報 (テキスト版) 予報値 (fcst) or 解析値 (anl) 12 列目 (NAve=0): となる µ 平均値を計算するのに用いたデータ数.対象時刻の snap shot なら,NAve=0 ´ 上記の変数名 (4 列目) および変数コード (5 列目) は,GRIB の参照テーブルに一覧が掲載されてい る.また,これら参照テーブルは wgrib コマンドのソースコード wgrib.c 中にもある.詳細は,wgrib.c 内で以下の単語を検索すれば見付けることが出来る: NCEP 再解析データ用の GRIB テーブル: NCEP 現業データ用の GRIB テーブル: parm table ncep reanal parm table ncep opn なお,このテーブル部分はテキストファイル (ファイル名: テーブル名.txt) として配布物中 (6.3.1 節 の 手順通りに実行した場合,$HOME/gms_meteor/NCEP_FNL/GRIB_info/ 以下) にあるので,そちらを参 照しても良い. 3 -s オプションを付けると省略表示となり,1–4 列および 10–12 列の 7 列分だけが表示される 107 ちなみに,NCEP FNL に含まれる要素の GRIB テーブルは, http://dss.ucar.edu/md/datasets/ds083.2/grib.html に記載. wgrib コマンドの具体的な使用例 ¶ ³ ● バイナリに変換するには? wgrib grib_file | wgrib -i grib_file -bin -o binary_file ● 20 番目と 30 番目のデータを出力 (バイナリ形式で) するには? wgrib grib_file | egrep "(^20:|^30:)" | wgrib -i grib_file -bin -o binary_file ● 最初の 10 個分のデータを出力するには?(GRIB format で出力) wgrib grib_file | head -n 10 | wgrib -i grib_file -grib -o new_grib_file ● 500hPa 高度だけを出力するには?(GRIB 形式で出力) wgrib -s grib_file | grep ":HGT:500 mb:" | wgrib -i -grib \ grib_file -o new_grib_file ● 500hPa 高度だけを除外して出力するには?(GRIB 形式で出力) wgrib -s grib_file | grep -v ":HGT:500 mb:" | wgrib -i -grib \ grib_file -o new_grib_file ● 00Z, 12Z だけ取り出したい時には? wgrib -s grib_file | awk -F’:’ ’$3 ~ /00$/ || $3 ~ /12$/ {print $0}’ \ | wgrib -i grib_file -grib -o ofile > /dev/null ● 風 (u,v)・気温 (T) だけを取り出すには?(GRIB 形式で出力) wgrib -s grib_file | egrep "(:UGRD:|:VGRD:|:TMP:)" | wgrib -i -grib \ grib_file -o new_grib_file ● データの範囲 (最大・最小値などの情報) は? wgrib -V grib_file | grep max µ ´ 付 録F 108 wgrib の使用方法,オプション ¶ 応用例: 動作速度を早くするには ? ³ ● あるデータから気温 (TMP) とジオポテンシャル高度 (HGT) など, 複数の変数を取り出して別ファイルに格納する,という作業をすると, かなり時間がかかる. どうやったら実行速度を早められる? 時間がかかる要因として,以下のような手順でデータ取り出ししていると仮定する: wgrib pgb.grb | grep ":TMP:" | wgrib -i pgb.grb -grib -o tmp.grb wgrib pgb.grb | grep ":HGT:" | wgrib -i pgb.grb -grib -o hgt.grb 同じ事をより効率的におこなうには,以下のようにすべき: 例1 wgrib pgb.grb > inventory cat inventory | grep ":TMP:" | wgrib cat inventory | grep ":HGT:" | wgrib rm inventory -i pgb.grb -grib -o tmp.grb -i pgb.grb -grib -o hgt.grb つまり,最初にデータリスト (ファイル名:invent) を作り, それを参照して dump すれば,wgrib の実行回数を減らせるので動作が早くなる. さらに動作を早くすには,以下のようにしてみよう: 例2 wgrib pgb.grb > inventory cat inventory | grep ":TMP:" | wgrib cat inventory | grep ":HGT:" | wgrib rm inventory -i pgb.grb -grib -o tmp.grb > /dev/null -i pgb.grb -grib -o hgt.grb > /dev/null 画面表示が抑制される (null デバイスに流す) ため,実行に要する時間がより短く済む. µ ´ 109 参考文献 二階堂義信, 1986a: Q-map(等温位面上で解析された渦位分布図) – その 1 Q-map の原理 –. 天気, 33, 289–299. 二階堂義信, 1986b: Q-map(等温位面上で解析された渦位分布図) – その 2 Q-map の実際 –. 天気, 33, 300–331. Bluestein, H. B., 1993: Synoptic-Dynamic Meteorology in Midlatitudes. Vol. II Observations and Theory of Weather Systems, Oxford University Press, New York, 594pp. Bolton, D., 1980: The computation of equivalent potential temperature. Mon. Wea. Rev., 108, 1046–1053. 長谷川隆志, 上田文夫 柿本太三, 2006: 気象衛星画像の見方と使い方. オーム社, 208pp. Hoskins, B. J., M. E. McIntyre, and A. W. Robertson, 1985: On the use and significance of isentropic potential vorticity maps. Quart. J. Roy. Meteor. Soc., 111, 877–946. Lilijas, E., 1989: Experience of an operational cloud classification method. 4th AVHRR DATA USERŚ MEETING, Rothenburg, F. R. Germany, 5-8 September 1989, 73–78. 小倉義光, 2000: 総観気象学入門. 東京大学出版会, 289pp. Santurette, P., and C. G. Georgiev, 2005: Weather Analysis and Forecasting Applying Satellite Water Vapor Imagery and Potential Vorticity Analysis. Elsevier Academic Press, 179pp.
© Copyright 2024 Paperzz