require 'numru/ggraph'
require 'numru/gphys/ep_flux'
require 'numru/ggraph_on_merdional_section'
require 'colorbar'
require 'getopts'
include NumRu


############## define methods

module NumRu
  class NetCDFVar

    def get_with_miss_and_scaling2(*args) # make mask before scaling
      __interpret_missing_params if !defined?(@missval)
      packed_data = simple_get(*args)
      scaled_data = scaled_get(*args)
      sf = att('scale_factor')
      ao = att('add_offset')
      if @vmin || @vmax
	if sf && ao
	  csf = sf.get
	  cao = ao.get
	  vmin = (@vmin-cao)/csf if @vmin
	  vmax = (@vmax-cao)/csf if @vmax
	elsif
	  vmin = @vmin; vmax = @vmax
	end
	if vmin
	  mask = (packed_data >= vmin) 
	mask = mask.and(packed_data <= vmax) if vmax
	else
	  mask = (packed_data <= vmax)
	end
	data = NArrayMiss.to_nam(scaled_data, mask)
      elsif @missval	# only missing_value is present.
	eps = 1e-6
	missval = @missval[0].to_f
	vmin = missval - eps
	vmax = missval + eps
	mask = (packed_data <= vmin) 
	mask = mask.or(packed_data >= vmax)
	data = NArrayMiss.to_nam(scaled_data, mask)
      else
	data = scaled_data
      end
      data
    end
  end
end

def mean_gphys(file, var)

  gphys_file = Array.new()

  file.each {|f|
  
    temp = GPhys::NetCDF_IO.open(f, var)
    gphys_file << temp

  }

  sum = gphys_file[0]

  1.upto(gphys_file.size-1) {|f|
    sum += gphys_file[f] 
  }

  p gphys = sum/file.size.to_f
  return gphys
end


############## main routine



unless getopts("", "title:" )
  print "#{$0}:illegal options. please exec this program with -h/--help. \n"
  exit 1
end


files = ARGV
#vrmnm = 'v_rmean'; wrmnm = 'w_rmean'; 
strmnm = 'strm_rmean'

#v_rmean =   mean_gphys(files, vrmnm)
#w_rmean =   mean_gphys(files, wrmnm)
strm_resid = mean_gphys(files, strmnm)

filename = File::basename(files[0])
filename = ($OPT_title) if ($OPT_title)

DCL.gropn(2)
#DCL.sgpset('lcntl', false)   # 
#DCL.sgpset('lfull',true)     # 
#DCL.sgpset('lcorner',false)  # 
#DCL.uzfact(0.35)             # 
#DCL.sgpset('lfprop',true)    # 
#DCL.udpset('lmsg',false)     # 

DCL::sglset('LFULL', true)                       # use full area
DCL::slrat(1.0, 0.85)                            # set aspect ratio of drwable area
DCL.sgpset('lcntl', false)                       # don't rede control character.
DCL.sgpset('lfprop',true)                        # use prportional font
DCL.uzfact(0.6)                                  # set character size

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

## $B?'$N@_Dj(B
levels = NArray[strm_resid.val.min, 0.0, strm_resid.val.max]
patterns = NArray[35999,70999]
GGraph::set_fig('view'=>[0.15,0.85,0.23,0.58],"itr"=>2)
GGraph.set_linear_contour_options( 'interval'=>1.0e10 )

## show tone strm
GGraph.tone(strm_resid,
	    true,
	    "lev"=>levels,
	    "patterns"=>patterns, 
	    "title"=>strm_resid.data.get_att('long_name')
	    )
GGraph.contour(strm_resid,
	       false,
	       "title"=>strm_resid.data.get_att('long_name')
		  )
DCL::Util::color_bar({
		       "levels"=>levels, 
		       "colors"=>patterns,
		       "eqlev"=>true,
		       "nobound"=>0,
		       "tick1"=>10,"tick2"=>1
		     })

## show vector (Fy, Fz)
#GGraph::vector_on_merdional_section(v_rmean, w_rmean, false,
#				  'fact'=>2.0,'xintv'=>1,'unit'=>true, 'annot'=>false
#				    )

# print filename
DCL::sgtxzv(0.27,0.58+0.02,"[#{filename}]",
            0.5*DCL.uzpget('rsizec2'),0,0,3)


DCL.grcls
