Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 FU チュートリア ル 第 17 回 CMSI 神戸ハンズオン 2014 年 8 月 18 日 - FU をベースにした実践的分子モデリングソフトプログラミング実 習 - 【プログラム】 1. 13:00-13:30 FU の概要 2. 13:30-16:30 wxPython プログラミング実習.

Similar presentations


Presentation on theme: "1 FU チュートリア ル 第 17 回 CMSI 神戸ハンズオン 2014 年 8 月 18 日 - FU をベースにした実践的分子モデリングソフトプログラミング実 習 - 【プログラム】 1. 13:00-13:30 FU の概要 2. 13:30-16:30 wxPython プログラミング実習."— Presentation transcript:

1 1 FU チュートリア ル 第 17 回 CMSI 神戸ハンズオン 2014 年 8 月 18 日 - FU をベースにした実践的分子モデリングソフトプログラミング実 習 - 【プログラム】 1. 13:00-13:30 FU の概要 2. 13:30-16:30 wxPython プログラミング実習 1) ウィンドウの作成 2) 分子構造データファイルの読み込み 3) OpenGL による分子模型の描画 4) マウス event の取得と分子模型の回転 (随時休憩を挟む) 3. 16:30-17:00 FU プログラムの改変・機能追加 4. 17:00-17:30 質疑・応答 神戸大学・北浦和夫

2 2 京コンピュータのような高性能コンピュータが利用可能になり、 巨大分子や膨大な数の小・中型の分子の量子化学計算が可能にな った。これに伴い、構造モデルの作成、入力データの作成や結果 のグラフ化を効率よく行える支援プログラムの必要性が高まって いる。確立した計算法によるルーチンワークの場合は別にして、 新しいことに挑戦する場合、既成の計算支援プログラムには必要 な機能が無い、あるいは、できるとしても、面倒な操作が必要な ことが多い。将来に向けて、大規模計算を支援する GUI プログラ ムをみんなで育てていくことが重要だと考える。各自・各グルー プが取得した計算ノウハウを計算支援プログラムの形で蓄積し相 互利用できるようになれば、計算化学の活用がいっそう促進され ると期待される。 計算化学者こそが先端的研究を通じて貴重なノウハウを取得し ているはずであるが、自ら GUI プログラムを作成するのは障壁が 高いと思われる。本講習会では、 FU をベースにして、各自が独自 の計算支援ソフトを開発する際の踏み台として使える分子モデリ ングソフトのプロトタイプを作成する。 なお、講師は python や GUI プログラミングの初心者であり、高 度な技術は伝授できないことをあらかじめお断りしておく(何よ りもすぐに研究に役立つことを優先する)。 本講習会の目的

3 3 FU の概要 FU は、 fumodel,fuplot の 2 つのプログラムからなる 1. fumodel: タンパク質の構造モデルと FMO 計算のた めの入力データの作成を支援するソフトウェア。 TINKER と GAMESS の実行機能もある。 2. fuplot : FMO 計算の結果をグラフにするソフトウ ェア。 (後述する開発版には、上記に加えて futools (コンソ ールアプリケーション)が含まれる) 3. これらの使い方については、 'fu user's guide.pdf' を 参照してください

4 4 FU の modules 1. python プログラム fuconst.py... global 定数 fuctrl.py... 入力処理ルーチン fulib.py... global 関数 fugraph.py... 棒グラフ class 、タイルグラフ class fumodel.py... fumodel の main プログラム fumole.py... fuMole class 、 Atom calss fupanel.py... 各種パネル類の class fuplot.py... fuplot の main プログラム fuview.py... OpenGL 描画ルーチン 2. Fortran プログラム fuflib.f, fmopdb.f, fmopdb-sub.f 3.script フォルダに拡張機能プログラムがある。 gamess-assist.py, tinker-optimize.py, rms-fit.py など

