├── LICENSE ├── README.md ├── bin ├── ModSMI.py ├── molfinder └── sample.csv └── example └── result_files.tar.gz /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2021, Yongbeom Kwon 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 4 | 5 |

6 |

MolFinder 7 |

8 | 9 |

10 |

an evolutionary algorithm for the global optimization of molecular properties and the extensive exploration of chemical space using SMILES 11 |

12 | 13 | MolFinder finds diverse molecules with desired properties efficiently without any training and a large molecular database. Also, it does not require a lot of computing resources. This repository contains MolFinder's code and results. MolFinder consists of a simple executable file, `molfinder`, and crossover and mutation process file `ModSMI.py`. 14 | 15 | ## Getting Started 16 | ### Prerequisites 17 | * `python` == 3.7.* 18 | * `rdkit` >= 2019.09.3.0+ 19 | * `pandas` 20 | * `numpy` 21 | * `matplotlib` 22 | 23 | ### Installation instructions 24 | We recommand to use anaconda3 virtual-env; simplest way 25 | ``` 26 | conda create -n molfinder_venv python=3.7 27 | conda activate molfinder_venv 28 | conda install -c rdkit rdkit 29 | conda install pandas numpy 30 | ``` 31 | 32 | ## Quickstart 33 | ### 0. Prepare dataset 34 | Prepare a SMILES file in CSV format. **The first column must be SMILES.** 35 | (Contains headers, It doesn't have to be just only SMILES.) 36 | ``` 37 | SMILES 38 | CCN(CC)CCN(C(=O)c1ccc(CCC(F)(F)F)cc1)[C@H]1CCS(=O)(=O)C1 39 | C[C@@H](C(=O)N(C)C)N1[C@H]2CC[C@H]1CC(NC(=O)C1C(C)(C)C1(C)C)C2 40 | CCOc1cc(N2C[C@@H]3C(NC(=O)c4ccn(C)n4)[C@H]3C2)ncn1 41 | O=C(NC[C@@H](CO)Cc1cccnc1)c1ccnc(OC2CCC2)c1 42 | O=C([C@@H]1C[C@H]1c1cccnc1)N1CCC(O)(CNCc2ccccn2)CC1 43 | O=C(CCN1C(=O)[C@H]2CCCC[C@@H]2C1=O)NC1CCN(CC(F)(F)F)CC1 44 | ... 45 | ``` 46 | 47 | ### 1. Run MolFinder algorithm 48 | ``` 49 | ./molfinder -i sample.csv --max-round 5 50 | ``` 51 | 52 | ## Parameters of MolFinder 53 | * `-i, --input`: (`str`) SMILES file (csv format) used by the model 54 | * `-r, --random-seed`: (`int`, None) Determines the random number that selects the initial molecules 55 | 56 | * `--bank-size`: (`int`, 100) Bank size used in the algorithm 57 | * `--seed-size`: (`int`, 60) The number of parent molecules used to generate child molecules 58 | 59 | * `-dist, --dist-coef`: (`float`, 0.90) Adjust the $D_{avg}$ value 60 | 61 | * `--max-round`: (`int`, 150) The maximum number of round 62 | * `-cvg, --convergent-round`: (`int`, 150) Determines how many rounds the Dcut will converge 63 | 64 | * `-c, --coefficient`: (`float`, 0.9) Coefficient of objective function 65 | * `--target`: (`SMILES: str`, None) Target molecule 66 | 67 | * `-fp, --fp-method`: (`str`, rdkit) Fingerprint method; Morgan or RDKit (default) 68 | 69 | * `-v, --verbosity`: Print RDKit Error message. 70 | 71 | ```shell 72 | # Parameters of paper results 73 | molfinder -r 12345678 --bank-size 1000 --seed-size 600 -dist 0.90 -c 0.994 -i sample.csv 74 | ``` 75 | 76 | ## Set objective fucntion 77 | 1. Find `@@FEATURES` in `molfinder`, Set your features. 78 | 2. Find `@@REWARD` in `molfinder`, Modifiy your objective function. 79 | 80 | ## Component of MolFinder 81 | ``` 82 | MolFinder Algorithm 83 | ├── molfinder 84 | │ ├── cal_avg_dist 85 | │ ├── prepare_seed 86 | │ ├── prepare_child 87 | | │ └── Crossover and Mutations from ModSMI 88 | │ └── update_bank 89 | └── ModSMI.py 90 | ├── tight_rm_branch 91 | ├── prepare_rigid_crossover 92 | ├── replace_atom 93 | ├── add_atom 94 | └── delete_atom 95 | ``` 96 | 97 | ## References 98 | 99 | * paper: https://doi.org/10.1186/s13321-021-00501-7 100 | 101 | --- 102 | This is my first code and was mainly written in February 2020. There are many drawbacks, but I keep learning and trying. 103 | -------------------------------------------------------------------------------- /bin/ModSMI.py: -------------------------------------------------------------------------------- 1 | import os 2 | import re 3 | import time 4 | import random 5 | import itertools 6 | 7 | import numpy as np 8 | 9 | from rdkit import Chem 10 | from rdkit.Chem import AllChem 11 | from rdkit.Chem import Draw 12 | 13 | limit_ = 200 14 | 15 | 16 | def set_avoid_ring(_smiles): 17 | avoid_ring = [] 18 | ring_tmp = set(re.findall(r"\d", _smiles)) 19 | for j in ring_tmp: 20 | tmp = [i for i, val in enumerate(_smiles) if val == j] 21 | while tmp: 22 | avoid_ring += [j for j in range(tmp.pop(0), tmp.pop(0) + 1)] 23 | return set(avoid_ring) 24 | 25 | 26 | def prepare_rigid_crossover(_smiles, side, consider_ring=True, _minimum_len=4): 27 | """ 1 point crossover 28 | :param _smiles: SMILES (str) 29 | :param side: Left SMILES or Right SMILES ['L'|'R'] (str) 30 | :param consider_ring: consider about avoiding ring (bool) 31 | :param _minimum_len: minimum cut size (int) 32 | :return: 33 | """ 34 | 35 | if side not in ["L", "R"]: 36 | raise Exception("You must choice in L(Left) or R(Right)") 37 | 38 | _smiles_len = len(_smiles) 39 | _smi = None 40 | 41 | if consider_ring: # ring 부분을 피해서 자르도록 고려. 42 | avoid_ring_list = set_avoid_ring(_smiles) 43 | 44 | p = 0 45 | _start = None 46 | _end = None 47 | _gate = False 48 | while not _gate: # 원하는 형태의 smiles piece가 나올 때 까지 반복 49 | if p == limit_: 50 | raise ValueError(f"main_gate fail ({side}): {_smiles}") 51 | 52 | if consider_ring: 53 | j = 0 54 | ring_gate = False 55 | if side == "L": 56 | while not ring_gate: 57 | if j == 30: 58 | raise ValueError(f"ring_gate fail (L): {_smiles}") 59 | _end = np.random.randint(_minimum_len, _smiles_len + 1) 60 | if _end not in avoid_ring_list: 61 | ring_gate = True 62 | j += 1 63 | elif side == "R": 64 | while not ring_gate: 65 | if j == 30: 66 | raise ValueError(f"ring_gate fail (R): {_smiles}") 67 | _start = np.random.randint(0, _smiles_len - _minimum_len) 68 | if _start not in avoid_ring_list: 69 | ring_gate = True 70 | j += 1 71 | _smi = _smiles[_start:_end] 72 | else: 73 | if side == "L": 74 | _end = np.random.randint(_minimum_len, _smiles_len) 75 | elif side == "R": 76 | _start = np.random.randint(0, _smiles_len - _minimum_len) 77 | 78 | _smi = _smiles[_start:_end] 79 | chk_ring = re.findall(r"\d", _smi) 80 | i = 0 81 | for i in set(chk_ring): 82 | list_ring = [_ for _, val in enumerate(_smi) if val == i] 83 | if (len(list_ring) % 2) == 1: 84 | b = random.sample(list_ring, 1) 85 | _smi = _smi[:b[0]] + _smi[b[0] + 1:] 86 | # print(f'@ {_smi} // {_smiles}') 87 | 88 | p += 1 89 | 90 | if "." in _smi: # 이온은 패스한다. 91 | continue 92 | 93 | n_chk = 0 94 | for j in _smi: # [] 닫혀 있는지 확인. 95 | if j == "[": 96 | n_chk += 1 97 | if j == "]": 98 | n_chk -= 1 99 | if n_chk == 0: 100 | _gate = True 101 | 102 | return _smi 103 | 104 | 105 | def chk_branch(_smi, side=None): 106 | 107 | if side not in ["L", "R", None]: 108 | raise Exception("You must choice in L(Left) or R(Right)") 109 | 110 | branch_list = [] 111 | n_branch = 0 112 | min_branch = 0 113 | for i, b in enumerate(_smi): # () 닫혀 있는지 확인. 114 | if b == "(": 115 | n_branch += 1 # 0 == ( 116 | if b in ")": 117 | n_branch -= 1 # 1 == ) 118 | if side == "L": 119 | if n_branch < min_branch: 120 | min_branch = n_branch 121 | branch_list.append(i) 122 | elif side == "R": # track max_value 123 | if n_branch > min_branch: 124 | min_branch = n_branch 125 | branch_list.append(i) 126 | if side == None: 127 | return n_branch 128 | return np.asarray(branch_list), min_branch 129 | 130 | 131 | def get_open_branch(_smi): 132 | return [i for i, e in enumerate(_smi) if e == "("] 133 | 134 | 135 | def get_close_branch(_smi): 136 | return [i for i, e in enumerate(_smi) if e == ")"] 137 | 138 | 139 | def tight_rm_branch(_smi_l, _smi_r): 140 | # tmp = time.time() 141 | 142 | _new_smi = _smi_l + _smi_r 143 | 144 | open_branch = get_open_branch(_new_smi) 145 | close_branch = get_close_branch(_new_smi) 146 | 147 | b = None 148 | n_branch = chk_branch(_new_smi) 149 | 150 | q = len(_smi_l) 151 | while n_branch > 0: # over opened-branch 152 | _smi_l_open_branch = get_open_branch(_smi_l) 153 | _smi_r_open_branch = get_open_branch(_smi_r) 154 | open_branch = get_open_branch(_smi_l + _smi_r) 155 | avoid_tokens = [ 156 | i for i, e in enumerate(_smi_l + _smi_r) 157 | if e in ["=", "#", "@", "1", "2", "3", "4", "5", "6", "7", "8"] 158 | ] 159 | 160 | if len(_smi_r_open_branch) == 0: # open branch 가 없을 경우 161 | _smi_r_open_branch.append(len(_smi_r)) 162 | if len(_smi_l_open_branch) == 0: 163 | _smi_l_open_branch.append(0) 164 | 165 | n = np.random.rand() # 임의적으로 close branch 를 추가하거나 제거한다. 166 | if n > 0.5: # 추가 167 | branch_gate = False 168 | j = 0 169 | while not branch_gate: # Ring 부분을 피해서 자름 170 | if j == limit_: 171 | raise ValueError 172 | b = np.random.randint(_smi_l_open_branch[-1] + 1, 173 | _smi_r_open_branch[-1] + q) 174 | j += 1 175 | if b not in avoid_tokens: 176 | branch_gate = True 177 | n_branch -= 1 178 | if b <= len(_smi_l 179 | ): # SMILES 길이를 고려하여 자른다. 좌측 SMILES의 open branch를 cut! 180 | _smi_l = _smi_l[:b] + ")" + _smi_l[b:] 181 | q += 1 182 | else: # 좌측 SMILES 길이를 제외한 수가 우측 SMILES 문자의 위치를 의미한다. 183 | b -= len(_smi_l) 184 | _smi_r = _smi_r[:b] + ")" + _smi_r[b:] 185 | else: # 제거 186 | b = _smi_l_open_branch[-1] # (Random으로도 가능함. 과한 부분만 Cut!) 187 | n_branch -= 1 188 | q -= 1 189 | _smi_l = _smi_l[:b] + _smi_l[b + 1:] 190 | 191 | while n_branch < 0: # over closed-branch 192 | _smi_l_close_branch = get_close_branch(_smi_l) 193 | _smi_r_close_branch = get_close_branch(_smi_r) 194 | close_branch = get_close_branch(_smi_l + _smi_r) 195 | avoid_tokens = [ 196 | i for i, e in enumerate(_smi_l + _smi_r) 197 | if e in ["=", "#", "@", "1", "2", "3", "4", "5", "6", "7", "8"] 198 | ] 199 | 200 | if len(_smi_r_close_branch) == 0: 201 | _smi_r_close_branch.append(len(_smi_r)) 202 | if len(_smi_l_close_branch) == 0: 203 | _smi_l_close_branch.append(0) 204 | 205 | n = np.random.rand() 206 | if n > 0.5: 207 | branch_gate = False 208 | j = 0 209 | while not branch_gate: # Ring 부분을 피해서 자름 210 | b = np.random.randint(_smi_l_close_branch[-1] + 1, 211 | _smi_r_close_branch[0] + q + 1) 212 | j += 1 213 | if b not in (close_branch + avoid_tokens): 214 | branch_gate = True 215 | if j == limit_: 216 | raise ValueError 217 | n_branch += 1 218 | if b < len(_smi_l): 219 | _smi_l = _smi_l[:b] + "(" + _smi_l[b:] 220 | q += 1 221 | else: 222 | b -= len(_smi_l) 223 | _smi_r = _smi_r[:b] + "(" + _smi_r[b:] 224 | else: 225 | b = _smi_r_close_branch[0] 226 | n_branch += 1 227 | # print(f'{_smi_r[b]}') 228 | _smi_r = _smi_r[:b] + _smi_r[b + 1:] 229 | 230 | # time_.append(time.time() - tmp) 231 | 232 | return _smi_l + _smi_r 233 | 234 | 235 | def replace_atom(_smi): 236 | 237 | # C /B N P / O S / F Cl Br I 238 | replace_atom_list = [6, 5, 7, 15, 8, 16, 9, 17, 35, 53] 239 | # C N P / O S 240 | replace_arom_atom_list = [6, 7, 15, 8, 16] 241 | 242 | # print(f"before: {_smi}") 243 | 244 | mol_ = Chem.MolFromSmiles(_smi) 245 | max_len = mol_.GetNumAtoms() 246 | 247 | mw = Chem.RWMol(mol_) 248 | # Chem.SanitizeMol(mw) 249 | 250 | p = 0 251 | gate_ = False 252 | while not gate_: 253 | if p == 30: 254 | # raise Exception 255 | raise PermissionError 256 | 257 | rnd_atom = np.random.randint(0, max_len) 258 | 259 | valence = mw.GetAtomWithIdx(rnd_atom).GetExplicitValence() 260 | if mw.GetAtomWithIdx(rnd_atom).GetIsAromatic(): 261 | if valence == 3: 262 | mw.ReplaceAtom( 263 | rnd_atom, 264 | Chem.Atom(replace_arom_atom_list[np.random.randint(0, 3)])) 265 | elif valence == 2: 266 | mw.ReplaceAtom( 267 | rnd_atom, 268 | Chem.Atom(replace_arom_atom_list[np.random.randint(1, 5)])) 269 | else: 270 | continue 271 | mw.GetAtomWithIdx(rnd_atom).SetIsAromatic(True) 272 | else: 273 | if valence == 4: 274 | mw.ReplaceAtom( 275 | rnd_atom, 276 | Chem.Atom(replace_atom_list[np.random.randint(0, 1)])) 277 | elif valence == 3: 278 | mw.ReplaceAtom( 279 | rnd_atom, 280 | Chem.Atom(replace_atom_list[np.random.randint(0, 4)])) 281 | elif valence == 2: 282 | mw.ReplaceAtom( 283 | rnd_atom, 284 | Chem.Atom(replace_atom_list[np.random.randint(0, 6)])) 285 | elif valence == 1: 286 | mw.ReplaceAtom( 287 | rnd_atom, 288 | Chem.Atom(replace_atom_list[np.random.randint(0, 10)])) 289 | 290 | p += 1 291 | # print(f"after: {Chem.MolToSmiles(mw)}") 292 | try: 293 | Chem.SanitizeMol(mw) 294 | gate_ = True 295 | except Chem.rdchem.KekulizeException: 296 | # print(f"{_smi} {Chem.MolToSmiles(mw, kekuleSmiles=False)} {Chem.MolToSmiles(mol_, kekuleSmiles=False)}") 297 | # raise Exception 298 | pass 299 | 300 | Chem.Kekulize(mw) 301 | # print(f"after_San: {Chem.MolToSmiles(mw)}") 302 | 303 | return Chem.MolToSmiles(mw, kekuleSmiles=True), mw 304 | 305 | 306 | def delete_atom(_smi): 307 | """ 308 | Aromatic ring 을 제외하고 삭제함. 309 | :param _smi: 310 | :return: 311 | """ 312 | max_len = len(_smi) 313 | mol_ = False 314 | _new_smi = None 315 | 316 | p = 0 317 | while not mol_: 318 | p += 1 319 | if p == 30: 320 | # raise Exception 321 | raise PermissionError 322 | 323 | rnd_insert = np.random.randint(max_len) 324 | _new_smi = _smi[:rnd_insert] + _smi[rnd_insert + 1:] 325 | mol_ = Chem.MolFromSmiles(_new_smi) 326 | 327 | return _new_smi, mol_ 328 | 329 | 330 | def add_atom(_smi): 331 | list_atom = ["C", "B", "N", "P", "O", "S", "Cl", "Br"] 332 | 333 | max_len = len(_smi) 334 | mol_ = False 335 | _new_smi = None 336 | 337 | p = 0 338 | while not mol_: 339 | p += 1 340 | if p == 30: 341 | # raise Exception 342 | raise PermissionError 343 | 344 | rnd_insert = np.random.randint(max_len) 345 | _new_smi = _smi[:rnd_insert] + random.sample(list_atom, 346 | 1)[0] + _smi[rnd_insert:] 347 | mol_ = Chem.MolFromSmiles(_new_smi) 348 | 349 | return _new_smi, mol_ 350 | 351 | 352 | def cut_smi(smi1, smi2, func, ring_bool): 353 | 354 | l_smi = None 355 | r_smi = None 356 | 357 | try: 358 | l_smi = func(smi1, "L", ring_bool, 4) 359 | r_smi = func(smi2, "R", ring_bool, 4) 360 | except (IndexError, ValueError): 361 | # fail_f.write(f"{l_smi},{r_smi},piece\n") 362 | raise PermissionError 363 | 364 | return l_smi, r_smi 365 | 366 | 367 | def crossover_smiles(smi1, smi2, func, ring_bool): 368 | new_smi = None 369 | mol = None 370 | l_smi = None 371 | r_smi = None 372 | 373 | gate = 0 374 | while not (l_smi and r_smi): 375 | gate += 1 376 | if gate > 10: 377 | # fail_f.write(f"{l_smi},{r_smi},np\n") 378 | raise PermissionError 379 | try: 380 | l_smi, r_smi = cut_smi(smi1, smi2, func, ring_bool) 381 | except: 382 | pass 383 | 384 | gate = 0 385 | while not mol: 386 | gate += 1 387 | if gate > 5: 388 | break 389 | try: 390 | new_smi = tight_rm_branch(l_smi, r_smi) 391 | except ValueError: 392 | continue 393 | mol = Chem.MolFromSmiles(new_smi) 394 | 395 | return new_smi, mol 396 | 397 | 398 | if __name__ == "__main__": 399 | 400 | from multiprocessing import Pool 401 | import datetime 402 | from rkdit import rdBase 403 | 404 | rdBase.DisableLog('rdApp.*') 405 | 406 | _minimum_len = 4 407 | 408 | def get_smi(_smi): 409 | mol = Chem.MolFromSmiles(_smi[:-1]) 410 | Chem.Kekulize(mol) 411 | return Chem.MolToSmiles(mol, kekuleSmiles=True, isomericSmiles=False) 412 | 413 | with open( 414 | '/home/yongbeom/Git/duaibeom/gen_smiles/data/guacamol_v1_test.smiles' 415 | ) as f: 416 | with Pool(8) as pool: 417 | smiles = pool.map(get_smi, f) 418 | 419 | # smiles = smiles[:1000] 420 | with open('init.smi', 'w') as f: 421 | for smi in smiles: 422 | f.write(f'{smi}\n') 423 | 424 | def just_cut_left_smi(_smi): 425 | len_smi = len(_smi) 426 | _end = np.random.randint(_minimum_len, len_smi + 1) 427 | return _smi[:_end] 428 | 429 | def just_cut_right_smi(_smi): 430 | len_smi = len(_smi) 431 | _start = np.random.randint(0, len_smi - _minimum_len) 432 | return _smi[_start:] 433 | 434 | def simple_cut_smi(smi1, smi2): 435 | 436 | l_smi = None 437 | r_smi = None 438 | 439 | l_smi = just_cut_left_smi(smi1) 440 | r_smi = just_cut_right_smi(smi2) 441 | 442 | return l_smi + r_smi 443 | 444 | start_time = time.time() 445 | print("-- start -- simple cut with swap") 446 | n_valid = 0 447 | n_fail = 0 448 | 449 | smi_list = [] 450 | for _ in range(100000): 451 | smi1, smi2 = random.sample(smiles, 2) 452 | gate = 0 453 | mol = None 454 | _smi = None 455 | 456 | while not mol: 457 | gate += 1 458 | if gate > 5: 459 | break 460 | try: 461 | _smi = simple_cut_smi(smi1, smi2) 462 | mol = Chem.MolFromSmiles(_smi) 463 | except: 464 | mol = None 465 | 466 | if not mol: 467 | gate = 0 468 | while not mol: 469 | gate += 1 470 | if gate > 5: 471 | break 472 | try: 473 | _smi = simple_cut_smi(smi2, smi1) 474 | mol = Chem.MolFromSmiles(_smi) 475 | except: 476 | mol = None 477 | 478 | if mol: 479 | smi_list.append(_smi) 480 | n_valid += 1 481 | else: 482 | n_fail += 1 483 | 484 | # if _ % 100000 == 0: 485 | # print(f"Success rate: {n_valid/(n_valid + n_fail)*100:.3f}% @{_} Time: {(time.time() - start_time)/60:.3f} min") 486 | print(f"Final Success rate: {n_valid/(n_valid + n_fail)*100:.3f}%") 487 | print(f"Cost time: {(time.time() - start_time)/60:.3f} min") 488 | # with open('crossover_nothing_swap.smi', 'w') as f: 489 | # for smi in smi_list: 490 | # f.write(f'{smi}\n') 491 | 492 | start_time = time.time() 493 | print("-- start -- simple cut") 494 | n_valid = 0 495 | n_fail = 0 496 | 497 | smi_list = [] 498 | for _ in range(100000): 499 | smi1, smi2 = random.sample(smiles, 2) 500 | gate = 0 501 | mol = None 502 | _smi = None 503 | 504 | while not mol: 505 | gate += 1 506 | if gate > 5: 507 | break 508 | try: 509 | _smi = simple_cut_smi(smi1, smi2) 510 | mol = Chem.MolFromSmiles(_smi) 511 | except: 512 | mol = None 513 | 514 | if mol: 515 | smi_list.append(_smi) 516 | n_valid += 1 517 | else: 518 | n_fail += 1 519 | 520 | # if _ % 100000 == 0: 521 | # print(f"Success rate: {n_valid/(n_valid + n_fail)*100:.3f}% @{_} Time: {(time.time() - start_time)/60:.3f} min") 522 | print(f"Final Success rate: {n_valid/(n_valid + n_fail)*100:.3f}%") 523 | print(f"Cost time: {(time.time() - start_time)/60:.3f} min") 524 | # with open('crossover_nothing.smi', 'w') as f: 525 | # for smi in smi_list: 526 | # f.write(f'{smi}\n') 527 | 528 | start_time = time.time() 529 | print("-- start -- our crossover with swap") 530 | n_valid = 0 531 | n_fail = 0 532 | 533 | smi_list = [] 534 | for _ in range(100000): 535 | smi1, smi2 = random.sample(smiles, 2) 536 | gate = 0 537 | mol = None 538 | new_smi = None 539 | 540 | try: 541 | new_smi, mol = crossover_smiles(smi1, smi2, 542 | prepare_rigid_crossover, True) 543 | except PermissionError: 544 | pass 545 | if not mol: 546 | try: 547 | new_smi, mol = crossover_smiles(smi2, smi1, 548 | prepare_rigid_crossover, True) 549 | except PermissionError: 550 | pass 551 | 552 | if mol: 553 | smi_list.append(new_smi) 554 | n_valid += 1 555 | else: 556 | n_fail += 1 557 | 558 | # if _ % 100000 == 0: 559 | # print(f"Success rate: {n_valid/(n_valid + n_fail)*100:.3f}% @{_} Time: {(time.time() - start_time)/60:.3f} min") 560 | print(f"Final Success rate: {n_valid/(n_valid + n_fail)*100:.3f}%") 561 | print(f"Cost time: {(time.time() - start_time)/60:.3f} min") 562 | # with open('crossover_our_swap.smi', 'w') as f: 563 | # for smi in smi_list: 564 | # f.write(f'{smi}\n') 565 | 566 | start_time = time.time() 567 | print("-- start -- our crossover") 568 | n_valid = 0 569 | n_fail = 0 570 | 571 | smi_list = [] 572 | for _ in range(100000): 573 | smi1, smi2 = random.sample(smiles, 2) 574 | gate = 0 575 | mol = None 576 | new_smi = None 577 | 578 | try: 579 | new_smi, mol = crossover_smiles(smi1, smi2, 580 | prepare_rigid_crossover, True) 581 | except PermissionError: 582 | pass 583 | 584 | if mol: 585 | smi_list.append(new_smi) 586 | n_valid += 1 587 | else: 588 | n_fail += 1 589 | 590 | # if _ % 100000 == 0: 591 | # print(f"Success rate: {n_valid/(n_valid + n_fail)*100:.3f}% @{_} Time: {(time.time() - start_time)/60:.3f} min") 592 | print(f"Final Success rate: {n_valid/(n_valid + n_fail)*100:.3f}%") 593 | print(f"Cost time: {(time.time() - start_time)/60:.3f} min") 594 | # with open('crossover_our.smi', 'w') as f: 595 | # for smi in smi_list: 596 | # f.write(f'{smi}\n') 597 | 598 | start_time = time.time() 599 | print("-- start -- replace atom !") 600 | n_valid = 0 601 | n_fail = 0 602 | 603 | for _ in range(100000): 604 | smi1 = random.sample(smiles, 1)[0] 605 | try: 606 | _smi, _mol = replace_atom(smi1) 607 | mol = Chem.MolFromSmiles(_smi) 608 | except: 609 | mol = None 610 | 611 | if mol: 612 | n_valid += 1 613 | else: 614 | n_fail += 1 615 | 616 | # if _ % 100000 == 0: 617 | # print(f"Success rate: {n_valid/(n_valid + n_fail)*100:.3f}% @{_} Time: {(time.time() - start_time)/60:.3f} min") 618 | print(f"Final Success rate: {n_valid/(n_valid + n_fail)*100:.3f}%") 619 | print(f"Cost time: {(time.time() - start_time)/60:.3f} min") 620 | 621 | start_time = time.time() 622 | print("-- start -- delete atom !") 623 | n_valid = 0 624 | n_fail = 0 625 | 626 | for _ in range(100000): 627 | smi1 = random.sample(smiles, 1)[0] 628 | try: 629 | _smi, _mol = delete_atom(smi1) 630 | mol = Chem.MolFromSmiles(_smi) 631 | except: 632 | mol = None 633 | 634 | if mol: 635 | n_valid += 1 636 | else: 637 | n_fail += 1 638 | 639 | # if _ % 100000 == 0: 640 | # print(f"Success rate: {n_valid/(n_valid + n_fail)*100:.3f}% @{_} Time: {(time.time() - start_time)/60:.3f} min") 641 | print(f"Final Success rate: {n_valid/(n_valid + n_fail)*100:.3f}%") 642 | print(f"Cost time: {(time.time() - start_time)/60:.3f} min") 643 | 644 | start_time = time.time() 645 | print("-- start -- add atom !") 646 | n_valid = 0 647 | n_fail = 0 648 | 649 | for _ in range(100000): 650 | smi1 = random.sample(smiles, 1)[0] 651 | try: 652 | _smi, _mol = add_atom(smi1) 653 | mol = Chem.MolFromSmiles(_smi) 654 | except: 655 | mol = None 656 | 657 | if mol: 658 | n_valid += 1 659 | else: 660 | n_fail += 1 661 | 662 | # if _ % 100000 == 0: 663 | # print(f"Success rate: {n_valid/(n_valid + n_fail)*100:.3f}% @{_} Time: {(time.time() - start_time)/60:.3f} min") 664 | print(f"Final Success rate: {n_valid/(n_valid + n_fail)*100:.3f}%") 665 | print(f"Cost time: {(time.time() - start_time)/60:.3f} min") 666 | -------------------------------------------------------------------------------- /bin/molfinder: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import os 4 | import sys 5 | import time 6 | import argparse 7 | 8 | import numpy as np 9 | import pandas as pd 10 | import matplotlib.pyplot as plt 11 | 12 | from rdkit import Chem 13 | from rdkit import rdBase 14 | from rdkit.Chem import RDConfig 15 | from rdkit.DataStructs import TanimotoSimilarity 16 | from rdkit.Chem import QED, AllChem 17 | 18 | sys.path.append(os.path.join(RDConfig.RDContribDir, 'SA_Score')) 19 | 20 | import sascorer 21 | 22 | import ModSMI 23 | 24 | parser = argparse.ArgumentParser( 25 | description="This python script is made by Yongbeom Kwon") 26 | parser.add_argument("-i", "--input", type=str, required=True, help="") 27 | parser.add_argument("-r", 28 | "--random-seed", 29 | metavar="N", 30 | type=int, 31 | default=None, 32 | help="Random seed") 33 | parser.add_argument( 34 | "--bank-size", 35 | metavar="N", 36 | type=int, 37 | default=100, 38 | help="", 39 | ) 40 | parser.add_argument( 41 | "--seed-size", 42 | metavar="N", 43 | type=int, 44 | default=60, 45 | help="", 46 | ) 47 | parser.add_argument( 48 | "--max-round", 49 | metavar="N", 50 | type=int, 51 | default=150, 52 | help="", 53 | ) 54 | parser.add_argument( 55 | "-cvg", 56 | "--convergent-round", 57 | metavar="N", 58 | default=150, 59 | type=int, 60 | help= 61 | "Convergent round; It determines when D_cut reaches a minimum value. And also It decides diversity of molecules", 62 | ) 63 | parser.add_argument( 64 | "-c", 65 | "--coefficient", 66 | metavar="Float", 67 | type=float, 68 | default=0.9, 69 | help="coefficient of reward function.", 70 | ) 71 | parser.add_argument( 72 | "-dist", 73 | "--dist-coef", 74 | metavar="coef. of distance", 75 | type=float, 76 | default=0.90, 77 | help="Control Dcut", 78 | ) 79 | parser.add_argument( 80 | "--target", 81 | metavar="SMILES", 82 | type=str, 83 | default=None, 84 | help="target_moleclue SMILES", 85 | ) 86 | parser.add_argument( 87 | "-fp", 88 | "--fp-method", 89 | type=str, 90 | default="rdkit", 91 | help="Select Fingerprint Method (rdkit/morgan)", 92 | ) 93 | # parser.add_argument( 94 | # "-nf", "--nfeatures", metavar="N", type=int, default=2, help="a number of features" 95 | # ) 96 | parser.add_argument("-v", 97 | "--verbosity", 98 | action="count", 99 | default=0, 100 | help="print error") 101 | args = parser.parse_args() 102 | 103 | if args.verbosity == 0: 104 | rdBase.DisableLog('rdApp.*') 105 | 106 | fp_method = args.fp_method 107 | 108 | if fp_method == "rdkit": 109 | _get_fp = lambda x: Chem.RDKFingerprint(x) 110 | elif fp_method == "morgan": 111 | _get_fp = lambda x: AllChem.GetMorganFingerprint(x, 2) 112 | elif fp_method == "morgan1024": 113 | _get_fp = lambda x: AllChem.GetMorganFingerprintAsBitVect(x, 2, nBits=1024) 114 | elif fp_method == "morgan2048": 115 | _get_fp = lambda x: AllChem.GetMorganFingerprintAsBitVect(x, 2) 116 | 117 | 118 | def get_fp(mol_or_smi): 119 | if type(mol_or_smi) in [Chem.rdchem.Mol, Chem.rdchem.RWMol]: 120 | _mol = mol_or_smi 121 | elif type(mol_or_smi) == str: 122 | _mol = Chem.MolFromSmiles(mol_or_smi) 123 | else: 124 | raise ValueError("This type is not allowed.") 125 | return _get_fp(_mol) 126 | 127 | 128 | # -------------------------------------------------------- # 129 | """ 130 | @@FEATURES 131 | Features must return a number. 132 | 1. Set nfeatures 133 | 2. Add your functions 134 | """ 135 | 136 | # The number of features 137 | nfeatures = 2 138 | 139 | # Set your functions. 140 | feature1 = lambda x: sascorer.calculateScore(x) # SAS 141 | feature1a = lambda x: 1 - (sascorer.calculateScore(x) - 1) / 9 # SAS 142 | feature2 = lambda x: QED.default(x) # QED 143 | feature3 = lambda x: TanimotoSimilarity(_get_fp(x), target_fps) # similarity 144 | 145 | 146 | def feature5(x): # RingPenalty 147 | ring_list = x.GetRingInfo().AtomRings() 148 | if ring_list: 149 | ring_length = max([len(j) for j in ring_list]) 150 | if ring_length <= 6: 151 | return 0 152 | else: 153 | return ring_length - 6 154 | else: 155 | return 0 156 | 157 | 158 | # SET REWARD function #################################### # 159 | """ 160 | @@REWARD 161 | Modify the cal_features function; Index 0, 1, and 2 are fixed. 162 | You need to put the desired features after index 3 of the returned list. 163 | Then modify obj_fn and column_name to suit your purpose. 164 | """ 165 | if args.target: # TARGET Molecule VESRSION 166 | 167 | # Modify the cal_features function; Index 0, 1, and 2 are fixed. 168 | # You need to put the desired features after index 3 of the returned list. 169 | def cal_features(_smi, _mol): # set data_column 170 | return [_smi, _mol, True, feature2(_mol), feature3(_mol)] 171 | 172 | # Then modify obj_fn and column_name to suit your purpose. 173 | target_fps = get_fp(args.target) 174 | sim_coef = args.coefficient 175 | qed_coef = 1 - sim_coef 176 | obj_fn = lambda x: sim_coef * x[:, 4] + qed_coef * x[:, 3] 177 | 178 | # SMILES / feature1 / feature2 / obj_fn 179 | column_name = ["SMILES", "QED", "SIM", "TARGET"] 180 | 181 | else: # Non-TARGET Molecule VESRSION 182 | 183 | # Modify the cal_features function; Index 0, 1, and 2 are fixed. 184 | # You need to put the desired features after index 3 of the returned list. 185 | def cal_features(_smi, _mol): # set data_column 186 | return [_smi, _mol, True, feature1(_mol), feature2(_mol)] 187 | 188 | # Then modify obj_fn and column_name to suit your purpose. 189 | qed_coef = args.coefficient 190 | sas_coef = 1 - qed_coef 191 | obj_fn = lambda x: qed_coef * x[:, 4] - sas_coef * x[:, 3] 192 | 193 | # SMILES / feature1 / feature2 / obj_fn 194 | column_name = ["SMILES", "SAS", "QED", "TARGET"] 195 | 196 | # -------------------------------------------------------- # 197 | 198 | 199 | class ChkTime: 200 | def __init__(self): 201 | self.t = time.time() 202 | 203 | def get(self): 204 | return (time.time() - self.t) / 60 205 | 206 | 207 | def cal_avg_dist(solutions): 208 | 209 | dist_sum = 0 210 | min_dist = 10 211 | max_dist = 0 212 | _n = len(solutions) 213 | 214 | for i in range(_n - 1): 215 | for j in range(i + 1, _n): 216 | fps1 = get_fp(solutions[i, 1]) 217 | fps2 = get_fp(solutions[j, 1]) 218 | dist = TanimotoSimilarity(fps1, fps2) 219 | dist_sum += dist 220 | if dist < min_dist: 221 | min_dist = dist 222 | if dist > max_dist: 223 | max_dist = dist 224 | 225 | return dist_sum / (_n * (_n - 1) / 2) # , min_dist, max_dist 226 | 227 | 228 | def cal_rnd_avg_dist(solutions, nrnd=400000): 229 | 230 | dist_sum = 0 231 | min_dist = 10 232 | max_dist = 0 233 | tmp_chk = 0 234 | 235 | start_chk = time.time() 236 | for _ in range(nrnd): 237 | 238 | if _ == 0: 239 | tmp_chk = start_chk 240 | 241 | mol1, mol2 = np.random.choice(solutions[:, 1], size=2) 242 | fps1 = get_fp(mol1) 243 | fps2 = get_fp(mol2) 244 | dist = TanimotoSimilarity(fps1, fps2) 245 | dist_sum += dist 246 | 247 | if dist < min_dist: 248 | min_dist = dist 249 | if dist > max_dist: 250 | max_dist = dist 251 | if _ % int(nrnd / 10) == 0: 252 | print( 253 | f"{_/nrnd*100:.1f}% complete {(time.time() - tmp_chk)/60} min/10%\r" 254 | ) 255 | tmp_chk = time.time() 256 | 257 | print(f"calc. Dist total {(time.time() - start_chk)/60} min") 258 | 259 | return dist_sum / nrnd # , min_dist, max_dist 260 | 261 | 262 | def cal_array_dist(solutions1, solutions2): 263 | """ 264 | numpy 265 | :param solutions1: 266 | :param solutions2: 267 | :return: 268 | """ 269 | 270 | n1 = len(solutions1) 271 | n2 = len(solutions2) 272 | dist = np.zeros([n1, n2]) 273 | 274 | for i in range(n1): 275 | for j in range(n2): 276 | fps1 = get_fp(solutions[i, 1]) 277 | fps2 = get_fp(solutions[j, 1]) 278 | dist[n1, n2] = TanimotoSimilarity(fps1, fps2) 279 | 280 | return dist 281 | 282 | 283 | def init_bank(file_name, nbank=None, nsmiles=None, rseed=None): 284 | 285 | np.random.seed(rseed) 286 | 287 | _df = pd.read_csv(file_name) 288 | df = _df[:nsmiles].values 289 | 290 | shuffled_index = np.random.permutation(len(df)) 291 | tmp_bank = df[shuffled_index][:nbank] 292 | df = pd.DataFrame(tmp_bank, columns=_df.columns.tolist()) 293 | df.to_csv(f"init_bank_{R_d:.5f}_{args.coefficient:.3f}.csv", index=False) 294 | 295 | del df, _df 296 | 297 | bank = np.empty([tmp_bank.shape[0], 3 + nfeatures], dtype=object) 298 | bank[:, 0] = tmp_bank[:, 0] # SMILES 299 | bank[:, 2] = True # usable label True 300 | 301 | for i, j in enumerate(bank[:, 0]): 302 | mol = Chem.MolFromSmiles(j) 303 | bank[i, 1] = mol 304 | Chem.Kekulize(mol) 305 | bank[i, 0] = Chem.MolToSmiles(mol, 306 | kekuleSmiles=True, 307 | isomericSmiles=False) 308 | bank[i, 3:] = cal_features(j, mol)[3:] 309 | 310 | return bank 311 | 312 | 313 | def prepare_seed(solutions, seed): 314 | 315 | solutions = solutions[np.where(solutions[:, 2] == True)] # 사용 가능한 것이 True 316 | x = np.argsort(obj_fn(solutions)) 317 | solutions = x[::-1] 318 | 319 | # shuffled_index = np.random.permutation(len(true_solutions)) 320 | # true_solutions = true_solutions[shuffled_index] 321 | 322 | if len(solutions) > nseed: 323 | i = 0 324 | if len(seed) is 0: # First selection, 325 | bank[solutions[0], 2] = False 326 | seed.append(bank[solutions[0]]) 327 | i += 1 328 | 329 | if len(solutions) < len(seed): 330 | print( 331 | f"## Solutions is less than seeds / round {round_} / iter {niter}" 332 | ) 333 | raise ValueError 334 | 335 | while len(seed) < nseed: 336 | if len(solutions) == i + 1: 337 | print( 338 | f"## Solutions is empty state / unused > nseed / # of seed: {len(seed)} / round {round_} / iter {niter}" 339 | ) 340 | break 341 | # raise ValueError 342 | 343 | # dist = cal_array_dist(solutions[i, 1], seed) 344 | dist = np.zeros([len(seed)]) 345 | for j in range(len(seed)): 346 | fps1 = get_fp(bank[solutions[i], 1]) 347 | fps2 = get_fp(seed[j][1]) 348 | dist[j] = TanimotoSimilarity(fps1, fps2) 349 | if np.max(dist) > (1 - davg): 350 | i += 1 351 | # print(f'Dcut !!! {np.max(dist)}') 352 | continue 353 | else: 354 | bank[solutions[i], 2] = False 355 | seed.append(bank[solutions[i]]) 356 | i += 1 357 | else: 358 | for i in bank[solutions]: 359 | seed.append(i) 360 | bank[solutions[:], 2] = False 361 | rnd_number = np.random.permutation(len(bank)) 362 | i = 0 363 | while len(seed) <= nseed: 364 | if len(rnd_number) == i + 1: 365 | print( 366 | f"## Solutions is empty state / unused < nseed / # of seed: {len(seed)} / round {round_} / iter {niter}" 367 | ) 368 | break 369 | dist = np.zeros([len(seed)]) 370 | for j in range(len(seed)): 371 | fps1 = get_fp(bank[rnd_number[i], 1]) 372 | fps2 = get_fp(seed[j][1]) 373 | dist[j] = TanimotoSimilarity(fps1, fps2) 374 | if np.max(dist) > (1 - davg): 375 | i += 1 376 | # print(f'Dcut !!! {np.max(dist)}') 377 | continue 378 | else: 379 | seed.append(bank[rnd_number[i]]) 380 | i += 1 381 | 382 | print(f"@ prepare_seed finished!") 383 | return np.asarray(seed) 384 | 385 | 386 | def cut_smi(smi1, smi2, func, ring_bool): 387 | 388 | l_smi = None 389 | r_smi = None 390 | 391 | try: 392 | l_smi = func(smi1, "L", ring_bool, 4) 393 | r_smi = func(smi2, "R", ring_bool, 4) 394 | except (IndexError, ValueError): 395 | fail_f.write(f"{l_smi},{r_smi},piece\n") 396 | raise PermissionError 397 | 398 | return l_smi, r_smi 399 | 400 | 401 | def get_sliced_smiles(smi1, smi2, func, ring_bool): 402 | l_smi = None 403 | r_smi = None 404 | 405 | gate = 0 406 | while not (l_smi and r_smi): 407 | gate += 1 408 | if gate > 10: 409 | # fail_f.write(f"{l_smi},{r_smi},np\n") 410 | raise PermissionError 411 | try: 412 | l_smi, r_smi = cut_smi(smi1, smi2, func, ring_bool) 413 | except: 414 | pass 415 | return l_smi, r_smi 416 | 417 | 418 | def crossover_smiles(smi1, smi2, func, ring_bool): 419 | new_smi = None 420 | mol = None 421 | 422 | l_smi, r_smi = get_sliced_smiles(smi1, smi2, func, ring_bool) 423 | 424 | gate = 0 425 | while not mol: 426 | gate += 1 427 | if gate > 5: 428 | break 429 | try: 430 | new_smi = ModSMI.tight_rm_branch(l_smi, r_smi) 431 | except ValueError: 432 | continue 433 | mol = Chem.MolFromSmiles(new_smi) 434 | 435 | if not mol: 436 | l_smi, r_smi = get_sliced_smiles(smi2, smi1, func, ring_bool) 437 | 438 | gate = 0 439 | while not mol: 440 | gate += 1 441 | if gate > 5: 442 | break 443 | try: 444 | new_smi = ModSMI.tight_rm_branch(l_smi, r_smi) 445 | except ValueError: 446 | continue 447 | mol = Chem.MolFromSmiles(new_smi) 448 | 449 | return new_smi, mol 450 | 451 | 452 | def append_seed(_smi, _mol, update_solution): 453 | try: 454 | update_solution.append(cal_features(_smi, _mol)) 455 | return 1 456 | except Chem.rdchem.MolSanitizeException: 457 | print(f"#### QED error {new_smi}") 458 | return 0 459 | 460 | 461 | def prepare_child(seed, 462 | nCross1=20, 463 | nCross2=20, 464 | nReplace=10, 465 | nAdd=10, 466 | nRemove=10): 467 | update_solution = [] 468 | # print(seed[:, 0]) 469 | for i in range(seed.shape[0]): 470 | try: 471 | smi1 = seed[i, 0] 472 | except IndexError: 473 | print(f"seed_shape: {seed.shape} / #: {i}") 474 | raise Exception 475 | 476 | # CROSSOVER1 ### 477 | q = 0 478 | j = 0 479 | while j < nCross1: 480 | if q == nCross1 * 10: 481 | print(f"#### have problems in updating solutions @{smi1}") 482 | break 483 | try: 484 | w = np.random.randint(len(bank)) 485 | smi2 = bank[w, 0] 486 | 487 | if np.random.random() >= 0.5: 488 | new_smi, mol = crossover_smiles( 489 | smi1, smi2, ModSMI.prepare_rigid_crossover, True) 490 | else: 491 | new_smi, mol = crossover_smiles( 492 | smi2, smi1, ModSMI.prepare_rigid_crossover, True) 493 | 494 | if mol: 495 | j += append_seed(new_smi, mol, update_solution) 496 | bank[w, 2] = False 497 | 498 | except PermissionError: 499 | q += 1 500 | 501 | # CROSSOVER2 ### 502 | q = 0 503 | j = 0 504 | while j < nCross2: 505 | if q == nCross2 * 10: 506 | print(f"#### have problems in updating solutions @{smi1}") 507 | break 508 | try: 509 | w = np.random.randint(len(bank)) 510 | smi2 = bank[w, 0] 511 | 512 | if np.random.random() >= 0.5: 513 | new_smi, mol = crossover_smiles( 514 | smi1, smi2, ModSMI.prepare_rigid_crossover, False) 515 | else: 516 | new_smi, mol = crossover_smiles( 517 | smi2, smi1, ModSMI.prepare_rigid_crossover, False) 518 | 519 | if mol: 520 | j += append_seed(new_smi, mol, update_solution) 521 | bank[w, 2] = False 522 | 523 | except PermissionError: 524 | q += 1 525 | 526 | # REPLACE ### 527 | q = 0 528 | j = 0 529 | while j < nReplace: 530 | if q == nReplace * 10: 531 | print(f"#### have problems in updating solutions @{smi1}") 532 | break 533 | try: 534 | new_smi, mol = ModSMI.replace_atom(smi1) 535 | 536 | if mol: 537 | j += append_seed(new_smi, mol, update_solution) 538 | 539 | except (PermissionError, Chem.rdchem.KekulizeException): 540 | q += 1 541 | 542 | # print(f"### seed_len2: {len(update_solution)}") 543 | 544 | # ADD ### 545 | q = 0 546 | j = 0 547 | while j < nAdd: 548 | if q == nAdd * 10: 549 | print(f"#### have problems in updating solutions @{smi1}") 550 | break 551 | try: 552 | new_smi, mol = ModSMI.add_atom(smi1) 553 | 554 | if mol: 555 | j += append_seed(new_smi, mol, update_solution) 556 | 557 | except PermissionError: 558 | q += 1 559 | 560 | # print(f"### seed_len3: {len(update_solution)}") 561 | 562 | # REMOVE ### 563 | q = 0 564 | j = 0 565 | while j < nRemove: 566 | if q == nRemove * 10: 567 | print(f"#### have problems in updating solutions @{smi1}") 568 | break 569 | try: 570 | new_smi, mol = ModSMI.delete_atom(smi1) 571 | 572 | if mol: 573 | j += append_seed(new_smi, mol, update_solution) 574 | except PermissionError: 575 | q += 1 576 | 577 | return np.asarray(update_solution) 578 | 579 | 580 | def prepare_local_child(_smi, nReplace=10, nAdd=10, nRemove=10): 581 | _mol = Chem.MolFromSmiles(_smi) 582 | update_solution = [cal_features(_smi, _mol)] 583 | 584 | # REPLACE ### 585 | q = 0 586 | j = 0 587 | while j < nReplace: 588 | if q == nReplace * 10: 589 | print(f"#### have problems in updating solutions @{_smi}") 590 | break 591 | try: 592 | new_smi, mol = ModSMI.replace_atom(_smi) 593 | if mol: 594 | j += append_seed(new_smi, mol, update_solution) 595 | except (PermissionError, Chem.rdchem.KekulizeException): 596 | q += 1 597 | 598 | # print(f"### seed_len2: {len(update_solution)}") 599 | 600 | # ADD ### 601 | q = 0 602 | j = 0 603 | while j < nAdd: 604 | if q == nAdd * 10: 605 | print(f"#### have problems in updating solutions @{_smi}") 606 | break 607 | try: 608 | new_smi, mol = ModSMI.add_atom(_smi) 609 | if mol: 610 | j += append_seed(new_smi, mol, update_solution) 611 | except PermissionError: 612 | q += 1 613 | 614 | # print(f"### seed_len3: {len(update_solution)}") 615 | 616 | # REMOVE ### 617 | q = 0 618 | j = 0 619 | while j < nRemove: 620 | if q == nRemove * 10: 621 | print(f"#### have problems in updating solutions @{_smi}") 622 | break 623 | try: 624 | new_smi, mol = ModSMI.delete_atom(_smi) 625 | if mol: 626 | j += append_seed(new_smi, mol, update_solution) 627 | except PermissionError: 628 | q += 1 629 | 630 | return np.asarray(update_solution) 631 | 632 | 633 | def update_bank(child_solutions, local_opt=False): 634 | cnt_replace = 0 635 | bank_min = np.min(obj_fn(bank)) 636 | child_solutions = child_solutions[obj_fn(child_solutions) > bank_min] 637 | 638 | if len(child_solutions) == 0: 639 | raise PermissionError("child solutions 가 없습니다 !") 640 | 641 | for i in range(len(child_solutions)): 642 | if local_opt: 643 | local_solutions = prepare_local_child(child_solutions[i, 0]) 644 | x = np.argmax(obj_fn(local_solutions)) 645 | fps1 = get_fp(local_solutions[x, 1]) 646 | else: 647 | fps1 = get_fp(child_solutions[i, 1]) 648 | 649 | max_similarity = 0 650 | max_n = None 651 | for _ in range(len(bank)): 652 | fps2 = get_fp(bank[_, 1]) 653 | dist = TanimotoSimilarity(fps1, fps2) 654 | if dist > max_similarity: 655 | max_similarity = dist 656 | max_n = _ 657 | 658 | if local_opt: 659 | if (1 - max_similarity) < dcut: 660 | if obj_fn(local_solutions[x:x + 1]) > obj_fn( 661 | bank[max_n:max_n + 1]): 662 | bank[max_n] = local_solutions[x:x + 1] 663 | cnt_replace += 1 664 | else: 665 | _min = np.argmin(obj_fn(bank)) 666 | if (max_similarity < 0.98) and (obj_fn(bank[_min:_min + 1]) < 667 | final_avg.mean()): 668 | if obj_fn(local_solutions[x:x + 1]) > obj_fn( 669 | bank[_min:_min + 1]): 670 | bank[_min] = local_solutions[x:x + 1] 671 | cnt_replace += 1 672 | else: 673 | if (1 - max_similarity) < dcut: 674 | if obj_fn(child_solutions[i:i + 1]) > obj_fn( 675 | bank[max_n:max_n + 1]): 676 | bank[max_n] = child_solutions[i] 677 | cnt_replace += 1 678 | else: 679 | _min = np.argmin(obj_fn(bank)) 680 | if (max_similarity < 0.98) and (obj_fn(bank[_min:_min + 1]) < 681 | final_avg.mean()): 682 | if obj_fn(child_solutions[i:i + 1]) > obj_fn( 683 | bank[_min:_min + 1]): 684 | bank[_min] = child_solutions[i] 685 | cnt_replace += 1 686 | 687 | return cnt_replace, len(child_solutions) 688 | 689 | 690 | if __name__ == "__main__": 691 | 692 | target_value = 3 693 | target_round = args.convergent_round 694 | 695 | R_d = 10**(np.log10(2 / target_value) / int(target_round)) 696 | 697 | nbank = args.bank_size # number of bank conformations 698 | nseed = args.seed_size # number of seeds(mating) per iteration 699 | max_repeat = args.max_round 700 | 701 | total_time = ChkTime() 702 | chk_load = ChkTime() 703 | 704 | bank = init_bank( 705 | args.input, 706 | nbank, 707 | rseed=args.random_seed, 708 | ) # zinc 709 | 710 | chk_load = chk_load.get() 711 | 712 | first_bank = bank 713 | 714 | origin_avg = obj_fn(bank) 715 | 716 | plot_list = [] 717 | 718 | fail_f = open(f"fail_smiles.txt", "w") 719 | 720 | chk_calc = ChkTime() 721 | 722 | if nbank > 600: 723 | davg = cal_rnd_avg_dist(first_bank) 724 | else: 725 | davg = cal_avg_dist(first_bank) 726 | 727 | davg = 1 - davg 728 | davg = davg * args.dist_coef 729 | dcut = davg / 2 730 | 731 | final_avg = origin_avg 732 | 733 | chk_calc = chk_calc.get() 734 | 735 | with open(f"iteration.log", "w") as log_f2: 736 | log_f2.write(f"load_time: {chk_load:.3f} min\n") 737 | log_f2.write(f"dist_time: {chk_calc:.1f} min\n") 738 | log_f2.write( 739 | f"round iter unused time_seed time_child time_update n_replace n_eval\n" 740 | ) 741 | 742 | with open(f"message.log", "w") as log_f: 743 | log_f.write(f"nbank: {nbank}\n") 744 | log_f.write(f"nseed: {nseed}\n") 745 | log_f.write(f"max_repeat: {max_repeat}\n") 746 | log_f.write(f"R_d: {R_d:.6f} (convergent_round: {target_round})\n") 747 | log_f.write(f"D_avg: {davg:.3f} (similarity: {1-davg:.3f})\n") 748 | tmp_str = "" 749 | for i, j in enumerate(column_name[1:-1]): 750 | tmp_str += f"{j}: {first_bank[:, i+3].mean():.3f}, " 751 | log_f.write(f"init_bank_avg - {tmp_str[:-2]}\n") 752 | log_f.write( 753 | f"round dcut n_iter obj_avg obj_min obj_max n_replace min/round\n" 754 | ) 755 | 756 | save_bank = np.empty([max_repeat, bank.shape[0], bank.shape[1] - 1], 757 | dtype=object) 758 | 759 | for round_ in range(max_repeat): 760 | if (round_ != 0) and (dcut > davg / 3): 761 | dcut *= R_d 762 | 763 | timechk = time.time() 764 | 765 | # print(f'dcut: {dcut}, davg: {davg}') 766 | niter = 0 767 | n_replace = 0 768 | iter_gate = True 769 | while iter_gate: 770 | seed = [] 771 | # log_f.write(f'## SEED #### @ {np.count_nonzero(bank[:, 2] == True)} #############\n') 772 | time_seed = ChkTime() 773 | seed = prepare_seed(bank, seed) 774 | time_seed = time_seed.get() 775 | # log_f.write(f'## SEED #### @ {np.count_nonzero(bank[:, 2] == True)} #### AFTER ##\n') 776 | 777 | # log_f.write(f'## CHILD ### @ {np.count_nonzero(bank[:, 2] == True)} #############\n') 778 | time_child = ChkTime() 779 | child_solutions = prepare_child(seed) 780 | shuffled_index_ = np.random.permutation( 781 | child_solutions.shape[0]) # @4 에서 추가 됨. 782 | child_solutions = child_solutions[shuffled_index_] 783 | time_child = time_child.get() 784 | # log_f.write(f'## CHILD ### @ {np.count_nonzero(bank[:, 2] == True)} #### AFTER ##\n') 785 | 786 | time_update = ChkTime() 787 | try: 788 | # log_f.write(f'## BANK #### @ {np.count_nonzero(bank[:, 2] == True)} #############\n') 789 | # n_replace += update_bank(child_solutions, True) # local update 790 | _n_replace, n_eval = update_bank( 791 | child_solutions) # non-local update 792 | n_replace += _n_replace 793 | # log_f.write(f'## BANK #### @ {np.count_nonzero(bank[:, 2] == True)} #### AFTER ##\n') 794 | except PermissionError: 795 | break 796 | time_update = time_update.get() 797 | niter += 1 798 | 799 | if np.count_nonzero(bank[:, 2] == True) < (nbank - nseed * 0.9): 800 | iter_gate = False 801 | with open(f"iteration.log", "a") as log_f2: 802 | log_f2.write( 803 | f"{round_:>4} {niter:4} {np.count_nonzero(bank[:, 2] == True):>6} {time_seed:6.1f}" 804 | f" {time_child:6.1f} {time_update:6.1f} {n_replace:7} {n_eval}\n" 805 | ) 806 | 807 | final_avg = obj_fn(bank) 808 | 809 | with open(f"message.log", "a") as log_f: 810 | log_f.write( 811 | f"{round_:>4} {dcut:4.3f} {niter:3} {final_avg.mean():6.3f} {final_avg.min():6.3f} " 812 | f"{final_avg.max():6.3f} {n_replace:7} {(time.time() - timechk)/60:8.2f}\n" 813 | ) 814 | 815 | bank[:, 2] = True # reset to unused solutions 816 | 817 | plot_list.append(final_avg.mean()) 818 | tmp_bank = np.empty([bank.shape[0], 2 + nfeatures], dtype=object) 819 | tmp_bank[:, 0] = bank[:, 0] 820 | tmp_bank[:, 1:-1] = bank[:, 3:] 821 | tmp_bank[:, -1] = final_avg 822 | tmp_bank[:, 1:] = tmp_bank[:, 1:].astype(np.float16) 823 | tmp = np.argsort(tmp_bank[:, -1]) 824 | save_bank[round_] = tmp_bank[tmp[::-1]] 825 | 826 | final_bank = np.empty([bank.shape[0], 2 + nfeatures], dtype=object) 827 | final_bank[:, 0] = bank[:, 0] 828 | final_bank[:, 1:-1] = bank[:, 3:] 829 | final_bank[:, -1] = final_avg 830 | final_bank[:, 1:] = final_bank[:, 1:].astype(np.float16) 831 | 832 | print(f"Total Cost Time: {total_time.get():.3f} min") 833 | 834 | np.save(f"list_bank_{R_d:.5f}_{args.coefficient:.3f}.npy", save_bank) 835 | save_smiles = pd.DataFrame(save_bank[:, :, 0]) 836 | save_smiles.to_csv(f"list_smiles_{R_d:.5f}_{args.coefficient:.3f}.csv", 837 | header=False, 838 | index=False) 839 | 840 | df = pd.DataFrame(final_bank, columns=column_name) 841 | df.to_csv(f"final_bank_{R_d:.5f}_{args.coefficient:.3f}.csv", index=False) 842 | 843 | # log_f.close() 844 | fail_f.close() 845 | 846 | plt.plot(plot_list) 847 | plt.tight_layout() 848 | plt.savefig("target_plot.png") 849 | -------------------------------------------------------------------------------- /bin/sample.csv: -------------------------------------------------------------------------------- 1 | SMILES 2 | Cc1cc(C(=O)N[C@H]2CCCN(Cc3ocnc3C)[C@H]2C)on1 3 | CCc1ccccc1CC(=O)N(CC)CCNC(=O)c1cc(C)co1 4 | Cc1nn(CC(F)(F)F)cc1C(=O)OC[C@@H]1CCCNC1=O 5 | Cc1cc(NC(=O)NCCCCN2CCC[C@@H](C)C2)ccc1OCC(F)(F)F 6 | COc1cc(OC)cc(-c2nnc(N3C[C@@H](C)[C@H](C)C3)n2Cc2ncnn2C(C)(C)C)c1 7 | Cc1cc(NC(=O)N[C@H](C)c2noc(-c3ccccc3)n2)ccc1N(C)C 8 | O=C(C1CC=CC1)N1CCO[C@]2(CCN(C(=O)[C@@H]3C[C@H]4CC[C@@H]3O4)C2)C1 9 | CC/C=C(/C)C(=O)N(C)CCNCc1ccc2c(c1)OCCO2 10 | COc1cc(C)c(CN(C)C(=O)C(=O)Nc2ccccc2-n2nccc2C)cc1OC 11 | C[C@@H]1CN(C(=O)c2noc3c2CCCCC3)C[C@H]1NC(=O)c1cncnc1 12 | COCc1cccc(CNC(=O)NCc2ccc(CN3CCC[C@H](C)C3)cc2)c1 13 | CSCC(=O)N1CCC[C@H]([C@H](C)NC(=O)CS(C)(=O)=O)C1 14 | Cc1ccn2c(CN3CCN(C(=O)[C@@](C)(O)c4ccccc4)CC3)c(C)nc2c1 15 | CO[C@@H](C)CS(=O)(=O)NCC1C(C)(C)C1(C)C 16 | C[C@@H]1CC(=O)CCN1C(F)(F)c1cc(Cl)nc(S)n1 17 | O=C(Nc1ccc2occc(=O)c2c1)N[C@@H]1CCCc2c[nH]nc21 18 | C[C@H](C(=O)NC1(CNC(=O)C2CCCC2)CCOCC1)c1ccco1 19 | C[C@H](C(=O)NC[C@H](C)N(C)Cc1ccc(CF)cc1)c1cccnc1 20 | CC(C)c1ocnc1CN[C@H]1CCN(C(=O)c2ccns2)[C@H]1C 21 | CCOC(=O)c1cc2cc(C(=O)N3CCC[C@@H](CC(C)(C)C(N)=O)C3)ccc2[nH]1 22 | CCC(CC)[C@H](C)C(=O)N[C@H]1[C@@H]2CN(C(=O)c3cscn3)C[C@@H]21 23 | C[C@@H](C(=O)N(C)Cc1cccc(F)c1)n1cc([C@H]2CCCC(=O)C2)nn1 24 | O=C(Nc1ccc(I)c(Cl)c1)N[C@H](C1CCC1)[C@H]1CCCO1 25 | CCOc1cc(N2CCOC(C)(C)C2)ccc1NC(=O)N1CCC[C@@H]1c1ccc(OC)cn1 26 | Cc1c(Cl)nc(CC(C)C)nc1N1CC(O)C1 27 | O=C(OCCOCCO)[C@H]1CCCN1c1ncccn1 28 | C[C@@H](NC(=O)CCCOc1ccccc1F)C(=O)NCCc1ccccc1 29 | CN(CCc1nccs1)C(=O)N(C)[C@H]1CCS(=O)(=O)C1 30 | Cn1c(=O)oc2cc(CN3CC[C@H]4CCCC[C@H]4C3)ccc21 31 | Cc1cc(-c2nnc(N3CCOC[C@H]3C)n2C2CC2)c2ccccc2n1 32 | CCC(=O)N1CCCCC[C@H](NC(=O)c2cc3cc(C)ccc3[nH]2)C1 33 | C[C@@H]1CCC[C@H]1CC(=O)N1CCC(NC(=O)c2ccc(F)cc2)CC1 34 | CC1(C)CCC[C@@H](CNC(=O)N[C@@H]2CCN(Cc3ccccc3)C2=O)C1 35 | Cc1cc(C(=O)NC[C@H](C[C@@H](C)O)c2ccccc2)ccc1Cl 36 | C[C@@H](F)CCN1CCC[C@H](CNC(=O)CN2CCOCC2=O)C1 37 | CS(=O)(=O)Cc1cccc(C(=O)NCC(=O)OCc2ccccc2)c1 38 | CC[C@@H](NC(=O)NC[C@@](O)(c1cccc(C(F)(F)F)c1)C(F)(F)F)c1ccccc1 39 | Cn1cnnc1CN1CC[C@]2(NC(=O)C[C@H]3CCOC3)CCC[C@H]12 40 | CC[C@H](CNC(=O)c1c(C)nn(C)c1C)NC(=O)CCCF 41 | COC(=O)c1cc(NC(=O)CCc2ccc([C@H]3C[C@@H]3C)o2)cc(F)c1Cl 42 | CCCC(=O)NCC(=O)NCCCCCCNCC1CC(C)(C)C1 43 | Cn1c(C2CCC2)nnc1N1CCN(C(=O)Cc2c[nH]c3ccccc23)CC1 44 | CCCC[C@H](CC)C(=O)N[C@@H](C)C1CN(C(=O)Cc2cnn(C)c2)C1 45 | Cc1cc(C)n(Cc2nnc(N3CCC[C@@H](C(F)(F)F)C3)n2C[C@@H]2CCCOC2)n1 46 | COC(=O)c1cc(S(=O)(=O)N2C[C@@H](n3ccnc3)Cc3ccccc32)c(F)cc1F 47 | CCN(C(=O)CCCC1CC1)[C@@H]1CCN(C(=O)[C@H](OC)C2CC2)C1 48 | O=C(/C=C/c1ccc(-c2ccccc2)o1)NC(=S)Nc1nc(-c2ccc(Br)cc2)cs1 49 | CCS(=O)(=O)N1CCC[C@@H](C(=O)N[C@H](C)c2cnn(-c3ccc(F)cc3)c2C)C1 50 | Cc1cccc(CN2CC[C@H]3C[C@@H](c4ccnc(C(C)C)n4)O[C@@H]3C2)c1F 51 | COc1cccc(NC(=O)Nc2ccc(Cl)c(S(C)(=O)=O)c2)c1 52 | CCN(CCOC)C(=O)N[C@@H](c1ccc(Cl)cc1)[C@@H]1CN(C)CCO1 53 | COC(=O)CN1CCO[C@@H]2C[C@H](N(C)C)CC[C@@H]21 54 | C[C@H]1CN(C(=O)[C@H]2CC23CN(C(=O)c2ccccc2)C3)C[C@@H](C)O1 55 | CC(C)(C)C1CCC(=Cc2nnc(-c3ccccn3)o2)CC1 56 | CN(C(=O)c1ccc2c(c1)COC2)C1CC(NCC2=CCCCC2)C1 57 | C[C@@H]1C[C@H]1CN[C@H]1CCOC2(CCC2)C1 58 | CCc1ccc(CN(C)C(=O)N=c2cco[nH]2)cc1 59 | CCC(CC)C(=O)N1CC2(CCCN(Cc3cnn(CC)n3)C2)C1 60 | C[S@](=O)[C@@H]1CCC[C@@H](NC(=O)Nc2ccccc2C(C)(F)F)C1 61 | CCN(CC)[C@H](CNC(=O)N1CC[C@@H](C)[S@](=O)CC1)c1ccco1 62 | O=C(Cc1cccc(F)c1F)N1CC[C@@H](CNCC2CCCC2)C1 63 | CC(C)CN1CCO[C@H](Cn2c(C(C)C)nnc2N2CCC[C@H](CN(C)S(C)(=O)=O)C2)C1 64 | CNC(=O)[C@H]1CCCN(c2nnc(C(=O)Nc3ccccn3)n2C[C@@H]2CCCCC(F)(F)C2)C1 65 | COc1cccc([C@H](C)N[C@@H]2CCN(c3cccc(Cl)c3)C2=O)c1 66 | COc1ncc(Cl)c(N2CC[C@H](NC(=O)[C@H]3OCC[C@H]3C)C2)n1 67 | Cc1noc(C)c1CC(=O)NC[C@H](Nc1cncc(Cl)n1)C1CC1 68 | O=C(CCC(=O)N(CCO)CC(F)(F)F)c1ccn(S(=O)(=O)c2ccccc2)c1 69 | CCn1nc(C)c(C(=O)CN2C(=O)N[C@]3(C[C@@H](C)C[C@@H](C)C3)C2=O)n1 70 | O=C(c1csc([C@H]2CCCO2)n1)N1CCc2nnc(N3CCCC3)cc2C1 71 | NC[C@@H]1CC[C@@H](NC(=O)C[C@H]2OCCc3ccccc32)CC1 72 | CN1CCC[C@H]2CN(Cc3ccc(Br)cc3Cl)CC[C@H]21 73 | Cc1cc(NC(=O)CNC(=O)c2c(O)cnc3c(F)cccc23)ccc1Br 74 | Cc1cccc(C)c1CN(C)[C@@H](C)CNC(=O)[C@@H]1CCCN1C(C)C 75 | C[C@@H](Cc1ccc(O)cc1)NC[C@@]1(C)C[C@H]2CC[C@H]1O2 76 | N[C@@H]1CCO[C@@H](C2CCN(CC(=O)Nc3ccccc3Br)CC2)C1 77 | CCc1nnc(N2CCN3C(=O)OC[C@@]3(C)C2)n1Cc1ccc(OC(F)(F)F)cc1 78 | C[C@H](c1nc2ccccc2n1C(F)F)N1CC(=O)N(CC(F)(F)F)C1 79 | CN1CC[C@H](NCC[C@H]2CCN(C(=O)C3CCCC3)C2)C1=O 80 | COCCCN(C)c1nnc(CC(C)(C)C)n1Cc1ccc(C)cc1SC 81 | CCc1cc(NC(=O)N[C@@H](C)CN2CCCC2=O)ccc1F 82 | O=C(CCc1ncc(-c2ccccc2F)o1)N1C[C@H]2CC[C@H]1[C@@H](CO)C2 83 | Cc1nc(=NC(=O)C2(F)CCCCC2)n(-c2ccc(F)cc2C)[nH]1 84 | C[C@H]1C[C@@H](C)CN(CCCNc2ccc(S(=O)(=O)C(F)(F)F)cc2)C1 85 | CCOC(=O)[C@H]1C(=O)CCCN1Cc1cccc(-c2ccncc2)c1 86 | COc1ccc(/C=C(\C)C(=O)N2CC3(CCCC3)OC[C@@H]2C)cc1F 87 | CCCc1nsc(NCCN(C)C(=O)c2cnn3ncccc23)n1 88 | Cc1cnoc1C(=O)NCC1(NCc2scnc2C)CC1 89 | CC[C@H](C)C(=O)NC[C@@H](CC)NC(=O)c1cccc2nc(O)[nH]c12 90 | NC(=O)Cn1cc(CNC[C@@H](O)c2ccc(Cl)cc2)nn1 91 | CNS(=O)(=O)N1CCN(C(=O)NC2CCN(C[C@H]3CCCO3)CC2)CC1 92 | COC(=O)c1ccsc1NC(=O)C(=O)NC1(C)CCCC1 93 | CC(C)c1nccn1CC(=O)Nc1ccc(F)cc1O 94 | O=C(CCc1ccccn1)N1CCC(N[C@H]2CCc3ccccc32)CC1 95 | CC[C@@]1(C)CN(c2nnc(-c3ccc(Br)s3)n2C[C@](C)(OC)C2CC2)CCO1 96 | COc1cc(C)c(Br)cc1NC(=O)C(=O)N1CC[C@@H](C(C)(C)C)[C@H](O)C1 97 | Cc1ccc(C[C@H](C)NC(=O)C(=O)Nc2ccc(-n3cnc4ccccc43)nc2)s1 98 | CC1(NC(=O)CSCc2ccc(C(C)(C)C)cc2)CCC1 99 | C[C@@H]1CN(Cc2ccc(CNC(=O)C3CC(OCc4ccccc4)C3)cc2)C[C@@H](C)O1 100 | CC[C@H](C)NC(=O)[C@H](C)NC(=O)Cc1nnc(C)o1 101 | O=C(C[C@@H]1C[C@H]1c1ccccc1)N[C@@H]1CCCN(C(=O)c2cc[nH]c2)C1 102 | CC[C@](C)(OC)C(=O)Nc1cccc(NC(=O)C(N)=O)c1 103 | Cn1cc(N2C[C@@H](C(=O)Nc3cc(Br)ccc3C3=NCCO3)CC2=O)cn1 104 | CC(C)(C)OC(=O)N1CCOC[C@H]1CC(=O)NCCCCN1CCC[C@H]1CO 105 | CCC[C@H](C)NC(=O)[C@H]1CCCN(C(=O)NC[C@@H](C)COCc2ccccc2)C1 106 | CC(C)C[C@H]1CCCCN1C(=O)c1cnc2ncc(Br)cc2c1 107 | CCOC[C@H]1CCCCN1C(=O)/C=C\c1ccc(O)c(O)c1 108 | CCC1(CC)CN(C(=O)C(=O)Nc2cccc(-c3nnnn3C3CC3)c2)CC[S@@]1=O 109 | Cc1cc(-c2nnc(N3CCN([C@H]4CCOC4)CC3)n2C[C@H]2CCOC2)co1 110 | Cc1nonc1CC(=O)NCCN(C)C(=O)[C@H](C)c1ccccc1F 111 | CN(C)CCCCNC[C@H](O)COc1ccc(Cl)cc1Cl 112 | C[C@H](CNC(=O)C[C@@H]1CCCO1)NC(=O)CN1C(=O)CN(C)C1=O 113 | Cc1cccc(=O)n1C[C@](C)(O)C(=O)N1CCN(C[C@H]2CCCO2)CC1 114 | C[C@H](Sc1nc2cnccc2s1)C(=O)N(C)Cc1c(F)cccc1Cl 115 | Cc1conc1C(=O)N1CC[C@@H]2[C@@H]1CCCN2C(=O)[C@@H]1CNC(=O)N1 116 | Cn1ncc(NC(=O)Cc2ccc(C3CCC3)cc2)c1-c1ccccc1 117 | C[C@H](CCO)NC(=O)Nc1ccccc1C(=O)O 118 | C[C@H](NC(=O)c1csc(-c2ccc([N+](=O)[O-])cc2)n1)c1nc(Cc2ccccc2)no1 119 | COc1ccc(-n2c(C)nnc2SCC(=O)N[C@H](C)c2nnnn2C2CC2)cc1 120 | COCCN1CCC2(CC1)C[C@@H]2NC(=O)C[C@H](C)n1nc(C)cc1C 121 | C[C@H](C(=O)N1CC=C(CNC(=O)C2CCC(O)CC2)CC1)C1CCC1 122 | CCC1(C(=O)N(C)C[C@H]2CCN2C(=O)c2cncs2)CCC1 123 | CCCNC(=O)c1ccc(N2CC[C@H](Oc3ccncc3)C2)nc1 124 | C[C@H](C(=O)OC1CCN(C(=O)c2ccccc2F)CC1)N1C(=O)[C@H]2CCCC[C@@H]2C1=O 125 | C[C@H](C(=O)OC[C@@H]1COCCN1C(=O)OC(C)(C)C)n1ccc2ccccc2c1=O 126 | CCCn1cc(C(=O)N[C@@H]2CCN(CC3CCOCC3)C2)cn1 127 | CNS(=O)(=O)c1ccc(Cl)c(-c2nc(C3(c4cc(F)ccc4C)CC3)no2)c1 128 | CC1(C)CN(C(=O)[C@H]2CC(=O)N(Cc3ccccc3)C2)CCN1CCO 129 | Cc1ccccc1CN1CCCN(C(=O)CN2CCN(c3ncccc3Cl)CC2)CC1 130 | CCS[C@@H]1CC[C@H](N(C)c2nnc([C@@H]3CCCN3C(=O)OC(C)(C)C)n2C[C@H](OC)C2CC2)C1 131 | CCC[C@H](NC(=O)NCC1(C)Cc2ccccc2C1)C(C)(C)C 132 | COc1cccc(/C=N/C[C@]2(O)CCCc3ccccc32)c1O 133 | CN(C[C@@H]1CCC[C@@H]1O)C(=O)C(=O)N[C@@H]1CC=CCC1 134 | CC[C@H]1CCCCN1CCNC(=O)/C=C\c1ccccc1F 135 | CC[C@@H](CC(F)F)C(=O)NCCNC(=O)c1cc(C(N)=O)c[nH]1 136 | CCOc1ccc(-c2nnc(N3CCCC[C@@H](SC)C3)n2CC2(C)CCOCC2)cc1OC 137 | CCOC(=O)COc1ccc(CNC[C@@H]2CC(c3ccc(OC)c(C)c3)=NO2)cc1 138 | CCOC(=O)CC(C)(C)CCSc1nnc([C@H]2COc3ccccc3O2)o1 139 | CCc1cc(C(=O)NCCN(C)C(=O)CN(C)C(=O)C(C)C)no1 140 | C[C@H](CNC(=O)c1ccn(CCN(C)C)n1)NC(=O)[C@H]1C[C@H]1C(N)=O 141 | C[C@H]1CCN(C(=O)C(=O)N2CC3(CCN(C(=O)[C@@H]4CC4(C)C)C3)C2)C1 142 | CC(C)(C)OC(=O)c1cc(C(=O)N2CC[C@@H](c3ncc(C(=O)O)s3)C2)[nH]n1 143 | CCC/C=C/CCN1CC(N2CCN(C(=O)[C@H]3CC3(F)F)CC2)C1 144 | COCCO[C@]12CCC[C@@]1(NC(=O)NC1CCN(C(C)(C)C)CC1)CCO2 145 | C[C@@H]1OCCN(C(=O)[C@](C)(O)CN2C(=O)NC3(CCCC3)C2=O)[C@H]1C 146 | CCN1C[C@@H](C(=O)NC[C@H](O)CNc2cccc(F)c2-c2nn[nH]n2)CC1=O 147 | N#Cc1ccc(OCC(=O)N2CC[C@H](C(=O)O)c3ccccc32)cc1 148 | CC[C@@H](SC)C(=O)N(C)C[C@@H](O)CN(C)CC1CCCCCC1 149 | CC[C@H](C)c1nnc(N2CC(C)(C)O[C@@]3(C[C@@H]4CC[C@H]3C4)C2)n1C[C@](C)(O)CC 150 | CCc1nc(C)c(CNC(=O)N(C)CCCC(=O)OC(C)(C)C)o1 151 | O=C(NCC1CN(C[C@@H]2CCCS(=O)(=O)C2)C1)C1(F)CCCC1 152 | CN[C@H](C)c1cn([C@@H](C)c2nc3ccccc3n2C(F)F)nn1 153 | C[C@@H]1CN(C(=O)NC[C@@H]2CC3(CCOCC3)CO2)CC[C@@H]1C(=O)O 154 | COc1ccc(OC(F)(F)F)cc1O[C@@H]1CNCC1(F)F 155 | Cc1ccc(CN(C)c2nnc([C@H]3CCCO3)n2C[C@H](C)Oc2ccc(Cl)cc2)o1 156 | C[C@@H](CN[C@@H]1COCC1(C)C)CC1CCOCC1 157 | Cc1cc(C(=O)O[C@@H](C)C(=O)c2ccc(OC(F)F)cc2)nc2ccccc12 158 | CCN(CC(=O)NCc1ccc(F)cc1)C(=O)c1ccc(CN2CCSCC2)cc1 159 | CCOC(=O)c1ccc(N2CC(NC(=O)NCC(C)(C)[C@@H]3COCC34OCCO4)C2)nc1 160 | C[C@@H]1CC[C@@H](NC(=O)c2cncn2C)CN1C(=O)c1cccs1 161 | C[C@H](C(=O)N1CCC[C@H]1c1nc(-c2ccccc2Br)no1)[C@H]1CCC(=O)N1 162 | CCC[C@@H](NC(=O)c1cn2c(C)cccc2n1)c1ccc(F)cc1F 163 | CCn1cc(Cl)cc1C(=O)N[C@@H]1CN(Cc2ccnn2C)C[C@@H]1O 164 | CSc1cc(Cl)ccc1NC(=O)C(=O)N1CC(C)(C)[C@@H]1[C@H]1CCCO1 165 | CC(C)[C@H](CNC(=O)Cc1ccc[nH]1)NC(=O)[C@H]1CCCC12CC2 166 | CCN(CC)C(=O)c1ccc(Cn2c([C@H]3CCCCO3)nnc2N2CC(=O)N(C)[C@@H](C)C2)cc1 167 | O=C(CN1CCSC1=O)N1CCC[C@@](O)(C(F)(F)F)CC1 168 | CCN(CC)C1CCN(c2nnc(-c3cccc(C)n3)n2C[C@@]2(C)COCCO2)CC1 169 | CC(C)(C)OC[C@H](N)C(=O)NCC(=O)N[C@@H](c1ccnc(F)c1)C1CC1 170 | CCc1ncc(S(=O)(=O)Nc2ccc(N3CCSCC3)cc2)s1 171 | CC(C)[C@@]1(CO)CCCN(C(=O)C(=O)Nc2cnn(CC(=O)N3C[C@H](C)O[C@H](C)C3)c2)C1 172 | O=C(Nc1ccc(F)nc1)C(=O)N1CCO[C@H](c2cccc(Br)c2)C1 173 | O=C(NCc1ccncc1)[C@H]1C[C@]12CCCNC2 174 | CCCNS(=O)(=O)c1ccc(S(=O)(=O)NCC2(COC)CCCC2)cc1 175 | COc1cccc(CN(CCN(C)C)C(=O)Nc2cnnn2-c2ccccc2)c1 176 | Cc1cccc(C(=O)NCCn2c([C@H]3CCC(=O)N3)nnc2N2CC=C(C(C)(C)C)CC2)c1 177 | C[C@H]1CN(C)c2ccccc2CN1C(=O)Nc1ncc(C2CCOCC2)s1 178 | CCc1c(C(=O)NC2CC(CNC(=O)[C@H]3CCCCO3)C2)ccn1C 179 | C[C@](O)(CN1C(=O)NC2(CCCC2)C1=O)C(=O)N1CCC[C@@]1(C)CCCO 180 | CCC[C@H](C)OC(=O)c1oc2ccccc2c1CO 181 | C[C@H]1CN(CC(=O)N2CCC[C@@H](C)C2)C[C@@H](C)O1 182 | O=C(NCC1[C@H]2CN(c3ccnc(-c4nn[nH]n4)n3)C[C@H]12)c1cccc(F)c1 183 | COc1cc(NC(=O)COC(=O)c2c(C)c3ccccc3oc2=O)c(OC)cc1Cl 184 | C[C@H]1CN(Cc2cc(C3CN(C(=O)OC(C)(C)C)C3)no2)CC[S@](=O)C1 185 | CCOC(=O)c1c(NC(=O)C(=O)NC[C@H](C)N2CCN(CC)CC2)sc(C)c1CC 186 | C[C@@H](CCNC(=O)[C@@H]1C[C@H]1C)NC(=O)C1(C)C(C)(C)C1(C)C 187 | C[C@](CO)(NC(=O)c1nn(-c2ccc(F)cc2F)cc1O)C1CCCCC1 188 | O=C(N[C@@H]1CCCN(Cc2ccc(F)cc2Cl)C1)N1CCCC(F)(F)C1 189 | O=C(CCNS(=O)(=O)c1cccc(Cl)c1)N[C@H]1CCc2ccc(F)cc21 190 | O=C(N[C@@H]1CCCC[C@H]1NCc1noc2c1CCCC2)C1(F)CCCC1 191 | O=C(N[C@@H]1CN(C(=O)c2occc2Br)C[C@@H]1O)[C@H]1CC12CC2 192 | CCCCN[C@H](C)[C@H]1CCCN(C(=O)c2cc(CC)nnc2C)C1 193 | C[C@@H](N[C@H]1CCN(C(=O)CCCS(N)(=O)=O)C1)C(=O)NC1CC1 194 | C[C@H](CNC(=O)C(C)(C)Cc1ccccc1)CNC(=O)[C@@]12CCC[C@@H]1C2 195 | NC(=O)c1ccc(C(=O)NCC2CN(C(=O)[C@H]3CCNC3=O)C2)nc1 196 | CC(C)Cc1nnc(NC(=O)CN2CC[C@@H](C)[C@H](CO)C2)s1 197 | Cc1nc(CN2CCO[C@@H]3CN(C(=O)Nc4ccc(Oc5ccccc5)cc4)CC[C@@H]3C2)cs1 198 | CCOC(=O)N[C@@H](CNC(=O)CSc1nccn1-c1ccccc1C)CC(C)C 199 | COCc1ccc(C(=O)NC[C@H](C)N(C)[C@@H]2CCCN(C)C2=O)o1 200 | Cn1nccc1[C@H]1OCCC[C@H]1CNc1cncc(Cl)c1 201 | O=C(Nc1ccc(CCN2CCCC2)cc1)c1ccc(O)cc1O 202 | Cc1ccc(Cn2c(Cc3csc(C)n3)nnc2N2CC[C@@H](S(C)(=O)=O)C2)c(C)c1 203 | Cc1cc(N2CCN(C(=O)c3cccc(OCC(C)C)c3)CC2)nc(C(C)C)n1 204 | C[C@H](NC(=O)Cn1cnnn1)[C@@H](C)NC(=O)c1cc(F)ccc1F 205 | Cc1ccc([N+](=O)[O-])cc1[C@H](C)Sc1nnc([C@H]2CCS(=O)(=O)C2)n1C 206 | CC/C=C/CCN[C@@H]1CN(C(=O)CNC(=O)c2ccccn2)C[C@@H]1C 207 | N[C@@H](Cc1ccccc1)C[C@H](O)[C@H](Cc1ccccc1)Nc1ccc(OCC2CCNCC2)cn1 208 | Cc1ccc2c(c1)CC[C@@H](C(=O)Nc1ccc(Cl)c(F)c1)O2 209 | Cc1ncccc1CN1CCC[C@@H]1CNC(=O)[C@H]1CCOC1 210 | COCCN1CCC(NC(=O)C(=O)N2CCC(Cc3nccn3C)CC2)CC1 211 | CCOc1ccc(O[C@H](C)c2nnc(N(C)C3CCC3)n2C[C@]2(O)CCO[C@@H]2C)cc1 212 | CO[C@H](CC(C)C)C(=O)N1[C@H]2CC[C@H]1CC(NC(=O)C1CCC1)C2 213 | O=C(O)COc1ccc(S(=O)(=O)Nc2cc3ccccc3cc2O)cc1 214 | C[C@H]1CN(Cc2nc3ccc(Br)cc3n2C)C[C@@]1(C)CO 215 | CCN(CC)CCCNC(=S)N1CC[C@H](C(=O)OC)[C@@H]1c1ccccc1 216 | CC(C)Oc1ncccc1CNC(=O)Nc1ncc(C2CCOCC2)s1 217 | Cc1nnccc1C(=O)NC[C@@H](CO)N[C@@H](C)c1nnnn1C1CC1 218 | C=Cc1ccc(C(=O)N2CCC[C@@](CO)(NCC=C(C)C)C2)cc1 219 | C[C@H](c1cccc(NC(=O)c2ccccc2)c1)N(C)C(=O)CSc1nncn1-c1ccccc1 220 | C[C@H](c1nc(-c2cccs2)no1)N1CCN(C(=O)COc2ccccc2O)CC1 221 | C[C@H](N/C=C1\C(=O)N(c2cccc(C(F)(F)F)c2)C(=O)c2ccccc21)C(=O)NCC(F)(F)F 222 | CC/C=C/Cn1c(Nc2cnn([C@H]3CC3(F)F)c2)nnc1-c1ccc(OC)c(OC)c1 223 | C[C@@H](Cc1ccccc1)C(=O)N1CC2(C[C@@H]2C(=O)NCC(=O)N(C)C)C1 224 | CCOC(=O)C[C@H](NC(=O)CCCc1ccc2c(c1)OCCCO2)C(F)(F)F 225 | CCOC(=O)c1ccn(-c2cccc(NC(=O)c3ccc4cc(OC)ccc4c3)c2)n1 226 | CCN(CCn1c(CC(C)(C)C)nnc1N(C)Cc1ccccc1F)C1CC1 227 | CCc1nsc(NC[C@H](C)NC(=O)[C@H](C)Cn2ccc(C)n2)n1 228 | C[C@@H]1CC[C@H](NC(=O)Nc2cnn(-c3cccc(C(F)(F)F)c3)c2)C1 229 | CCCNC(=O)[C@H](C)NC[C@H](C1CC1)N(C)C(=O)c1cnc(C)cn1 230 | CCC[C@H](NC(=O)N1CCC(n2ccc([N+](=O)[O-])n2)CC1)c1ccccn1 231 | COC(=O)c1c(NC(=O)[C@@H]2CCCc3ccc(OC)cc32)sc(C)c1C 232 | Cc1nc(-c2cccs2)ccc1C(=O)N[C@H]1CC(=O)N(c2cccc(C(F)(F)F)c2)C1 233 | CN(CCc1cccc([N+](=O)[O-])c1)c1nnc(C2CCCC2)n1CCCc1cnn(C)n1 234 | C[C@@H](CC(=O)N1CC[C@H](NC(=O)c2cn(C)cn2)[C@H]1C)n1cccc1 235 | C[C@H](C1CC1)n1cc(NC(=O)NCCCn2nc3n(c2=O)CCCC3)cn1 236 | O=C(NCCCN(CCCO)Cc1cccnc1)c1ccsn1 237 | CCc1ccc2c(c1)[C@H](NCc1cnc(OC)s1)CCO2 238 | COCn1ncc(C)c1CNc1ccc(OCCc2ccccc2)nc1 239 | CC[C@H](C(N)=O)N(C)[C@H](C)CNC(=O)C1(C)CC1 240 | CCOc1ccc([C@@H](C)NC(=O)Nc2cccc(C)c2S(C)(=O)=O)cc1OCC 241 | O=C(N[C@@H]1CN(C(=O)c2cocn2)C[C@@H]1O)C1CCCCCCC1 242 | CCC(CC)NC(=O)c1nnc(N(C)Cc2scnc2C)n1C[C@@H]1CC1(C)C 243 | CC(C)C(=O)N[C@@H]1CCCN(c2nnc([C@H]3CCOC3)n2CCSCc2ccccc2F)C1 244 | CC(C)=CCN1C[C@@H](O)[C@H](NC(=O)CCn2cccn2)C1 245 | CC(C)(C)SCCNC(=O)N1CCC[C@@H]1C(C)(C)O 246 | Cc1cnn(C)c1C(=O)N1CCCN(Cc2c(F)cccc2F)CC1 247 | COC(=O)NCC(=O)N1CC(O)(CNC(=O)[C@@H]2CC[C@H](OC)C2)C1 248 | COc1ccccc1CCN[C@H](C)Cc1cccc(Cl)c1 249 | Cc1nsc(N[C@H]2CN(C(=O)Cc3ccon3)C[C@@H]2C)c1-c1nn[nH]n1 250 | COc1nc(NCCc2ccsc2)ccc1-n1cnc(C)c1 251 | O=C(Cc1csc(-c2ccccc2)n1)NCCN1CCC1 252 | CCCc1nc(C)c(CN2CC[C@H](NC(=O)c3cnn(CC)n3)[C@H]2C)o1 253 | Cc1ccccc1[C@H]([C@H](C)NC(=O)N1CC=C[C@@H]1CO)N(C)C 254 | CCC[C@@H](N[C@@H]1CCCNC1)c1ccccc1 255 | CCc1ccccc1S(=O)(=O)N1CCC(C(=O)C(F)(F)F)CC1 256 | CCO[C@H](C)c1nc(CC(=O)N2CCC(C(=O)NCC(C)(C)CN(C)C)CC2)cs1 257 | Cc1ccccc1-c1nc(CNC[C@@H](C)NC(=O)COC(C)C)no1 258 | CCCNC(=O)c1ccc(NC(=O)N2CCNC(=O)[C@@H]2c2cccc(C)c2)cc1 259 | CC[C@@H](CC(F)(F)F)NC(=O)C(=O)Nc1c(C)cccc1Cl 260 | O=C1OCCN1CCC(=O)N1CC[C@@H]2C[C@@]21C(=O)NCCn1ccnn1 261 | C[C@@H](CNC(=O)c1coc(C(C)(C)C)n1)NC(=O)C[C@@H]1CC=CCC1 262 | C[C@H](F)CCN1C[C@H](O)[C@H](NC(=O)CCCn2ccnc2)C1 263 | Cc1cc(C)c(N2C[C@H](C(=O)Nc3cc(F)cc(F)c3)CC2=O)c(C)c1 264 | C[C@H]1CN(c2nnc(CC(C)(C)C)n2CC(=O)NCC(F)(F)F)C[C@@]2(CCOC2)O1 265 | C[C@@]1(O)C[C@@H](C(=O)N2CC3CC2(C(=O)NCc2ccco2)C3)C1 266 | Cc1cccc(Cl)c1NC(=S)NCc1cccnc1N1CCCC1 267 | Cc1cc(C(=O)OC[C@@H]2CCC3(CCCC3)O2)c2c(C)nn(C)c2n1 268 | CC(=O)N1CCN(c2ccc(NC(=O)C(=O)N[C@@H]3CO[C@@H](C)C3)cc2)CC1 269 | CN(C(=O)C=C1CCCCC1)C1CN(C(=O)[C@H]2CCNC(=O)CC2)C1 270 | Cc1cc(NC(=O)CNCCCNC(=O)c2ccncn2)no1 271 | C[C@@H](C[S@@](=O)Cc1coc(-c2ccc(F)c(F)c2)n1)C(C)(C)C 272 | CCOCc1ccc(NC(=O)[C@@H]2C[C@@]2(C(=O)O)c2ccccc2)cc1 273 | O=C(c1cccc(C(F)(F)F)c1)N1CC(c2ccc(F)cc2)C1 274 | CC(C)CC[C@H]1CCC[C@@H]1NC(=O)N1CCN(c2ccc(C(N)=O)cn2)CC1 275 | CCC[C@](C)(CC)C(=O)N(C)CCNC(=O)c1scnc1C 276 | CCc1cccc(C(=O)N2C[C@H](NCCC3CC3)C[C@@H]2C)n1 277 | CCC[C@@H]1CCCCN1C(=O)C(=O)Nc1ccc(S(=O)(=O)N2CCCC2)c(OC)c1 278 | CCC(CC)(CNS(=O)(=O)c1cc(OC)c(C(=O)O)cc1Cl)OC 279 | CC[C@@H](C)n1nc(NC(=O)C(=O)NC[C@@H](O)c2ccc(C(F)(F)F)cc2)cc1C 280 | Cc1cnccc1C(=O)NC[C@H](NC(=O)[C@@H]1[C@H]2COC[C@H]21)C(C)(C)C 281 | CO[C@H](C)CCC(=O)N[C@@H](C)[C@@H]1OCCc2sccc21 282 | COCCCn1nccc1CN1CCN(c2ccccc2Cl)CC1 283 | CN(C(=O)[C@H]1CC12CC2)C1CCC(NC(=O)Cn2ncnn2)CC1 284 | O=C(COCc1ccccc1)N1C[C@H]2CCN(Cc3ccc(F)cn3)C[C@H]21 285 | CCS(=O)(=O)NCc1nnc(N2CCC[C@@H](C(C)C)C2)n1CC(C)C 286 | Cc1cc(C)n(CC(=O)NCCC[C@@H](C)NC(=O)[C@H]2CC23CC3)n1 287 | CCn1ncc(C(=O)Nc2cc([C@@H]3C[C@H]3C)[nH]n2)c1C1CC1 288 | CCc1noc(-c2ccc(C)c(NC(=O)C(=O)N3CCc4ccccc4[C@@H]3C)c2)n1 289 | CCc1c(C(=O)NCC[C@H](C)NC(=O)[C@@H]2OC[C@@H]3CCC[C@@H]32)ccn1C 290 | C[C@@H](NCC[C@H]1CCCN(C(=O)C2CCC2)C1)C(=O)NC1CC1 291 | CC1(C)[C@H]2CC[C@@H](C2)[C@@H]1C(=O)NC1CCC2(CC1)NC(=O)NC2=O 292 | COc1ccc(/C=C/C(=O)NC[C@@H](C)SC)cc1 293 | CCCOc1ccc(-c2ccc([C@H]3CCCN3)cn2)cn1 294 | CC(C)c1ccc2c(c1)[C@@H](NC(=O)Nc1cccc3nccnc13)CCC2 295 | Cc1cc(NC(=O)C(=O)Nc2cn[nH]c2)ccc1OC(C)C 296 | CCCC[C@H](NC(N)=O)C(=O)N[C@@H]1CCCC[C@H]1Nc1ncc(F)cn1 297 | Cc1nc([C@H]2COCCN2C(=O)Cn2c(S)nnc2-c2cccs2)no1 298 | C/C=C(\C)C(=O)NCC1(SCC)CC1 299 | CCn1cc(C(=O)Nc2scnc2C)c2ccccc21 300 | Cc1cc(CC(=O)N2C[C@@H]3C[C@H]2CN3Cc2cc(C)n(C)n2)no1 301 | CS[C@H](C)C(=O)N1CC2(C[C@@H](NC(=O)C3(C)CC3)c3nccn32)C1 302 | C[C@@H]1CCCC[C@@H]1OCCNCc1cnc(C(F)(F)F)s1 303 | Cn1ccc(C(=O)N2C[C@H]3C[C@@H]4CN(C(=O)[C@@H]5C[C@@H]6O[C@H]5[C@H]5C[C@@H]65)C[C@@]4(C2)O3)n1 304 | COc1c(Nc2ccc(F)c3c2OCCC3=O)ccc(F)c1F 305 | Cc1ccc(F)cc1C(=O)N1CC[C@H](CNC(=O)c2cnon2)C1 306 | Cc1nc(-c2cccc(-c3noc(Cn4ccc(C(F)(F)F)n4)n3)c2)cs1 307 | CC[C@@H]1CCCN(C(C)(C)CNC(=O)C(=O)N[C@H]2CCO[C@H]2C2CC2)C1 308 | Cc1cc(-c2ccc(C(F)(F)F)c(Cl)c2)nc2[nH]cnc12 309 | COc1cccc(C[C@@H]2CCCN(S(=O)(=O)c3ncccc3OCc3ccccc3)C2)c1 310 | C[C@H](NC(=O)C(=O)NC[C@H]1C[C@@H](C)O[C@H]1C)c1nc2ccccc2n1C(F)F 311 | COC(=O)c1cnc(NC(=O)COCc2ccnc(OC)c2)c2ccccc12 312 | C[C@H](NC(=O)NCc1ccc(-c2nn[nH]n2)cn1)c1ccc2c(c1)CCCO2 313 | Cn1nc(CC(=O)N[C@H]2C[C@H]3C=C[C@H]2CC3)c2ccccc21 314 | O=C(Oc1cccc2ccccc12)[C@H]1CC12CCC2 315 | CC(=O)N1CC[C@]2(c3ccccc3)CCN(C(=O)c3ccc(C4CC4)cc3)C[C@@H]12 316 | O=C(CCCc1nccs1)NCc1cc2c(nc1O)CCC2 317 | CCN(CC)[C@H](Cn1c(Cc2ccncc2)nnc1N1CCC[C@@H](C(N)=O)C1)c1ccsc1 318 | C[C@H](C(=O)N1CCOC[C@@H]1C1CC1)[C@H]1CCC(=O)N1 319 | CCc1ccc(CCN[C@@H]2C[C@@H](NC(=O)Cc3ccon3)C2)cc1 320 | C[C@@H]1CC[C@H](NC(=O)N[C@@H]2C[C@@H](O)C23CCOCC3)[C@H](C)C1 321 | Cc1ccc(S(=O)(=O)N(C)c2ccc(O[C@H](C)C(=O)N3CC[C@@H](C)[C@H](C)C3)cc2)cc1C 322 | COCC[C@@H](C)C(=O)N[C@H](C)CCNC(=O)c1cccc(F)c1F 323 | CC(C)(C)O[C@@H]1C[C@H](NC(=O)C(=O)Nc2ccc(-c3nn[nH]n3)cn2)C12CCC2 324 | CN(C)C(=O)CC(=O)N[C@@H]1CCN(C(=O)[C@H]2CCc3cccnc32)C1 325 | Cc1cc(NC(=O)C(=O)N(C)[C@H](C)C2CCN(C)CC2)nn1-c1ccccc1Cl 326 | CCn1ccc(CC(=O)NC[C@@H]2CCN2[C@H](C)c2ccccc2)n1 327 | CS[C@@H](C)C(=O)NC1CN(C(=O)c2csnn2)C1 328 | COc1cc2c(cc1CNC(=O)c1ccccc1COCc1ccccc1)O[C@H](C)C2 329 | CCn1c([C@@H](O)C(C)C)nnc1N(C)CCCNC(=O)C1CCC1 330 | CCOC(=O)c1cc(=NC(=O)CCc2nc(C)no2)[nH][nH]1 331 | CN(CCCOc1cccc(S(C)(=O)=O)c1)CC(=O)NCC(=O)O 332 | CN(CCCc1nc2ccccc2[nH]1)C(=O)C(C)(C)c1ccccn1 333 | NS(=O)(=O)c1ccc(CCNC(=O)CN[C@@H](c2ccccc2)C2(CO)CCCCC2)cc1 334 | Cc1cccc(C(C)(C)NC(=O)NC[C@@H]2C=CCC2)c1 335 | Cc1cocc1C(=O)N1CC[C@H](Nc2nc3ccccc3o2)[C@@H]1C 336 | O=C(Nc1ccccc1)[C@@H]1CCCN(C(=O)c2cc(-c3ccco3)nn2-c2ccccc2)C1 337 | O=C(Nc1ccc(N2CCNC2=O)cc1)C(=O)N[C@@H]1CCCN(C(=O)N2CCCC2)C1 338 | CC(C)Oc1ccc(Cn2c(CN3CCCC3=O)nnc2N(C)[C@@H](C)c2ccccc2F)cn1 339 | C[C@@H](CCNC(=O)[C@@H](C)c1cccs1)NC(=O)CC1CC1 340 | CN1CCOC[C@H]1C(=O)N(C)[C@@H]1CCN(Cc2cnnn2C)C1 341 | Cc1c[nH]nc1C(=O)N1C[C@@H](C)[C@](C)(CNCCS(C)(=O)=O)C1 342 | COC[C@H](C)Oc1ccc(Cl)cc1S(=O)(=O)N1CCC[C@H]1c1nncn1C 343 | CCSCCCn1c(COc2ccc(C)cc2)nnc1N1CCC[C@@H](N2CCCC2)C1 344 | CC(C)CC(=O)Nc1ccc(C(=O)Cn2cnc3c(c2=O)CCCC3)cc1 345 | CC(=O)N1CCc2cc(NC(=O)N[C@H](C)c3nc(-c4ccc(F)c(C)c4)no3)ccc21 346 | COc1ccc(S(=O)(=O)N2CCCCCC2)cc1NC(=O)CN1[C@H]2CC[C@H]1CC(O)C2 347 | Cc1c([N+](=O)[O-])cc(C(=O)O)cc1S(=O)(=O)N1CC[C@H](Nc2ccccc2)C1 348 | Cc1ccc(S(=O)(=O)Nc2cnc(Br)c(Br)c2)cc1C(N)=O 349 | CCn1cnc(C(=O)N[C@H](C)C2CN(C(=O)[C@H]3CCC(C)(C)C3)C2)c1 350 | COc1c(C)cccc1-c1cc(C(F)(F)F)nc(-c2ccccc2)n1 351 | COc1ccc([C@H](NC(=O)NC[C@@H]2CCCO[C@@H]2C(C)C)C(F)(F)F)cc1 352 | Cc1ccc(S(=O)(=O)NC[C@@H](NCCc2ccccc2F)c2ccccc2)c(C)c1 353 | Cc1cc(C)n(CC(=O)N2C[C@@H](NCCF)[C@H](C(F)(F)F)C2)n1 354 | COc1ccc(C2(NCc3ccc(C)cc3Cl)CC2)cc1 355 | CCn1ccnc1C(=O)N[C@H]1CN(C[C@@H]2CCOC2)CC1(C)C 356 | CCc1nc(C(=O)N2CC(O)(CNC(=O)C3CC(F)(F)C3)C2)co1 357 | C[C@@H]1O[C@H](C)[C@H](C(=O)N2CC[C@H](N)C2)[C@@H]1C 358 | CC(C)OCC(=O)NC1(CNC(=O)C2=COCCO2)CCC1 359 | Cc1cccc(N2CCN(c3ccc(-n4ccc(C)n4)nn3)CC2)c1 360 | Cc1[nH]c2ccccc2c1C(=O)NC[C@H](C)N(C)C(=O)[C@@]12COC[C@@H]1C2 361 | CNC(=O)[C@@H]1CN(c2nnc([C@@H](C)Oc3cccc(Cl)c3)n2CCc2ccccn2)CCO1 362 | O=C(Nc1c(F)cccc1NC1CC1)c1cnc2sccn2c1=O 363 | C[C@H](N[C@@H]1CN(C(=O)C2(C3CCCCC3)CC2)C[C@H]1C)C(=O)N(C)C 364 | CCc1nnc(COC(=O)CCn2c(=O)n(C)c3ccccc32)o1 365 | Fc1ccc([C@H]2CN(CC(F)(F)C(F)F)CCO2)c(Cl)c1 366 | Cc1ccc2c(c1)CC[C@@H]2N[C@@H]1CCO[C@@H](c2cccs2)C1 367 | Cc1ccccc1-c1nnc(C)n1-c1ccc(OC(=O)[C@@H]2CC(=O)N(C3CC3)C2)cc1 368 | CC(C)C[C@]1(C)CCCN1Cc1nc(C(C)(C)C)cs1 369 | CCn1c(SCCCS(=O)(=O)c2ccccc2OC)nnc1N1CCOCC1 370 | CC[C@H]1CN(c2nnc(COc3ccc(C(C)(C)C)cc3)n2Cc2ccn(C)n2)CCS1 371 | CC(C)c1nc(S(=O)(=O)N2CC[C@@](F)(c3cccc(Cl)c3)C2)cn1C 372 | COc1nc(C(=O)N[C@@H]2CCN(C(=O)C3=CCOCC3)C[C@H]2C)co1 373 | C[C@@H](CNC(=O)[C@@H]1C[C@H]1C1CCOCC1)N(C)C(=O)c1cnnn1C 374 | CC(C)C(=O)N[C@@H]1CCCN(c2nnc(CC(C)(C)C)n2Cc2ccc(C(C)(F)F)cc2)C1 375 | Cn1cc(N2CC[C@]3(CCN(Cc4cnc5cc(C6CCNCC6)nn5c4)C3)C2=O)cn1 376 | CC1=C(C(=O)NC[C@@H](C)CNC(=O)[C@@H](C)C(C)C)CCCO1 377 | CCOc1cccc(CC(=O)NC[C@@H]2CN(CCC[C@H](C)O)C[C@H]2C)n1 378 | CCOC(=O)CCCCCN1C[C@H](C(=O)O)Oc2ccccc21 379 | C[C@@H](NC(=O)N(Cc1ccccn1)C1CC1)c1ccc(F)cc1 380 | CCNC(=O)NC(=O)[C@H](C)N[C@@H](C)CNC(=O)CCOC 381 | CCCCNC(=S)Nc1cnc(OC)c(C(=O)OC)c1 382 | CN1CCN(C(=O)N[C@H]2COc3cc(F)c(Br)cc32)[C@H](CN)C1 383 | C[C@@H]1CCN(C(=O)c2ccon2)[C@H](CNC(=O)c2ccnc3ccnn23)C1 384 | CC[S@@](=O)CCn1c(C(=O)NC(C)C)nnc1N1CC[C@H](COc2ccccc2)C1 385 | Cc1conc1C(=O)N1C[C@H]2CN(CCc3ccns3)C[C@@]2(C)C1 386 | CC(=O)N1CC[C@@H]([C@@H]2CCCN(C(=O)c3nc(C)c[nH]3)C2)C1 387 | COC(=O)[C@@H](NC(=O)CSc1ccc(F)cc1)c1ccccc1Br 388 | C[C@H](N[C@@H]1CCN(C(=O)c2ccnc(O)c2)C1)c1ccccc1 389 | C[C@H]1COC(C)(C)CN1c1nnc(C(=O)Nc2ccccn2)n1C[C@@]1(O)CCN(C)C1 390 | CC[C@H](C)Oc1cc2oc(=O)ccc2cc1OC 391 | O=C(N[C@@H]1CCN2CCCC[C@@H]12)N1CCOC[C@H](C2CCC2)C1 392 | COCCC(=O)N(C)CCCNCc1nn(C)cc1Br 393 | CNC(=O)[C@@H]1CCCN(c2nnc(C(=O)NC(C)C)n2Cc2ccnc(C(F)(F)F)c2)C1 394 | COc1ccc(Cl)cc1[C@H](O)CNC(=O)Nc1ccc2c(c1)[C@H](C)CC(=O)N2C 395 | CCOC1CC(C(=O)OCc2ccccc2Cl)C1 396 | CCOc1ccc(-n2c(SCc3n[nH]c(C)n3)nnc2-c2cccc(C)c2)cc1 397 | CC[C@H](C)c1nnc(N2CC[C@@H](Oc3ccccn3)C2)n1CCc1cc(C)cc(C)c1 398 | CCN(CCNC(=O)c1ocnc1C(F)F)[C@@H](C)C(=O)N(C)C 399 | Cc1cc2ccc(C(=O)N3CCC[C@@H](CCNCC4CC4)C3)cn2c1 400 | CCCC[C@H](CC)CCC(=O)N1C[C@H]2COC[C@@H](C1)N2Cc1ccc[nH]1 401 | Cc1ccsc1C(=O)N1CC(O)(CNC(=O)CC(C)(F)F)C1 402 | Cn1ncc2c1CCC[C@H]2NC(=O)[C@@H]1[C@@H]2C=C[C@@H](C2)[C@@H]1C(=O)O 403 | CN(Cc1cn2c(n1)CCCC2)Cc1noc(C2CC2)n1 404 | CCCc1occc1C(=O)NC[C@H]1C[C@H]2CC[C@H]1N(C(=O)C(N)=O)C2 405 | Cc1nccc(C(=O)N[C@H](C)[C@H]2CCCN(Cc3cnsn3)C2)n1 406 | CCC(CC)(Cn1c([C@H](C)Oc2ccc(F)cc2)nnc1N1CCOCC1)SC 407 | Cc1ccc(NC(=O)CCN[C@@H]2C[C@@H](OC(C)C)C2(C)C)cc1F 408 | COc1cc(N[C@@H]2CCC[C@H]2C)ccc1NC(C)=O 409 | C[C@@H]1C[C@@H](C)CN(Cc2ccc(CNC(=O)N3CCN([C@@H]4CCOC4)CC3)cc2)C1 410 | O=C(N[C@@H]1C[C@H]2CC[C@@H]1N2C(=O)[C@@H]1C[C@@H]2O[C@H]1[C@H]1C[C@@H]21)c1cc(C2CC2)[nH]c1C1CC1 411 | Cc1ncncc1C(=O)NCC1(NCCc2ccccc2Cl)CC1 412 | C[C@H](CO[C@H]1CCOC1)NC(=O)C(=O)N1CCC[C@@H](Nc2ccccc2)C1 413 | CN1CCC[C@@H](NC[C@@H](O)CNC(=O)c2cc3ncccn3n2)C1=O 414 | CO[C@@H](CNC(=O)N[C@@H](C)c1ccc(Cl)s1)C(F)(F)F 415 | Cn1cncc1CC(=O)NC1CCN(C(=O)C2(CF)CCC2)CC1 416 | COC(=O)[C@@H]1CCN1C(=O)[C@H](C(C)C)N1C(=O)c2ccccc2C1=O 417 | CCC[C@H](C)C(=O)N(CCO)CCNC(=O)[C@H]1CCC(=O)N1C 418 | CC(C)[C@H](C)CC(=O)NCCC1=CCN(CCn2cncn2)CC1 419 | O=C(c1cnn(-c2ccncc2)c1)N1CCC[C@H](CF)C1 420 | CCNC(=O)c1cccc(NC(=O)CN2CCCC[C@H]2c2ccc(C(C)C)cc2)c1 421 | C[C@H]1CCc2ccccc2N1C(=O)C[S@](=O)Cc1ccn(-c2ccccc2)n1 422 | C[C@@H](CC(=O)NCc1cc(F)ccc1CS(C)(=O)=O)S(=O)(=O)c1ccc(F)cc1 423 | Cc1cc(NC(=O)N(Cc2ccccc2)[C@H](C)CN2CCOCC2)cs1 424 | Cc1nc[nH]c1C(=O)NC/C=C/CNCC(=O)NCC1CCCCC1 425 | CCN(C(=O)Cc1cc(C)on1)C1CN(C(=O)c2n[nH]c(C)c2O)C1 426 | Cc1coc(C(=O)N[C@@]2(CO)CCCN(C(=O)c3cnccn3)C2)c1 427 | Fc1ccc(CSc2n[nH]c(Cc3ccccc3)n2)cc1Cl 428 | O=C(c1cn(C[C@H]2CCCN2)nn1)N1CCN(C(=O)N2CCCCC2)CC1 429 | Cc1ccc2c(c1)[C@@H](NC(=O)N(C)C)CC21CCN(Cc2cncc(Cl)c2Cl)CC1 430 | O=C1NC[C@@H]2[C@H]1CCCN2C(=O)c1cc(Br)cc2nc[nH]c12 431 | CC(C)Cn1ccc(C(=O)N[C@@H]2CCC[C@H](NC(=O)C3CC3)C2)n1 432 | CCC(C)(C)C(=O)NC[C@@H](C)CNC(=O)c1csc(C2CC2)n1 433 | CCCc1ncncc1C(=O)N1CCC2(CC1)CCN(CC(F)F)C2=O 434 | CC(C)(C)OC(=O)NC[C@]1(C)CCN(Cc2cc(O)ccc2Cl)C1 435 | COc1ccccc1CC(=O)N1CCCN(C(=O)CC(N)=O)CC1 436 | CCC1(C(=O)N2CCC[C@@H]3[C@H]2CCN3C(=O)C[C@H]2C=CCC2)CC1 437 | c1ccc(CN2C[C@@H]3CN(C[C@H]4CCOC4)C[C@H]3C2)nc1 438 | CC/C(C)=C/C(=O)N(CC)CCNCC1CC(C)C1 439 | CCc1nnc(N2CCCN(C(=O)CC3CCCC3)CC2)n1CCN1CCCC[C@@H]1CC 440 | C[C@@H](CCNC(=O)c1ccn(C)c1)NC(=O)C1CC(C(C)(C)C)C1 441 | CN1CCC[C@H](NC[C@]2(C)CCN(C(=O)CCc3nc[nH]n3)C2)C1=O 442 | O=[N+]([O-])c1sc(-c2nn[nH]n2)cc1N1C[C@@H](CO)[C@H](CCO)C1 443 | CCOc1cc(Cl)ccc1C(=O)N1Cc2c(OC)ccc(OC)c2[C@@H](O)C1 444 | CCOCCCNC(=O)[C@H](C)N1C[C@@H](O)[C@H](NC(=O)c2cocn2)C1 445 | CCOCC(=O)N[C@H](C)[C@H]1CCCN(C(=O)C(C)(C)NC(C)=O)C1 446 | COCC1(C(=O)N2CCC[C@H]3[C@@H]2CCN3Cc2ccns2)CCC1 447 | CN(CC1CCNCC1)S(=O)(=O)c1ccc2c(c1)CCO2 448 | CC[C@](NC(=O)C[C@H](NC(N)=O)c1ccccc1)(C(=O)O)c1ccccc1 449 | COC1(Cn2c([C@H]3CCC(=O)N3)nnc2N2CCN(CC(=O)NC(C)C)CC2)CCCC1 450 | COC(=O)c1ccc(C[C@H](C)N[C@@H]2CC[C@@H](N3Cc4cccc(F)c4C3=O)CC2)cc1 451 | COc1ccc([C@@H](CCO)NC(=O)Nc2cc(C(=O)N(C)C)ccc2C)cc1 452 | CC(=O)Nc1ccccc1CNC(=O)N=c1[nH]nc(-c2cc(F)ccc2C)s1 453 | CCO[C@@H]1C[C@H]1C(=O)N1CCN(C(=O)OC(C)(C)C)C[C@@H]1CO 454 | Cc1nc(C)c(C)c(NC[C@H](O)CN(C)C(=O)C2(C(N)=O)CC2)n1 455 | CCNC(=O)CN(CC)C(=O)C[S@](=O)c1cccc(OC)c1 456 | COCCN(Cc1ccc(F)cc1Cl)C(=O)C(=O)NC[C@H](C)OC 457 | CNC(=O)[C@H]1CCCN(C(=O)N[C@H](Cc2ccccc2)C(F)(F)F)C1 458 | C[C@H](NC(=O)[C@@H](C)OCc1ccccc1)c1ccc(F)cc1 459 | Cc1nc(CCN(C)CC(=O)Nc2c(Cl)cc(Cl)cc2C(=O)O)no1 460 | CCC(CC)C(=O)NC[C@@H](C)NCc1cc(F)ccc1F 461 | CN(C(=O)c1cnn2c1OCCC2)C1CC(NCc2ccn(C)n2)C1 462 | CC(C)Sc1ccc([C@@H](C)NC(=O)NCc2nc3ncccn3n2)cc1 463 | COc1ccc([N+](=O)[O-])cc1OC(=O)c1ccc(Cl)cn1 464 | CCc1ccc(-c2nnc(N(C)CC(=O)N3CCOCC3)n2CC[C@@H]2CCO[C@@H](C)C2)cc1 465 | CN(C(=O)C(F)F)[C@@H]1CCN(C(=O)c2ccc(-c3nc[nH]n3)cc2)C1 466 | O=C(NC[C@H]1CN(CCCF)CCO1)c1ccn2nnnc2c1 467 | COc1ccc(NC(=O)[C@@H](C)N2CCC(CCN3CCOCC3)CC2)c(OC)c1 468 | CCOCc1nnc(N2CC[C@@H](C(=O)NCC(F)(F)F)C2)n1CC(C)(C)SC 469 | CC(C)(C)OC(=O)N1C[C@H]2[C@@H](c3nnc([C@@H]4C[C@H]4c4ccccc4)o3)[C@H]3CC[C@]2(C1)O3 470 | Cc1nc(NC(=O)C(=O)Nc2ccc(CC(=O)NC(C)C)cc2)ccc1Br 471 | Cc1cc(O)nc(N2CC[C@@H](NC(=O)[C@@H](C)CCCc3ccccc3)C2)n1 472 | O=C(CCNc1ccccc1)NCCCC(F)F 473 | CC[C@@H](CNC(=O)[C@@H]1C[C@@H]2O[C@H]1[C@H]1C[C@@H]21)NC(=O)c1ccc(F)c2ccccc12 474 | CO[C@H](C(=O)N[C@H](CO)CNC(=O)c1cnon1)C1CCCCC1 475 | C[C@H](NC(=O)C1CCN(C)CC1)[C@@H](C)NC(=O)C1(C(F)F)CCC1 476 | COCCCOCC(=O)[C@@H](C#N)c1cnc2ccccc2n1 477 | Cc1csc(C(=O)N2CC[C@H](CNCc3nnc(C)o3)C2)c1 478 | COC(=O)c1cc(-c2c(F)cc(C)cc2OC)nc(S(C)(=O)=O)n1 479 | Cc1cc(C(=O)N2C[C@H]3C(NC(=O)[C@@H]4CCC(=O)NC4)[C@@H]3C2)n(C)n1 480 | Cc1ccc(C(=O)N2C[C@@H]3CCC[C@]3(NC(=O)CC(C)C)C2)n1C 481 | CC(C)[C@@H](O)C(=O)NCC1(NCc2ccon2)CCC1 482 | COc1cc2c(cc1OC)[C@@H](c1cccs1)N(C(=O)C[C@@H](C)c1ccccc1)CC2 483 | CNC(=O)[C@H]1CCCN(C(=O)Nc2cc(OC)c(C)cc2C)C1 484 | COCCn1c(-c2ccc(S(C)(=O)=O)cc2)nnc1N1CCC[C@@H](CC(C)C)C1 485 | C[C@H]1CCCN1c1nnc(CCC(C)(C)C)n1C 486 | CC[C@H](NCc1cc(C(=O)O)c(C)[nH]1)C(F)F 487 | C[C@@H](NC(=O)N[C@H](C)c1ccc([S@](C)=O)cc1)c1ccc(F)cc1 488 | CCOC1CC(COC(=O)C[C@@H]2C[C@H](C)c3c(C)cccc32)C1 489 | O=C(CC1CC1)N[C@H]1C[C@@H]1C1CCNCC1 490 | Fc1cc(-c2noc(-c3cn(-c4ccccn4)cn3)n2)cc(F)c1OC1COC1 491 | OC1CCN(c2ccc(Nc3ccnnc3)cn2)CC1 492 | CCC(C)(C)C(=O)N[C@@H](C)CCCNC(=O)c1cn2c(n1)CCC2 493 | COC(=O)[C@H](OC(=O)c1ccc([N+](=O)[O-])cc1)c1cc(OC)cc(OC)c1 494 | O=C(Cc1ncccc1F)NCCCNC(=O)[C@H]1CCC(F)(F)C1 495 | O=C1N[C@H](C(=O)Nc2ccc(Cl)c(C(=O)NC3CC3)c2)CCO1 496 | O=C(N[C@@H](C(=O)O)c1ccsc1)[C@@H]1CCN(c2cccc(Cl)c2)C1=O 497 | C[C@]1(F)CCN(C(=O)c2cc3ccccc3n2Cc2ccccc2F)C1 498 | COCC(C)(C)N(Cc1ccccc1)C(=O)[C@@H](OC)c1ccccc1 499 | CCN(CCn1c([C@H]2COc3ccccc3O2)nnc1N1C[C@@H](OC)C(C)(C)C1)C(C)C 500 | O=C1CSc2ccc(C(=O)NS(=O)(=O)c3cnn(-c4ccccc4F)c3)cc2N1 501 | C[C@@H]1CN(C(=O)CCc2ccc(F)c3ccccc23)c2ccccc2O1 502 | CN(CC(N)=O)C(=O)c1ccc2c(c1)CCCC2=O 503 | CN(CCNC[C@@H](O)C1CCCCC1)C(=O)C[C@H]1CCC(F)(F)C1 504 | CCN(CC)C(=O)c1ccc(-c2nc(N3CCOCC3)c3scc(C)c3n2)c(OC)c1 505 | Cc1nccc(C(=O)NC[C@H]2C[C@H](C)N(C(=O)C3CC4(CC4)C3)C2)n1 506 | CCN(CC)CCC[C@@H](C)NC(=O)c1cnc(Cc2ccccc2F)s1 507 | Cc1cnc(Br)c(NC(=O)C(=O)N(C)Cc2cccs2)c1 508 | Cc1ccc(NC(=O)[C@H](c2ccccc2)N2CC[C@@H](COC(F)F)C2)cc1 509 | CCCC[C@@H](CNC(=O)c1ccccc1F)NC(=O)C1CC=CC1 510 | CC(C)C[C@@H](C(=O)N1CCC(N2CCc3ccccc32)CC1)c1ccccc1 511 | CCn1c(-c2ccc(C)cc2)nn(CN2CC[C@H](C)[C@H](n3ccnc3)C2)c1=S 512 | C[C@@H](NC1CC(N(C)C(=O)C(C)(C)F)C1)C(=O)Nc1ccccc1 513 | CCN(CC(=O)NC)CC(=O)Nc1ccccc1C(=O)N[C@@H](C)c1ccccc1 514 | CC(C)c1ccc(O[C@H](C)CNC(=O)c2cnn(-c3ccc(Br)cc3)c2)cc1 515 | CCOc1ccc(N2C[C@H](C(=O)N3CC(S(=O)(=O)CC)C3)CC2=O)cc1 516 | C=CC(=O)Nc1ccc(C(=O)OCC(=O)NCc2cc(Cl)ccc2OC)cc1 517 | Cc1nc(CN2C[C@H]3C(CNC(=O)C45CCN(CC4)C5)[C@@H]3C2)c(C)o1 518 | Cc1cc(C(=O)N[C@@H](C)c2cccc3ccccc23)c(C)n1Cc1ccncc1 519 | CNC(=O)Cn1ccc2ccc(NS(=O)(=O)CCOC)cc21 520 | COC(=O)C[C@H](C)Sc1c(Cl)cc(Cl)cc1[N+](=O)[O-] 521 | O=C([C@@H](c1ccccc1)C1CC1)N1CCC(Oc2ccc(C(F)(F)F)cn2)CC1 522 | C[C@H]1C[C@H](Cn2c(C3CCNCC3)nnc2N2CCC(C(N)=O)CC2)CCO1 523 | CCc1cc(C(=O)N[C@H]2CCN(C)[C@@H](C)C2)c2c(CC(C)(C)C)noc2n1 524 | CCOC(=O)C1=C(COC(=O)c2cnc3onc(C)c3c2)NC(=O)N[C@@H]1c1ccco1 525 | c1ccc2ncc(CNc3ccc(CN4CCNCC4)cc3)cc2c1 526 | CC[C@@](C)(O)CN(Cc1ccccc1)C(=O)CCC(C)(C)[N+](=O)[O-] 527 | CCC/C(C)=C/C(=O)O[C@H](C)C(=O)N1CCN(c2ccc(F)cc2)CC1 528 | COC(=O)Cc1cc(=O)n(-c2ccc(C(=O)Nc3ccc(C(=O)OC)c(OC)c3)cc2)[nH]1 529 | CCO/C=C\C(=O)N[C@@H](C)c1nc(C)cs1 530 | CCc1nnsc1C(=O)NC[C@H]1CC(c2ccc(OC)c(F)c2)=NO1 531 | COc1cc(CNC(=O)COC(=O)c2cc(C)nc3cc(F)ccc23)cc(OC)c1OC 532 | Cc1nc(N[C@H](C)[C@H](C)NC(=O)c2nccnc2N)nc(N(C)C)n1 533 | CC[C@H](c1ccc(F)cc1)N1CCN(C(=O)N[C@@H]2CCC[C@@H]3OCC[C@H]32)CC1 534 | CC(C)(C)C(F)(F)CNS(=O)(=O)c1c(Cl)cc(Cl)cc1Cl 535 | Cc1ccc(CN2CCOC3(CCN(C(=O)CC(C)C)CC3)C2)cc1 536 | O=C(NC[C@@H](Cc1ccccc1)c1ccccn1)c1sccc1-n1ccnn1 537 | COC(=O)[C@H](C)N(CC1CCC1)C1CCC1 538 | CC1(C(=O)N2CCCN([C@@H]3CCc4c(F)ccc(F)c43)CC2)CC1 539 | CCCCO[C@@H]1C[C@H](NC(=O)NC[C@H]2CCCc3cc(OC)ccc32)C1(C)C 540 | CC(C)(CN1CCOCC1)NC(=O)NCCN1CCSCC1 541 | CCOc1ccc(CCNC(=O)[C@@H](C)C2CCC2)cc1 542 | COc1ccc(C(=O)O)c(S(=O)(=O)NCC(C)(C)CCO)c1 543 | CC(C)Oc1cccc(CNC(=O)N2CCN(C[C@H](C)O)C[C@@H]2C)c1 544 | c1ccc(C2(Cc3nnc(C4CC4)o3)CCOCC2)cc1 545 | CCCn1cc(C(=O)NCC2CC(NCc3ncccn3)C2)nn1 546 | O[C@@H](CN[C@@H]1CCCOc2ccccc21)c1ccc(C(F)(F)F)cc1 547 | Cc1ccnn1CC(=O)N1C[C@@H](C)[C@@H](NCc2cnn(C)c2)C1 548 | CCCC[C@@H](C)C(=O)N(CCC)CC(C)C 549 | Cc1cc(Br)c(C(=O)NC(C)(C)CCCN(C)C)cc1Br 550 | O=C(CN1Cc2ccccc2C1=O)NCC1(c2ccc(Br)cc2)CCCCC1 551 | CC[C@H](C)c1nc([C@H](C)NC(=O)[C@@H]2COCCN2C(=O)OCc2ccccc2)n[nH]1 552 | CO[C@H](Cn1c(-c2cnccn2)nnc1N1CCN(C(=O)Cc2ccccc2)CC1)C(C)C 553 | CC(C)(NC(=O)c1cnn2c(-c3cccnc3)ccnc12)c1ccc(Cl)cc1 554 | CCn1c(Cc2ccccc2Cl)nnc1N1CCCN(Cc2cnn(C)c2)CC1 555 | Cc1nc(C(=O)N[C@H](C)[C@H]2CCN(C(=O)c3cc[nH]c3)C2)sc1C 556 | Cc1cccc(NC(=O)C(=O)NCC(C)(C)C2CCCC2)c1Cl 557 | Cc1ccc(C(=O)N[C@@H]2CN(C(=O)C(C)C)C[C@@H]2n2ccnn2)cc1C 558 | COC(=O)[C@H](CC(C)C)NC(=O)N[CH]COCCOCCOCCO 559 | COc1cc(Cn2c([C@H]3CCCCO3)nnc2N(C)Cc2cnc(C)s2)cc(Cl)c1OC 560 | CC[C@H](SC)C(=O)N[C@@H]1CCN(C(=O)C(F)F)CC(C)(C)C1 561 | CN1CCCC[C@@H]1CNC(=O)c1ccnc(S(N)(=O)=O)c1 562 | CC(=O)NCCN(Cc1ccc(C)s1)c1nnc(C(C)(C)C)n1C[C@@H](c1cccnc1)C(C)C 563 | NC(=O)CC(=O)N1CCC[C@]2(CCN(C(=O)c3cnon3)C2)C1 564 | C[C@H](NS(C)(=O)=O)C(=O)N1CCC[C@@H]1[C@H](C)c1ccccc1 565 | COC[C@@H](C)C(=O)NCC1(NC(=O)[C@]2(C)CCOC2)CCCC1 566 | CCCN1CCCC[C@H]1Cn1c(C2CCCC2)nnc1N1CCN(C(=O)C(C)C)CC1 567 | Cn1ncc(NC[C@@H](O)C(F)(F)F)c1C(N)=O 568 | CCc1noc([C@H](C)N(C)C[C@@H]2CCN(C(=O)Cc3cc[nH]n3)C2)n1 569 | COc1cccc([C@H]2C[C@@H]2c2nc(-c3ccc(OC(C)(C)C)cc3)no2)c1 570 | CCCC1(C(=O)N(C)[C@@H](C)CN[C@H](C)c2nc(C3CC3)no2)CCC1 571 | CC(C)[C@H](C)CNC(=O)N[C@H]1CCO[C@H]1c1ccnn1C(C)C 572 | CC(C)(C)OC(=O)N1CC[C@](C(=O)NCc2ccccc2Cl)(C(F)(F)F)C1 573 | Cn1c(C(=O)N2CCN(C(=O)c3ccc4[nH]cnc4c3)CC2)cc2ccccc21 574 | COC(=O)c1cc(CNC(=O)NC2[C@@H]3[C@H]4CC[C@@H](C4)[C@@H]23)n(C)c1C 575 | O=C(c1ncsc1C1CC1)N1CCN(C[C@H]2CCCOC2)CC1 576 | c1ccc2c(c1)OC[C@@H](c1nnc(SCc3cnc4ccccc4c3)o1)O2 577 | C[C@H](NS(=O)(=O)CCc1ccccc1)c1cccc(O)c1 578 | CCc1c(C(=O)N2CC[C@@H](NCC(=O)NC(N)=O)[C@H](C)C2)ccn1C 579 | O=C(OCCc1ccc2c(c1)CCO2)c1ccnc(NC(=O)C2CC2)c1 580 | CCCc1nnc(C(=O)N(C)Cc2ccc(OC)cc2)o1 581 | CCOC(=O)CC1(NC(=S)Nc2ccc(F)cc2F)COC1 582 | COC(=O)C(C)(C)N1CCN(C(=O)C(=O)N2CCNCCC23CCC3)CC1 583 | COc1ccccc1[C@H](C)NC(=O)[C@@H](C)N(C)Cc1cccnc1 584 | C[C@@H]1CN(C(=O)c2ccccc2COCc2ccccc2)CCS(=O)(=O)C1 585 | CC[C@H](C)NC(=O)c1ccc(CNC(=O)N[C@H](c2ccc3c(c2)OCCO3)C(C)C)cc1 586 | Cc1cc(C(=O)OCc2cc(F)ccc2OC(F)F)c(C)nn1 587 | O=C(NCc1cccc(C(=O)NCc2ccco2)c1)c1cc(F)cc(N2CCOCC2)c1 588 | C[C@H](CN(C)C(=O)CCc1ccn(C)n1)NCCc1ccccc1F 589 | CCN(CC)CC(=O)N1CCN(c2nnc(C(C)(C)C)n2CCC2(COC)CCC2)CC1 590 | CN(CCNC(=O)c1c[nH]c(=O)cn1)Cc1ncnn1CCF 591 | CC(C)[C@H](C)C(=O)N[C@H]1CCN(C(=O)c2cnc(O)n(C)c2=O)C1 592 | Cc1nc(CSc2ccccc2C(=O)N2CCSCC[C@H]2C)cs1 593 | CC(C)COC(=O)N1CCN(c2nnc(COc3ccc(Cl)cc3)n2C[C@@H]2CC[C@H](C)C2)CC1 594 | CSc1ccc(-c2ccc3sccc3n2)c(C)c1 595 | CC(=O)NC1CCC(N(C)C(=O)C(=O)NC[C@H](C)c2nc(C)cs2)CC1 596 | CC(C)(C)OC(=O)NC1(CNC(=O)C(=O)Nc2cccc(C(F)F)c2)CCCCC1 597 | c1cncc(-c2n[nH]cc2CN2CC[C@@H]3NCC[C@@H]3C2)c1 598 | COc1ccc(NC(=O)CSCC(=O)N(C)[C@H](C)c2ccc(C)cc2C)cc1 599 | CC(C)[C@@H](O)CCN[C@H]1CCCNc2ccccc21 600 | Cc1ccnc(N2CCN(C(=O)C(=O)NCCC3C[C@H](C)O[C@@H](C)C3)CC2)c1 601 | O=C(NC[C@H]1CCC2(CCOCC2)O1)C1(c2ccc(Br)cc2)CCCCC1 602 | O=C(N[C@@H](Cc1ccccc1)C(=O)Nc1ccc(-c2nn[nH]n2)cc1)c1ccco1 603 | COc1ccc2onc(C(=O)N3CCC4(CC3)C[C@@H](c3cccnc3)C(=O)N4)c2c1 604 | COCCN(Cc1cccs1)C(=O)c1ccc(Cl)c2occc12 605 | O=C1CC2(CCC2)C(=O)N1CN1CCC[C@@H](n2ccnc2)C1 606 | CC(=O)N1CCN(CCNC(=O)[C@H](C)N2C(=O)c3ccc(Br)cc3C2=O)CC1 607 | COCc1cccc(CC(=O)N[C@@H]2CN([C@@H](C)C(N)=O)C[C@H]2C)c1 608 | CC(C)CC(=O)Nc1ccc(NC(=O)C(C)(C)C(C)C)cc1 609 | CN(CCN1CCOCC1)C(=O)C(=O)Nc1cc2c(cc1Cl)OCCO2 610 | CCS(=O)(=O)N(C)c1ccc(NC(=O)C(F)(F)c2ccccc2Br)cc1 611 | CC(=O)c1nn(C2=CCN(C(=O)OC(C)(C)C)C2)cc1N 612 | CCn1nc(C)c(C(=O)N2C[C@H]3C[C@@H](NCC=C(C)C)C[C@H]2C3)n1 613 | CCCc1cc(=O)n2nc(NCCc3ccc4[nH]ccc4c3)sc2n1 614 | CC(C)c1ccc(CN2CCCC[C@@H]2C)c(O)c1 615 | C[C@@H](CCNC(=O)C1(N(C)C)CCC1)NCC(=O)NCC(C)(C)C 616 | O=C(Cc1cncnc1)N1CC[C@@H]2[C@H]1CCCN2C(=O)c1cn[nH]c1 617 | C[C@@H]1CC[C@H](NC(=O)c2ccc(-c3nn[nH]n3)[nH]2)CN1CCC(C)(C)C 618 | CC(=O)N1C[C@@H](NC(=O)CCCc2csc(C)n2)C[C@H]1C 619 | COCC[C@H](C)NC(=O)C(=O)NCC1(Cc2ccccc2)CCCC1 620 | Cc1cc(NC2CCN(C(=O)c3oc(C)nc3C)CC2)nc(CO)n1 621 | CN(C)CC1(C(=O)N2CCC[C@H](N(C)C(=O)c3cnon3)C2)CC1 622 | O=S(=O)(C1CCCCC1)N1CCCCCCCC1 623 | C[C@@H]1CCN(C(=O)NCc2cccc(OC(F)(F)F)c2)C[C@@H]1C(=O)O 624 | CN(C)CCn1ccc(NC(=O)NCCNC(=O)c2cccnc2)n1 625 | CC(C)OC(=O)CNC(=O)[C@@H]1CCN(c2ccc(-c3nn[nH]n3)cc2F)C1 626 | Cc1ccc(C(=O)N2C[C@H](C)C[C@@H](C)C2)cc1NC(=O)C(=O)N1CCC[C@@H]1Cc1ccccc1 627 | COc1cccc([C@@H](C)N2CC(NC(=O)[C@@H]3CC34CCOCC4)C2)c1 628 | COc1cccc(OCCOCc2cc(Cl)cnc2OC(C)C)c1 629 | Cn1cc(C(=O)NC[C@@H]2CCCN(CCCF)C2)nn1 630 | CCO[C@H]1C[C@@H](N(C)C(=O)Cn2nc(C)cc2C(F)F)C1(CC)CC 631 | COc1cc(C(=O)O)c(NS(=O)(=O)c2ccc3c(c2)CCO3)c(OC)c1OC 632 | CC(C)(C)OC(=O)N[C@H]1CCC[C@H]1C(=O)OCCc1cscn1 633 | CC(C)(C)c1ccccc1OCC(=O)NCCCc1nnc2n1CCCC2 634 | C[C@@H]1C[C@@H](C)CN(S(=O)(=O)c2ccc(NC(=S)NC3CCCC3)cc2)C1 635 | COC(=O)[C@@H]1C[C@@H]2[C@H](CC[C@@H](C)N2[C@H]2CCCN(C(C)C)C2=O)O1 636 | C[C@H](OCc1cnn[nH]1)C(=O)N1CC[C@H](NCCCCC(F)(F)F)C1 637 | Cc1ccncc1C(=O)N(C)C[C@@H](O)CN(C)C(=O)c1cc[nH]n1 638 | CO[C@@H](CNC(=O)Cc1cc(C)on1)C1CCCCC1 639 | Cc1nc2ccccc2n1C[C@H]1CCCN1C(=S)NC[C@@H]1CCOC1 640 | C/C(=C/C(=O)NC[C@@H](C)NC(=O)c1c(F)ccc(F)c1F)C1CC1 641 | CC(C)Oc1nccnc1N1CC[C@@H](O)[C@H](F)CC1 642 | O=C1N[C@@H](c2ccc3ccccc3c2)C(=O)N1c1nc2ccccc2s1 643 | CCN(Cc1ccccc1Br)C(=O)NCc1cccc(OCC(N)=O)c1 644 | CC[C@H](CNC(=O)C[C@H]1CCC(=O)N1)NCCC1CCOCC1 645 | Cc1c([C@H](C)NCCCC(F)F)nnn1-c1ccccc1 646 | CCn1c(SCC(=O)O[C@@H](C)c2nc(-c3ccccc3)no2)nc2ccccc21 647 | CO[C@@H](C)c1nsc(N[C@@H]2CC[C@H](CNC(=O)c3cncn3C)C2)n1 648 | CNC(=O)CCCC(=O)N1CC[C@H]1CN(C)C(=O)c1cc(C)[nH]n1 649 | Cc1oc2ccc(NC(=O)N3CCO[C@H](c4ccsc4)C3)cc2c1C 650 | C[C@@H]1CCC[C@@H](OCC(=O)OCC(=O)N(C)c2ccccc2C(=O)NCc2ccco2)C1 651 | C[C@@H]1CN(Cc2nccn2C)C[C@H]1NC(=O)Cn1ccccc1=O 652 | CCCNC(=O)NC(=O)CNC[C@@H]1CN(C(=O)[C@H](OC)C2CC2)C[C@H]1C 653 | CC[C@@H]1CN(c2nnc(CC3CC3)n2CCN2CCOC(C)(C)C2)CCO1 654 | CC(C)(C)OC(=O)NCC(C)(C)c1ccc(Nc2ccoc2)cc1 655 | CCn1cc(C(=O)N2CCC[C@H]2CNCCN2C(=O)CCC2=O)cn1 656 | CCOC(=O)[C@H](CC(C)C)Oc1ccc(OC)c(F)c1 657 | Cc1[nH]nc(C(F)(F)F)c1C(=O)N[C@H](C)c1ccccc1 658 | CCCN1CC[C@H](NS(=O)(=O)c2cccc(C(=O)OCC)c2)C1 659 | CN(c1ccccc1NC(=O)C(=O)N(CC1CC1)C1CCC1)C1CCCC1 660 | Cc1cnn(CC(=O)NCC2CN(C(=O)[C@H]3CCO[C@@H]3C)C2)c1 661 | C[C@@H](Cc1cncc2ccccc12)C(=O)NCC1Cc2ccccc2C1 662 | COCCOCN1C[C@@]2(CCN(C(=O)C3(C)CCSCC3)C2)OCC1=O 663 | Cc1ccc(C(=O)CCC(=O)N[C@@H]2CCc3c[nH]nc3C2)s1 664 | CC(C)CO[C@H]1CCN(C(=O)c2cc(F)cc(Cl)c2)C1 665 | CC[C@@H]1CCCC[C@@H]1OC[C@H]1COCCO1 666 | Fc1ccc2c(c1)nc(-c1ccc3c(c1)CNC3)n2C1CCNCC1 667 | COc1c(NC(=O)CCC(=O)c2ccc3c(c2)CCC(=O)N3)cc(Cl)cc1C(=O)N(C)C 668 | O=C(NC[C@H](CO)Cc1c(F)cccc1Cl)c1cc(-c2ccccc2)no1 669 | Cc1ccc(CN(C(=O)C(=O)N(C)C[C@@H](C)c2nccs2)C(C)C)s1 670 | COc1cc(NC(=O)C(=O)NC[C@@H]2CCCC[C@@H]2C)cc(OC)c1Br 671 | COC(=O)CCN1CC[C@@H](NC(=O)C(=O)Nc2cc(CN(C)C)ccc2C)C1=O 672 | COC(=O)c1cc(S(=O)(=O)N2[C@H]3CC[C@H]2c2cncnc2C3)n[nH]1 673 | CCOC(=O)C[C@H](C)NC(=O)/C=C/C(=O)NCc1ccc(OC)cc1 674 | CC(C)N(Cc1ccc(F)cc1)C(=O)NC[C@H](C)C(=O)O 675 | CO[C@H](CNC(=O)c1cccc(CNC(=O)OC(C)(C)C)c1)C(F)(F)F 676 | Cc1cc(CN2CC3(CCN3C(=O)NC(C)C)C2)nn1C 677 | CCN1CCC([C@H]2CCCN(C(=O)c3c(C)cncc3C)C2)CC1 678 | CC(C)(C)OC(=O)CN(CC(=O)OC(C)(C)C)C(=O)Nc1cc(C(F)(F)F)ccc1F 679 | CCC1(CNC(=O)NCc2ccc(N3CCCC3=O)cc2)CCC1 680 | O=C(CCn1sc2ccccc2c1=O)NCC(=O)C1CCCC1 681 | Cc1noc(CN2CCCC[C@H](NC(=O)c3ccc(F)c4ccncc34)C2=O)n1 682 | O=C(N[C@@H]1CCN(c2ccccc2C(F)(F)F)C1=O)N1CCN(c2ccncc2)CC1 683 | COC(=O)C1(C)CCN(Cc2ccc(-c3cncnc3)cc2)CC1 684 | CNC1(CNC(=O)c2sc(C)nc2C)CCC1 685 | C[C@H]1CCCCN1C(=O)Nc1ccn(CCc2ccncc2)n1 686 | COc1cc(CN2C[C@@H]3CCN(C(=O)[C@@H](C)c4ccco4)[C@@H]3C2)ccn1 687 | CCC(CC)[C@H]1C[C@@H](NC(=O)Nc2ccc(OCC(=O)O)cc2)CCO1 688 | O=C([C@H]1CCC(F)(F)C1)N1C[C@H]2CCN(CCOCC3CC3)C[C@H]21 689 | CCOC(=O)[C@@H]1CC[C@H](n2cnc(C)c2CSCCN)CO1 690 | C[C@@H](CNCc1ncc(C2CC2)o1)N(C)C(=O)[C@H]1CN(C)C(=O)N1 691 | CC[C@]1(O)CCN(Cc2cncs2)C1 692 | CC(C)OC(=O)C[C@@H]1CCCN(C(=O)[C@@H]2CCC(=O)N(c3cccc(F)c3)C2)C1 693 | C[C@@H](CNCc1csc(C2CC2)n1)NC(=O)[C@@H]1CCCNC1=O 694 | COCC(C)(C)C(=O)N1CC[C@@H](N(C)C(=O)c2ccc(Cl)o2)C1 695 | Cc1cc(C)cc(C(=O)N2CCC[C@H](C(=O)OC[C@@H]3CCO[C@@H]3c3ccccc3)C2)c1 696 | CCN(CC)S(=O)(=O)c1cc(NC(=O)CSc2ccnc3ccccc23)ccc1C 697 | COc1cccc2[nH]cc(Cc3noc(-c4nc5cccnc5s4)n3)c12 698 | O=C(N[C@H]1CC(=O)N(c2ccccc2F)C1)N1CC[C@@](CO)(c2ccccc2)C1 699 | CC[C@@H]1C[C@H]1C(=O)N1CCC([C@H]2CCN(CC(=O)NC(C)C)C2)CC1 700 | CC1(C)CN(Cc2ncccn2)C[C@H]1NC(=O)C[C@@H]1C[C@H]1c1ccccc1 701 | CC(C)OC[C@@H]1C(=O)N([C@@H]2[C@H](c3ccccc3)C2(C)C)C(=O)N1C 702 | CCc1nnc(N(C)CCC2CCOCC2)n1CCCN1CCC[C@H]1C(=O)N(C)C 703 | O=C(C[C@H]1NC(=O)c2ccccc21)NCCNC(=O)[C@H]1CC1(F)F 704 | C[C@@H]1[C@@H](NC(=O)CC[C@@H]2CCOC2)CCN1C(=O)c1ncccn1 705 | COc1cc(C(=O)N[C@H](C)CCS(C)(=O)=O)ccn1 706 | COc1cccc([C@H](Nc2nc(Cl)nc3c2ncn3[C@H]2CCCCO2)c2ccccc2)c1 707 | C[C@H](NC(=O)C(=O)Nc1ccc(OCCN2CCN(C)CC2)cc1)C(=O)N(C)C 708 | CCn1cccc1C(=O)NC[C@H]1CC[C@H](NC(=O)C2(COC)CC2)C1 709 | C[C@H]1OC(=O)N[C@H]1C(=O)N(CCN(C)Cc1ccccc1)Cc1ccccc1 710 | C[C@]1(CO)CN(C(=O)c2cc3c(F)cccc3[nH]2)CC[C@@H]1O 711 | CCN(Cc1cccc(-c2ccc(NC(=O)OC(C)(C)C)cc2)n1)[C@@H](C)CO 712 | O=C1CC[C@@H](c2nnc(N3CCC(CCCO)CC3)n2CCCN2CCCCC2)N1 713 | CCCCC[C@H]1CCCCN1C(=O)NC[C@@H]1CCO[C@@H]1C(=O)O 714 | C[C@H](c1nnnn1C)N(C)CCN(C)C(=O)CC(F)(F)C(F)F 715 | CC(=O)N[C@@H]1CCCC[C@H]1NC(=O)C[C@@H]1CCCN1C(C)C 716 | C[C@H]1CCCN1c1nnc(CSc2ccc(Cl)cc2)n1CCN1CCCCC1 717 | CC[C@H](C)N[C@@H](CNS(=O)(=O)c1cc(Cl)cnc1Cl)c1ccco1 718 | C[C@H]1C[C@H](CNCc2cc(O)ccc2Cl)CN1C(=O)C(N)=O 719 | CCCCC(=O)N1CC[C@H](NC(=O)c2cnn(C(C)(C)C)c2CC)C1 720 | CCc1ccc(CNCCN(CCO)C(=O)[C@@H]2CCC[C@H](C)C2)cc1 721 | COCCOc1ccc(NC(=O)C(=O)N[C@@H](C[C@H]2CCOC2)c2ccccc2)c(C)c1 722 | Cc1cc(NC(=O)c2cnn(C3CCC3)c2)nn1-c1ccc(F)cc1F 723 | O=C(CCSCc1nc2sc3c(c2c(=O)[nH]1)CCCC3)N1CCN(c2ccccn2)CC1 724 | C[C@H]1CN(c2nnc(Cc3ccncc3)n2Cc2nc(C(C)(C)C)cs2)CCN1CC(F)(F)F 725 | CCOC[C@H]1C(=O)N(Cc2c(F)cccc2OC(F)F)C(=O)N1C 726 | C[C@H](OC(=O)[C@@H]1CN(C(=O)C(C)(C)C)CCO1)c1cncc(F)c1 727 | Cc1ccc(NC(=O)[C@H]2CSCN2C(=O)C2SCCCS2)cc1 728 | C[C@H](C(=O)NCCNCCOCC1CC1)c1ccccc1 729 | CN(C[C@@H]1CCCOC1)c1nnc(CN2CCCC2=O)n1CC1([S@@](C)=O)CCC1 730 | CCCN(C(=O)c1ccnc(O[C@@H](C)CC)c1)[C@H]1CCN(C(=O)OC(C)(C)C)C1 731 | COc1ccccc1CCNC(=O)C(=O)Nc1ccc(CCSC)cc1 732 | CN1C[C@@H](C(=O)N2CC3(CCCN(C/C=C/Cl)C3)C2)CCC1=O 733 | CN1CCC[C@@H]1CCN1CCNC(=O)C1(C)C 734 | COc1ccccc1[C@@H](C)S(=O)(=O)Cc1cc2c(cc1Br)OCCO2 735 | O=C1CCC[C@@H](CC(=O)N2CCC[C@@H](NC(=O)c3cc[nH]c3)CC2)N1 736 | COC(=O)[C@H]1C[C@H](O)CN(C(=O)C(=O)Nc2ccc(C(F)F)cc2)C1 737 | C[C@H](COc1c(F)cccc1F)NC(=O)N1C[C@@H](CO)[C@H](c2cnn(C)c2)C1 738 | Cc1nn2c(c1Cl)N(C(=O)CCCSC(C)(C)C)CCC2 739 | Cc1cc(C(=O)N2CCN(C(=O)CCc3cnc[nH]3)CC2)no1 740 | Cc1ncc(C)c(NC(=O)Cc2cc(F)ccc2Br)n1 741 | Cc1cc(NC(=O)C(=O)N2CCN([C@@H]3CCC[C@H]3O)CC2)nn1-c1ccccc1 742 | O=C(CCc1ccc(S(=O)(=O)N2CCOCC2)cc1)NCc1ccc(N2CCCCC2)cc1 743 | CCCN(C)[C@@H](CNCc1cc(C)c(C(=O)O)[nH]1)c1ccc(Cl)cc1 744 | NC(=O)CCOc1ccccc1NC(=O)C(=O)N1CCc2ccccc2[C@@H]1c1ccccc1 745 | C[C@@H]1CCc2c(F)cccc2[C@H]1NC(=O)c1cccc(C(=O)N(C)C)c1 746 | CC(C)[C@@H]1C[C@H]1CNC(=O)[C@@H]1CC[C@H]2CCCC[C@H]2C1 747 | NC(=O)CCN(Cc1ccccc1)C(=O)Cn1c(=O)cnc2ccccc21 748 | C[C@@H]1CN(C(=O)CCCc2cnn[nH]2)C[C@H]1NC(=O)c1ccc2cnccc2n1 749 | O=C(c1cnc[nH]1)N1CCc2nn[nH]c2C1 750 | CC[C@H](SC)C(=O)NC[C@@]1(C)CN(Cc2cncn2C)CCO1 751 | Cc1ccc([C@@H](CNC(=O)c2cccc(N3CCCC3=O)c2)N(C)C)cc1 752 | Cc1cc(-c2nnc(N(C)C[C@H]3COCCO3)n2C[C@H]2CCCCO2)nn1C 753 | CC(C)c1oncc1C(=O)N1CCC[C@@]12CCN(C1CCCC1)C2=O 754 | CCc1ccccc1[C@@H]1C[C@H]1C(=O)NCCN(C)C(=O)c1nnn(C)c1C 755 | COc1c(F)cc(F)cc1NC(=O)N(CC(=O)N1CCCCCC1)C(C)C 756 | CC[C@H](C)[C@H](C)N(C(=O)C(=O)Nc1ccc(OCc2ccccn2)c(F)c1)C1CC1 757 | c1ccc(-c2ncnc(N3CC4(CCC4)[C@@H]3C3CCOCC3)n2)cc1 758 | COC[C@H](C)[C@H](C)C(=O)N[C@H]1C[C@H](OC)C12CCC2 759 | CCc1nnc(CN[C@H]2CCN(C(=O)CCc3cn(C)nn3)[C@@H]2C)o1 760 | CC[C@@H](NC(C)=O)C(=O)N[C@H](C)COc1c(C)cccc1C 761 | COC(=O)Cc1occ(C)c1C(=O)Nc1cnc2c(c1)CN(C(=O)OC(C)(C)C)CC2 762 | CC[C@H](C)N(C)CCn1c(N2C[C@H](C)O[C@H](C3CC3)C2)nnc1[C@@]1(OC(C)C)CCOC1 763 | O=C(Cc1ccc(OC(F)F)c(F)c1)Nc1ccc(C2CC2)nn1 764 | C[C@H]1CN(C(=O)CCC2CCC2)CCN(C2CCC2)C1 765 | Cc1nnc(N2CCC([C@@H]3CC3(F)F)CC2)n1CC1(O)CCC1 766 | COC(=O)c1cccc(-c2nc(COC(=O)[C@H](C)c3c(C)n[nH]c3C)cs2)c1 767 | COC(=O)C1(O)CN(C(=O)CC[C@@H](CC2CCCCC2)NC(=O)OC(C)(C)C)C1 768 | COC(=O)c1cncc(S(=O)(=O)N(C)CC(=O)OCc2ccccc2)c1 769 | CN(C)C(=O)[C@@H]1CCC[C@@]12CCN(Cc1cnc(N3CCOCC3)s1)C2 770 | C[C@H](CC(=O)N(C)[C@@H]1CCN(Cc2ccccc2)C1=O)c1ccco1 771 | CN(C(=O)COC1CCCCC1)C1CC(NCCCF)C1 772 | COC1(C(F)(F)F)CCN(Cc2nc(-c3ccccc3)no2)CC1 773 | CCOC(=O)c1ccc(CN2CCC(C)=C(C)C2)o1 774 | Cc1nn[nH]c1C(=O)N[C@H]1COC2(C1)CN([C@@H]1CCC(=O)NC1=O)C2 775 | C[C@@H]1CC[C@@H](N2CCCC[C@@H]2C(=O)OC(C)(C)C)CN1 776 | CN(C)[C@@H]1CC[C@@H]2CN(C(=O)NCc3ccccc3CS(=O)(=O)N3CCCC3)C[C@H]2C1 777 | Cc1ccc(-c2cnc(CCc3nc(-c4ccc(N5CCOC5=O)nc4)no3)o2)cc1 778 | Cc1n[nH]cc1C(=O)N1[C@H]2CC[C@@H]1C[C@H]2NC(=O)c1cc2ccccc2[nH]1 779 | CCCC[C@H]1C[C@H](N2CC[C@@H]3NCC[C@H]32)CCN1 780 | COc1ccccc1C[C@H](NC(=O)C(=O)NC[C@H](C)CN1CCN(C)CC1)C(C)C 781 | CC(C)c1ccc(CN(C(=O)CN(C)C[C@@H](O)Cc2ccccc2)C2CC2)cc1 782 | Cc1ncoc1CN1CCO[C@H](CNC(=O)[C@@]2(C)C[C@@H]2c2ccccc2)C1 783 | O=C(CCc1cc(Cl)ccc1Br)N1CCOC[C@@]12CCOC2 784 | O=C(N[C@@H]1CCCC[C@@H]1n1cccn1)N1CCN(C[C@@H]2CCOC2)CC1 785 | COc1cc(Cc2ccccc2S(C)(=O)=O)cc(OC)c1 786 | C[C@H](OC(=O)c1cccnc1C(F)F)C(=O)N[C@@H]1CCOc2ccccc21 787 | Cc1ccc([C@](O)(CC(=O)N2[C@H]3CC[C@H]2COC3)C(F)(F)F)o1 788 | Cc1nnc(N2CCC[C@H]2c2ccsc2)n1CCCN(C)Cc1ccccc1 789 | CCSc1ccccc1CCNC(=O)N1CCO[C@H](CC(F)(F)F)C1 790 | CC(C)n1cnc(C(=O)N2CCC[C@@H](NC(=O)CCN(C)C)CC2)c1 791 | Cc1cnc2n1CCC21CCN(S(=O)(=O)c2ccc(OCc3ccccc3)cc2)CC1 792 | C[C@@H](NC(=O)N(C)CCF)c1cccc(C2CC2)c1 793 | O=C(NC[C@@H](O)c1cncs1)c1ccc(CSc2ccc(Cl)cc2)cc1 794 | CCC[C@@H]1C[C@@H](C(=O)N2CCC[C@]2(C)Cc2cccc(F)c2)CCO1 795 | Cc1cocc1C(=O)NC[C@@H]1CN(C(=O)Cc2ncc[nH]2)C[C@@H]1C 796 | O=C(NC[C@@H]1CCN1C1CCOCC1)c1cc(I)c[nH]1 797 | CCc1cc(NC(=O)CCNC(=O)OC)n(C)n1 798 | CC[C@H](C)[C@@H](C)NS(=O)(=O)CCCN1CCOCC1 799 | O=C(N[C@@H]1CC[C@@H](CNCc2cnsn2)CC1)c1cnn[nH]1 800 | C[C@@H](NC(=O)[C@@H]1CCNC1=O)c1noc(C(F)(F)F)n1 801 | Cc1nc2n(n1)CCN(C(=O)C(=O)N[C@@H](C)c1ccc(Oc3ccccc3)c(F)c1)C2 802 | CN(C[C@@H]1CCN1C(=O)C1CC(C)(C)C1)C(=O)C[C@H]1CCC(=O)NC1 803 | CCN1C[C@@H](c2nnc(N(CC)CCOc3ccc(Br)cc3)n2C)CC1=O 804 | C[C@H](NC(=O)c1ccccc1C(=O)c1ccc(F)c(F)c1)c1ncn(C)n1 805 | COCCC(=O)N1CCC[C@H]1CNC(=O)C(C1CCC1)C1CCC1 806 | COC(=O)C1(CNC(=O)c2cc(C(=O)c3cccc4ccccc34)cn2C)CCOCC1 807 | COC(=O)[C@@]1(C)CN(Cc2cc(Br)ccc2OC(F)F)C[C@@H]1C 808 | COCC1(C(=O)N2CC(NC(=O)c3cc(C)n(C(C)C)n3)C2)CCC1 809 | C[C@@H](NC(=O)c1cccn1Cc1ccncc1)c1ccc(F)cc1OC(F)F 810 | CCN1CC[C@H](N[C@@H]2CC(C)(C)Oc3cc(F)ccc32)[C@@H](C)C1 811 | CCNS(=O)(=O)c1ccc(C(=O)N2C[C@@H]3[C@H](C2)C3(F)F)cc1 812 | CC(C)c1cc(C(=O)N2CCN(C)CC2)cs1 813 | CN(C)c1ccc(NC(=O)CCN2CCC(c3cccc(Br)c3)CC2)cc1 814 | CC[C@@H](F)C(=O)N1CC2(CN(C(=O)/C=C\C3CC3)CCO2)C1 815 | O=C1NCN(c2ccc(F)cc2)C12CCN(Cc1ncccc1C(F)(F)F)CC2 816 | CC(C)OCCCC(=O)N(C)c1cccc2cccnc12 817 | CCO[C@@H]1C[C@@H](N(C)CCC(=O)Nc2ccccc2SC)C1(C)C 818 | CN(Cc1ccccc1)C(=O)CSc1nnc(-c2c[nH]c3ccccc23)n1C1CC1 819 | NC(=O)C(=O)N(CCO)C1CCN(C(=O)C[C@@H]2CCCCO2)CC1 820 | Cc1cc(C)c2c(-c3ccccc3)nc(S[C@H](C)C(=O)NC(=O)NC3CC3)n2n1 821 | C[C@@H]1CN(C)CC[C@@H]1N(C)C(=O)NC[C@@H](c1ccco1)N(C)C 822 | Cc1cscc1C(=O)N1CC([C@@H](C)NC(=O)c2cn(C)c(O)n2)C1 823 | Cc1cc(C)cc([C@@H](O)CNC(=O)C(=O)Nc2cccc(C(F)(F)F)c2)c1 824 | CCc1c(Br)cccc1C(=O)N1CCC[C@@H](N2Cc3c(F)cccc3C2=O)C1 825 | COc1cc(Br)ccc1NC(=O)N[C@@H]1C[C@H](OC(C)(C)C)[C@H]1n1cccn1 826 | COCCO[C@H](C)c1nnc(N2CCN([C@H](C)C(=O)N3CCCC3)CC2)n1CC1(C)CCC1 827 | CC(C)N1CC[C@@H](N(C)C(=O)OC[C@H]2CCCO2)C1 828 | NC(=O)c1cc(NC(=O)c2cccc(-n3cccc3)c2)ccc1Cl 829 | O=C1CC(C(=O)N[C@@H]2CN(C(=O)c3ccnc(F)c3)C[C@H]2O)CC(=O)N1 830 | CC(C)(C)OC(=O)N1CCCc2cc(N(c3c(N)cccc3F)[C@@H]3CC[C@@H](O)CC3)ccc21 831 | CO[C@@H](C)Cn1c(-c2ccc(Cl)cc2F)nnc1N1CCN(CC(=O)N2CCCC[C@H]2C)CC1 832 | Cc1ccccc1-c1nc(CNC(=O)Nc2nc3c(s2)C[C@H](C(C)C)CC3)no1 833 | CC[C@@](C)(C(=O)OC)N(CC1CC1)C(=O)/C=C\CN(C)C 834 | CCC(=O)N[C@H](CNC(=O)c1cc(Cl)no1)C(C)(C)C 835 | Cc1nc(-c2ccc(CNC(=O)NCc3cc(F)cc(Br)c3)cc2)cs1 836 | Cn1nccc1[C@@H](NC(=O)/C=C/C1CCOCC1)C(=O)O 837 | C[C@H]1CCC[C@H](C)N1NC(=O)C1CCN(c2ncc(C(F)(F)F)cc2Cl)CC1 838 | CCOC(=O)Cn1ccc(NC(=O)c2nc(-c3ccccc3)n(-c3ccccc3)n2)n1 839 | CCc1ncc(C(=O)N2CC[C@H](N(C)Cc3cnn[nH]3)C2)s1 840 | Cc1cnc(COC(=O)[C@H](NS(=O)(=O)c2ccc3ccccc3c2)[C@@H](C)O)nc1 841 | C[C@H](O)CN[C@@H]1CC[C@@H](NC(=O)c2c(F)ccc(F)c2F)CC1 842 | CCO[C@@H](CC)C(=O)N1CCCCC[C@@H]1CNC(=O)C=C1CCC1 843 | O=C(NC1CCCCC1)c1ccc(NC(=O)[C@@H]2CCc3ccccc3C2)cc1 844 | COC(=O)[C@H](CC1CCOCC1)NC(=O)c1nn(-c2ccccc2C(F)(F)F)cc1O 845 | O=C(OCc1cccc(C(=O)N2CCCCC2)c1)c1cnc([C@@H]2CCCO2)s1 846 | CC(C)Cc1ccc(C(=O)CCC(=O)N2CC[C@@H](C(N)=O)C2)cc1 847 | CCO[C@@H](CN1C[C@@H]2CCN(C(=O)c3ccc(F)cc3)[C@@H]2C1)C1CC1 848 | C[C@@H](C(=O)Nc1ccnn1Cc1ccc(Cl)c(F)c1)C(F)(F)F 849 | CCc1nc(CN(C)C[C@H](C)NC(=O)c2nn(C)cc2C)no1 850 | Cc1nc(C2(NC(=O)[C@H]3C[C@@H]3c3cccc(Br)c3)CCCC2)no1 851 | C[C@H]1CCCN(C(=O)c2ccc(C(=O)OCc3ccccc3)[nH]2)[C@@H]1C(=O)OC(C)(C)C 852 | CC[C@@H](Nc1cccc(-c2cc[nH]n2)c1)C1CCCC1 853 | C[C@H](NC(=O)C(C)(C)F)[C@@H](C)NCc1nnc(C(F)(F)F)s1 854 | C[C@@H](CNC(=O)[C@H]1CCCC(=O)N1)NC(=O)CC1(O)CCC1 855 | O=C(Nc1ccc(-c2nccs2)cc1)c1cn([C@H]2CCNC2)nn1 856 | CN(Cc1ccccc1)C1CCN(Cc2ccc3ncc(Br)cc3c2)CC1 857 | CCC(=O)NC[C@H]1CN(C(=O)c2sccc2CC)CCC1(F)F 858 | C[C@H](C(=O)N(C)CCCNCC(N)=O)n1nnnc1C(C)(C)C 859 | COc1cc(CCC(=O)Nc2c(C)cccc2C)cc(OC)c1 860 | CCN(CCO)C(=O)C(=O)NCc1nc(C)no1 861 | O=C(NCc1ccc(C2CCC2)cc1)NCC1(C2(O)CCC2)CCC1 862 | Cc1ccccc1Oc1cccc(S(=O)(=O)N[C@@H]2CCS(=O)(=O)C2)c1 863 | O=Cc1cccc(OCCC(=O)N2CCC3(CCC3)C2)c1 864 | CCOc1ccc(-c2nc(C(=O)N3CCc4cc(S(=O)(=O)N(C)C)ccc43)cs2)cc1 865 | O=C1CO[C@@]2(CCN(C(=O)c3c[nH]nc3C3CC3)C2)CN1Cc1ccccc1 866 | COC(=O)c1ccc(NC(=O)c2cc(C)n(C(C)C)n2)cc1C(=O)OC 867 | Cc1ncc(C)c(N2C[C@@H](NC(=O)c3[nH]cnc3C)CC[C@H]2C)n1 868 | OCCCCCn1c(Cc2ccccn2)nnc1N1CCN(c2ncc(Cl)cc2Cl)CC1 869 | COC(=O)[C@H](CO[C@@H](C)c1ncccc1F)NC(=O)OC(C)(C)C 870 | Cn1nnnc1NC(=O)[C@H]1C[C@H]2CC[C@H]1N2C(=O)C1CC(F)(F)C1 871 | CCN(C(=O)c1cscn1)[C@H]1CCN(c2nccc(SC)n2)C1 872 | CC(C)(C)OC(=O)N[C@@H]1CCCN(C(=O)c2c[nH]c(-c3nn[nH]n3)c2)C1 873 | Cc1cc(=O)c(C(=O)NC2CN(C(=O)[C@@H]3C[C@H]3C3CCC3)C2)c[nH]1 874 | C[C@H](C[C@H]1CCOC1)NC(=O)c1cc(O)ccc1Cl 875 | O=C(COCC1CC1)N[C@@H](CO)CNC(=O)[C@@H]1OC[C@@H]2CCC[C@@H]21 876 | CCc1ccccc1CNC(=O)[C@@H]1CCN(Cc2ccccc2)C1 877 | Cn1ncnc1C(=O)N1C[C@H]2CC[C@H]1[C@@H]2NCCc1ccc(Cl)cc1Cl 878 | CCCC[C@@H](C)N(C)C(=O)c1cc(F)cnc1O 879 | CC(=O)N[C@H]1CC(=O)N(C2CN(C(=O)c3ccnn3C(F)F)C2)C1 880 | O=C(CCCn1cncn1)NC[C@@H]1CCN1C(=O)[C@@H]1CCC1(F)F 881 | COCC1(C(=O)N2CC[C@@](C)(CNC(=O)[C@@H]3OC[C@@H]4CCC[C@@H]43)C2)CC1 882 | C[C@H](NC(=O)OC(C)(C)C)[C@H]1CCN(c2nnc(-c3ccccc3)n2CC(C)(C)O)C1 883 | C[C@@H]1C[C@@H](c2ccccc2)CN1C(=O)c1ccc2cncn2c1 884 | C[C@@H](NC(=O)c1ccccc1COc1cccc(C=O)c1)C(=O)N1CCCC[C@H]1C 885 | OC[C@@]12C[C@H]1CN(Cc1ccc(OCc3cccnc3)cc1)C2 886 | COc1cc(C(=O)NC[C@@H]2C[C@H](NCc3cscn3)C2)on1 887 | C[C@H]1C[C@@H](NC(=O)COCC2CC2)CN1C(=O)C1=COCCC1 888 | NC(=O)[C@H]1CCC[C@H](NC(=O)NCc2ncoc2-c2ccccc2)C1 889 | Cc1nn(C)cc1C(=O)NC/C=C\CNC(=O)CN1CCOCC1 890 | Cc1ccccc1CNC[C@@H]1CC[C@@H](NC(=O)Cc2nc[nH]n2)C1 891 | CC(C)(NC(=O)c1ccc(-c2noc(-c3ccc(F)cc3)n2)cc1)c1cnn[nH]1 892 | Cc1cc(C(=O)N2CC3(C[C@H]3C(=O)NC(C)(C)C)C2)n(CCF)n1 893 | C[C@H](OC(=O)C[C@H]1C=CCCC1)c1nnc(-c2cccs2)o1 894 | CCOC[C@@H]1CCCN(Cc2c(C)nn(Cc3ccc(F)cc3)c2Cl)C1 895 | COC(=O)c1ccc(S(=O)(=O)N(C)CCN2CCNCC2)c(C)c1 896 | CCOc1cccnc1NC1=CC[C@H](N2CCOCC2)CC1 897 | O=C(NCCc1nc(-c2c[nH]c(=NCC(F)F)cn2)no1)c1ccc(F)cc1 898 | Cc1cc(C(=O)N[C@@H]2CN(C(=O)c3ccnc(C4CC4)c3)C[C@H]2O)cs1 899 | CCNS(=O)(=O)c1ccc(CC(=O)NCc2cccc(C(=O)N3CCOCC3)c2)cc1 900 | CC[C@H](C)NC(=O)CN[C@@H](C)CNC(=O)c1ccc(C)s1 901 | O=C(NCCN1CCN(Cc2ccccc2)CC1)NC[C@@H]1CCc2ccccc2C1 902 | CC(C)C(=O)NC1CCN(c2nnc(-c3ccc(Cl)nc3)n2C[C@@H]2COCCO2)CC1 903 | CSc1ccc(C)c(NC(=O)[C@H]2CCn3c(cnc3C)C2)c1 904 | O=C(O)C1CCN(c2ccc(CN3CCOC[C@H]3CC(F)F)o2)CC1 905 | CCOc1ccc(S(=O)(=O)N(C)[C@@H]2CCN(C(C)C)C2)c(C)c1 906 | COc1cc(F)ccc1Nc1ccccc1[S@@](C)=O 907 | Cc1cccn2cc(CC(=O)NCCCNC(=O)[C@H]3C[C@H]3C)nc12 908 | Cc1cc(C(=O)N2CC[C@@H]3CN(C(=O)c4conc4C(C)C)[C@@H]3C2)ccn1 909 | CN(C)[C@H](CNC(=O)[C@H](CO)NC(=O)c1cccc(F)n1)c1cccs1 910 | CC(C)c1ccc(CNc2cc(Cl)ncc2[N+](=O)[O-])cc1 911 | Cc1ccc(N[C@@H](c2cccc(F)c2)c2cnn(C)c2)cc1-c1ncco1 912 | CCCCCn1cc(CNS(=O)(=O)c2cncc(OC)c2)c(C)n1 913 | CCOC1CC(CN[C@H](C)CNC(=O)CC(C)(C)O)C1 914 | c1ccc2c(c1)cnn2C1CCN(c2cnc3ccccc3n2)CC1 915 | C[C@H](C(=O)N[C@@H]1CCOC(C)(C)C1)[C@H](C)C(=O)N[C@@H]1CCOC(C)(C)C1 916 | C[C@@H]1OCC[C@]1(O)CN(Cc1ccccc1)C(=O)N[C@H]1CC(=O)N(C(C)(C)C)C1 917 | O=C(COc1ccccc1)NCC(=O)Nc1n[nH]c2nc(O)ccc12 918 | C[C@H](O)C[C@H]1CCCN1C(=O)C(=O)Nc1ccccc1C(=O)N1CCOCC1 919 | CCOC[C@@H]1CCN(c2nnc(-c3cc4ccccc4o3)n2Cc2cccs2)C1 920 | CC(C)NC(=O)CN(C)Cn1nc(COc2ccccc2F)n([C@H](C)[C@@H]2C[C@H]3CC[C@H]2C3)c1=S 921 | C[C@@H]1CC[C@H](C(=O)N[C@H]2CCCN(Cc3cccc(F)c3F)C2)O1 922 | CCc1nnc(N2C[C@H](C)O[C@H](CC)C2)n1Cc1cnn(Cc2ccccc2)c1 923 | C[C@@H](NC(=O)N[C@H]1CCc2ccc(-c3ccccc3)cc21)c1ccc2nc(O)[nH]c2c1 924 | CCN(CC)[C@@H](CNC(=O)Nc1cc(C)c(C(=O)OC)cn1)c1ccsc1 925 | COc1ccc(C(C)=O)cc1-c1cc(C)cnc1F 926 | O=C1CN(Cc2c(F)ccc(O)c2F)CCN1 927 | CCCCO[C@@H]1C[C@@H](NCC2(C(=O)O)CCC2)C1(C)C 928 | O=C(C[C@H]1CCC2(CCC2)CO1)NC[C@H]1CCCC(F)(F)C1 929 | Cc1cc(N(C)C[C@@H](C)c2nnn[nH]2)c(F)cc1[N+](=O)[O-] 930 | CCc1nocc1CN[C@@H](CC)CNC(=O)Cc1ccc(C)s1 931 | CC[C@H](C)N(C)CCn1c(Cc2ccsc2)nnc1N1CC[C@H](C)N(Cc2ccccc2)CC1 932 | Cc1ncc(C(=O)N2CC[C@@H]2CNC(=O)[C@@H](C)Oc2ccccc2)[nH]1 933 | CC[C@@]1(C)C[C@H]1C(=O)NCC1(NC(=O)c2[nH]cnc2C)CCC1 934 | O=C(NCc1cc(F)ccc1Br)NCc1cc(Cl)ccc1OC(F)F 935 | O=C(CCC(=O)N1CCSc2ccccc21)N1CC[C@@H](c2ccccc2)C1 936 | Cc1ccsc1CNC(=O)CN1CC[C@@H](CS(C)(=O)=O)C1 937 | CC(C)c1ccc(C(=O)N[C@H](C)CCO)s1 938 | Cn1nccc1COC(=O)[C@H]1CCCCN1C(=O)c1ccc(Br)c(F)c1 939 | CCc1cccc(-c2noc(CCC(=O)c3cccs3)n2)c1 940 | C[C@@H]1C[C@H](NCCO)CCN1C(=O)c1cc(C2CCCC2)no1 941 | C[C@@H]1CCN(C(=O)C(=O)N2CCC(NCC3CC3)CC2)C[C@@H]1CO 942 | Cc1cc(S(=O)(=O)Nc2ccc3oc(C(C)(C)C)nc3c2)sc1C(=O)O 943 | CCOc1cc(Cl)ccc1NC(=O)N[C@@H]1CCc2ccccc2-n2ccnc21 944 | COCCCCCN[C@@H]1C[C@H]2CC[C@H]1N(C(=O)C1CC=CC1)C2 945 | COc1cccc([C@H](Nc2ccc([N+](=O)[O-])c(C)n2)c2nccn2C)c1 946 | C[C@@H](Nc1nccc(N2CCOCC2)n1)c1ccc(Cl)cc1 947 | C[C@H](CCc1ccc2c(c1)OCO2)NC(=O)N1CCC2(CCN(C(=O)OC(C)(C)C)CC2)C1 948 | CCCc1nsc(NC2(CNC(=O)c3c(C)ncn3C)CC2)n1 949 | Cc1cn(C)nc1C(=O)NC[C@H](C1CC1)N(C)C(=O)c1ocnc1C 950 | O=C(Nc1ccc(OC(F)F)cc1F)N[C@@H]1CC[C@@H](CO)CC1 951 | CN(CC(=O)Nc1cccc(F)c1)c1cccc(C(N)=O)c1[N+](=O)[O-] 952 | CC[C@@H](COC)NC(=O)N[C@@H]1CCCC2(C1)OCCO2 953 | CN(C(=O)COC(=O)c1c[nH]c(C(=O)N2CCCC2)c1)[C@H](c1ccccc1)c1ccc(F)cc1 954 | CO[C@@]1(CNC(=O)N2CCN(Cc3ccc(C(F)(F)F)cc3)C(=O)C2)CCOC1 955 | Cc1c(C(=O)NC2(CNC(=O)C3CC3)CCC2)oc2ccccc12 956 | COC(=O)[C@]1(C(F)(F)F)CCN(C(=O)C(=O)Nc2ccc3c(c2)N(C)CCO3)C1 957 | C[C@@H]1CN(Cc2c(Cl)cnn2C)C[C@H](C(N)=O)O1 958 | COc1ccc([C@@H](OC)[C@H](C)NC(=O)Cc2ccc(OC)c([N+](=O)[O-])c2)cc1 959 | CNC(=O)CCCC(=O)N[C@@H]1CCN(C(=O)c2c[nH]cc2C2CC2)C1 960 | COc1cccc([C@@H]2CN(C(=O)c3cc(Cl)ccn3)CC2(C)C)c1 961 | CCC(CC)n1ncc(C(=O)N(C)CCNS(=O)(=O)c2ccc(C)cc2)c1C 962 | C[C@@H]1CCCN(Cc2ccccc2CNC(=O)N[C@H]2CCN(C(C)(C)C)C2)C1 963 | CCC(CC)NC(=O)c1nnc(N2CCS[C@H](C(C)C)C2)n1C[C@H]1CC[C@@H](C)C1 964 | CCCOc1c(F)cc(F)c(-c2nc(C(F)(F)F)ccc2OC)c1F 965 | Cc1occc1CNC(=O)CCNS(=O)(=O)c1cccnc1 966 | CCc1cc(-c2noc(-c3cnccc3OC(C)C)n2)ccc1F 967 | Cc1cc(N2CC[C@](C)(NC(=O)[C@H](C)C(F)(F)F)C2)nc(C)n1 968 | CCCCCCN(O)C(=O)N[C@H]1CCCc2c(cccc2OC)C1 969 | FC(F)(F)c1ccccc1CNC(=S)NCCSc1ccccc1 970 | CC(=O)N1CCC[C@H](Cn2c(CN3CCCC3=O)nnc2N(C)Cc2cccc(Cl)c2)C1 971 | Fc1cc2c(cc1F)N(Cc1cc(Cl)cc(Cl)c1F)CCO2 972 | CCOC(C)(C)Cn1c([C@H](C)Oc2ccccc2F)nnc1N1CCN(CC(F)(F)F)[C@@H](C)C1 973 | O=C(Nc1ccc(O)c(C(=O)Nc2nc3ccccc3[nH]2)c1)OCC(F)(F)F 974 | COc1ncnc(OC)c1CNC(=O)c1nc2nc(Cl)ccc2[nH]1 975 | CCC(C)(C)c1nnc(NC2CCN(C[C@@H]3CCCO3)CC2)o1 976 | CCc1cc2c(COC(=O)CNC(C)=O)cc(=O)oc2cc1O 977 | CCCCNC(=O)[C@H]1CCCN(C(=S)Nc2ccc(C(C)=O)cc2)C1 978 | CC(C)c1ccccc1NC(=O)C(=O)N[C@@H](c1nncn1C)C(C)C 979 | CCS(=O)(=O)N1CCC[C@@H](C(=O)Nc2ccc3ccn(C)c3c2)C1 980 | CCC(CC)(Cn1c(C2CCC2)nnc1N1CCC([C@@](C)(O)C(F)(F)F)CC1)SC 981 | Cc1ccc(-c2noc(CN3CC[C@@H](CO)[C@@H](O)C3)n2)cc1 982 | Cc1cc(S(=O)(=O)N2CC=C(c3c(C)[nH]c4ccccc34)CC2)c2ncccc2c1 983 | Cc1noc(CN[C@@H]2CCN(C(=O)c3ccc4ccncc4n3)C2)n1 984 | Cc1ccc2sc(C(=O)OCc3ncnn3C)cc2c1 985 | C[C@H](NS(=O)(=O)c1ccccc1F)C(=O)N[C@@H](c1ccc(F)cc1)C1CCCC1 986 | O=C(c1cc(F)cc(Cl)c1O)N1CC[C@H](Cc2ccc(F)cc2)C1 987 | COC(=O)c1ncc(-c2cccc(O)c2)cc1C 988 | CC(=O)N[C@@H]1CCN(C(=O)c2cn(CC(F)F)nc2C)C[C@@H]1C 989 | CC(=O)N[C@@H](CC(=O)OCc1ccc(S(=O)(=O)N2CCCC2)o1)c1cccs1 990 | CCOCc1nnc(N2CCC[C@@H](C(=O)OC)C2)n1CCCC(C)(C)C 991 | C[C@@H]1C[C@H](c2ccccc2)CN1C(=O)c1ccn(-c2ccc(Br)cc2)n1 992 | CN1CC[C@H](CC(=O)NC2[C@H]3CN(C(=O)c4cnnn4C)C[C@H]23)C1=O 993 | CCN(CC)c1ccc(-n2c(N)c(N)c(OS(=O)(=O)O)nc2=N)cc1 994 | CCN(CCn1c(-c2nnc(O)c3ccccc23)nnc1N1CCCC[C@@H](COC)C1)C(C)C 995 | Brc1csc(-c2noc(CN3CCC[C@@H]3C3CCOCC3)n2)c1 996 | Cc1ccc(Cl)cc1NC(=O)[C@H](C)OC(=O)c1cnn(-c2ccccc2)c1C 997 | C[C@H]([C@@H]1Cc2ccccc2O1)N(C)c1nnc(-c2ccc[nH]2)n1C[C@@H]1CCCCO1 998 | COc1cccc(Cl)c1CNC(=O)C(=O)N(C)[C@H]1CC[C@@H](C)C1 999 | C[C@@H]1SCC[C@@H]1NC(=O)C(=O)Nc1ccccc1Sc1ccccc1 1000 | Cn1ccnc(NNC(=O)[C@@H]2CCCCN2Cc2cccnc2)c1=O 1001 | CCCC(=O)N1CCN(C(=O)c2ccc(C(C)(C)C)cc2)CC1 1002 | -------------------------------------------------------------------------------- /example/result_files.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/duaibeom-zz/MolFinder/e946cacc7fd13b4f457b22b7ee16645b98464360/example/result_files.tar.gz --------------------------------------------------------------------------------