#!/usr/bin/env ruby

=begin

表題: AGUforAPE NetCDF submitted PCMDI のお絵描き

履歴: 2004/02/13 yukiko@ep.sci.hokudai.ac.jp

irb_command: load "~/tmp/ape-data/lib/lib-ape-view.rb"
irb_command: load "~/tmp/ape-data/lib/ape-view.rb"
irbrc: ~/.irbrc

=end

# ----------------------------------------------
# ps, gif ファイルの格納場所

$rezol = "T39L48_eml"
# $expID = "control"
# $expID = "flat"
# $expID = "peaked"
# $expID = "1keq"
# $expID = "3keq"
# $expID = "3kw1"
# $expID = "Qobs"
$expID = "control-5N"

# $ncfile_path = "/mnt/NetCDF/#{$rezol}/"
$ncfile_path = "/home/yukiko/tmp/ape-data/#{$rezol}/"
$file_label = "#{$rezol}_#{$expID}"
$dir_path = "/home/yukiko/tmp/ape-data/figs/tmp/"

# $file_label = "T39L48_eml_control"

# ----------------------------------------------
# local load path

$: << '/home/yukiko/tmp/ape-data/lib'

# ----------------------------------------------
# 必要なライブラリ, モジュールの読み込み

require "lib-ape-view"


# ----------------------------------------------
# Ape.irb 用ローカルメソッド (そもそもローカルだけど)
# ややこしくなるから irb でのみ使用すること 

# tab で関数補完 (ちょっとうるさくなるけど)
require "/usr/lib/ruby/1.6/irb/completion.rb"

# ライブラリのロード (irb 立ち上げ時に一度読み込まれてる)
def source
  load "~/tmp/ape-data/lib/ape-view.rb"
end

# $nc[Array] に nc ファイル名代入
def ls
  Ape.file_name_get
end

# ape 基本クラス初期化
def new(file)
  Ape.new(file)
end

# ape 応用クラス初期化
def mkfig(num)
  Ape_mkfig.new(num)
end

# 素直に ncdump -h
def ncdump(file)
  Ape.ncdump(file)
end

class Ape
  def p(name) 
    gphys = gphys_open(name)
    plot(gphys)
  end
  alias go gphys_open
  alias no netcdf_open
  alias l var_list
end

# ----------------------------------------------
# Ape NetCDF お絵描き応用クラス

class Ape_mkfig

  def initialize(num)
    @fig_num = num
  end

  def mkfig_plot(gphys)
    if @fig_num == 3
      @data.mkdump(gphys)
    elsif @fig_num == 2
      @data.mkps(gphys)
    else
      @data.plot(gphys)
    end
  end

  def ape_mkfig_all
    $file_name = nil ;  $pre_file = nil
    ape_tr
    ape_tr 
    ape_gt
    ape_ml
    ape_sh
    ape_mf
    ape_sh_zonal
    ape_sh_zonal
  end

  def ape_gt
    # AGUforAPE-03a_GT_control.nc
    @data = Ape.new("#{$ncfile_path}AGUforAPE-03a_GT_#{$expID}.nc")
    @data.netcdf_open.var_names.each { |item| 
      unless item =~ "time"  || item =~ "gt_slwu" # gt_slwu は一定値
	gphys = @data.gphys_open(item)
	mkfig_plot(gphys)
      end
    }
  end

  def ape_ml
    # AGUforAPE-03a_ML_control.nc
    @data = Ape.new("#{$ncfile_path}AGUforAPE-03a_ML_#{$expID}.nc")
    @data.netcdf_open.var_names.each { |item|
      unless item =~ "lat" || item =~ "lon" || item =~ "plev"  
	gphys = @data.gphys_open(item)
	mkfig_plot(gphys.mean(0))
      end
    }
  end

  def ape_tr
    # AGUforAPE-03a_TR_control.nc
    @data = Ape.new("#{$ncfile_path}AGUforAPE-03a_TR_#{$expID}.nc")
    @data.netcdf_open.var_names.each { |name|
      if name =~ /lw_toa|mslp|500|250/
	if name =~ /lw_toa|mslp/
	  lost_axis = ["zonal mean distribution"]
	elsif name =~ /250/
	  lost_axis = ["plev=25000 Pa","zonal mean distribution"]
	elsif name =~ /500/
	  lost_axis = ["plev=50000 Pa","zonal mean distribution"]
	end
	gphys = @data.gphys_open(name)
	gphys = 
	  gphys.cut(true,0,true)[true,-400..-1].add_lost_axes(lost_axis)
	mkfig_plot(gphys - gphys.mean(0))
      elsif name =~ /tppn/
	gphys = @data.gphys_open("tr_tppn")
	mkfig_plot(gphys.cut(true,0,true)[true,-400..-1])
      end
    }
  end

  def ape_sh
    #  AGUforAPE-03a_SH_control.nc
    @data = Ape.new("#{$ncfile_path}AGUforAPE-03a_SH_#{$expID}.nc")
    @data.netcdf_open.var_names.each { |item|
      unless item =~ "lon" || item =~ "lat" 
	gphys = @data.gphys_open(item)
	mkfig_plot(gphys)
      end
    }
  end

  def ape_sh_zonal
    #  AGUforAPE-03a_SH_control.nc@zonal_mean
    @data = Ape.new("#{$ncfile_path}AGUforAPE-03a_SH_#{$expID}.nc")
    @data.netcdf_open.var_names.each { |item|
      unless item =~ "lon" || item =~ "lat" 
	gphys = @data.gphys_open(item)
	gphys = gphys.rename("#{gphys.name}_zonal")
	mkfig_plot(gphys.mean(0))
      end
    }
  end
  
  def ape_mf
    #  AGUforAPE-03a_MF_control.nc
    @data = Ape.new("#{$ncfile_path}AGUforAPE-03a_MF_#{$expID}.nc")
    @data.netcdf_open.var_names.each { |item|
      unless item =~ "lat" || item =~ "plev" 
	gphys = @data.gphys_open(item)
	mkfig_plot(gphys)
      end
    }
  end

  def ape_varlist(num)
    @data = Ape.new(num)
    @data.netcdf_open.var_names.each { |item|
      unless item =~ /lon|lat|plev|time/ 
	gphys = @data.gphys_open(item)
	var_name = gphys.data.get_att("ape_name").gsub("_", " ")
	print "#{gphys.name}: #{var_name}\n"
      end
    }
  end

end


