tky_cowのブログ

python + chemistry, webの技術メモ等

DELに含まれる化合物の全体構造を発生させる


 
 前回までの記事では、eDESIGNERというオープンソースのツールを使って、DELのデザインを行ってきました。しかし、実際にデザインしたDELにどのような構造の化合物が含まれているかは確認できていませんでした。一つのDELでも数千万〜数億の構造を含むことも珍しくないため、全構造を発生させる必要性は低いですが、いくつかサンプリングして構造発生できると、物性値の分布なども確認できて便利です。eDESIGNERで設計したライブラリーの設定ファイルを基に、構造発生する方法をまとめます。

前提条件

以下の環境が整っているとして進めます。詳細は以前の記事の該当部分をご確認いただければと思います。

  • 以下レポジトリをクローンし、eDESIGNERを実行してlibrary configファイルが作成できている
  • LillyMolのインストールが完了し、各種機能がコマンドで実行できる(パスが通っている状態)
  • eDESIGNER及びLillyMolが使用できるconda環境を立ち上げている

githubからcloneしたedesigner_core/edesigner/下で作業し、前提条件を満たしていれば、resultsフォルダにconfigファイルが出力されているはずです。

% tree results 
results
├── 20230428_3Cboth34_config.txt
├── 20230428_3Cboth34_libDESIGNS.pic

サイクル毎BBファイルの作成

 全体構造を発生させるためのレシピに該当するのはconfigファイルになりますが、材料となるBBのファイルはe_bb_retriever.pyを使って作成することができます。サイクル毎に材料となるBBがcsvで出力されます。

# 出力先のフォルダを準備
% mkdir design1
% python e_bb_retriever.py -tk 20230428_3Cboth34 -df 1 -of design1
e_bb_retriever.v.9.0.0
Loading pickled designs to object...
Creating dataframes and dumping them into files...
OK

% tree -F design1 
design1/
├── 20230428_3Cboth34_1_C1_all.csv
├── 20230428_3Cboth34_1_C1_int.csv
├── 20230428_3Cboth34_1_C2_all.csv
├── 20230428_3Cboth34_1_C2_int.csv
├── 20230428_3Cboth34_1_C3_all.csv
├── 20230428_3Cboth34_1_C3_int.csv

各オプションの意味は以下の通りです。

  • df : design number 今回は1を指定
  • of : 出力先フォルダ名

所望のライブラリー設計ファイルの切り出し

 これは提供されているスクリプトではできないので、ユーティリティスクリプトを準備しました。edesigner/ext_utils/フォルダ下にありますので、そこに移動して以下のように実行します。引数は全て必須となっており、何番の設定を抜き出すか事前に調べる必要があります。また、-ofはpar.parのfinal_compounds_folderに記載した場所と一致させる必要があります。

% cd ext_utils
% python extract_config.py -tk 20230428_3Cboth34 -df 1 -bf design1 -of bbt
Number of libDESIGNs  72

% tree ../results
../results
├── 20230428_3Cboth34_1_int_config.txt    << 作成された
├── 20230428_3Cboth34_config.txt
├── 20230428_3Cboth34_libDESIGNS.pic
└── sample_generator.log

% tree ../bbt
../bbt
├── C1.int.smi
├── C2.int.smi
└── C3.int.smi

resultsに抜き出した設定ファイル、-ofに指定したbbtに各サイクルで使われるBBファイルが出力されます。
次に使うmolecular_transformsは、なぜか上記で出力されたBBのCSVに対応していないため、修正してC1.int.smi等のファイルに出力し直しています。

全体構造の生成

 材料が揃いましたので全体構造を発生させてみましょう。構造発生にはLillyMolのmolecular_transformsを使って以下のようにします。

