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

[dennou-ruby:003791] Re: gpview & ¤



樫村さま, みなさま

竹広です. 遅ればせながら, だいぶ前に頂いていたパッチを
gpview にあてました. 申しわけありませんが open_new_gturl は
テストが追いつかないのでまだいれてません. 

ついでにといってはなんですが, これまただいぶ前に高橋芳幸さんから
もらっていた提案を導入しました. これは線グラフの重ね描きのとき
グラフを線種でなく色で区別したいというアイデアでした. このために
新たなオプション --overplot_color/-Opc を導入しました.
このオプションをつけるとグラフが色づけされて描かれます.
つけなければ今まで通り line type を変えてプロットされます.

  $ gpview --overplot 5 --Opc foo@bar

という感じ. 色づけの方をデフォルトにしたいという意見が多ければ,
そのようにしようかと思っています.

                    Takepiro(竹広真一)@数理解析研究所. 京都大学
                      	E-mail:takepiro@xxxxxxxxxxxxxx
			       takepiro@xxxxxxxxxxxxxxxxxxxx


> [1  <text/plain; iso-2022-jp (quoted-printable)>]
> 堀之内様、竹広様:
> 
> 分かりました。ありがとうございます。
> 
> 当初、私は gpview の使い勝手が上がればいいとだけ思っており、
> 他のgpコマンドのことまで考えが及んでおらず、パッチは浅はかな提案でした。
> 申し訳ございません。
> 
> > URL 表記そのものを拡張して複数オブジェクトを
> > 指せるようにしてはどうかというつもりでした。
> > 複数ファイルにまたがる一オブジェクトの指定という,既にある機能も
> > 拡張ですし。
> > そうなると,まずは gphys_io.rb の parse_gturl および open_gturl 
> > に手を入れるところから始めることになります。
> 
> この改造を私の手で行うには、時間が少しかかると思います。
> # 興味はあるので、やってみたいとは思っていますが。
> 
> 
> とりあえず、当初提案の1と3だけ適用するパッチを添付します。
> > 1】 --tone [a | e | f | b | c] オプションが効かない問題
> > 3】差をとるオプション(--diff)の追加
> 
> 
> > 2】1度に複数枚描く(--anim 除く)ときに絵が徐々に上にずれる問題(これは仕様なのかもしれませんが)
> > ・[> gpview T.nc@T U.nc@U] などのように複数のgturlを与えて、連続して絵を描いたときに、
> > GGraph.margin_info が複数回呼ばれ、この中で、DCL.slmgn(xl, xr, yb, yt) が何度も呼ばれるのが原因のようです。
> > 
> > 回避策として、$flag_marginを用意して、2回目からは DCL.slsttl(gturl, 'b',  1.0, -1.0, 0.008, 2) だけ呼んで
> > 右下のマージンinfoを更新するようにしました。
> > ただし、この場合、文字の高さが固定(GGraph.margin_infoでは文字数が多い場合に調節している)なので、美しくないです。
> > 本来はGGraph.margin_infoが複数回呼ばれてもよいようにすべきかも知れません。
> 
> 2については、この回避策だと2枚目以降にGGraph.margin_info内で実行されてる文字列短縮が働かないので、よくないかと思ったので
> 取り下げておきます。
> 4−6についても議論していただいた方向に従い、取り下げます。
> 
> いろいろと議論して/教えていただき、ありがとうございました。
> 勉強になりました。
> [2 gpview.patch <application/octet-stream (7bit)>]
> --- gpview	2014-11-17 13:49:12.000000000 +0900
> +++ gpview_mod3	2014-11-20 13:21:47.000000000 +0900
> @@ -157,6 +157,10 @@
>  
>  :--overplot
>    set number of lines on each figure
> +  
> +:--diff:
> +  calculate the difference of two variables.
> +  you must provide two gturls whose size and dimension are same.  
>  
>  == CONTOUR/TONE OPTIONS
>  
> @@ -717,6 +721,7 @@
>                     ['--m',                        GetoptLong::NO_ARGUMENT],
>                     ['--operation',                GetoptLong::REQUIRED_ARGUMENT],
>                     ['--time_ax',                  GetoptLong::REQUIRED_ARGUMENT],
> +                   ['--diff',                     GetoptLong::NO_ARGUMENT],                   
>                     ###     line/mark option    ###
>                     ['--line',                     GetoptLong::NO_ARGUMENT],
>                     ['--mark',                     GetoptLong::NO_ARGUMENT],
> @@ -781,20 +786,20 @@
>  if ($OPT_tone) 
>    case $OPT_tone
>    when "a"
> -    $auto, $tonf, $tona, $toneb, $tonec = true,false,false,false
> +    $auto, $tonf, $tonb, $tonc = true,false,false,false
>    when "e"
> -    $auto, $tonf, $tona, $toneb, $tonec = false,false,false,false
> +    $auto, $tonf, $tonb, $tonc = false,false,false,false
>    when "f"
> -    $auto, $tonf, $tona, $toneb, $tonec = false,true,false,false
> +    $auto, $tonf, $tonb, $tonc = false,true,false,false
>    when "b"
> -    $auto, $tonf, $tona, $toneb, $tonec = false,false,true,false
> +    $auto, $tonf, $tonb, $tonc = false,false,true,false
>    when "c"
> -    $auto, $tonf, $tona, $toneb, $tonec = false,false,false,true
> +    $auto, $tonf, $tonb, $tonc = false,false,false,true
>    else
>      raise "The value of option --tone should be 'a','e','f','b' or 'c'."
>    end
>  else
> -  $auto, $tonf, $tona, $toneb, $tonec = true,false,false,false
> +  $auto, $tonf, $tonb, $tonc = true,false,false,false
>  end
>  
>  ## decide VIEWPORT
> @@ -826,6 +831,19 @@
>    print "  Reading #{gturl}\n"
>    ARGV.shift 
>  
> +  ## for case of calculating difference of two gphys object
> +  if ($OPT_diff)
> +    raise "--diff option must be used with even numbers (2, 4, 6,...) of gturls" if ARGV[0] == nil
> +    prev_gturl = gturl
> +    gturl = ARGV[0]
> +    gturl = gturl+'@'+$OPT_var if $OPT_var
> +    print "  Reading #{gturl}\n"
> +    gp = gp - GPhys::IO.open_gturl(gturl)
> +    print "  Taking difference: #{prev_gturl} - #{gturl}\n"
> +    gturl = prev_gturl+" - "+gturl
> +    ARGV.shift 
> +  end
> +  
>    ## mean along any axis
>    if ($OPT_mean)
>      dims_mean = ($OPT_mean).split(/\s*,\s*/)
> [3  <text/plain; iso-2022-jp (quoted-printable)>]
> 
> 樫村
> 
> 
> 
> > 2014/11/20 12:36、Takeshi Horinouchi <horinout@xxxxxxxxxxxxxxxxx> のメール:
> > 
> > 樫村さま:
> > 
> > こちらこそ,パッチをよく見ず混乱を招いてすみません。
> > gpview に対するパッチだったんですね。てっきり,gphys_io.rb
> > に対するものかと思ってました。(それだと完結しないので,最後
> > に送ってくれたパッチは,一連の変更の一部かと思ってました。)
> > 
> > 私の話:
> > 堀之内> ワイルドカードを導入するというのはどうでしょうか。
> > 堀之内> 変数名の部分を * や T* などとできるようにする。
> > 
> > は,
> > 
> > 竹広> 1,2,3 を採り入れることは問題ないと思いますが, 4,5,6 はちょっと
> > 竹広> 悩んでいます. gp* シリーズで扱う変数の指定は gtool4 規約での 
> > 竹広> URL 記法に従う, ということが基本ですので,..
> > 
> > というのを変えず,URL 表記そのものを拡張して複数オブジェクトを
> > 指せるようにしてはどうかというつもりでした。
> > 複数ファイルにまたがる一オブジェクトの指定という,既にある機能も
> > 拡張ですし。
> > 
> > そうなると,まずは gphys_io.rb の parse_gturl および open_gturl 
> > に手を入れるところから始めることになります。(だから,よく見ずに
> > gphys_io.rb へのパッチと思ってました。)
> > 
> > 送ってくれた変更を gpview に入れるのはちょっと筋が悪いと,私は
> > 思います。渡された文字列を元に GPhys オブジェクトを開くというのは
> > gpview に限らず広く行われる操作ですので,アプリケーションコマンド
> > 内でなくライブラリでやるのが良いのでは? あと,gpview で個別に
> > すると,gpview 専用の仕様になりますよね。コマンド間の整合性がなく
> > なると,使いにくくもならないでしょうか。
> > 
> > 
> >> 堀之内様:
> >> 
> >> すみません。混乱してしまったので、確認させてください。
> >> 
> >> 私としては、gpviewのレベルでの変数ワイルドカード対応で満足するつもりだったのですが、
> >> 堀之内さんの意図としては、GPhys::IO.open (かそれより深いところ) のレベルで対応すべし、
> >> ということでしょうか?
> >> 
> >> 
> >> 昨日お送りしたコード(パッチ)はgpview に data.nc@* と与えられたときに(data.nc にはU, V, Tがあるとして)、
> >> gpview data.nc@U data.nc@V data.nc@T
> >> とgpviewが複数のgturl を受け取っているかのように解釈するようにしたものでした。
> >> 
> >> 樫村
> >> 
> >>> 2014/11/19 23:33、Takeshi Horinouchi <horinout@xxxxxxxxxxxxxxxxx> のメール:
> >>> 
> >>> 堀之内です。
> >>> 
> >>>> ファイル名のワイルドカードのほうは複数ファイルにまたがった
> >>>> 一オブジェクトを指すようになってることとの整合性をどうつけるかが
> >>>> 考えどころですね。こうなると,各ファイルそれぞれに収録された別々の
> >>>> オブジェクトにも対応したいでしょう。
> >>> 
> >>> この点についてですが,「よきに計らう」案として,
> >>> ワイルドカード自体は共通として,もしもくっつけて
> >>> 一つのオブジェクトとして開けるのであればそのようにし,
> >>> それができなければ複数オブジェクトとして開くという
> >>> ふうにしてもいいかもしれません。
> >>> 
> >>> そのためには,「くっつけられない」ことが一発で判断できると嬉しい
> >>> わけですが,確かめてみたところ現状の GPhys#join では格子が完全に重
> >>> なる場合にエラーを出さないという問題があることがわかりました
> >>> (重複が勝手に無視される)。
> >>> 上記のようにするかどうかはともかく,この場合はエラーを出す
> >>> べきだと思うので,そう直しました。
> >>> --- とりあえず Git の本尊に push されたときにメールを送る宛先と
> >>> して樫村さんを加えたので,メールが届いてるかと思います。
> >>> 
> >>> これをベースにすると,実装は簡単なはずです。つまり,
> >>> 
> >>>>> もしもくっつけて一つのオブジェクトとして開け
> >>> 
> >>> ないときは,例外が上がるので,それを rescue して複数オブジェクト
> >>> としてのオープンすを試みるという風に実装できます。
> >>> 
> >>> 
> >>> 
> >>>> 堀之内です。
> >>>> 
> >>>>> # 私は入ってる変数を順々に眺めたいときもあるのですが…
> >>>> 
> >>>> なるほど,gturl の仕様として,ワイルドカードで複数オブジェクトを
> >>>> 指せるようにしたいということですね。url という表現とのミスマッチ
> >>>> が気にならなくもないですが,必要性はわかりますし,ものは考えよう
> >>>> ということで,私としては仕様さえうまく決まればそれで構わないと
> >>>> 思います。竹広さんはどうですか?
> >>>> 
> >>>> ファイル名のワイルドカードのほうは複数ファイルにまたがった
> >>>> 一オブジェクトを指すようになってることとの整合性をどうつけるかが
> >>>> 考えどころですね。こうなると,各ファイルそれぞれに収録された別々の
> >>>> オブジェクトにも対応したいでしょう。
> >>>> 
> >>>> # ちなみに戻り値は Array に変更でしょうか。
> >>>> 
> >>>>> 堀之内さま:
> >>>>> 
> >>>>> アドバイスありがとうございます。
> >>>>> 
> >>>>>> 変数名一意でない場合の対応がほしいです。候補をリストして raise
> >>>>>> がいいと思います。
> >>>>> これは例えば、変数名に uwnd と vwnd があって ?wnd とか指定したときのことですよね。
> >>>>> この場合は、ワイルドカード表現に合うもの全てを順々に描画させるようにしたつもりなのですが、
> >>>>> raise で止めた方が良いでしょうか?
> >>>>> # 私は入ってる変数を順々に眺めたいときもあるのですが…
> >>>>> 
> >>>>> 
> >>>>> その他は承知しました。
> >>>>> 
> >>>>> 樫村
> >>>>> 
> >>>>> 
> >>>>>> 2014/11/19 18:34、Takeshi Horinouchi <horinout@xxxxxxxxxxxxxxxxx> のメール:
> >>>>>> 
> >>>>>> 堀之内です。
> >>>>>> 
> >>>>>>> # 期待かけられると張り切るたちです。
> >>>>>> 
> >>>>>> 嬉しいです。では,ということで...
> >>>>>> 
> >>>>>> ざっとみてみました。汎用にするため,なるべく GPhys::IO 
> >>>>>> のメソッドを使いましょう(あるべきものがないと思ったら
> >>>>>> ご指摘を; ブーメランが返る可能性もありますが...)。
> >>>>>> 幸い,今の場合は var_names と var_names_except_coordinates 
> >>>>>> があります。使いたいのは後者ですよね? 
> >>>>>> あとは Array#select を使えばすっきり。
> >>>>>> 
> >>>>>> 変数 file は,先ほど話題になったように,複数 (Array) である
> >>>>>> 場合があります。
> >>>>>> 
> >>>>>> 変数名一意でない場合の対応がほしいです。候補をリストして raise
> >>>>>> がいいと思います。
> >>>>>> 
> >>>>>> マッチしない場合のメッセージ。変数名をリストするのは
> >>>>>> Good です。さらに,どういう変数名指定だったから合わなかっ
> >>>>>> たのかも出すと,問題発見が早くなると思います(「"T*" では
> >>>>>> "temp", "hoge" などにはマッチするのがないよ」などと)。
> >>>>>> 
> >>>>>> コメント文,積極的につけてくれてありがとうございます。
> >>>>>> ほかの部分にあわせて英語でお願いします。
> >>>>>> 
> >>>>>>> 樫村です。
> >>>>>>> 
> >>>>>>>>> うーん, 便利だろうけど私には高度すぎて実装できそうにないような...
> >>>>>>>> 樫村さんに期待,です。 (^_^)
> >>>>>>> 
> >>>>>>> # 期待かけられると張り切るたちです。
> >>>>>>> 
> >>>>>>> あまり美しくないかもですが、添付のようにすれば一応変数ワイルドカード対応してるでしょうか。
> >>>>>>> ファイル名のワイルドカードと両立させるために若干ややこしくなってます。
> >>>>>>> #試した範囲では上手くいきましたが、検証不十分です。
> >>>>>>> 
> >>>>>>> 素のgpviewに対するパッチを添付します。
> >>>>>> 
> >>>>>> 堀之内 武
> >>>>>> 北海道大学 地球環境科学研究院 地球圏科学部門
> >>>>>> 〒060-0810 札幌市北区北10条西5丁目
> >>>>>> 
> >>>>>> 
> >>>>> 
> >>>>> 樫村(山本)博基
> >>>>> hiroki@xxxxxxxxxxxxxx
> >>>> 
> >>>> 堀之内 武
> >>>> 北海道大学 地球環境科学研究院 地球圏科学部門
> >>>> 〒060-0810 札幌市北区北10条西5丁目
> >>>> 
> >>> 
> >>> 堀之内 武
> >>> 北海道大学 地球環境科学研究院 地球圏科学部門
> >>> 〒060-0810 札幌市北区北10条西5丁目
> >>> 
> >>> 
> >> 
> >> 樫村(山本)博基
> >> hiroki@xxxxxxxxxxxxxx
> >> 
> >> 
> > 
> > 堀之内 武
> > 北海道大学 地球環境科学研究院 地球圏科学部門
> > 〒060-0810 札幌市北区北10条西5丁目
> > 
> > 
> 
> 樫村(山本)博基
> hiroki@xxxxxxxxxxxxxx
>