#!/usr/bin/env ruby
=begin
= mkfig.rb -- make figure for energy balance

$B%(%M%k%.!<%P%i%s%94XO"?^(B. $B0J2<$NJ*M}NL$N0^EYJ?6QCM$r%W%m%C%H(B.

* RADIATION_BALANCE
  * DSWRF : $BBg5$>eC<2<8~$-C;GHJ|<M%U%i%C%/%9(B
  * USWRF : $BBg5$>eC<>e8~$-C;GHJ|<M%U%i%C%/%9(B
  * ULWRF : $BBg5$>eC<>e8~$-D9GHJ|<M%U%i%C%/%9(B
  * NSWRS : $BCOI=LL@5L#C;GHJ|<M%U%i%C%/%9(B
  * NLWRS : $BCOI=LL@5L#D9GHJ|<M%U%i%C%/%9(B
* HEAT_BALANCE
  * PRATE : $B9_?e6/EY(B($B@xG.$N7A$K=q$-D>$9(B)
  * LHTFL : $BCOI=LL$K$*$1$k@xG.%U%i%C%/%9(B
  * SHTFL : $BCOI=LL$K$*$1$k82G.%U%i%C%/%9(B
  
=end

require "getopts"        # for option_parse
require "numru/netcdf_miss"
require "numru/ggraph"
require "colorbar"
require "libgphys-n"
include NumRu
include Misc::EMath

## enable to the option min, max 

  def GGraph::line(gphys, newframe=true, options=nil)
    if newframe!=true && newframe!=false
      raise ArgumentError, "2nd arg (newframe) must be true or false"
    end
    if ! defined?(@@line_options)
      @@line_options = Misc::KeywordOptAutoHelp.new(
						    ['title', nil, 'Title of the figure(if nil, internally determined)'],
						    ['annotate', true, 'if false, do not put texts on the right margin even when newframe==true'],
						    ['exchange', false, 'whether to exchange x and y axes'],
						    ['index', 1, 'line/mark index'],
						    ['type', 1, 'line type'],
						    ['label', nil, 'if a String is given, it is shown as the label'],
						    ['max', nil, 'maximam value for draw line'],
						    ['min', nil, 'minimam value for draw line']
						    )
    end
    opts = @@line_options.interpret(options)
    gp = gphys.first1D
    if !opts['exchange']
      x = gp.coord(0)
      y = gp.data
      xax = x
      if opts['min']
	ymin = opts['min'].to_f
      else
	ymin = gp.data.val.min
      end
      if opts['max']
	ymax = opts['max'].to_f
      else
	ymax = gp.data.val.max
      end
      yax = VArray.new(NArray[ymin, ymax], gp.data, gp.data.name)      
    else
      y = gp.coord(0)
      x = gp.data
      yax = y
      if opts['min']
	xmin = opts['min'] 
      else
	xmin = gp.data.val.min
      end
      if opts['max']
	xmax = opts['max'] if opts['max']
      else
	xmax = gp.data.val.max
      end
      xax = VArray.new(NArray[xmin, xmax], gp.data, gp.data.name)
    end
    if newframe
      fig(xax, yax)
      axes(xax, yax)
      title( (opts['title'] || gp.data.get_att('long_name')) )
      annotate(gp.lost_axes) if opts['annotate']
    end
    if opts['label']
      lcharbk = DCL.sgpget('lchar')
      DCL.sgpset('lchar',true)
      DCL.sgsplc(opts['label'])
      end
    DCL.uulinz(x.val, y.val, opts['type'], opts['index'])
    DCL.sgpset('lchar',lcharbk) if opts['label']
    nil
  end


##-----------------------
#  $B%i%$%s%a%=%C%I:FDj5A(B?

def plot_line_main(gphys_array, line_opts={})
  
  line_index_ary = Array.new; name_ary = Array.new

  default_index = 12
  
  line_hash = { "index"=> default_index }.update(line_opts)
  line_index_ary.push(default_index)
  name_ary.push(gphys_array[0].data.get_att("long_name"))
  
  GGraph.line( gphys_array[0], true, line_hash )
  gphys_array.size.times{ |num|
      unless num == 0
	line_hash = { "index"=> (num*10 + default_index)}
	line_index_ary.push(num*10 +default_index)
	name_ary.push(gphys_array[num].data.get_att("long_name"))
	GGraph.line( gphys_array[num], false, line_hash ) 
      end
  }
  
  return name_ary, line_index_ary
  
end



##-----------------------
#  $B%i%$%s%$%s%G%C%/%9$N<oN`$rI=<((B

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 == 6
	vx = 0.30
	vy = 0.12 - charsize/2
      end
  }
    nil
  end

##-----------------------
## 25 $BG/J?6Q$N%*%V%8%'%/%H$r:n@.(B

def make_mean_gphys(phys, src, season,year)
  pathary = []
  y1 = year[0]; y2 = year[1]
  path = "../../#{phys}.#{src}/"
  season.each do |m|
    y1.upto(y2) do |y|
      fn = path + "#{phys}.#{y}.#{src}/#{phys}_#{y}-#{m}_#{src}.nc"
      pathary << fn
    end
  end
#  gp     = mean_gphys_date_weight(pathary, phys.downcase)
  gp     = mean_gphys(pathary, phys.downcase)
  return gp.average('lon')
end

##-----------------------
#  $BA45eJ?6QCM5a$a$F%F%-%9%H$K=q$-9~$`(B (TeX $B7A<0(B).
#  $B3FG[Ns$O@hF,$+$i(B OLR_top($B%H%C%W>e8~$-J|<M(B), NLR_sfc($BCOI=LL%M%C%HD9GH(B), LH($B@xG.(B), SH($B82G.(B), PR($B9_?e(B)

def write_tablar(file, ann, djf, mam, jja, son)
## -- $BA45eJ?6QCM$r5a$a$k(B --
ann = cal_global_mean(ann)
djf = cal_global_mean(djf)
mam = cal_global_mean(mam)
jja = cal_global_mean(jja)
son = cal_global_mean(son)

## -- $B7k2L$r=q$-9~$`(B --
fmt = "& %10.1f & %10.1f & %10.1f & %10.1f & %10.1f & %10.1f & %10.1f"
file.puts <<TABULAR
  %%%%%%%%           $BI=(B: $BA45eJ?6QCM(B          %%%%%%%%
\\begin{table}[h]
  \\begin{center}
     \\caption{\\footnotesize%
	    $BJ*M}NL$NA45eJ?6QCM$NG/J?6Q$*$h$S5(@aJ?6Q(B. $BCM$O$$$:$l$b(B 1979 $BG/$+$i(B 2003 $BG/$^$G$N(B 25 $BG/J?6QCM(B. 
	    $B5(@a$OKLH>5e$N5(@a(B.
            OLR$_{top}$ $B$OBg5$>eC<308~$-D9GHJ|<M%U%i%C%/%9(B,
            NLR$_{sfc}$ $B$OCOI=LL@5L#D9GHJ|<M%U%i%C%/%9(B,
            NSR$_{top}$ $B$OBg5$>eC<308~$-C;GHJ|<M%U%i%C%/%9(B,
            NSR$_{sfc}$ $B$OCOI=LL@5L#C;GHJ|<M%U%i%C%/%9(B,
            LHF $B$OCOI=LL@xG.%U%i%C%/%9(B,
            SHF $B$OCOI=LL@xG.%U%i%C%/%9(B,
            PR  $B$O9_?eNL(B.
            $B$?$@$79_?e$O6E7k;~$K3+J|$9$k@xG.$GI=$7$F$"$k(B. $BC10L$O$$$:$l$b(B W/m$^2$.
      }
     \\begin{tabular}{|c|c|c|c|c|c|c|c|}
	\\multicolumn{8}{c}{$BA45eJ?6QCM(B} \\
         \\hline\\hline
	 $B5(@a(B   & OLR$_{top}$ & NLR$_{sfc}$ & NSR$_{top}$  & NSR$_{sfc}$ & LHF        & SHF        & PR     \\\\
	 \\hline
 	 $BG/J?6Q(B #{sprintf(fmt, ann[0], ann[1], ann[2], ann[3], ann[4], ann[5], ann[6])} \\\\
	 \\hline
 	   $B=U(B   #{sprintf(fmt, mam[0], mam[1], mam[2], mam[3], mam[4], mam[5], mam[6])} \\\\
	 \\hline
 	   $B2F(B   #{sprintf(fmt, jja[0], jja[1], jja[2], jja[3], jja[4], jja[5], jja[6])} \\\\
	 \\hline
 	   $B=)(B   #{sprintf(fmt, son[0], son[1], son[2], son[3], son[4], son[5], son[6])} \\\\
	 \\hline
 	   $BE_(B   #{sprintf(fmt, djf[0], djf[1], djf[2], djf[3], djf[4], djf[5], djf[6])} \\\\
	 \\hline
    \\end{tabular}
    \\Dtablab{}
  \\end{center}
\\end{table}
end
  %%%%%%%%           $BI=(B: $BA45eJ?6QCM(B          %%%%%%%%
TABULAR

  return file

end

def cal_global_mean(ary)

## -- $B3FJ*M}NL$rFHN)$K<h$j=P$9(B --
  ulwrf = ary[0]  # olr at top
  nlwrs = ary[1]  # olr at sfc
  nswrf = ary[2]  # nsr at top
  nswrs = ary[3]  # nsr at sfc
  lh    = ary[4]  # latent heat
  sh    = ary[5]  # sensible heat
  pr    = ary[6]  # precipitation
## -- sin/cos phi $B:n@.(B --
  lat     = ulwrf.coord('lat')
  phi     = lat*2*PI/360.0
  grid    = Grid.new(ulwrf.axis('lat'))
  cos_lat = GPhys.new(grid, cos(phi))
## $B%,%&%92Y=E(B
  w = GPhys::IO.open("../../GAUSSIAN_WEIGHT/gaussian_weight.nc", "gw")
## -- $BA45eJ?6QCM$r5a$a$k(B($BCM$N$_3JG<(B)
  ulwrf_global_mean = ( ( ulwrf *  w ).sum ).val
  nlwrs_global_mean = ( ( nlwrs *  w ).sum ).val
  nswrf_global_mean = ( ( nswrf *  w ).sum ).val
  nswrs_global_mean = ( ( nswrs *  w ).sum ).val
  lh_global_mean =    ( ( lh    *  w ).sum ).val
  sh_global_mean =    ( ( sh    *  w ).sum ).val
  pr_global_mean =    ( ( pr    *  w ).sum ).val

  return ulwrf_global_mean, nlwrs_global_mean, nswrf_global_mean, nswrs_global_mean, lh_global_mean, sh_global_mean, pr_global_mean

end


##################################################################

# make gphys objects

year = [1979, 2003]
# year = [1979, 2001]

# $B@^$l@~$N:GBgCM$H:G>.CM(B($BJ|<M$O(B rad_min/max)
min     = -100
max     = +300
rad_min = -300
rad_max = +500

L = UNumeric.new(2.5008e6, 'J.Kg-1')
winter = ["12", "01", "02"];  spring = ["03", "04", "05"]
summer = ["06", "07", "08"];  fall = ["09", "10", "11"]
djf = []; mam = []; jja = []; son = []

season_kikan = {# $B3F5(@a$KBP1~$9$k7nL>$NG[Ns$rCM$K$b$D%O%C%7%e(B
  'winter'=>winter,
  'spring'=>spring,
  'summer'=>summer,
  'fall'  =>fall  
}
season_gp = {# $B3F5(@aJ?6Q$N(B GPhys $B%*%V%8%'%/%H$r;}$D%O%C%7%e(B
  'winter'=>djf,
  'spring'=>mam,
  'summer'=>jja,
  'fall'  =>son  
}


['spring', 'summer', 'fall', 'winter'].each {|ss|  

  ## $BBg5$>eC<J|<M%U%i%C%/%9(B
  dswrf = make_mean_gphys('DSWRF', 'NCEP', season_kikan[ss], year)
  uswrf = make_mean_gphys('USWRF', 'NCEP', season_kikan[ss], year)
  nswrf = uswrf - dswrf                  # $B@5L#$NC;GHJ|<M%U%i%C%/%9(B
  nswrf.data.set_att('long_name',  'net short wave radiation flux at nominal top of atmosphere')
  ulwrf = make_mean_gphys('ULWRF', 'NCEP', season_kikan[ss], year)
                                         # $B@5L#$ND9GHJ|<M%U%i%C%/%9(B
 
  ## $BCOI=LLJ|<M%U%i%C%/%9(B
  nlwrs = make_mean_gphys('NLWRS', 'NCEP', season_kikan[ss], year)
                                         # $BCOI=LL@5L#$ND9GHJ|<M%U%i%C%/%9(B
  nswrs = make_mean_gphys('NSWRS', 'NCEP', season_kikan[ss], year)
                                         # $BCOI=LL@5L#$NC;GHJ|<M%U%i%C%/%9(B

  ## $B@xG.%U%i%C%/%9(B
  lhtfl = make_mean_gphys('LHTFL', 'NCEP', season_kikan[ss], year)
  lhtfl.data.set_att('long_name', 'net latent heat flux at surface')
  
  ## $B82G.%U%i%C%/%9(B
  shtfl = make_mean_gphys('SHTFL', 'NCEP', season_kikan[ss], year)
  shtfl.data.set_att('long_name', 'net sensible heat flux at surface')
  
  ## $B9_?e(B($B@xG.$K49;;$7$?$b$N(B)
  prate = make_mean_gphys('PRATE', 'NCEP', season_kikan[ss], year)
  lheat = prate*L
  lheat.data.set_att('long_name', 'latent heat with precipitation')

  season_gp[ss] << ulwrf
  season_gp[ss] << nlwrs
  season_gp[ss] << nswrf
  season_gp[ss] << nswrs
  season_gp[ss] << lhtfl
  season_gp[ss] << shtfl
  season_gp[ss] << lheat
}

ann =  (NArray.to_na(djf) + NArray.to_na(mam) + NArray.to_na(jja) + NArray.to_na(son))/4

###################################################################



# set User Path for dcldatabase
DCL.glcset('DUPATH','/home/daktu32/.dcldir/')     


itr = 1

DCL.swpset('lsep',  true)    # $B%Z!<%8KhJL!9$N%U%!%$%k$KMn$9(B
DCL.gropn(2)
DCL.sgpset('lcntl', false)   # 
DCL.sgpset('lfull',true)     # $B%U%k%9%/%j!<%s(B
# DCL.uzfact(0.35)             # 
DCL.uzfact(0.55)             # 
DCL.sgpset('lcorner',false)  # $B%3!<%J!<$r<h$CJ'$&(B 
DCL.sgpset('lfprop',true)    # 
DCL.udpset('lmsg',false)     # 
DCL.uscset('cyspos', 'B' )   # y $B<4$NC10L$N0LCV$r2<J}$X(B 


##############################################################################


##---------------------------------------------------
## HEAT BALANCE (annual)

# $B%S%e!<%]!<%H@_Dj(B
vpt = NArray[0.15,0.85,0.23,0.58]

# dcl $B$K7gB;CM>pJs$r65$($k(B
before = DCLExt.gl_set_params('lmiss'=>true,'rmiss'=>ann[0].data.get_att("missing_value")[0])


# annual mean
GGraph.set_fig('viewport'=>vpt, 'itr'=>itr, 'new_frame'=>true)
GGraph.set_axes('ytitle'=>'')
DCL.uzpset('labelyl',true)
names, idxs = plot_line_main(ann[-3..-1], 'annot'=>false, 
			     'titl'=>'25 years annual mean Heat Balance (1979-2003)', 
			     'min'=>min, 'max'=>max)

__show_line_index(names,idxs)

## -- extra information --
# DCL::sgtxzv(0.5,vpt[3]+0.028,"25 years annual mean Heat Balance (1979-2003)",
#	        1.15*DCL.uzpget('rsizec2'),0,0,3)
DCL::sgtxzv(0.78,vpt[3]+0.01,"(units:#{ann[0].data.units.to_s})",
	        0.8*DCL.uzpget('rsizec2'),0,0,3)

##--------------------------------------
## HEAT BALANCE (seasonal)

## ------- DJF --------

GGraph.set_fig('viewport'=>vpt, 'itr'=>itr, 'new_frame'=>true)
names, idxs = plot_line_main(djf[-3..-1], 'annot'=>false, 
			     'titl'=>'25 years DJF mean Heat Balance (1979-2003)', 
			     'min'=>min, 'max'=>max)

__show_line_index(names,idxs)

# DCL::sgtxzv(0.5,vpt[3]+0.028,"25 years DJF mean Heat Balance (1979-2003)",
#	        1.15*DCL.uzpget('rsizec2'),0,0,3)
DCL::sgtxzv(0.78,vpt[3]+0.01,"(units:#{djf[0].data.units.to_s})",
	        0.8*DCL.uzpget('rsizec2'),0,0,3)

## ------- MAM --------

GGraph.set_fig('viewport'=>vpt, 'itr'=>itr, 'new_frame'=>true)
names, idxs = plot_line_main(mam[-3..-1], 'annot'=>false, 
			     'titl'=>'25 years MAM mean Heat Balance (1979-2003)', 
			     'min'=>min, 'max'=>max)

__show_line_index(names,idxs)

# DCL::sgtxzv(0.5,vpt[3]+0.028,"25 years MAM mean Heat Balance (1979-2003)",
# 	        1.15*DCL.uzpget('rsizec2'),0,0,3)
DCL::sgtxzv(0.78,vpt[3]+0.01,"(units:#{mam[0].data.units.to_s})",
	        0.8*DCL.uzpget('rsizec2'),0,0,3)

## ------- JJA --------

GGraph.set_fig('viewport'=>vpt, 'itr'=>itr, 'new_frame'=>true)
names, idxs = plot_line_main(jja[-3..-1], 'annot'=>false, 
			     'titl'=>'', 
			     'min'=>min, 'max'=>max)

__show_line_index(names,idxs)

DCL::sgtxzv(0.5,vpt[3]+0.028,"25 years JJA mean Heat Balance (1979-2003)",
	        1.15*DCL.uzpget('rsizec2'),0,0,3)
DCL::sgtxzv(0.78,vpt[3]+0.01,"(units:#{jja[0].data.units.to_s})",
	        0.8*DCL.uzpget('rsizec2'),0,0,3)

## ------- SON --------

GGraph.set_fig('viewport'=>vpt, 'itr'=>itr, 'new_frame'=>true)
names, idxs = plot_line_main(son[-3..-1], 'annot'=>false, 
			     'titl'=>'', 
			     'min'=>min, 'max'=>max)

__show_line_index(names,idxs)

DCL::sgtxzv(0.5,vpt[3]+0.028,"25 years SON mean Heat Balance (1979-2003)",
	        1.15*DCL.uzpget('rsizec2'),0,0,3)
DCL::sgtxzv(0.78,vpt[3]+0.01,"(units:#{son[0].data.units.to_s})",
	        0.8*DCL.uzpget('rsizec2'),0,0,3)


##############################################################################
##---------------------------------------------------
## RADIATION BALANCE (annual)

# $B%S%e!<%]!<%H@_Dj(B
vpt = NArray[0.15,0.85,0.23,0.58]

# dcl $B$K7gB;CM>pJs$r65$($k(B
before = DCLExt.gl_set_params('lmiss'=>true,'rmiss'=>ann[0].data.get_att("missing_value")[0])

# annual mean
GGraph.set_fig('viewport'=>vpt, 'itr'=>itr, 'new_frame'=>true)
GGraph.set_axes('ytitle'=>'')
DCL.uzpset('labelyl',true)
names, idxs = plot_line_main(ann[0..3], 'annot'=>false, 
			     'titl'=>'25 years annual mean Radiation Balance (1979-2003)',
			     'min'=>rad_min, 'max'=>rad_max)

__show_line_index(names,idxs)

## -- extra information --
# DCL::sgtxzv(0.5,vpt[3]+0.028,"25 years annual mean Radiation Balance (1979-2003)",
#	        1.15*DCL.uzpget('rsizec2'),0,0,3)
DCL::sgtxzv(0.78,vpt[3]+0.01,"(units:#{ann[0].data.units.to_s})",
	        0.8*DCL.uzpget('rsizec2'),0,0,3)

##--------------------------------------
## RADIATION BALANCE (seasonal)

## ------- DJF --------

GGraph.set_fig('viewport'=>vpt, 'itr'=>itr, 'new_frame'=>true)
names, idxs = plot_line_main(djf[0..3], 'annot'=>false, 
			     'titl'=>'25 years DJF mean Radiation Balance (1979-2003)',
			     'min'=>rad_min, 'max'=>rad_max)

__show_line_index(names,idxs)

# DCL::sgtxzv(0.5,vpt[3]+0.028,"25 years DJF mean Radiation Balance (1979-2003)",
#	        1.15*DCL.uzpget('rsizec2'),0,0,3)
DCL::sgtxzv(0.78,vpt[3]+0.01,"(units:#{djf[0].data.units.to_s})",
	        0.8*DCL.uzpget('rsizec2'),0,0,3)

## ------- MAM --------

GGraph.set_fig('viewport'=>vpt, 'itr'=>itr, 'new_frame'=>true)
names, idxs = plot_line_main(mam[0..3], 'annot'=>false, 
			     'titl'=>'25 years MAM mean Radiation Balance (1979-2003)',
			     'min'=>rad_min, 'max'=>rad_max)

__show_line_index(names,idxs)

# DCL::sgtxzv(0.5,vpt[3]+0.028,"25 years MAM mean Radiation Balance (1979-2003)",
#	        1.15*DCL.uzpget('rsizec2'),0,0,3)
DCL::sgtxzv(0.78,vpt[3]+0.01,"(units:#{mam[0].data.units.to_s})",
	        0.8*DCL.uzpget('rsizec2'),0,0,3)

## ------- JJA --------

GGraph.set_fig('viewport'=>vpt, 'itr'=>itr, 'new_frame'=>true)
names, idxs = plot_line_main(jja[0..3], 'annot'=>false, 
			     'titl'=>'25 years JJA mean Radiation Balance (1979-2003)', 
			     'min'=>rad_min, 'max'=>rad_max)

__show_line_index(names,idxs)

# DCL::sgtxzv(0.5,vpt[3]+0.028,"25 years JJA mean Radiation Balance (1979-2003)",
#	        1.15*DCL.uzpget('rsizec2'),0,0,3)
DCL::sgtxzv(0.78,vpt[3]+0.01,"(units:#{jja[0].data.units.to_s})",
	        0.8*DCL.uzpget('rsizec2'),0,0,3)

## ------- SON --------

GGraph.set_fig('viewport'=>vpt, 'itr'=>itr, 'new_frame'=>true)
names, idxs = plot_line_main(son[0..3], 'annot'=>false, 
			     'titl'=>'25 years SON mean Radiation Balance (1979-2003)', 
			     'min'=>rad_min, 'max'=>rad_max)

__show_line_index(names,idxs)

# DCL::sgtxzv(0.5,vpt[3]+0.028,"25 years SON mean Radiation Balance (1979-2003)",
#	        1.15*DCL.uzpget('rsizec2'),0,0,3)
DCL::sgtxzv(0.78,vpt[3]+0.01,"(units:#{son[0].data.units.to_s})",
	        0.8*DCL.uzpget('rsizec2'),0,0,3)



DCL.grcls

#######################################################

##################################################
# $BA45eJ?6QCM$r%U%!%$%k$X=q$-9~$`(B

file = File.open('ENERGY_BALANCE_1973-2003_GLOBAL-MEAN_NCEP.txt', 'w')
file = write_tablar(file, ann, djf, mam, jja, son)
file.close

##################################################
# $B2hA|%U%!%$%kL>$rJQ99(B
File.rename('dcl_001.ps', 'HEAT_BALANCE_1973-2003-ANNUAL_NCEP.ps')
File.rename('dcl_002.ps', 'HEAT_BALANCE_1973-2003-DJF_NCEP.ps')
File.rename('dcl_003.ps', 'HEAT_BALANCE_1973-2003-MAM_NCEP.ps')
File.rename('dcl_004.ps', 'HEAT_BALANCE_1973-2003-JJA_NCEP.ps')
File.rename('dcl_005.ps', 'HEAT_BALANCE_1973-2003-SON_NCEP.ps')
File.rename('dcl_006.ps', 'RADIATION_BALANCE_1973-2003-ANNUAL_NCEP.ps')
File.rename('dcl_007.ps', 'RADIATION_BALANCE_1973-2003-DJF_NCEP.ps')
File.rename('dcl_008.ps', 'RADIATION_BALANCE_1973-2003-MAM_NCEP.ps')
File.rename('dcl_009.ps', 'RADIATION_BALANCE_1973-2003-JJA_NCEP.ps')
File.rename('dcl_010.ps', 'RADIATION_BALANCE_1973-2003-SON_NCEP.ps')

exit
