PDFgui/fit2を使う
「今日からMacBook Pro/Anacondaを使おう(2021.12.11-12)」という記事を書いて、DiffPy-CMIを使えるところまで進もうとしていたのだが、停滞中である。
まずは、PDFgui(DiffPy-CMIの前のバージョン)についてもう少し前に進みたいと思って、この記事を書いている。
現状:python=2.7でしか動かないということが気にいらないので、賞味期限切れのsingle-file installers, diffpy-1.0-r3067.exeをダウンロード、インストールして練習用に使っている。
しかしながら、発展性が全くないので、Windows/Anaconda環境で使うことにする。
といっても、Anacondaのコマンドプロンプトから、以下のcondaコマンドを入力しただけである。
conda update -n base conda
conda config --set restore_free_channel true
conda config --add channels diffpy
conda create --name=py27 python=2.7
conda activate py27
conda install "diffpy.pdfgui>=1.1.2"
DiffPyのフォルダーに新たにPDFgui(py27)が追加されただけで、何も変わらない。
さて、測定データを借りてきたのだがどうやって読み込めばよいのだろう。
テキストデータは、そのまま読み込むことができた。担当の方がこのソフトで読めるようして下さっていたということ。
解析準備が整った。PDFfit2を使えばよいだけだが、フィッティングパラメータが理解できていない/忘れていることに気付いた。3次元原子構造モデルを使って解析することに気をとられ、PDFのデータがどのようにして作られているのかも理解できておらず、スペクトルの減衰、ピーク幅、そのサイズ依存性、ひずみや欠陥の評価方法など、知らないことだらけだ。
粒径に意識が集中しすぎていたようだ。
球形近似で粒径を求めるだけであれば、比較的簡単に行えることが分かった。
1.QdampとQbroadは使わない事。
2.フィッティングパラメータは6つ
・Scale Factor
・spdiameter
・格子定数
・u11, u22, u33
・delta2
・delta1
delta1とdelta2を両方同時に使うとRwは小さくなり、フィッティングは良くなるが、片方がマイナスになるのが気になる。そのことに合理性があれば良いと思うが、そこまで確認は取れていない。
とりあえずうまくいってると思うのだが、それは、Rigakuの技術資料のおかげである。その資料には、QbroadとQdampの値を大きくすると(いずれも0.05くらい)、ナノ粒子のG(r)のように、減衰してしまうことが、図で示されているのである。
このことを知らずに、QbroadとQdampを変数にしてフィッティングすると、エラーになれば気付くのだが、エラーにならず、予想に近い粒径で収束することも起こりうるので、まずは、使わないに越したことはないと思う。
ひずみや欠陥の情報を得ようと思ったら、もっともっと掘り下げないとダメだと思うし、PDFguiではなく、DiffPy-CMIを使うことが必要で、かつ、ひずみや欠陥を原子構造モデルで自在に作り出すことができるソフトと組み合わせることが必要である。
そこまでやらないと、PDFを使う意味が無い。球体近似で平均粒径を算出しただけでは、殆ど利用価値は無い。フィッティング後の格子定数が小さくなるとか、uijが大きいとかに、物理化学的意味はあるのだが、そこは通過点。ひずみのラジアル方向の変化、表面に吸着している元素の情報、・・・。
*次の機会には、次のレベルに行こう!
1月24日-25日
Brookhaven National LaboratoryのPavol Juhasさんのパワポ資料:DiffPy-CMI - a software toolbox for real-space structure analysis and Complex Modeling
を読んでみた。パワポだから、読むところは少ない。
まずは、PDFguiについて、
PDFgui limitationsとして1ページに15行ほどでまとめられている。
・periodic structures only, no support for isolated particles
扱えるのは周期構造のみ、孤立粒子は扱えない。
球体近似でナノ粒子の粒径を算出することが可能だが、それは、ナノ粒子を孤立粒子として解析しているのではないということかな。
周期構造についてPDFを計算し、その境界条件として、ナノメートルの球体であることを適用することと、クラスターやナノ粒子の原子構造モデルに対してPDF計算することとは等価ではないということだな。
・particle size corrections only for spherical shape, no option for ellipsoid, cylinder, prism, etc.
PDFguiの開発チームから、こうやって明確に表現されると、落胆してしまう。
楕円でも円柱でも正八面体でも幾何学的に表現できるものは、容易に計算できるものだと思っていたが、そう簡単に計算できるものではないということか、それとも対応する予定は無いということなのか。
・internal structure representation is very basic - no options mor molecules, rigid groupes, bond length/angle relations, no internal support for representation as space group with asymmetric unit
・limited math support within constraint formulas
・no way to adjust PDF calculations by user-defined profile functions or improved peak-width formulas
・no option to incorporate other informations soueces (theory or experiment) into optimization
・PDF-calculation engine PDFfit2 is hard to maintain or extend
こうやってできないことを並べ立てられると、幻想は打ち砕かれ、目が覚める。
これらをできるようにしたのが、DiffPy-CMIということなのだろう。これらすべての制限を取っ払うことができたのかどうかはわからないが、PDFgui/fit2にはこういう制約があるとは間違いないということだ。すなわち、PDFgui/fit2は、触媒粒子に対しては役に立たないということは間違いないところだろう。
最後に、PDFgui/fit2のadvantageが書かれている。
・eagy to learn, noneed to know any programming language
・[simple] simulations are easy to setup and process
なるほど、こういう利点があるのか。
確かに、短期間で学べた。これ以上はやろうとしても出来ないところまで到達したのだ、PDFgui/fit2においては。
次に、何ページかにわたって、DiffPy-CMIの概要の説明が続き、概要が1ページにまとめられている。
上記のことができるようにした、あるいは、できるはずだということである。
最後に3つだけdrawbacksが書かれている。
・steep learning curve
・no GUI, canbe only used from Python scripts
・requires fair knowledge of Python
1行目を直訳すると急激な成長曲線となるが、どういう意味だろう。これを使えば急激に成長できる、ということであればdrawbackではない。急な坂道だから、体力・気力・知力がなければ一歩たりとも進めないということなのだろう。
2つ目は、アイコンを押せばソフトやデータがロード/セーブされるとか、アイコンを押せばシミュレーションスペクトルやフィッティング残差がグラフ化されて表示されるのではないということだ。FortranやBASICなどで経験してきたようなプログラムを書かなければ何も始まらないということだ。Pythonでプログラムを書かなければ何も始まらないのだ。
3つ目は、Pythonを使いこなすには十分な知識が必要だということである。
要するに、DiffPy-CMIは何でもできますよ、ただし、知力・気力・体力のある人に限る!と言われているのだ。
とはいえ、PythonはFortranやBASICよりも格段に書きやすいし、見やすい(他人が書いたプログラムでも、読みやすい・理解しやすい)言語だと思う。
FortranやBasicは、書いた当人でもしばらく経つと解読に苦労するのだが、Pythonはそこは圧倒的に扱いやすいと思う。
ともあれ、DiffPy-CMIを攻略しなければ、PDF測定データが、宝の持ち腐れになるということは間違いないので、早急に習得しなければならない。
さあ、DiffPy-CMIの世界へ飛び立とう!
1月28日(金)
ナノ粒子の解析にPDFは有効だという論文を読んでいると、確かにそうだな、2 nmくらいの白金粒子だと、最表面原子の数は50%くらいになるのかな。そうすると、最表面原子層の中心に向かう原子間距離が全て変化すれば、容易に検出されるだろうと思うのだが、そう簡単な話ではなさそうである。各原子はエネルギー的に安定な位置に収まろうとするのだが、その経路は複数あり、計算上の最終安定状態がわかっても、いつその状態になるのかわからない。
観測されたスペクトルから推定される構造が、エネルギー的に安定かどうかは、計算すればわかるが、実際に安定状態になっているかどうかはわからない。熱力学的不安定状態にあるナノ粒子を観測する際に、原子が移動しやすい温度にまで上げてしまうと、構造安定化が生じるかもしれない。
触媒活性が、熱力学的安定状態で実現されているかどうかもわからない。
いずれにしても、正しい答えは、全てを正しく処理し、理解し、計測し、解析し、考察しなければ、得られないのであるから、すべてできるようにしていこう。
2月11日(金)
今日、Windows Subsystem for Linux 2(WSL2)の環境で、Anacondaをインストールし、DiffPy-CMIとASEをインストールし、JupyterLab上でdd2019-diffpy-cmiのプログラムの動作確認を行った。
「DiffPy-CMI + ASE」の計算環境が、ようやく整った。
まだリンクさせて動かしてはいないので、計算環境として十分かどうかは、実際に計算させながらの作業となる。
2月13日(日)
Windows10+WSL2で「DiffPy-CMI + ASE」を使うことにしたので、MacBook
proは知人に使ってもらうことにし、初期化した。
2月14日(月):DiffPy-CMI
diffpy/add2019-diffpy-cmiを走らせてみる。(GitHubからJupyterLabに移した:知人にやってもらった)
01から10まで走らせてみた。02, 06, 08, は途中で停止、もしくは図が表示されず。09, 10はdiffpy.mpdfモジュールがインストールされていないために動かなかった。
2月15日(火):diffpy/add2019-diffpy-cmi
09, 10のdiffpy.mpdfは、Python 2.7バージョンであり、使う予定もないので無視する。
02は、ipyparallelをインストールしてOK、さらに、'Line 2D' object has no property 'hold'は、hold = Falseを除くことで、OK
06, 08で図が表示されなかったのは、%matplotlib notebookを%matplotlib inlineとすればOK、ということで、チュートリアルプログラムの動作確認は、無事終了!