# Move to /edesigner_core/edesigner/
% cd ../
# 結果出力用のフォルダを準備
% mkdir product
% molecular_transformations -N 10000 -u -d -v -S ./product/prod -m RMX -z i -M RMX -Z -W rxsep='>>' -W rgsep='+' -A D -T results/20230428_3Cboth34_1_int_config.txt
Aromaticity done by Daylight rules
Will suppress duplicate molecules - within current generation
Reagents not matching the query will be ignored
Molecules not reacting will be ignored
Will discard scaffolds that show multiple substructure search hits
Will produce 10000 random selections
Read 39 records from control file
Sidechain_Reaction_Site::construct_from_msi_object: no joins specified
Sidechain_Reaction_Site::construct_from_msi_object: no joins specified
Sidechain_Reaction_Site::construct_from_msi_object: no joins specified
Sidechain_Reaction_Site::construct_from_msi_object: no joins specified
Sidechain_Reaction_Site::construct_from_msi_object: no joins specified
Sidechain_Reaction_Site::construct_from_msi_object: no joins specified
Sidechain_Reaction_Site::construct_from_msi_object: no joins specified
Sidechain_Reaction_Site::construct_from_msi_object: no joins specified
Sidechain_Reaction_Site::construct_from_msi_object: no joins specified
3 reactions in group 0
1 reactions in group 1
4 reactions in group 2
1 reactions in group 3
11 reactions in group 4
2 reactions in group 5
2 reactions in group 6
2 reactions in group 7
2 reactions in group 8
2 reactions in group 9
2 reactions in group 10
Ran 100000 iterations to produce 192 random molecules. Skipped 91552 duplicates at top level, 91552 subsequent dups
Read 0 molecules, changed 1
2816 hits to query 0 '2.1.2_Carboxylic_acid_+_amine_condensation_FROM_amines_AND_carboxylic_acids'
2816 hits to query 1 '2.1.2_Carboxylic_acid_+_amine_condensation_FROM_amines_AND_carboxylic_acids'
2816 hits to query 2 '2.1.2_Carboxylic_acid_+_amine_condensation_FROM_amines_AND_carboxylic_acids'
8448 hits to query 3 '6.1.1_N-Boc_deprotection_FROM_boc_AND_Null'
2112 hits to query 4 '9.7.8_Amino_to_guanidino_FROM_amines_aliphatic_AND_amines_aliphatic'
2112 hits to query 5 '9.7.8_Amino_to_guanidino_FROM_amines_aliphatic_AND_amines_aliphatic'
2112 hits to query 6 '9.7.8_Amino_to_guanidino_FROM_amines_aliphatic_AND_amines_aliphatic'
2112 hits to query 7 '9.7.8_Amino_to_guanidino_FROM_amines_aliphatic_AND_amines_aliphatic'
8448 hits to query 8 '9.7.61_Ester_hydrolysis_FROM_esters_methyl_ethyl_AND_Null'
768 hits to query 9 '2.1.2_Carboxylic_acid_+_amine_condensation_FROM_carboxylic_acids_AND_amines'
768 hits to query 10 '2.1.2_Carboxylic_acid_+_amine_condensation_FROM_carboxylic_acids_AND_amines'
768 hits to query 11 '2.1.2_Carboxylic_acid_+_amine_condensation_FROM_carboxylic_acids_AND_amines'
768 hits to query 12 '2.1.2_Carboxylic_acid_+_amine_condensation_FROM_carboxylic_acids_AND_amines'
768 hits to query 13 '2.1.2_Carboxylic_acid_+_amine_condensation_FROM_carboxylic_acids_AND_amines'
768 hits to query 14 '2.1.2_Carboxylic_acid_+_amine_condensation_FROM_carboxylic_acids_AND_amines'
768 hits to query 15 '2.1.2_Carboxylic_acid_+_amine_condensation_FROM_carboxylic_acids_AND_amines'
768 hits to query 16 '2.1.2_Carboxylic_acid_+_amine_condensation_FROM_carboxylic_acids_AND_amines'
768 hits to query 17 '2.1.2_Carboxylic_acid_+_amine_condensation_FROM_carboxylic_acids_AND_amines'
768 hits to query 18 '2.1.2_Carboxylic_acid_+_amine_condensation_FROM_carboxylic_acids_AND_amines'
768 hits to query 19 '2.1.2_Carboxylic_acid_+_amine_condensation_FROM_carboxylic_acids_AND_amines'
1536 hits to query 20 '6.1.1_N-Boc_deprotection_FROM_boc_AND_Null'
4224 hits to query 21 'NOOP'
768 hits to query 22 '6.1.1_N-Boc_deprotection_FROM_boc_AND_Null'
4224 hits to query 23 'NOOP'
0 hits to query 24 '6.1.6_N-Fmoc_deprotection_FROM_fmoc_AND_Null'
4224 hits to query 25 'NOOP'
0 hits to query 26 '6.1.6_N-Fmoc_deprotection_FROM_fmoc_AND_Null'
4224 hits to query 27 'NOOP'
384 hits to query 28 '9.7.61_Ester_hydrolysis_FROM_esters_methyl_ethyl_AND_Null'
4224 hits to query 29 'NOOP'
192 hits to query 30 '9.7.61_Ester_hydrolysis_FROM_esters_methyl_ethyl_AND_Null'
4224 hits to query 31 'NOOP'
Wrote 192 molecules

