ゴミのやま

完全自分向け雑記

LGAのコンパイルでSegmentation faultが出る

タンパク質のアラインメント計算ソフトウェアのLGAでコンパイルはできるのだが, Segmentation faultで実行できない問題の対応法。
LGA - Protein Structure Comparison Facility

[解決策]ulimit -s unlimitedする

どうもコアダンプの容量が制限されているのが原因らしい。

ulimit -s unlimited
cd ./SRC
make -f Makefile.linux=x86=64

Pymol 見た目を調整する

気付き次第, 順次追加予定。。。

DSSコマンド

水素結合および主鎖の構造を用いて二次構造情報を自動的に追加する。これにより二次構造情報に基づいた色分けなどが可能になる。

https://pymolwiki.org/index.php/Dss

 

デフォルトの設定を変更する(背景など)

pymolrcに常時設定したいコマンドを書き込む。起動時に自動的に読み込まれる。以下は私のpymolrcの設定。

https://pymolwiki.org/index.php/Pymolrc

bg_color white
hide ribbon,all
show cartoon,all
show cell

ボックスを表示

周期的境界条件の設定がなければ表示できない(当たり前だが)

show cell

自動で"いい感じ"の見た目にする

presetを使う。publishがすき

https://pymolwiki.org/index.php/Preset

 

高Qualityなきれいなイメージを出力する

以下に従って操作する。かんたん。

https://pymolwiki.org/index.php/Publication_Quality_Images

 

 

Poisson-Boltzmann方程式を導出する

目的

  • 分子シミュレーションでよく使われるPossion-Boltzmann方程式を導出する。間違ってたら教えて下さい。

出発

まずPossion equationから出発する


∇(ε(r)∇φ(r)) = -4πρ(r)

ε(r):点rにおける誘電率; φ(r):点rにおける静電ポテンシャル; ρ(r):点rにおける電荷密度

この式はある点における電荷分布ρ(r)がわかれば, ある点におけるポテンシャルが計算できることを示す。

電荷分布をBoltzmann分布で表す

特定の場所におけるイオンの濃度がBoltzmann分布によって示されるとする。つまり,


c_i(r) = c_0exp(-\displaystyle \frac{z_ieφ(r)}{K_BT})

c_i(r):イオンiのrにおける濃度; c_0:バルクのイオン濃度; z_i:イオンiの価数; z_iイオンの価数; e電荷素量;φ_i(r): 場所rにおけるイオンiのポテンシャル; K_B:ボルツマン定数; T:温度;

以上のイオンの濃度分布にイオンの価数および電気素量をかけることで, イオンiの点rにおける電荷分布が得られる。


ρ_i(r) = z_iec_0exp(-\displaystyle \frac{z_ieφ(r)}{K_BT})

溶質から来る電荷分布ρ_{solute}(r)および全イオンからの寄与を考慮することで,

\displaystyle{
ρ(r) = ρ_{solute}(r) + \sum_{i=1}^n ρ_i(r) = ρ_{solute}(r) + \sum_{i=1}^n z_iec_0exp(-\displaystyle \frac{z_ieφ(r)}{K_BT})
}

これを前述のPossion equationに代入することでPossion-Boltzmann equationを得る。

\displaystyle{
∇(ε(r)∇φ(r)) = -4π(ρ_{solute}(r) + \sum_{i=1}^n z_iec_0exp(-\displaystyle \frac{z_ieφ(r)}{K_BT}))
}

Poission-Boltzmann equationを線形化する

 z_ieφ_i(r) << K_BTのとき, 一次の項までマクローリン展開すると

\displaystyle{
exp(-\displaystyle \frac{z_ieφ(r)}{K_BT}) = 1 - \frac{z_ieφ(r)}{K_BT}
}

これをでPossion-Boltzmann equationに代入して

\displaystyle{
∇(ε(r)∇φ(r)) = -4π(ρ_{solute}(r) + \sum_{i=1}^n z_iec_0 - c_0 \sum_{i=1}^n \frac{z_i^2e^2φ(r)}{K_BT})
}

系内のイオンの電荷の和が0であるなら\displaystyle{\sum_{i=1}^n z_iec_0 = 0}であるので, 以下のような線形化されたPoisson-Boltzman方程式を得る

\displaystyle{
∇(ε(r)∇φ(r)) = -4π(ρ_{solute}(r) - \frac{c_0e^2}{K_BT} \sum_{i=1}^n {z_i^2φ(r)})
}

デバイ長

線形化されたPoisson-Boltzman方程式において誘電率が場所によらず一定値εであるとすると, 前述の方程式の末項を変形することでデバイ長を得る。デバイ長以下では電場は遮蔽されない。

参考:

www.cchem.berkeley.edu

 

得たPoission-Boltzmann方程式を解く

modernな解法は調べていないが, 差分法による直感的アプローチは以下のサイトがとてもわかりやすかった。

teamcoil.sp.u-tokai.ac.jp

先に導出した式は線形化されているので以下のステップにより簡単に解くことができる(疑問:線形化されてなかったらどうするんでしょうね。。。?)

  1. グリッドを切る
  2. 境界条件を設定
  3. 端から順にポテンシャルを解いていく
  4. 各点のポテンシャルの値がself-consistentになるまで反復する

実際の分子シミュレーションでは・・・

ステップごとにポテンシャルを求めていくのは超ハイコストなので行われていないらしい。MM-PBSAなどでリガンド相互作用の計算に使われている。というわけで次はMM-PBSAについて書く(予定)

SMARTSってなんやねん(化学)

参考:

