# coding: cp932
# 実行方法：
#   $ ruby sample_pv.rb [温位 [アニメーション間隔 [最初の日付 [最後の日付]]]]
# 実行例：
#   $ ruby sample_pv.rb
#   $ ruby sample_pv.rb 700
#   $ ruby sample_pv.rb 320 2
#   $ ruby sample_pv.rb 320 0 14 20
#  
require "numru/ganalysis"
require "numru/ggraph"
include NumRu

#< コマンドラインオプション >
theta = ( ARGV[0] || 320.0 ).to_f   # 温位面を指定
tsleep = [ ( ARGV[1] || 1 ).to_f, 0.0 ].max  # 第2引数は描画間隔(秒)
fday = ( ARGV[2] || 10 ).to_i  # 第3引数は最初の日付(1月何日か)
lday = ( ARGV[3] || 22 ).to_i  # 第4引数は最後の日付(1月何日か)
wait = ( tsleep <= 0.0 )       #->true/false; 0以下(true)ならマウスクリックを待つ
theta_levs = [theta]

#< 決め打ちの定数 >
iws = 1

#< 使用データ >
cut = {"lat"=>0..90,   # 表示する範囲にあわせて制限しておくと無駄な計算が減る
       # "level"=>1000..100,    # 高度制限（計算可能な温位の範囲は減るが）
       "time"=>Date.new(2012,1,fday)..Date.new(2012,1,lday)}
tmp = GPhys::IO.open('air.2012-01.nc', 'air').cut(cut)
u = GPhys::IO.open('uwnd.2012-01.nc', 'uwnd').cut(cut)
v = GPhys::IO.open('vwnd.2012-01.nc', 'vwnd').cut(cut)

theta = GAnalysis::Met.temp2theta(tmp)   #  温位をもとめる
pv = GAnalysis::Met.pv_on_theta(u, v, theta, theta_levs)  # PVをもとめる

#< 描画準備 >
DCL.sgscmn(10)              # カラーマップ番号指定
DCL.swpset("iwidth",500)   # 画面の幅
DCL.swpset("iheight",500)  # 画面の高さ
##DCL.swpset("ldump",true) # 画像ファイルダンプ
DCL.swpset("lwait",wait)   # 次の描画の前にマウスクリックを待つ
DCL.swpset("lalt",true)    # 裏で描画（パラパラアニメ用）
DCL.gropn(iws)             # DCL描画装置初期化 (iws=1,2,or 4)
DCL.sgpset('isub', 96)     # 下付き添字を表す制御文字を '_' から '`' に
                           # (アンダースコアはよく使われるので，エラー防止のため)
DCL.glpset('lmiss',true)   # DCLの欠損値処理を on に．

GGraph.set_fig "itr"=>32,"viewport"=>[0.05,0.81,0.12,0.88]  # 32:正距方位図法
GGraph.set_map "coast_world"=>true 

#< 描画 >
nt = pv.shape[-1]
for it in 0...nt
  GGraph.tone pv[false,it].cut("lat"=>0..87.5),true,    # 極を除いて描画
     "keep"=>(it!=0)      # "keep"=>true で前回のカラーマップをそのまま使う
  GGraph.color_bar
  sleep tsleep
end
DCL.grcls

