[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:003621] Re: GPhys::Grib_IO で grib データを読みたい



内藤です。

報告が遅くなりましてすみません。
結論から言うと、そもそも grib 形式ではありませんでした。
大ボケすみません!

JRA のデータは原則として GRIB 形式で提供されていますが、
加工データ (月平均値など) は 4バイト実数 (big_endian) で
提供されています。GrADS を使って加工されているみたい?ですね。
今回読もうとしていたデータはまさにそれでした。

というわけで、スクリプト grads2nc_with_gphys を使って
NetCDF ファイルに変換することができました。
大変お騒がせしました。

内藤

(2013/01/19 1:14), Yoko NAITO wrote:
> 内藤です。
> 
> 皆様ありがとうございます。まとめてお返事します。
> 
> ruby のバージョンは関係なさそうかもしれませんが一応、
> % ruby --version
> ruby 1.8.7 (2010-08-16 patchlevel 302) [x86_64-linux]
> となっています。
> 
> JRA データを読むには、
> ・rb-grib を追加して GPhys::Grib_IO で読む(でも非推奨)
> あるいは
> ・wgrib2 でデコードしてしまう
> ということですね。
> wgrib2 を取ってきてやってみようと思います。
> 
> 本当に多数のアドバイス感謝です! また週明けにご報告しますね。
> 
> 内藤
> 
> (2013/01/19 0:13), Takeshi Horinouchi wrote:
>> 堀之内です。
>>
>>> 最近触っていないので、遅いし、変数名も変わってしまうままです。
>>
>> 補足です。GPhys では,(rb-gribを使うように指定しなければ)
>> GRIB ファイル中の変数の名前は基本的に wgrib と同じ名前で
>> 扱うようになってます。なので,rb-grib もそうなるように
>> しましょうという話になってるのですが,まだそうなってない
>> ということです(だから GPhys ホームページでも rb-grib
>> の利用は非推奨としてます)。名前だけの問題でなくて,
>> C なのに遅い ECMWF のライブラリは使わないようにする
>> というのとセットなので,作業は結構大変なのです。
>>
>> 今の rb-grib を使ってしまうと,将来の rb-grib を使うと
>> 名前が非互換になって,同じプログラムがそのままでは
>> 使えなくなります(変数名だけの問題ですが)。
>>
>> そこでそれまでのつなぎとしては GRIB2 ファイルは wgrib2
>> を使って,NetCDF に変換してから使うのをお勧めします。
>>
>> http://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/netcdf.html
>>
>> などをみてください。
>>
>> # 西澤さん,やっぱいそがしいかなぁ...。
>>
>>> 西澤です
>>>
>>> あ、rb-gribapi でなくて、 rb-grib でしたね。
>>>
>>> 最近触っていないので、遅いし、変数名も変わってしまうままです。
>>>
>>> 西澤誠也
>>>
>>> 2013年1月18日 19:08 Takeshi Horinouchi <horinout@xxxxxxxxxxxxxxxxx>:
>>>> 堀之内です。
>>>>
>>>> そしたらあとは GRIB2 対応ね。しかし,
>>>> http://ruby.gfd-dennou.org/products/rb-grib/
>>>> って,まだあまりよくない状態 (遅いし,GRIB1のほうも
>>>> 変数名がかわってしまう) のままでしたっけ? > 西澤さま
>>>>
>>>> # (もしも変わってなければ)今のところの個人的お勧めは,
>>>>      wgrib2 でデコードしてしまう,です。
>>>>
>>>>> 内藤です。
>>>>>
>>>>> 西澤くんもありがとうございます!
>>>>>
>>>>> 先ほど、石岡さんが gphys のバージョンを 1.2.2 に上げてくださいました。
>>>>> おかげさまで T.jan.grib は問題なく読めるようになりました。
>>>>>
>>>>> まだ JRA データは読めていません。
>>>>> ruby-gribapi を入れれば grib2 な JRA データも読めるようになるのかも。
>>>>>
>>>>> #----------------------
>>>>> % dpkg -s gphys
>>>>> Package: gphys
>>>>> Status: install ok installed
>>>>> Priority: optional
>>>>> Section: ruby
>>>>> Installed-Size: 3364
>>>>> Maintainer: Youhei SASAKI <uwabami@xxxxxxxxxxxxxx>
>>>>> Architecture: amd64
>>>>> Version: 1.2.2-2
>>>>> Depends: libc6 (>= 2.2.5), libruby1.8 (>= 1.8.7.302) | libruby1.9.1 (>=
>>>>> 1.9.2.0), ruby | ruby-interpreter, ruby-narray, ruby-narray-miss,
>>>>> ruby-netcdf, ruby-dcl, ruby-numru-units, ruby-numru-met,
>>>>> ruby-numru-misc, ruby-fftw3, ruby-lapack, ruby-gsl | libgsl-ruby1.8,
>>>>> ruby-gsl | libgsl-ruby1.9.1, libdap-dev
>>>>> Recommends: ruby-gpv, ruby-nusdas, ruby-hdfeos5 | libhdfeos5-ruby1.8,
>>>>> ruby-hdfeos5 | libhdfeos5-ruby1.9.1
>>>>> Description: Multi-purpose class to handle Gridded Physical quantities
>>>>>    comprehensive library for self-descriptive gridded physical data
>>>>>    (in NetCDF, GrADS, or on memory) with graphics
>>>>> Homepage: http://ruby.gfd-dennou.org/products/gphys
>>>>> Ruby-Versions: ruby1.8 ruby1.9.1
>>>>> #----------------------
>>>>>
>>>>> 内藤
>>>>>
>>>>> (2013/01/18 17:45), Seiya Nishizawa wrote:
>>>>>> 西澤です
>>>>>>
>>>>>> gphys に入っている grib パーサーは、
>>>>>> 元々 ruby で書いていましたが、
>>>>>> ある時から、 C の拡張ライブラリを利用するように変更しました。
>>>>>> (おそらく、1.1.0 から)
>>>>>>
>>>>>> 以下、推測も混じっています。
>>>>>>
>>>>>> 内藤さんのエラーは、その拡張ライブラリの中で、
>>>>>> ファイルから取った文字列の中に、null 文字が埋め込まれている場合に出るものだと思います。
>>>>>> ruby の1.8 のそれなりのバージョン以降を使っている場合は、
>>>>>> その拡張ライブラリの中で、 null 文字があってもエラーとならないものを使うようになっているので、
>>>>>> ruby のバージョンが古いとだめです。
>>>>>> 詳しくいうと、
>>>>>> StringValuePtr を使うと問題無いのですが、
>>>>>> それが無い場合は、STR2CSTR を使います。
>>>>>> これが問題を起こしているのだと想像します。
>>>>>>
>>>>>> 西本さんがうまくいく原因は、
>>>>>> 拡張ライブラリを利用する前のバージョンだからでしょう。
>>>>>>
>>>>>>
>>>>>> ちなみに、JRA データのエラーは、
>>>>>> grib2 だからで、
>>>>>> grib2 を読むためには、ruby-gribapi が必要です。
>>>>>>
>>>>>>
>>>>>> 西澤誠也
>>>>>>
>>>>>>
>>>>>>
>>>>>> 2013年1月18日 16:57 西本絵梨子 <eriko@xxxxxxxxxxxxxx>:
>>>>>>> 内藤さん
>>>>>>>
>>>>>>> Debian lenny なマシンとgphys-1.0.0-1という、とっても古い組み合わせで、
>>>>>>> チュートリアルのgribデータを読んでみると、成功しました。
>>>>>>> なので、バージョンが原因ではなさそうです。
>>>>>>>
>>>>>>> $ ruby -v
>>>>>>> ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
>>>>>>> $ wget http://www.gfd-dennou.org/library/ruby/products/gphys/tutorial/T.jan.grib
>>>>>>> $ irb
>>>>>>> irb(main):001:0> require "numru/gphys"
>>>>>>> => true
>>>>>>> irb(main):002:0> NumRu::GPhys::Grib_IO.var_names("T.jan.grib")
>>>>>>> => ["TMP"]
>>>>>>>
>>>>>>> debianパッケージをインストールされているようなので、再インストール(aptitude reinstall)してみると
>>>>>>> 状況がかわったりしないでしょうか?
>>>>>>>
>>>>>>> 西本
>>>>>>>
>>>>>>> 2013/1/18 Yoko NAITO <naito@xxxxxxxxxxxxxxxxxx>:
>>>>>>>> 内藤です。
>>>>>>>>
>>>>>>>> 堀之内さん、ありがとうございます!
>>>>>>>>
>>>>>>>> ▼ GPhys のバージョン
>>>>>>>> こちらは 1.1.0-3 です。堀之内さんが試してくださったのが 1.2.2 。
>>>>>>>> 1.2.0 の時に GRIB2 のサポートが加わったようですが関係あるでしょうか?
>>>>>>>>
>>>>>>>> ▼ データファイル T.jan.grib
>>>>>>>> ダウンロードし直して diff を取ってみましたが違いがありませんし、
>>>>>>>> inspect_varnames.rb の結果も変わりませんね。。。
>>>>>>>> wget
>>>>>>>> http://www.gfd-dennou.org/library/ruby/products/gphys/tutorial/T.jan.grib
>>>>>>>> したのですが、付け忘れているオプションなどあるでしょうか?
>>>>>>>>
>>>>>>>> あと書き忘れましたが debian squeeze です。
>>>>>>>> 引き続き、みなさまのご助言をいただければ幸いです。
>>>>>>>>
>>>>>>>> 内藤
>>>>>>>>
>>>>>>>> (2013/01/18 13:09), Takeshi Horinouchi wrote:
>>>>>>>>> 堀之内です。
>>>>>>>>>
>>>>>>>>>> 旧チュートリアルから T.jan.grib と contour1000mb_grib.rb を
>>>>>>>>>> 取ってきて実行すると、下記のようなエラーが出ます。
>>>>>>>>>
>>>>>>>>> とりあえずこれについてのみ。
>>>>>>>>>
>>>>>>>>> 私のところでは正常に実行できます
>>>>>>>>> (内藤さんとおなじく ruby 1.8 で, GPhysは 1.2.2)。
>>>>>>>>> 使ってるGPhysのバージョンはなんでしょう?
>>>>>>>>> (あまりGPhysのバージョンに左右されそうに
>>>>>>>>> ないですが)。また,grib ファイルが壊れたりしてませんか。
>>>>>>>>>
>>>>>>>>>> 内藤@京大です。
>>>>>>>>>>
>>>>>>>>>> GPhys で grib データを読もうとして、はまっています。
>>>>>>>>>> JRA-25 のデータを読みたいのですが、それ以前に、
>>>>>>>>>> 旧チュートリアルにある T.jan.grib がちゃんと読めません。
>>>>>>>>>> 初歩的な躓きかもしれませんが、アドバイスいただけないでしょうか。
>>>>>>>>>>
>>>>>>>>>> 旧チュートリアルから T.jan.grib と contour1000mb_grib.rb を
>>>>>>>>>> 取ってきて実行すると、下記のようなエラーが出ます。
>>>>>>>>>> inspect_varnames.rb でも同様です。
>>>>>>>>>>
>>>>>>>>>> #----------------------
>>>>>>>>>> /usr/lib/ruby/1.8/numru/gphys/grib.rb:377:in `to_uint1': string contains
>>>>>>>>>> null byte (ArgumentError)
>>>>>>>>>>             from /usr/lib/ruby/1.8/numru/gphys/grib.rb:377:in `version'
>>>>>>>>>>             from /usr/lib/ruby/1.8/numru/gphys/grib.rb:210:in `parse'
>>>>>>>>>>             from /usr/lib/ruby/1.8/numru/gphys/grib.rb:1431:in `parse'
>>>>>>>>>>             from /usr/lib/ruby/1.8/numru/gphys/grib.rb:1411:in `open'
>>>>>>>>>>             from /usr/lib/ruby/1.8/numru/gphys/gphys_grib_io.rb:80:in `open'
>>>>>>>>>>             from /usr/lib/ruby/1.8/numru/gphys/gphys_io.rb:121:in `open'
>>>>>>>>>>             from contour1000mb_grib.rb:3
>>>>>>>>>> #----------------------
>>>>>>>>>>
>>>>>>>>>> また、JRA-25 のデータファイル (たとえば anl_mdl.197901.gr) を
>>>>>>>>>> inspect_varnames.rb もどき
>>>>>>>>>> #----------------------
>>>>>>>>>> require "numru/ggraph"
>>>>>>>>>> p NumRu::GPhys::Grib_IO.var_names('anl_mdl.197901.gr')
>>>>>>>>>> p NumRu::GPhys::IO.var_names('anl_mdl.197901.gr')
>>>>>>>>>> #----------------------
>>>>>>>>>> で読もうとすると、別のエラーが出ます。
>>>>>>>>>>
>>>>>>>>>> #----------------------
>>>>>>>>>> This Grib version (201) has not supported yet
>>>>>>>>>> []
>>>>>>>>>> /usr/lib/ruby/1.8/numru/gphys/gphys_io.rb:257:in `var_names': undefined
>>>>>>>>>> method `var_names' for nil:NilClass (NoMethodError)
>>>>>>>>>>             from inspect_varnames_JRA.rb:3
>>>>>>>>>> #----------------------
>>>>>>>>>>
>>>>>>>>>> それぞれ問題が違うような気もするのですが、いずれにしても
>>>>>>>>>> どうしたらよいかわからなくて困っています。
>>>>>>>>>> どなたかお知恵を貸してください。よろしくお願いします。
>>>>>>>>>>
>>>>>>>>>> ------------------------------------------------------------
>>>>>>>>>> 内藤 陽子 <naito@xxxxxxxxxxxxxxxxxx>
>>>>>>>>>
>>>>>>>>> 堀之内 武
>>>>>>>>> 北海道大学 地球環境科学研究院 地球圏科学部門
>>>>>>>>> 〒060-0810 札幌市北区北10条西5丁目
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>
>>>> 堀之内 武
>>>> 北海道大学 地球環境科学研究院 地球圏科学部門
>>>> 〒060-0810 札幌市北区北10条西5丁目
>>>>
>>>>
>>>
>>>
>>>
>>> -- 
>>> Seiya Nishizawa
>>> RIKEN Advanced Institute for Computational Science
>>> Tel: +81-78-940-5754, Fax: +81-78-304-4972
>>> 7-1-26, Minatojima-minami-machi, Chuo-ku, Kobe, Hyogo 650-0047, Japan
>>
>> 堀之内 武
>> 北海道大学 地球環境科学研究院 地球圏科学部門
>> 〒060-0810 札幌市北区北10条西5丁目
>>