Plot2のマクロ利用 の変更点


#author("2024-03-09T10:21:42+09:00;2024-03-09T10:20:32+09:00","default:masami","masami")
#author("2024-03-09T10:22:12+09:00;2024-03-09T10:20:32+09:00","default:masami","masami")
*Plot2でのマクロ利用 (2020/05/10作成) [#od850a80]
#image(https://mkanzaki.sakura.ne.jp/images/plot2-example.png,center,80%)
**Plot2とは [#u351e6e5]
 (2020/10/11) 最近のRIETAN-FPのupdateの後もこのPythonスクリプトはそのまま使えるようでした。なお、RIETAN-FPではgnuplotを使って、粉末回折パターンをプロットできますが、私はPlot2を普段よく使っているため、Plot2でパターンを自動的にプロットできるようにしています。
 Plot2とはMac用の科学用2Dプロットプログラムで、App Storeからダウンロードできます。私は普段ラマンスペクトル等のプロットによく利用してます。ピークのfitが必要な場合は、Fitykを使うという棲み分けとなってます。
 ただ以下のようにterminalからマクロを動かす場合は、App Storeではなく、作者の[[ページ:https://plotdoc.micw.org/Doc/CommandLine]]からダウンロードしたPlot2x(無償)を使う必要があります。
 &color(red){非常に重要:Plot2でプロットされたパターンは、データ数が多いと(粉末回折パターンの場合は確実に)データが間引きされてプロットされます。そのため表示されたパターンが実際のものと異なって見える場合があります。パターンが現れた後は、必ずInspectorの上部の左端アイコンをクリックして、Enable drawing of every data pointをチェックしてください。}; 残念ながらマクロから制御する方法はなく、Preferenceで変えることもできません。
**RIETAN-FP結果プロットへのマクロ利用 [#j191a16e]
 Plot2にはマクロも用意されていて、GUIによる操作を行わずに、プロットを自由にカスタマイズすることができます。さらにMySQL, Perlによるフィルターも用意されていますが、私はまだ十分に使いこなせていません。
 Plot2はRIETAN-FP(Rietveld解析プログラム)の結果を表示するのにも使っていて、前にgpd2plot2.pyというPythonスクリプトを作りました。これはRIETAN-FPが作成したhoge.gpdを読んで、それをPlot2で処理しやすい形式に加工するものです。ただ、パターンがちゃんと見えるようになるには、読み込んだ後にPlot2のInspectorから色々と調整をする必要がありました。一度そのような調整をした時の結果をマクロとして保存しておくと、次回からはそのマクロを呼び出すことで同じ解析についてはある程度は手抜きができるのですが、それでもまだ色々と調整が必要でした(特にスケーリングなど)。
 そんな調整などは全てマクロにやれせればと当然思います。以前からPlot2xはterminalからデータやマクロを読み込み実行できると記載されてました。しかし、しばらく前に試した時にはうまく動きませんでした。ところが、最近ダウンロードしたバージョンでは実行できるようになってました。そこで以前のgpd2plot2.pyを改良して、色々な調整にマクロを利用して自動化するようにしました。以前のようにhoge.gpdを処理したファイルを作るところまでは同じですが、今回はこれを作成したマクロ中から読み込ませて、その後マクロを利用します。このPythonコードをRIETAN.commandの最後で起動するようにしておけば、RIETAN-FP実行終了時にプロットが自動的に行われます。さらにR因子や相の名前もhoge.lstから読んで、プロット上に表示するようにしました。必要ならさらに色々と情報を表示することができるはずです。
**マクロの利用例:(興味ない人は飛ばしてください)
 import hoge.dat 0 ','
これはhoge.datをASCIIファイルとして読み込む(0)、区切りはコンマを指定。','がないと、デフォルトのtab区切りになります。これをマクロに書きこんでおいて、コマンドラインからPlot2を起動する時にこのマクロを引数として与えると、マクロからhoge.datが読み込まれ、パターンのプロットができます。terminalから与える場合のコマンドは以下のようになります。これをPythonスクリプトの中から実施しています。plot2.macroがPythonスクリプトが出力マクロになります。
 % Applications/Plot2x.app/Contents/MacOS/Plot2x -m plot2.macro -q no -h no

以下はデータポイントの表示の設定の例です。
 bstyleysticks yes 4
 bstickcolor 0 0 0 4 1
 bsticksize 5 4
バッファー4のデータをy方向stick表示、色は黒、サイズは5 pixelと指定しています。これは回折線位置を示すために使っています。もちろんPythonの中では、4の部分は変数にして回しています。bstyleysticks以外にbstylesymbols, bstylelinesとかがあります。
 # axis attributes
 setaxis yes yes no no 
 range 1 5 120
 range 2 -1000 10000
これはプロットのスケーリングで、range 1は横軸、range 2は縦軸。実際に与える値は、hoge.gpdを読んで、横軸縦軸の最大、最小値を求めてから設定することになります。
 atext bottom "2theta / degree" : atext left "Intensity / a.u."
これは軸につける名前や単位の設定です。
 RIETAN.commandの最後に
 ./gpd2plot2.py $sample.gpd &
を追加しておくとRIETAN-FPの計算後、自動的にプロットしてくれます。
 一応何とか最低限のマクロを適用して、Rietveld解析結果を直ちにチェックする目的には十分なプロットが出せるようになりました。3相のRietveld refinementの結果を、これでプロットさせたものが一番上のグラフです。この場合も、RIETAN.commandからgpd2plot2.pyを自動起動させてます。これは最初に注意したEnable drawing of every data pointをチェックする以外は、何ら調整せずにプロットされたものです。まだ不完全ですが、参考に今回改造した[[[コード:https://mkanzaki.sakura.ne.jp/gpd2plot2.py]]]を置いておきます。
 一応何とか最低限のマクロを適用して、Rietveld解析結果を直ちにチェックする目的には十分なプロットが出せるようになりました。3相のRietveld refinementの結果を、これでプロットさせたものが一番上のグラフです。この場合も、RIETAN.commandからgpd2plot2.pyを自動起動させてます。これは最初に注意したEnable drawing of every data pointをチェックする以外は、何ら調整せずにプロットされたものです。まだ不完全ですが、参考に今回改造した[[[コード:https://mkanzaki.sakura.ne.jp/gpd2plot2.py]]]をダウンロードできます。
-なお、RIETAN-FPの計算を続けて何度も実行すると、起動しているPlot2xがMatrixのAgent Smithのように増殖しますので、毎度それらを終了させてやる必要があります。