[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:001875] alias put for GPhys
- To: dennou-ruby@xxxxxxxxxxx
- Subject: [dennou-ruby:001875] alias put for GPhys
- From: tsukahara daisuke <daktu32@xxxxxxxxxxxxxxxxxxxx>
- Date: Fri, 10 Sep 2004 12:20:48 +0900 (JST)
堀之内様
Cc: dennou-ruby
塚原です. GPhys 内部の put の挙動を alias を用いて変更したいのですが
上手くいきません. 具体的には, signature 下方に記述したプログラム
(testalias.rb) を実行すると, GPhys::IO.write 中で呼んでいる get は
aliasしたメソッドが呼ばれるのですが put についてはなぜか alias が張れ
てない or 別のメソッドを GPhys 内部で上書き alias しているようです(test1).
一方, NetCDF::put を直接呼び出している部分は正しく alias されているよ
うです(test2). お手数ですが, 確認いただけないでしょうか? テストに使用
した nc ファイルは適当なもので大丈夫です. GPhys オブジェクトとして読み
込んで, 1.1 倍したものをファイルに保存するだけ.
ちなみに, 何がしたかったのかというと, NCEP データの欠損値の取り扱いを
サポートするメソッドを put に alias したかったのです.
# pack した値を missing_value として持つように. つまり, 欠損値は
# add}_offset や scale_factor を作用させないようにする.
個人的には上記の目的が果たせればよいので, 何か上手い方法が既に開発され
ておりましたら, おこぼれにあずかりたい, と思っております(;^^)
お忙しいところ申し訳ありません. お手すきになりましたら, 対処いただける
と幸いです. どうぞよろしくお願いいたします.
--------------------------------------
北海道大学院理学研究科 地球惑星科学専攻
地球流体力学研究室 M2 塚原大輔
email::daktu32@xxxxxxxxxxxxxxxxxxxx
--------------------------------------
###################################################################
testalias.rb:
------------------------------------------------------
#!/usr/bin/env ruby
require "getopts"
require "numru/ggraph"
include NumRu
## redef NetCDFVar::put and get
module NumRu
class NetCDFVar
def get_with_miss_and_scaling_new(*args)
p "get_with_miss_and_scaling_new"
get_with_miss_and_scaling(*args)
end
def put_with_miss_and_scaling_new(data, *args)
p "put_with_miss_and_scaling_new"
put_with_miss_and_scaling(data, *args)
end
alias get get_with_miss_and_scaling_new
alias put put_with_miss_and_scaling_new
end
end
## tests
p "test1: save NetCDF with GPhys::IO.write"
var = "uwnd"
ifile = "test_uwnd.nc"
gp = GPhys::IO.open(ifile, var)
output = "output.nc"
ofile = NetCDF.create(output)
GPhys::IO.write(ofile, gp*1.1) # put_with_...scaling_new must be called...
ofile.close
p "test2: save NetCDF with NetCDF.put"
output2 = "output2.nc"
ofile = NetCDF.create(output2)
ofile.def_dim('x',10)
ofile.def_dim('y',5)
x = ofile.def_var("x","sfloat",["x"])
y = ofile.def_var("y","sfloat",["y"])
v = ofile.def_var("v1","sfloat",["x","y"])
v.put_att("long_name","test 1")
v.put_att("units","1")
ofile.enddef
x.put( NArray.float(10).indgen! )
y.put( NArray.float(5).indgen! )
v.put(NArray.float(10,5).indgen!*0.1)
ofile.close
------------------------------------------------------
######################################################
stdout:
------------------------------------------------------
"test1: save NetCDF with GPhys::IO.write"
"get_with_miss_and_scaling_new"
"get_with_miss_and_scaling_new"
"get_with_miss_and_scaling_new"
"get_with_miss_and_scaling_new"
"test2: save NetCDF with NetCDF.put"
"put_with_miss_and_scaling_new"
"put_with_miss_and_scaling_new"
"put_with_miss_and_scaling_new"
------------------------------------------------------