先日作成したマクロにもう少し手を加えて、v.20.10.28としました。
ファイル選択ダイアログに続けてカスタムダイアログを表示させ、pHと力場の指定、MOPACによる構造緩和の有無とAM1/PM3/MNDOの指定、分子の表示スタイルを変更できるようにしました。
それから、入力SDFファイル内で化合物名が定義されていない場合にエラーになっていましたが、オブジェクト名を割り当てるようにして回避しました。
その他にも細々とした修正を加えています。
(_文字_でアンダースコアをふっていますが、メインメニューと異なり、Alt + キーで選択できないようです)
マクロファイル「convert3D.mcr」 v.20.10.28
# YASARA MACRO
# TOPIC: A contribution
# TITLE: Convert SDF from 2D to 3D, with Experiment Minimization
# REQUIRES: Dynamics
# AUTHOR: Tomohiko Tasaka
# LICENSE: GPL
# DESCRIPTION: This macro provides the ability to convert 2D SDF files to 3D SDF files v.20.10.28
Clear
Console off
start = SystemTime
files,filelist() =
ShowWin Type=FileSelection,Title="Select 2D SDF files converting to 3D",
MultipleSelections=Yes,Filename="*.sdf"
phval,selfofn,selfof,selatomstyle,dompac,selqmmethod =
ShowWin Type=Custom,Title="Setting",Width=600,Height=400,
Widget=NumberInput, X=20,Y=60, Text="p_H_",Default=7.4,Min= 0,Max=14,
Widget=List, X=160,Y=60,Text="_F_orce Field",
Width=200,Height=140,MultipleSelections=No,Options=13,
Text="AMBER94",
Text="AMBER96",
Text="AMBER99",
Text="AMBER03",
Text="AMBER10",
Text="AMBER11",
Text="AMBER12",
Text="AMBER14",
Text="AMBER14IPQ",
Text="NOVA",
Text="YAMBER",
Text="YAMBER2",
Text="YAMBER3",
Widget=Text, X=400,y=60,Text="Style atoms",
Widget=RadioButtons,Options=3,Default=1,
X=400,Y=100,Text="_B_all",
X=400,Y=140,Text="_S_tick",
X=400,Y=180,Text="Ba_l_lStick",
Widget=RadioButtons,Options=2,Default=1,
X=20,Y=240,Text="_O_ptimize with MOPAC",
X=20,Y=280,Text="_N_on-optimize with MOPAC",
Widget=RadioButtons,Options=3,Default=1,
X=320,Y=240,Text="_A_M1",
X=320,Y=280,Text="_P_M3",
X=320,Y=320,Text="_M_NDO",
Widget=Button, X=540,Y=348,Text="O_K_"
atomstylelist='BallObj','StickObj','BallStickObj'
atomstyle=atomstylelist(selatomstyle)
qmmethodlist='am1','pm3','mndo'
qmmethod=qmmethodlist(selqmmethod)
for file in filelist
LoadSDF (file)
MacroTarget (file), Remove=Extension
objlist() = ListObj all
RemoveAll
for i in objlist
AddObj (i)
(atomstyle) (i)
name = CompoundMol all Obj (i)
if name == ''
name = NameObj (i)
CompoundMol all Obj (i), '(name)'
InflateObj (i)
CleanObj (i)
pH (phval),update=Yes
# Display current pH
txtobj=MakeTextObj Name=currentpH,Width=16,Height=2
Font Times,Height=1,Color=(hex (255*(1.00-phval/15)))(00)(hex (16+255*phval/15)),Depth=1.0,DepthCol=303030
PosText 50%,50%,Center
Print pH:(1.0*phval)
PosObj currentpH,0,-8,64
Cell Auto,Extension=10
ForceField (selfof),SetPar=yes
Experiment Minimization
Experiment On
Wait ExpEnd
# Optimize with MOPAC to fine-tune geometry
if dompac == 1
ShowMessage Running MOPAC (qmmethod)
QuantumMechanics (qmmethod)
OptimizeObj (i),Method=QM
HideMessage
DelObj currentpH
RemoveObj (i)
AddObj all
SaveSDF (join objlist), (MacroTarget)_3D.sdf
end = SystemTime
ShowMessage Normal termination ! Elapsed time /msec : (end - start)
PrintCon
Print Normal termination ! Elapsed time /msec : (end - start)
Wait Button
Clear
# Exit YASARA if this macro was provided as command line argument in console mode and not included from another macro
if runWithMacro and ConsoleMode and !IndentationLevel
Exit
今後、何か問題点が出てきたり、改善案を思いついたりしたら、適宜更新するようにします。
Hope this helps;-)