Chemistry::File::SMARTS Version 0.22
基本的な事柄
implicit,explicit
implicit:明示的に指定されていないbondとか(水素)原子も含んだ完全な形で。
smiles記法では(明らかに省略できる)水素原子は省略するのでexplicit,implicitという区分けがある。MOLもそうだけど。
などを参照するとイメージはわかるはず。
patern match check
パターンマッチの確認は以下のコードでおこなった。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #!/usr/bin/perl use warnings; use strict; use Chemistry::File::SMARTS; use Chemistry::File::SMILES; use Chemistry::Ring 'aromatize_mol'; my ($SMARTS,$SMILES) = @ARGV; print "SMARTS: $SMARTS\n"; print "SMILES: $SMILES\n"; my $pattern = Chemistry::Pattern->parse($SMARTS, format => 'smarts'); my $react = Chemistry::Mol->parse($SMILES, format => 'smiles'); aromatize_mol($react); my $count = 0; while ($pattern->match($react)){ $count++; } print $count,"\n"; |
Atomic Primitives
-
*
全ての原子にマッチ -
a,A
Aromatic(a) or Aliphatic(A)。 PerlMolではChemistry::Ringでaromatize_molしとかないと認識しない。 -
D<n>,X<n>,x<n>
結合原子数(n)を有するAtomにマッチ。明示的(D)か、内在的(X)か。つまり、Dは明示的にHとの結合が指定されていない限りこれをカウントしない。xはリングのコネクティビティだが、PerlMolではサポートされてないっぽい。 -
H<n>,h<n>
明示的なHをカウントする(H)か内在的なものも含めるか(h) -
R<n>,r<n>
n原子からなるSmallest Set of Smallest Rings (SSSR)のメンバーにマッチ(R)。PerlMolだとRかどうかだけしか判断していないので<n>は関係ないかも。リングサイズが最小のSSSRのメンバーにマッチ(r)。芳香環かそうでないかは判断せず、n員環のメンバーであればマッチ
こんな感じ
$ ./smartstest [r6] 'C1CCCCC1CCC' # 6 $ ./smartstest [r6] 'c1ccccc1CCC' # 6 $ ./smartstest [r6] 'c1cc1CCC' # 0 $ ./smartstest [r3] 'c1cc1CCC' # 3
-
v<n> バレンス。いわゆる手を伸ばせる数(Nは3で、Cは4)
-
<n>,+<n>,#n チャージの有無と原子番号
-
@,@@,@<c><n>,@<c><n>? キラルはPerlMolではサポートされてない。
Bond Primitives
- -,=,#,: 一重結合(-)、二重結合(=)、三重結合(#)、芳香属性の結合(:) aromatizeしてるのに二重結合がカウントされるのがわからん。局在化した芳香環の二重結合だけ読んでるっぽいので、SMARTS書くとき注意
下の例
$ ./smartstest "c:c" 'c1ccccc1' SMARTS: c:c SMILES: c1ccccc1 6 $ ./smartstest "c=c" 'c1ccccc1' SMARTS: c=c SMILES: c1ccccc1 3 $ ./smartstest "c-c" 'c1ccccc1' SMARTS: c-c SMILES: c1ccccc1 0
-
~,@ ワイルドカード(~)、リング結合全て(@)
-
/,,/?,? PerlMolでサポートされてるかどうか調べてない(とりあえず使わないので後回し)
Logical Operator
- !,&,,(commma),;
否定(!),論理積(&,; ただし、&は最初に評価される),論理和(,)
Component-level grouping
PerlMolではサポートされていない
こういうのをblogに突っ込むのは無理がある。素直にWiki+Markdown入れようと思ったヨ。