[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:003760] gpview & ¤



竹広様:

樫村です。
gpview の修正と改造をいくつか行ったので、本家導入をご検討いただけたら幸いです。
パッチと適用後のファイルを添付します。
以下の6点にまとめて対応したパッチなので、見づらいかも知れませんがご容赦ください。


1】 --tone [a | e | f | b | c] オプションが効かない問題
・781行目 if ($OPT_tone) 以下の変数名と draw関数内での変数名が異なっており、--toneオプションが機能していませんでした。


2】1度に複数枚描く(--anim 除く)ときに絵が徐々に上にずれる問題(これは仕様なのかもしれませんが)
・[> gpview T.nc@T U.nc@U] などのように複数のgturlを与えて、連続して絵を描いたときに、
GGraph.margin_info が複数回呼ばれ、この中で、DCL.slmgn(xl, xr, yb, yt) が何度も呼ばれるのが原因のようです。

回避策として、$flag_marginを用意して、2回目からは DCL.slsttl(gturl, 'b',  1.0, -1.0, 0.008, 2) だけ呼んで
右下のマージンinfoを更新するようにしました。
ただし、この場合、文字の高さが固定(GGraph.margin_infoでは文字数が多い場合に調節している)なので、美しくないです。
本来はGGraph.margin_infoが複数回呼ばれてもよいようにすべきかも知れません。


3】差をとるオプション(--diff)の追加
・[> gpview T1.nc@T T2.nc@T --diff] などとするとT1.ncとT2.ncの差を計算して表示するようにしました。
与えるgturl は偶数でなければなりません。[> gpview {T1,T2,T3,T4}.nc@T —diff] は T1 - T2 と T3 - T4 を表示します。


4】変数名を省略可能に
・@変数(または--var)がない場合に、ファイル内の変数(軸除く)を読み取って、@変数を補うようにしました。
例えば [> gpview T1.nc] だけで描画されます。[> gpview T1.nc,lon=0] なども可。
また、1つのファイルに複数の変数が入っている場合は、全ての変数を順々に描画します。


5】描画範囲指定時の軸の一般名 ax0, ax1,…を導入
・描画の範囲指定するときに、正確な軸名を(調べて)入力するのが手間なので、
ax0で第0軸、ax1で第1軸、… に置き換わるようにしました。
関数 find_axisnames(gturl) として実装。"ax” 部分はプログラム冒頭で定数AXで定義しているので、
“ax”という文字列が問題有りなら、ここを変えるだけで対応できます。


6】上述の軸の一般名 ax0, ax1,...を mean, stddev, eddy, anim でも使用可能に
・これらのオプションは既に数字(0, 1, 2,..)で軸を指定できますが、ax0なども
使えたほうが気持ちいいかと思いましたので、実装しました。

以上。

これらは地球システムモデルの出力データとERAなどの再解析データを比較する際の手間を減らすために導入しました。
モデルデータと ERAで変数名や軸名が違ったり、軸名がGTLON128とかSTDPL18やECMANLP23などと長かったりしたので、
【4〜6】を導入してみました。

例えば、モデルデータが model/  再解析データが era/ というディレクトリにあれば、
[> gpview {model,era}/u,ax2=10 --diff] などで10hPa面の差分が描けるようになります。


ご検討いただけたら幸いです。

Attachment: gpview.patch
Description: Binary data

Attachment: gpview_mod
Description: Binary data

樫村(山本)博基
hiroki@xxxxxxxxxxxxxx