% tree product/
product/
└── prod.smi

% head -n 2 product/prod.smi
[NH]=C(N[C@H](Cc1[n]cccc1)C(=O)N1C(C(=O)NC)CN(C(=O)OC(C)(C)C)CC1)N1C(C(=O)N(CCO[13CH3])C)(CCCC1)C core+10:1_Test:test_693>>2.1.2_Carboxylic_acid_+_amine_condensation_FROM_amines_AND_carboxylic_acids>>6.1.1_N-Boc_deprotection_FROM_boc_AND_Null+11:1_Test:test_532+C=N>>9.7.8_Amino_to_guanidino_FROM_amines_aliphatic_AND_amines_aliphatic>>9.7.61_Ester_hydrolysis_FROM_esters_methyl_ethyl_AND_Null+10:1_Test:test_694>>2.1.2_Carboxylic_acid_+_amine_condensation_FROM_carboxylic_acids_AND_amines
OCC1CN(C)CCN(C(=O)[C@@H](NC(=[NH])N2CC(C(=O)N(CCO[13CH3])C)(CCC2)C)Cc2[n]ccc[n]2)C1 core+10:1_Test:test_682>>2.1.2_Carboxylic_acid_+_amine_condensation_FROM_amines_AND_carboxylic_acids>>6.1.1_N-Boc_deprotection_FROM_boc_AND_Null+11:1_Test:test_531+C=N>>9.7.8_Amino_to_guanidino_FROM_amines_aliphatic_AND_amines_aliphatic>>9.7.61_Ester_hydrolysis_FROM_esters_methyl_ethyl_AND_Null+10:1_Test:test_474>>2.1.2_Carboxylic_acid_+_amine_condensation_FROM_carboxylic_acids_AND_amines

オプションが沢山ありますが、-Sで出力先と接頭語、-Tで抜き出した設定ファイルを指定する事以外はそのままでいいと思います。これで、DELを構成する化合物から、ランダムに選ばれた10000化合物の全体構造のSMILESがファイルに出力されます。出力ファイルは全体構造SMILES space どのように作ったかが記載された、ゴチャゴチャしたファイルになります。

代表的な記述子の算出

 論文中で述べられているような記述子を計算するスクリプトも用意されていない(と思う)ので、ext_utilsフォルダにスクリプトを用意しました。以下のように生成物のフォルダを引数として指定すると、中にある拡張子smiのファイルを読み込んで記述子を計算します。計算する項目はMW, tPSA, LogP, 芳香環数、回転可能結合数、重原子数、fsp3です。実行したフォルダにprod_descs.txtというファイルが出力されます。

% cd ext_utils/
% python desc_calculation_multi.py ../product/
192 compounds will be processed.
All the structures were successfully calculated
calculation time 0:00:00.354224

% head -n 2 prod_descs.txt 
SMILES	MW	TPSA	LogP	AROM	ROTB	HAC	FSP3
[NH]=C(N[C@H](Cc1[n]cccc1)C(=O)N1C(C(=O)NC)CN(C(=O)OC(C)(C)C)CC1)N1C(C(=O)N(CCO[13CH3])C)(CCCC1)C	631.783160.5	1.06	1	9	45	0.677

これで気になるDELについては、全体構造を発生させて、計算物性値の確認をすることができるようになりました。物性値を意識したDELを作っていくのも一案ではないでしょうか。