about GAVE
0. 目次
1. 概要
1.1. GAVE とは
GAVE とは NetCDF ビューアである.  
NetCDF とは
多次元データのデータ形式の1つで、大気・海洋の分野でよく使われているデータ形式である.
NetCDF 形式の多次元データファイルを,DCL の描画ライブラリを用いて可視化することができる.  
GUI (グラフィックユーザーインターフェース) であるので,
ユーザーは Gtk+ によって作られるウィジェット (ウィンドウやボタン等) をマウス操作と多少の文字入力
という直観的な操作で,NetCDF 形式の多次元データを扱い,可視化することができる.  
ただし NetCDF 形式データの生成については,GAVE は関係していない.  
図1:GAVE の スクリーンショット
1.2. GAVE で現在実行できること
GAVE は以下のような機能を実装している. 
	- 変数の選択
- 2次元データのグラフ化
- 3次元データのコンター図化
- 球面への投影
- タイトル,欠損値の設定
- 軸の設定(タイトル,単位)
- 描画を動画にして表示
- コンターのトーン設定
- 絵のサイズ変更
- データの属性値を見る
- 絵の保存
- 絵をRuby/DCLコードで保存
1.3. まだできないこと
などなど.  
2. GAVE の構成
GAVE の構成について自分なりの解釈を書いてみた.
図2:GAVE の構成
 
GAVE はユーザーがマウス操作などで直接対話するものを担っている部分
(■)と,
ユーザーが知っている必要はないがデータ読み込みや数学的処理,グラフィック処理など
をしている部分(■)に分けることができる. 
前者は 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言語に翻訳したもの.  
		GAVE ではこれを GTK+ から利用できるようにパッチを当てたものを使う.  
- Ruby/DCL
- DCL(C) の Rubyラッパー.  (DCL-C がなくても機能する!?)
		GAVE ではこれを 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 というものが必要 )に依存する.
		GAVE は Gtk+-2.* に対応していないので必ず バージョン 1.2 を使うこと.
		( GAVE だけでなく 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+ から呼び出せる用にするパッチをあてたものを使わなければならない.  
ソースおよびインストール方法は西澤さんの
「GAVE関連のインストール」
に詳しく書いてある.  
3.4. NetCDF 部分
- NArray
- RAA から NArray のソースをダウンロードしてコンパイルする.  
	手順は通常のRubyライブラリと同じだが「電脳 Ruby 〜
	いんすとーる編」
	にも詳しくかいてある.  
	注意するべき点は,FFTW を必要とする点である.  なくてもコンパイルはできてしまうが.  
- NetCDF, Ruby/NetCDF
- ソースおよびインストール方法は,「電脳 Ruby 〜
		いんすとーる編」
		に詳しくかいてある.  
3.5. GAVE 本体
ファイル( gave-1.0.0-beta2.tar.gz ) を西澤さんの
「GAVE関連のインストール」からもらってくる.  
インストールは,install.rb スクリプトを用いて,Ruby指定のディレクトリにインストールする.  
gave は デフォルトでは /usr/local/bin にインストールされるので,パスが通っていることを確認して実行する.  
$ wget http://www-mete.kugi.kyoto-u.ac.jp/seiya/dcl/tarball/gave-1.0.0-beta2.tar.gz
$ tar zxvf gave-1.0.0-beta2.tar.gz
$ cd gave
# ruby install.rb
$ gave
4. インストール方法 : Debian パッケージを使う方法
以下のパッケージは 正式な Debian パッケージがないため自分で作ったものである.  
ソースからコンパイルする気がなければ使うと楽かも知れない.  
ただし,この後の文章は一部これらを使うことを前提にしている.  
パッケージ名の前の記号「◎」は GAVE を動かすのに必要なパッケージを表す.  
「□」は GAVE を動かすのに直接必要ではないが(個人的には)あると便利であると思われるパッケージを表す.  
「△」は,ソースからコンパイルする際には必要となるヘッダファイルを含むパッケージを表すので,
ここでは特に必要の無いパッケージである. 
パッケージ名にリンクが貼っていないものは 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 )が無いため GAVE は
	   描画したイメージの保存ができない.  
	   そのため不安定版バージョン 0.33 を用いるか,新しいソースをコンパイルしなければイメージの保存ができない.  )
- △ libgtk1.2-dev
- dcl-c, ruby-dcl を Gtk 付きでコンパイルする際に必要.  
- △ gdk-imlib-dev
- dcl-c, ruby-dcl を Gtk 付きでコンパイルする際に.  
4.3. DCL 部分
- ◎ ruby-dc (1.2.2)
- Ruby/DCL の Gtk+ を利用できるようにしたもの.  
- ◎ dcl-c (5.2.3)
- DCL の Gtk+ を利用できるようにしたもの.    
- △ g77
- dcl-c をソースからコンパイルする際は必要.  
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. GAVE 本体
- ◎ gave
- gave の本体
4.6. GAVE を最小構成で入れるには
  
Debian 3.0 環境下に,とりあえず GAVE を動かすには以下の
パッケージを順に入れればよい.  
    - 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
- gave : GAVE 本体
5. 使用方法
5.1.  データ準備
CDC/NOAA
ECMWF / ERA40(データは塚原さんがERA40からダウンロードしたものを使わせていただいた.)
5.2. 起動 (メインウィンドウ,ファイル選択ウィンドウ)
GAVE を起動しファイルを選択する.  
$ gave.rb
または,ファイル名を指定して起動する.  
$ gave.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