potass' blog

ポタシウムのことが書いてないブログ。

ALPS の XML ファイル群から CSV ファイルを作る

ALPS の XML ファイル群から binning level のグラフを作る - potass' blog の続編。

やりたいこと

今度は XML ファイル群から CSV ファイルを作ります。
これの利点は Igor や NgraphExcel などで簡単にグラフを描画できる形式にできることです。
全部の物理量を CSV に変換してもいいのですが、別に全データは XML に入ってるし基本的に2次元グラフ化すことが多いので実用上2つの物理量さえ取ってこれれば十分。必要なときにまた取ってくればいい。*1

詰まったこと

今回は特にない。実質、ALPS の XML ファイル群から binning level のグラフを作る - potass' blog にある binning.py を XY Plot にしただけ。
ただし、XY Plot から CSV の出力には一度 pyalps.plot.makeGnuplotPlot([XY dataset]) によって Gnuplot 形式にした後に CSV に変換している。*2

実装

ソース

ALPS 2.2 (beta) + Python 2.7 (OS: Windows 7) で動作確認した。
なお、QMC に対して特化している都合上、例えば CMC などで物理量を指定する際はしっかりとその通りの物理量(ただし半角スペースは _ に置き換える)を入力しないとエラー表示されます。

使用例

例えば次の場合(かなり複雑なケースです)。

  1. 磁化の磁場依存性をプロットしたい。
  2. CSV データは output.dat に出力したい。
  3. グラフに描画したい。タイトルは「MH01」。ラベルは「MH02」。
  4. XML ファイルは ./hoge/ にあり、prefix が hogehoge

この場合は

$ alpspython replace.py -p hogehoge --fig --title MH01 --label MH02 -x h -y Magnetization_Density ./hoge/ > output.dat

Magnetization_Density に関しては M でも良い。ただ、ほしい物理量に空白を含む場合はアンダーバーが必要。
※基本的に QMC の出力を処理する目的なので CMC や他の計算手法の場合は ALPS での正しい物理量の名前(の半角スペースをアンダーバーにしたもの)を入れて下さい。そうすれば問題なく使えると思います。

*1:全物理量を一気にとってきたい人は pyalps.loadObservableList() の各要素を for で回して適当な配列に突っ込んで最後に一気に出力させればいいと思います。

*2:pyalps の変換用ライブラリで一番 CSV に近い形式がこれだったという理由だけです。もっとスマートな方法がある場合は是非教えて下さい。なお、このへんの詳しい仕様は http://alps.comp-phys.org/static/pydocs2.2/ を見て下さい。