PubChemを取り込むテーブルpubchemを用意した。RDKit/Cartridge/PubChem。
ここではPubChemのデータを実際に登録してみる。使用するのはRDKit/Cartridge/PubChemで示した
Compound_000000001_000025000.sdf.gz
である。
データ検索RDKit/Cartridge/PubChem/検索
以前RDKit/Cartridge/登録150426
pythonで登録用のスクリプトを作った。
直接postgreSQLにinsertを行うので別途「python-psycopg2」パッケージが必要です。
[root@c ~]# yum install python-psycopg2っで、スクリプトの中身がこれ。
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| - ! | |
一応これで登録はできる。
使い方
[root@c ~]# python ./PubChemReg.py Compound_000000001_000025000.sdf
(あるいは)
[root@c ~]# python ./PubChemReg.py Compound_000000001_000025000.sdf.gz登録途中で、RDKitの規定な原子価と違う構造式があると下記のようなメッセージが最後に表示されます
[23:28:33] Explicit valence for atom # 0 As, 7, is greater than permitted
[23:28:33] ERROR: Could not sanitize molecule ending on line 4065775
[23:28:33] ERROR: Explicit valence for atom # 0 As, 7, is greater than permitted
[23:28:33] Explicit valence for atom # 0 As, 7, is greater than permitted
[23:28:33] ERROR: Could not sanitize molecule ending on line 4065890
:
:Compound_000000001_000025000.sdf.gz(15MB、展開後117MB、$$$$の件数で23,238件)を取り込んだらテーブルのサイズは下記のようになった
chemdb=> \dti+
リレーションの一覧
スキーマ | 名前 | 型 | 所有者 | テーブル | サイズ | 説明
----------+--------------+--------------+--------+----------+--------+------
public | pubchem | テーブル | caster | | 36 MB |
public | pubchem_pkey | インデックス | caster | pubchem | 528 kB |
(2 行)
chemdb=>
chemdb=> select count(*) from pubchem;
count
-------
23229
(1 行)
chemdb=>23,229件が登録。8件ほど取り込めなかったみたい。
RDKitに規定されている原子価を変更するには、ソースを編集するしかないみたい。
編集対象場所は $RDBASE/Code/GraphMol/atomic_data.cpp である。
Compound_000000001_000025000.sdf.gzの取り込み中に原子価により撥ねられた原子は下記である。
(抜粋)
15 P 0.75 0.89 2.08 30.974 5 31 30.97376163 3 5 \n \
17 Cl 0.99 0.997 1.97 35.453 7 35 34.96885268 1 \n \
35 Br 1.21 1.167 2.1 79.904 7 79 78.9183371 1 \n \
52 Te 1.47 1.378 2.06 127.6 6 130 129.9062244 2 \n \
33 As 1.21 1.2 1.85 74.922 5 75 74.9215965 3 5 \n \エラーメッセージから各原子の原子価を変更して、再コンパイルしてみる。
[root@c ~]# cd $RDBASE/Code/GraphMol
[root@c GraphMol]#
[root@c GraphMol]# cp -a atomic_data.cpp atomic_data.cpp.orig
[root@c GraphMol]# vi atomic_data.cpp
[root@c GraphMol]# diff -u atomic_data.cpp.orig atomic_data.cpp
--- atomic_data.cpp.orig 2014-12-09 11:27:38.000000000 +0900
+++ atomic_data.cpp 2015-04-29 06:57:32.765411683 +0900
@@ -34,9 +34,9 @@
12 Mg 1.1 1.36 1.73 24.305 2 24 23.9850417 2 \n \
13 Al 1.35 1.18 2.05 26.982 3 27 26.98153863 6 \n \
14 Si 1.2 0.937 2.1 28.086 4 28 27.97692653 4 6 \n \
-15 P 0.75 0.89 2.08 30.974 5 31 30.97376163 3 5 \n \
+15 P 0.75 0.89 2.08 30.974 5 31 30.97376163 3 5 7 \n \
16 S 1.02 1.04 2 32.067 6 32 31.972071 2 4 6 \n \
-17 Cl 0.99 0.997 1.97 35.453 7 35 34.96885268 1 \n \
+17 Cl 0.99 0.997 1.97 35.453 7 35 34.96885268 1 3 5 7 \n \
18 Ar 1.57 1.74 1.88 39.948 8 40 39.96238312 0 \n \
19 K 1.33 2.03 2.75 39.098 1 39 38.96370668 1 \n \
20 Ca 0.99 1.74 1.973 40.078 2 40 39.96259098 2 \n"
@@ -52,9 +52,9 @@
30 Zn 1.45 1.25 1.39 65.39 2 64 63.9291422 -1 \n \
31 Ga 1.22 1.26 1.87 69.723 3 69 68.9255736 3 \n \
32 Ge 1.17 1.188 1.7 72.61 4 74 73.9211778 4 \n \
-33 As 1.21 1.2 1.85 74.922 5 75 74.9215965 3 5 \n \
+33 As 1.21 1.2 1.85 74.922 5 75 74.9215965 3 5 7 \n \
34 Se 1.22 1.17 1.9 78.96 6 80 79.9165213 2 4 6 \n \
-35 Br 1.21 1.167 2.1 79.904 7 79 78.9183371 1 \n \
+35 Br 1.21 1.167 2.1 79.904 7 79 78.9183371 1 3 5 \n \
36 Kr 1.91 1.91 2.02 83.8 8 84 83.911507 0 \n \
37 Rb 1.47 2.16 1.7 85.468 1 85 84.91178974 1 \n \
38 Sr 1.12 1.91 1.7 87.62 2 88 87.9056121 2 \n \
@@ -71,7 +71,7 @@
49 In 1.63 1.44 1.93 114.818 3 115 114.903878 3 \n \
50 Sn 1.46 1.385 2.17 118.711 4 120 119.9021947 4 \n \
51 Sb 1.46 1.4 2.2 121.76 5 121 120.9038157 3 5 \n \
-52 Te 1.47 1.378 2.06 127.6 6 130 129.9062244 2 \n \
+52 Te 1.47 1.378 2.06 127.6 6 130 129.9062244 2 6 7 \n \
53 I 1.4 1.387 2.15 126.904 7 127 126.904473 1 2 5 \n \
54 Xe 1.98 1.98 2.16 131.29 8 132 131.9041535 0 2 \n \
55 Cs 1.67 2.35 1.7 132.905 1 133 132.9054519 1 \n \
[root@c GraphMol]#