#!/usr/bin/env ruby
=begin
= mkfig_25time_series.rb -- make time-series figure of resid. mean circulation's width at 500 hPa

残差循環 質量流線関数
  
=end

require "getopts"        # for option_parse
require "numru/ggraph"
include NumRu
include Misc::EMath

## 描画メソッドメイン

def plot_line_main(gphys_array)
  
  line_index_ary = Array.new; name_ary = Array.new

  default_index = 12
  
  line_hash = { "index"=> default_index }
  line_index_ary.push(default_index)
  name_ary.push(gphys_array[0].data.get_att("long_name"))
  
  x = gphys_array[0].coord(0).val
  y = gphys_array[0].data.val
  DCL.uulinz(x, y, 1, default_index)
  gphys_array.size.times{ |num|
      unless num == 0
	line_index = (num*10 + default_index)
	line_index_ary.push(num*10 +default_index)
	name_ary.push(gphys_array[num].data.get_att("long_name"))
	x = gphys_array[num].coord(0).val
	y = gphys_array[num].data.val
	DCL.uulinz(x, y, 1, line_index)
      end
  }
  
  return name_ary, line_index_ary
  
end



##-----------------------
#  ラインインデックスの種類を表示

def __show_line_index(str_ary,line_index_ary, x=0.15, y=0.12) 
  charsize = 1.0 * DCL.uzpget('rsizec1')
  dvx = 0.01
  dvy = charsize*1.5
  raise TypeError,"Array expected" if ! str_ary.is_a?(Array)
  vxmin,vxmax,vymin,vymax = DCL.sgqvpt
  vx = x
  vy = y + charsize/2
  str_ary.size.times{|num|
    DCL::sgtxzv(vx,vy,"--- #{str_ary[num]}", 
		  charsize, 0, -1, line_index_ary[num])
      vy -= dvy
      if num == 5
	vx = 0.30
	vy = 0.12 - charsize/2
      end
  }
    nil
  end



################################################################
#                        make gphys 
################################################################
year = [1979, 2003]
month = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]   # 初期値 


## make compisit-GPhys object 
# make array which set the gphys objects.

axmonth = []
i = 0

strm_rmean_name = ""
strm_rmean_unit = ""

strm_rmean_at_500hPa = []

year[0].upto(year[1]) do |y|
  month.each do |m|
    path = "../../../STRM_RMEAN.NCEP/STRM_RMEAN.#{y}.NCEP/STRM_RMEAN_#{y}-#{m}_NCEP.nc" # stream function

    gp_strm_rmean = GPhys::NetCDF_IO.open(path, 'strm_rmean').cut('lat'=>45..-45)

    va_strm_rmean_at_500hPa = gp_strm_rmean.cut( 'level'=>500  ).data.copy
                     
    strm_rmean_at_500hPa << va_strm_rmean_at_500hPa.reshape!(1, *va_strm_rmean_at_500hPa.shape)
		                           
    strm_rmean_name =      gp_strm_rmean.data.name
    strm_rmean_unit =      gp_strm_rmean.data.get_att("units")

    axmonth << DCL::dateg3(year[0],1,1,y.to_i,m.to_i,1)
    i += 1
  end
end


  namonth = NArray.to_na(axmonth)
  axmonth = Axis.new(true).set_cell_guess_bounds(VArray.new(namonth).rename!("month")).set_pos_to_center

    
### for width
  va_strm_rmean_at_500hPa = VArrayComposite.new( NArray.to_na( strm_rmean_at_500hPa ) )
  va_strm_rmean_at_500hPa.set_att('long_name', 'Deviation of Mass strean function at 500 hPa (1979-2003)')

  strm_rmean_path = "../../25MEANS.NCEP/25MEANS.1979-2003.NCEP/100hPa_PHYS_1979-2003_ANNUAL_NCEP.nc"
  gp_strm_rmean_at_500hPa_climat = GPhys::IO.open(strm_rmean_path, "strm_rmean").cut('lat'=>45..-45, 'level'=>500)
  axlat = gp_strm_rmean_at_500hPa_climat.axis('lat')
  gp_strm_rmean_at_500hPa = GPhys.new( Grid.new(axmonth, axlat), va_strm_rmean_at_500hPa )                   
  gp_strm_rmean_deviation = gp_strm_rmean_at_500hPa - gp_strm_rmean_at_500hPa_climat

