about GDCL
0. 目次
1. 概要
1.1. GDCL とは
GDCL とは NetCDF ビューアである.
NetCDF とは
多次元データのデータ形式の1つで、大気・海洋の分野でよく使われているデータ形式である.
NetCDF 形式の多次元データファイルを,DCL の描画ライブラリを用いて可視化することができる.
GUI (グラフィックユーザーインターフェース) であるので,
ユーザーは Gtk+ によって作られるウィジェット (ウィンドウやボタン等) をマウス操作と多少の文字入力
という直観的な操作で,NetCDF 形式の多次元データを扱い,可視化することができる.
ただし NetCDF 形式データの生成については,GDCL は関係していない.
図1:GDCL の スクリーンショット
1.2. GDCL で現在実行できること
GDCL は以下のような機能を実装している.
- 変数の選択
- 2次元データのグラフ化
- 3次元データのコンター図化
- 球面への投影
- タイトル,欠損値の設定
- 軸の設定(タイトル,単位)
- 描画を動画にして表示
- コンターのトーン設定
- 絵のサイズ変更
- データの属性値を見る
- 絵の保存
- 絵をRuby/DCLコードで保存
1.3. まだできないこと
などなど.
2. GDCL の構成
GDCL の構成について自分なりの解釈を書いてみた.
図2:GDCL の構成
GDCL はユーザーがマウス操作などで直接対話するものを担っている部分
(■)と,
ユーザーが知っている必要はないがデータ読み込みや数学的処理,グラフィック処理など
をしている部分(■)に分けることができる.
前者は Gtk+部分(■)であり、
後者は DCL 部分(■)
と NetCDF 部分(■)からなっている.
- Gtk+ 部分 (ユーザーインターフェース)
- DCL 部分 (数学的処理,グラフィック処理)
- NetCDF部分 (NetCDF 形式データの読み込み)
2.1. GTK+ 部分
- Gtk+
- Gtk 本体にオブジェクト指向的要素が加わったものと Gdk の2つから成る.
ウィジェットは継承やシグナルの機能をもつ.
バージョン 1.2 は GLib1.2 のみに依存しているが
バージョン 2.0 になると国際化を考慮した作りになり,
Glib2.0 の他, pango, atkを必要とする.
- Gtk (GIMP Tool Kit)
- ウィンドウのボタン,ラベルなどのウィジェットを持っている.
すべてのウィジェットは単階層で継承の機能は持たない.
ウィジェットの操作はコールバックで行う.
- Gdk (GIMP Drawing Kit)
- グラフィックス描画のためのライブラリ.
XLibをラップする部分と,GLibのユーティリティ関数からなる.
- GLib
- リンクドリストや汎用データ型などサポートするユーティリティ関数の
ライブラリで移植性の問題を解決している.
バージョン 2.0 からはオブジェクト指向プログラミングの実装を GLib が行っている.
コンパイルに pkg-config を必要とする.
- Imlib
- 多くのフォーマットに対応した画像ファイルの読み込みとレンダリングの機能を持ったライブラリ.
画像の拡大縮小での表示がきれいにできる.
- Ruby/Gtk
- Ruby で Gtk+ の大部分を扱える.
- Ruby/Imlib
- Ruby/Imlib は Ruby/Gtk 0.22 以上に依存している.
2.2. DCL 部分
- DCL
- 地球流体関係者が長年にわたり蓄積してきた Fortran 77 ベースの
グラフィック, 文字処理, 数値基礎処理ライブラリ.
DCL(C),Ruby/DCL,または DCL(F90) の最下層にあたり,機能拡張の根源である.
- DCL(C)
- DCL を f2c で C言語に翻訳したもの.
GDCL ではこれを GTK+ から利用できるようにパッチを当てたものを使う.
- Ruby/DCL
- DCL(C) の Rubyラッパー. (DCL-C がなくても機能する!?)
GDCL ではこれを GTK+ から利用できるようにパッチを当てたものを使う.
2.3. NetCDF 部分
- NetCDF
- NetCDF 形式のデータを扱う.
この形式のデータは NetCDF 形式に基づき,データそのものにデータの持つ属性,
振る舞いが記述されている.
- Ruby/NetCDF
- NetCDF を Ruby で記述できるようにしたもの.
- NArray
- Rubyの浮動小数配列クラス.
浮動小数のみを扱う配列のため,実行速度が標準の配列 Array よりかなり速い.
- FFTW
- 高速フーリエ変換用ライブラリ. NArray はこれを使うことができる.
3. インストール方法 : ソースからコンパイルする方法
3.1. Ruby 部分
Ruby 本家からソースをダウンロードしてコンパイルする.
$ tar zxvf ruby-1.6.8.tar.gz
$ cd ruby-1.6.8
$ ./configure
$ make
# make install
$ ruby -v
3.2. Gtk+ 部分
- Gtk+
- Gtk+ 本家から ソースをダウンロードしてコンパイルする.
Gtk+-1.2 のコンパイルは, Glib-1.2 (これには pkgconfig というものが必要 )に依存する.
GDCL は Gtk+-2.* に対応していないので必ず バージョン 1.2 を使うこと.
( GDCL だけでなく DCL の Gtk 対応版も 1.2 に基づいている. )
- Imlib
- gnomeからソースをダウンロードして
コンパイルする。コンパイル時に TIFF や GIF を要求するので適宜インストールする.
( 面倒なので libtiff3g-dev, giflib3g-dev という Debian パッケージを用いた. )
- Ruby/Gtk
- SourceForge のダウンロードページから取得するのだが, ruby-gtk ではなく
ruby-gnome-allを使うとよい. なぜなら,これで Ruby/Imlib も入るからである.
- Ruby/Imlib
- Ruby/Imlib 単体を入れる場合, まず ruby-gnome-all をダウンロードする.
展開後, いくつかのディレクトリが作成されるうち gdk_imlib に移動する.
その中の extconf.rb を実行し Makefile を作成しコンパイルする.
3.3. DCL 部分
Dcl は Gtk+ から呼び出せる用にするパッチをあてたものを使わなければならない.
ソースおよびインストール方法は西澤さんの
「GDCL関連のインストール」
に詳しく書いてある.
3.4. NetCDF 部分
- NArray
- RAA から NArray のソースをダウンロードしてコンパイルする.
手順は通常のRubyライブラリと同じだが「電脳 Ruby 〜
いんすとーる編」
にも詳しくかいてある.
注意するべき点は,FFTW を必要とする点である. なくてもコンパイルはできてしまうが.
- NetCDF, Ruby/NetCDF
- ソースおよびインストール方法は,「電脳 Ruby 〜
いんすとーる編」
に詳しくかいてある.
3.5. GDCL 本体
ファイル( gdcl-0.5.7.tar.gz ) を西澤さんの
「GDCL関連のインストール」からもらってくる.
インストールは,install.rb スクリプトを用いて,Ruby指定のディレクトリにインストールする.
gdcl.rb は デフォルトでは /usr/local/bin にインストールされるので,パスが通っていることを確認して実行する.
$ wget http://www-mete.kugi.kyoto-u.ac.jp/seiya/dcl/tarball/gdcl-0.5.7.tar.gz
$ tar zxvf gdcl-0.5.7.tar.gz
$ cd gdcl
# ruby install.rb
$ gdcl.rb
4. インストール方法 : Debian パッケージを使う方法
以下のパッケージは 正式な Debian パッケージがないため自分で作ったものである.
ソースからコンパイルする気がなければ使うと楽かも知れない.
ただし,この後の文章は一部これらを使うことを前提にしている.
パッケージ名の前の記号「◎」は GDCL を動かすのに必要なパッケージを表す.
「□」は GDCL を動かすのに直接必要ではないが(個人的には)あると便利であると思われるパッケージを表す.
「△」は,ソースからコンパイルする際には必要となるヘッダファイルを含むパッケージを表すので,
ここでは特に必要の無いパッケージである.
パッケージ名にリンクが貼っていないものは Debian ミラーサイトからファイルをダウンロードするか
apt や dselect を用いてインストールして下さい.
4.1. Ruby 部分のインストール
- ◎ ruby
- Ruby インタプリタ.
- ◎ libruby
- Ruby を動かすために最低限のライブラリ.
- △ ruby-dev
- NArray, Ruby/DCL, Ruby/NetCDF, Ruby/Gtk+ をソースからコンパイルする際に必要となる.
- □ ruby-elisp
- Emacs で ruby-mode を使うためのパッケージ.
Ruby プログラムの色分けやインデント調整を行なってくれる.
4.2. Gtk+ 部分
- ◎ libgtk-ruby
- Ruby/Gtk+ を利用するためのライブラリ. libgtk1.2, libglib1.2, libruby などに依存している.
- ◎ libgdk-imlib-ruby
- Ruby/Imlib を利用するためのライブラリ. gdk-imlib1, libgtk-ruby などに依存している.
このパッケージの安定版バージョンは 0.25 である.
バージョン 0.25 では メソッド( GdkImlib::Image::create_from_drawable )が無いため GDCL は
描画したイメージの保存ができない.
そのため不安定版バージョン 0.33 を用いるか,新しいソースをコンパイルしなければイメージの保存ができない. )
- △ libgtk1.2-dev
- cdcl-gtk, ruby-dcl-gtk をコンパイルする際に必要.
- △ gdk-imlib-dev
- cdcl-gtk, ruby-dcl-gtk をコンパイルする際に必要.
4.3. DCL 部分
- ◎ ruby-dc (1.2.2)
- Ruby/DCL の Gtk+ を利用できるようにしたもの.
- ◎ cdcl-gtk (5.2-8)
- DCL の Gtk+ を利用できるようにしたもの.
ただし gdcl-2 を入れる場合必要ない.
Ruby/DCL をソースからコンパイルする際には必要になる.
- △ g77
- cdcl-gtk をソースからコンパイルする際は必要.
4.4. NetCDF 部分
- ◎ ruby-narray
- NArray
- ◎ ruby-netcdf
- Ruby/NetCDF
- □ netcdf-bin
- ncdump 等の NetCDF 支援ツール. netcdf3g に依存する.
- △ ruby-narray-dev
- ruby-netcdf をコンパイルする際に必要.
- △ netcdf3g
- Ruby/NetCDF を使う際は必要ないが,netcdf-bin を使う際に必要.
- △ netcdfg-dev
- ruby-netcdf をソースからコンパイルする際に必要.
- △ fftw2
- 高速フーリエ変換を NArray で使うなら必要.
- △ fftw-dev
- narray を正しくコンパイルしようとするなら必要.
4.5. GDCL 本体
- ◎ gdcl_0.5.7
- gdcl の本体
4.6. GDCL を最小構成で入れるには
Debian 3.0 環境下に,とりあえず GDCL を動かすには以下の
パッケージを順に入れればよい.
- ruby : Ruby インタプリタ (同時に Ruby ライブラリ も入る)
- ruby-narray : NArray ライブラリ
- libgdk-imlib-ruby : RubyImlib (同時に Ruby/Gtk+ も入る)
(注)
- dcl-c : DCL(C) for Gtk+
- ruby-dcl : Ruby/DCL for Gtk+
- ruby-netcdf : Ruby/NetCDF
- gdcl : GDCL 本体
5. 使用方法
5.1. NetCDF ファイルの準備
ここでは例として,気候分析センターのホームページにある,
2003年の Sea Level Pressure を用いた.
5.2. GDCL を起動する (メインウィンドウ,ファイル選択ウィンドウ)
GDCL を起動しファイルを選択する.
$ gdcl.rb
または,ファイル名を指定して起動する.
$ gdcl.rb slp.2003.nc
すると次のようなウィンドウが開く.
図3:メインウィンドウ
このメインウィンドウから描画を指定したりや他のウィンドウを開いたりする。
5.3. 描画
図4:Variable の選択
メインウィンドウの Variable から air を選択し,Axis(x) と Axis(y) を選択をした。
図5:描画ウィンドウ
draw ボタンをクリックしすると描画が始まる.
(このとき Ruby/DCL ライブラリの dcl.rb を使っている. )
6. 参考文献
最終更新日 : 2004-01-08