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を作っていくのも一案ではないでしょうか。