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
否定(!),論理積(&,; ただし、&は最初に評価される),論理和(,)
Component-level grouping
PerlMolではサポートされていない
こういうのをblogに突っ込むのは無理がある。素直にWiki+Markdown入れようと思ったヨ。