Python プログラム:xyz2mol.py

2017-10-27 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
3年前(2014-08-08)になる古い記事ですが、
プログラム設計:msi2mol」正しくは、xyz2molでしたが。

それで、
この記事にある設計に従って、
Python プログラム xyz2mol.py を作っていた。

なぜ今頃?

実は同様なことを、最近やりたくなって、
当然 GSL Shell で作る予定だが、・・・

探していたら、過去に作っていたので、
これをベースに移植を考えた。


なので、当時のコードをここに整理した。

# ----------------------- xyz2mol.py
from math import *
from string import *

file_nm = 'test' # 入力「.xyz」ファイル名 ( 除 拡張子 )

# 出力ファイル名は、(file_nm).mol ( 結合情報付き )

Dx=1.10 # 結合判定:共有結合半径の和の Dx 倍以内

tt = " HHeLiBe B C N O FNeNaMgAlSi P SClAr KCaScTi VCrMnFeCoNiCuZnGaGeAsSeBrKrRbSr YZrNbMoTcRuRhPdAgCdInSnSbTe IXeCsBaLaCePrNdPmSmEuGdTbDyHoErTmYbLuHfTa WReOsIrPtAuHgTlPbBiPoAtRnFrRaAcThPa U"
# 1...92 元素名(右詰め)

rr = " 0.00 0.29 1.30 1.23 0.90 0.82 0.77 0.75 0.73 0.72 1.60 1.54 1.36 1.18 1.11 1.06 1.02 0.99 1.90 2.03 1.74 1.44 1.32 1.22 1.18 1.17 1.17 1.16 1.15 1.17 1.25 1.26 1.22 1.20 1.16 1.14 2.00 2.16 1.91 1.62 1.45 1.34 1.30 1.27 1.25 1.25 1.28 1.34 1.48 1.44 1.41 1.40 1.36 1.33 2.20 2.35 1.98 1.69 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.44 1.34 1.30 1.28 1.26 1.27 1.30 1.34 1.49 1.48 1.47 1.45 1.46 1.45 2.71 2.40 2.10 1.70 1.70 1.70 1.70" # 1..92 共有結合半径 ( From Winmostar )
rTc=rr.split() # 文字列配列(空白区切)

An=['']*300; Ax=[0]*300; Ay=[0]*300; Az=[0]*300;
Ac=[0]*300; B1=[0]*300; B2=[0]*300; rT=[0]*100; # 配列(リスト)初期化
for i in range(len(rTc)): rT[i]=float(rTc[i])

IN = open( file_nm + '.xyz' ) # === 入力「.xyz」ファイル取り込み ===
w=IN.readline(); aa=int(w) # Atom 数
wl2=IN.readline()
for a in range(aa):
w=IN.readline(); w=w.rstrip('\r\n'); v=w.split()
an=v[0]; Ax[a]=float(v[1]); Ay[a]=float(v[2]); Az[a]=float(v[3])
if( len(an)==1 ): an=" "+an
k=tt.find(an)
An[a]=v[0]; Ac[a]=k/2
IN.close()

bb=0 # ===== 結合関係計算 =====
for k in range(1,aa):
kb=k-1
for j in range(kb):
if( Ac[k]==Ac[j] ): continue
dd2=(Ax[k]-Ax[j])**2+(Ay[k]-Ay[j])**2+(Az[k]-Az[j])**2
dr2=((rT[Ac[k]]+rT[Ac[j]])*Dx)**2
if( dd2
OT = open( file_nm + '.mol', 'w' ) # === 「.mol」ファイル出力 ===

OT.write( '--- from ' + file_nm + '.xyz --> ' + file_nm + '.mol\n' )
OT.write( wl2 )
OT.write( "By 'xyz2mol.py'\n" )
OT.write( str(aa).rjust(3) + str(bb).rjust(3) + ' 0 0 0 0 1 V2000\n' ) # sprintf 形式
for a in range(aa):
OT.write( " %9.5f %9.5f %9.5f %-2s 0 0 0 0 0 0\n" % ( Ax[a], Ay[a], Az[a], An[a] ) ) # printf 形式
for b in range(bb):
OT.write( "%3d%3d 1 0 0 0\n" % ( B1[b], B2[b] ) )
OT.write( "M END\n" )
OT.close();
と云うこと?


本日はここまで。


このプログラムを参考にして GSL Shell で作ろう!


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


140215,171006
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
10 | 2017/11 | 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク