GSL Shell プログラム:xyz2mol.gsl

2017-10-30 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-10-27)の記事「Python プログラム:xyz2mol.py」で、
既存の“xyz2mol”プログラム
即ち、

   座標データだけから成るファイルを元に、
   原子間の結合データを生成

する処理コード
を纏めた。


そこで、
このPython プログラムを、
Lua(GSL Shell)に移植した。


取り敢えずは単純な移植なのだが、
序でなので、
(1) 入力ファイルは、ドラッグ&ドロップで指定する
(2) 原子数(と結合数)は最大 999 までとする
ところまでは機能強化した。

--------------- DnD_xyz2mol.gsl
require'pl'
--------------------
Dir, Fname = path.splitpath( arg[1] ) -- D&D でファイル名取得
lfs.chdir( Dir ) -- これ必須?
file_nm = string.gsub( Fname, '.xyz', '' ) -- 入力「.xyz」ファイル ( 除 拡張子 )
-- 出力ファイル名は、(file_nm).mol ( 結合情報付き )

Dx=1.10 -- 結合判定用:共有結合半径の和の Dx 倍以内
--====================================
-- 1...92 元素名(左詰め)
tt = ' H HeLiBeB C N O F NeNaMgAlSiP S ClAr KCaScTiV CrMnFeCoNiCuZnGaGeAsSeBrKrRbSrY ZrNbMoTcRuRhPdAgCdInSnSbTeI XeCsBaLaCePrNdPmSmEuGdTbDyHoErTmYbLuHfTaW ReOsIrPtAuHgTlPbBiPoAtRnFrRaAcThPaU '

-- 1..92 共有結合半径 ( From Winmostar )
rr = '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'
rTc = stringx.split( rr ) -- 文字列配列(空白区切)

An={}; Ac=matrix.new( 999, 1 )
Ax=matrix.new( 999, 1 ); Ay=matrix.new( 999, 1 ); Az=matrix.new( 999, 1 )
B1=matrix.new( 999, 1 ); B2=matrix.new( 999, 1 ); rT=matrix.new( 92, 1 )
for i=1, #rTc do rT[i]=rTc[i]+0 end

w = utils.readlines( file_nm .. '.xyz' ) -- 入力「.xyz」ファイル取り込み
aa=w[1]+0 -- Atom 数
wl2=w[2] -- セルベクトル情報 ( 文字列のママ )
for a=1,aa do v = stringx.split(w[a+2])
Ax[a]=v[2]+0; Ay[a]=v[3]+0; Az[a]=v[4]+0
an = string.sub(v[1]..' ',1,2); k = string.find( tt, an )
An[a]=an; Ac[a]=k/2
end

bb=0 -- ===== 結合計算 =======
for k=1,aa do
for j=1,k-1 do
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 end
end

OT = io.open( file_nm .. '.mol', 'w' ) --=== 「.mol」ファイル出力
utils.fprintf( OT, '--- from %s.xyz --> %s.mol\n' , file_nm,file_nm )
utils.fprintf( OT, '%s\n' , wl2 )
utils.fprintf( OT, "By 'xyz2mol.gsl'\n" )
utils.fprintf( OT, '%3d%3d 0 0 0 0 1 V2000\n' , aa, bb )
for a=1,aa do
utils.fprintf( OT, ' %9.5f %9.5f %9.5f %-2s 0 0 0 0 0 0\n' ,
Ax[a], Ay[a], Az[a], An[a] )
end
for b=1,bb do
utils.fprintf( OT, '%3d%3d 1 0 0 0\n' , B1[b], B2[b] )
end
utils.fprintf( OT , 'M END\n' )
OT:close()
となった。


本日はここまで。


この GSL Shell プログラムを流用して、目的のモノを作ろう!


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


171009
関連記事
スポンサーサイト

コメントの投稿

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

おきてがみ/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
ブックマーク