5 5 python による GUI プログラミングの開発 環境 1. python の各種 GUI ツールについては、 https://wiki.python.org/moin/GuiProgramming を参照されたい。 2. 本講習会では、 wxPython(2.8) を用いる。ドキュメントは、 http://xoomer.virgilio.it/infinity77/wxPython/ を参照する。 3. 本講習会は、 wxPython の開発環境を含んだ FU を用て実習を行うが、本 格的にプログラミングを行うには次の site-pakages を install されたい (実習テ キスト参照)。 python2.7, numpy, scipy, wxPython, PyOpenGL, matplotlib, psutil 4. 公開版は Windows 版( 32bit mode) のみであるが、開発版 ( 後述)では Mac OSX 10.9 と Debian(64bit mode) でも動く。 5. 講師は、統合開発環境として Windows7 と Mac OSX 10.9 ともに、 Eclipse+PyDev を用いている。これは以下のサイトからダウンロード できる。 https://www.eclipse.org/downloads/index-developer.php?release=kepler Pydev は Eclipse の ’Help'-'Install New Software' メニューで http://pydev.org/updates を install する。

6 6 実習要領 まず、 USB メモリ内の fu-tutorial-18Aug2014 フォルダにあ る mymodel.py ファイルと example フォルダを、事前準備 で作った ”c: ¥ fu-23Dec2013” フォルダにコピーする。 ついで、実習テキストに従って、 1) ウィンドウの作成 2) メニューの作成 3) 分子構造データファイル( PDB 形式)の読み込 みと OpenGL による分子模型の描画 4) マウス event の取得と分子模型の回転 の順番でコードを作成・追加し、分子モデリングソフトの プロトタイプを作りあげる。 * FU 開発版をご希望の方は、 fu-18Aug2014-dev.zip をコピ ーしてください。

7 7 プログラミングの準備 1. まず、 fu-23Dec2013 フォルダーにある fumodel.exe を起動する。本実習では fumodel のメインウィンドウは 不要なので、 PyCrust ウインドウから、 >>> fum.frame.Hide() と入力してメインウィンドウを隠す。 そして、 change directory コマンドで mymodel.py がある directry をカレントにしておく( pwd, ls, cd などのコマ ンドが使える)。 2. PyCrust は、 wxPython に含まれる python の shell であ る。ここから、 python の命令を実行して会話的にプロ グラムを開発・実行できる。

8 8 Step0: ウインドウの作成 1. エディタで mymodel.py を開いて、ソースコードを 読む。 2. PyCrust から mymodel.py を実行する。 3. wx Frame とは? http://xoomer.virgilio.it/infinity77/wxPython/ ( サイト 3 ) にアクセスして、 'Frame' で検索し、 wx.Frame の項目の window style, event handling, methods の説明を読む。

9 9 Step1: Frame に Menu と Statusbar を付ける 1. エディタで mymodel.py を開いて、実習テキストの黒 太字のコードを追加し、 mymodel-1.py として保存する。 2. PyCrust から mymodel-1.py を実行する。 3. StatusBar について 4. Menu について ('Menu' で検索し、 wx.Menu の項目を読 む) menuitem1 = wx.Menu() menuitem2 = wx.Menu() menubar = wx.MenuBar() menubar.Append(menuitem1,"Files") menubar.Append(menuitem2,"Edit") self.SetMenuBar(menubar) のように書く。 5. 本講習では、メニュー項目の追加・削除などが簡単に できる fumodel の fuMenu class を用いる。 ( ソースコードを参照)

10 10 Step2: 分子構造データの読み込みと OpenGL での分子模型の描画コードの追 加 1. エディタで mymodel-1.py を開いて、実習テキストの 黒太字のコードを追加し、 mymodel-2.py として保存する。 2. PyCrust から mymodel-2.py を実行する。 3. File 名の取得について (wx.FileDialog の説明を読む ) wcard='pdb file(*.pdb;*.ent)|*.pdb;*.ent' dlg=wx.FileDialog(self,"Open file...", os.getcwd(),style=wx.OPEN,wildcard=wcard) if dlg.ShowModal() == wx.ID_OK: filename=dlg.GetPath() でファイラーからファイル名を取得できる( mymodel- 1.py の OpenFile method )。

11 11 Step2: 続き 4. glCanvas について( wx.glvcanvas.GLCanvas の説明 を読む) size=self.GetClientSize() w=size.width; h=size.height attribList = (wx.glcanvas.WX_GL_RGBA, # RGBA wx.glcanvas.WX_GL_DOUBLEBUFFER, # Double Buffered wx.glcanvas.WX_GL_DEPTH_SIZE,32) # 32 bit canvas=wx.glcanvas.GLCanvas(self,-1,pos=(-1,-1), size=(w,h),attribList=attribList) で Frame に glcanvas が配置できる。 カラーコード RGBA : [R,G,B,A] 。 それぞれ 0 - 1 ( Windows の RGB は 0 - 255 )。 A は透明度。

12 12 Step2: 続き 5. OpenGL による描画について ① fuview.py モジュールのソースコードを参照。 ② fuview には以下の図形の描画ルーチンがある。 ・ DrawAtom ・・・原子(円または球) ・ DrawBonds ・・・結合(線または棒) ・ DrawChainTube ・・・ペプチド鎖( spline fit に よる曲線の チューブ表示) ・ DrawArrow ・・・矢印 (FU の script ‘draw_pmi_vector.py’ を参照) ・ DrawSphere ・・・球 ・ DrawLabel,DrawText2,DrawText3 ・・・文字列 ③ それぞれ、事前に対応する method (原子を描く場合 は、 SetDrawAtomData または SetDrawAtomList 。前者は 描画データをオブジェクトで、後者は List で渡す場合に用 いる)を用いて描画データをセットしてから、 OnDraw method で描画する。

13 13 Step3: マウス event 、ウインドウサイズの 変更 event の取得と処理コードを追加す る 1. エディタで mymodel-2.py を開いて、実習テキストの 黒太字のコードを追加し、 mymodel-3.py として保存する。 2. PyCrust から mymodel-3.py を実行する。 3. マウス event の取得( wx.MouseEvent の説明を読む) self.canvas.Bind(wx.EVT_LEFT_DOWN, self.OnMouseLeftDown) self.canvas.Bind(wx.EVT_LEFT_UP, self.OnMouseLeftUp) self.canvas.Bind(wx.EVT_MOTION, self.OnMouseMove) self.canvas.Bind(wx.EVT_MOUSEWHEEL, self.OnMouseWheel) 4. ウインドウサイズ変更 event の取得 self.canvas.Bind(wx.EVT_SIZE,self.OnResize)

14 14 Step3: 続き 1. 実習テキスト 16 ページの、「⑥ ここで、 PyCrust から attribute を変更したり、 method を実行してみよう。」の 項への追加。 PyCrust から、 >>> for atom in mdl.mole.mol: >>> atom.color[3]=0.5 と入力し、透明度を default の 1.0 (不透明)から 0.5 に変更 する。 >>> mdl.DrawMol(True) で再描画すると半透明になる。 CPK モデルにするとよく 分かる。

15 15 Widgets の種類 ( 使い方はソースプログラムま たはサイト 1,2,3 を参照) gamess-assist.py(FU の script) のウィンドウ f upanel.py の TreeSelector_Frm class のウィンドウ wx.TreeCtrl wx.StaticText wx.TextCtrl wx.Button wx.ComboBox wx.SpinCtrl wx.StaticLine wx.CheckBox wx.RadioButton

16 16 Widgets の Panel への配置について 1. FU では、 widget の位置を明示的に指定して配置している。 example フ ォルダにある widget-1.py 参照。 (w,h)=self.GetClientSize() panel=wx.Panel(self,wx.ID_ANY,pos=(-1,-1),size=(w,h)) # put buttons on the panel button1=wx.Button(panel,wx.ID_ANY,"Button1",pos=(20,20),size=(100,40)) button2=wx.Button(panel,wx.ID_ANY,"Button2",pos=(40,60),size=(100,40)) wx.Panel と wx.Button についてはサイト 1 または 3 参照のこと。 2. 一般的には、 BoxSizer を用いて配置する。 example フォルダにある widget-2.py 参 照。 (w,h)=self.GetClientSize() panel=wx.Panel(self,wx.ID_ANY) #,pos=(-1,-1),size=(w,h)) # put buttons on the panel sizer=wx.BoxSizer(wx.VERTICAL) button1=wx.Button(panel,wx.ID_ANY,"Button1",size=(100,40)) button2=wx.Button(panel,wx.ID_ANY,"Button2",size=(100,40)) sizer.Add(button1,flag=wx.LEFT|wx.TOP,border=20) sizer.Add(button2,flag=wx.LEFT,border=40) panel.SetSizer(sizer) wx.BoxSizer についてはサイト 1 または 3 参照のこと。

17 17 FU の機能拡張: script について 1. 起動時設定 scripy’fumodelset.py' で script メニューに登 録して Menu から ptython プログラムを起動できる( FU の script フィルダにソースプログラムを格納しておく)。 ・初期設定 scrip 'fumodelset.py' の script menu の設定例 ## Add "Script" menu on main window. f # format: [ ['script file name','comment',checkable],...] fum.scriptmenu1=('Script', (# This line indicates begin of data! ('gamess_assist.py','gamess input asist script',False), ('tinker_optimize.py','tinker optimization',False), ('','',False), ('orientate_h-o-bond.py','orientate H-O bonds to make...

18 18 FU の機能拡張: script の例 1. gamess-assist.py または tinker-optimize.py gamess-assist.py は GAMESS-FMO の入力データを作成 して、実行する script 。 tinker-optimize.py は TINKER で構 造最適化を行う script 。いろんな MO や MM 計算支援のプロ グラムを作成する際にこれらの script ( python プログラ ム)が参考になるだろう。 2. 外部プログラムの実行( thread の生成)について fupanel.py モジュールの ExecProg_Frm class を使うと簡 便に外部 python プログラムを実行できる。使用例は、 gamess-assist.py スクリプトの ExecuteGAMESS method 、 または tinker-optimize.py スクリプトの ExecTinkerOptimize method を参照されたい。

19 19 1. 追加された機能 : cube data の描画が可能 2. 修正部分 1) fuview module の fuView class に DrawPolygons method を追加 2) fucube.py module を追加 3) Fortran module (fucubelib) を追加(ソースコードは src/f90 フォルダにある)。 Fortran module が import できない 場合は python コードが使われるので非常に遅く実用的では ない。 3.使い方については、「 draw-cube-data スクリプトの使 方.pdf 」 を参照のこと。 4. この機能を含めた次期バージョンは本年末ごろに公開予 定。 5. 現開発版は、未整理のためソースコードがぐちゃぐちゃ である が、それでよければ希望者に配布する。 FU 開発版 (fu-18Aug2014-dev) について

20 20 FU の Mac OSX10.9 での動作について 1. FU 開発版 (fu-18Aug2014-dev) は、一部の機能( "Edit"- "Copy bitmap") を除いて Mac OSX10.9 と Debian で動作する。 2. ただし、 stand-alone で動くパッケージは未作成なので、 python の開発環境を install しておく必要がある。 3. 開発環境を構築した Mac で、 shell から、 > python fumodel.py を実行する。または、 py2app を用いて Mac のアプリケ ーション fumodel.app を作成して実行する。 4. 開発環境の詳細については、開発版の "doc" フォルダ にあ る 「 MacOSX での動作環境. pdf」を参照されたい。

21 21 おわり に ・本講習会にご参加いただきましてありがとうござい ました。 ・ FU が何らかの形で皆様の研究のお役に立つことを願 っています。


Download ppt "1 FU チュートリア ル 第 17 回 CMSI 神戸ハンズオン 2014 年 8 月 18 日 - FU をベースにした実践的分子モデリングソフトプログラミング実 習 - 【プログラム】 1. 13:00-13:30 FU の概要 2. 13:30-16:30 wxPython プログラミング実習."

Similar presentations


Ads by Google