################################################################
#                        描画ルーチン
################################################################

##
# 事前準備

DCL.uscset('cyspos', 'B' )              # y 軸の単位の位置を下方へ 
rsizel2 = DCL.uzrget('rsizel2')         # 現在のラベルサイズを取得
DCL.uzrset('rsizel2', rsizel2*0.42 )    # ラベルサイズをデフォルトの 0.5 倍に

##
# お絵描きメイン

# ビューポート設定
vpt = NArray[0.15,0.85,0.23,0.58]

p idate = (year[0].to_s+"0101").to_i      # 日付 0 日. 19790101
ndate = (year[-1].to_s+"1201").to_i       # 日付 最後の日. 20031231
p nd = DCL.dateg1(idate,ndate)            # 日日数
#GGraph.set_axes("date?"=>["x", idate, nd])        
                                          # 日付軸を有効にする


DCL.swpset('lsep',  true)    # ページ毎別々のファイルに落す
DCL.gropn(2)
DCL.sgpset('lcntl', false)   # 
DCL.sgpset('lfull',true)     # フルスクリーン
DCL.uzfact(0.55)             # 
DCL.sgpset('lcorner',false)  # コーナーを取っ払う 
DCL.sgpset('lfprop',true)    # 
DCL.udpset('lmsg',false)     # 
DCL.uscset('cyspos', 'B' )   # y 軸の単位の位置を下方へ 



## set variable param 

level = [-1e+12, 0, 1e+12]; pattern = [35999, 35999, 70999, 70999]
contour_int = 1.0e12

# get coord info
missval = gp_strm_rmean_at_500hPa_climat.data.get_att('missing_value')[0]
before = DCLExt.gl_set_params('lmiss'=>true,'rmiss'=>missval)

ymax = gp_strm_rmean_deviation.coord('lat').max
ymin = gp_strm_rmean_deviation.coord('lat').min

###  500 hPa 面時系列
  DCL::grfrm                   # ページ確定 

  DCL::grswnd(0.0, nd, ymin, ymax)
  DCL::grsvpt(*vpt)
  DCL::grstrn(1)
  DCL::grstrf

  ## トーン, コンター描画
  DCLExt::ue_set_tone(level, pattern)
  DCLExt::ud_set_linear_levs(gp_strm_rmean_deviation.data.val, 'int'=>contour_int)
  DCL::uetone(gp_strm_rmean_deviation.data.val[true, -1..0])
  DCL::udcntz(gp_strm_rmean_deviation.data.val[true, -1..0])

  ## 軸描画

  ### 日付軸
  DCL::ucxacl('B', idate, nd)
  DCL::ucxacl('T', idate, nd)
  ### y 軸ラベル設定
  DCL::uyaxdv('L', 10, 20)
  DCL::uyaxdv('R', 10, 20)
  ### タイトル
  DCL::uxsttl('T', "(#{gp_strm_rmean_deviation.units.to_s})", 1)
  DCL::uxmttl('T',  gp_strm_rmean_deviation.data.get_att('long_name'), 0.0)
  DCL::uysttl('L', "Latitude", 0.0)
  DCL::uxsttl('B', 'YEAR', 0.0)

  ## color bar
  DCLExt::color_bar('constwidth'=>true)

  DCL::ueitlv

DCL.grcls

##################################################
# 画像ファイル名を変更
File.rename('dcl_001.ps', 'STRM_RMEAN_1973-2003_TIME-SERIES_500hPa_DEVIATION_NCEP.ps')