magattaca.hatenablog.com

www.molsis.co.jp

要は

SMILES

  • 分子の二次元構造を文字列で記述
  • ワイルドカード表記はできない(多分…?)
  • 一つの化合物構造に対して複数のsmilesがありえる(一対一対応するものはcanonical SMILESと呼ばれる)

SMARTS

  • SMILESを検索クエリ用に拡張
  • ワイルドカードで表記できる
  • 同一記法でもSMILESとは意味が異なる可能性あり

「SMILE語」の文法を学ぶ

語学を学ぶには最低限の文法理解は必要, ということで以下のテーブルをざっくり理解。

原子表記(atomic primitives)

SMARTS Atomic Primitives
Symbol Symbol name Atomic property requirements Default
* wildcard any atom (no default)
a aromatic aromatic (no default)
A aliphatic aliphatic (no default)
D<n> degree <n> explicit connections exactly one
H<n> total-H-count <n> attached hydrogens exactly one1
h<n> implicit-H-count <n> implicit hydrogens at least one
R<n> ring membership in <n> SSSR rings any ring atom
r<n> ring size in smallest SSSR ring of size <n> any ring atom2
v<n> valence total bond order <n> exactly one2
X<n> connectivity <n> total connections exactly one2
x<n> ring connectivity <n> total ring connections at least one2
- <n> negative charge -<n> charge -1 charge (-- is -2, etc)
+<n> positive charge +<n> formal charge +1 charge (++ is +2, etc)
#n atomic number atomic number <n> (no default)2
@ chirality anticlockwise anticlockwise, default class2
@@ chirality clockwise clockwise, default class2
@<c><n> chirality chiral class <c> chirality <n> (nodefault)
@<c><n>? chiral or unspec chirality <c><n> or unspecified (no default)
<n> atomic mass explicit atomic mass unspecified mass

原子表記の例

C

aliphatic carbon atom

c

aromatic carbon atom

a

aromatic atom

[#6]

carbon atom

[Ca]

calcium atom

[++]

atom with a +2 charge

 

[R]

atom in any ring

[D3]

atom with 3 explicit bonds (implicit H's don't count)

[X3]

atom with 3 total bonds (includes implicit H's)

[v3]

atom with bond orders totaling 3 (includes implicit H's)

C[C@H](F)O

match chirality (H-F-O anticlockwise viewed from C)

C[C@?H](F)O

matches if chirality is as specified or is not specified

 

結合表記(bond primitive)

こっちは原子表記より少ないので楽

Symbol Atomic property requirements
- single bond (aliphatic)
/ directional bond "up"1
\ directional bond "down"1
/? directional bond "up or unspecified"
\? directional bond "down or unspecified"
= double bond
# triple bond
: aromatic bond
~ any bond (wildcard)
@ any ring bond1

結合表記の例:

C any aliphatic carbon
cc any pair of attached aromatic carbons
c:c aromatic carbons joined by an aromatic bond
c-c aromatic carbons joined by a single bond (e.g. biphenyl)

省略されると

 

引用元:

www.daylight.com

 

SMARTS官能基当てクイズ

Q:

  1. [CX4]
  2. [CX3]=[OX1]
  3. [NX3][CX3](=[OX1])[#6]

A:

  1. 4つ結合がある脂肪族炭素
    ⇒ アルキル基
  2. (3つ結合がある脂肪族炭素)二重結合(結合を一つもつ酸素)
    ⇒ カルボニル基
  3. (3つ結合がある窒素)(3つ結合がある炭素)(=二重結合(結合を一つもつ酸素))(原子番号6の原子)
    ⇒ アミド基

あとは適宜わからんのが出てきたら学ぶ。

引用:

www.daylight.com

SMARTSを可視化する

大量に可視化したい場合はRDkitなどを使う必要があるのだろうが, ひとまず以下のサイトでお手軽に可視化できる。

https://smartsview.zbh.uni-hamburg.de

sshfsでマウントしたフォルダが"You do not have the permissions necessary to view the contents of mounted directory"と出て開けない

Mac OSX MojaveでSshfsでマウントしたフォルダがパーミッションエラーで開けない

You do not have the permissions necessary to view the contents of mounted directory.

というメッセージによりsshfsが開けなくなったのでその対処法

 

対策

-o defer_permissions

をつけてsshfsをマウントする

参考:

github.com

 

なんでこれでなおるねん?

上記リンクのbfleischer兄貴によると

  • sshではリモート側がフォルダのアクセス権を管理している
  • sshfsではmac側とリモート側の両方でアクセス権を管理している。ゆえにmac側からはリモート側のアクセス権が見えないので読み込みエラーが起きる
  • -o defer_permissions
    をつけることによりsshと同様にリモート側にアクセス権管理を委ねるため, アクセスできるようになるとのこと。

 

ちゃんちゃん

 

Jupyter Notebookの導入メモ

pipでインストール

qiita.com

拡張機能を入れる

www.pynote.inf

とりあえず上のサイトから適当につっこむ。vimmerなので"jupyter-vim-binding"は必須。

 

リモートのスクリプトをいじる

  1. sshfsでマウントしていじる方法。この場合, スクリプトはローカルで実行される。sshfsはそれ以外にも便利なのでスパコンとファイルのやり取りを頻繁に行うシミュレーション屋はぜひ入れたい。リモートにあるデータをJupyter Notebookで扱うには [計算化学Wiki]
  2. リモートサーバでjupyterを動かす方法。
    この場合, スクリプトはリモートサーバ上で実行される。重い計算などはこっち。

qiita.com