OkayBoboLi commited on
Commit
f12d3b3
·
verified ·
1 Parent(s): 06cc59e

Add the PROTAC release

Browse files

Mirrors the CupOFMoCA-PDC layout: checkpoints/, configs/paper.json with the
reported sampling settings, docs/artifacts.json verified by
scripts/verify_release.py, and the generation outputs behind the reported
tables under results/.

DegradeMaster and EGFR-PROPK are published upstream without a license and are
not redistributed; scripts/fetch_third_party.py retrieves them at the pinned
commits. The unlicensed, unused ORCA C++ sources bundled with DeFoG are
excluded. DeFoG itself is MIT, with its license at src/defog/LICENSE.

This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. CupOFMoCA-PROTAC/CITATION.cff +30 -0
  2. CupOFMoCA-PROTAC/LICENSE +17 -0
  3. CupOFMoCA-PROTAC/NOTICE +46 -0
  4. CupOFMoCA-PROTAC/README.md +122 -0
  5. CupOFMoCA-PROTAC/checkpoints/protac_linker_finetune/epoch=99-v1.ckpt +3 -0
  6. CupOFMoCA-PROTAC/configs/paper.json +45 -0
  7. CupOFMoCA-PROTAC/data/linker.csv +0 -0
  8. CupOFMoCA-PROTAC/docs/ARTIFACTS.md +42 -0
  9. CupOFMoCA-PROTAC/docs/artifacts.json +132 -0
  10. CupOFMoCA-PROTAC/environment.yml +36 -0
  11. CupOFMoCA-PROTAC/md/README.md +172 -0
  12. CupOFMoCA-PROTAC/md/analyze_conformations.py +205 -0
  13. CupOFMoCA-PROTAC/md/environment_md.yml +38 -0
  14. CupOFMoCA-PROTAC/md/linker_design.md +86 -0
  15. CupOFMoCA-PROTAC/md/plot_results.py +135 -0
  16. CupOFMoCA-PROTAC/md/protac_md.py +314 -0
  17. CupOFMoCA-PROTAC/md/protacmd-lock-linux64.txt +296 -0
  18. CupOFMoCA-PROTAC/md/psa_ensemble.py +73 -0
  19. CupOFMoCA-PROTAC/md/psa_method_probe.py +71 -0
  20. CupOFMoCA-PROTAC/md/reference_protocol.md +58 -0
  21. CupOFMoCA-PROTAC/md/render_3d.py +81 -0
  22. CupOFMoCA-PROTAC/md/rg_basins.py +123 -0
  23. CupOFMoCA-PROTAC/md/run_candidate.sh +73 -0
  24. CupOFMoCA-PROTAC/md/ternary_span.py +111 -0
  25. CupOFMoCA-PROTAC/md/validate_psa.py +61 -0
  26. CupOFMoCA-PROTAC/requirements.txt +18 -0
  27. CupOFMoCA-PROTAC/results/README.md +46 -0
  28. CupOFMoCA-PROTAC/results/ablation_all/AGGREGATE.txt +9 -0
  29. CupOFMoCA-PROTAC/results/ablation_all/PROGRESS.txt +9 -0
  30. CupOFMoCA-PROTAC/results/ablation_all/accept_on_s123.smi +100 -0
  31. CupOFMoCA-PROTAC/results/ablation_all/accept_on_s123_clean.smi +100 -0
  32. CupOFMoCA-PROTAC/results/ablation_all/accept_on_s42.smi +100 -0
  33. CupOFMoCA-PROTAC/results/ablation_all/accept_on_s42_clean.smi +100 -0
  34. CupOFMoCA-PROTAC/results/ablation_all/accept_on_s456.smi +100 -0
  35. CupOFMoCA-PROTAC/results/ablation_all/accept_on_s456_clean.smi +100 -0
  36. CupOFMoCA-PROTAC/results/ablation_all/base_s123.smi +100 -0
  37. CupOFMoCA-PROTAC/results/ablation_all/base_s123_clean.smi +100 -0
  38. CupOFMoCA-PROTAC/results/ablation_all/base_s42.smi +100 -0
  39. CupOFMoCA-PROTAC/results/ablation_all/base_s42_clean.smi +100 -0
  40. CupOFMoCA-PROTAC/results/ablation_all/base_s456.smi +100 -0
  41. CupOFMoCA-PROTAC/results/ablation_all/base_s456_clean.smi +100 -0
  42. CupOFMoCA-PROTAC/results/ablation_all/both_s123.smi +100 -0
  43. CupOFMoCA-PROTAC/results/ablation_all/both_s123_clean.smi +100 -0
  44. CupOFMoCA-PROTAC/results/ablation_all/both_s42.smi +100 -0
  45. CupOFMoCA-PROTAC/results/ablation_all/both_s42_clean.smi +100 -0
  46. CupOFMoCA-PROTAC/results/ablation_all/both_s456.smi +100 -0
  47. CupOFMoCA-PROTAC/results/ablation_all/both_s456_clean.smi +100 -0
  48. CupOFMoCA-PROTAC/results/ablation_all/defog_local_edit_20260726_224039_final.json +2502 -0
  49. CupOFMoCA-PROTAC/results/ablation_all/defog_local_edit_20260726_224039_summary.csv +101 -0
  50. CupOFMoCA-PROTAC/results/ablation_all/defog_local_edit_20260726_224813_final.json +2502 -0
CupOFMoCA-PROTAC/CITATION.cff ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ cff-version: 1.2.0
2
+ message: "If you use this software, please cite the CupOFMoCA paper."
3
+ title: "CupOFMoCA: Coupled Objective-Guided Discrete Flows for Molecular Conjugate Assembly"
4
+ type: software
5
+ authors:
6
+ - family-names: Zhang
7
+ given-names: Ruoxi Rosie
8
+ - family-names: Li
9
+ given-names: Ziang
10
+ - family-names: Gu
11
+ given-names: Jiatao
12
+ - family-names: Chatterjee
13
+ given-names: Pranam
14
+ license: Apache-2.0
15
+ repository-code: "https://huggingface.co/ChatterjeeLab/CupOFMoCA"
16
+ preferred-citation:
17
+ type: conference-paper
18
+ title: "CupOFMoCA: Coupled Objective-Guided Discrete Flows for Molecular Conjugate Assembly"
19
+ authors:
20
+ - family-names: Zhang
21
+ given-names: Ruoxi Rosie
22
+ - family-names: Li
23
+ given-names: Ziang
24
+ - family-names: Gu
25
+ given-names: Jiatao
26
+ - family-names: Chatterjee
27
+ given-names: Pranam
28
+ collection-title: "Advances in Neural Information Processing Systems"
29
+ year: 2026
30
+
CupOFMoCA-PROTAC/LICENSE ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ Copyright 2026 Anonymous Authors (CupOfMoca ICLR Submission)
6
+
7
+ Licensed under the Apache License, Version 2.0 (the "License");
8
+ you may not use this file except in compliance with the License.
9
+ You may obtain a copy of the License at
10
+
11
+ http://www.apache.org/licenses/LICENSE-2.0
12
+
13
+ Unless required by applicable law or agreed to in writing, software
14
+ distributed under the License is distributed on an "AS IS" BASIS,
15
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ See the License for the specific language governing permissions and
17
+ limitations under the License.
CupOFMoCA-PROTAC/NOTICE ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ CupOFMoCA — PROTAC release
2
+ Copyright 2026 CupOFMoCA authors
3
+
4
+ The first-party code in this release is licensed under Apache License 2.0; see
5
+ LICENSE. Model weights and third-party downloads are subject to their own terms,
6
+ which users are responsible for reviewing.
7
+
8
+ Redistributed third-party code
9
+ ------------------------------
10
+
11
+ src/defog/
12
+ DeFoG, https://github.com/manuelmlmadeira/DeFoG
13
+ MIT License, reproduced at src/defog/LICENSE.
14
+ src/defog/src/datasets/protac_dataset.py is a first-party addition.
15
+ The upstream graph-benchmark evaluation helpers under
16
+ src/defog/src/analysis/orca/ are NOT redistributed: that C++ code carries no
17
+ license header and is unused by the PROTAC pipeline.
18
+
19
+ Third-party code that is NOT redistributed
20
+ ------------------------------------------
21
+
22
+ Two optional components are published by their authors without any license
23
+ file, so this release cannot lawfully redistribute them. Run
24
+ `python scripts/fetch_third_party.py` to obtain them from their upstream
25
+ repositories at the commits used for the paper, and review the upstream terms
26
+ before use.
27
+
28
+ DegradeMaster https://github.com/ABILiLab/DegradeMaster
29
+ pinned commit aa149beaf067a051e070b3b281f7dba43c2f3e90
30
+ Needed only for predicted-degradation scoring.
31
+
32
+ EGFR-PROPK https://github.com/Zhang-Ran-0119/EGFR-PROPK
33
+ pinned commit 6940cb90c449e6c6d0678508fc2f228da796e028
34
+ Needed only for the EGFR-only PK columns of batch_report.py.
35
+
36
+ Linker generation with scripts/generate.py does not require either component.
37
+
38
+ Derived data
39
+ ------------
40
+
41
+ The PROTAC-DB derived tables (data/linker.csv) and the target and E3 pocket
42
+ graphs used for degradation scoring were prepared by the CupOFMoCA authors from
43
+ publicly available sources: PROTAC-DB (Weng et al., Nucleic Acids Research 2021)
44
+ and the RCSB Protein Data Bank. The fine-tuned generator checkpoint under
45
+ checkpoints/ is a derivative of the released DeFoG GuacaMol checkpoint and
46
+ inherits its MIT terms.
CupOFMoCA-PROTAC/README.md ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # CupOFMoCA — PROTAC
2
+
3
+ Code and PROTAC model artifacts for **CupOFMoCA: Coupled Objective-Guided Discrete Flows for
4
+ Molecular Conjugate Assembly** (NeurIPS 2026).
5
+
6
+ This release supports the paper's PROTAC experiments: linker generation between a fixed
7
+ warhead and a fixed E3 ligand, under hard assembly-validity constraints and objective
8
+ guidance. For the peptide-drug conjugate half, see [`CupOFMoCA-PDC/`](../CupOFMoCA-PDC).
9
+
10
+ ## Model overview
11
+
12
+ The generator is a DeFoG discrete flow-matching model over molecular graphs, fine-tuned on
13
+ PROTAC-DB linkers. The warhead and E3-ligand subgraphs are held fixed throughout sampling;
14
+ only the linker subgraph is edited.
15
+
16
+ | Checkpoint | Role |
17
+ |---|---|
18
+ | `checkpoints/protac_linker_finetune/epoch=99-v1.ckpt` | DeFoG graph discrete-flow generator, fine-tuned for 100 epochs on 2,070 PROTAC-DB linker graphs |
19
+ | `src/classifier/protac_linker_clf.pkl` | generic linker validity/quality classifier |
20
+ | `src/classifier/protac_linker_clf_{ErlotinibVHL,BRD9VHL,CDK6CRBN}.pkl` | target-specific classifiers, auto-selected by `--protac_module` |
21
+
22
+ The checkpoint is loaded by this repository's own PyTorch code. This is not a Transformers
23
+ pipeline and provides no hosted-inference widget.
24
+
25
+ ## Quickstart
26
+
27
+ ```bash
28
+ hf download ChatterjeeLab/CupOFMoCA --include "CupOFMoCA-PROTAC/*" --local-dir .
29
+ cd CupOFMoCA-PROTAC
30
+ conda env create -f environment.yml && conda activate defog
31
+ pip install -e src/defog
32
+ python scripts/verify_release.py
33
+ ```
34
+
35
+ Generate 100 EGFR-VHL PROTACs with the reported configuration (one of three seeds):
36
+
37
+ ```bash
38
+ cd scripts
39
+ python generate.py \
40
+ --checkpoint ../checkpoints/protac_linker_finetune/epoch=99-v1.ckpt \
41
+ --protac_module ErlotinibVHL --fix_termini cooh --fast_scoring \
42
+ --num_samples 100 --num_batches 1 --num_steps 1500 --warmup_steps 100 \
43
+ --weights 4.0 2.0 4.0 --seed 42 \
44
+ --output_file ./protac_linkers_egfrvhl.smi --output_dir ../generation_logs
45
+ ```
46
+
47
+ Swap `--protac_module` for `BRD9VHL` or `CDK6CRBN` for the other two systems. Every
48
+ setting above is recorded in `configs/paper.json`.
49
+
50
+ `--weights` is positional over the three soft scorers: synthetic accessibility,
51
+ PROTAC-DB chemotype closeness, connectivity. The validity classifier is applied as a hard
52
+ mask and takes no weight.
53
+
54
+ ### Intended uses
55
+
56
+ - Reproduce and inspect the paper's PROTAC generation experiments.
57
+ - Generate computational PROTAC linker candidates for research and method development.
58
+ - Extend or compare constrained, multi-objective molecular-generation methods.
59
+
60
+ The release is not intended for clinical decisions, direct therapeutic use, or as a
61
+ substitute for chemical synthesis, experimental validation, toxicology, or safety
62
+ assessment.
63
+
64
+ ### Training data
65
+
66
+ The generator is the released DeFoG GuacaMol checkpoint fine-tuned on 2,070 PROTAC-DB
67
+ linker graphs (258 validation, 260 test). `data/linker.csv` is the derived linker table.
68
+ Architecture, optimization and scorer details are in Appendix H of the paper. Training
69
+ datasets are not redistributed beyond that derived table.
70
+
71
+ ### Evaluation
72
+
73
+ The paper evaluates generated PROTACs on EGFR-VHL, BRD9-VHL and CDK6-CRBN for standard
74
+ and assembly validity, predicted degradation, diversity and training-set similarity. The
75
+ runs behind those tables are in `results/`, documented in `results/README.md`. Predicted
76
+ degradation requires DegradeMaster, which is fetched rather than redistributed — see below.
77
+
78
+ ### Limitations
79
+
80
+ - Outputs and objective values are computational predictions, not experimentally validated
81
+ compounds or guarantees of efficacy, synthesizability, toxicity or safety.
82
+ - The released configurations cover three target/E3 systems with fixed anchor chemistry;
83
+ performance outside this scope has not been established.
84
+ - Predicted degradation comes from a model trained on overlapping PROTAC databases, so it
85
+ is an in-domain evaluation rather than an independent one.
86
+ - `scripts/runs/ablation_egfr.py` sweeps five weight slots, but the current `generate.py`
87
+ exposes three; the Morgan-fingerprint row of the weight ablation is documented by the
88
+ archived outputs in `results/` rather than re-runnable as-is.
89
+ - Results can vary with hardware and CUDA/PyTorch versions.
90
+
91
+ ## Repository layout
92
+
93
+ ```text
94
+ checkpoints/ generator weights
95
+ configs/paper.json the settings used for the reported runs
96
+ data/linker.csv PROTAC-DB derived linker table
97
+ docs/ artifact manifest (ARTIFACTS.md, artifacts.json)
98
+ md/ explicit-solvent molecular dynamics pipeline
99
+ results/ generation outputs behind the reported tables
100
+ scripts/ generate.py, batch_report.py, evaluate_linkers.py,
101
+ fetch_third_party.py, verify_release.py, runs/
102
+ src/protac/ per-target warhead + E3 builders
103
+ src/classifier/ validity gate, analyzer, classifiers
104
+ src/defog/ DeFoG discrete flow model (MIT, see src/defog/LICENSE)
105
+ ```
106
+
107
+ ## Third-party components
108
+
109
+ DeFoG is redistributed here under MIT. Two optional components — DegradeMaster
110
+ (degradation scoring) and EGFR-PROPK (EGFR-only PK columns) — are published upstream
111
+ without a license and so are **not** redistributed. Fetch them at the pinned commits used
112
+ for the paper:
113
+
114
+ ```bash
115
+ python scripts/fetch_third_party.py
116
+ ```
117
+
118
+ Linker generation does not require either. See `NOTICE` for the full statement.
119
+
120
+ ## Citation
121
+
122
+ See `CITATION.cff`.
CupOFMoCA-PROTAC/checkpoints/protac_linker_finetune/epoch=99-v1.ckpt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8cfb48d9f5b3bcabb28c4dce7548e1a792494c48f05150a1b262b5215c1da78f
3
+ size 255211895
CupOFMoCA-PROTAC/configs/paper.json ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "default_seeds": [
3
+ 42,
4
+ 123,
5
+ 456
6
+ ],
7
+ "num_candidates_per_seed": 100,
8
+ "num_batches": 1,
9
+ "num_steps": 1500,
10
+ "warmup_steps": 100,
11
+ "guidance_strength_beta": 5.0,
12
+ "top_k": 50,
13
+ "temperature": 1.0,
14
+ "position_sampling": "weighted",
15
+ "use_acceptance": false,
16
+ "fix_termini": "cooh",
17
+ "fast_scoring": true,
18
+ "weights": {
19
+ "synthetic_accessibility": 4.0,
20
+ "chemotype_closeness": 2.0,
21
+ "connectivity": 4.0
22
+ },
23
+ "weights_positional": [
24
+ 4.0,
25
+ 2.0,
26
+ 4.0
27
+ ],
28
+ "targets": {
29
+ "EGFR-VHL": {
30
+ "protac_module": "ErlotinibVHL",
31
+ "warhead": "gefitinib-piperazine (MS39)",
32
+ "e3": "VH032"
33
+ },
34
+ "BRD9-VHL": {
35
+ "protac_module": "BRD9VHL",
36
+ "warhead": "BI-7273-piperazine",
37
+ "e3": "VH032"
38
+ },
39
+ "CDK6-CRBN": {
40
+ "protac_module": "CDK6CRBN",
41
+ "warhead": "palbociclib-piperazine",
42
+ "e3": "pomalidomide"
43
+ }
44
+ }
45
+ }
CupOFMoCA-PROTAC/data/linker.csv ADDED
The diff for this file is too large to render. See raw diff
 
CupOFMoCA-PROTAC/docs/ARTIFACTS.md ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Model artifacts
2
+
3
+ Every local artifact the PROTAC pipeline loads. Run `python scripts/verify_release.py`
4
+ to check byte counts, SHA-256 hashes and private-path hygiene. The machine-readable
5
+ manifest is `docs/artifacts.json`.
6
+
7
+ | Artifact | Purpose | Size | SHA-256 |
8
+ |---|---|---:|---|
9
+ | `checkpoints/protac_linker_finetune/epoch=99-v1.ckpt` | DeFoG generator, fine-tuned on PROTAC-DB linkers | 255,211,895 B | `8cfb48d9f5b3bcabb28c4dce7548e1a792494c48f05150a1b262b5215c1da78f` |
10
+ | `src/classifier/protac_linker_clf.pkl` | linker classifier (generic) | 128,117 B | `fa667025962d132ce9f2ebf8f2dc49752416ed154792ca0c87344335fa714462` |
11
+ | `src/classifier/protac_linker_clf_BRD9VHL.pkl` | linker classifier (BRD9VHL) | 28,117 B | `eae385be1576fec674b8a537e50b56e1ab1fc47599a82ae277912d958c0b7d6f` |
12
+ | `src/classifier/protac_linker_clf_CDK6CRBN.pkl` | linker classifier (CDK6CRBN) | 30,035 B | `85bd40599d82c5cc8a35cc844d12d1066a0d4699bcc7e229937e1fe1d3daad3d` |
13
+ | `src/classifier/protac_linker_clf_ErlotinibVHL.pkl` | linker classifier (ErlotinibVHL) | 26,397 B | `e031d310829c7d196887e2fd077eff95be445ed1984516540ac69308c26384ee` |
14
+ | `src/classifier/protac_linker_clf_amine.pkl` | linker classifier (amine) | 76,524 B | `e0e851f41a004ea26e3b66caef83bf6ab4fa2229447427ab996e8a195c0df2d2` |
15
+ | `src/classifier/protac_linker_clf_amino_acid.pkl` | linker classifier (amino_acid) | 188,080 B | `2558addea35da16ddf82affaf68ea9046bc5b9b3d307f6ee668c117df2798428` |
16
+ | `src/degrademaster/data/case_study/arcrbn_pocket_graph.pt` | ARCRBN pocket graph | 35,405 B | `98f70b82b731760b2b25b9ae0e7b1a917a88fd215f2ba4e61cf1654207d137e3` |
17
+ | `src/degrademaster/data/case_study/brd4_pocket_graph.pt` | BRD4 pocket graph | 15,675 B | `8dbda805c329bc5804d95983acaf4260e712bfa8fefcc5f39d76b4d2cd3583b9` |
18
+ | `src/degrademaster/data/case_study/brd9_pocket_graph.pt` | BRD9 pocket graph | 201,019 B | `89346178dfdc8fd277c57d08293a903133a263b1206184224cf250f71ad8f3a0` |
19
+ | `src/degrademaster/data/case_study/cdk6crbn_pocket_graph.pt` | CDK6CRBN pocket graph | 32,607 B | `0193874c2150e40a2e8c7a6b4eddf1c9b1768ac0573716b0fbf79e365de62310` |
20
+ | `src/degrademaster/data/case_study/crbn_pocket_graph.pt` | CRBN pocket graph | 25,467 B | `6e4e8e6756a343379118150370061f1b781d36f1bc681693d6d7fd8a8d0bce12` |
21
+ | `src/degrademaster/data/case_study/egfr_pocket_graph.pt` | EGFR pocket graph | 32,602 B | `5d86cd0d80363bab3c2835aefa817181cd96b2e0c14b35c55e384cf8e9dc64c1` |
22
+ | `src/degrademaster/data/case_study/krasvhl_pocket_graph.pt` | KRASVHL pocket graph | 25,686 B | `79efc62c546142277c6cba995d7926ca0dc3b600c2e98cce766519054243284c` |
23
+ | `src/degrademaster/data/case_study/processed/ligase_pocket.pt` | VHL E3 pocket graph (collated) | 419,524 B | `3b35bb97bddce48ccc5ebddbdb435a98654b94f569441cf6f8bc66e3a11e4d38` |
24
+ | `src/degrademaster/data/case_study/arcrbn_target_feature.npy` | 30-d feature vector | 368 B | `9ef6c2c04f54c6585cdac4e3d0ffb38c15ba7d1912a29f25f6a4967c7e13799e` |
25
+ | `src/degrademaster/data/case_study/brd4_target_feature.npy` | 30-d feature vector | 368 B | `28a1903da353ff6a92c4d4b8828e66e7264bcd4f07a27329d2f898cf000f63e4` |
26
+ | `src/degrademaster/data/case_study/brd4crbn_target_feature.npy` | 30-d feature vector | 368 B | `28a1903da353ff6a92c4d4b8828e66e7264bcd4f07a27329d2f898cf000f63e4` |
27
+ | `src/degrademaster/data/case_study/brd9_target_feature.npy` | 30-d feature vector | 368 B | `dbe5d7e51907b44396a891a574010544f9e7461c09618d940fe26ddf59ef8473` |
28
+ | `src/degrademaster/data/case_study/cdk6crbn_target_feature.npy` | 30-d feature vector | 368 B | `4da1adf39d018d61cd80a67f5950eaf734b425b69690a157c392d792b020712a` |
29
+ | `src/degrademaster/data/case_study/crbn_e3_feature.npy` | 30-d feature vector | 368 B | `71f830577fd901b6be42b9bb8f02f12e25245aefafac709d0b68910dfa8214db` |
30
+ | `src/degrademaster/data/case_study/egfr_target_feature.npy` | 30-d feature vector | 368 B | `c31f02bfeb6ce63b0fcf41a7b235556dc2b76ab6054626116c08434a29b639de` |
31
+ | `src/degrademaster/data/case_study/krasvhl_target_feature.npy` | 30-d feature vector | 368 B | `51d50af89f905b6a4eb1f1d2b90d9ca8a2ee7e7dbace16fdab56e159f2c0385f` |
32
+ | `src/degrademaster/data/case_study/vhl_e3_feature_egfr.npy` | 30-d feature vector | 368 B | `aca7d4ba3f95a2d903e542f761c3d448323d7ff8a9e1d58e58d9b8bd55d0a74a` |
33
+ | `src/degrademaster/data/PROTAC/name.json` | PROTAC-DB entry table (property windows, similarity) | 3,419,093 B | `bbe5ffe734f416ecf153f4ab42a17c6a3a86a79cfcb0faa5a5f13a672733d575` |
34
+ | `data/linker.csv` | PROTAC-DB derived linker table | 703,569 B | `73e4be1680fe9e2e2cf7256ff3fa9423a9a7e480d9b1baa529081a2bc89ac5b1` |
35
+
36
+ DegradeMaster and EGFR-PROPK are published upstream without a license and are therefore
37
+ not redistributed; `python scripts/fetch_third_party.py` retrieves them at the commits
38
+ used for the paper. Their absence is reported, not failed, by the verifier.
39
+
40
+ The ORCA graphlet-counting C++ sources bundled with upstream DeFoG are excluded: they
41
+ carry no license header and are unused by the PROTAC pipeline.
42
+
CupOFMoCA-PROTAC/docs/artifacts.json ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "path": "checkpoints/protac_linker_finetune/epoch=99-v1.ckpt",
4
+ "bytes": 255211895,
5
+ "sha256": "8cfb48d9f5b3bcabb28c4dce7548e1a792494c48f05150a1b262b5215c1da78f"
6
+ },
7
+ {
8
+ "path": "src/classifier/protac_linker_clf.pkl",
9
+ "bytes": 128117,
10
+ "sha256": "fa667025962d132ce9f2ebf8f2dc49752416ed154792ca0c87344335fa714462"
11
+ },
12
+ {
13
+ "path": "src/classifier/protac_linker_clf_BRD9VHL.pkl",
14
+ "bytes": 28117,
15
+ "sha256": "eae385be1576fec674b8a537e50b56e1ab1fc47599a82ae277912d958c0b7d6f"
16
+ },
17
+ {
18
+ "path": "src/classifier/protac_linker_clf_CDK6CRBN.pkl",
19
+ "bytes": 30035,
20
+ "sha256": "85bd40599d82c5cc8a35cc844d12d1066a0d4699bcc7e229937e1fe1d3daad3d"
21
+ },
22
+ {
23
+ "path": "src/classifier/protac_linker_clf_ErlotinibVHL.pkl",
24
+ "bytes": 26397,
25
+ "sha256": "e031d310829c7d196887e2fd077eff95be445ed1984516540ac69308c26384ee"
26
+ },
27
+ {
28
+ "path": "src/classifier/protac_linker_clf_amine.pkl",
29
+ "bytes": 76524,
30
+ "sha256": "e0e851f41a004ea26e3b66caef83bf6ab4fa2229447427ab996e8a195c0df2d2"
31
+ },
32
+ {
33
+ "path": "src/classifier/protac_linker_clf_amino_acid.pkl",
34
+ "bytes": 188080,
35
+ "sha256": "2558addea35da16ddf82affaf68ea9046bc5b9b3d307f6ee668c117df2798428"
36
+ },
37
+ {
38
+ "path": "src/degrademaster/data/case_study/arcrbn_pocket_graph.pt",
39
+ "bytes": 35405,
40
+ "sha256": "98f70b82b731760b2b25b9ae0e7b1a917a88fd215f2ba4e61cf1654207d137e3"
41
+ },
42
+ {
43
+ "path": "src/degrademaster/data/case_study/brd4_pocket_graph.pt",
44
+ "bytes": 15675,
45
+ "sha256": "8dbda805c329bc5804d95983acaf4260e712bfa8fefcc5f39d76b4d2cd3583b9"
46
+ },
47
+ {
48
+ "path": "src/degrademaster/data/case_study/brd9_pocket_graph.pt",
49
+ "bytes": 201019,
50
+ "sha256": "89346178dfdc8fd277c57d08293a903133a263b1206184224cf250f71ad8f3a0"
51
+ },
52
+ {
53
+ "path": "src/degrademaster/data/case_study/cdk6crbn_pocket_graph.pt",
54
+ "bytes": 32607,
55
+ "sha256": "0193874c2150e40a2e8c7a6b4eddf1c9b1768ac0573716b0fbf79e365de62310"
56
+ },
57
+ {
58
+ "path": "src/degrademaster/data/case_study/crbn_pocket_graph.pt",
59
+ "bytes": 25467,
60
+ "sha256": "6e4e8e6756a343379118150370061f1b781d36f1bc681693d6d7fd8a8d0bce12"
61
+ },
62
+ {
63
+ "path": "src/degrademaster/data/case_study/egfr_pocket_graph.pt",
64
+ "bytes": 32602,
65
+ "sha256": "5d86cd0d80363bab3c2835aefa817181cd96b2e0c14b35c55e384cf8e9dc64c1"
66
+ },
67
+ {
68
+ "path": "src/degrademaster/data/case_study/krasvhl_pocket_graph.pt",
69
+ "bytes": 25686,
70
+ "sha256": "79efc62c546142277c6cba995d7926ca0dc3b600c2e98cce766519054243284c"
71
+ },
72
+ {
73
+ "path": "src/degrademaster/data/case_study/processed/ligase_pocket.pt",
74
+ "bytes": 419524,
75
+ "sha256": "3b35bb97bddce48ccc5ebddbdb435a98654b94f569441cf6f8bc66e3a11e4d38"
76
+ },
77
+ {
78
+ "path": "src/degrademaster/data/case_study/arcrbn_target_feature.npy",
79
+ "bytes": 368,
80
+ "sha256": "9ef6c2c04f54c6585cdac4e3d0ffb38c15ba7d1912a29f25f6a4967c7e13799e"
81
+ },
82
+ {
83
+ "path": "src/degrademaster/data/case_study/brd4_target_feature.npy",
84
+ "bytes": 368,
85
+ "sha256": "28a1903da353ff6a92c4d4b8828e66e7264bcd4f07a27329d2f898cf000f63e4"
86
+ },
87
+ {
88
+ "path": "src/degrademaster/data/case_study/brd4crbn_target_feature.npy",
89
+ "bytes": 368,
90
+ "sha256": "28a1903da353ff6a92c4d4b8828e66e7264bcd4f07a27329d2f898cf000f63e4"
91
+ },
92
+ {
93
+ "path": "src/degrademaster/data/case_study/brd9_target_feature.npy",
94
+ "bytes": 368,
95
+ "sha256": "dbe5d7e51907b44396a891a574010544f9e7461c09618d940fe26ddf59ef8473"
96
+ },
97
+ {
98
+ "path": "src/degrademaster/data/case_study/cdk6crbn_target_feature.npy",
99
+ "bytes": 368,
100
+ "sha256": "4da1adf39d018d61cd80a67f5950eaf734b425b69690a157c392d792b020712a"
101
+ },
102
+ {
103
+ "path": "src/degrademaster/data/case_study/crbn_e3_feature.npy",
104
+ "bytes": 368,
105
+ "sha256": "71f830577fd901b6be42b9bb8f02f12e25245aefafac709d0b68910dfa8214db"
106
+ },
107
+ {
108
+ "path": "src/degrademaster/data/case_study/egfr_target_feature.npy",
109
+ "bytes": 368,
110
+ "sha256": "c31f02bfeb6ce63b0fcf41a7b235556dc2b76ab6054626116c08434a29b639de"
111
+ },
112
+ {
113
+ "path": "src/degrademaster/data/case_study/krasvhl_target_feature.npy",
114
+ "bytes": 368,
115
+ "sha256": "51d50af89f905b6a4eb1f1d2b90d9ca8a2ee7e7dbace16fdab56e159f2c0385f"
116
+ },
117
+ {
118
+ "path": "src/degrademaster/data/case_study/vhl_e3_feature_egfr.npy",
119
+ "bytes": 368,
120
+ "sha256": "aca7d4ba3f95a2d903e542f761c3d448323d7ff8a9e1d58e58d9b8bd55d0a74a"
121
+ },
122
+ {
123
+ "path": "src/degrademaster/data/PROTAC/name.json",
124
+ "bytes": 3419093,
125
+ "sha256": "bbe5ffe734f416ecf153f4ab42a17c6a3a86a79cfcb0faa5a5f13a672733d575"
126
+ },
127
+ {
128
+ "path": "data/linker.csv",
129
+ "bytes": 703569,
130
+ "sha256": "73e4be1680fe9e2e2cf7256ff3fa9423a9a7e480d9b1baa529081a2bc89ac5b1"
131
+ }
132
+ ]
CupOFMoCA-PROTAC/environment.yml ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: defog
2
+ channels:
3
+ - conda-forge
4
+ - nvidia
5
+ - pytorch
6
+ dependencies:
7
+ - python=3.9
8
+ - rdkit=2023.03.2
9
+ - graph-tool=2.45
10
+ - pytorch==2.4.0
11
+ - pytorch-cuda=12.1
12
+ - psi4=1.9.1
13
+ - pip=24.2
14
+ - pip:
15
+ - ipykernel==6.29.5
16
+ - hydra-core==1.3.2
17
+ - imageio==2.31.1
18
+ - matplotlib==3.7.1
19
+ - networkx==2.8.7
20
+ - numpy==1.23
21
+ - omegaconf==2.3.0
22
+ - overrides==7.3.1
23
+ - pandas==1.4
24
+ - pyemd==1.0.0
25
+ - PyGSP==0.5.1
26
+ - pytorch_lightning==2.0.4
27
+ - scipy==1.11.0
28
+ - setuptools==68.0.0
29
+ - torch_geometric==2.3.1
30
+ - torchmetrics==0.11.4
31
+ - tqdm==4.65.0
32
+ - wandb==0.15.4
33
+ - seaborn==0.13.2
34
+ - gpustat==0.6.0
35
+ - black==24.3.0
36
+ - -e .
CupOFMoCA-PROTAC/md/README.md ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Free-PROTAC molecular dynamics
2
+
3
+ Explicit-solvent MD of a generated PROTAC on its own, with no target protein and
4
+ no E3 ligase. Runs in chloroform (a membrane-interior mimic) and in water, and
5
+ measures the conformational descriptors published work ties to cell
6
+ permeability: radius of gyration, 3D polar surface area, intramolecular
7
+ H-bonds, and conformational state populations.
8
+
9
+ The protocol follows "Linker-Dependent Folding Rationalizes PROTAC Cell
10
+ Permeability" (*J. Med. Chem.* 2022, DOI 10.1021/acs.jmedchem.2c00877) and takes
11
+ its permeability cutoffs from Atilaw et al., *ACS Med. Chem. Lett.* 2021, 12,
12
+ 107-114. `reference_protocol.md` has the settings and the target numbers.
13
+
14
+ ## Layout
15
+
16
+ ```
17
+ protac_md.py MD driver: conformer -> parametrize -> solvate -> replicas
18
+ analyze_conformations.py Rg / RMSD / 3D PSA / H-bonds / clustering dashboard
19
+ rg_basins.py Rg free-energy profiles and basin populations
20
+ psa_ensemble.py 3D PSA over a finished ensemble
21
+ ternary_span.py warhead-to-E3 span distribution (water ensembles)
22
+ validate_psa.py PSA code path checked against grazoprevir
23
+ psa_method_probe.py element vs charge-threshold polar-atom selection
24
+ plot_results.py per-replica summary figure
25
+ render_3d.py extended and collapsed conformations from a trajectory
26
+ run_candidate.sh detached driver: chloroform + water + analysis
27
+ environment_md.yml conda environment
28
+ protacmd-lock-linux64.txt pinned environment, linux-64
29
+ reference_protocol.md reference protocol and permeability yardsticks
30
+ linker_design.md linker rules read off this project's own MD runs
31
+ ```
32
+
33
+ PROTAC SMILES are embedded in `protac_md.py` (`CANDIDATES`), so no input files
34
+ are needed; anything else runs through `--smiles`.
35
+
36
+ ## Environment
37
+
38
+ On linux-64 with a CUDA 12 capable driver (525 or newer), use the lockfile and
39
+ skip dependency solving:
40
+
41
+ ```
42
+ conda create --name protacmd --file protacmd-lock-linux64.txt
43
+ conda activate protacmd
44
+ pip install "setuptools<81"
45
+ ```
46
+
47
+ That reproduces the environment: openmm 8.5.2, ambertools 24.8,
48
+ rdkit 2025.09.5, openff-toolkit 0.16.10, python 3.10.20. The lockfile carries no
49
+ `packmol`, which `--solvent chloroform` needs, so add it afterwards
50
+ (`conda install -c conda-forge packmol`) or solve from the yml instead.
51
+
52
+ Elsewhere, solve from the yml. Check the driver's CUDA version with
53
+ `nvidia-smi` first and edit `cuda-version` in `environment_md.yml` to match
54
+ (remove it entirely for CPU-only):
55
+
56
+ ```
57
+ conda env create -f environment_md.yml
58
+ conda activate protacmd
59
+ ```
60
+
61
+ The solve takes around ten minutes: ambertools has a large dependency tree and
62
+ libmamba is single-threaded, so the spinner sits still while one core works. The
63
+ install itself takes seconds. Keep `setuptools<81` in the `pip:` section rather
64
+ than as a conda dependency; an upper bound on setuptools triples the solve time.
65
+
66
+ Activation is not optional. `sqm`, `antechamber` and `packmol` are only on PATH
67
+ inside the env, and calling `<env>/bin/python` directly is not enough.
68
+
69
+ ## Run
70
+
71
+ ```
72
+ conda activate protacmd
73
+
74
+ # chloroform: the membrane mimic, the permeability-relevant run
75
+ python protac_md.py --solvent chloroform --replicas 3 --prod-ns 50 --gpu 0
76
+ # water: the polar reference; the pair shows chameleonic folding
77
+ python protac_md.py --solvent water --replicas 3 --prod-ns 50 --gpu 0
78
+
79
+ python analyze_conformations.py --dir egfrvhl_rank4/chloroform --name egfrvhl_rank4
80
+ python analyze_conformations.py --dir egfrvhl_rank4/water --name egfrvhl_rank4
81
+ ```
82
+
83
+ Useful flags: `--candidate {egfrvhl_rank4,egfrvhl_rank5,brd9vhl_rank1,cdk6crbn_rank2}`,
84
+ `--smiles "<custom>"` with `--name ms39_ref` for a reference compound,
85
+ `--platform CPU`, `--prod-ns`, `--replicas`, `--gpu N`.
86
+
87
+ Output lands in `<name>/<solvent>/rep<k>/` (`*_prod.dcd`, `*_prod.csv`, PDBs),
88
+ with the dashboard and the cluster centroid PDBs in `<name>/<solvent>/`.
89
+
90
+ `run_candidate.sh` chains both solvents and both analyses for one candidate and
91
+ reuses the chloroform charge cache for water, so AM1-BCC is paid once.
92
+
93
+ Smoke test on a new machine first, about two minutes:
94
+
95
+ ```
96
+ python protac_md.py --solvent chloroform --replicas 1 --prod-ns 0.05 \
97
+ --heat-ps 5 --equil-ps 10 --report-ps 1 --min-iters 1000 --name smoke
98
+ python analyze_conformations.py --dir smoke/chloroform --name smoke --clusters 4
99
+ ```
100
+
101
+ ## Comparing finished runs
102
+
103
+ These take run directories, one per compound. `ms39_ref` is not bundled: run the
104
+ pipeline on MS39 yourself with `--smiles ... --name ms39_ref`. Its components
105
+ and exact linker are in `../src/protac/ErlotinibVHL.py`.
106
+
107
+ ```
108
+ python rg_basins.py egfrvhl_rank4 ms39_ref --solvents chloroform water
109
+ python psa_ensemble.py egfrvhl_rank4 ms39_ref --solvent chloroform
110
+ python ternary_span.py egfrvhl_rank4 ms39_ref
111
+ ```
112
+
113
+ ## Hardware and runtime
114
+
115
+ The system is small, 2500-2800 atoms, so it is GPU-latency-bound rather than
116
+ memory-bound and fits in under 2 GB of VRAM.
117
+
118
+ | Platform | Speed | 50 ns x 3 x 2 solvents |
119
+ |---|---|---|
120
+ | Free A100 | ~1100 ns/day | ~6.5 h |
121
+ | Shared GPU (~75% busy) | ~32 ns/day | ~9 days |
122
+ | CPU (16 threads) | ~28 ns/day | ~10 days |
123
+
124
+ A shared GPU is about 35x slower than a free one and no faster than CPU, so use
125
+ an idle card. Replicas run sequentially in one process; parallelize by launching
126
+ one process per GPU.
127
+
128
+ The reference converged within 5-10 ns; 50 ns x 3 leaves a wide margin. Confirm
129
+ with the RMSD plateau and the replica-mean spread in the dashboard, and extend
130
+ if either is still drifting.
131
+
132
+ ## Known failure modes
133
+
134
+ 1. `ModuleNotFoundError: No module named 'pkg_resources'` at `SystemGenerator`.
135
+ `openff.amber_ff_ports` imports `pkg_resources`, which setuptools 81 removed.
136
+ Install `setuptools<81`.
137
+ 2. `OSError: Packmol not found`, chloroform only. `pack_box` resolves `packmol`
138
+ through PATH, so the env has to be activated, and so does `sqm` /
139
+ `antechamber` for AM1-BCC charges.
140
+ 3. Charge assignment is slow, one to three minutes on a single CPU core, and
141
+ happens inside `create_system`. Wrapping the run in a short `timeout` kills it
142
+ mid-charge and leaves a 0-byte `ff_cache.json`. Charges are cached per
143
+ molecule in `<name>/<solvent>/ff_cache.json`; copying a populated cache in
144
+ skips the step.
145
+ 4. Never select the PROTAC by atom name or element. It carries its own Cl, and
146
+ counterions named `Na`/`Cl` slip past naive regexes, which inflated Rg by
147
+ about 13%. Every script here selects it by residue instead: the non-water
148
+ residue with more than 5 atoms.
149
+ 5. mdtraj mislabels DCD frame times, so `traj.time` is not trustworthy. Derive
150
+ time from the frame index times `--report-ps`, as the scripts do.
151
+
152
+ ## Scope
153
+
154
+ The simulations show that a generated PROTAC is physically sane and describe its
155
+ conformational ensemble, extended versus folded, along with the folding-linked
156
+ permeability descriptors. That is the same scope as the reference work, which
157
+ also simulates the free PROTAC only.
158
+
159
+ They do not show that a linker works as a degrader. Degradation needs a
160
+ productive ternary complex of target, PROTAC and E3, which is a different
161
+ simulation. `ternary_span.py` describes the span a linker can hold, not whether
162
+ a complex forms.
163
+
164
+ Folding propensity only means something against a baseline, so run the same
165
+ pipeline on a reference PROTAC (`--smiles ... --name ms39_ref`) alongside each
166
+ candidate.
167
+
168
+ Yardsticks, from the 2022 MD paper: a compact minimum at Rg 5.4-5.6 A, and 3D
169
+ PSA 190-265 A^2 for the permeable compounds against 290-330 A^2 for the poorly
170
+ permeable one. From Atilaw 2021: passive permeability below Rg 7 A, and
171
+ low-to-moderate permeability up to roughly 200-210 A^2. The 7 A cutoff on its
172
+ own does not separate the 2022 compounds; see `reference_protocol.md`.
CupOFMoCA-PROTAC/md/analyze_conformations.py ADDED
@@ -0,0 +1,205 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ """
3
+ Conformational analysis of free-PROTAC MD replicas.
4
+
5
+ Reads all rep*/ trajectories under a solvent directory and computes, per replica
6
+ and pooled: radius of gyration (Rg), RMSD to the first frame (convergence),
7
+ solvent-accessible 3D polar surface area (3D PSA) and intramolecular H-bond
8
+ count, then PCA + K-means clustering into conformational states with populations
9
+ and saved centroid structures. The dashboard PNG carries the literature
10
+ yardsticks (7 A Rg permeability cutoff, 3D PSA ~200-210 A^2).
11
+
12
+ Time axes assume 10 ps per frame, protac_md.py's default --report-ps; a run made
13
+ with a different --report-ps gets ns labels scaled by that ratio.
14
+
15
+ Usage:
16
+ python analyze_conformations.py --dir egfrvhl_rank4/chloroform --name egfrvhl_rank4
17
+ """
18
+ import argparse, glob, os
19
+ import numpy as np
20
+ import mdtraj as md
21
+ import matplotlib; matplotlib.use("Agg")
22
+ import matplotlib.pyplot as plt
23
+ from scipy.cluster.vq import kmeans2
24
+
25
+ RG_CUT = 0.70 # nm, passive-permeability cutoff (Atilaw 2021)
26
+ PSA_LO, PSA_HI = 200.0, 210.0 # A^2; low-moderate permeability band
27
+ COLORS = ["#0072B2", "#D55E00", "#009E73", "#CC79A7", "#E69F00"]
28
+ INK, MUTED, GRID = "#222", "#666", "#DDD"
29
+
30
+
31
+ def ligand_indices(top):
32
+ return [at.index for res in top.residues
33
+ if not res.is_water and res.n_atoms > 5 for at in res.atoms]
34
+
35
+
36
+ def polar_slice_indices(top_lig):
37
+ """Indices (within the ligand-only topology) of polar atoms: N, O, and H on N/O."""
38
+ nbr = {}
39
+ for b in top_lig.bonds:
40
+ nbr.setdefault(b[0].index, []).append(b[1].index)
41
+ nbr.setdefault(b[1].index, []).append(b[0].index)
42
+ polar = []
43
+ for at in top_lig.atoms:
44
+ s = at.element.symbol
45
+ if s in ("N", "O"):
46
+ polar.append(at.index)
47
+ elif s == "H" and any(top_lig.atom(j).element.symbol in ("N", "O")
48
+ for j in nbr.get(at.index, [])):
49
+ polar.append(at.index)
50
+ return np.array(sorted(set(polar)))
51
+
52
+
53
+ def load_replicas(solvent_dir, name):
54
+ top_pdbs = glob.glob(os.path.join(solvent_dir, f"{name}_*_solvated.pdb"))
55
+ if not top_pdbs:
56
+ raise SystemExit(f"no *_solvated.pdb in {solvent_dir}")
57
+ top = top_pdbs[0]
58
+ reps = []
59
+ for rd in sorted(glob.glob(os.path.join(solvent_dir, "rep*"))):
60
+ dcd = os.path.join(rd, f"{name}_prod.dcd")
61
+ if os.path.exists(dcd):
62
+ reps.append((os.path.basename(rd), md.load(dcd, top=top)))
63
+ if not reps:
64
+ raise SystemExit(f"no rep*/{name}_prod.dcd trajectories in {solvent_dir}")
65
+ return reps
66
+
67
+
68
+ def per_replica_metrics(traj):
69
+ top = traj.topology
70
+ lig = ligand_indices(top)
71
+ ligtraj = traj.atom_slice(lig)
72
+ ligtraj.center_coordinates()
73
+ rg = md.compute_rg(ligtraj) # nm
74
+ rmsd = md.rmsd(ligtraj, ligtraj, 0) * 10.0 # A, vs frame 0
75
+ sasa = md.shrake_rupley(ligtraj, mode="atom") # nm^2 per atom
76
+ polar = polar_slice_indices(ligtraj.topology)
77
+ psa = sasa[:, polar].sum(axis=1) * 100.0 # A^2
78
+ hb = [len(x) for x in md.wernet_nilsson(ligtraj)] # intramolecular H-bonds/frame
79
+ return dict(rg=rg, rmsd=rmsd, psa=psa, hb=np.array(hb, float), ligtraj=ligtraj)
80
+
81
+
82
+ def cluster(ligtrajs, k=5, seed=0):
83
+ pooled = md.join(ligtrajs)
84
+ pooled.superpose(pooled, 0)
85
+ X = pooled.xyz.reshape(pooled.n_frames, -1)
86
+ X = X - X.mean(0)
87
+ # PCA via SVD, keeping components up to 90% variance (cap 10)
88
+ U, S, Vt = np.linalg.svd(X, full_matrices=False)
89
+ var = (S ** 2) / (S ** 2).sum()
90
+ ncomp = min(10, max(2, int(np.searchsorted(np.cumsum(var), 0.90) + 1)))
91
+ proj = U[:, :ncomp] * S[:ncomp]
92
+ cent, labels = kmeans2(proj, k, minit="++", seed=seed)
93
+ pops = np.array([(labels == i).mean() for i in range(k)])
94
+ # global frame index closest to each cluster centroid, in PC space
95
+ cframes = []
96
+ for i in range(k):
97
+ idx = np.where(labels == i)[0]
98
+ cframes.append(int(idx[np.argmin(((proj[idx] - cent[i]) ** 2).sum(1))]) if len(idx) else -1)
99
+ return pooled, labels, pops, cframes, proj
100
+
101
+
102
+ def style(ax, title, xlabel, ylabel):
103
+ ax.set_title(title, fontsize=11, color=INK, loc="left", weight="bold", pad=6)
104
+ ax.set_xlabel(xlabel, fontsize=9, color=MUTED); ax.set_ylabel(ylabel, fontsize=9, color=MUTED)
105
+ ax.grid(True, color=GRID, lw=0.6, alpha=0.8); ax.set_axisbelow(True)
106
+ for s in ("top", "right"): ax.spines[s].set_visible(False)
107
+ for s in ("left", "bottom"): ax.spines[s].set_color(GRID)
108
+ ax.tick_params(colors=MUTED, labelsize=8)
109
+
110
+
111
+ def main():
112
+ ap = argparse.ArgumentParser()
113
+ ap.add_argument("--dir", required=True, help="solvent dir containing rep*/")
114
+ ap.add_argument("--name", required=True)
115
+ ap.add_argument("--clusters", type=int, default=5)
116
+ a = ap.parse_args()
117
+
118
+ reps = load_replicas(a.dir, a.name)
119
+ solvent = os.path.basename(a.dir.rstrip("/"))
120
+ print(f"[analyze] {a.name} / {solvent}: {len(reps)} replicas")
121
+
122
+ M = {rn: per_replica_metrics(tr) for rn, tr in reps}
123
+ ligtrajs = [M[rn]["ligtraj"] for rn, _ in reps]
124
+ pooled, labels, pops, cframes, proj = cluster(ligtrajs, a.clusters)
125
+
126
+ rg_all = np.concatenate([M[rn]["rg"] for rn, _ in reps])
127
+ psa_all = np.concatenate([M[rn]["psa"] for rn, _ in reps])
128
+ hb_all = np.concatenate([M[rn]["hb"] for rn, _ in reps])
129
+ rep_means = [M[rn]["rg"].mean() for rn, _ in reps]
130
+
131
+ # ---- dashboard ----
132
+ fig, axes = plt.subplots(2, 3, figsize=(15, 8.5), dpi=140)
133
+ fig.patch.set_facecolor("white")
134
+
135
+ ax = axes[0, 0]
136
+ for i, (rn, _) in enumerate(reps):
137
+ t = np.arange(len(M[rn]["rg"])) * 0.01 # ns; assumes protac_md.py default --report-ps 10
138
+ ax.plot(t, M[rn]["rg"], color=COLORS[i % 5], lw=0.8, alpha=0.85, label=rn)
139
+ ax.axhline(RG_CUT, color="k", ls="--", lw=1); ax.text(0.99, RG_CUT+0.003, "7 A permeability cutoff",
140
+ transform=ax.get_yaxis_transform(), ha="right", fontsize=7, color=MUTED)
141
+ style(ax, "Radius of gyration", "time (ns)", "Rg (nm)"); ax.legend(fontsize=7, frameon=False)
142
+
143
+ ax = axes[0, 1]
144
+ for i, (rn, _) in enumerate(reps):
145
+ t = np.arange(len(M[rn]["rmsd"])) * 0.01
146
+ ax.plot(t, M[rn]["rmsd"], color=COLORS[i % 5], lw=0.8, alpha=0.85)
147
+ style(ax, "RMSD to start (convergence)", "time (ns)", "RMSD (A)")
148
+
149
+ ax = axes[0, 2]
150
+ ax.hexbin(rg_all, psa_all, gridsize=35, cmap="Blues", mincnt=1)
151
+ ax.axvline(RG_CUT, color="k", ls="--", lw=1)
152
+ ax.axhspan(PSA_LO, PSA_HI, color="orange", alpha=0.15)
153
+ ax.text(0.02, PSA_HI, " PSA ~200-210 A^2", transform=ax.get_yaxis_transform(),
154
+ fontsize=7, color=MUTED, va="bottom")
155
+ style(ax, "3D PSA vs Rg (folding->permeability)", "Rg (nm)", "3D PSA (A^2)")
156
+
157
+ ax = axes[1, 0]
158
+ order = np.argsort(-pops)
159
+ ax.bar(range(len(pops)), pops[order] * 100, color=[COLORS[i % 5] for i in range(len(pops))])
160
+ for r, i in enumerate(order):
161
+ idx = labels == i
162
+ if idx.any():
163
+ ax.text(r, pops[i]*100 + 0.5, f"Rg {md.compute_rg(pooled[idx]).mean():.2f}",
164
+ ha="center", fontsize=7, color=MUTED)
165
+ style(ax, f"Conformational clusters (k={a.clusters})", "cluster (by population)", "population (%)")
166
+
167
+ ax = axes[1, 1]
168
+ ax.hist(hb_all, bins=np.arange(0, hb_all.max()+2)-0.5, color="#0072B2", alpha=0.85, rwidth=0.9)
169
+ style(ax, "Intramolecular H-bonds", "H-bonds per frame", "count")
170
+
171
+ ax = axes[1, 2]; ax.axis("off")
172
+ summary = [
173
+ f"PROTAC : {a.name}",
174
+ f"Solvent: {solvent} Replicas: {len(reps)}",
175
+ f"Frames : {pooled.n_frames} pooled",
176
+ "",
177
+ f"Rg : {rg_all.mean():.3f} ± {rg_all.std():.3f} nm",
178
+ f" per-rep means: " + ", ".join(f"{x:.3f}" for x in rep_means),
179
+ f" replica spread (std of means): {np.std(rep_means):.3f} nm",
180
+ f" frac below 7 A cutoff: {100*np.mean(rg_all<RG_CUT):.0f}%",
181
+ f"3D PSA : {psa_all.mean():.0f} ± {psa_all.std():.0f} A^2",
182
+ f"IMHBs : {hb_all.mean():.1f} ± {hb_all.std():.1f} per frame",
183
+ "",
184
+ "Reference: compact minimum Rg ~5.4-5.6 A;",
185
+ "3D PSA ~190-265 A^2 permeable vs 290-330 poor.",
186
+ ]
187
+ ax.text(0.0, 1.0, "\n".join(summary), va="top", family="monospace", fontsize=9, color=INK)
188
+
189
+ fig.suptitle(f"Free-PROTAC conformational analysis - {a.name} in {solvent} "
190
+ f"({len(reps)}x{len(M[reps[0][0]]['rg'])*0.01:g} ns)",
191
+ fontsize=13, weight="bold", color=INK, x=0.06, ha="left")
192
+ fig.tight_layout(rect=(0, 0, 1, 0.97))
193
+ out = os.path.join(a.dir, f"{a.name}_analysis.png")
194
+ fig.savefig(out, facecolor="white"); print(f"[analyze] wrote {out}")
195
+
196
+ # centroid structures
197
+ for r, i in enumerate(order):
198
+ if cframes[i] >= 0:
199
+ pooled[cframes[i]].save_pdb(os.path.join(a.dir, f"{a.name}_cluster{r+1}_pop{pops[i]*100:.0f}.pdb"))
200
+ print(f"[analyze] Rg {rg_all.mean():.3f} nm | 3D PSA {psa_all.mean():.0f} A^2 | "
201
+ f"IMHB {hb_all.mean():.1f} | replica-mean spread {np.std(rep_means):.3f} nm")
202
+
203
+
204
+ if __name__ == "__main__":
205
+ main()
CupOFMoCA-PROTAC/md/environment_md.yml ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: protacmd
2
+ # Conda env for the free-PROTAC MD pipeline (protac_md.py + analyze_conformations.py).
3
+ #
4
+ # cuda-version must match the driver on the machine you run on: check `nvidia-smi`
5
+ # (top right). 12.* covers driver 525 and newer; drop the line for a CPU-only host.
6
+ #
7
+ # conda env create -f environment_md.yml
8
+ # conda activate protacmd
9
+ #
10
+ # sqm, antechamber and packmol are only on PATH inside the env, so activate it
11
+ # before running the pipeline.
12
+ channels:
13
+ - conda-forge
14
+ dependencies:
15
+ - python=3.10
16
+ # MD engine
17
+ - openmm=8.*
18
+ - cuda-version=12.* # match the target machine's driver; drop for CPU-only
19
+ # parametrization
20
+ - openff-toolkit>=0.16
21
+ - openff-interchange>=0.4 # pack_box(), used to build the chloroform box
22
+ - openmmforcefields>=0.14
23
+ - ambertools>=23 # AM1-BCC charges (sqm) + GAFF fallback
24
+ - packmol # chloroform solvation
25
+ - rdkit>=2024.03
26
+ # analysis / plotting
27
+ - mdtraj
28
+ - parmed
29
+ - numpy
30
+ - scipy
31
+ - matplotlib
32
+ - pillow
33
+ - pip
34
+ # openff.amber_ff_ports imports pkg_resources, which setuptools>=81 dropped;
35
+ # without the pin the run dies in SystemGenerator. Pinned through pip rather
36
+ # than conda because an upper bound on setuptools blows up the conda solve.
37
+ - pip:
38
+ - "setuptools<81"
CupOFMoCA-PROTAC/md/linker_design.md ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Linker rules for EGFR-VHL PROTACs, read off the MD runs
2
+
3
+ The system is fixed: a gefitinib warhead (3-Cl-4-F-anilinoquinazoline, propyl-O,
4
+ piperazine) and VH032 (tert-leucine, 4-hydroxyproline, 4-methylthiazolyl-
5
+ benzylamine). Only the linker between the piperazine and the tert-leucine
6
+ varies. The EGFR-VHL SMILES bundled in `protac_md.py` are built differently: in
7
+ `egfrvhl_rank4` and `_rank5` the linker acylates the anilino nitrogen and the
8
+ piperazine NH is left free. Everything below comes from explicit-solvent MD on generated linkers,
9
+ run alongside the validated degrader MS39 and a PEG4 negative control.
10
+
11
+ ## Two gates
12
+
13
+ 1. **Permeability.** The linker has to let the molecule fold compact and bury
14
+ its polar surface in the membrane: low 3D PSA, compact Rg, intramolecular
15
+ H-bonds. Measured on the chloroform ensemble.
16
+ 2. **Ternary geometry.** It still has to reach an extended warhead-to-E3 span of
17
+ 15-20 A at a cost the binding free energy can pay, below the 3.7 kcal/mol
18
+ conformational penalty of MS39. Measured on the water ensemble.
19
+
20
+ Passing both means behaving like a molecular chameleon: mostly compact, with an
21
+ accessible extended tail.
22
+
23
+ ## Runs
24
+
25
+ Same warhead and E3, linker only. Neither the trajectories nor the linker SMILES
26
+ are shipped here, so the table records what those runs showed rather than
27
+ something the scripts regenerate. 3D PSA and Rg come from `psa_ensemble.py` and
28
+ `rg_basins.py`; the clash-free fraction and the penalty come from a rigid
29
+ ternary-geometry check that is not part of this folder.
30
+
31
+ | linker | core | 3D PSA (A^2) | Rg in chloroform (A) | chameleon | clash-free fraction / penalty (kcal/mol) | verdict |
32
+ |---|---|---|---|---|---|---|
33
+ | dm2 | 2-(n-propyl)malonamide, short and branched | 140 | 5.96 | yes | 2.5% / 2.2 | passes both |
34
+ | perm4 | 2-(allyl)malonamide, short and branched | 141 | 5.92 | yes | 4.3% / 1.9 | passes both |
35
+ | MS39 (reference) | C10 linear diacid, sebacoyl | 178 | 6.51 | mild | 0.2% / 3.7 | validated degrader |
36
+ | perm2 | cyclopentane-1,2-diyl, rigid ring | 172 | 6.40 | no | 0.0% / >5 | fails ternary |
37
+ | perm3 | C6 linear diacid | 194 | 7.39 | no, folds in water and opens in the membrane | 1.3% / 2.6 | fails permeability |
38
+ | PEG4 | PEG4 diacid | 193 | 7.21 | no | 0.1% / 4.1 | fails permeability |
39
+
40
+ 2D descriptors do not see this. TPSA is 191 for every linker except PEG4 at 228,
41
+ so it cannot tell dm2 at 3D PSA 140 from perm3 at 194; the difference is folding
42
+ in three dimensions. Rotatable bonds: 18 for the two winners, 20 for perm3, 24
43
+ for MS39, 27 for PEG4. cLogP: 6.5-6.7 for the winners, 7.3-7.9 for perm2 and
44
+ perm3, 8.8 for MS39, 5.4 for PEG4.
45
+
46
+ ## Rules, cheap enough to pre-screen before MD
47
+
48
+ 1. **Short, branched aliphatic core.** A 2-substituted malonamide or succinamide
49
+ with a small hydrophobic branch such as propyl or allyl folds compact while
50
+ the warhead's propyl-O-piperazine extension still covers the ternary span.
51
+ 2. **Avoid three failure chemistries.** PEG and poly-ether raise TPSA and HBA
52
+ and stay floppy, which kills permeability (PEG4); reject high ether-O counts,
53
+ TPSA above ~200, HBA above ~14. A rigid ring across the linker locks in a
54
+ non-spanning geometry, which kills ternary formation (perm2). Long linear
55
+ alkyl or diacid chains fold poorly (perm3) or push cLogP and PSA up (MS39).
56
+ 3. **Keep it stiff enough.** Rotatable bonds around 18, not 24-27.
57
+ 4. **Moderate cLogP,** roughly 6-7.
58
+
59
+ ## Hard experimental constraint
60
+
61
+ Published EGFR-VHL SAR: linkers whose fully extended warhead-to-E3 span is under
62
+ about 13 A, fewer than roughly 12 chain atoms end to end, show no degradation.
63
+ Count the full chain from the piperazine anchor to the tert-leucine, not just
64
+ the core, and keep it at 12 atoms or more (Cheng, Yu et al., *J. Med. Chem.*
65
+ 2020, the MS39 paper).
66
+
67
+ ## What MD should then confirm
68
+
69
+ - 3D PSA of the folded state at or below ~150 A^2, a compact chloroform Rg basin
70
+ at or below ~6.0 A, and at least 95% of frames under 7 A.
71
+ - Chameleonic behavior: chloroform Rg below water Rg, intramolecular H-bonds at
72
+ 1.5 or more.
73
+ - Ternary reach: a span of 15 A or more in 1-2% of the water ensemble, a penalty
74
+ at or below ~3 kcal/mol.
75
+
76
+ ## Caveats
77
+
78
+ Propose in 2D, then confirm the top few by MD.
79
+
80
+ The ternary axis is a rigid free-solution proxy, not a validated degradation
81
+ score. The 12-atom rule still applies on top of it.
82
+
83
+ ## Cores worth imitating
84
+
85
+ - dm2, 2-propyl malonamide: `CCC[C@@H](C(=O)N-VH032)C(=O)N-piperazine`
86
+ - perm4, the same with an allyl branch: `C=CC`
CupOFMoCA-PROTAC/md/plot_results.py ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ """One-page summary figure for a single replica of a protac_md.py run: the
3
+ radius of gyration, potential energy and density traces of the production run,
4
+ with the PROTAC 2D structure beside them when --smiles is given. Writes
5
+ <rep>/<name>_summary.png.
6
+
7
+ Usage:
8
+ python plot_results.py --rep egfrvhl_rank4/chloroform/rep1
9
+ python plot_results.py --rep egfrvhl_rank4/chloroform/rep1 --smiles "<SMILES>"
10
+ """
11
+ import argparse, csv, glob, io, os
12
+ import numpy as np
13
+ import matplotlib
14
+ matplotlib.use("Agg")
15
+ import matplotlib.pyplot as plt
16
+ from matplotlib.gridspec import GridSpec
17
+ import mdtraj as md
18
+ from rdkit import Chem
19
+ from rdkit.Chem import AllChem
20
+ from rdkit.Chem.Draw import rdMolDraw2D
21
+ from PIL import Image
22
+
23
+ # Okabe-Ito colorblind-safe hues
24
+ BLUE, VERM, GREEN = "#0072B2", "#D55E00", "#009E73"
25
+ INK, MUTED, GRID = "#222222", "#666666", "#DDDDDD"
26
+
27
+
28
+ def load_csv(path):
29
+ with open(path) as fh:
30
+ rows = list(csv.reader(fh))
31
+ header = [h.strip().strip('#"').strip() for h in rows[0]]
32
+ data = np.array([[float(x) for x in r] for r in rows[1:] if r])
33
+ col = {h: data[:, i] for i, h in enumerate(header)}
34
+
35
+ def find(key):
36
+ return next(c for h, c in col.items() if key.lower() in h.lower())
37
+
38
+ t = find("time") / 1000.0 # ps -> ns
39
+ return t - t[0], find("potential"), find("temperature"), find("density")
40
+
41
+
42
+ def load_rg(rep_dir, name):
43
+ """Rg of the PROTAC (nm), same selection as analyze_conformations.py."""
44
+ tops = glob.glob(os.path.join(rep_dir, os.pardir, "*_solvated.pdb"))
45
+ traj = md.load(os.path.join(rep_dir, f"{name}_prod.dcd"), top=tops[0])
46
+ lig = [a.index for r in traj.topology.residues
47
+ if not r.is_water and r.n_atoms > 5 for a in r.atoms]
48
+ sub = traj.atom_slice(lig)
49
+ sub.center_coordinates()
50
+ return md.compute_rg(sub)
51
+
52
+
53
+ def mol_image(smiles, px=700):
54
+ mol = Chem.MolFromSmiles(smiles)
55
+ AllChem.Compute2DCoords(mol)
56
+ d = rdMolDraw2D.MolDraw2DCairo(px, px)
57
+ d.drawOptions().bondLineWidth = 2
58
+ d.drawOptions().padding = 0.06
59
+ rdMolDraw2D.PrepareAndDrawMolecule(d, mol)
60
+ d.FinishDrawing()
61
+ return Image.open(io.BytesIO(d.GetDrawingText()))
62
+
63
+
64
+ def style(ax, title, ylabel):
65
+ ax.set_title(title, fontsize=11, color=INK, loc="left", pad=6, weight="bold")
66
+ ax.set_ylabel(ylabel, fontsize=9, color=MUTED)
67
+ ax.set_xlabel("production time (ns)", fontsize=9, color=MUTED)
68
+ ax.grid(True, color=GRID, lw=0.6, alpha=0.8)
69
+ ax.set_axisbelow(True)
70
+ for s in ("top", "right"):
71
+ ax.spines[s].set_visible(False)
72
+ for s in ("left", "bottom"):
73
+ ax.spines[s].set_color(GRID)
74
+ ax.tick_params(colors=MUTED, labelsize=8, length=3)
75
+
76
+
77
+ def main():
78
+ p = argparse.ArgumentParser()
79
+ p.add_argument("--rep", required=True, help="replica directory, e.g. <name>/<solvent>/rep1")
80
+ p.add_argument("--name", default=None, help="run name (default: the run directory's name)")
81
+ p.add_argument("--smiles", default=None, help="draw this structure in the left panel")
82
+ p.add_argument("--report-ps", type=float, default=10.0, help="DCD frame interval")
83
+ a = p.parse_args()
84
+
85
+ rep = a.rep.rstrip("/")
86
+ name = a.name or os.path.basename(os.path.dirname(os.path.dirname(rep)))
87
+ solvent = os.path.basename(os.path.dirname(rep))
88
+
89
+ t, pe, temp, dens = load_csv(os.path.join(rep, f"{name}_prod.csv"))
90
+ rg = load_rg(rep, name)
91
+ rg_t = np.arange(len(rg)) * a.report_ps / 1000.0 # frame index -> ns
92
+
93
+ fig = plt.figure(figsize=(13, 7.5), dpi=150)
94
+ fig.patch.set_facecolor("white")
95
+ ncol = 3 if a.smiles else 2
96
+ gs = GridSpec(2, ncol, figure=fig, hspace=0.42, wspace=0.30,
97
+ left=0.06, right=0.98, top=0.90, bottom=0.09)
98
+ off = 0
99
+
100
+ if a.smiles:
101
+ axm = fig.add_subplot(gs[:, 0])
102
+ axm.axis("off")
103
+ axm.imshow(mol_image(a.smiles))
104
+ axm.set_title(name, fontsize=11, color=INK, loc="left", weight="bold", pad=6)
105
+ off = 1
106
+
107
+ ax1 = fig.add_subplot(gs[0, off:])
108
+ ax1.plot(rg_t, rg, color=BLUE, lw=1.2)
109
+ m = rg.mean()
110
+ ax1.axhline(m, color=MUTED, lw=1.0, ls="--")
111
+ ax1.annotate(f"mean {m:.2f} nm", (rg_t[-1], m), color=MUTED, fontsize=8,
112
+ ha="right", va="bottom", xytext=(0, 3), textcoords="offset points")
113
+ style(ax1, "Radius of gyration", "Rg (nm)")
114
+
115
+ ax2 = fig.add_subplot(gs[1, off])
116
+ ax2.plot(t, pe / 1000.0, color=VERM, lw=1.0)
117
+ style(ax2, "Potential energy", "PE (10^3 kJ/mol)")
118
+
119
+ ax3 = fig.add_subplot(gs[1, off + 1])
120
+ ax3.plot(t, dens, color=GREEN, lw=1.0)
121
+ style(ax3, "System density", "density (g/mL)")
122
+
123
+ fig.suptitle(f"Free-PROTAC MD summary - {name} in {solvent} "
124
+ f"({t[-1]:.0f} ns, 300 K / 1 bar)",
125
+ fontsize=13, color=INK, x=0.06, ha="left", weight="bold")
126
+
127
+ out = os.path.join(rep, f"{name}_summary.png")
128
+ fig.savefig(out, facecolor="white")
129
+ print("wrote", out)
130
+ print(f"Rg {rg.mean():.3f}±{rg.std():.3f} nm | T {temp.mean():.1f} K | "
131
+ f"rho {dens.mean():.3f} g/mL")
132
+
133
+
134
+ if __name__ == "__main__":
135
+ main()
CupOFMoCA-PROTAC/md/protac_md.py ADDED
@@ -0,0 +1,314 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ """
3
+ Explicit-solvent MD of a free PROTAC (no POI, no E3 protein), following the
4
+ protocol of "Linker-Dependent Folding Rationalizes PROTAC Cell Permeability"
5
+ (J. Med. Chem. 2022, DOI 10.1021/acs.jmedchem.2c00877): triplicate ~100 ns runs in
6
+ chloroform (membrane-interior mimic) and/or water, analyzed for Rg, 3D PSA,
7
+ intramolecular H-bonds and conformational clusters.
8
+
9
+ Pipeline:
10
+ 1. RDKit: SMILES -> add Hs -> ETKDGv3 multi-conformer -> MMFF -> lowest-E conf.
11
+ 2. OpenFF Sage (openff-2.2.0) + AM1-BCC charges via AmberTools for the PROTAC
12
+ (and for chloroform, when used) through openmmforcefields.
13
+ 3. Solvate:
14
+ water -> OpenMM addSolvent (TIP3P, 0.15 M NaCl, neutralized)
15
+ chloroform -> packmol via openff-interchange pack_box
16
+ 4. Minimize once, then run N independent replicas (different velocity seeds),
17
+ each: NVT heat 50->T, NPT equilibration, NPT production.
18
+
19
+ Outputs per replica land in <out>/<solvent>/rep<k>/; analyze them with
20
+ analyze_conformations.py.
21
+
22
+ Environment: conda env "protacmd" (environment_md.yml). Needs setuptools<81:
23
+ openff.amber_ff_ports imports pkg_resources, which setuptools 81 dropped, and
24
+ the run dies inside SystemGenerator without it.
25
+
26
+ Usage:
27
+ python protac_md.py --solvent chloroform --replicas 3 --prod-ns 100 --gpu 0
28
+ python protac_md.py --solvent water --replicas 3 --prod-ns 100 --gpu 0
29
+ python protac_md.py --prep-only # just the 3D conformer
30
+ """
31
+
32
+ import argparse
33
+ import os
34
+ import sys
35
+ import time
36
+
37
+ # Top-ranked generated PROTACs for EGFR-VHL, BRD9-VHL and CDK6-CRBN. Any other
38
+ # SMILES can be simulated with --smiles.
39
+ CANDIDATES = {
40
+ "egfrvhl_rank4": "CCCC(C(=O)N[C@H](C(=O)N1C[C@H](O)C[C@H]1C(=O)NCc1ccc(-c2scnc2C)cc1)"
41
+ "C(C)(C)C)C(=O)N(c1ccc(F)c(Cl)c1)c1ncnc2cc(OC)c(OCCCCN3CCNCC3)cc12",
42
+ "egfrvhl_rank5": "CCNC(=O)C(OC(=O)C(=O)N[C@H](C(=O)N1C[C@H](O)C[C@H]1C(=O)NCc1ccc(-c2scnc2C)cc1)"
43
+ "C(C)(C)C)C(=O)N(c1ccc(F)c(Cl)c1)c1ncnc2cc(OC)c(OCCCCN3CCNCC3)cc12",
44
+ "brd9vhl_rank1": "CCC(C)C(C(=O)N[C@H](C(=O)N1C[C@H](O)C[C@H]1C(=O)NCc1ccc(-c2scnc2C)cc1)C(C)(C)C)"
45
+ "C(=O)N1CCN(Cc2c(OC)cc(-c3cn(C)c(=O)c4cnccc34)cc2OC)CC1",
46
+ "cdk6crbn_rank2": "CC(=O)c1c(C)c2cnc(N(C(=O)CC(C)CC(=O)Nc3cccc4c3C(=O)N(C3CCC(=O)NC3=O)C4=O)"
47
+ "c3ccc(N4CCNCC4)nc3)nc2n(C2CCCC2)c1=O",
48
+ }
49
+ DEFAULT_CANDIDATE = "egfrvhl_rank4"
50
+ CHLOROFORM_SMILES = "C(Cl)(Cl)Cl"
51
+ CHLOROFORM_DENSITY_PER_NM3 = 7.51 # molecules/nm^3 at 1.49 g/mL, 300 K
52
+
53
+
54
+ # --- 3D conformer -----------------------------------------------------------
55
+ def build_conformer(smiles, name, out_dir, n_confs=20, seed=0xF00D):
56
+ from rdkit import Chem
57
+ from rdkit.Chem import AllChem, Descriptors, rdMolDescriptors
58
+
59
+ mol = Chem.MolFromSmiles(smiles)
60
+ if mol is None:
61
+ sys.exit(f"[fatal] RDKit could not parse SMILES: {smiles}")
62
+ print(f"[prep] {name}: MW={Descriptors.MolWt(mol):.1f} "
63
+ f"charge={Chem.GetFormalCharge(mol):+d} "
64
+ f"rot.bonds={rdMolDescriptors.CalcNumRotatableBonds(mol)}")
65
+
66
+ molh = Chem.AddHs(mol)
67
+ params = AllChem.ETKDGv3()
68
+ params.randomSeed = seed
69
+ params.useRandomCoords = True
70
+ cids = AllChem.EmbedMultipleConfs(molh, numConfs=n_confs, params=params)
71
+ if len(cids) == 0:
72
+ if AllChem.EmbedMolecule(molh, params) != 0:
73
+ sys.exit("[fatal] 3D embedding failed.")
74
+ cids = [0]
75
+ if not AllChem.MMFFHasAllMoleculeParams(molh):
76
+ print("[warn] MMFF missing some params; conformer quality may be lower.")
77
+ results = AllChem.MMFFOptimizeMoleculeConfs(molh, maxIters=2000)
78
+ best_cid, best_e = min(zip(cids, [e for _, e in results]), key=lambda x: x[1])
79
+ print(f"[prep] lowest MMFF conformer {best_cid} (E={best_e:.1f} kcal/mol)")
80
+
81
+ sdf = os.path.join(out_dir, f"{name}.sdf")
82
+ w = Chem.SDWriter(sdf); molh.SetProp("_Name", name); w.write(molh, confId=best_cid); w.close()
83
+ print(f"[prep] wrote {sdf}")
84
+ keep = Chem.Mol(molh); keep.RemoveAllConformers()
85
+ keep.AddConformer(molh.GetConformer(best_cid), assignId=True)
86
+ return keep
87
+
88
+
89
+ # --- solvation --------------------------------------------------------------
90
+ def solvate_water(molecule, system_generator, cfg):
91
+ from openmm import app, unit
92
+ off_top = molecule.to_topology()
93
+ modeller = app.Modeller(off_top.to_openmm(), molecule.conformers[0].to_openmm())
94
+ modeller.addSolvent(system_generator.forcefield, model="tip3p",
95
+ padding=cfg.padding * unit.nanometer,
96
+ ionicStrength=cfg.ionic * unit.molar, neutralize=True)
97
+ return modeller.topology, modeller.positions
98
+
99
+
100
+ def solvate_chloroform(molecule, chcl3, cfg):
101
+ import numpy as np
102
+ from openff.interchange.components._packmol import pack_box
103
+ from openff.units import unit as ou
104
+ from openff.units.openmm import to_openmm
105
+
106
+ conf = molecule.conformers[0].m_as(ou.nanometer)
107
+ extent = np.linalg.norm(conf - conf.mean(0), axis=1).max() * 2.0 # ~diameter, nm
108
+ box = extent + 2.0 * cfg.padding
109
+ n = int(round(0.90 * CHLOROFORM_DENSITY_PER_NM3 * box ** 3)) # under-fill; NPT compresses
110
+ print(f"[md] chloroform box {box:.2f} nm, packing {n} CHCl3 (NPT will set final density)")
111
+ box_vecs = np.eye(3) * box * ou.nanometer
112
+ packed = pack_box(molecules=[chcl3], number_of_copies=[n],
113
+ solute=molecule.to_topology(), box_vectors=box_vecs,
114
+ center_solute=True, tolerance=2.0 * ou.angstrom)
115
+ omm_top = packed.to_openmm()
116
+ omm_top.setPeriodicBoxVectors(to_openmm(packed.box_vectors))
117
+ positions = to_openmm(packed.get_positions())
118
+ return omm_top, positions
119
+
120
+
121
+ # --- solvated system, minimized once ----------------------------------------
122
+ def build_system(rdkit_mol, name, out_dir, cfg):
123
+ from openmm import app, unit, LangevinMiddleIntegrator, Platform
124
+ from openff.toolkit import Molecule
125
+ from openmmforcefields.generators import SystemGenerator
126
+
127
+ molecule = Molecule.from_rdkit(rdkit_mol, allow_undefined_stereo=True)
128
+ molecule.name = name
129
+
130
+ extra = []
131
+ chcl3 = None
132
+ if cfg.solvent == "chloroform":
133
+ chcl3 = Molecule.from_smiles(CHLOROFORM_SMILES)
134
+ chcl3.generate_conformers(n_conformers=1)
135
+ chcl3.name = "CL3"
136
+ extra = [chcl3]
137
+
138
+ forcefield_kwargs = {"constraints": app.HBonds, "rigidWater": True,
139
+ "removeCMMotion": True, "hydrogenMass": cfg.hmass * unit.amu}
140
+ periodic_kwargs = {"nonbondedMethod": app.PME, "nonbondedCutoff": 1.0 * unit.nanometer}
141
+ system_generator = SystemGenerator(
142
+ forcefields=["amber/ff14SB.xml", "amber/tip3p_standard.xml",
143
+ "amber/tip3p_HFE_multivalent.xml"],
144
+ small_molecule_forcefield=cfg.small_mol_ff,
145
+ molecules=[molecule] + extra,
146
+ forcefield_kwargs=forcefield_kwargs,
147
+ periodic_forcefield_kwargs=periodic_kwargs,
148
+ cache=os.path.join(out_dir, "ff_cache.json"))
149
+ print(f"[md] solvent={cfg.solvent} small-molecule FF={cfg.small_mol_ff} (AM1-BCC charges)")
150
+
151
+ if cfg.solvent == "water":
152
+ topology, positions = solvate_water(molecule, system_generator, cfg)
153
+ else:
154
+ topology, positions = solvate_chloroform(molecule, chcl3, cfg)
155
+
156
+ n_atoms = topology.getNumAtoms()
157
+ print(f"[md] solvated system: {n_atoms} atoms")
158
+ app.PDBFile.writeFile(topology, positions,
159
+ open(os.path.join(out_dir, f"{name}_{cfg.solvent}_solvated.pdb"), "w"))
160
+
161
+ base_system = system_generator.create_system(topology)
162
+
163
+ # minimize once; replicas branch from here with fresh velocities
164
+ integ = LangevinMiddleIntegrator(cfg.temperature * unit.kelvin, 1.0 / unit.picosecond,
165
+ cfg.timestep * unit.femtosecond)
166
+ plat, prop = _pick_platform(Platform, cfg)
167
+ sim = app.Simulation(topology, base_system, integ, plat, prop)
168
+ sim.context.setPositions(positions)
169
+ print("[md] minimizing solvated system...")
170
+ sim.minimizeEnergy(maxIterations=cfg.min_iters)
171
+ min_pos = sim.context.getState(getPositions=True).getPositions()
172
+ del sim, integ
173
+ return topology, base_system, min_pos, plat, prop
174
+
175
+
176
+ # --- one replica: heat, NPT equilibrate, NPT production ---------------------
177
+ def run_replica(topology, base_system, min_pos, plat, prop, name, rep_dir, cfg, seed):
178
+ import openmm
179
+ from openmm import app, unit, XmlSerializer
180
+
181
+ os.makedirs(rep_dir, exist_ok=True)
182
+ temperature = cfg.temperature * unit.kelvin
183
+ pressure = cfg.pressure * unit.bar
184
+ dt = cfg.timestep * unit.femtosecond
185
+
186
+ # independent copy per replica: each adds its own barostat below, so sharing
187
+ # base_system would stack one barostat per replica
188
+ system = XmlSerializer.deserialize(XmlSerializer.serialize(base_system))
189
+ integrator = openmm.LangevinMiddleIntegrator(temperature, 1.0 / unit.picosecond, dt)
190
+ integrator.setRandomNumberSeed(seed)
191
+ sim = app.Simulation(topology, system, integrator, plat, prop)
192
+ sim.context.setPositions(min_pos)
193
+ sim.context.setVelocitiesToTemperature(50 * unit.kelvin, seed)
194
+
195
+ # NVT heating 50 -> T
196
+ heat_steps = int(cfg.heat_ps * 1000 / cfg.timestep)
197
+ n_stages = 25
198
+ for i in range(n_stages):
199
+ t = 50 + (cfg.temperature - 50) * (i + 1) / n_stages
200
+ integrator.setTemperature(t * unit.kelvin)
201
+ sim.step(max(1, heat_steps // n_stages))
202
+
203
+ # add barostat -> NPT equilibration
204
+ baro = openmm.MonteCarloBarostat(pressure, temperature, 25)
205
+ baro.setRandomNumberSeed(seed)
206
+ system.addForce(baro)
207
+ sim.context.reinitialize(preserveState=True)
208
+ sim.step(int(cfg.equil_ps * 1000 / cfg.timestep))
209
+ _write_pdb(app, sim, os.path.join(rep_dir, f"{name}_equilibrated.pdb"))
210
+
211
+ # production
212
+ steps_per_ns = int(round(1e6 / cfg.timestep))
213
+ prod_steps = int(cfg.prod_ns * steps_per_ns)
214
+ report_every = max(1, int(cfg.report_ps * 1000 / cfg.timestep))
215
+ sim.currentStep = 0 # so the progress reporter excludes heat + equilibration
216
+ dcd = os.path.join(rep_dir, f"{name}_prod.dcd")
217
+ sim.reporters.append(app.DCDReporter(dcd, report_every))
218
+ sim.reporters.append(app.StateDataReporter(
219
+ os.path.join(rep_dir, f"{name}_prod.csv"), report_every, step=True, time=True,
220
+ potentialEnergy=True, temperature=True, density=True, volume=True, speed=True))
221
+ sim.reporters.append(app.StateDataReporter(
222
+ sys.stdout, report_every * 20, step=True, temperature=True, density=True,
223
+ speed=True, progress=True, remainingTime=True, totalSteps=prod_steps))
224
+ sim.reporters.append(app.CheckpointReporter(os.path.join(rep_dir, f"{name}_prod.chk"),
225
+ report_every * 20))
226
+ print(f"[md] {os.path.basename(rep_dir)}: production {cfg.prod_ns} ns -> {dcd}")
227
+ t0 = time.time()
228
+ sim.step(prod_steps)
229
+ print(f"[md] {os.path.basename(rep_dir)} done in {(time.time()-t0)/3600:.2f} h")
230
+ _write_pdb(app, sim, os.path.join(rep_dir, f"{name}_final.pdb"))
231
+
232
+
233
+ def run_md(rdkit_mol, name, out_dir, cfg):
234
+ solvent_dir = os.path.join(out_dir, cfg.solvent)
235
+ os.makedirs(solvent_dir, exist_ok=True)
236
+ topology, base_system, min_pos, plat, prop = build_system(rdkit_mol, name, solvent_dir, cfg)
237
+ for k in range(cfg.replicas):
238
+ rep_dir = os.path.join(solvent_dir, f"rep{k+1}")
239
+ run_replica(topology, base_system, min_pos, plat, prop, name, rep_dir, cfg,
240
+ seed=cfg.seed + 1000 * (k + 1))
241
+ print(f"[md] all {cfg.replicas} replicas ({cfg.solvent}) complete -> {solvent_dir}")
242
+ print(f"[md] analyze with: python analyze_conformations.py --dir {solvent_dir} --name {name}")
243
+
244
+
245
+ def _pick_platform(Platform, cfg):
246
+ avail = {Platform.getPlatform(i).getName() for i in range(Platform.getNumPlatforms())}
247
+ order = [cfg.platform] if cfg.platform != "auto" else ["CUDA", "OpenCL", "CPU"]
248
+ for pn in order:
249
+ if pn in avail:
250
+ prop = {"Precision": "mixed", "DeviceIndex": str(cfg.gpu)} if pn in ("CUDA", "OpenCL") else {}
251
+ print(f"[md] platform = {pn} {prop}")
252
+ return Platform.getPlatformByName(pn), prop
253
+ sys.exit(f"[fatal] platform '{cfg.platform}' unavailable; have {sorted(avail)}")
254
+
255
+
256
+ def _write_pdb(app, sim, path):
257
+ st = sim.context.getState(getPositions=True, enforcePeriodicBox=True)
258
+ with open(path, "w") as fh:
259
+ app.PDBFile.writeFile(sim.topology, st.getPositions(), fh)
260
+
261
+
262
+ def parse_args():
263
+ p = argparse.ArgumentParser(description=__doc__,
264
+ formatter_class=argparse.RawDescriptionHelpFormatter)
265
+ m = p.add_argument_group("molecule")
266
+ m.add_argument("--candidate", choices=sorted(CANDIDATES), default=DEFAULT_CANDIDATE)
267
+ m.add_argument("--smiles", default=None, help="custom PROTAC SMILES (e.g. a reference PROTAC)")
268
+ m.add_argument("--name", default=None)
269
+ m.add_argument("--out-dir", default=None)
270
+ m.add_argument("--n-confs", type=int, default=20)
271
+
272
+ r = p.add_argument_group("simulation")
273
+ r.add_argument("--prep-only", action="store_true", help="only build 3D conformer (rdkit only)")
274
+ r.add_argument("--solvent", choices=["chloroform", "water"], default="chloroform",
275
+ help="chloroform = membrane-interior mimic (permeability); water = polar")
276
+ r.add_argument("--replicas", type=int, default=3, help="independent runs (different seeds)")
277
+ r.add_argument("--seed", type=int, default=1234)
278
+ r.add_argument("--small-mol-ff", dest="small_mol_ff", default="openff-2.2.0")
279
+ r.add_argument("--padding", type=float, default=1.2, help="solvent padding, nm")
280
+ r.add_argument("--ionic", type=float, default=0.15, help="NaCl conc (water only), M")
281
+ r.add_argument("--temperature", type=float, default=300.0)
282
+ r.add_argument("--pressure", type=float, default=1.0)
283
+ r.add_argument("--timestep", type=float, default=2.0)
284
+ r.add_argument("--hmass", type=float, default=1.5)
285
+ r.add_argument("--min-iters", type=int, default=5000)
286
+ r.add_argument("--heat-ps", type=float, default=100.0)
287
+ r.add_argument("--equil-ps", type=float, default=500.0)
288
+ r.add_argument("--prod-ns", type=float, default=100.0)
289
+ r.add_argument("--report-ps", type=float, default=10.0)
290
+
291
+ h = p.add_argument_group("hardware")
292
+ h.add_argument("--platform", default="auto", choices=["auto", "CUDA", "OpenCL", "CPU"])
293
+ h.add_argument("--gpu", type=int, default=0)
294
+ return p.parse_args()
295
+
296
+
297
+ def main():
298
+ cfg = parse_args()
299
+ smiles = cfg.smiles or CANDIDATES[cfg.candidate]
300
+ name = cfg.name or (cfg.candidate if not cfg.smiles else "custom_protac")
301
+ out_dir = cfg.out_dir or os.path.join(os.path.dirname(os.path.abspath(__file__)), name)
302
+ os.makedirs(out_dir, exist_ok=True)
303
+ print(f"[run] name={name} solvent={cfg.solvent} replicas={cfg.replicas} out={out_dir}")
304
+ print(f"[run] SMILES={smiles}")
305
+
306
+ rdkit_mol = build_conformer(smiles, name, out_dir, n_confs=cfg.n_confs)
307
+ if cfg.prep_only:
308
+ print("[run] --prep-only: done."); return
309
+ run_md(rdkit_mol, name, out_dir, cfg)
310
+ print("[run] all done.")
311
+
312
+
313
+ if __name__ == "__main__":
314
+ main()
CupOFMoCA-PROTAC/md/protacmd-lock-linux64.txt ADDED
@@ -0,0 +1,296 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file may be used to create an environment using:
2
+ # $ conda create --name <env> --file <this file>
3
+ # platform: linux-64
4
+ # created-by: conda 26.3.2
5
+ @EXPLICIT
6
+ https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda
7
+ https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda
8
+ https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2
9
+ https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2
10
+ https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2
11
+ https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda
12
+ https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda
13
+ https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda
14
+ https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-22.1.8-h4922eb0_0.conda
15
+ https://conda.anaconda.org/conda-forge/linux-64/onemkl-license-2025.3.1-hf2ce2f3_12.conda
16
+ https://conda.anaconda.org/conda-forge/noarch/python_abi-3.10-8_cp310.conda
17
+ https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda
18
+ https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-7_kmp_llvm.conda
19
+ https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda
20
+ https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.2-h25fd6f3_2.conda
21
+ https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda
22
+ https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2
23
+ https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda
24
+ https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda
25
+ https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda
26
+ https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda
27
+ https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda
28
+ https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda
29
+ https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda
30
+ https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda
31
+ https://conda.anaconda.org/conda-forge/linux-64/libffi-3.7.0-h3435931_0.conda
32
+ https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda
33
+ https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda
34
+ https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda
35
+ https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda
36
+ https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda
37
+ https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda
38
+ https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda
39
+ https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda
40
+ https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.3-h0c1763c_0.conda
41
+ https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda
42
+ https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda
43
+ https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda
44
+ https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda
45
+ https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda
46
+ https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda
47
+ https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda
48
+ https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda
49
+ https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda
50
+ https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda
51
+ https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda
52
+ https://conda.anaconda.org/conda-forge/linux-64/cuda-nvrtc-12.9.86-hecca717_1.conda
53
+ https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda
54
+ https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda
55
+ https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda
56
+ https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda
57
+ https://conda.anaconda.org/conda-forge/linux-64/libcufft-11.4.1.4-hecca717_1.conda
58
+ https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda
59
+ https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda
60
+ https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda
61
+ https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda
62
+ https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda
63
+ https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda
64
+ https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda
65
+ https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda
66
+ https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda
67
+ https://conda.anaconda.org/conda-forge/linux-64/libzip-1.11.2-h6991a6a_0.conda
68
+ https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda
69
+ https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda
70
+ https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hc749103_2.conda
71
+ https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda
72
+ https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda
73
+ https://conda.anaconda.org/conda-forge/linux-64/rocm-core-7.2.4-h54a6638_0.conda
74
+ https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda
75
+ https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda
76
+ https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.2.5-hde8ca8f_1.conda
77
+ https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda
78
+ https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda
79
+ https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.15.2-h3122c55_1.conda
80
+ https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.11-nompi_h3b011a4_100.conda
81
+ https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h2a13503_7.conda
82
+ https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda
83
+ https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda
84
+ https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda
85
+ https://conda.anaconda.org/conda-forge/linux-64/libglib-2.84.0-h2ff4ddf_0.conda
86
+ https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda
87
+ https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.2-h9d88235_0.conda
88
+ https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.4-hb03c661_1.conda
89
+ https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda
90
+ https://conda.anaconda.org/conda-forge/linux-64/python-3.10.20-h267e890_1_cpython.conda
91
+ https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda
92
+ https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda
93
+ https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda
94
+ https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda
95
+ https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda
96
+ https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.6.0-py310h69bd2ac_0.conda
97
+ https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda
98
+ https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py310hba01987_1.conda
99
+ https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_2.conda
100
+ https://conda.anaconda.org/conda-forge/noarch/cachetools-7.1.4-pyhd8ed1ab_0.conda
101
+ https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda
102
+ https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.9-pyhd8ed1ab_0.conda
103
+ https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda
104
+ https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda
105
+ https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hd9c7081_0.conda
106
+ https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.21-py310h25320af_0.conda
107
+ https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda
108
+ https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2
109
+ https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda
110
+ https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.1-h27c8c51_0.conda
111
+ https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda
112
+ https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.5.3-py310h25320af_0.conda
113
+ https://conda.anaconda.org/conda-forge/noarch/hpack-4.2.0-pyhd8ed1ab_0.conda
114
+ https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda
115
+ https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda
116
+ https://conda.anaconda.org/conda-forge/noarch/json5-0.15.0-pyhd8ed1ab_0.conda
117
+ https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda
118
+ https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.16-pyhcf101f3_1.conda
119
+ https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py310haaf941d_0.conda
120
+ https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda
121
+ https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_1.conda
122
+ https://conda.anaconda.org/conda-forge/linux-64/libboost-1.86.0-hed09d94_4.conda
123
+ https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-h4e3cde8_0.conda
124
+ https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.9-h04c0eec_0.conda
125
+ https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py310h3406613_1.conda
126
+ https://conda.anaconda.org/conda-forge/noarch/mda-xdrlib-0.2.0-pyhd8ed1ab_1.conda
127
+ https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda
128
+ https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda
129
+ https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.2-pyh267e887_2.conda
130
+ https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-system-1.0.0-1.tar.bz2
131
+ https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda
132
+ https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda
133
+ https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2
134
+ https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda
135
+ https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda
136
+ https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda
137
+ https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.25.0-pyhd8ed1ab_0.conda
138
+ https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py310h139afa4_0.conda
139
+ https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda
140
+ https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda
141
+ https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda
142
+ https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda
143
+ https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda
144
+ https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda
145
+ https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda
146
+ https://conda.anaconda.org/conda-forge/noarch/python-constraint-1.4.0-pyhff2d567_1.conda
147
+ https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda
148
+ https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2026.3-pyhd8ed1ab_0.conda
149
+ https://conda.anaconda.org/conda-forge/noarch/pytz-2026.2-pyhcf101f3_0.conda
150
+ https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py310h3406613_1.conda
151
+ https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2
152
+ https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py310hd8f68c5_0.conda
153
+ https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda
154
+ https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda
155
+ https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda
156
+ https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda
157
+ https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda
158
+ https://conda.anaconda.org/conda-forge/noarch/tinydb-4.8.2-pyhd8ed1ab_1.conda
159
+ https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda
160
+ https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py310h7c4b9e2_0.conda
161
+ https://conda.anaconda.org/conda-forge/noarch/tqdm-4.68.4-pyh8f84b5b_0.conda
162
+ https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda
163
+ https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda
164
+ https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda
165
+ https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py310h7c4b9e2_0.conda
166
+ https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda
167
+ https://conda.anaconda.org/conda-forge/noarch/validators-0.35.0-pyhd8ed1ab_0.conda
168
+ https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.2-pyhd8ed1ab_0.conda
169
+ https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda
170
+ https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda
171
+ https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda
172
+ https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.15-pyhd8ed1ab_0.conda
173
+ https://conda.anaconda.org/conda-forge/noarch/xmltodict-1.0.4-pyhcf101f3_0.conda
174
+ https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda
175
+ https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda
176
+ https://conda.anaconda.org/conda-forge/linux-64/xorg-libxt-1.3.1-hb9d3cd8_0.conda
177
+ https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda
178
+ https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda
179
+ https://conda.anaconda.org/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda
180
+ https://conda.anaconda.org/conda-forge/noarch/bleach-6.4.0-pyhcf101f3_0.conda
181
+ https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_2.conda
182
+ https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3394656_0.conda
183
+ https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py310h8deb56e_0.conda
184
+ https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda
185
+ https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.63.0-py310h3406613_0.conda
186
+ https://conda.anaconda.org/conda-forge/noarch/freetype-py-2.3.0-pyhd8ed1ab_0.tar.bz2
187
+ https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda
188
+ https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda
189
+ https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.4-nompi_h2d575fe_105.conda
190
+ https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda
191
+ https://conda.anaconda.org/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda
192
+ https://conda.anaconda.org/conda-forge/noarch/jedi-0.20.0-pyhcf101f3_0.conda
193
+ https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda
194
+ https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda
195
+ https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda
196
+ https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda
197
+ https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.1-default_h3d81e11_1000.conda
198
+ https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h7a3aeb2_0.conda
199
+ https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda
200
+ https://conda.anaconda.org/conda-forge/noarch/mistune-3.3.3-pyhcf101f3_0.conda
201
+ https://conda.anaconda.org/conda-forge/noarch/openff-amber-ff-ports-0.0.4-pyhca7485f_0.conda
202
+ https://conda.anaconda.org/conda-forge/noarch/openff-forcefields-2024.09.0-pyhff2d567_0.conda
203
+ https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-he970967_0.conda
204
+ https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda
205
+ https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda
206
+ https://conda.anaconda.org/conda-forge/linux-64/pillow-12.0.0-py310h049bd52_1.conda
207
+ https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda
208
+ https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda
209
+ https://conda.anaconda.org/conda-forge/noarch/python-json-logger-4.1.0-pyhd8ed1ab_0.conda
210
+ https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py310ha71cbf4_3.conda
211
+ https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda
212
+ https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda
213
+ https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda
214
+ https://conda.anaconda.org/conda-forge/noarch/smirnoff99frosst-1.1.0.1-pyhd8ed1ab_0.conda
215
+ https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda
216
+ https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda
217
+ https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda
218
+ https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.16.0-h69aa097_0.conda
219
+ https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhcf101f3_2.conda
220
+ https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda
221
+ https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda
222
+ https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.1-pyhcf101f3_0.conda
223
+ https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-25.1.0-py310h7c4b9e2_2.conda
224
+ https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda
225
+ https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda
226
+ https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.4.0-hac0b51c_0.conda
227
+ https://conda.anaconda.org/conda-forge/noarch/bson-0.5.10-pyhd8ed1ab_0.conda
228
+ https://conda.anaconda.org/conda-forge/noarch/flexcache-0.3-pyhd8ed1ab_1.conda
229
+ https://conda.anaconda.org/conda-forge/noarch/flexparser-0.4-pyhd8ed1ab_1.conda
230
+ https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda
231
+ https://conda.anaconda.org/conda-forge/noarch/ipython-8.37.0-pyh8f84b5b_0.conda
232
+ https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda
233
+ https://conda.anaconda.org/conda-forge/noarch/jupyter-builder-1.0.2-pyhcf101f3_0.conda
234
+ https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda
235
+ https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda
236
+ https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h5ddbaa4_116.conda
237
+ https://conda.anaconda.org/conda-forge/linux-64/libpq-18.1-h5c52fec_2.conda
238
+ https://conda.anaconda.org/conda-forge/linux-64/librdkit-2025.09.5-h3c5c181_0.conda
239
+ https://conda.anaconda.org/conda-forge/linux-64/lxml-6.0.2-py310h93f867a_0.conda
240
+ https://conda.anaconda.org/conda-forge/noarch/openff-utilities-0.1.15-pyhd8ed1ab_0.conda
241
+ https://conda.anaconda.org/conda-forge/noarch/pip-26.1.2-pyh8b19718_0.conda
242
+ https://conda.anaconda.org/conda-forge/linux-64/pycairo-1.29.0-py310h8c3e0f7_1.conda
243
+ https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.33.2-py310hd8f68c5_1.conda
244
+ https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.51-py310h139afa4_0.conda
245
+ https://conda.anaconda.org/conda-forge/linux-64/tbb-2022.3.0-h8d10470_1.conda
246
+ https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda
247
+ https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda
248
+ https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda
249
+ https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyha191276_0.conda
250
+ https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.8-pyhd8ed1ab_0.conda
251
+ https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda
252
+ https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda
253
+ https://conda.anaconda.org/conda-forge/linux-64/mkl-2025.3.1-h0e700b2_12.conda
254
+ https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.1-nompi_ha5d1325_108.conda
255
+ https://conda.anaconda.org/conda-forge/noarch/pint-0.24.4-pyhe01879c_2.conda
256
+ https://conda.anaconda.org/conda-forge/noarch/pydantic-2.11.10-pyh3cfb1c2_0.conda
257
+ https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda
258
+ https://conda.anaconda.org/conda-forge/noarch/rlpycairo-0.4.0-pyh6c17108_0.conda
259
+ https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda
260
+ https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda
261
+ https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h5875eb1_mkl.conda
262
+ https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda
263
+ https://conda.anaconda.org/conda-forge/noarch/reportlab-5.0.0-pyhc364b38_0.conda
264
+ https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.1-pyhcf101f3_0.conda
265
+ https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_hfef963f_mkl.conda
266
+ https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-6_h5e43f62_mkl.conda
267
+ https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda
268
+ https://conda.anaconda.org/conda-forge/linux-64/arpack-3.9.1-nompi_hf03ea27_102.conda
269
+ https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.17.1-pyhcf101f3_0.conda
270
+ https://conda.anaconda.org/conda-forge/linux-64/numpy-2.2.6-py310hefbff90_0.conda
271
+ https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.2-py310h3788b33_0.conda
272
+ https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.20.0-pyhcf101f3_0.conda
273
+ https://conda.anaconda.org/conda-forge/linux-64/libboost-python-1.86.0-py310hc563356_5.conda
274
+ https://conda.anaconda.org/conda-forge/linux-64/numexpr-2.14.1-mkl_py310h81ddd15_1.conda
275
+ https://conda.anaconda.org/conda-forge/noarch/openff-units-0.3.1-pyhd8ed1ab_1.conda
276
+ https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.3-py310h0158d43_2.conda
277
+ https://conda.anaconda.org/conda-forge/noarch/pyedr-0.8.0-pyhd8ed1ab_1.conda
278
+ https://conda.anaconda.org/conda-forge/linux-64/scipy-1.15.2-py310h1d65ade_0.conda
279
+ https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda
280
+ https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda
281
+ https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.9-py310hfde16b3_0.conda
282
+ https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda
283
+ https://conda.anaconda.org/conda-forge/noarch/openff-toolkit-base-0.16.10-pyhd8ed1ab_0.conda
284
+ https://conda.anaconda.org/conda-forge/linux-64/openmm-8.5.2-py310hc82e367_0.conda
285
+ https://conda.anaconda.org/conda-forge/noarch/panedr-0.8.0-pyhd8ed1ab_1.conda
286
+ https://conda.anaconda.org/conda-forge/linux-64/parmed-4.3.1-py310hc559de4_1.conda
287
+ https://conda.anaconda.org/conda-forge/linux-64/pytables-3.10.1-py310h431dcdc_4.conda
288
+ https://conda.anaconda.org/conda-forge/linux-64/ambertools-24.8-cuda_None_nompi_py310h834fefc_101.conda
289
+ https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.6.1-pyhd8ed1ab_0.conda
290
+ https://conda.anaconda.org/conda-forge/linux-64/mdtraj-1.10.3-py310h4cdbd58_0.conda
291
+ https://conda.anaconda.org/conda-forge/noarch/openff-interchange-base-0.4.2-pyhd8ed1ab_3.conda
292
+ https://conda.anaconda.org/conda-forge/linux-64/rdkit-2025.09.5-py310hd71299c_0.conda
293
+ https://conda.anaconda.org/conda-forge/noarch/notebook-7.6.0-pyhcf101f3_0.conda
294
+ https://conda.anaconda.org/conda-forge/noarch/openff-interchange-0.4.2-pyhd8ed1ab_3.conda
295
+ https://conda.anaconda.org/conda-forge/noarch/openff-toolkit-0.16.10-pyhd8ed1ab_0.conda
296
+ https://conda.anaconda.org/conda-forge/noarch/openmmforcefields-0.14.2-pyhd8ed1ab_0.conda
CupOFMoCA-PROTAC/md/psa_ensemble.py ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ """3D polar surface area over an MD ensemble.
3
+
4
+ Element-based PSA: N, O and polar H, Bondi radii, 1.4 A probe, mdtraj
5
+ shrake_rupley. validate_psa.py checks this code path against the published
6
+ grazoprevir numbers. Lower PSA in the membrane mimic tracks higher passive
7
+ permeability.
8
+
9
+ Polar atoms are indexed from each run's SDF, so the SDF and MD atom orders must
10
+ agree. A run whose ligand atom count does not match its SDF is reported and
11
+ dropped from the table rather than summed over the wrong atoms.
12
+
13
+ Usage:
14
+ python psa_ensemble.py egfrvhl_rank4 ms39_ref --solvent chloroform --out psa.npy
15
+ """
16
+ import argparse, glob, os
17
+ import numpy as np
18
+ import mdtraj as md
19
+ from rdkit import Chem
20
+
21
+
22
+ def polar_idx_from_sdf(sdf):
23
+ m = Chem.MolFromMolFile(sdf, removeHs=False)
24
+ idx = []
25
+ for a in m.GetAtoms():
26
+ s = a.GetSymbol()
27
+ if s in ("N", "O"):
28
+ idx.append(a.GetIdx())
29
+ elif s == "H" and any(nb.GetSymbol() in ("N", "O") for nb in a.GetNeighbors()):
30
+ idx.append(a.GetIdx())
31
+ return idx, m.GetNumAtoms()
32
+
33
+
34
+ def main():
35
+ ap = argparse.ArgumentParser()
36
+ ap.add_argument("runs", nargs="+", help="run directories, one per compound")
37
+ ap.add_argument("--solvent", default="chloroform")
38
+ ap.add_argument("--stride", type=int, default=20)
39
+ ap.add_argument("--out", default=None, help="optional .npy dump of the per-frame values")
40
+ a = ap.parse_args()
41
+
42
+ print(f"{'compound':16s}{'n_pol':6s}{'3D PSA (A^2) mean(std)':24s}{'frames':8s}")
43
+ print("-" * 56)
44
+ out = {}
45
+ for run in a.runs:
46
+ name = os.path.basename(run.rstrip("/"))
47
+ pol, nat = polar_idx_from_sdf(os.path.join(run, f"{name}.sdf"))
48
+ tops = glob.glob(os.path.join(run, a.solvent, "*_solvated.pdb"))
49
+ if not tops:
50
+ print(f"{name:16s} no {a.solvent} topology"); continue
51
+ vals = []
52
+ for dcd in sorted(glob.glob(os.path.join(run, a.solvent, "rep*", f"{name}_prod.dcd"))):
53
+ tr = md.load(dcd, top=tops[0], stride=a.stride)
54
+ lig = [at.index for r in tr.topology.residues
55
+ if not r.is_water and r.n_atoms > 5 for at in r.atoms]
56
+ sub = tr.atom_slice(lig)
57
+ if sub.n_atoms != nat:
58
+ print(f"{name:16s} atom count mismatch md={sub.n_atoms} sdf={nat}")
59
+ vals = None
60
+ break
61
+ sasa = md.shrake_rupley(sub, mode="atom", probe_radius=0.14) # nm^2
62
+ vals.extend((sasa[:, pol].sum(1) * 100.0).tolist()) # A^2 per frame
63
+ if vals:
64
+ v = np.array(vals)
65
+ print(f"{name:16s}{len(pol):<6d}{f'{v.mean():.0f} ({v.std():.0f})':24s}{len(v):<8d}")
66
+ out[name] = dict(mean=float(v.mean()), std=float(v.std()), vals=v.tolist())
67
+ if a.out and out:
68
+ np.save(a.out, out, allow_pickle=True)
69
+ print(f"\nsaved {a.out}")
70
+
71
+
72
+ if __name__ == "__main__":
73
+ main()
CupOFMoCA-PROTAC/md/psa_method_probe.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ """Compare polar-atom selection conventions for 3D PSA on a finished run.
3
+
4
+ The element-based selection (N, O, polar H) and the charge-threshold selection
5
+ used in the reference work give different absolute PSA values on the same
6
+ trajectory. This prints both, sweeping the charge threshold, so a gap against
7
+ published numbers can be attributed to convention rather than to conformation.
8
+ Charges come from the run's AM1-BCC cache, so nothing is recomputed.
9
+
10
+ Takes a run name rather than a path and resolves <name>/<solvent>/ against the
11
+ current directory, so run it from the md folder. Solvent defaults to chloroform.
12
+
13
+ Usage:
14
+ python psa_method_probe.py egfrvhl_rank4 [solvent]
15
+ """
16
+ import json, glob, numpy as np, mdtraj as md
17
+ import xml.etree.ElementTree as ET
18
+
19
+ def cached_charges(cache_path):
20
+ d = json.load(open(cache_path))
21
+ entry = list(list(d.values())[0].values())[0] # {'openff-2.2.0': {'1': {'ffxml': ...}}}
22
+ ffxml = entry["ffxml"]
23
+ root = ET.fromstring(ffxml)
24
+ # type -> charge from NonbondedForce
25
+ q_by_type = {}
26
+ for a in root.iter("Atom"):
27
+ if a.get("charge") is not None and a.get("type") is not None:
28
+ q_by_type[a.get("type")] = float(a.get("charge"))
29
+ # atom order from the Residue template
30
+ res = root.find(".//Residues/Residue")
31
+ order = [a.get("type") for a in res.findall("Atom")]
32
+ return np.array([q_by_type[t] for t in order])
33
+
34
+ def main():
35
+ import sys
36
+ NAME = sys.argv[1] if len(sys.argv) > 1 else "egfrvhl_rank4"
37
+ SOL = sys.argv[2] if len(sys.argv) > 2 else "chloroform"
38
+ q = cached_charges(f"{NAME}/{SOL}/ff_cache.json")
39
+ print(f"charges from cache: n={len(q)} range [{q.min():.2f},{q.max():.2f}] "
40
+ f"#|q|>1.0={(np.abs(q) > 1.0).sum()}")
41
+
42
+ top = glob.glob(f"{NAME}/{SOL}/*_solvated.pdb")[0]
43
+ reps = sorted(glob.glob(f"{NAME}/{SOL}/rep*/{NAME}_prod.dcd"))
44
+ tr = md.join([md.load(r, top=top) for r in reps])
45
+ lig = [a.index for r in tr.topology.residues if not r.is_water and r.n_atoms > 5
46
+ for a in r.atoms]
47
+ t = tr.atom_slice(lig); t.center_coordinates(); L = t.topology
48
+ syms = [a.element.symbol for a in L.atoms]
49
+ if len(syms) != len(q):
50
+ print(f"atom-count mismatch: cache {len(q)} vs MD {len(syms)}"); return
51
+ sasa = md.shrake_rupley(t, mode="atom", probe_radius=0.14) # nm^2
52
+ def area(mask): return (sasa[:, mask].sum(1) * 100.0).mean()
53
+
54
+ nbr = {}
55
+ for b in L.bonds:
56
+ nbr.setdefault(b[0].index, []).append(b[1].index)
57
+ nbr.setdefault(b[1].index, []).append(b[0].index)
58
+ elem = np.array([i for i, a in enumerate(L.atoms)
59
+ if a.element.symbol in ("N", "O") or (a.element.symbol == "H" and
60
+ any(L.atom(j).element.symbol in ("N", "O") for j in nbr.get(a.index, [])))])
61
+
62
+ print(f"\nelement selection (N, O, polar H): {area(elem):.0f} A2 ({len(elem)} atoms)")
63
+ print("charge-threshold selection:")
64
+ print(f" {'|q|>thr':>8s}{'#atoms':>8s}{'PSA':>7s}")
65
+ for thr in [0.10, 0.15, 0.20, 0.25, 0.30, 0.40, 0.50]:
66
+ m = np.abs(q) > thr
67
+ print(f" {thr:>8.2f}{int(m.sum()):>8d}{area(m):>7.0f}")
68
+ print("\nreference permeable band = 190-265 A2")
69
+
70
+ if __name__ == "__main__":
71
+ main()
CupOFMoCA-PROTAC/md/reference_protocol.md ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Reference protocol and permeability yardsticks
2
+
3
+ The MD pipeline in this folder is a deliberate copy of one published protocol,
4
+ with the numbers it should be read against collected here.
5
+
6
+ ## Sources
7
+
8
+ - **"Linker-Dependent Folding Rationalizes PROTAC Cell Permeability,"
9
+ *J. Med. Chem.* 2022 (PMC9574858).** The MD paper, and the template for
10
+ `protac_md.py` and `analyze_conformations.py`. Three CRBN/BRD4 PROTACs with
11
+ different linkers, PEG-like against alkyl.
12
+ - **Atilaw et al., "Solution Conformations Shed Light on PROTAC Cell
13
+ Permeability," *ACS Med. Chem. Lett.* 2021, 12, 107-114.** NMR plus Monte
14
+ Carlo conformational search and NAMFIS, not MD, on one VHL PROTAC (ERK5). It
15
+ is the source of the folded-versus-extended framing and of the Rg cutoff
16
+ below, nothing else.
17
+
18
+ ## Protocol
19
+
20
+ | Setting | Reference choice | Here |
21
+ |---|---|---|
22
+ | Engine / ligand force field | Amber 18, GAFF, geometry pre-optimized in Gaussian | OpenMM 8, OpenFF Sage 2.2 with AM1-BCC charges |
23
+ | Solvent | explicit chloroform, ~3000 molecules, truncated octahedron | explicit chloroform via packmol, plus water as a polar reference |
24
+ | Production | 100 ns after equilibration | 50-100 ns, `--prod-ns` |
25
+ | Replicas | 3 | 3, independent velocity seeds |
26
+ | Ensemble | 300 K, PBC, ~10,000 snapshots per trajectory | 300 K / 1 bar NPT, 10 ps per frame |
27
+ | Convergence | RMSD, converged within 5-10 ns | RMSD to the first frame plus replica-mean spread |
28
+ | Analyses | Rg (cpptraj), 3D PSA (PyMOL), intramolecular H-bonds, PMI shape, PCA and K-means into 5 clusters | Rg, 3D PSA (mdtraj SASA over N, O and polar H), H-bonds, PCA and K-means |
29
+
30
+ Chloroform stands in for the membrane interior: its dielectric constant of 4.8
31
+ is close to what a molecule sees while crossing a bilayer.
32
+
33
+ ## Yardsticks
34
+
35
+ - **Rg below 7 A** marks the folded, passively permeable regime. This cutoff is
36
+ from the 2021 NMR paper, on a single VHL PROTAC, and it does not separate the
37
+ compounds in the 2022 MD paper.
38
+ - **Mean Rg alone does not discriminate.** In the 2022 MD paper:
39
+
40
+ | compound | P_passive (nm/s) | dominant Rg | compact local minimum |
41
+ |---|---|---|---|
42
+ | PROTAC 1, most permeable | 30 ± 1.5 | just over 8 A | 5.6 A |
43
+ | PROTAC 2 | 11 ± 1.7 | just over 7 A | 5.5 A |
44
+ | PROTAC 3, least permeable | 6 ± 1.4 | 7-9.5 A, extended | none |
45
+
46
+ Their most permeable compound sits mainly just above 8 A, overlapping their
47
+ worst. What separates the two is whether a compact minimum near 5.5 A is
48
+ accessible at all: PROTACs 1 and 2 have one, PROTAC 3 does not. Report the Rg
49
+ distribution and the compact-state population, which is what `rg_basins.py`
50
+ computes, rather than the mean. Absolute Rg is also not strictly transferable
51
+ across chemical series; theirs is CRBN/BRD4, the runs here are VHL/EGFR.
52
+ - **3D PSA** rises as permeability falls: 190-265 A^2 for the two more permeable
53
+ compounds against 290-330 A^2 for the poorly permeable one. The rough cutoff
54
+ for low-to-moderate permeability is 200-210 A^2, from the 2021 paper. Absolute
55
+ values depend on the polar-atom selection; `validate_psa.py` and
56
+ `psa_method_probe.py` pin down where this convention sits relative to theirs.
57
+ - Permeability correlates inversely with 3D PSA and with intramolecular H-bond
58
+ count.
CupOFMoCA-PROTAC/md/render_3d.py ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ """Ball-and-stick renders of two PROTAC conformations from a replica trajectory:
3
+ the most extended early frame beside the most collapsed late frame. Both frames
4
+ are also written out as PDBs for PyMOL / VMD / ChimeraX.
5
+
6
+ Usage:
7
+ python render_3d.py --rep egfrvhl_rank4/chloroform/rep1
8
+ """
9
+ import argparse, glob, os
10
+ import numpy as np
11
+ import mdtraj as md
12
+ import matplotlib
13
+ matplotlib.use("Agg")
14
+ import matplotlib.pyplot as plt
15
+ from mpl_toolkits.mplot3d.art3d import Line3DCollection
16
+
17
+ # CPK element colors and relative sizes
18
+ CPK = {"C": ("#4d4d4d", 55), "N": ("#3050f8", 70), "O": ("#ff2d2d", 70),
19
+ "S": ("#e6c200", 95), "Cl": ("#1fd01f", 95), "F": ("#6fd0c0", 60),
20
+ "H": ("#dddddd", 20)}
21
+
22
+ def draw(ax, xyz, syms, bonds, title):
23
+ xyz = xyz - xyz.mean(0)
24
+ segs = [[xyz[i], xyz[j]] for i, j in bonds]
25
+ ax.add_collection3d(Line3DCollection(segs, colors="#888888", linewidths=1.6))
26
+ for el in set(syms):
27
+ m = [k for k, s in enumerate(syms) if s == el]
28
+ c, sz = CPK.get(el, ("#cc44cc", 60))
29
+ ax.scatter(xyz[m, 0], xyz[m, 1], xyz[m, 2], c=c, s=sz,
30
+ edgecolors="white", linewidths=0.4, depthshade=True)
31
+ ax.set_title(title, fontsize=12, weight="bold", color="#222", pad=0)
32
+ r = np.abs(xyz).max() * 1.05
33
+ ax.set_xlim(-r, r); ax.set_ylim(-r, r); ax.set_zlim(-r, r)
34
+ ax.set_box_aspect((1, 1, 1)); ax.axis("off")
35
+
36
+ def main():
37
+ p = argparse.ArgumentParser()
38
+ p.add_argument("--rep", required=True, help="replica directory, e.g. <name>/<solvent>/rep1")
39
+ p.add_argument("--name", default=None, help="run name (default: the run directory's name)")
40
+ p.add_argument("--report-ps", type=float, default=10.0, help="DCD frame interval")
41
+ a = p.parse_args()
42
+ rep = a.rep.rstrip("/")
43
+ name = a.name or os.path.basename(os.path.dirname(os.path.dirname(rep)))
44
+
45
+ solvated = glob.glob(os.path.join(rep, os.pardir, "*_solvated.pdb"))[0]
46
+ traj = md.load(os.path.join(rep, f"{name}_prod.dcd"), top=solvated)
47
+ top = traj.topology
48
+ # the PROTAC is the one non-water residue with many atoms; water and ions are tiny
49
+ lig = [at.index for res in top.residues
50
+ if not res.is_water and res.n_atoms > 5 for at in res.atoms]
51
+ heavy = [i for i in lig if top.atom(i).element.symbol != "H"]
52
+ lset = set(heavy)
53
+ remap = {g: k for k, g in enumerate(heavy)}
54
+ bonds = [(remap[b0.index], remap[b1.index]) for b0, b1 in top.bonds
55
+ if b0.index in lset and b1.index in lset]
56
+ syms = [top.atom(i).element.symbol for i in heavy]
57
+
58
+ sub = traj.atom_slice(heavy)
59
+ rg = md.compute_rg(sub) # nm
60
+ n = len(rg); early = slice(0, n // 3); late = slice(2 * n // 3, n)
61
+ fe = np.arange(n)[early][np.argmax(rg[early])] # extended
62
+ fc = np.arange(n)[late][np.argmin(rg[late])] # collapsed
63
+ xyz_A = sub.xyz * 10.0 # nm -> Angstrom
64
+ ns = a.report_ps / 1000.0
65
+
66
+ fig = plt.figure(figsize=(13, 6.5), dpi=150); fig.patch.set_facecolor("white")
67
+ ax1 = fig.add_subplot(121, projection="3d")
68
+ draw(ax1, xyz_A[fe], syms, bonds, f"Extended (t={fe*ns:.1f} ns, Rg={rg[fe]:.2f} nm)")
69
+ ax2 = fig.add_subplot(122, projection="3d")
70
+ draw(ax2, xyz_A[fc], syms, bonds, f"Collapsed (t={fc*ns:.1f} ns, Rg={rg[fc]:.2f} nm)")
71
+ fig.suptitle(f"Free-PROTAC conformations from MD - {name} (heavy atoms, H hidden)",
72
+ fontsize=13, weight="bold", color="#222", y=0.97)
73
+ out = os.path.join(rep, f"{name}_3d.png")
74
+ fig.savefig(out, facecolor="white", bbox_inches="tight"); print("wrote", out)
75
+
76
+ sub[fe].save_pdb(os.path.join(rep, f"{name}_extended.pdb"))
77
+ sub[fc].save_pdb(os.path.join(rep, f"{name}_collapsed.pdb"))
78
+ print(f"extended frame {fe} (Rg {rg[fe]:.2f}), collapsed frame {fc} (Rg {rg[fc]:.2f})")
79
+
80
+ if __name__ == "__main__":
81
+ main()
CupOFMoCA-PROTAC/md/rg_basins.py ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ """Rg free-energy profiles and basin populations for one or more finished runs.
3
+
4
+ Mean Rg does not separate permeable from non-permeable PROTACs in the J. Med.
5
+ Chem. 2022 study: their most permeable compound sits mainly just above 8 A,
6
+ overlapping their least permeable one at 7-9.5 A. What separates them is whether
7
+ a compact minimum near 5.5 A is populated at all. This script computes, per
8
+ compound and solvent,
9
+
10
+ PMF(Rg) = -kT ln P(Rg)
11
+
12
+ locates its basins (local minima), and reports each basin's position and
13
+ population, plus the fraction of frames below 6 and 7 A.
14
+
15
+ Ligand selection and the Rg calculation match analyze_conformations.py exactly
16
+ (non-water residue with >5 atoms, md.compute_rg on the centred ligand-only
17
+ trajectory).
18
+
19
+ Usage:
20
+ python rg_basins.py egfrvhl_rank4 ms39_ref --solvents chloroform water
21
+ """
22
+ import argparse, glob, os
23
+ import numpy as np
24
+ import mdtraj as md
25
+ from scipy.stats import gaussian_kde
26
+ from scipy.signal import find_peaks
27
+ import matplotlib; matplotlib.use("Agg")
28
+ import matplotlib.pyplot as plt
29
+
30
+ KT = 0.593 # kcal/mol at 300 K
31
+
32
+
33
+ def pooled_rg(run_dir, solvent):
34
+ """Rg in Angstrom, pooled over replicas."""
35
+ name = os.path.basename(run_dir.rstrip("/"))
36
+ tops = glob.glob(os.path.join(run_dir, solvent, f"{name}_*_solvated.pdb"))
37
+ dcds = sorted(glob.glob(os.path.join(run_dir, solvent, "rep*", f"{name}_prod.dcd")))
38
+ if not tops or not dcds:
39
+ return None
40
+ out = []
41
+ for d in dcds:
42
+ tr = md.load(d, top=tops[0])
43
+ lig = [a.index for r in tr.topology.residues
44
+ if not r.is_water and r.n_atoms > 5 for a in r.atoms]
45
+ lt = tr.atom_slice(lig)
46
+ lt.center_coordinates()
47
+ out.append(md.compute_rg(lt) * 10.0) # nm -> A
48
+ return np.concatenate(out)
49
+
50
+
51
+ def basins(rg, prom_frac=0.05):
52
+ """Basins = peaks of P(Rg). Returns (grid, pmf, [(rg_position, population)])."""
53
+ grid = np.linspace(rg.min() - 0.3, rg.max() + 0.3, 400)
54
+ dens = gaussian_kde(rg, bw_method=0.12)(grid)
55
+ pmf = -KT * np.log(np.clip(dens, 1e-12, None))
56
+ pmf -= pmf.min()
57
+ pk, _ = find_peaks(dens, prominence=prom_frac * dens.max())
58
+ if len(pk) == 0:
59
+ pk = np.array([int(np.argmax(dens))])
60
+ # valley boundaries between adjacent peaks assign frames to basins
61
+ edges = [rg.min() - 1e-6]
62
+ for a, b in zip(pk[:-1], pk[1:]):
63
+ edges.append(grid[a + int(np.argmin(dens[a:b]))])
64
+ edges.append(rg.max() + 1e-6)
65
+ out = []
66
+ for i, p in enumerate(pk):
67
+ pop = float(((rg > edges[i]) & (rg <= edges[i + 1])).mean())
68
+ out.append((float(grid[p]), pop))
69
+ return grid, pmf, out
70
+
71
+
72
+ def main():
73
+ ap = argparse.ArgumentParser()
74
+ ap.add_argument("runs", nargs="+", help="run directories, one per compound")
75
+ ap.add_argument("--solvents", nargs="+", default=["chloroform", "water"])
76
+ ap.add_argument("--plot-solvent", default="chloroform",
77
+ help="solvent whose PMFs go into the figure")
78
+ ap.add_argument("--out", default="rg_basins.png")
79
+ a = ap.parse_args()
80
+
81
+ print(f"{'compound':22s}{'solv':6s}{'mean':>7s}{'basins (Rg A, pop%)':>44s}{'<6A':>7s}{'<7A':>7s}")
82
+ print("-" * 96)
83
+ results = {}
84
+ for run in a.runs:
85
+ label = os.path.basename(run.rstrip("/"))
86
+ for sol in a.solvents:
87
+ rg = pooled_rg(run, sol)
88
+ if rg is None:
89
+ continue
90
+ grid, pmf, bs = basins(rg)
91
+ results[(label, sol)] = (rg, grid, pmf, bs)
92
+ btxt = " ".join(f"{p:.2f}({100*w:.0f}%)" for p, w in bs)
93
+ print(f"{label:22s}{sol[:5]:6s}{rg.mean():7.2f}{btxt:>44s}"
94
+ f"{100*(rg<6.0).mean():6.0f}%{100*(rg<7.0).mean():6.0f}%")
95
+
96
+ have = [k for k in results if k[1] == a.plot_solvent]
97
+ if not have:
98
+ return
99
+ fig, ax = plt.subplots(figsize=(11, 6.5), dpi=150)
100
+ fig.patch.set_facecolor("white")
101
+ cmap = plt.get_cmap("viridis")
102
+ for i, key in enumerate(have):
103
+ _, grid, pmf, _ = results[key]
104
+ ax.plot(grid, pmf, lw=2.2, color=cmap(i / max(1, len(have) - 1)), label=key[0])
105
+ ax.axvspan(5.4, 5.7, color="#009E73", alpha=0.12)
106
+ ax.text(5.55, ax.get_ylim()[1] * 0.94, "reference compact\nminimum 5.5-5.6 A",
107
+ ha="center", fontsize=8.5, color="#009E73", weight="bold")
108
+ ax.axvspan(7.0, 9.5, color="#C0392B", alpha=0.07)
109
+ ax.text(8.25, ax.get_ylim()[1] * 0.94, "reference least-permeable\ncompound 7-9.5 A",
110
+ ha="center", fontsize=8.5, color="#C0392B", weight="bold")
111
+ ax.set_xlabel("Radius of gyration (A)")
112
+ ax.set_ylabel("PMF -kT ln P(Rg) (kcal/mol)")
113
+ ax.set_title(f"Rg free-energy profiles in {a.plot_solvent}",
114
+ fontsize=13, weight="bold", loc="left")
115
+ ax.set_ylim(0, 3.2); ax.legend(fontsize=8.5, frameon=False, ncol=2)
116
+ ax.grid(alpha=0.25)
117
+ fig.tight_layout()
118
+ fig.savefig(a.out, facecolor="white")
119
+ print(f"\nwrote {a.out}")
120
+
121
+
122
+ if __name__ == "__main__":
123
+ main()
CupOFMoCA-PROTAC/md/run_candidate.sh ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ # Detached driver for one PROTAC candidate: chloroform 3 x 50 ns, analysis,
3
+ # then water 3 x 50 ns, analysis. The chloroform AM1-BCC charge cache is staged
4
+ # into the water run so sqm is only paid once.
5
+ #
6
+ # run_candidate.sh <NAME> <GPU> <SMILES> [WAIT_LOGFILE] [WAIT_MARKER]
7
+ #
8
+ # With WAIT_LOGFILE and WAIT_MARKER the job queues instead of starting: it polls
9
+ # that log until the marker appears (the predecessor on the same GPU printed
10
+ # CANDIDATE_DONE), so two jobs never share a card. Waiting greps a file rather
11
+ # than process names, which would otherwise match this script's own cmdline.
12
+ # WAIT_LOGFILE resolves against this script's directory, not the caller's cwd,
13
+ # and after MAXWAIT the job stops waiting and starts anyway, which can put two
14
+ # jobs on one card.
15
+ set -u
16
+
17
+ NAME="$1"; GPU="$2"; SMI="$3"; WLOG="${4:-}"; WMARK="${5:-}"
18
+ MD="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
19
+ CONDA_ENV="${CONDA_ENV:-protacmd}"
20
+ MAXWAIT=$((14*3600)) # never queue longer than this
21
+
22
+ if [ -n "${CONDA_SH:-}" ]; then
23
+ source "$CONDA_SH"
24
+ elif [ -n "${CONDA_EXE:-}" ]; then
25
+ source "$(dirname "$(dirname "$CONDA_EXE")")/etc/profile.d/conda.sh"
26
+ fi
27
+ conda activate "$CONDA_ENV"
28
+ cd "$MD"
29
+
30
+ log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"; }
31
+
32
+ log "CANDIDATE_START name=$NAME gpu=$GPU"
33
+
34
+ if [ -n "$WLOG" ] && [ -n "$WMARK" ]; then
35
+ log "QUEUED on GPU $GPU: waiting for '$WMARK' in $WLOG ..."
36
+ waited=0
37
+ until grep -q "$WMARK" "$MD/$WLOG" 2>/dev/null; do
38
+ sleep 60; waited=$((waited+60))
39
+ if [ "$waited" -ge "$MAXWAIT" ]; then
40
+ log "waited ${waited}s without seeing '$WMARK', starting anyway"; break
41
+ fi
42
+ [ $((waited % 1800)) -eq 0 ] && log " ... still waiting (${waited}s)"
43
+ done
44
+ log "predecessor finished after ${waited}s, starting $NAME on GPU $GPU"
45
+ fi
46
+
47
+ nvidia-smi --query-gpu=index,utilization.gpu,memory.used --format=csv,noheader | sed 's/^/[gpu] /'
48
+
49
+ run_solvent() {
50
+ local sol="$1"
51
+ log "=== $NAME / $sol : 3 x 50 ns START ==="
52
+ python protac_md.py --solvent "$sol" --replicas 3 --prod-ns 50 \
53
+ --smiles "$SMI" --name "$NAME" --gpu "$GPU"
54
+ local rc=$?
55
+ log "=== $NAME / $sol : MD finished rc=$rc ==="
56
+ if [ $rc -eq 0 ]; then
57
+ log "--- $NAME / $sol : analysis START ---"
58
+ python analyze_conformations.py --dir "$NAME/$sol" --name "$NAME"
59
+ log "--- $NAME / $sol : analysis finished rc=$? ---"
60
+ else
61
+ log "$NAME / $sol MD failed (rc=$rc), skipping analysis"
62
+ fi
63
+ }
64
+
65
+ run_solvent chloroform
66
+ CH="$MD/$NAME/chloroform/ff_cache.json"
67
+ if [ -s "$CH" ]; then
68
+ mkdir -p "$MD/$NAME/water"; cp -f "$CH" "$MD/$NAME/water/ff_cache.json"
69
+ log "staged charge cache -> $NAME/water/ff_cache.json"
70
+ fi
71
+ run_solvent water
72
+
73
+ log "CANDIDATE_DONE name=$NAME"
CupOFMoCA-PROTAC/md/ternary_span.py ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ """Warhead-to-E3 span distribution from the water ensembles.
3
+
4
+ Per frame, the distance between the centroid of the warhead core (the group that
5
+ occupies the target pocket) and the centroid of the E3 ligand core. In a
6
+ productive ternary complex that span has to bridge the two pockets, so the
7
+ distribution shows which separations a linker can hold. Water, not chloroform:
8
+ the ternary complex forms in the cytosol.
9
+
10
+ This is a description of reach, not a degradation score; scoring it needs a
11
+ target ternary geometry from docking. Replica spread is printed alongside so
12
+ poorly converged runs are visible.
13
+
14
+ Default SMARTS are for the EGFR-VHL series (anilinoquinazoline warhead,
15
+ 4-hydroxyproline E3 anchor); override with --warhead-smarts / --e3-smarts.
16
+
17
+ Usage:
18
+ python ternary_span.py egfrvhl_rank4 ms39_ref --out span.png
19
+ """
20
+ import argparse, glob, os
21
+ import numpy as np
22
+ import mdtraj as md
23
+ from rdkit import Chem
24
+ from scipy.stats import gaussian_kde
25
+ import matplotlib; matplotlib.use("Agg")
26
+ import matplotlib.pyplot as plt
27
+
28
+ WH_SMARTS = "c1cc2ncncc2cc1" # quinazoline bicyclic, target pocket
29
+ E3_SMARTS = "[#6]1[#6][#6](O)[#6][#7]1" # 4-hydroxypyrrolidine, VHL pocket
30
+
31
+
32
+ def anchors(sdf, wh_smarts, e3_smarts):
33
+ m = Chem.MolFromMolFile(sdf, removeHs=False)
34
+ wh = list(m.GetSubstructMatch(Chem.MolFromSmarts(wh_smarts)))
35
+ e3 = list(m.GetSubstructMatch(Chem.MolFromSmarts(e3_smarts)))
36
+ syms = [a.GetSymbol() for a in m.GetAtoms()]
37
+ return wh, e3, syms
38
+
39
+
40
+ def spans_for_run(run, solvent, wh_smarts, e3_smarts):
41
+ """Per-replica span arrays (A), or None if the run can't be used."""
42
+ name = os.path.basename(run.rstrip("/"))
43
+ tops = glob.glob(os.path.join(run, solvent, "*_solvated.pdb"))
44
+ dcds = sorted(glob.glob(os.path.join(run, solvent, "rep*", f"{name}_prod.dcd")))
45
+ if not tops or not dcds:
46
+ print(f"{name:14s} no {solvent} data")
47
+ return None
48
+ wh, e3, sdf_syms = anchors(os.path.join(run, f"{name}.sdf"), wh_smarts, e3_smarts)
49
+ if not wh or not e3:
50
+ print(f"{name:14s} SMARTS match failed (wh={len(wh)} e3={len(e3)})")
51
+ return None
52
+ out = []
53
+ for d in dcds:
54
+ tr = md.load(d, top=tops[0])
55
+ lig = [a.index for r in tr.topology.residues
56
+ if not r.is_water and r.n_atoms > 5 for a in r.atoms]
57
+ sub = tr.atom_slice(lig)
58
+ if [a.element.symbol for a in sub.topology.atoms] != sdf_syms:
59
+ print(f"{name:14s} SDF/MD atom-order mismatch, skipping")
60
+ return None
61
+ xyz = sub.xyz * 10.0 # nm -> A
62
+ out.append(np.linalg.norm(xyz[:, wh, :].mean(1) - xyz[:, e3, :].mean(1), axis=1))
63
+ return out
64
+
65
+
66
+ def main():
67
+ ap = argparse.ArgumentParser()
68
+ ap.add_argument("runs", nargs="+", help="run directories, one per compound")
69
+ ap.add_argument("--solvent", default="water")
70
+ ap.add_argument("--warhead-smarts", default=WH_SMARTS)
71
+ ap.add_argument("--e3-smarts", default=E3_SMARTS)
72
+ ap.add_argument("--out", default="ternary_span.png")
73
+ a = ap.parse_args()
74
+
75
+ fig, ax = plt.subplots(figsize=(11, 6.5), dpi=150)
76
+ fig.patch.set_facecolor("white")
77
+ cmap = plt.get_cmap("viridis")
78
+ print(f"{'compound':14s}{'mean span':>10s}{'sd':>6s}{'min':>6s}{'max':>6s}"
79
+ f"{'range':>7s}{'rep spread':>12s}")
80
+ print("-" * 67)
81
+ drawn = 0
82
+ for i, run in enumerate(a.runs):
83
+ label = os.path.basename(run.rstrip("/"))
84
+ per_rep = spans_for_run(run, a.solvent, a.warhead_smarts, a.e3_smarts)
85
+ if not per_rep:
86
+ continue
87
+ s = np.concatenate(per_rep)
88
+ spread = float(np.std([r.mean() for r in per_rep]))
89
+ print(f"{label:14s}{s.mean():10.1f}{s.std():6.1f}{s.min():6.1f}"
90
+ f"{s.max():6.1f}{s.max()-s.min():7.1f}{spread:12.1f}")
91
+ grid = np.linspace(3, 25, 300)
92
+ ax.plot(grid, gaussian_kde(s, bw_method=0.15)(grid), lw=2.2,
93
+ color=cmap(i / max(1, len(a.runs) - 1)),
94
+ label=f"{label} ({s.mean():.0f} A)")
95
+ drawn += 1
96
+ if not drawn:
97
+ return
98
+ ax.set_xlabel("warhead to E3 pharmacophore separation (A)")
99
+ ax.set_ylabel("probability density")
100
+ ax.set_title("Warhead to E3 span\n"
101
+ f"centroid distance between the pocket-binding groups ({a.solvent})",
102
+ fontsize=12.5, weight="bold", loc="left")
103
+ ax.legend(fontsize=8.5, frameon=False, ncol=2)
104
+ ax.grid(alpha=0.25)
105
+ fig.tight_layout()
106
+ fig.savefig(a.out, facecolor="white")
107
+ print(f"\nwrote {a.out}")
108
+
109
+
110
+ if __name__ == "__main__":
111
+ main()
CupOFMoCA-PROTAC/md/validate_psa.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ """Sanity check for the 3D PSA code path used by psa_ensemble.py.
3
+
4
+ Runs the same element-based PSA (N, O, polar H; Bondi radii; 1.4 A probe; mdtraj
5
+ shrake_rupley) on grazoprevir, whose solution-accessible 3D PSA is reported as
6
+ 144-205 A^2 (174 A^2 for the crystal conformer) using a charge-threshold
7
+ selection in PyMOL. Agreement means the two conventions land on the same scale,
8
+ so PROTAC numbers from psa_ensemble.py can be read against published values.
9
+
10
+ Needs no finished run: grazoprevir and its conformers are generated here, so it
11
+ takes seconds.
12
+
13
+ Usage:
14
+ python validate_psa.py
15
+ """
16
+ import numpy as np, tempfile, os
17
+ from rdkit import Chem
18
+ from rdkit.Chem import AllChem
19
+ import mdtraj as md
20
+
21
+ # grazoprevir, PubChem CID 44603531 (SMILES field, verbatim)
22
+ SMI = "CC(C)(C)[C@H]1C(=O)N2C[C@@H](C[C@H]2C(=O)N[C@@]3(C[C@H]3C=C)C(=O)NS(=O)(=O)C4CC4)OC5=NC6=C(C=CC(=C6)OC)N=C5CCCCC[C@@H]7C[C@H]7OC(=O)N1"
23
+
24
+ m = Chem.AddHs(Chem.MolFromSmiles(SMI))
25
+ p = AllChem.ETKDGv3(); p.randomSeed = 1; p.useRandomCoords = True
26
+ cids = AllChem.EmbedMultipleConfs(m, numConfs=25, params=p)
27
+ AllChem.MMFFOptimizeMoleculeConfs(m)
28
+ print(f"grazoprevir: {m.GetNumAtoms()} atoms, {len(cids)} conformers embedded")
29
+
30
+ def is_polar(atom):
31
+ s = atom.GetSymbol()
32
+ if s in ("N", "O"): return True
33
+ if s == "H":
34
+ return any(nb.GetSymbol() in ("N", "O") for nb in atom.GetNeighbors())
35
+ return False
36
+ polar = [a.GetIdx() for a in m.GetAtoms() if is_polar(a)]
37
+ print(f"polar atoms (N,O,polar-H): {len(polar)}")
38
+
39
+ vals = []
40
+ for cid in cids:
41
+ pdb = Chem.MolToPDBBlock(m, confId=cid)
42
+ with tempfile.NamedTemporaryFile("w", suffix=".pdb", delete=False) as fh:
43
+ fh.write(pdb); path = fh.name
44
+ t = md.load(path); os.unlink(path)
45
+ sasa = md.shrake_rupley(t, mode="atom", probe_radius=0.14)[0] # nm^2
46
+ vals.append(sasa[polar].sum() * 100.0) # A^2
47
+ vals = np.array(vals)
48
+ rg = []
49
+ for cid in cids:
50
+ conf = m.GetConformer(cid)
51
+ xyz = np.array([list(conf.GetAtomPosition(i)) for i in range(m.GetNumAtoms())])
52
+ xyz -= xyz.mean(0); rg.append(np.sqrt((xyz**2).sum(1).mean()))
53
+ rg = np.array(rg)
54
+
55
+ print(f"\nelement-based 3D PSA over {len(vals)} conformers:")
56
+ print(f" min {vals.min():.0f} median {np.median(vals):.0f} max {vals.max():.0f} A2")
57
+ print(f" (most folded conformer, Rg={rg.min():.2f} A): PSA = {vals[np.argmin(rg)]:.0f} A2")
58
+ print(f"\nreported (PyMOL, |q|>1 selection): grazoprevir SA 3D PSA = 144-205 A2, crystal 174")
59
+ print(f" grazoprevir 2D TPSA (PubChem) = 204 A2")
60
+ inrange = ((vals >= 140) & (vals <= 210)).mean() * 100
61
+ print(f"\n-> {inrange:.0f}% of the conformers fall in the reported 144-205 range")
CupOFMoCA-PROTAC/requirements.txt ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ hydra-core==1.3.2
2
+ imageio==2.31.1
3
+ matplotlib==3.7.1
4
+ networkx==2.8.7
5
+ numpy==1.23
6
+ omegaconf==2.3.0
7
+ overrides==7.3.1
8
+ pandas==1.4
9
+ pyemd==1.0.0
10
+ PyGSP==0.5.1
11
+ pytorch_lightning==2.0.4
12
+ scipy==1.11.0
13
+ setuptools==68.0.0
14
+ torch_geometric==2.3.1
15
+ torchmetrics==0.11.4
16
+ tqdm==4.65.0
17
+ wandb==0.15.4
18
+ seaborn
CupOFMoCA-PROTAC/results/README.md ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Reported results
2
+
3
+ The generation outputs and scored summaries behind the PROTAC tables. These are the
4
+ runs themselves, not a re-derivation: the aggregates here are what the paper reports.
5
+
6
+ All runs use the optimized objective, recorded in the logs as the five-slot vector
7
+ `1 0 4 2 4` = `[classifier, morgan_fp, SA, chemotype, connectivity]`. The classifier is
8
+ applied as a hard mask and the Morgan-FP term is zero, so the three live weights are
9
+ `SA 4, chemotype 2, connectivity 4` — the `--weights 4.0 2.0 4.0` the current
10
+ `scripts/generate.py` takes. Seeds are 42 / 123 / 456, 100 candidates each.
11
+
12
+ ## `ablation_all/` — EGFR-VHL
13
+
14
+ Five conditions × three seeds. `results.csv` is per-seed, `AGGREGATE.txt` is the
15
+ pooled mean ± std (population std, `ddof=0`).
16
+
17
+ | condition | what it is | appears as |
18
+ |---|---|---|
19
+ | `both` | hard constraints + soft guidance; the full configuration | Table 3 EGFR-VHL, Table J8 "Both", Table H1 "Fine-tuned" |
20
+ | `hard` | validity gate only, no objective guidance | Table J8 "Hard constraints only" |
21
+ | `soft` | objective guidance only, no validity gate | Table J8 "Soft guidance only" |
22
+ | `accept_on` | full configuration plus the monotonic acceptance test | Table J3 "Acceptance on" |
23
+ | `base` | pre-fine-tuning DeFoG checkpoint | Table H1 "Base" |
24
+
25
+ ## `ablation_targets/` — BRD9-VHL and CDK6-CRBN
26
+
27
+ Per-target directories hold the same per-seed `.smi` outputs plus `ftguid_scored.csv`,
28
+ the per-molecule scored table. At the top level:
29
+
30
+ - `asm_valid.csv` — assembly validity per target × condition × seed
31
+ - `box_results.csv`, `phaseA_eval.csv` — property-window summaries
32
+ - `dm_ci.txt` — DegradeMaster mean, 95% CI, median and fraction ≥ 0.5 per target
33
+ - `VALIDATION.txt`, `AGGREGATE.txt` — pooled summaries
34
+
35
+ ## Excluded
36
+
37
+ Per-step sampling traces (`*_steps.json`, ~288 MB) and driver logs (`*.gen.log`) are
38
+ not included. Re-running `scripts/generate.py` with the seed and weights above
39
+ regenerates them.
40
+
41
+ ## Note on counts
42
+
43
+ `dm_ci.txt` reports the DegradeMaster pool as n=281 (BRD9-VHL) and n=265 (CDK6-CRBN),
44
+ while Table 3 states 247 and 249 assembly-valid molecules. The DegradeMaster pool is
45
+ therefore not identical to the assembly-valid set; check which population each column
46
+ was computed over before quoting these numbers.
CupOFMoCA-PROTAC/results/ablation_all/AGGREGATE.txt ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ OPTIMIZED weights 1 0 4 2 4 (both = accept_off = finetuned baseline)
2
+
3
+ cond asm_valid SA MW_in_window% DegradeMaster
4
+ -----------------------------------------------------------------------
5
+ both 85.0 ± 3.6 2.8 ± 0.0 94.7 ± 1.9 0.5 ± 0.0
6
+ hard 11.0 ± 3.7 2.5 ± 0.0 99.3 ± 0.5 0.5 ± 0.0
7
+ soft 0.3 ± 0.5 4.0 ± 0.1 97.0 ± 1.4 0.6 ± 0.0
8
+ accept_on 58.7 ± 3.4 3.0 ± 0.0 94.7 ± 1.2 0.5 ± 0.0
9
+ base 78.7 ± 5.4 3.6 ± 0.2 48.7 ± 2.5 0.5 ± 0.0
CupOFMoCA-PROTAC/results/ablation_all/PROGRESS.txt ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ start Sun Jul 26 10:40:29 PM EDT 2026
2
+ done [both:42 both:123] @ Sun Jul 26 10:48:02 PM EDT 2026
3
+ done [both:456 hard:42] @ Sun Jul 26 10:56:07 PM EDT 2026
4
+ done [hard:123 hard:456] @ Sun Jul 26 11:04:34 PM EDT 2026
5
+ done [soft:42 soft:123] @ Sun Jul 26 11:12:35 PM EDT 2026
6
+ done [soft:456 accept_on:42] @ Sun Jul 26 11:20:41 PM EDT 2026
7
+ done [accept_on:123 accept_on:456] @ Sun Jul 26 11:28:03 PM EDT 2026
8
+ done [base:42 base:123] @ Sun Jul 26 11:43:03 PM EDT 2026
9
+ done [base:456 ] @ Sun Jul 26 11:57:37 PM EDT 2026
CupOFMoCA-PROTAC/results/ablation_all/accept_on_s123.smi ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ DISCONNECTED C.C.C.N.O.O=CO.O=CO
2
+ AssemblyReady CCN(CC)C(CC(=O)O)C(=O)O
3
+ DISCONNECTED CCC(=O)O.O=CC(=O)O
4
+ AssemblyReady CCCC(CC(=O)O)=C(COCC)C(C)(OCC)C(=O)O
5
+ AssemblyReady O=C(O)CCCCCCCCC(=O)O
6
+ DISCONNECTED C.C.CO.O.O=CO.O=CO
7
+ AssemblyReady NCc1occ(C(=O)O)c1C(=O)O
8
+ DISCONNECTED C.C.C.C.CCC(=O)O.CCNOC.O.O=CO
9
+ AssemblyReady CC(=O)NC(CCn1c(=O)ccn1CCCC(=O)O)C(=O)O
10
+ AssemblyReady NC(CCC(=O)O)(C(=O)O)C1CCC1
11
+ DISCONNECTED C.O=CO.O=CO.OCCC(O)OO
12
+ AssemblyReady O=C(O)C=C1C2CC13OC1=CC24NCC3CC1(C(=O)O)O4
13
+ AssemblyReady O=C(O)CC(O)(CCCCCN1CC(C(=O)O)C1)C1CCC1
14
+ INVALID
15
+ AssemblyReady O=C(O)CCCOCCOCC(=O)O
16
+ DISCONNECTED CC(=O)O.CC(O)C(=O)O
17
+ AssemblyReady CCCC(C(=O)O)C(=O)O
18
+ DISCONNECTED C.CC.CC(=O)O.NC(=O)O
19
+ AssemblyReady O=C(O)CCCC(=O)C(=O)O
20
+ AssemblyReady COCCOC(CCC(=O)O)OCCOCCC(=O)O
21
+ DISCONNECTED C.C.C.CC1=CCC1.O=C(O)O.O=CO
22
+ DISCONNECTED CC(=O)O.NC(=O)C(=O)O
23
+ DISCONNECTED CC(C)O.O=CO.O=CO
24
+ DISCONNECTED COC(=O)O.N.O.O=CO
25
+ AssemblyReady CNC(CC(=O)O)C(=O)O
26
+ AssemblyReady CC(CCC(=O)O)C(=O)O
27
+ DISCONNECTED CCC.CCOC.N.O=CO.O=CO
28
+ DISCONNECTED CCC(C)=C(C)OC(=O)O.CN.O=CO
29
+ DISCONNECTED C.C.N.N.O=CO.O=CO
30
+ DISCONNECTED C=C(C)C.CCC.N.O.O=CO.O=CO
31
+ AssemblyReady CCC(CC(=O)O)C(=O)O
32
+ DISCONNECTED C=NC(C)C.CC.O=C(O)NO.O=CO
33
+ DISCONNECTED C.C.CO.O=CO.O=CO
34
+ AssemblyReady COC(C(=O)O)=C(C)C(C)=C(C)CC(=O)O
35
+ AssemblyReady O=C(O)CC#CC1(CC(=O)O)CCCCC1
36
+ DISCONNECTED C.C=C=C.CC1CC1.O=CO.O=CO
37
+ AssemblyReady O=C(O)C1CC(C(=O)O)C1
38
+ INVALID
39
+ AssemblyReady CC(C)CC1=CC(N)(CC(COCC(=O)O)CC(=O)O)CC=C1
40
+ AssemblyReady CC(C)(OC1CC1)C(CCCCCC(=O)O)OCNC(=O)C(=O)O
41
+ AssemblyReady CCC(C=C1CCCCCN(C(=O)O)N=N1)OCC(=O)O
42
+ AssemblyReady CCOC(N)CC(CC(=O)O)C(=O)O
43
+ DISCONNECTED C.C.C.CC.CO.O=CO.O=CO
44
+ DISCONNECTED C.CNNC.COCC(=O)O.N.N.NO.O=CO
45
+ DISCONNECTED CC(C)C(=O)O.F.N.O.O=C(O)C1CC1
46
+ AssemblyReady CCCC(C)(C(=O)O)C(=O)O
47
+ DISCONNECTED C.COC.O=CO.O=CO
48
+ AssemblyReady O=NC(CC(=O)O)C(=O)O
49
+ AssemblyReady CC(C)(CCCCC(=O)O)CCOCC(=O)O
50
+ AssemblyReady CCCCC(CCC(=O)O)OCCC(=O)O
51
+ INVALID
52
+ AssemblyReady O=C(O)CCCCNC(=O)CCC(=O)O
53
+ AssemblyReady O=C(O)CCCC(CCCC(=O)O)CCC1COC1
54
+ DISCONNECTED C.C.N.O=C(O)O.O=CO
55
+ INVALID
56
+ AssemblyReady CCCC(CCC(=O)O)=C(CCOCC)CC(=O)O
57
+ AssemblyReady COc1c(CCC(=O)O)cc(O)c(C(=O)O)c1C
58
+ DISCONNECTED C.CC.O.O=CO.O=CO
59
+ DISCONNECTED O=C(O)N1CCOCCO1.O=CO.O=CO
60
+ DISCONNECTED C.CCC1CC1C.CO.N.NC(=O)O.O=CO
61
+ INVALID
62
+ DISCONNECTED CC=O.N.O=C(O)CC(=O)O
63
+ AssemblyReady C=C(N)CN(CCCCC(=O)O)CC(=O)O
64
+ AssemblyReady CCC(C)C(CCCC(=O)O)C(=O)O
65
+ AssemblyReady CC(C(=O)O)=C(CO)CC(=O)O
66
+ AssemblyReady CC(=O)C(=O)NCCCCOCCCCOCC(=CC(=O)O)C(=O)O
67
+ AssemblyReady O=C(O)CCCCCCOCCOCC1CC(C(=O)O)C1
68
+ AssemblyReady NC=CNNC(CN1CCN(C(=O)O)CC1)C(=O)O
69
+ AssemblyReady CN(CC(=O)O)C1(C(=O)O)CCCCC1
70
+ DISCONNECTED CCCC(C)=O.CNNCC(=O)O.O=CO
71
+ DISCONNECTED C.C.C.C.O=CO.O=CO
72
+ AssemblyReady O=C(O)CCN1CCCCCC1C(=O)O
73
+ AssemblyReady CC=C(CCC(=O)O)C(=O)O
74
+ AssemblyReady CC(C)=C(C=C(NCCCC(=O)O)C(=O)O)CN
75
+ DISCONNECTED C.CC(=O)O.COC(=O)O.O
76
+ AssemblyReady NCCN(C=O)C(C(=O)O)C(=O)O
77
+ AssemblyReady COCC(CC(=O)O)CC(=O)O
78
+ AssemblyReady CC(C)=C(C)OC(CCC(=O)O)CC(=O)O
79
+ DISCONNECTED C=C=C(C)C(=C)NC.O.O=C(O)O.O=C(O)O
80
+ DISCONNECTED C.C.C.CC.CC1CCN1.CCO.O.O=CO.O=CO
81
+ AssemblyReady CCOCCOCOCCCCC(C(=O)O)N(C)C=C(OC)C(=O)O
82
+ AssemblyReady CCC(CCC(=O)O)COC(=O)C(=O)O
83
+ AssemblyReady COC1=C(C(=O)O)C(C(=O)O)=C(C(=N)CCCCCCO)CCCC1
84
+ AssemblyReady CC(C)(CCCCC(=O)O)CC(C(=O)O)N1CC1
85
+ DISCONNECTED C.C=CN.N.O=CO.O=CO
86
+ DISCONNECTED C.NC(=O)O.NO.O=CO
87
+ DISCONNECTED C.C.CC(O)CCO.CCON.O=CO.O=CO
88
+ AssemblyReady CCC(CC(=O)O)C(=O)O
89
+ AssemblyReady O=C(O)c1ccc2c3ccc3c2cc(OCCO)c1C(=O)O
90
+ AssemblyReady O=C(O)CC(O)=C(COC(CO)C(=O)O)CC1CCCCC1
91
+ AssemblyReady CCCCCC(CCCC)(C(=O)O)C(=O)O
92
+ DISCONNECTED C.C.C.N.O=CO.O=CO
93
+ DISCONNECTED CC(=O)O.CC(O)ON.CCNO.O.O=CO
94
+ AssemblyReady CCC(O)CC(CC(=O)O)C(=O)O
95
+ AssemblyReady CCOCC1(COC)CC(C(=O)O)(N(C)CCC(=O)O)C1
96
+ DISCONNECTED CC.CC.CCCC(C)C.N.O=CO.O=CO
97
+ DISCONNECTED C.C.C.C.O=CO.O=CO
98
+ AssemblyReady C#Cc1c(C)cc(CCCCC)c(C(=O)O)c1CC(=O)O
99
+ DISCONNECTED C.C.CNC(=O)O.N.N.N.O.O=CO
100
+ DISCONNECTED C.C.C.N.O=CO.O=CO
CupOFMoCA-PROTAC/results/ablation_all/accept_on_s123_clean.smi ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ C.C.C.N.O.O=CO.O=CO
2
+ CCN(CC)C(CC(=O)O)C(=O)O
3
+ CCC(=O)O.O=CC(=O)O
4
+ CCCC(CC(=O)O)=C(COCC)C(C)(OCC)C(=O)O
5
+ O=C(O)CCCCCCCCC(=O)O
6
+ C.C.CO.O.O=CO.O=CO
7
+ NCc1occ(C(=O)O)c1C(=O)O
8
+ C.C.C.C.CCC(=O)O.CCNOC.O.O=CO
9
+ CC(=O)NC(CCn1c(=O)ccn1CCCC(=O)O)C(=O)O
10
+ NC(CCC(=O)O)(C(=O)O)C1CCC1
11
+ C.O=CO.O=CO.OCCC(O)OO
12
+ O=C(O)C=C1C2CC13OC1=CC24NCC3CC1(C(=O)O)O4
13
+ O=C(O)CC(O)(CCCCCN1CC(C(=O)O)C1)C1CCC1
14
+ INVALID
15
+ O=C(O)CCCOCCOCC(=O)O
16
+ CC(=O)O.CC(O)C(=O)O
17
+ CCCC(C(=O)O)C(=O)O
18
+ C.CC.CC(=O)O.NC(=O)O
19
+ O=C(O)CCCC(=O)C(=O)O
20
+ COCCOC(CCC(=O)O)OCCOCCC(=O)O
21
+ C.C.C.CC1=CCC1.O=C(O)O.O=CO
22
+ CC(=O)O.NC(=O)C(=O)O
23
+ CC(C)O.O=CO.O=CO
24
+ COC(=O)O.N.O.O=CO
25
+ CNC(CC(=O)O)C(=O)O
26
+ CC(CCC(=O)O)C(=O)O
27
+ CCC.CCOC.N.O=CO.O=CO
28
+ CCC(C)=C(C)OC(=O)O.CN.O=CO
29
+ C.C.N.N.O=CO.O=CO
30
+ C=C(C)C.CCC.N.O.O=CO.O=CO
31
+ CCC(CC(=O)O)C(=O)O
32
+ C=NC(C)C.CC.O=C(O)NO.O=CO
33
+ C.C.CO.O=CO.O=CO
34
+ COC(C(=O)O)=C(C)C(C)=C(C)CC(=O)O
35
+ O=C(O)CC#CC1(CC(=O)O)CCCCC1
36
+ C.C=C=C.CC1CC1.O=CO.O=CO
37
+ O=C(O)C1CC(C(=O)O)C1
38
+ INVALID
39
+ CC(C)CC1=CC(N)(CC(COCC(=O)O)CC(=O)O)CC=C1
40
+ CC(C)(OC1CC1)C(CCCCCC(=O)O)OCNC(=O)C(=O)O
41
+ CCC(C=C1CCCCCN(C(=O)O)N=N1)OCC(=O)O
42
+ CCOC(N)CC(CC(=O)O)C(=O)O
43
+ C.C.C.CC.CO.O=CO.O=CO
44
+ C.CNNC.COCC(=O)O.N.N.NO.O=CO
45
+ CC(C)C(=O)O.F.N.O.O=C(O)C1CC1
46
+ CCCC(C)(C(=O)O)C(=O)O
47
+ C.COC.O=CO.O=CO
48
+ O=NC(CC(=O)O)C(=O)O
49
+ CC(C)(CCCCC(=O)O)CCOCC(=O)O
50
+ CCCCC(CCC(=O)O)OCCC(=O)O
51
+ INVALID
52
+ O=C(O)CCCCNC(=O)CCC(=O)O
53
+ O=C(O)CCCC(CCCC(=O)O)CCC1COC1
54
+ C.C.N.O=C(O)O.O=CO
55
+ INVALID
56
+ CCCC(CCC(=O)O)=C(CCOCC)CC(=O)O
57
+ COc1c(CCC(=O)O)cc(O)c(C(=O)O)c1C
58
+ C.CC.O.O=CO.O=CO
59
+ O=C(O)N1CCOCCO1.O=CO.O=CO
60
+ C.CCC1CC1C.CO.N.NC(=O)O.O=CO
61
+ INVALID
62
+ CC=O.N.O=C(O)CC(=O)O
63
+ C=C(N)CN(CCCCC(=O)O)CC(=O)O
64
+ CCC(C)C(CCCC(=O)O)C(=O)O
65
+ CC(C(=O)O)=C(CO)CC(=O)O
66
+ CC(=O)C(=O)NCCCCOCCCCOCC(=CC(=O)O)C(=O)O
67
+ O=C(O)CCCCCCOCCOCC1CC(C(=O)O)C1
68
+ NC=CNNC(CN1CCN(C(=O)O)CC1)C(=O)O
69
+ CN(CC(=O)O)C1(C(=O)O)CCCCC1
70
+ CCCC(C)=O.CNNCC(=O)O.O=CO
71
+ C.C.C.C.O=CO.O=CO
72
+ O=C(O)CCN1CCCCCC1C(=O)O
73
+ CC=C(CCC(=O)O)C(=O)O
74
+ CC(C)=C(C=C(NCCCC(=O)O)C(=O)O)CN
75
+ C.CC(=O)O.COC(=O)O.O
76
+ NCCN(C=O)C(C(=O)O)C(=O)O
77
+ COCC(CC(=O)O)CC(=O)O
78
+ CC(C)=C(C)OC(CCC(=O)O)CC(=O)O
79
+ C=C=C(C)C(=C)NC.O.O=C(O)O.O=C(O)O
80
+ C.C.C.CC.CC1CCN1.CCO.O.O=CO.O=CO
81
+ CCOCCOCOCCCCC(C(=O)O)N(C)C=C(OC)C(=O)O
82
+ CCC(CCC(=O)O)COC(=O)C(=O)O
83
+ COC1=C(C(=O)O)C(C(=O)O)=C(C(=N)CCCCCCO)CCCC1
84
+ CC(C)(CCCCC(=O)O)CC(C(=O)O)N1CC1
85
+ C.C=CN.N.O=CO.O=CO
86
+ C.NC(=O)O.NO.O=CO
87
+ C.C.CC(O)CCO.CCON.O=CO.O=CO
88
+ CCC(CC(=O)O)C(=O)O
89
+ O=C(O)c1ccc2c3ccc3c2cc(OCCO)c1C(=O)O
90
+ O=C(O)CC(O)=C(COC(CO)C(=O)O)CC1CCCCC1
91
+ CCCCCC(CCCC)(C(=O)O)C(=O)O
92
+ C.C.C.N.O=CO.O=CO
93
+ CC(=O)O.CC(O)ON.CCNO.O.O=CO
94
+ CCC(O)CC(CC(=O)O)C(=O)O
95
+ CCOCC1(COC)CC(C(=O)O)(N(C)CCC(=O)O)C1
96
+ CC.CC.CCCC(C)C.N.O=CO.O=CO
97
+ C.C.C.C.O=CO.O=CO
98
+ C#Cc1c(C)cc(CCCCC)c(C(=O)O)c1CC(=O)O
99
+ C.C.CNC(=O)O.N.N.N.O.O=CO
100
+ C.C.C.N.O=CO.O=CO
CupOFMoCA-PROTAC/results/ablation_all/accept_on_s42.smi ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ DISCONNECTED C.C.CCCCCC(C)CCCN.N.N.N.O=CO.O=CO
2
+ AssemblyReady CCCCC(CC(=O)O)OCCCC(=O)O
3
+ DISCONNECTED C.C=NN.O=CO.O=CO
4
+ INVALID
5
+ DISCONNECTED C.CNCOO.COO.N.O.O.O.O=C(O)O.O=CO
6
+ AssemblyReady CN(C)CCCCCCC(CC(C(=O)O)C1COC1)C(=O)O
7
+ AssemblyReady O=C(O)C(=O)CCOC(=O)C(=O)O
8
+ AssemblyReady O=C(O)C1(C(=O)O)CCC1
9
+ DISCONNECTED C.C.C.C.O=CO.O=CO
10
+ AssemblyReady CCCCCCCC(C(=O)O)C(=O)O
11
+ DISCONNECTED C.C.C.N.NC(=O)O.O=CO
12
+ DISCONNECTED C.C.CCCO.N.O=C(O)NC(=O)O
13
+ AssemblyReady NCCC(=CC1(C(=O)O)OCCOCCO1)CCCCCC(=O)O
14
+ AssemblyReady CCC(=O)NCC1CCC(C(C(=O)O)C(=O)O)CC1
15
+ AssemblyReady O=C(O)CCCN(CC(=O)O)C1CCC1
16
+ DISCONNECTED C.NC(=O)O.O.O=C(O)O
17
+ DISCONNECTED O.O=C(O)CC(=O)O.O=O
18
+ AssemblyReady CCC(C)(C(=O)O)C(=O)O
19
+ AssemblyReady COCCOC(C)(CC(=O)O)C1C2=C1CC(C)NCC(C(=O)O)=CC2
20
+ AssemblyReady CC(CCCCC=O)(OCC(=O)O)C(=O)O
21
+ DISCONNECTED C.C.CN.O=CO.O=CO
22
+ AssemblyReady O=C(O)CCN(CO)CC(=O)O
23
+ AssemblyReady O=C(O)C(CCCCCCO)C(=O)O
24
+ DISCONNECTED C.CNC(COOC)OC.CO.O.O=CO.O=CO
25
+ AssemblyReady CCCC(CCOCCOCCOCCOCCCC(=O)O)C(=O)O
26
+ DISCONNECTED O=C(O)NCNCCCO.O=CO
27
+ AssemblyReady COCC(C)N(C=C(C=N)C(=O)O)C(C)(COC)CC(=O)O
28
+ AssemblyReady CCCN(CC(=O)O)C(=O)CCOCC(=O)O
29
+ AssemblyReady CCC(O)(CC(=O)O)CC(OCC(=O)O)=C1CCCCC1
30
+ AssemblyReady CC(C)(CCCCCC(CC(=O)O)C(=O)O)CCC(=O)NCCCO
31
+ AssemblyReady CCC(C)(C)C(CC(=O)O)C(=O)O
32
+ DISCONNECTED C.CCC.O=CO.O=CO
33
+ AssemblyReady CCOCCCCCC(CC=O)=C(OCCC(=O)O)C(=O)O
34
+ DISCONNECTED C.CON.NCCOC(=O)O.O=CO
35
+ AssemblyReady CCOc1cccc(N(CCOCCOCC(=O)O)CCC(=O)O)n1
36
+ AssemblyReady CN(CO)C(C)(C(=O)O)C(=O)O
37
+ AssemblyReady COC(=O)COCCN(C(=O)O)C(O)C(=O)O
38
+ DISCONNECTED C.C.C.C.CC(=O)O.COC=NO.O=CO
39
+ DISCONNECTED C.C.C.CO.N.N.O=CO.O=CO
40
+ AssemblyReady CCC(CC)(CC(=O)O)C(=O)O
41
+ AssemblyReady O=C(O)CCC(CO)NC(=O)C(=O)O
42
+ AssemblyReady CCCC(CC(=O)O)=C(CCOCC1=CO1)C(=O)O
43
+ DISCONNECTED C.N.O.O.O=CO.O=CO
44
+ DISCONNECTED C.CC.N.O=CO.O=CO
45
+ AssemblyReady O=C(O)CN(CCCCN1CCCCCCCC1)CC(=O)O
46
+ AssemblyReady CC(C)(CC(=O)O)C(=O)O
47
+ AssemblyReady CCCNC(CN(C)CC(=O)O)C(=O)O
48
+ AssemblyReady CCC1(C)CC(CC(=O)O)(C(=O)O)C1
49
+ AssemblyReady CN(C)CC(C)(C)CCC(CCC(=O)O)C(=O)O
50
+ AssemblyReady O=C(O)CCCCC(=O)O
51
+ AssemblyReady CCCC(CCCCO)C(CCC(=O)O)C(=O)O
52
+ DISCONNECTED C.C.N.O=C(O)O.O=CO
53
+ DISCONNECTED C.C.COC(=O)O.NC(=O)O.OCO
54
+ DISCONNECTED C.C.C.N.O.O=CO.O=CO
55
+ DISCONNECTED C.C.C=CC1CC1(C)C.O=CO.O=CO
56
+ DISCONNECTED C.CCCN.O=CO.O=CO
57
+ AssemblyReady COCCCCCCNC1CC(C(=O)O)(C(=O)O)C1
58
+ AssemblyReady CCOCCOC(CCCC(=O)O)(C(=O)O)C(C)OCCOCCN
59
+ AssemblyReady O=C(O)CCCCCC(C(=O)O)=C(O)CO
60
+ AssemblyReady O=C(O)N1CCCC(O)(C(=O)O)C1
61
+ DISCONNECTED C.C.C.N.N.O=CO.O=CO
62
+ DISCONNECTED C.C.C.C.CC.CC.CN.COC(=O)O.O=CO
63
+ AssemblyReady CC(C)C(CC(=O)O)C(=O)O
64
+ DISCONNECTED C.C.O.O.O=CO.O=CO
65
+ AssemblyReady CCCCCN(CCCOCCC(=O)O)CCCC(=O)C(=O)O
66
+ AssemblyReady CC(CCCCCCC(=O)O)CC(=O)O
67
+ AssemblyReady O=C(O)CN(C(=O)CO)C1CC(C(=O)O)C1
68
+ AssemblyReady N=C(CC(CCC(=O)O)C(=O)O)C(=O)O
69
+ INVALID
70
+ AssemblyReady CNC(C(=O)O)C(C)C(C)C(=O)O
71
+ DISCONNECTED C.C.C.CC(=O)O.CCCNOC.CN.CO.N.O=CO
72
+ AssemblyReady CC=C(CCN1CCC(COCCCCOCC(=O)O)CC1)C(=O)O
73
+ AssemblyReady CCCCCC(C(=O)O)C(=O)O
74
+ DISCONNECTED C.CCCN(C)NCOCC.CCO.CNCCCC(=O)O.O=CO
75
+ AssemblyReady CC(C)C(CCC(=O)O)(CC(=O)O)C(C)N(C)CC1CCC1
76
+ DISCONNECTED CCCCC(CO)(C(=O)O)C(=O)O.O=O
77
+ AssemblyReady O=C(O)C1(C(=O)O)CCC1
78
+ DISCONNECTED C.O.O=C(O)O.O=C(O)O
79
+ AssemblyReady CCCCC(CCCOC)(C(=O)O)C(=CC(=O)O)C(=O)O
80
+ AssemblyReady CC(C)C(C(=O)O)C(=O)O
81
+ DISCONNECTED CCCCCCOC(=O)O.O=CC(=O)O
82
+ DISCONNECTED C.C.CCC(CC)NC.N.O=CO.O=CO
83
+ DISCONNECTED C.C.CCN.COC(=O)O.O.O=CO
84
+ AssemblyReady COCCOCCCN(C)C(C(=O)O)C(=O)O
85
+ DISCONNECTED C.COC1CC1.NC(=O)O.O=CO
86
+ AssemblyReady CC(CC(=O)O)CC(=O)O
87
+ AssemblyReady CC(N)(CC(=O)O)C(=O)O
88
+ AssemblyReady CCCCCC(C)(OC(CCOC)C(=O)O)C(=O)O
89
+ AssemblyReady NCCOC(CC(=O)O)CC(=O)O
90
+ AssemblyReady CCCCC(C(=O)O)C(=O)O
91
+ DISCONNECTED C.C=C(C)NC(=O)O.CC.CCN.N.O.O=CO
92
+ AssemblyReady O=C(O)CCC1=C(CC(=O)O)C(=O)N1
93
+ DISCONNECTED C.C.C.CCC.N.O.O.O.O.O=C(O)NOC(=O)O
94
+ INVALID
95
+ DISCONNECTED C.C.C.C.CCC1=CC1.CO.O=CO.O=CO
96
+ INVALID
97
+ AssemblyReady NCC(CCC(=O)O)C(=O)O
98
+ AssemblyReady COC(CC(=O)O)C(=O)O
99
+ AssemblyReady O=C(O)CC1(C(=O)O)CCCCCCC1
100
+ AssemblyReady CC(C)OC(CCCCC(=O)O)OC(CC(=O)O)C(C)C
CupOFMoCA-PROTAC/results/ablation_all/accept_on_s42_clean.smi ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ C.C.CCCCCC(C)CCCN.N.N.N.O=CO.O=CO
2
+ CCCCC(CC(=O)O)OCCCC(=O)O
3
+ C.C=NN.O=CO.O=CO
4
+ INVALID
5
+ C.CNCOO.COO.N.O.O.O.O=C(O)O.O=CO
6
+ CN(C)CCCCCCC(CC(C(=O)O)C1COC1)C(=O)O
7
+ O=C(O)C(=O)CCOC(=O)C(=O)O
8
+ O=C(O)C1(C(=O)O)CCC1
9
+ C.C.C.C.O=CO.O=CO
10
+ CCCCCCCC(C(=O)O)C(=O)O
11
+ C.C.C.N.NC(=O)O.O=CO
12
+ C.C.CCCO.N.O=C(O)NC(=O)O
13
+ NCCC(=CC1(C(=O)O)OCCOCCO1)CCCCCC(=O)O
14
+ CCC(=O)NCC1CCC(C(C(=O)O)C(=O)O)CC1
15
+ O=C(O)CCCN(CC(=O)O)C1CCC1
16
+ C.NC(=O)O.O.O=C(O)O
17
+ O.O=C(O)CC(=O)O.O=O
18
+ CCC(C)(C(=O)O)C(=O)O
19
+ COCCOC(C)(CC(=O)O)C1C2=C1CC(C)NCC(C(=O)O)=CC2
20
+ CC(CCCCC=O)(OCC(=O)O)C(=O)O
21
+ C.C.CN.O=CO.O=CO
22
+ O=C(O)CCN(CO)CC(=O)O
23
+ O=C(O)C(CCCCCCO)C(=O)O
24
+ C.CNC(COOC)OC.CO.O.O=CO.O=CO
25
+ CCCC(CCOCCOCCOCCOCCCC(=O)O)C(=O)O
26
+ O=C(O)NCNCCCO.O=CO
27
+ COCC(C)N(C=C(C=N)C(=O)O)C(C)(COC)CC(=O)O
28
+ CCCN(CC(=O)O)C(=O)CCOCC(=O)O
29
+ CCC(O)(CC(=O)O)CC(OCC(=O)O)=C1CCCCC1
30
+ CC(C)(CCCCCC(CC(=O)O)C(=O)O)CCC(=O)NCCCO
31
+ CCC(C)(C)C(CC(=O)O)C(=O)O
32
+ C.CCC.O=CO.O=CO
33
+ CCOCCCCCC(CC=O)=C(OCCC(=O)O)C(=O)O
34
+ C.CON.NCCOC(=O)O.O=CO
35
+ CCOc1cccc(N(CCOCCOCC(=O)O)CCC(=O)O)n1
36
+ CN(CO)C(C)(C(=O)O)C(=O)O
37
+ COC(=O)COCCN(C(=O)O)C(O)C(=O)O
38
+ C.C.C.C.CC(=O)O.COC=NO.O=CO
39
+ C.C.C.CO.N.N.O=CO.O=CO
40
+ CCC(CC)(CC(=O)O)C(=O)O
41
+ O=C(O)CCC(CO)NC(=O)C(=O)O
42
+ CCCC(CC(=O)O)=C(CCOCC1=CO1)C(=O)O
43
+ C.N.O.O.O=CO.O=CO
44
+ C.CC.N.O=CO.O=CO
45
+ O=C(O)CN(CCCCN1CCCCCCCC1)CC(=O)O
46
+ CC(C)(CC(=O)O)C(=O)O
47
+ CCCNC(CN(C)CC(=O)O)C(=O)O
48
+ CCC1(C)CC(CC(=O)O)(C(=O)O)C1
49
+ CN(C)CC(C)(C)CCC(CCC(=O)O)C(=O)O
50
+ O=C(O)CCCCC(=O)O
51
+ CCCC(CCCCO)C(CCC(=O)O)C(=O)O
52
+ C.C.N.O=C(O)O.O=CO
53
+ C.C.COC(=O)O.NC(=O)O.OCO
54
+ C.C.C.N.O.O=CO.O=CO
55
+ C.C.C=CC1CC1(C)C.O=CO.O=CO
56
+ C.CCCN.O=CO.O=CO
57
+ COCCCCCCNC1CC(C(=O)O)(C(=O)O)C1
58
+ CCOCCOC(CCCC(=O)O)(C(=O)O)C(C)OCCOCCN
59
+ O=C(O)CCCCCC(C(=O)O)=C(O)CO
60
+ O=C(O)N1CCCC(O)(C(=O)O)C1
61
+ C.C.C.N.N.O=CO.O=CO
62
+ C.C.C.C.CC.CC.CN.COC(=O)O.O=CO
63
+ CC(C)C(CC(=O)O)C(=O)O
64
+ C.C.O.O.O=CO.O=CO
65
+ CCCCCN(CCCOCCC(=O)O)CCCC(=O)C(=O)O
66
+ CC(CCCCCCC(=O)O)CC(=O)O
67
+ O=C(O)CN(C(=O)CO)C1CC(C(=O)O)C1
68
+ N=C(CC(CCC(=O)O)C(=O)O)C(=O)O
69
+ INVALID
70
+ CNC(C(=O)O)C(C)C(C)C(=O)O
71
+ C.C.C.CC(=O)O.CCCNOC.CN.CO.N.O=CO
72
+ CC=C(CCN1CCC(COCCCCOCC(=O)O)CC1)C(=O)O
73
+ CCCCCC(C(=O)O)C(=O)O
74
+ C.CCCN(C)NCOCC.CCO.CNCCCC(=O)O.O=CO
75
+ CC(C)C(CCC(=O)O)(CC(=O)O)C(C)N(C)CC1CCC1
76
+ CCCCC(CO)(C(=O)O)C(=O)O.O=O
77
+ O=C(O)C1(C(=O)O)CCC1
78
+ C.O.O=C(O)O.O=C(O)O
79
+ CCCCC(CCCOC)(C(=O)O)C(=CC(=O)O)C(=O)O
80
+ CC(C)C(C(=O)O)C(=O)O
81
+ CCCCCCOC(=O)O.O=CC(=O)O
82
+ C.C.CCC(CC)NC.N.O=CO.O=CO
83
+ C.C.CCN.COC(=O)O.O.O=CO
84
+ COCCOCCCN(C)C(C(=O)O)C(=O)O
85
+ C.COC1CC1.NC(=O)O.O=CO
86
+ CC(CC(=O)O)CC(=O)O
87
+ CC(N)(CC(=O)O)C(=O)O
88
+ CCCCCC(C)(OC(CCOC)C(=O)O)C(=O)O
89
+ NCCOC(CC(=O)O)CC(=O)O
90
+ CCCCC(C(=O)O)C(=O)O
91
+ C.C=C(C)NC(=O)O.CC.CCN.N.O.O=CO
92
+ O=C(O)CCC1=C(CC(=O)O)C(=O)N1
93
+ C.C.C.CCC.N.O.O.O.O.O=C(O)NOC(=O)O
94
+ INVALID
95
+ C.C.C.C.CCC1=CC1.CO.O=CO.O=CO
96
+ INVALID
97
+ NCC(CCC(=O)O)C(=O)O
98
+ COC(CC(=O)O)C(=O)O
99
+ O=C(O)CC1(C(=O)O)CCCCCCC1
100
+ CC(C)OC(CCCCC(=O)O)OC(CC(=O)O)C(C)C
CupOFMoCA-PROTAC/results/ablation_all/accept_on_s456.smi ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ INVALID
2
+ AssemblyReady CCOC(C(C)C)C1CCOC(C(C(=O)O)C(=O)O)C(C)=C1COC
3
+ AssemblyReady CCC(CC(=O)O)C(=O)O
4
+ AssemblyReady CCC(C)OCCCC(C)=C(C(=O)O)C(=O)O
5
+ AssemblyReady O=C(O)CCCNC(=O)COCC(=O)O
6
+ INVALID
7
+ AssemblyReady O=CC(COC(=O)O)=C(COCCCO)OCC(=O)O
8
+ DISCONNECTED C.C.CN.NC(=O)O.O=CO
9
+ DISCONNECTED C.C.C.C=COC(N)OCC(C)C.CC.O=C(O)OO.O=CO.OO
10
+ AssemblyReady CCCCN(CC(=O)O)CC(=O)O
11
+ AssemblyReady COC(=CCC(=O)O)OC1CCC(Cc2cn(CC(=O)O)nn2)CC1
12
+ DISCONNECTED CCCCN.O=CO.O=CO
13
+ AssemblyReady O=CCC(CCCO)(CCCC(=O)O)C(=O)O
14
+ DISCONNECTED C.C.CCC.O.O=CO.O=CO
15
+ DISCONNECTED C.C.C.O=C(O)O.O=CO
16
+ DISCONNECTED CC(C)C.CCC(=O)O.O.O=C(O)CCCN1CC1
17
+ AssemblyReady O=C(O)CCC(=O)N(CC(=O)O)C1CCC1
18
+ AssemblyReady Cc1cc(CC(=O)C(=O)O)cc(C(=O)O)c1
19
+ AssemblyReady O=C(O)CCC1(CC(=O)O)CCCC(O)CCC1
20
+ AssemblyReady CC(C(=O)O)C(N)C(=O)O
21
+ AssemblyReady CCCCCCC(CCOCC(=O)O)C(=O)O
22
+ DISCONNECTED C=CC.CCC(O)=C1C=CC1.O=CO.O=CO
23
+ AssemblyReady CC(C)CC(C(=O)O)C(=O)O
24
+ AssemblyReady NCCOC(CO)=C(CCC(=O)O)CC(=O)O
25
+ DISCONNECTED C.C.CCCC#CCCC(C(=O)O)C(=O)O
26
+ INVALID
27
+ AssemblyReady O=C(O)CC(CCO)(C(=O)O)N1CCCOCC1
28
+ DISCONNECTED C.C.C.C.CO.CO.NCN.O=C(O)O.O=CO
29
+ AssemblyReady CC(C)(CCO)C1(C(=O)O)CC(O)(CCCC(=O)O)C1
30
+ AssemblyReady CCN(CCC(=O)O)CCC(=O)O
31
+ DISCONNECTED CO.CO.O=C(O)CCC(=O)O
32
+ DISCONNECTED C.C.C=NN.CCC.O=CO.O=CO
33
+ DISCONNECTED C.C.CC.O=CO.O=CO
34
+ AssemblyReady COCC(O)(CCC(=O)O)C(=O)O
35
+ AssemblyReady CCCCCC(C(=O)O)=C(C(=O)O)N1CCN(C)CC1
36
+ AssemblyReady CC(C)(C)OC(CCC(=O)O)CC(=O)O
37
+ AssemblyReady O=C(O)CCCCN1CCCCOC(=O)C1CC(=O)O
38
+ AssemblyReady CCC(CC(=O)O)NCCCCC(=O)O
39
+ AssemblyReady CCC(CC)(CC(=O)O)C(=O)O
40
+ AssemblyReady NCc1cnn(CCOC(COCCOCCNC(=O)O)C(=O)O)c1
41
+ AssemblyReady CN(CCC(=C=C1CC1)CCCCCC(=O)O)CC(=O)O
42
+ DISCONNECTED CC(=O)O.CCC(C)C(O)ON.O.O=CO
43
+ AssemblyReady Cc1cc(C(=O)O)c(C(=O)O)n1C
44
+ AssemblyReady NC(=CNCCCCC(=O)O)OCCC1(C(=O)O)OCCCNC=[SH]1
45
+ DISCONNECTED C.C.C.COC.O.O=CO.O=CO
46
+ DISCONNECTED CC.CCC.O=CO.O=CO
47
+ AssemblyReady N=C(CC(=O)O)N(CCCCCCCO)CCC(=O)O
48
+ AssemblyReady NC(CCCCCCCCC(=O)O)CCC(=O)O
49
+ AssemblyReady CC(=O)C(C(=O)O)C(=O)O
50
+ AssemblyReady CC1OC(C2(CCCC(=O)O)CC(CCC(=O)O)C2)O1
51
+ DISCONNECTED C.C.C.NC(=O)O.O=CO
52
+ AssemblyReady CC(CCCCCC(=O)O)COCC(=O)O
53
+ DISCONNECTED C.CO.O.O.O=CO.O=CO
54
+ DISCONNECTED C.C.C.C.O=C(O)O.O=C(O)O
55
+ DISCONNECTED CC(CC(=O)O)C(=O)O.O=O
56
+ DISCONNECTED CCN.N.O=CO.O=CO
57
+ DISCONNECTED C.CCC.CCNOC.CCOC(N)(O)C(=O)O.CO.O=CO
58
+ AssemblyReady CCOCCC(CCOCCOCCCC(C(=O)O)C(=O)O)OCC
59
+ AssemblyReady O=C(O)CCCCCN(CCO)CC(=O)O
60
+ DISCONNECTED C.C.CN.O=CO.O=CO
61
+ AssemblyReady CCCCCCC(CCC(=O)O)C(=O)O
62
+ DISCONNECTED CCC(COC)OCC(C)CCC(=O)O.O=C(O)O.OCO
63
+ AssemblyReady COCCNCNC(=CC(=O)O)C(=O)O
64
+ DISCONNECTED C.C.C.CNC.O=CO.O=CO
65
+ AssemblyReady CCCOCCCCCCC(CC(=O)O)CC(=O)O
66
+ AssemblyReady CCC(CC(=O)O)C(=O)O
67
+ AssemblyReady CCN(C(=O)O)C(CC(CO)N(N)CC(=O)O)OC
68
+ DISCONNECTED C.C.CC.O.O=CO.O=CO
69
+ AssemblyReady O=C(O)C=C(C(=O)O)C(=O)O
70
+ DISCONNECTED C.CC.NC(=O)O.O=CO
71
+ AssemblyReady CCC(CCC(CO)CO)(C(=O)O)C(=O)O
72
+ AssemblyReady CC(C)(CC(=O)O)C(=O)O
73
+ AssemblyReady CC(=CCCCCCCCC(=O)O)CCC(=O)O
74
+ AssemblyReady CC(CO)(CC(=O)O)C(=O)O
75
+ AssemblyReady CC(=O)CCCNC1(CC(=O)O)CCCCCC(C(=O)O)CC1
76
+ AssemblyReady C=CCCCCCCC(C)(CC(=O)O)CC(=O)O
77
+ AssemblyReady CCOC(C(=CNC)NCOC)=C(C(=O)O)C(=O)O
78
+ AssemblyReady CCCC(C(=O)O)C(=O)O
79
+ AssemblyReady O=C(O)CCCOCCNCC(=O)O
80
+ DISCONNECTED C.C.C.N.O=CO.O=CO
81
+ DISCONNECTED C.CCOC(C)(N)CCC(=O)O.N.N.N.NO.O.O=CO
82
+ DISCONNECTED C.C.CC.O=CO.O=CO.O=COO
83
+ AssemblyReady CC(CCC(=O)O)=C(C)C(=O)O
84
+ AssemblyReady CC(C)CCCCCN(CC(=O)O)C(=O)C(=O)O
85
+ AssemblyReady O=C(O)CCCC(CC(=O)O)=C1CCCCCC1
86
+ AssemblyReady NCCC(CC(=O)O)C(=O)O
87
+ AssemblyReady CC(C)(C(=O)O)C(=O)NCCCCC(=O)O
88
+ AssemblyReady O=C(O)CCCCCCCCC(=O)O
89
+ AssemblyReady CCCCC(CCC1CN(CCC(=O)O)CCN1)C(=O)O
90
+ AssemblyReady CC(C)C(C)(C(=O)O)C(=O)O
91
+ AssemblyReady CC(CCNC(=O)C(=O)O)C(=O)O
92
+ DISCONNECTED C.C.CCOC(=O)O.CN.CN(C)C(=O)O.N.NCO.O
93
+ AssemblyReady CCCC(=O)NC(C(=O)O)=C(C(=O)O)C(=O)OCC
94
+ AssemblyReady O=C(O)CCCC(=O)C(=O)O
95
+ DISCONNECTED C.C=NOC.CC(=O)O.CCOO.O=CO
96
+ DISCONNECTED CCNCN.CNC1=CC1.N.O=CO.O=CO
97
+ DISCONNECTED CCCN.O=CO.O=CO
98
+ AssemblyReady CCCC(CC(C)=CC(=O)O)C(=O)O
99
+ DISCONNECTED C.N=O.O=C(O)CCC(=O)O
100
+ DISCONNECTED CCC(C)(C)OO.NC(=O)O.O=CO
CupOFMoCA-PROTAC/results/ablation_all/accept_on_s456_clean.smi ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ INVALID
2
+ CCOC(C(C)C)C1CCOC(C(C(=O)O)C(=O)O)C(C)=C1COC
3
+ CCC(CC(=O)O)C(=O)O
4
+ CCC(C)OCCCC(C)=C(C(=O)O)C(=O)O
5
+ O=C(O)CCCNC(=O)COCC(=O)O
6
+ INVALID
7
+ O=CC(COC(=O)O)=C(COCCCO)OCC(=O)O
8
+ C.C.CN.NC(=O)O.O=CO
9
+ C.C.C.C=COC(N)OCC(C)C.CC.O=C(O)OO.O=CO.OO
10
+ CCCCN(CC(=O)O)CC(=O)O
11
+ COC(=CCC(=O)O)OC1CCC(Cc2cn(CC(=O)O)nn2)CC1
12
+ CCCCN.O=CO.O=CO
13
+ O=CCC(CCCO)(CCCC(=O)O)C(=O)O
14
+ C.C.CCC.O.O=CO.O=CO
15
+ C.C.C.O=C(O)O.O=CO
16
+ CC(C)C.CCC(=O)O.O.O=C(O)CCCN1CC1
17
+ O=C(O)CCC(=O)N(CC(=O)O)C1CCC1
18
+ Cc1cc(CC(=O)C(=O)O)cc(C(=O)O)c1
19
+ O=C(O)CCC1(CC(=O)O)CCCC(O)CCC1
20
+ CC(C(=O)O)C(N)C(=O)O
21
+ CCCCCCC(CCOCC(=O)O)C(=O)O
22
+ C=CC.CCC(O)=C1C=CC1.O=CO.O=CO
23
+ CC(C)CC(C(=O)O)C(=O)O
24
+ NCCOC(CO)=C(CCC(=O)O)CC(=O)O
25
+ C.C.CCCC#CCCC(C(=O)O)C(=O)O
26
+ INVALID
27
+ O=C(O)CC(CCO)(C(=O)O)N1CCCOCC1
28
+ C.C.C.C.CO.CO.NCN.O=C(O)O.O=CO
29
+ CC(C)(CCO)C1(C(=O)O)CC(O)(CCCC(=O)O)C1
30
+ CCN(CCC(=O)O)CCC(=O)O
31
+ CO.CO.O=C(O)CCC(=O)O
32
+ C.C.C=NN.CCC.O=CO.O=CO
33
+ C.C.CC.O=CO.O=CO
34
+ COCC(O)(CCC(=O)O)C(=O)O
35
+ CCCCCC(C(=O)O)=C(C(=O)O)N1CCN(C)CC1
36
+ CC(C)(C)OC(CCC(=O)O)CC(=O)O
37
+ O=C(O)CCCCN1CCCCOC(=O)C1CC(=O)O
38
+ CCC(CC(=O)O)NCCCCC(=O)O
39
+ CCC(CC)(CC(=O)O)C(=O)O
40
+ NCc1cnn(CCOC(COCCOCCNC(=O)O)C(=O)O)c1
41
+ CN(CCC(=C=C1CC1)CCCCCC(=O)O)CC(=O)O
42
+ CC(=O)O.CCC(C)C(O)ON.O.O=CO
43
+ Cc1cc(C(=O)O)c(C(=O)O)n1C
44
+ NC(=CNCCCCC(=O)O)OCCC1(C(=O)O)OCCCNC=[SH]1
45
+ C.C.C.COC.O.O=CO.O=CO
46
+ CC.CCC.O=CO.O=CO
47
+ N=C(CC(=O)O)N(CCCCCCCO)CCC(=O)O
48
+ NC(CCCCCCCCC(=O)O)CCC(=O)O
49
+ CC(=O)C(C(=O)O)C(=O)O
50
+ CC1OC(C2(CCCC(=O)O)CC(CCC(=O)O)C2)O1
51
+ C.C.C.NC(=O)O.O=CO
52
+ CC(CCCCCC(=O)O)COCC(=O)O
53
+ C.CO.O.O.O=CO.O=CO
54
+ C.C.C.C.O=C(O)O.O=C(O)O
55
+ CC(CC(=O)O)C(=O)O.O=O
56
+ CCN.N.O=CO.O=CO
57
+ C.CCC.CCNOC.CCOC(N)(O)C(=O)O.CO.O=CO
58
+ CCOCCC(CCOCCOCCCC(C(=O)O)C(=O)O)OCC
59
+ O=C(O)CCCCCN(CCO)CC(=O)O
60
+ C.C.CN.O=CO.O=CO
61
+ CCCCCCC(CCC(=O)O)C(=O)O
62
+ CCC(COC)OCC(C)CCC(=O)O.O=C(O)O.OCO
63
+ COCCNCNC(=CC(=O)O)C(=O)O
64
+ C.C.C.CNC.O=CO.O=CO
65
+ CCCOCCCCCCC(CC(=O)O)CC(=O)O
66
+ CCC(CC(=O)O)C(=O)O
67
+ CCN(C(=O)O)C(CC(CO)N(N)CC(=O)O)OC
68
+ C.C.CC.O.O=CO.O=CO
69
+ O=C(O)C=C(C(=O)O)C(=O)O
70
+ C.CC.NC(=O)O.O=CO
71
+ CCC(CCC(CO)CO)(C(=O)O)C(=O)O
72
+ CC(C)(CC(=O)O)C(=O)O
73
+ CC(=CCCCCCCCC(=O)O)CCC(=O)O
74
+ CC(CO)(CC(=O)O)C(=O)O
75
+ CC(=O)CCCNC1(CC(=O)O)CCCCCC(C(=O)O)CC1
76
+ C=CCCCCCCC(C)(CC(=O)O)CC(=O)O
77
+ CCOC(C(=CNC)NCOC)=C(C(=O)O)C(=O)O
78
+ CCCC(C(=O)O)C(=O)O
79
+ O=C(O)CCCOCCNCC(=O)O
80
+ C.C.C.N.O=CO.O=CO
81
+ C.CCOC(C)(N)CCC(=O)O.N.N.N.NO.O.O=CO
82
+ C.C.CC.O=CO.O=CO.O=COO
83
+ CC(CCC(=O)O)=C(C)C(=O)O
84
+ CC(C)CCCCCN(CC(=O)O)C(=O)C(=O)O
85
+ O=C(O)CCCC(CC(=O)O)=C1CCCCCC1
86
+ NCCC(CC(=O)O)C(=O)O
87
+ CC(C)(C(=O)O)C(=O)NCCCCC(=O)O
88
+ O=C(O)CCCCCCCCC(=O)O
89
+ CCCCC(CCC1CN(CCC(=O)O)CCN1)C(=O)O
90
+ CC(C)C(C)(C(=O)O)C(=O)O
91
+ CC(CCNC(=O)C(=O)O)C(=O)O
92
+ C.C.CCOC(=O)O.CN.CN(C)C(=O)O.N.NCO.O
93
+ CCCC(=O)NC(C(=O)O)=C(C(=O)O)C(=O)OCC
94
+ O=C(O)CCCC(=O)C(=O)O
95
+ C.C=NOC.CC(=O)O.CCOO.O=CO
96
+ CCNCN.CNC1=CC1.N.O=CO.O=CO
97
+ CCCN.O=CO.O=CO
98
+ CCCC(CC(C)=CC(=O)O)C(=O)O
99
+ C.N=O.O=C(O)CCC(=O)O
100
+ CCC(C)(C)OO.NC(=O)O.O=CO
CupOFMoCA-PROTAC/results/ablation_all/base_s123.smi ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ AssemblyReady O=C(O)CCN(C(=O)Nc1cccc(C(=O)O)c1)c1cc2ccc1-2
2
+ INVALID
3
+ AssemblyReady CCCOc1sc(CCC(=O)NC(CN=CN)C(=O)O)cc1C(=O)O
4
+ INVALID
5
+ AssemblyReady Cc1cc(C(O)c2ccc(NC(=O)C(=O)O)cc2)cc(C(=O)O)c1O
6
+ INVALID
7
+ AssemblyReady COC12C=C3C=C4OCOC41C1C=CCC(C3=C2C(=O)O)C1C(=O)O
8
+ AssemblyReady O=C(O)c1ccc2c(c1)C1(O)N=c3ccc(C(=O)O)cc3=S1OC2=O
9
+ INVALID
10
+ AssemblyReady CC1=CC=CC(Nc2nncs2)(C(=O)O)C(CC(=O)O)=C1
11
+ AssemblyReady CC(C)C(=O)OC(C1CCCO1)C(OC(=O)O)OC(=O)O
12
+ AssemblyReady CC(C)(CC(=O)O)C(NC(=O)C=CC(N)C(=O)O)C(=O)NCCCO
13
+ AssemblyReady CC(OC12C=CC3=C1C2(C(=O)O)N3S1(=O)=C2C3=CC=C2C1=C3)C(=O)O
14
+ INVALID
15
+ AssemblyReady Cc1c(Cc2cc(NC(=S)NCC(=O)O)cc(C(=O)O)c2)coc1O
16
+ AssemblyReady CC(C)c1cc(S(=O)(=O)NCCC(=O)O)cc2c(CC(=O)O)noc12
17
+ INVALID
18
+ INVALID
19
+ AssemblyReady CCN(C1=Cc2cc(C)ccc2N=C(C)O1)C(CCC(=O)O)C(=O)O
20
+ AssemblyReady O=C(O)C=C(NC(=O)CCCCCCC(C(=O)O)C(=O)O)C(=O)O
21
+ INVALID
22
+ AssemblyReady COc1cccc(-c2cccc(CC(=O)O)c2C(=O)O)c1
23
+ AssemblyReady COC12C=C3C=C4OC(CC(=O)O)CC(NC(=[SH]3)N1)C42C(=O)O
24
+ INVALID
25
+ AssemblyReady O=C(O)CCC(CC(=O)Oc1cc(C(F)F)cc(C(F)F)c1)C(=O)O
26
+ AssemblyReady N#CCOC12C(=O)C1(O)c1ccc3cc1C32C(CC(=O)O)C(=O)O
27
+ AssemblyReady O=C(O)c1ccc2c(c1)[N+]([O-])(O)c1cc(ccc1C(=O)O)C(=O)NO2
28
+ AssemblyReady CN(C(=O)C(CC(=O)O)NC(=O)CCCO)C1CCCC(C(=O)O)C1
29
+ AssemblyReady CNC(C(=O)O)C(O)(OCC(=O)O)C(=O)c1cccc2ccccc12
30
+ AssemblyReady O=C(COC(C(=O)O)C(=O)O)c1ccc2c(c1)C(O)=C2O
31
+ AssemblyReady O=CNN=CC(CC(C(=O)O)C(=O)O)C(=O)Oc1ccccc1
32
+ AssemblyReady COCC1CCC(CC(C)(C)CC(=O)O)(NCCC(=O)O)CC1
33
+ AssemblyReady O=C(O)C1=CC(C2CCCCC2)=C2C=CC2C(=O)C(O)C1C(=O)O
34
+ DISCONNECTED CC(=O)O.NC(=O)c1c2cccc1N(c1ccc(C(=O)O)cc1)C2=O
35
+ AssemblyReady O=C(O)C1=NC2=C3C4=CC=C(CC1=C2)C43CC(C(=O)O)C(O)C(=O)O
36
+ AssemblyReady CCCC(=O)C1(CC)C=CC(O)=CC(C(=O)O)=C1C(=O)O
37
+ INVALID
38
+ INVALID
39
+ AssemblyReady O=C(O)CNS(=O)(=O)C1=Cc2cc(C(=O)O)c3c(c2-3)Cn2cccc21
40
+ INVALID
41
+ INVALID
42
+ AssemblyReady O=C(O)NCCC12C=CC(=C(C(S)C(=O)O)Cc3cccc1c3)C=C2
43
+ INVALID
44
+ AssemblyReady O=C(O)c1cccc(C2(C(=O)O)C(O)=COC=C2c2ccsc2)c1O
45
+ INVALID
46
+ DISCONNECTED CC=O.NCC(=O)O.O=C(O)O
47
+ AssemblyReady O=C(O)c1cc(NC(=O)C2(C(=O)O)CCCCCC2)cs1
48
+ AssemblyReady O=C(O)C(=O)Nc1ccc(C(=O)O)s1
49
+ AssemblyReady O=C(O)OC1=CN2CC(Cc3cccc(c3)CC(C(=O)O)NC1=O)C2
50
+ AssemblyReady CC(=O)OC(C=C(C)C(=O)O)CC(C)C(CCC(C)(C)O)CC(=O)O
51
+ AssemblyReady O=C(O)CNC(=O)c1ccc(OCC(=O)O)cc1
52
+ AssemblyReady COc1ccc(CC(Cc2ccccc2C)C(=O)O)cc1CC(=O)O
53
+ AssemblyReady O=C(O)Cc1cccc2c3c([nH]cc(C(=O)O)ccc12)CCCC3=O
54
+ AssemblyReady CCNS(=O)(=O)c1cnc2coc(C(=O)O)c(C(=CC(=O)O)CC)c1-2
55
+ INVALID
56
+ AssemblyReady O=C(O)C1(S)CC(Cc2ccccc2)(C(=O)O)C1
57
+ AssemblyReady O=C(O)c1ccc(N2CCOCCN(CCCO)CC2)c(C(=O)O)c1
58
+ INVALID
59
+ AssemblyReady CC(C)(CO)NC(=O)CC(CC(=O)O)CC(=O)O
60
+ AssemblyReady COc1ccc2nccc(C=C(SC=S)C(=O)O)c2c1C(=O)C(=O)O
61
+ AssemblyReady O=C(O)C1=CS(=O)(=CC2CCC3=CCCCC3C2C(=O)O)C=CC1=O
62
+ INVALID
63
+ AssemblyReady O=C(O)Cc1ccc(F)cc1C(=O)O
64
+ AssemblyReady CC12C(=O)C(C(=O)O)C(C(=O)O)C1(c1ccc(OCCO)cc1)C2=O
65
+ INVALID
66
+ AssemblyReady Cc1cccc(CCCCN(CCC(=O)O)C(=O)CCCC(=O)O)c1
67
+ AssemblyReady CCC(NC(=O)O)c1cc(C(=O)O)ccc1CC(C)(C)CS(N)(=O)=O
68
+ AssemblyReady O=C(O)CCC=c1ccc2c3c1c2C(C(=O)O)=N3
69
+ AssemblyReady CCCCC(CC(=O)O)C1C(O)CC2C(O)OC(C(=O)O)CC2C1C
70
+ INVALID
71
+ INVALID
72
+ AssemblyReady O=C(O)CC(N=C1CCN2CC3=C1C=CCCC2C(O)=C3O)C(=O)O
73
+ AssemblyReady CC(=O)OCCC1(C(=O)O)C(C(C)C)NC(=O)C2(C(=O)O)CCCN21
74
+ INVALID
75
+ AssemblyReady NC(C(=O)O)C(=O)C(C(=O)O)=C(O)C(=O)Nc1ccccc1O
76
+ AssemblyReady COC(=O)C(C)(C)NC(=O)c1cccc(C(CCC(=O)O)C(=O)O)c1
77
+ INVALID
78
+ AssemblyReady COc1ccc(C(=O)O)cc1NC(=Cc1cccs1)C(=O)O
79
+ AssemblyReady CC(ON1CC(CO)OC(C(=O)O)C1OC(=O)O)C1(N=O)CCCO1
80
+ AssemblyReady CCCC(C)(C)C(=O)C(C(=O)C(=O)O)=C(CO)C(=O)O
81
+ AssemblyReady O=C(CCNc1ccc(O)cc1)Nc1c(C(=O)O)cccc1C(=O)O
82
+ INVALID
83
+ AssemblyReady CC(C)(CCCO)C(C(=O)O)c1ccccc1C(CC(=O)O)C(=O)O
84
+ INVALID
85
+ AssemblyReady O=C(O)C=C1C=C(F)C=C(C2=C(O)C(=O)C(=O)OC2=O)C1(O)C(=O)O
86
+ AssemblyReady O=C(O)C1=CC(c2cccs2)=CC(c2ccccc2)=NC(C(=O)O)C1
87
+ AssemblyReady CCC1=C(CCC(Oc2ccccc2C(=O)O)C(=O)O)NC(=O)CC1
88
+ AssemblyReady O=C(O)CCN(C(=O)O)C(=O)C=C(c1ccccc1)c1ccccc1
89
+ AssemblyReady O=C(O)CCCCNc1cc(C(=O)O)c2c(C(=O)O)c(F)ccc2c1
90
+ AssemblyReady Cc1ccc(COCC(=O)O)c2c(C(=O)O)cc(OCCCO)cc12
91
+ INVALID
92
+ AssemblyReady COC(=O)C(CC(=O)O)CC(O)CC(C(=O)O)C(=O)C(C)(C)C(C)C
93
+ AssemblyReady O=C(NC(CC1(C(=O)O)COCCCOC1)C(=O)O)C1CCCCC1
94
+ AssemblyReady CC(=O)NCCCCNC(=O)NC(=CC1=C(O)C(C(=O)O)=C1)C(=O)O
95
+ INVALID
96
+ AssemblyReady CC(=O)OCC(=O)CC(CCC(=O)OCC(=O)NCC(=O)O)C(=O)O
97
+ AssemblyReady O=C(O)CCCCN(CC1CCCCC1)CC1(C(=O)O)C=CC=C1
98
+ AssemblyReady CC(CCC(CS)C(=O)O)(OC(=O)CCCC(N)=O)C(=O)O
99
+ AssemblyReady O=C(O)c1ccc2c(c1)=C1C3=CC4=CC31C1(C(=O)O)C=C(C1=O)C=2N4
100
+ AssemblyReady O=[SH]OC1C(OC(=O)O)OC(O)(C(CO)OC(=O)O)C1O
CupOFMoCA-PROTAC/results/ablation_all/base_s123_clean.smi ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ O=C(O)CCN(C(=O)Nc1cccc(C(=O)O)c1)c1cc2ccc1-2
2
+ INVALID
3
+ CCCOc1sc(CCC(=O)NC(CN=CN)C(=O)O)cc1C(=O)O
4
+ INVALID
5
+ Cc1cc(C(O)c2ccc(NC(=O)C(=O)O)cc2)cc(C(=O)O)c1O
6
+ INVALID
7
+ COC12C=C3C=C4OCOC41C1C=CCC(C3=C2C(=O)O)C1C(=O)O
8
+ O=C(O)c1ccc2c(c1)C1(O)N=c3ccc(C(=O)O)cc3=S1OC2=O
9
+ INVALID
10
+ CC1=CC=CC(Nc2nncs2)(C(=O)O)C(CC(=O)O)=C1
11
+ CC(C)C(=O)OC(C1CCCO1)C(OC(=O)O)OC(=O)O
12
+ CC(C)(CC(=O)O)C(NC(=O)C=CC(N)C(=O)O)C(=O)NCCCO
13
+ CC(OC12C=CC3=C1C2(C(=O)O)N3S1(=O)=C2C3=CC=C2C1=C3)C(=O)O
14
+ INVALID
15
+ Cc1c(Cc2cc(NC(=S)NCC(=O)O)cc(C(=O)O)c2)coc1O
16
+ CC(C)c1cc(S(=O)(=O)NCCC(=O)O)cc2c(CC(=O)O)noc12
17
+ INVALID
18
+ INVALID
19
+ CCN(C1=Cc2cc(C)ccc2N=C(C)O1)C(CCC(=O)O)C(=O)O
20
+ O=C(O)C=C(NC(=O)CCCCCCC(C(=O)O)C(=O)O)C(=O)O
21
+ INVALID
22
+ COc1cccc(-c2cccc(CC(=O)O)c2C(=O)O)c1
23
+ COC12C=C3C=C4OC(CC(=O)O)CC(NC(=[SH]3)N1)C42C(=O)O
24
+ INVALID
25
+ O=C(O)CCC(CC(=O)Oc1cc(C(F)F)cc(C(F)F)c1)C(=O)O
26
+ N#CCOC12C(=O)C1(O)c1ccc3cc1C32C(CC(=O)O)C(=O)O
27
+ O=C(O)c1ccc2c(c1)[N+]([O-])(O)c1cc(ccc1C(=O)O)C(=O)NO2
28
+ CN(C(=O)C(CC(=O)O)NC(=O)CCCO)C1CCCC(C(=O)O)C1
29
+ CNC(C(=O)O)C(O)(OCC(=O)O)C(=O)c1cccc2ccccc12
30
+ O=C(COC(C(=O)O)C(=O)O)c1ccc2c(c1)C(O)=C2O
31
+ O=CNN=CC(CC(C(=O)O)C(=O)O)C(=O)Oc1ccccc1
32
+ COCC1CCC(CC(C)(C)CC(=O)O)(NCCC(=O)O)CC1
33
+ O=C(O)C1=CC(C2CCCCC2)=C2C=CC2C(=O)C(O)C1C(=O)O
34
+ CC(=O)O.NC(=O)c1c2cccc1N(c1ccc(C(=O)O)cc1)C2=O
35
+ O=C(O)C1=NC2=C3C4=CC=C(CC1=C2)C43CC(C(=O)O)C(O)C(=O)O
36
+ CCCC(=O)C1(CC)C=CC(O)=CC(C(=O)O)=C1C(=O)O
37
+ INVALID
38
+ INVALID
39
+ O=C(O)CNS(=O)(=O)C1=Cc2cc(C(=O)O)c3c(c2-3)Cn2cccc21
40
+ INVALID
41
+ INVALID
42
+ O=C(O)NCCC12C=CC(=C(C(S)C(=O)O)Cc3cccc1c3)C=C2
43
+ INVALID
44
+ O=C(O)c1cccc(C2(C(=O)O)C(O)=COC=C2c2ccsc2)c1O
45
+ INVALID
46
+ CC=O.NCC(=O)O.O=C(O)O
47
+ O=C(O)c1cc(NC(=O)C2(C(=O)O)CCCCCC2)cs1
48
+ O=C(O)C(=O)Nc1ccc(C(=O)O)s1
49
+ O=C(O)OC1=CN2CC(Cc3cccc(c3)CC(C(=O)O)NC1=O)C2
50
+ CC(=O)OC(C=C(C)C(=O)O)CC(C)C(CCC(C)(C)O)CC(=O)O
51
+ O=C(O)CNC(=O)c1ccc(OCC(=O)O)cc1
52
+ COc1ccc(CC(Cc2ccccc2C)C(=O)O)cc1CC(=O)O
53
+ O=C(O)Cc1cccc2c3c([nH]cc(C(=O)O)ccc12)CCCC3=O
54
+ CCNS(=O)(=O)c1cnc2coc(C(=O)O)c(C(=CC(=O)O)CC)c1-2
55
+ INVALID
56
+ O=C(O)C1(S)CC(Cc2ccccc2)(C(=O)O)C1
57
+ O=C(O)c1ccc(N2CCOCCN(CCCO)CC2)c(C(=O)O)c1
58
+ INVALID
59
+ CC(C)(CO)NC(=O)CC(CC(=O)O)CC(=O)O
60
+ COc1ccc2nccc(C=C(SC=S)C(=O)O)c2c1C(=O)C(=O)O
61
+ O=C(O)C1=CS(=O)(=CC2CCC3=CCCCC3C2C(=O)O)C=CC1=O
62
+ INVALID
63
+ O=C(O)Cc1ccc(F)cc1C(=O)O
64
+ CC12C(=O)C(C(=O)O)C(C(=O)O)C1(c1ccc(OCCO)cc1)C2=O
65
+ INVALID
66
+ Cc1cccc(CCCCN(CCC(=O)O)C(=O)CCCC(=O)O)c1
67
+ CCC(NC(=O)O)c1cc(C(=O)O)ccc1CC(C)(C)CS(N)(=O)=O
68
+ O=C(O)CCC=c1ccc2c3c1c2C(C(=O)O)=N3
69
+ CCCCC(CC(=O)O)C1C(O)CC2C(O)OC(C(=O)O)CC2C1C
70
+ INVALID
71
+ INVALID
72
+ O=C(O)CC(N=C1CCN2CC3=C1C=CCCC2C(O)=C3O)C(=O)O
73
+ CC(=O)OCCC1(C(=O)O)C(C(C)C)NC(=O)C2(C(=O)O)CCCN21
74
+ INVALID
75
+ NC(C(=O)O)C(=O)C(C(=O)O)=C(O)C(=O)Nc1ccccc1O
76
+ COC(=O)C(C)(C)NC(=O)c1cccc(C(CCC(=O)O)C(=O)O)c1
77
+ INVALID
78
+ COc1ccc(C(=O)O)cc1NC(=Cc1cccs1)C(=O)O
79
+ CC(ON1CC(CO)OC(C(=O)O)C1OC(=O)O)C1(N=O)CCCO1
80
+ CCCC(C)(C)C(=O)C(C(=O)C(=O)O)=C(CO)C(=O)O
81
+ O=C(CCNc1ccc(O)cc1)Nc1c(C(=O)O)cccc1C(=O)O
82
+ INVALID
83
+ CC(C)(CCCO)C(C(=O)O)c1ccccc1C(CC(=O)O)C(=O)O
84
+ INVALID
85
+ O=C(O)C=C1C=C(F)C=C(C2=C(O)C(=O)C(=O)OC2=O)C1(O)C(=O)O
86
+ O=C(O)C1=CC(c2cccs2)=CC(c2ccccc2)=NC(C(=O)O)C1
87
+ CCC1=C(CCC(Oc2ccccc2C(=O)O)C(=O)O)NC(=O)CC1
88
+ O=C(O)CCN(C(=O)O)C(=O)C=C(c1ccccc1)c1ccccc1
89
+ O=C(O)CCCCNc1cc(C(=O)O)c2c(C(=O)O)c(F)ccc2c1
90
+ Cc1ccc(COCC(=O)O)c2c(C(=O)O)cc(OCCCO)cc12
91
+ INVALID
92
+ COC(=O)C(CC(=O)O)CC(O)CC(C(=O)O)C(=O)C(C)(C)C(C)C
93
+ O=C(NC(CC1(C(=O)O)COCCCOC1)C(=O)O)C1CCCCC1
94
+ CC(=O)NCCCCNC(=O)NC(=CC1=C(O)C(C(=O)O)=C1)C(=O)O
95
+ INVALID
96
+ CC(=O)OCC(=O)CC(CCC(=O)OCC(=O)NCC(=O)O)C(=O)O
97
+ O=C(O)CCCCN(CC1CCCCC1)CC1(C(=O)O)C=CC=C1
98
+ CC(CCC(CS)C(=O)O)(OC(=O)CCCC(N)=O)C(=O)O
99
+ O=C(O)c1ccc2c(c1)=C1C3=CC4=CC31C1(C(=O)O)C=C(C1=O)C=2N4
100
+ O=[SH]OC1C(OC(=O)O)OC(O)(C(CO)OC(=O)O)C1O
CupOFMoCA-PROTAC/results/ablation_all/base_s42.smi ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ AssemblyReady Cc1c(NCC(=O)O)cccc1C(=O)O
2
+ AssemblyReady Cc1cccc(C)c1OCC(=O)Nc1cc(C(=O)O)ccc1C(=O)O
3
+ INVALID
4
+ AssemblyReady O=C(O)N1CCC2(CCCC2)C(N(C(=O)O)c2ccc(F)c(F)c2)C1
5
+ INVALID
6
+ AssemblyReady CCC(N)C(=O)NC(=CC(=O)C1(C(=O)O)CC(C)CC(C)C1)C(=O)O
7
+ AssemblyReady C=CC12OC1(C=CC(=O)O)C1CCCCCOC1(C(=O)O)C2(O)CS
8
+ INVALID
9
+ AssemblyReady O=C(O)CNCc1ccc(C2CCCC2CCCC(O)C(=O)O)cc1
10
+ AssemblyReady O=Nc1c(NS(=O)(=O)c2cccc(O)c2)cc(C(=O)O)cc1C(=O)O
11
+ AssemblyReady COCc1c(O)c(CCC(C)=CCCC(=O)O)cc(C(=O)O)cc1=O
12
+ AssemblyReady O=C1C=CC=NC=CC=S2(=O)C(CN1)CC(C(=O)O)C2C(=O)O
13
+ AssemblyReady COC(=O)c1ccc2c(C)cc(C)c(C(=CC(=O)O)C(=O)O)c2c1O
14
+ INVALID
15
+ AssemblyReady CCNC(=O)CCc1ccccc1C(OC)C(CC(=O)O)CC(=O)O
16
+ AssemblyReady Nc1c2cc(ccc2CC(OC(=O)O)C(=O)O)c2cc(=CC=O)sc12
17
+ AssemblyReady CC12CC3CC(C(=O)O)C4C(=O)C(CC34C)C(CCC1=O)C2C(=O)O
18
+ INVALID
19
+ AssemblyReady CCc1ccc([N+]([O-])(OC(=O)O)c2ccc(OC)c(C(=O)O)c2)cc1
20
+ INVALID
21
+ AssemblyReady CC(C)(NC(=O)c1cc(O)cc(OCC(=O)O)c1)C(=O)O
22
+ AssemblyReady CC1C(=O)NC(=O)NC1(CC(=O)O)c1cccc(NC(=O)O)c1
23
+ INVALID
24
+ AssemblyReady Cc1cccc(-c2ccc(-c3c(C(=O)O)csc3C(=O)O)cc2)c1O
25
+ AssemblyReady O=C(O)C1=CC2(C(=O)O)c3cc4c5cc3CSCCC(=O)N4C52C=C1
26
+ AssemblyReady O=C(O)c1ccc(C=CC(=O)[N+]([O-])(O)c2ccccc2)cc1C(=O)O
27
+ AssemblyReady C=C(CN(C(=O)O)C(CCC(=O)O)C(=O)O)NC(CCSC)C(=O)O
28
+ AssemblyReady Cc1cc2nc3c(C(=O)O)cccc3c3ccccc3c(C(=O)O)c1-2
29
+ AssemblyReady CC1S2=C3C(c4cc(O)cc(O)c4C(=O)O)=C2C2=CC3(C(=O)O)C21C
30
+ INVALID
31
+ AssemblyReady CC(CCCC(CCCCC(=O)O)C(=O)O)OCC(O)CCC(=O)O
32
+ AssemblyReady O=C(O)C=Cc1cc(SCC(=O)O)ccc1O
33
+ AssemblyReady COC1(O)CC2(C(=O)O)CCC3=CC=COC1(CC2O)C(C(=O)O)=C3
34
+ AssemblyReady O=COCOc1c(CC(=O)O)cc(O)c(CC(=O)O)c1OCC(=O)O
35
+ AssemblyReady O=C(O)CCC(NC(=O)c1ccc(NCC(=O)O)cc1)C(=O)O
36
+ AssemblyReady O=C(O)C(=CO)C(=O)c1ccc(C(=O)O)c(-c2ccccc2)c1
37
+ AssemblyReady CC(CC(=O)O)=c1ccc2c(c1)C=2C(=O)O
38
+ INVALID
39
+ INVALID
40
+ AssemblyReady CC(NC(CNC(=O)CC1CCCCC1O)C(=O)O)C(=O)O
41
+ AssemblyReady COC12C=C3C1=CC2(OC)C1(C(=O)O)CC(C(=O)O)CC3C1
42
+ AssemblyReady CCC1=CN(CCCN)C(CCCC(=O)O)(C(=O)O)C(CO)=CC=C1
43
+ AssemblyReady O=C(O)CC1C2=CC34C=C(F)C2(CC1C(=O)O)C1(F)C=CC3(C=C1)O4
44
+ AssemblyReady CC1=CC(NC(CC(C)C)C(=O)O)CC=CC2=C1OC(C(=O)O)C2O
45
+ AssemblyReady CC1=CC(=C2CC=CC(S)(C(=O)O)C2)C=C(CO)C(C(=O)O)=C1
46
+ AssemblyReady CC(CCCOO)C(OC(=O)O)C1(C(O)C=O)COC(C(=O)O)CO1
47
+ AssemblyReady Cn1occcc(C(=O)O)cc1-c1cc(C(=O)O)ccc1C(=O)O
48
+ AssemblyReady CC(C1OC(CO)C(C(O)C=O)O1)C(C)(CCCC(=O)O)OC(=O)O
49
+ AssemblyReady CCCCC(CCC1(C)OC(=O)NC(CCC(=O)O)C(=O)O1)C(=O)O
50
+ INVALID
51
+ AssemblyReady C=CCC1=C(C(=O)O)C(OC)=C(C(=O)C(=O)O)C1=O
52
+ AssemblyReady COc1ccc2c(C(C(=O)O)C(=O)O)c1N2CCN(C)C1CCCC1
53
+ AssemblyReady CC(=O)C(C(=O)O)c1c2c(cn1C)C2=CC(=O)O
54
+ AssemblyReady CCC(N)(C(=O)O)C(=O)N(C(CS)C(=O)O)C1(C2=CC(OC)=C2)C=C1
55
+ INVALID
56
+ AssemblyReady COc1cc(C(=O)O)c(CO)c2oc(=O)cc(C(=O)NCC(=O)O)c12
57
+ AssemblyReady C=CC(=O)OCCC(OC(=O)C(C(=O)O)C(O)CC)C(C)(O)C(=O)O
58
+ AssemblyReady CCCC(C(=O)O)N(CC(=O)O)C(F)(F)CC(=O)O
59
+ AssemblyReady CC(C)(C(=O)O)C12C(C(=O)C(=O)O)=C3C1=C2C3(O)c1ccc(O)cc1
60
+ AssemblyReady COCCN(Cc1ccccc1C(=O)O)C(=O)NC(C)C(=O)C(=O)O
61
+ AssemblyReady CC1CC(CC(O)CC(=O)O)C(O)C(CCCCCCCC(=O)O)O1
62
+ AssemblyReady Cc1ccc(S(=O)(=O)NC(CC2=CC=COC(C(=O)O)=C2)C(=O)O)s1
63
+ INVALID
64
+ AssemblyReady O=C(NCCc1cccc(C(=O)O)c1O)C1=C2OC2(C(=O)O)C=C1
65
+ INVALID
66
+ INVALID
67
+ AssemblyReady CN(C)CC(C)(C(=O)O)C(CC1=CC=C1)C(=O)O
68
+ AssemblyReady O=C(O)C(=O)CC(=O)C(C(=O)O)=C1CC1
69
+ AssemblyReady O=C(O)CCC(C(=O)O)C(=O)N(CC(=O)O)C(=O)c1cccc(O)c1
70
+ AssemblyReady Cn1sc2cccc(C3(C(=O)O)CC(NC(=O)CC(=O)O)C3)c2c1=O
71
+ AssemblyReady CN(C1CCC(CC(=O)O)CC1)C(C(=O)NCCC(=O)O)C(C)(C)O
72
+ AssemblyReady CC1=COC2(Cc3cc(C(=O)O)ccc3C(=O)N2)C(C(=O)O)=C1
73
+ AssemblyReady NCC1CN(C(=O)O)C1=NC(=O)O
74
+ AssemblyReady CC(=O)C(CCc1cc(=O)c(C(=O)O)co1)C(=O)O
75
+ AssemblyReady NC1CC[SH]1c1cc(CC(=O)O)ccc1S(=O)(=O)C(=O)O
76
+ AssemblyReady C#CCC1CCOC2=C3CC(O)(C(=O)O)C=C2C=CC3(CC(=O)O)O1
77
+ AssemblyReady CC=C(NCC(=O)O)C(=O)OCCC(=O)O
78
+ INVALID
79
+ AssemblyReady Nc1cc2c(cc1C=O)-c1c-2ccc(C(=O)O)c1NC1(C(=O)O)CC1
80
+ AssemblyReady COCCC1OC(c2ccc(C(=O)O)cc2)OCC1CC(=O)O
81
+ AssemblyReady O=C(O)CCCC12C=CC(C3CCCN4CCCCC34)=C1N2C(=O)O
82
+ AssemblyReady Cc1cc(C(=O)O)cc2c1NC(C(=O)O)(C(=O)O)C2
83
+ AssemblyReady O=C(O)C1=C2C1=CC1=CC12N=CN1C(=O)C(C(=O)O)CSC1=S
84
+ AssemblyReady CCC(=O)OCCCCCc1cc(OCC(=O)O)cc(O)c1C(=O)O
85
+ AssemblyReady CCC(C(=O)O)N(CCCNC(=O)COC)c1cc(C(=O)O)no1
86
+ AssemblyReady CCSC1N(C(CC(=O)O)C(=O)O)S(=O)(=O)C2=CC3(CO)OC13C=C2
87
+ AssemblyReady CC1(C)C2CCC3(C)C4CC5OC1C(C(C(=O)O)=CC2C(=O)O)C3C54
88
+ AssemblyReady CCNC(=O)C1(NCNC(=O)O)C=CC(C)(C(=O)O)C=C1
89
+ AssemblyReady CCCC(C(=O)OC)N(CCCCC(=O)O)C(=O)C(=O)O
90
+ INVALID
91
+ AssemblyReady CC1=CC2=CS134=C1C=C(C(=O)O)C3=C4C13c1c(ccn13)C2CC(=O)O
92
+ AssemblyReady CCCC1(C2=C(c3cccn3CC(=O)O)C(O)=C2N)CC(C(=O)O)C1
93
+ INVALID
94
+ AssemblyReady CC(=O)Nc1ccc(CNc2cc(C(=O)O)c(C(=O)O)cc2O)cc1
95
+ AssemblyReady CCCC(=O)N1CCCN(C(COC(C)C)C(=O)O)CCC1C(=O)O
96
+ AssemblyReady CC(=O)NC(=O)N1CCC(=C(CC(=O)O)C(=O)O)CC1
97
+ AssemblyReady O=C(O)C(CCCCO)(C(=O)O)C1CCCCCC(O)CCCCC1
98
+ AssemblyReady O=C(O)C1=CC=CNC(Cc2ccc(O)cc2)(C(=O)O)C(C(=O)O)=C1
99
+ AssemblyReady CC(NC(=O)N(CC(=O)C(=O)O)C(=O)c1ccc(CO)cc1)C(=O)O
100
+ AssemblyReady CC1CCN(C(=O)CC=C(CCC(=O)O)C(=O)O)CC1
CupOFMoCA-PROTAC/results/ablation_all/base_s42_clean.smi ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Cc1c(NCC(=O)O)cccc1C(=O)O
2
+ Cc1cccc(C)c1OCC(=O)Nc1cc(C(=O)O)ccc1C(=O)O
3
+ INVALID
4
+ O=C(O)N1CCC2(CCCC2)C(N(C(=O)O)c2ccc(F)c(F)c2)C1
5
+ INVALID
6
+ CCC(N)C(=O)NC(=CC(=O)C1(C(=O)O)CC(C)CC(C)C1)C(=O)O
7
+ C=CC12OC1(C=CC(=O)O)C1CCCCCOC1(C(=O)O)C2(O)CS
8
+ INVALID
9
+ O=C(O)CNCc1ccc(C2CCCC2CCCC(O)C(=O)O)cc1
10
+ O=Nc1c(NS(=O)(=O)c2cccc(O)c2)cc(C(=O)O)cc1C(=O)O
11
+ COCc1c(O)c(CCC(C)=CCCC(=O)O)cc(C(=O)O)cc1=O
12
+ O=C1C=CC=NC=CC=S2(=O)C(CN1)CC(C(=O)O)C2C(=O)O
13
+ COC(=O)c1ccc2c(C)cc(C)c(C(=CC(=O)O)C(=O)O)c2c1O
14
+ INVALID
15
+ CCNC(=O)CCc1ccccc1C(OC)C(CC(=O)O)CC(=O)O
16
+ Nc1c2cc(ccc2CC(OC(=O)O)C(=O)O)c2cc(=CC=O)sc12
17
+ CC12CC3CC(C(=O)O)C4C(=O)C(CC34C)C(CCC1=O)C2C(=O)O
18
+ INVALID
19
+ CCc1ccc([N+]([O-])(OC(=O)O)c2ccc(OC)c(C(=O)O)c2)cc1
20
+ INVALID
21
+ CC(C)(NC(=O)c1cc(O)cc(OCC(=O)O)c1)C(=O)O
22
+ CC1C(=O)NC(=O)NC1(CC(=O)O)c1cccc(NC(=O)O)c1
23
+ INVALID
24
+ Cc1cccc(-c2ccc(-c3c(C(=O)O)csc3C(=O)O)cc2)c1O
25
+ O=C(O)C1=CC2(C(=O)O)c3cc4c5cc3CSCCC(=O)N4C52C=C1
26
+ O=C(O)c1ccc(C=CC(=O)[N+]([O-])(O)c2ccccc2)cc1C(=O)O
27
+ C=C(CN(C(=O)O)C(CCC(=O)O)C(=O)O)NC(CCSC)C(=O)O
28
+ Cc1cc2nc3c(C(=O)O)cccc3c3ccccc3c(C(=O)O)c1-2
29
+ CC1S2=C3C(c4cc(O)cc(O)c4C(=O)O)=C2C2=CC3(C(=O)O)C21C
30
+ INVALID
31
+ CC(CCCC(CCCCC(=O)O)C(=O)O)OCC(O)CCC(=O)O
32
+ O=C(O)C=Cc1cc(SCC(=O)O)ccc1O
33
+ COC1(O)CC2(C(=O)O)CCC3=CC=COC1(CC2O)C(C(=O)O)=C3
34
+ O=COCOc1c(CC(=O)O)cc(O)c(CC(=O)O)c1OCC(=O)O
35
+ O=C(O)CCC(NC(=O)c1ccc(NCC(=O)O)cc1)C(=O)O
36
+ O=C(O)C(=CO)C(=O)c1ccc(C(=O)O)c(-c2ccccc2)c1
37
+ CC(CC(=O)O)=c1ccc2c(c1)C=2C(=O)O
38
+ INVALID
39
+ INVALID
40
+ CC(NC(CNC(=O)CC1CCCCC1O)C(=O)O)C(=O)O
41
+ COC12C=C3C1=CC2(OC)C1(C(=O)O)CC(C(=O)O)CC3C1
42
+ CCC1=CN(CCCN)C(CCCC(=O)O)(C(=O)O)C(CO)=CC=C1
43
+ O=C(O)CC1C2=CC34C=C(F)C2(CC1C(=O)O)C1(F)C=CC3(C=C1)O4
44
+ CC1=CC(NC(CC(C)C)C(=O)O)CC=CC2=C1OC(C(=O)O)C2O
45
+ CC1=CC(=C2CC=CC(S)(C(=O)O)C2)C=C(CO)C(C(=O)O)=C1
46
+ CC(CCCOO)C(OC(=O)O)C1(C(O)C=O)COC(C(=O)O)CO1
47
+ Cn1occcc(C(=O)O)cc1-c1cc(C(=O)O)ccc1C(=O)O
48
+ CC(C1OC(CO)C(C(O)C=O)O1)C(C)(CCCC(=O)O)OC(=O)O
49
+ CCCCC(CCC1(C)OC(=O)NC(CCC(=O)O)C(=O)O1)C(=O)O
50
+ INVALID
51
+ C=CCC1=C(C(=O)O)C(OC)=C(C(=O)C(=O)O)C1=O
52
+ COc1ccc2c(C(C(=O)O)C(=O)O)c1N2CCN(C)C1CCCC1
53
+ CC(=O)C(C(=O)O)c1c2c(cn1C)C2=CC(=O)O
54
+ CCC(N)(C(=O)O)C(=O)N(C(CS)C(=O)O)C1(C2=CC(OC)=C2)C=C1
55
+ INVALID
56
+ COc1cc(C(=O)O)c(CO)c2oc(=O)cc(C(=O)NCC(=O)O)c12
57
+ C=CC(=O)OCCC(OC(=O)C(C(=O)O)C(O)CC)C(C)(O)C(=O)O
58
+ CCCC(C(=O)O)N(CC(=O)O)C(F)(F)CC(=O)O
59
+ CC(C)(C(=O)O)C12C(C(=O)C(=O)O)=C3C1=C2C3(O)c1ccc(O)cc1
60
+ COCCN(Cc1ccccc1C(=O)O)C(=O)NC(C)C(=O)C(=O)O
61
+ CC1CC(CC(O)CC(=O)O)C(O)C(CCCCCCCC(=O)O)O1
62
+ Cc1ccc(S(=O)(=O)NC(CC2=CC=COC(C(=O)O)=C2)C(=O)O)s1
63
+ INVALID
64
+ O=C(NCCc1cccc(C(=O)O)c1O)C1=C2OC2(C(=O)O)C=C1
65
+ INVALID
66
+ INVALID
67
+ CN(C)CC(C)(C(=O)O)C(CC1=CC=C1)C(=O)O
68
+ O=C(O)C(=O)CC(=O)C(C(=O)O)=C1CC1
69
+ O=C(O)CCC(C(=O)O)C(=O)N(CC(=O)O)C(=O)c1cccc(O)c1
70
+ Cn1sc2cccc(C3(C(=O)O)CC(NC(=O)CC(=O)O)C3)c2c1=O
71
+ CN(C1CCC(CC(=O)O)CC1)C(C(=O)NCCC(=O)O)C(C)(C)O
72
+ CC1=COC2(Cc3cc(C(=O)O)ccc3C(=O)N2)C(C(=O)O)=C1
73
+ NCC1CN(C(=O)O)C1=NC(=O)O
74
+ CC(=O)C(CCc1cc(=O)c(C(=O)O)co1)C(=O)O
75
+ NC1CC[SH]1c1cc(CC(=O)O)ccc1S(=O)(=O)C(=O)O
76
+ C#CCC1CCOC2=C3CC(O)(C(=O)O)C=C2C=CC3(CC(=O)O)O1
77
+ CC=C(NCC(=O)O)C(=O)OCCC(=O)O
78
+ INVALID
79
+ Nc1cc2c(cc1C=O)-c1c-2ccc(C(=O)O)c1NC1(C(=O)O)CC1
80
+ COCCC1OC(c2ccc(C(=O)O)cc2)OCC1CC(=O)O
81
+ O=C(O)CCCC12C=CC(C3CCCN4CCCCC34)=C1N2C(=O)O
82
+ Cc1cc(C(=O)O)cc2c1NC(C(=O)O)(C(=O)O)C2
83
+ O=C(O)C1=C2C1=CC1=CC12N=CN1C(=O)C(C(=O)O)CSC1=S
84
+ CCC(=O)OCCCCCc1cc(OCC(=O)O)cc(O)c1C(=O)O
85
+ CCC(C(=O)O)N(CCCNC(=O)COC)c1cc(C(=O)O)no1
86
+ CCSC1N(C(CC(=O)O)C(=O)O)S(=O)(=O)C2=CC3(CO)OC13C=C2
87
+ CC1(C)C2CCC3(C)C4CC5OC1C(C(C(=O)O)=CC2C(=O)O)C3C54
88
+ CCNC(=O)C1(NCNC(=O)O)C=CC(C)(C(=O)O)C=C1
89
+ CCCC(C(=O)OC)N(CCCCC(=O)O)C(=O)C(=O)O
90
+ INVALID
91
+ CC1=CC2=CS134=C1C=C(C(=O)O)C3=C4C13c1c(ccn13)C2CC(=O)O
92
+ CCCC1(C2=C(c3cccn3CC(=O)O)C(O)=C2N)CC(C(=O)O)C1
93
+ INVALID
94
+ CC(=O)Nc1ccc(CNc2cc(C(=O)O)c(C(=O)O)cc2O)cc1
95
+ CCCC(=O)N1CCCN(C(COC(C)C)C(=O)O)CCC1C(=O)O
96
+ CC(=O)NC(=O)N1CCC(=C(CC(=O)O)C(=O)O)CC1
97
+ O=C(O)C(CCCCO)(C(=O)O)C1CCCCCC(O)CCCCC1
98
+ O=C(O)C1=CC=CNC(Cc2ccc(O)cc2)(C(=O)O)C(C(=O)O)=C1
99
+ CC(NC(=O)N(CC(=O)C(=O)O)C(=O)c1ccc(CO)cc1)C(=O)O
100
+ CC1CCN(C(=O)CC=C(CCC(=O)O)C(=O)O)CC1
CupOFMoCA-PROTAC/results/ablation_all/base_s456.smi ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ DISCONNECTED O=C(O)CC1CCC2=C3C=CC=CC321.O=CO
2
+ AssemblyReady O=C(O)CC12OC1=C(O)C(=COC(=O)CC[SH](=O)=O)C(C(=O)O)=C2O
3
+ AssemblyReady NC(CCC(=O)O)C(=O)O
4
+ AssemblyReady CCCC(=C(O)C(=O)O)C(C(=O)O)C(=O)O
5
+ INVALID
6
+ AssemblyReady CC(O)C1(O)C=CC2(C(=O)O)OC(OC(CC(=O)O)CC(=O)O)CC21
7
+ AssemblyReady O=C(O)CCC(=O)C(=O)C(=O)O
8
+ AssemblyReady CN(Cc1ccc(CC(C=O)NC(=O)CSOC(=O)O)cc1)C(=O)O
9
+ AssemblyReady CC12CC3CC4(OCC35C3=CS5=C34)C(C(=O)O)(NC(=O)O1)C2C(=O)O
10
+ AssemblyReady CC1(CNC(=O)C(=O)O)CCCC(C)(C(=O)O)CCC1
11
+ AssemblyReady Cc1ccc2ccc(C(=O)O)c(O)c2c1-c1ccc(O)cc1C(=O)O
12
+ AssemblyReady O=C(O)CCCCCNC(c1ccccc1)c1ccccc1C(=O)O
13
+ INVALID
14
+ AssemblyReady Nc1cc(C(=O)O)c(C(=O)N(CCO)CCC(=O)O)cc1S(=O)(=O)O
15
+ AssemblyReady CC1=C(C(=O)O)C(CCCC(=CC(=O)O)C(=O)O)=C(C(=O)O)CCC1
16
+ AssemblyReady CCN(C)C(=O)C(NC(=O)O)C(O)(CC(=O)O)c1ccc(NC)cc1
17
+ AssemblyReady CC1=C(C(=O)O)C=CC(N)=NC(Nc2cccc(C(=O)O)c2)=C1
18
+ AssemblyReady C=C(OC1CCCC1)C(CC=CCCCCC(=O)O)NC(=O)C(=O)O
19
+ AssemblyReady O=CNc1scc([N+]([O-])(O)C(=O)O)c1C(=O)O
20
+ AssemblyReady CC(C)(CO)C(C)(C(=O)O)c1cc(-c2ccccc2)ccc1C(=O)O
21
+ AssemblyReady COc1ccc(C(=O)O)c(C2=C(C3=CC(O)=C3C(=O)O)O2)c1O
22
+ AssemblyReady Cc1cc(C(=C(C#N)C(=O)O)c2cc(CO)c(C(=O)O)o2)ccc1O
23
+ AssemblyReady Cc1c(C(=O)NC(CC(=O)O)(NCC(C)C(=O)O)C(=O)O)ncn1C
24
+ AssemblyReady O=C(O)C1=CC23C=CC(C(=O)O)(C=C2)C1C(=O)OC3
25
+ AssemblyReady CC1=CC(CC(=O)O)C(C(=O)O)C(C)=C1
26
+ AssemblyReady O=Cc1cc(CC(CO)(CCO)C(=O)O)c2cc(C(=O)O)ccc2c1
27
+ AssemblyReady CCCC(C(=O)O)C(C=O)N(CNC)C(=O)O
28
+ INVALID
29
+ AssemblyReady CC1CC(CC(=O)O)CCC1OCNC(C(=O)O)C(C)CO
30
+ AssemblyReady CC(CCC1C(C)(C)CCC(O)C1(C)CCCCCC(=O)O)C(=O)O
31
+ AssemblyReady CC(N)C(=O)N1CCC(C)C(CC(=O)C(CC(N)C(=O)O)C(=O)O)C1
32
+ INVALID
33
+ INVALID
34
+ AssemblyReady Cc1c(NC(OC(=O)O)C(=O)O)ncn1C(CCCC(=O)O)C(=O)O
35
+ AssemblyReady N#Cc1ccccc1-c1cc(C(=O)O)ccc1OC1CC(C(=O)O)C1
36
+ AssemblyReady CCCCC(C(=O)O)C(O)(C(=CC(=O)O)C(=O)O)C(O)CNC(C)=O
37
+ AssemblyReady Cc1cc(C(=CC(=O)O)c2ccccc2)cc2c(C(=O)O)cccc12
38
+ AssemblyReady O=C(O)CCCCN(C(C(=O)O)C(F)(F)F)C(F)(F)C(F)(F)C(=O)O
39
+ INVALID
40
+ AssemblyReady O=CC=C(OC(=O)O)S1(=O)=C2C=C(C3CCC(C(=O)O)N3)C=C2C=C1
41
+ AssemblyReady CC(C)C(Nc1ccc(C=C(O)C(=O)NCC(=O)O)cc1)C(=O)O
42
+ AssemblyReady COc1ccc(NC(=O)OCCCC(CC=CC(=O)O)C(=O)O)cc1
43
+ AssemblyReady O=NC1CCC2=CC(C(=O)O)=CC21c1ccc(O)c(C(=O)O)c1O
44
+ AssemblyReady NC12C3=C4B=C(C(=O)O)OC45C(=O)N5C(C(=O)O)C4C5=C6N1C64C3=C52
45
+ INVALID
46
+ AssemblyReady O=C(O)CCCC(CC(=O)O)OCC(=O)O
47
+ DISCONNECTED Cc1nnc2n1N1C(=Nc3cc(C(=O)O)c(O)c1c3)CN2.O=C(O)O
48
+ AssemblyReady O=C(O)c1cccc(CC(NS(=O)(=O)C2=CC=COC=C2)C(=O)O)c1
49
+ AssemblyReady Nc1ccc(C(=O)O)cc1C(=O)NC(C(=O)O)c1ccc(C(=O)O)s1
50
+ AssemblyReady CCC(C(=O)O)(C(=O)O)c1cccc(C(F)(F)F)c1C=NNC(C)=O
51
+ AssemblyReady O=C(O)CNC(=O)c1cc(-c2ccccc2C(=O)O)c(C(=O)O)s1
52
+ AssemblyReady Cc1c2ccc(N)c(c2C(=O)O)c2cc3cc1c2c3NC(=O)C(=O)O
53
+ INVALID
54
+ AssemblyReady O=C(O)NCCCOc1cc(C(=O)O)nc(N(O)O)n1
55
+ AssemblyReady O=C(O)CC1=CC2(NC3(C(=O)O)CC3)C(O)=CC=C(CC(=O)O)C2=C1
56
+ DISCONNECTED C.CCCC(C)=C(C(=O)O)C(=O)C(=O)O
57
+ AssemblyReady CNc1cc(C(=O)O)cc(N(C)c2cccc(C)c2C(=O)O)c1
58
+ INVALID
59
+ AssemblyReady CCC(Oc1c(OCC(=O)O)cc(OC)c(OC)c1COC)C(=O)O
60
+ AssemblyReady NC(C(=O)c1ccc(C(=O)O)cc1)=C(CCCCCC(=O)O)C(=O)O
61
+ AssemblyReady CC(C)C(O)(C(=O)O)C(O)C(O)COC(=O)CC(C)(C)CCC(=O)O
62
+ INVALID
63
+ AssemblyReady O=C(O)CC1CCN(c2c3cccc2C(C(=O)O)=CCO3)CC1
64
+ AssemblyReady Cc1cc(=O)n(CCC(CCCC(=O)O)C(=O)O)c(N)nc1=O
65
+ AssemblyReady O=C(O)Cc1c(OCc2cccc(C(=O)O)c2)ccc2ccccc12
66
+ AssemblyReady CC(C)(O)C(NC(=O)CC(=O)O)C(C(=O)O)C(COC(=O)O)C(=O)O
67
+ AssemblyReady CN(C(=O)C1(C(=O)O)CC1)c1cccc(C(=O)O)c1CO
68
+ INVALID
69
+ AssemblyReady O=C(O)c1cc(-c2ccccc2-c2ccccc2C(=O)O)ccc1O
70
+ AssemblyReady CC(C)(C(=O)O)C(=O)N(CCCCC(=O)OOC(=O)CN)CC(=O)O
71
+ AssemblyReady O=C(O)CNC(=O)c1cccc(-c2sc3ccccc3c2C(=O)O)c1
72
+ INVALID
73
+ AssemblyReady CNC(=O)N(C)C(=O)NC(Cn1c(C)nc(O)c1C(=O)O)C(=O)O
74
+ AssemblyReady O=C(O)Nc1ccc2cc1C=CC=C(C(=O)O)C=CNC(=O)C(=O)N2
75
+ AssemblyReady CCc1ccc([N+](=O)[O-])c(N(C(=O)O)C(C(=O)O)C(N)CC)c1
76
+ AssemblyReady Cc1ccc2c(c1)C(c1ccccc1C(=O)O)([SH](=O)=O)C=C2C(=O)O
77
+ INVALID
78
+ AssemblyReady COc1c(C)c(C(=O)CC(=O)O)cc(C=CC(=O)O)c1OCCCO
79
+ AssemblyReady O=C(O)CCNC(=S)Nc1ccc(C=C(O)C(=O)O)c2ccccc12
80
+ AssemblyReady O=C(O)CCNC(=O)c1[nH]sc(-c2cccs2)nc(C(=O)O)cc1O
81
+ AssemblyReady N#CC(=C1CCCCC1)c1c(C(=O)O)cccc1C(=O)O
82
+ AssemblyReady CCC=C(C(=O)O)C1(C(=O)O)NC2C=C3C4=CC3(C#N)C(F)=CC41O2
83
+ AssemblyReady NS(=O)(=O)c1cc2cn(C=CC(=O)O)c3ccccc3c-2c1C(=O)O
84
+ AssemblyReady CCN(C(=O)CC(C)(CC(=O)O)C(=O)OC)c1ccc(C(=O)O)cc1
85
+ AssemblyReady O=C1C[SH]2CC3=C(C(=O)O)C4=CC35CC3=CC2(C(=O)O)C45C(=C3)CN1
86
+ AssemblyReady COc1ccc(NC(=O)CC(C(=O)O)(C(=O)O)c2ccccc2)cc1
87
+ AssemblyReady Cc1cc(C)n2oc3c(C(=O)O)c4c(c(C(=O)O)c34)c(=O)occ2c1
88
+ AssemblyReady O=C(O)Nc1cc(C(=O)O)c(OC(F)(F)F)c(-c2ccccc2)c1
89
+ AssemblyReady COC1CCC(C(=O)O)C(C(CCNC(=N)NCN)C(N)C(=O)O)C1
90
+ AssemblyReady O=C(O)c1cccc(CNC(=O)c2cccc(C(=O)O)c2)c1
91
+ AssemblyReady CN(CC(=O)O)CC(=O)CC(=O)O
92
+ AssemblyReady NS(=O)(=O)c1c(NCC(=O)O)ccc(OC(=O)O)c1NCC=CC=O
93
+ AssemblyReady O=C(O)CC(O)C1OC2CC3=CCCSC(C=CCC31)C=C2C(=O)O
94
+ AssemblyReady O=C(O)CC(NC1=S2CN12)c1cccc(C(=O)O)c1
95
+ AssemblyReady O=C(O)CCNCC(O)=C(NC(=O)CCCC1=CCCCC1)C(=O)O
96
+ AssemblyReady CCOC(=O)CNC(=C(C)C(=O)O)c1cc(C(C)=O)cc(C(=O)O)c1
97
+ INVALID
98
+ AssemblyReady Cc1nc(-c2cc(CC(=O)O)ccc2COCC(=O)O)cs1
99
+ AssemblyReady CC(CC(=O)O)NC(=O)C(CC(=O)O)C(C)S(=O)C(C)CO
100
+ AssemblyReady O=C(O)OCC1CC(O)C(n2c3cnc2=NC(SOC(=O)O)=NC=3)O1
CupOFMoCA-PROTAC/results/ablation_all/base_s456_clean.smi ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ O=C(O)CC1CCC2=C3C=CC=CC321.O=CO
2
+ O=C(O)CC12OC1=C(O)C(=COC(=O)CC[SH](=O)=O)C(C(=O)O)=C2O
3
+ NC(CCC(=O)O)C(=O)O
4
+ CCCC(=C(O)C(=O)O)C(C(=O)O)C(=O)O
5
+ INVALID
6
+ CC(O)C1(O)C=CC2(C(=O)O)OC(OC(CC(=O)O)CC(=O)O)CC21
7
+ O=C(O)CCC(=O)C(=O)C(=O)O
8
+ CN(Cc1ccc(CC(C=O)NC(=O)CSOC(=O)O)cc1)C(=O)O
9
+ CC12CC3CC4(OCC35C3=CS5=C34)C(C(=O)O)(NC(=O)O1)C2C(=O)O
10
+ CC1(CNC(=O)C(=O)O)CCCC(C)(C(=O)O)CCC1
11
+ Cc1ccc2ccc(C(=O)O)c(O)c2c1-c1ccc(O)cc1C(=O)O
12
+ O=C(O)CCCCCNC(c1ccccc1)c1ccccc1C(=O)O
13
+ INVALID
14
+ Nc1cc(C(=O)O)c(C(=O)N(CCO)CCC(=O)O)cc1S(=O)(=O)O
15
+ CC1=C(C(=O)O)C(CCCC(=CC(=O)O)C(=O)O)=C(C(=O)O)CCC1
16
+ CCN(C)C(=O)C(NC(=O)O)C(O)(CC(=O)O)c1ccc(NC)cc1
17
+ CC1=C(C(=O)O)C=CC(N)=NC(Nc2cccc(C(=O)O)c2)=C1
18
+ C=C(OC1CCCC1)C(CC=CCCCCC(=O)O)NC(=O)C(=O)O
19
+ O=CNc1scc([N+]([O-])(O)C(=O)O)c1C(=O)O
20
+ CC(C)(CO)C(C)(C(=O)O)c1cc(-c2ccccc2)ccc1C(=O)O
21
+ COc1ccc(C(=O)O)c(C2=C(C3=CC(O)=C3C(=O)O)O2)c1O
22
+ Cc1cc(C(=C(C#N)C(=O)O)c2cc(CO)c(C(=O)O)o2)ccc1O
23
+ Cc1c(C(=O)NC(CC(=O)O)(NCC(C)C(=O)O)C(=O)O)ncn1C
24
+ O=C(O)C1=CC23C=CC(C(=O)O)(C=C2)C1C(=O)OC3
25
+ CC1=CC(CC(=O)O)C(C(=O)O)C(C)=C1
26
+ O=Cc1cc(CC(CO)(CCO)C(=O)O)c2cc(C(=O)O)ccc2c1
27
+ CCCC(C(=O)O)C(C=O)N(CNC)C(=O)O
28
+ INVALID
29
+ CC1CC(CC(=O)O)CCC1OCNC(C(=O)O)C(C)CO
30
+ CC(CCC1C(C)(C)CCC(O)C1(C)CCCCCC(=O)O)C(=O)O
31
+ CC(N)C(=O)N1CCC(C)C(CC(=O)C(CC(N)C(=O)O)C(=O)O)C1
32
+ INVALID
33
+ INVALID
34
+ Cc1c(NC(OC(=O)O)C(=O)O)ncn1C(CCCC(=O)O)C(=O)O
35
+ N#Cc1ccccc1-c1cc(C(=O)O)ccc1OC1CC(C(=O)O)C1
36
+ CCCCC(C(=O)O)C(O)(C(=CC(=O)O)C(=O)O)C(O)CNC(C)=O
37
+ Cc1cc(C(=CC(=O)O)c2ccccc2)cc2c(C(=O)O)cccc12
38
+ O=C(O)CCCCN(C(C(=O)O)C(F)(F)F)C(F)(F)C(F)(F)C(=O)O
39
+ INVALID
40
+ O=CC=C(OC(=O)O)S1(=O)=C2C=C(C3CCC(C(=O)O)N3)C=C2C=C1
41
+ CC(C)C(Nc1ccc(C=C(O)C(=O)NCC(=O)O)cc1)C(=O)O
42
+ COc1ccc(NC(=O)OCCCC(CC=CC(=O)O)C(=O)O)cc1
43
+ O=NC1CCC2=CC(C(=O)O)=CC21c1ccc(O)c(C(=O)O)c1O
44
+ NC12C3=C4B=C(C(=O)O)OC45C(=O)N5C(C(=O)O)C4C5=C6N1C64C3=C52
45
+ INVALID
46
+ O=C(O)CCCC(CC(=O)O)OCC(=O)O
47
+ Cc1nnc2n1N1C(=Nc3cc(C(=O)O)c(O)c1c3)CN2.O=C(O)O
48
+ O=C(O)c1cccc(CC(NS(=O)(=O)C2=CC=COC=C2)C(=O)O)c1
49
+ Nc1ccc(C(=O)O)cc1C(=O)NC(C(=O)O)c1ccc(C(=O)O)s1
50
+ CCC(C(=O)O)(C(=O)O)c1cccc(C(F)(F)F)c1C=NNC(C)=O
51
+ O=C(O)CNC(=O)c1cc(-c2ccccc2C(=O)O)c(C(=O)O)s1
52
+ Cc1c2ccc(N)c(c2C(=O)O)c2cc3cc1c2c3NC(=O)C(=O)O
53
+ INVALID
54
+ O=C(O)NCCCOc1cc(C(=O)O)nc(N(O)O)n1
55
+ O=C(O)CC1=CC2(NC3(C(=O)O)CC3)C(O)=CC=C(CC(=O)O)C2=C1
56
+ C.CCCC(C)=C(C(=O)O)C(=O)C(=O)O
57
+ CNc1cc(C(=O)O)cc(N(C)c2cccc(C)c2C(=O)O)c1
58
+ INVALID
59
+ CCC(Oc1c(OCC(=O)O)cc(OC)c(OC)c1COC)C(=O)O
60
+ NC(C(=O)c1ccc(C(=O)O)cc1)=C(CCCCCC(=O)O)C(=O)O
61
+ CC(C)C(O)(C(=O)O)C(O)C(O)COC(=O)CC(C)(C)CCC(=O)O
62
+ INVALID
63
+ O=C(O)CC1CCN(c2c3cccc2C(C(=O)O)=CCO3)CC1
64
+ Cc1cc(=O)n(CCC(CCCC(=O)O)C(=O)O)c(N)nc1=O
65
+ O=C(O)Cc1c(OCc2cccc(C(=O)O)c2)ccc2ccccc12
66
+ CC(C)(O)C(NC(=O)CC(=O)O)C(C(=O)O)C(COC(=O)O)C(=O)O
67
+ CN(C(=O)C1(C(=O)O)CC1)c1cccc(C(=O)O)c1CO
68
+ INVALID
69
+ O=C(O)c1cc(-c2ccccc2-c2ccccc2C(=O)O)ccc1O
70
+ CC(C)(C(=O)O)C(=O)N(CCCCC(=O)OOC(=O)CN)CC(=O)O
71
+ O=C(O)CNC(=O)c1cccc(-c2sc3ccccc3c2C(=O)O)c1
72
+ INVALID
73
+ CNC(=O)N(C)C(=O)NC(Cn1c(C)nc(O)c1C(=O)O)C(=O)O
74
+ O=C(O)Nc1ccc2cc1C=CC=C(C(=O)O)C=CNC(=O)C(=O)N2
75
+ CCc1ccc([N+](=O)[O-])c(N(C(=O)O)C(C(=O)O)C(N)CC)c1
76
+ Cc1ccc2c(c1)C(c1ccccc1C(=O)O)([SH](=O)=O)C=C2C(=O)O
77
+ INVALID
78
+ COc1c(C)c(C(=O)CC(=O)O)cc(C=CC(=O)O)c1OCCCO
79
+ O=C(O)CCNC(=S)Nc1ccc(C=C(O)C(=O)O)c2ccccc12
80
+ O=C(O)CCNC(=O)c1[nH]sc(-c2cccs2)nc(C(=O)O)cc1O
81
+ N#CC(=C1CCCCC1)c1c(C(=O)O)cccc1C(=O)O
82
+ CCC=C(C(=O)O)C1(C(=O)O)NC2C=C3C4=CC3(C#N)C(F)=CC41O2
83
+ NS(=O)(=O)c1cc2cn(C=CC(=O)O)c3ccccc3c-2c1C(=O)O
84
+ CCN(C(=O)CC(C)(CC(=O)O)C(=O)OC)c1ccc(C(=O)O)cc1
85
+ O=C1C[SH]2CC3=C(C(=O)O)C4=CC35CC3=CC2(C(=O)O)C45C(=C3)CN1
86
+ COc1ccc(NC(=O)CC(C(=O)O)(C(=O)O)c2ccccc2)cc1
87
+ Cc1cc(C)n2oc3c(C(=O)O)c4c(c(C(=O)O)c34)c(=O)occ2c1
88
+ O=C(O)Nc1cc(C(=O)O)c(OC(F)(F)F)c(-c2ccccc2)c1
89
+ COC1CCC(C(=O)O)C(C(CCNC(=N)NCN)C(N)C(=O)O)C1
90
+ O=C(O)c1cccc(CNC(=O)c2cccc(C(=O)O)c2)c1
91
+ CN(CC(=O)O)CC(=O)CC(=O)O
92
+ NS(=O)(=O)c1c(NCC(=O)O)ccc(OC(=O)O)c1NCC=CC=O
93
+ O=C(O)CC(O)C1OC2CC3=CCCSC(C=CCC31)C=C2C(=O)O
94
+ O=C(O)CC(NC1=S2CN12)c1cccc(C(=O)O)c1
95
+ O=C(O)CCNCC(O)=C(NC(=O)CCCC1=CCCCC1)C(=O)O
96
+ CCOC(=O)CNC(=C(C)C(=O)O)c1cc(C(C)=O)cc(C(=O)O)c1
97
+ INVALID
98
+ Cc1nc(-c2cc(CC(=O)O)ccc2COCC(=O)O)cs1
99
+ CC(CC(=O)O)NC(=O)C(CC(=O)O)C(C)S(=O)C(C)CO
100
+ O=C(O)OCC1CC(O)C(n2c3cnc2=NC(SOC(=O)O)=NC=3)O1
CupOFMoCA-PROTAC/results/ablation_all/both_s123.smi ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ DISCONNECTED CC(=O)O.CCOCC(=O)O
2
+ AssemblyReady CCC(CC)=C(CC(=O)O)C(=O)O
3
+ AssemblyReady CC(CCC(=O)O)C(=O)O
4
+ AssemblyReady O=C(O)C1CCCC(C(NC(=O)C2CC2)C(=O)O)CCC1
5
+ AssemblyReady O=C(O)C(=O)C1CCC(C(=O)O)CC1
6
+ AssemblyReady CC(C(=O)O)C(C)(C)C(=O)O
7
+ AssemblyReady CCCCNC(CC(=O)O)C(=O)O
8
+ AssemblyReady NC(=O)CCC(CCCC(=O)O)CCCC(=O)O
9
+ AssemblyReady CCCCCN(C)CCOC(CCCNC(=O)O)NC(=O)O
10
+ AssemblyReady CCCC(CCC(=O)O)C(N)C(=O)O
11
+ AssemblyReady CC(C)N(C)CCC(C(=O)O)C(=O)O
12
+ AssemblyReady C=Cc1c(C(C)(CC(=O)O)C(=O)O)c(C)c(C)n(C)c1=O
13
+ AssemblyReady COCCOC1CCC(CCC(=O)O)CN(C(C)C(=O)O)C1
14
+ INVALID
15
+ AssemblyReady CCC(C)(C(=O)O)C(CC(=O)O)OC
16
+ INVALID
17
+ AssemblyReady CCCC(C(=O)O)C(=O)O
18
+ DISCONNECTED C.CCC(=CC(=O)O)C(=O)O
19
+ AssemblyReady CC(C)(CCC(=O)O)C(=O)O
20
+ INVALID
21
+ AssemblyReady CCc1cc(CC(=O)O)cc(C(=O)O)c1
22
+ DISCONNECTED CC(=O)O.NC(=O)C(=O)O
23
+ AssemblyReady CC(C(=O)O)=C(C)C(=O)O
24
+ AssemblyReady O=C(O)CCC(O)C(=O)O
25
+ DISCONNECTED N.NC(CC(=O)O)C(=O)O
26
+ AssemblyReady CC(CCC(=O)O)C(=O)O
27
+ AssemblyReady CCCCCC(=O)C(C(=O)O)C(=O)O
28
+ AssemblyReady O=C(O)C=CC(=O)NCCCCC(=O)O
29
+ AssemblyReady CC(C(=O)O)=C(C)C(=O)O
30
+ AssemblyReady CCOC(=O)CCC(CC(=O)O)C(=O)O
31
+ AssemblyReady CCC(CC(=O)O)C(=O)O
32
+ AssemblyReady O=C(O)NCC#CCCCCNC(=O)O
33
+ AssemblyReady CC(C(=O)O)=C(C)C(=O)O
34
+ AssemblyReady Cc1cc(C(=O)O)cc2noc(C(=O)O)c12
35
+ AssemblyReady C#CCC(CCCC)=C(CC(=O)O)C(=O)O
36
+ AssemblyReady CCC(C(=O)O)C(O)(C(=O)O)C(C)C
37
+ AssemblyReady O=C(O)C1CC(C(=O)O)C1
38
+ INVALID
39
+ AssemblyReady O=C(O)CCCCCC(CCC(=O)O)NCCCOCCCO
40
+ AssemblyReady COCCN(CC(=O)O)C(CCCCCCCCCCO)C(=O)O
41
+ AssemblyReady O=C(O)NCC1CC[N+]2([O-])NC(C(=O)O)CCCCCC12
42
+ AssemblyReady O=C(O)CCN1CCC(C(=O)O)CC1
43
+ AssemblyReady CCCN(CC)C(C(=O)O)C(=O)O
44
+ AssemblyReady CCCCCCCCCN(CC(=O)O)CC(=O)O
45
+ AssemblyReady CCCC(C(=O)O)N(CCC)CC(=O)O
46
+ AssemblyReady CNCC(C)(C(=O)O)C(=O)O
47
+ AssemblyReady CC(C(=O)O)C(=O)C(=O)O
48
+ DISCONNECTED C#N.O=C(O)CCC(=O)O
49
+ AssemblyReady CCNC(CCCCCC(=O)O)CCC(=O)O
50
+ AssemblyReady COC(C(=O)O)=C(C)CC(C(=O)O)C(=O)O
51
+ INVALID
52
+ DISCONNECTED C=C.O=C(O)CCCCCC(=O)O.O=S
53
+ AssemblyReady CNCCC(CCC(CCC(C)C)C(=O)O)C(=O)O
54
+ DISCONNECTED C.CCC(C(=O)O)C(=O)O
55
+ INVALID
56
+ INVALID
57
+ AssemblyReady CCCCN(CCC(=O)O)C(CC)CCC(=O)O
58
+ AssemblyReady CC=C(CC(=O)O)C(=O)O
59
+ AssemblyReady COCCC(C(=O)O)C(=O)NN=NC(=O)O
60
+ AssemblyReady CCCCNCCN(CCC(=O)O)CC(=O)O
61
+ AssemblyReady O=C(O)CCCCCCC(=O)C(=O)O
62
+ AssemblyReady CCCCC(C(=O)O)C(=O)O
63
+ AssemblyReady C=C(O)C(OCCCCCC(=O)O)C(=O)O
64
+ AssemblyReady CNC(C)(CCC(C)C(=O)O)C(=O)O
65
+ AssemblyReady O=C(O)C=CCCCCC(=O)O
66
+ AssemblyReady NCCCCCCCCCCCC(C(=O)O)=C(CCC(=O)O)C(=O)O
67
+ AssemblyReady O=C(O)CCCCCN(CCC(=O)O)C1CCCCCC1
68
+ AssemblyReady CCC=NNC(C)=C(CCCCCC(=O)O)C(=O)O
69
+ AssemblyReady CCC(C)=C(CC(O)(O)C(=O)O)C(=O)O
70
+ AssemblyReady CCCNN(C(=O)O)C(=O)CC(C)C(=O)O
71
+ DISCONNECTED C.CCN.O=CO.O=CO
72
+ AssemblyReady O=C(O)CCN1CCCCCC1C(=O)O
73
+ AssemblyReady CC=C(CCC(=O)O)C(=O)O
74
+ AssemblyReady CS12=C3C=1C32CCN(CCCC(=O)O)CC(=O)O
75
+ DISCONNECTED CC(CCC(=O)O)C(=O)O.O
76
+ AssemblyReady CCC(CN)CC(C(=O)O)C(=O)O
77
+ AssemblyReady CCC(CCC(=O)O)CC(=O)O
78
+ AssemblyReady CCCCCCCCC(CC(=O)O)C(=O)O
79
+ AssemblyReady C=C(C=C(C)NOC(=O)O)N(N)CCC(=O)O
80
+ AssemblyReady CC(C)C1CC(CCC(CO)=C(CC(=O)O)C(=O)O)C1
81
+ AssemblyReady COCCOC(=CC(=O)C(=O)O)COCCOCCCCCC(=O)O
82
+ AssemblyReady O=C(O)CCCC(CCO)C(=O)C(=O)O
83
+ AssemblyReady CCOCCCCCCOCCOC(CCNCCC(=O)O)C(=O)O
84
+ AssemblyReady O=C(O)CCc1cc(CNC(=O)C(=O)O)ccn1
85
+ DISCONNECTED CCCCNC(=O)O.O=CO
86
+ AssemblyReady O=C(O)ON(CO)C(=O)O
87
+ AssemblyReady COCC(CO)C(C)(C(=O)O)C(=O)OCC(=O)O
88
+ AssemblyReady NCC(CC(=O)O)C(=O)O
89
+ AssemblyReady Cc1nc(-c2occc2C2(C(=O)O)CCC2)nn1CC(=O)O
90
+ AssemblyReady CC(OCCOCC(C)(O)C1(C(=O)O)COCCO1)C(=O)O
91
+ AssemblyReady CCOCCCCC(CC)(C(=O)O)C(=O)O
92
+ DISCONNECTED CCCC.O=CO.O=CO
93
+ AssemblyReady O=C(O)CCCCCc1ccccc1C(=O)O
94
+ AssemblyReady CC(C)CCC(CC(=O)O)C(=O)O
95
+ AssemblyReady NCCCCCCN(CCCCC(=O)O)CCCC(=O)O
96
+ AssemblyReady CCCCC(CC(=O)O)(C(=O)O)C(=O)NCC
97
+ DISCONNECTED C.CC.O.O=CO.O=CO
98
+ AssemblyReady CCN(C)CC(=O)NC1CC(C(CC(=O)O)CC(=O)O)C1
99
+ AssemblyReady CCCC(C)C(=NC(=O)O)NC(=O)O
100
+ DISCONNECTED C.O=C(O)CCOC(=O)O
CupOFMoCA-PROTAC/results/ablation_all/both_s123_clean.smi ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ CC(=O)O.CCOCC(=O)O
2
+ CCC(CC)=C(CC(=O)O)C(=O)O
3
+ CC(CCC(=O)O)C(=O)O
4
+ O=C(O)C1CCCC(C(NC(=O)C2CC2)C(=O)O)CCC1
5
+ O=C(O)C(=O)C1CCC(C(=O)O)CC1
6
+ CC(C(=O)O)C(C)(C)C(=O)O
7
+ CCCCNC(CC(=O)O)C(=O)O
8
+ NC(=O)CCC(CCCC(=O)O)CCCC(=O)O
9
+ CCCCCN(C)CCOC(CCCNC(=O)O)NC(=O)O
10
+ CCCC(CCC(=O)O)C(N)C(=O)O
11
+ CC(C)N(C)CCC(C(=O)O)C(=O)O
12
+ C=Cc1c(C(C)(CC(=O)O)C(=O)O)c(C)c(C)n(C)c1=O
13
+ COCCOC1CCC(CCC(=O)O)CN(C(C)C(=O)O)C1
14
+ INVALID
15
+ CCC(C)(C(=O)O)C(CC(=O)O)OC
16
+ INVALID
17
+ CCCC(C(=O)O)C(=O)O
18
+ C.CCC(=CC(=O)O)C(=O)O
19
+ CC(C)(CCC(=O)O)C(=O)O
20
+ INVALID
21
+ CCc1cc(CC(=O)O)cc(C(=O)O)c1
22
+ CC(=O)O.NC(=O)C(=O)O
23
+ CC(C(=O)O)=C(C)C(=O)O
24
+ O=C(O)CCC(O)C(=O)O
25
+ N.NC(CC(=O)O)C(=O)O
26
+ CC(CCC(=O)O)C(=O)O
27
+ CCCCCC(=O)C(C(=O)O)C(=O)O
28
+ O=C(O)C=CC(=O)NCCCCC(=O)O
29
+ CC(C(=O)O)=C(C)C(=O)O
30
+ CCOC(=O)CCC(CC(=O)O)C(=O)O
31
+ CCC(CC(=O)O)C(=O)O
32
+ O=C(O)NCC#CCCCCNC(=O)O
33
+ CC(C(=O)O)=C(C)C(=O)O
34
+ Cc1cc(C(=O)O)cc2noc(C(=O)O)c12
35
+ C#CCC(CCCC)=C(CC(=O)O)C(=O)O
36
+ CCC(C(=O)O)C(O)(C(=O)O)C(C)C
37
+ O=C(O)C1CC(C(=O)O)C1
38
+ INVALID
39
+ O=C(O)CCCCCC(CCC(=O)O)NCCCOCCCO
40
+ COCCN(CC(=O)O)C(CCCCCCCCCCO)C(=O)O
41
+ O=C(O)NCC1CC[N+]2([O-])NC(C(=O)O)CCCCCC12
42
+ O=C(O)CCN1CCC(C(=O)O)CC1
43
+ CCCN(CC)C(C(=O)O)C(=O)O
44
+ CCCCCCCCCN(CC(=O)O)CC(=O)O
45
+ CCCC(C(=O)O)N(CCC)CC(=O)O
46
+ CNCC(C)(C(=O)O)C(=O)O
47
+ CC(C(=O)O)C(=O)C(=O)O
48
+ C#N.O=C(O)CCC(=O)O
49
+ CCNC(CCCCCC(=O)O)CCC(=O)O
50
+ COC(C(=O)O)=C(C)CC(C(=O)O)C(=O)O
51
+ INVALID
52
+ C=C.O=C(O)CCCCCC(=O)O.O=S
53
+ CNCCC(CCC(CCC(C)C)C(=O)O)C(=O)O
54
+ C.CCC(C(=O)O)C(=O)O
55
+ INVALID
56
+ INVALID
57
+ CCCCN(CCC(=O)O)C(CC)CCC(=O)O
58
+ CC=C(CC(=O)O)C(=O)O
59
+ COCCC(C(=O)O)C(=O)NN=NC(=O)O
60
+ CCCCNCCN(CCC(=O)O)CC(=O)O
61
+ O=C(O)CCCCCCC(=O)C(=O)O
62
+ CCCCC(C(=O)O)C(=O)O
63
+ C=C(O)C(OCCCCCC(=O)O)C(=O)O
64
+ CNC(C)(CCC(C)C(=O)O)C(=O)O
65
+ O=C(O)C=CCCCCC(=O)O
66
+ NCCCCCCCCCCCC(C(=O)O)=C(CCC(=O)O)C(=O)O
67
+ O=C(O)CCCCCN(CCC(=O)O)C1CCCCCC1
68
+ CCC=NNC(C)=C(CCCCCC(=O)O)C(=O)O
69
+ CCC(C)=C(CC(O)(O)C(=O)O)C(=O)O
70
+ CCCNN(C(=O)O)C(=O)CC(C)C(=O)O
71
+ C.CCN.O=CO.O=CO
72
+ O=C(O)CCN1CCCCCC1C(=O)O
73
+ CC=C(CCC(=O)O)C(=O)O
74
+ CS12=C3C=1C32CCN(CCCC(=O)O)CC(=O)O
75
+ CC(CCC(=O)O)C(=O)O.O
76
+ CCC(CN)CC(C(=O)O)C(=O)O
77
+ CCC(CCC(=O)O)CC(=O)O
78
+ CCCCCCCCC(CC(=O)O)C(=O)O
79
+ C=C(C=C(C)NOC(=O)O)N(N)CCC(=O)O
80
+ CC(C)C1CC(CCC(CO)=C(CC(=O)O)C(=O)O)C1
81
+ COCCOC(=CC(=O)C(=O)O)COCCOCCCCCC(=O)O
82
+ O=C(O)CCCC(CCO)C(=O)C(=O)O
83
+ CCOCCCCCCOCCOC(CCNCCC(=O)O)C(=O)O
84
+ O=C(O)CCc1cc(CNC(=O)C(=O)O)ccn1
85
+ CCCCNC(=O)O.O=CO
86
+ O=C(O)ON(CO)C(=O)O
87
+ COCC(CO)C(C)(C(=O)O)C(=O)OCC(=O)O
88
+ NCC(CC(=O)O)C(=O)O
89
+ Cc1nc(-c2occc2C2(C(=O)O)CCC2)nn1CC(=O)O
90
+ CC(OCCOCC(C)(O)C1(C(=O)O)COCCO1)C(=O)O
91
+ CCOCCCCC(CC)(C(=O)O)C(=O)O
92
+ CCCC.O=CO.O=CO
93
+ O=C(O)CCCCCc1ccccc1C(=O)O
94
+ CC(C)CCC(CC(=O)O)C(=O)O
95
+ NCCCCCCN(CCCCC(=O)O)CCCC(=O)O
96
+ CCCCC(CC(=O)O)(C(=O)O)C(=O)NCC
97
+ C.CC.O.O=CO.O=CO
98
+ CCN(C)CC(=O)NC1CC(C(CC(=O)O)CC(=O)O)C1
99
+ CCCC(C)C(=NC(=O)O)NC(=O)O
100
+ C.O=C(O)CCOC(=O)O
CupOFMoCA-PROTAC/results/ablation_all/both_s42.smi ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ AssemblyReady CCNCOCCOCCCCCCCC(C(=O)O)C(=O)O
2
+ AssemblyReady CC1(CC(O)=C(CCC(=O)O)C(=O)O)CC1
3
+ DISCONNECTED CC(=O)NC(=O)O.O=CO
4
+ INVALID
5
+ AssemblyReady O=C(O)C=C(CCCCCCCC(=O)O)OCC(=O)O
6
+ AssemblyReady O=C(O)CCN1CCCCCCN(CCC(=O)C(=O)O)CC1
7
+ AssemblyReady O=C(O)C(=O)CCCC(=O)C(=O)O
8
+ AssemblyReady CCCC(C(=O)O)C(=O)O
9
+ DISCONNECTED CCN(C)C(=O)O.O=CO
10
+ AssemblyReady CCCCCN(C)C(C(=O)O)C(=O)O
11
+ AssemblyReady O=C(O)CN1CC(C(=O)O)C1
12
+ AssemblyReady NC1CN(CCN(C(=O)O)C(=O)O)C1
13
+ AssemblyReady COC1COCCOC1C(=CCCC(=O)O)CCCCCC(=O)O
14
+ AssemblyReady CNC(=O)CCCCCCN(C)C(C(=O)O)C(=O)O
15
+ AssemblyReady O=C(O)C(CO)NC1CCCC1C(=O)O
16
+ AssemblyReady CC(C(=O)O)C(=O)C(=O)O
17
+ AssemblyReady NC(=O)C(C(=O)O)C(=O)O
18
+ AssemblyReady CCC(C)(C(=O)O)C(=O)O
19
+ AssemblyReady O=C(O)CCCCCCN1CCOCCCCN(CCC(=O)O)CC1
20
+ AssemblyReady CCCCC(C=O)=C(OCC(=O)O)C(=O)O
21
+ DISCONNECTED CCNCC(=O)O.O=CO
22
+ AssemblyReady O=C(O)CCCCCCC(=O)O
23
+ AssemblyReady CC(C)OCCOC(C(=O)O)C(=O)O
24
+ AssemblyReady CCOCCOC(CC(C(=O)O)C(=O)O)=C(N)CO
25
+ AssemblyReady CCCCCCCOCCCNC(CO)=C(CCCC(=O)O)C(=O)O
26
+ AssemblyReady CC[N+]([O-])(CN(C)C(=O)O)C(=O)O
27
+ AssemblyReady C=C(N=CC(=O)C(=O)O)C(CCCC)CNC(=O)CC(=O)O
28
+ AssemblyReady O=C(O)CCCCCOCCC(=O)CC(=O)O
29
+ AssemblyReady CCOC(C)C(=C(CCOCCO)C(=O)O)C(C)C(=O)O
30
+ AssemblyReady CCCC(CC(=O)O)N(CC)C(=O)CN(CC(=O)O)CC1CCCC1
31
+ AssemblyReady CCN(CCC(=O)O)C(C)C(=O)O
32
+ DISCONNECTED O=C(O)NCCO.O=CO
33
+ AssemblyReady CCOCCOCCOCCC=C(OCCC(=O)O)C(=O)O
34
+ AssemblyReady CCCCC(CCOC(=O)O)C(=O)O
35
+ AssemblyReady Cc1cccc(C)c1C1(OCCOCC(=O)O)CC(OCC(=O)O)C1
36
+ AssemblyReady CCCCCC(C(=O)O)C(=O)O
37
+ AssemblyReady COCCOC(COCNOC(=O)O)C(=O)O
38
+ AssemblyReady CC(C)(CN)CCCCC(C(=O)O)C(=O)O
39
+ AssemblyReady COC(C(=O)O)C(NC=O)C(=O)O
40
+ AssemblyReady CC(C=O)C(CC(=O)O)C(=O)O
41
+ AssemblyReady O=C(O)CCC(CO)NC(=O)C(=O)O
42
+ AssemblyReady CCN(CCC(=O)O)CN(C)CCCCCC(=O)O
43
+ DISCONNECTED CC(=O)C(=O)O.CC(=O)O
44
+ DISCONNECTED CCCCC(=O)O.O=CO
45
+ AssemblyReady CCCCC(C(=O)O)C(C(=O)O)c1cccc(CNC)c1C
46
+ AssemblyReady CC(C)(CC(=O)O)C(=O)O
47
+ AssemblyReady CN(CC(=O)O)CC(=O)NCCC(=O)O
48
+ AssemblyReady CCCCCCC(CC(=O)O)C(=O)O
49
+ AssemblyReady CC(C)CC(CC(=O)O)NC(=O)CCCC(=O)O
50
+ AssemblyReady NC(CC(=O)O)CC(=O)O
51
+ AssemblyReady CCCCOC(C)C(O)C(CCC(=O)O)C(=O)O
52
+ AssemblyReady CC(C)C(C(=O)O)C(=O)O
53
+ AssemblyReady COC(C(=O)O)C(CC(=O)O)C(C)C
54
+ AssemblyReady CC(N)(CC(=O)O)CC(=O)O
55
+ AssemblyReady CCC1(C=C(CC(=O)O)C(=O)O)CCC1
56
+ AssemblyReady CC(C)C(CC(=O)O)C(=O)O
57
+ AssemblyReady COCCCCCCNC1CC(C(=O)O)(C(=O)O)C1
58
+ AssemblyReady CCOCCOCCN(CCOC(CO)=C(C)C(=O)O)CCC(=O)O
59
+ AssemblyReady O=C(O)N1CCCC(CO)CCN1C(=O)O
60
+ AssemblyReady CC(C)C(O)(CNC(=O)O)C(=O)O
61
+ AssemblyReady CCN(C(=O)O)C(C)C(=O)O
62
+ AssemblyReady CC(C)(O)C(CCCCC1(C(=O)O)CC1)C(=O)O
63
+ AssemblyReady CC(C)C(CC(=O)O)C(=O)O
64
+ DISCONNECTED CCCO.O=CO.O=CO
65
+ AssemblyReady O=C(O)CCOCCNCC1COCC(CCC(=O)O)COC1
66
+ AssemblyReady CCCCC(CCCC(=O)O)CC(=O)O
67
+ AssemblyReady CC(=O)NCCC(=O)C(CC(=O)O)C(=O)O
68
+ AssemblyReady CCC(OC(=O)CC(N)C(=O)O)C(=O)O
69
+ INVALID
70
+ AssemblyReady CNC(C(=O)O)C(C)C(C)C(=O)O
71
+ AssemblyReady CC(O)C(C)C(C(=O)O)N1CCCCC(CC(=O)O)CC1
72
+ AssemblyReady CCCC(O)(CCOCC(=O)O)C(C)(O)Nc1cccc(C(=O)O)c1
73
+ AssemblyReady CCCCCC(C(=O)O)C(=O)O
74
+ AssemblyReady CCOCCOCCOCCCN(CCCC(=O)O)CCCC(=O)O
75
+ AssemblyReady CC1(C)CCN(CCOCC(=O)O)CCN(CCC(=O)O)C1
76
+ AssemblyReady CCC(=O)NCC(OC)(C(=O)O)C(=O)O
77
+ AssemblyReady CCC(C)(C(=O)O)C(=O)O
78
+ AssemblyReady CC(CO)(C(=O)O)C(=O)O
79
+ AssemblyReady CCNC(CN(CCO)C(O)(CC(=O)O)C(=O)O)C(C)C
80
+ AssemblyReady CC(C)C(C(=O)O)C(=O)O
81
+ DISCONNECTED NCCCCCOC(=O)O.O=CC(=O)O
82
+ AssemblyReady CCCNCCC(C)(CC(=O)O)CC(=O)O
83
+ DISCONNECTED C.NCCCCCOC(=O)O.O=CO
84
+ AssemblyReady CN(CCCCCCCO)C(C(=O)O)C(=O)O
85
+ AssemblyReady CC(C)CCCC(C(=O)O)C(=O)O
86
+ AssemblyReady CC(CC(=O)O)CC(=O)O
87
+ AssemblyReady CC(N)(CC(=O)O)C(=O)O
88
+ AssemblyReady C=CCC1CC(NC2(C(=O)O)CCCC2)(C(=O)O)C1
89
+ AssemblyReady NC(CCOCCC(=O)O)C(=O)O
90
+ AssemblyReady CCCCC(C(=O)O)C(=O)O
91
+ AssemblyReady CCOc1cc(C)cc(C(=O)O)c1C(=N)C(=O)O
92
+ AssemblyReady C=CCCC(NC(=O)C(=O)O)C(=O)O
93
+ AssemblyReady COC(CCC(=O)O)C(OCCC(C)O)OC(=O)O
94
+ INVALID
95
+ AssemblyReady CCCCCC(=O)NCC(O)(C(=O)O)C(=O)O
96
+ INVALID
97
+ AssemblyReady O=C(O)CCC(CO)C(=O)O
98
+ AssemblyReady CCC(CC(=O)O)C(=O)O
99
+ AssemblyReady CC(C)(C(=O)O)C1(C(=O)O)CCCCC1
100
+ AssemblyReady COC(=CC(=O)O)CC(=O)NCCCCCCCC(=O)O
CupOFMoCA-PROTAC/results/ablation_all/both_s42_clean.smi ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ CCNCOCCOCCCCCCCC(C(=O)O)C(=O)O
2
+ CC1(CC(O)=C(CCC(=O)O)C(=O)O)CC1
3
+ CC(=O)NC(=O)O.O=CO
4
+ INVALID
5
+ O=C(O)C=C(CCCCCCCC(=O)O)OCC(=O)O
6
+ O=C(O)CCN1CCCCCCN(CCC(=O)C(=O)O)CC1
7
+ O=C(O)C(=O)CCCC(=O)C(=O)O
8
+ CCCC(C(=O)O)C(=O)O
9
+ CCN(C)C(=O)O.O=CO
10
+ CCCCCN(C)C(C(=O)O)C(=O)O
11
+ O=C(O)CN1CC(C(=O)O)C1
12
+ NC1CN(CCN(C(=O)O)C(=O)O)C1
13
+ COC1COCCOC1C(=CCCC(=O)O)CCCCCC(=O)O
14
+ CNC(=O)CCCCCCN(C)C(C(=O)O)C(=O)O
15
+ O=C(O)C(CO)NC1CCCC1C(=O)O
16
+ CC(C(=O)O)C(=O)C(=O)O
17
+ NC(=O)C(C(=O)O)C(=O)O
18
+ CCC(C)(C(=O)O)C(=O)O
19
+ O=C(O)CCCCCCN1CCOCCCCN(CCC(=O)O)CC1
20
+ CCCCC(C=O)=C(OCC(=O)O)C(=O)O
21
+ CCNCC(=O)O.O=CO
22
+ O=C(O)CCCCCCC(=O)O
23
+ CC(C)OCCOC(C(=O)O)C(=O)O
24
+ CCOCCOC(CC(C(=O)O)C(=O)O)=C(N)CO
25
+ CCCCCCCOCCCNC(CO)=C(CCCC(=O)O)C(=O)O
26
+ CC[N+]([O-])(CN(C)C(=O)O)C(=O)O
27
+ C=C(N=CC(=O)C(=O)O)C(CCCC)CNC(=O)CC(=O)O
28
+ O=C(O)CCCCCOCCC(=O)CC(=O)O
29
+ CCOC(C)C(=C(CCOCCO)C(=O)O)C(C)C(=O)O
30
+ CCCC(CC(=O)O)N(CC)C(=O)CN(CC(=O)O)CC1CCCC1
31
+ CCN(CCC(=O)O)C(C)C(=O)O
32
+ O=C(O)NCCO.O=CO
33
+ CCOCCOCCOCCC=C(OCCC(=O)O)C(=O)O
34
+ CCCCC(CCOC(=O)O)C(=O)O
35
+ Cc1cccc(C)c1C1(OCCOCC(=O)O)CC(OCC(=O)O)C1
36
+ CCCCCC(C(=O)O)C(=O)O
37
+ COCCOC(COCNOC(=O)O)C(=O)O
38
+ CC(C)(CN)CCCCC(C(=O)O)C(=O)O
39
+ COC(C(=O)O)C(NC=O)C(=O)O
40
+ CC(C=O)C(CC(=O)O)C(=O)O
41
+ O=C(O)CCC(CO)NC(=O)C(=O)O
42
+ CCN(CCC(=O)O)CN(C)CCCCCC(=O)O
43
+ CC(=O)C(=O)O.CC(=O)O
44
+ CCCCC(=O)O.O=CO
45
+ CCCCC(C(=O)O)C(C(=O)O)c1cccc(CNC)c1C
46
+ CC(C)(CC(=O)O)C(=O)O
47
+ CN(CC(=O)O)CC(=O)NCCC(=O)O
48
+ CCCCCCC(CC(=O)O)C(=O)O
49
+ CC(C)CC(CC(=O)O)NC(=O)CCCC(=O)O
50
+ NC(CC(=O)O)CC(=O)O
51
+ CCCCOC(C)C(O)C(CCC(=O)O)C(=O)O
52
+ CC(C)C(C(=O)O)C(=O)O
53
+ COC(C(=O)O)C(CC(=O)O)C(C)C
54
+ CC(N)(CC(=O)O)CC(=O)O
55
+ CCC1(C=C(CC(=O)O)C(=O)O)CCC1
56
+ CC(C)C(CC(=O)O)C(=O)O
57
+ COCCCCCCNC1CC(C(=O)O)(C(=O)O)C1
58
+ CCOCCOCCN(CCOC(CO)=C(C)C(=O)O)CCC(=O)O
59
+ O=C(O)N1CCCC(CO)CCN1C(=O)O
60
+ CC(C)C(O)(CNC(=O)O)C(=O)O
61
+ CCN(C(=O)O)C(C)C(=O)O
62
+ CC(C)(O)C(CCCCC1(C(=O)O)CC1)C(=O)O
63
+ CC(C)C(CC(=O)O)C(=O)O
64
+ CCCO.O=CO.O=CO
65
+ O=C(O)CCOCCNCC1COCC(CCC(=O)O)COC1
66
+ CCCCC(CCCC(=O)O)CC(=O)O
67
+ CC(=O)NCCC(=O)C(CC(=O)O)C(=O)O
68
+ CCC(OC(=O)CC(N)C(=O)O)C(=O)O
69
+ INVALID
70
+ CNC(C(=O)O)C(C)C(C)C(=O)O
71
+ CC(O)C(C)C(C(=O)O)N1CCCCC(CC(=O)O)CC1
72
+ CCCC(O)(CCOCC(=O)O)C(C)(O)Nc1cccc(C(=O)O)c1
73
+ CCCCCC(C(=O)O)C(=O)O
74
+ CCOCCOCCOCCCN(CCCC(=O)O)CCCC(=O)O
75
+ CC1(C)CCN(CCOCC(=O)O)CCN(CCC(=O)O)C1
76
+ CCC(=O)NCC(OC)(C(=O)O)C(=O)O
77
+ CCC(C)(C(=O)O)C(=O)O
78
+ CC(CO)(C(=O)O)C(=O)O
79
+ CCNC(CN(CCO)C(O)(CC(=O)O)C(=O)O)C(C)C
80
+ CC(C)C(C(=O)O)C(=O)O
81
+ NCCCCCOC(=O)O.O=CC(=O)O
82
+ CCCNCCC(C)(CC(=O)O)CC(=O)O
83
+ C.NCCCCCOC(=O)O.O=CO
84
+ CN(CCCCCCCO)C(C(=O)O)C(=O)O
85
+ CC(C)CCCC(C(=O)O)C(=O)O
86
+ CC(CC(=O)O)CC(=O)O
87
+ CC(N)(CC(=O)O)C(=O)O
88
+ C=CCC1CC(NC2(C(=O)O)CCCC2)(C(=O)O)C1
89
+ NC(CCOCCC(=O)O)C(=O)O
90
+ CCCCC(C(=O)O)C(=O)O
91
+ CCOc1cc(C)cc(C(=O)O)c1C(=N)C(=O)O
92
+ C=CCCC(NC(=O)C(=O)O)C(=O)O
93
+ COC(CCC(=O)O)C(OCCC(C)O)OC(=O)O
94
+ INVALID
95
+ CCCCCC(=O)NCC(O)(C(=O)O)C(=O)O
96
+ INVALID
97
+ O=C(O)CCC(CO)C(=O)O
98
+ CCC(CC(=O)O)C(=O)O
99
+ CC(C)(C(=O)O)C1(C(=O)O)CCCCC1
100
+ COC(=CC(=O)O)CC(=O)NCCCCCCCC(=O)O
CupOFMoCA-PROTAC/results/ablation_all/both_s456.smi ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ AssemblyReady CC(C)OCCOC(OOCCOCCCC(=O)O)C(=O)O
2
+ AssemblyReady CCOCCOCCOCCCN(CCCN)CC(C(=O)O)C(=O)O
3
+ AssemblyReady O=C(O)C1CC(C(=O)O)C1
4
+ AssemblyReady CCN(CC)C(C)OC(C)=C(C(=O)O)C(=O)O
5
+ AssemblyReady CC(C)(C(=O)O)N(CC(N)=O)CC(=O)O
6
+ INVALID
7
+ AssemblyReady CC(O)(O)CCC(CC(C)(C)CCCC(=O)O)C(=O)O
8
+ AssemblyReady CCC(CCC(=O)O)C(=O)O
9
+ AssemblyReady CCOCCOCCC(CCOC(C)OCC(=O)O)C(C)NC(=O)O
10
+ AssemblyReady CCCCC(CC(=O)O)CC(=O)O
11
+ AssemblyReady C#CCCCN1CC(CNc2cccc(CC(=O)O)c2CC(=O)O)C1
12
+ AssemblyReady CC(C(=O)O)N(C)CC(=O)O
13
+ AssemblyReady CCCOC(COCCC(N)C(=O)O)C(=O)O
14
+ AssemblyReady CC(C)CCC(C(=O)O)C(=O)O
15
+ AssemblyReady CC(C(=O)O)=C(C)C(=O)O
16
+ AssemblyReady C=C(c1c(C(=O)O)c1=O)n1nc(C(=O)O)c2c1CC2
17
+ AssemblyReady COCC(C)N(CCCC(=O)O)CC(=O)O
18
+ AssemblyReady CCNC(=O)C(CCCCC(=O)O)C(=O)O
19
+ AssemblyReady O=C(O)CCC(CCCN1CCCCC1)C(=O)O
20
+ AssemblyReady CCC(CC(=O)O)C(=O)O
21
+ AssemblyReady CCC(CC)(CCC(=O)O)C(C)OCC(=O)O
22
+ AssemblyReady CCCN(N=NC(C(=O)O)C(=O)O)C(C)CC
23
+ AssemblyReady CCCON(C(=O)O)C(=O)O
24
+ AssemblyReady CCOCC(OC)=C(CC(=O)O)OCC(=O)O
25
+ AssemblyReady CC(C)C1CC(NC(=O)C(=O)O)(C(=O)O)C1
26
+ INVALID
27
+ AssemblyReady O=C(O)CCCCC(CCC(=O)O)C1(O)CCC1
28
+ AssemblyReady CCC(OC)(OC(C)C(C(=O)O)=C(C)O)C(=O)O
29
+ AssemblyReady CCC(C)(C)CC(CC(=O)O)=C(CC(=O)O)OCCO
30
+ AssemblyReady CCCCCCC(C(=O)O)C(=O)O
31
+ AssemblyReady O=CCC(CC(=O)O)CC(=O)O
32
+ AssemblyReady C=CN(C=N)C(C)C(C(=O)O)C(=O)O
33
+ DISCONNECTED CC(=O)O.CCCC(=O)O
34
+ AssemblyReady CC(NCCNC(=O)O)OC(=O)O
35
+ AssemblyReady COCCOC(C(=O)O)=C(C(=O)O)N1CCN(C)CC1
36
+ AssemblyReady O=C(O)CCC1(O)CCC(C(=O)O)CC1
37
+ AssemblyReady CCOCCOC(=O)CCNCCC(C(=O)O)C(=O)O
38
+ AssemblyReady CCCCC(=O)NC(CC(=O)O)C(=O)O
39
+ AssemblyReady CCC(CC)(CC(=O)O)C(=O)O
40
+ DISCONNECTED CCOCC(=O)NCCCO.O=CO.O=CO.c1cc2ccc1nn2
41
+ AssemblyReady O=C(O)CCCCCCCC(CO)NCCOCC(=O)O
42
+ AssemblyReady CC(CC(=O)O)N(CC(=O)O)C(=O)CCO
43
+ AssemblyReady Cc1cc(C(=O)O)c(C(=O)O)n1C
44
+ AssemblyReady CC(N)=CC(C)OC(C(=O)O)C1OCCOCCN1C(SN)C(=O)O
45
+ AssemblyReady CC(C)C(C(=O)O)N(C)CC(=O)O
46
+ AssemblyReady CCC(C)C(C(=O)O)C(=O)O
47
+ AssemblyReady NC(CCOCC1CCCOCC(C(=O)O)O1)C(=O)O
48
+ AssemblyReady O=C(O)CCCCCCCCCCCCC(=O)O
49
+ AssemblyReady NC(=O)C(C(=O)O)C(=O)O
50
+ AssemblyReady CCCOCCOCCCCCC(CC(=O)O)C(=O)O
51
+ DISCONNECTED O.O=C(O)CCCC(=O)O
52
+ AssemblyReady CCCN(CCC(=O)O)C1CC(C(=O)O)C1
53
+ AssemblyReady CC(CCCC(=O)O)C(=O)O
54
+ DISCONNECTED C.CCC.O=C(O)CCC(=O)O
55
+ DISCONNECTED CCC(=O)O.O=C(O)CCO
56
+ AssemblyReady CCC(CC(=O)O)C(=O)O
57
+ AssemblyReady CCCOCCOCCC(OCC(C)(OCC)C(=O)O)C(=O)O
58
+ AssemblyReady NCCCCCC#CCCN1CCN(CCCC(=O)O)CC1C(=O)O
59
+ AssemblyReady CCCCC(CCCC(=O)O)CCC(=O)O
60
+ DISCONNECTED C.O=C(O)C(CO)C(=O)O
61
+ AssemblyReady CCCCCC(NC(C)C(=O)O)C(=O)O
62
+ AssemblyReady CCNCCC(COCCOC)C(C=O)(OC(=O)O)C(=O)O
63
+ AssemblyReady NC(CCCC1(C(=O)O)CCC1)C(=O)O
64
+ AssemblyReady CN(N=O)C(C)(C(=O)O)C(=O)O
65
+ AssemblyReady CCCCCCC(C)(C)C(CC(=O)O)=C(C)C(=O)O
66
+ AssemblyReady CCC(CC(=O)O)C(=O)O
67
+ AssemblyReady CCCOC(COC(N)CC(=O)O)C(CC)C(=O)O
68
+ AssemblyReady O=C(O)CCC(=O)CC(=O)O
69
+ AssemblyReady CC(C)C(=CC(=O)O)C(=O)O
70
+ AssemblyReady CCC(CC(=O)O)C(=O)O
71
+ AssemblyReady CCCCCC(CO)CC(C(=O)O)C(=O)O
72
+ AssemblyReady O=C(O)C1CC(C(=O)O)C1
73
+ INVALID
74
+ AssemblyReady CC(O)C(CC(=O)O)C(=O)O
75
+ AssemblyReady CCOCC(=O)OCN(CCCCCCC(=O)O)CCC(=O)O
76
+ AssemblyReady O=C(O)CCC(=CCOc1ccccc1)C(=O)O
77
+ AssemblyReady CC(C)COC(CCC=O)C(CC(=O)O)CC(=O)O
78
+ AssemblyReady CCCC(C(=O)O)C(=O)O
79
+ AssemblyReady O=C(O)CC1CCCCN1CC(=O)O
80
+ DISCONNECTED C.O=C(O)CCCC(=O)O
81
+ AssemblyReady CC(NCCCCC1(O)CCCCN1CC(=O)O)C(=O)O
82
+ AssemblyReady CCCCC(=O)NC(C(=O)O)C(=O)O
83
+ AssemblyReady O=C(O)CCCC(=O)CC(=O)O
84
+ AssemblyReady CCCCN(CCCC(=O)O)CCC(=O)C(=O)O
85
+ DISCONNECTED CC(=O)O.CC(=O)O.CCCCCC.OCCO
86
+ AssemblyReady NCCC(CC(=O)O)C(=O)O
87
+ AssemblyReady CC(C)(C)NC(CCCCC(=O)O)C(=O)O
88
+ AssemblyReady CCN(CC(=O)O)C(C)CCC(=O)O
89
+ AssemblyReady Cc1o[nH]c1C(CC(=O)O)C(C)OCCOCCC(=O)O
90
+ AssemblyReady CC(C)(N)C(C(=O)O)C(=O)O
91
+ AssemblyReady O=C(O)CC1CCC(C(=O)O)CC1
92
+ AssemblyReady CCCCC(CCCCN1CCNC(C(=O)O)C1)C(=O)O
93
+ AssemblyReady Cc1nc(C)n2cc(C(=O)O)c(C(=O)O)cc(=O)c12
94
+ AssemblyReady CC(CCC(=O)O)CC(=O)O
95
+ AssemblyReady CC(C)(CCCN)CCC(C(=O)O)C(=O)O
96
+ AssemblyReady CCC(C(=O)O)=C(Cc1cc(C)[nH]n1)C(=O)O
97
+ AssemblyReady CCC(C)(C(=O)O)C(=O)O
98
+ AssemblyReady CCN(C(=O)C(=O)O)C(C)CC(=O)O
99
+ DISCONNECTED C.CO.O=C(O)CCC(=O)O
100
+ AssemblyReady CCCCC(=O)CC(C(=O)O)C(=O)O
CupOFMoCA-PROTAC/results/ablation_all/both_s456_clean.smi ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ CC(C)OCCOC(OOCCOCCCC(=O)O)C(=O)O
2
+ CCOCCOCCOCCCN(CCCN)CC(C(=O)O)C(=O)O
3
+ O=C(O)C1CC(C(=O)O)C1
4
+ CCN(CC)C(C)OC(C)=C(C(=O)O)C(=O)O
5
+ CC(C)(C(=O)O)N(CC(N)=O)CC(=O)O
6
+ INVALID
7
+ CC(O)(O)CCC(CC(C)(C)CCCC(=O)O)C(=O)O
8
+ CCC(CCC(=O)O)C(=O)O
9
+ CCOCCOCCC(CCOC(C)OCC(=O)O)C(C)NC(=O)O
10
+ CCCCC(CC(=O)O)CC(=O)O
11
+ C#CCCCN1CC(CNc2cccc(CC(=O)O)c2CC(=O)O)C1
12
+ CC(C(=O)O)N(C)CC(=O)O
13
+ CCCOC(COCCC(N)C(=O)O)C(=O)O
14
+ CC(C)CCC(C(=O)O)C(=O)O
15
+ CC(C(=O)O)=C(C)C(=O)O
16
+ C=C(c1c(C(=O)O)c1=O)n1nc(C(=O)O)c2c1CC2
17
+ COCC(C)N(CCCC(=O)O)CC(=O)O
18
+ CCNC(=O)C(CCCCC(=O)O)C(=O)O
19
+ O=C(O)CCC(CCCN1CCCCC1)C(=O)O
20
+ CCC(CC(=O)O)C(=O)O
21
+ CCC(CC)(CCC(=O)O)C(C)OCC(=O)O
22
+ CCCN(N=NC(C(=O)O)C(=O)O)C(C)CC
23
+ CCCON(C(=O)O)C(=O)O
24
+ CCOCC(OC)=C(CC(=O)O)OCC(=O)O
25
+ CC(C)C1CC(NC(=O)C(=O)O)(C(=O)O)C1
26
+ INVALID
27
+ O=C(O)CCCCC(CCC(=O)O)C1(O)CCC1
28
+ CCC(OC)(OC(C)C(C(=O)O)=C(C)O)C(=O)O
29
+ CCC(C)(C)CC(CC(=O)O)=C(CC(=O)O)OCCO
30
+ CCCCCCC(C(=O)O)C(=O)O
31
+ O=CCC(CC(=O)O)CC(=O)O
32
+ C=CN(C=N)C(C)C(C(=O)O)C(=O)O
33
+ CC(=O)O.CCCC(=O)O
34
+ CC(NCCNC(=O)O)OC(=O)O
35
+ COCCOC(C(=O)O)=C(C(=O)O)N1CCN(C)CC1
36
+ O=C(O)CCC1(O)CCC(C(=O)O)CC1
37
+ CCOCCOC(=O)CCNCCC(C(=O)O)C(=O)O
38
+ CCCCC(=O)NC(CC(=O)O)C(=O)O
39
+ CCC(CC)(CC(=O)O)C(=O)O
40
+ CCOCC(=O)NCCCO.O=CO.O=CO.c1cc2ccc1nn2
41
+ O=C(O)CCCCCCCC(CO)NCCOCC(=O)O
42
+ CC(CC(=O)O)N(CC(=O)O)C(=O)CCO
43
+ Cc1cc(C(=O)O)c(C(=O)O)n1C
44
+ CC(N)=CC(C)OC(C(=O)O)C1OCCOCCN1C(SN)C(=O)O
45
+ CC(C)C(C(=O)O)N(C)CC(=O)O
46
+ CCC(C)C(C(=O)O)C(=O)O
47
+ NC(CCOCC1CCCOCC(C(=O)O)O1)C(=O)O
48
+ O=C(O)CCCCCCCCCCCCC(=O)O
49
+ NC(=O)C(C(=O)O)C(=O)O
50
+ CCCOCCOCCCCCC(CC(=O)O)C(=O)O
51
+ O.O=C(O)CCCC(=O)O
52
+ CCCN(CCC(=O)O)C1CC(C(=O)O)C1
53
+ CC(CCCC(=O)O)C(=O)O
54
+ C.CCC.O=C(O)CCC(=O)O
55
+ CCC(=O)O.O=C(O)CCO
56
+ CCC(CC(=O)O)C(=O)O
57
+ CCCOCCOCCC(OCC(C)(OCC)C(=O)O)C(=O)O
58
+ NCCCCCC#CCCN1CCN(CCCC(=O)O)CC1C(=O)O
59
+ CCCCC(CCCC(=O)O)CCC(=O)O
60
+ C.O=C(O)C(CO)C(=O)O
61
+ CCCCCC(NC(C)C(=O)O)C(=O)O
62
+ CCNCCC(COCCOC)C(C=O)(OC(=O)O)C(=O)O
63
+ NC(CCCC1(C(=O)O)CCC1)C(=O)O
64
+ CN(N=O)C(C)(C(=O)O)C(=O)O
65
+ CCCCCCC(C)(C)C(CC(=O)O)=C(C)C(=O)O
66
+ CCC(CC(=O)O)C(=O)O
67
+ CCCOC(COC(N)CC(=O)O)C(CC)C(=O)O
68
+ O=C(O)CCC(=O)CC(=O)O
69
+ CC(C)C(=CC(=O)O)C(=O)O
70
+ CCC(CC(=O)O)C(=O)O
71
+ CCCCCC(CO)CC(C(=O)O)C(=O)O
72
+ O=C(O)C1CC(C(=O)O)C1
73
+ INVALID
74
+ CC(O)C(CC(=O)O)C(=O)O
75
+ CCOCC(=O)OCN(CCCCCCC(=O)O)CCC(=O)O
76
+ O=C(O)CCC(=CCOc1ccccc1)C(=O)O
77
+ CC(C)COC(CCC=O)C(CC(=O)O)CC(=O)O
78
+ CCCC(C(=O)O)C(=O)O
79
+ O=C(O)CC1CCCCN1CC(=O)O
80
+ C.O=C(O)CCCC(=O)O
81
+ CC(NCCCCC1(O)CCCCN1CC(=O)O)C(=O)O
82
+ CCCCC(=O)NC(C(=O)O)C(=O)O
83
+ O=C(O)CCCC(=O)CC(=O)O
84
+ CCCCN(CCCC(=O)O)CCC(=O)C(=O)O
85
+ CC(=O)O.CC(=O)O.CCCCCC.OCCO
86
+ NCCC(CC(=O)O)C(=O)O
87
+ CC(C)(C)NC(CCCCC(=O)O)C(=O)O
88
+ CCN(CC(=O)O)C(C)CCC(=O)O
89
+ Cc1o[nH]c1C(CC(=O)O)C(C)OCCOCCC(=O)O
90
+ CC(C)(N)C(C(=O)O)C(=O)O
91
+ O=C(O)CC1CCC(C(=O)O)CC1
92
+ CCCCC(CCCCN1CCNC(C(=O)O)C1)C(=O)O
93
+ Cc1nc(C)n2cc(C(=O)O)c(C(=O)O)cc(=O)c12
94
+ CC(CCC(=O)O)CC(=O)O
95
+ CC(C)(CCCN)CCC(C(=O)O)C(=O)O
96
+ CCC(C(=O)O)=C(Cc1cc(C)[nH]n1)C(=O)O
97
+ CCC(C)(C(=O)O)C(=O)O
98
+ CCN(C(=O)C(=O)O)C(C)CC(=O)O
99
+ C.CO.O=C(O)CCC(=O)O
100
+ CCCCC(=O)CC(C(=O)O)C(=O)O
CupOFMoCA-PROTAC/results/ablation_all/defog_local_edit_20260726_224039_final.json ADDED
@@ -0,0 +1,2502 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "sample_idx": 0,
4
+ "valid": 1,
5
+ "smiles": "CCNCOCCOCCCCCCCC(C(=O)O)C(=O)O",
6
+ "checks": {
7
+ "connected": true,
8
+ "attachment_sites": true,
9
+ "ring_closure": true,
10
+ "long_chain": true,
11
+ "linker_atom_count": true,
12
+ "protac_mw": true,
13
+ "representational": true,
14
+ "sa_score": true
15
+ },
16
+ "properties": {
17
+ "mf": "C15H29NO6",
18
+ "mw": 319.4,
19
+ "polararea": 105.09,
20
+ "xlogp": 1.71,
21
+ "heavycnt": 22,
22
+ "hbonddonor": 3,
23
+ "hbondacc": 5,
24
+ "rotbonds": 16
25
+ }
26
+ },
27
+ {
28
+ "sample_idx": 1,
29
+ "valid": 1,
30
+ "smiles": "CC1(CC(O)=C(CCC(=O)O)C(=O)O)CC1",
31
+ "checks": {
32
+ "connected": true,
33
+ "attachment_sites": true,
34
+ "ring_closure": true,
35
+ "long_chain": true,
36
+ "linker_atom_count": true,
37
+ "protac_mw": true,
38
+ "representational": true,
39
+ "sa_score": true
40
+ },
41
+ "properties": {
42
+ "mf": "C11H16O5",
43
+ "mw": 228.24,
44
+ "polararea": 94.83,
45
+ "xlogp": 1.94,
46
+ "heavycnt": 16,
47
+ "hbonddonor": 3,
48
+ "hbondacc": 3,
49
+ "rotbonds": 6
50
+ }
51
+ },
52
+ {
53
+ "sample_idx": 2,
54
+ "valid": 0,
55
+ "smiles": "CC(=O)NC(=O)O.O=CO",
56
+ "checks": {
57
+ "connected": false,
58
+ "attachment_sites": false,
59
+ "ring_closure": true,
60
+ "long_chain": true,
61
+ "linker_atom_count": true,
62
+ "protac_mw": true,
63
+ "representational": true,
64
+ "sa_score": true
65
+ },
66
+ "properties": {
67
+ "mf": "C4H7NO5",
68
+ "mw": 149.1,
69
+ "polararea": 103.7,
70
+ "xlogp": -0.5,
71
+ "heavycnt": 10,
72
+ "hbonddonor": 3,
73
+ "hbondacc": 3,
74
+ "rotbonds": 0
75
+ }
76
+ },
77
+ {
78
+ "sample_idx": 3,
79
+ "valid": 0,
80
+ "smiles": "",
81
+ "checks": {
82
+ "connected": false,
83
+ "attachment_sites": false,
84
+ "ring_closure": true,
85
+ "long_chain": true,
86
+ "linker_atom_count": false,
87
+ "protac_mw": true,
88
+ "representational": true,
89
+ "sa_score": false
90
+ },
91
+ "properties": {
92
+ "mf": "",
93
+ "mw": 0.0,
94
+ "polararea": 0.0,
95
+ "xlogp": 0.0,
96
+ "heavycnt": 0,
97
+ "hbonddonor": 0,
98
+ "hbondacc": 0,
99
+ "rotbonds": 0
100
+ }
101
+ },
102
+ {
103
+ "sample_idx": 4,
104
+ "valid": 1,
105
+ "smiles": "O=C(O)C=C(CCCCCCCC(=O)O)OCC(=O)O",
106
+ "checks": {
107
+ "connected": true,
108
+ "attachment_sites": true,
109
+ "ring_closure": true,
110
+ "long_chain": true,
111
+ "linker_atom_count": true,
112
+ "protac_mw": true,
113
+ "representational": true,
114
+ "sa_score": true
115
+ },
116
+ "properties": {
117
+ "mf": "C13H20O7",
118
+ "mw": 288.3,
119
+ "polararea": 121.13,
120
+ "xlogp": 1.87,
121
+ "heavycnt": 20,
122
+ "hbonddonor": 3,
123
+ "hbondacc": 4,
124
+ "rotbonds": 12
125
+ }
126
+ },
127
+ {
128
+ "sample_idx": 5,
129
+ "valid": 1,
130
+ "smiles": "O=C(O)CCN1CCCCCCN(CCC(=O)C(=O)O)CC1",
131
+ "checks": {
132
+ "connected": true,
133
+ "attachment_sites": true,
134
+ "ring_closure": true,
135
+ "long_chain": true,
136
+ "linker_atom_count": true,
137
+ "protac_mw": true,
138
+ "representational": true,
139
+ "sa_score": true
140
+ },
141
+ "properties": {
142
+ "mf": "C15H26N2O5",
143
+ "mw": 314.38,
144
+ "polararea": 98.15,
145
+ "xlogp": 0.68,
146
+ "heavycnt": 22,
147
+ "hbonddonor": 2,
148
+ "hbondacc": 5,
149
+ "rotbonds": 7
150
+ }
151
+ },
152
+ {
153
+ "sample_idx": 6,
154
+ "valid": 1,
155
+ "smiles": "O=C(O)C(=O)CCCC(=O)C(=O)O",
156
+ "checks": {
157
+ "connected": true,
158
+ "attachment_sites": true,
159
+ "ring_closure": true,
160
+ "long_chain": true,
161
+ "linker_atom_count": true,
162
+ "protac_mw": true,
163
+ "representational": true,
164
+ "sa_score": true
165
+ },
166
+ "properties": {
167
+ "mf": "C7H8O6",
168
+ "mw": 188.13,
169
+ "polararea": 108.74,
170
+ "xlogp": -0.54,
171
+ "heavycnt": 13,
172
+ "hbonddonor": 2,
173
+ "hbondacc": 4,
174
+ "rotbonds": 6
175
+ }
176
+ },
177
+ {
178
+ "sample_idx": 7,
179
+ "valid": 1,
180
+ "smiles": "CCCC(C(=O)O)C(=O)O",
181
+ "checks": {
182
+ "connected": true,
183
+ "attachment_sites": true,
184
+ "ring_closure": true,
185
+ "long_chain": true,
186
+ "linker_atom_count": true,
187
+ "protac_mw": true,
188
+ "representational": true,
189
+ "sa_score": true
190
+ },
191
+ "properties": {
192
+ "mf": "C6H10O4",
193
+ "mw": 146.14,
194
+ "polararea": 74.6,
195
+ "xlogp": 0.57,
196
+ "heavycnt": 10,
197
+ "hbonddonor": 2,
198
+ "hbondacc": 2,
199
+ "rotbonds": 4
200
+ }
201
+ },
202
+ {
203
+ "sample_idx": 8,
204
+ "valid": 0,
205
+ "smiles": "CCN(C)C(=O)O.O=CO",
206
+ "checks": {
207
+ "connected": false,
208
+ "attachment_sites": false,
209
+ "ring_closure": true,
210
+ "long_chain": true,
211
+ "linker_atom_count": true,
212
+ "protac_mw": true,
213
+ "representational": true,
214
+ "sa_score": true
215
+ },
216
+ "properties": {
217
+ "mf": "C5H11NO4",
218
+ "mw": 149.15,
219
+ "polararea": 77.84,
220
+ "xlogp": 0.32,
221
+ "heavycnt": 10,
222
+ "hbonddonor": 2,
223
+ "hbondacc": 2,
224
+ "rotbonds": 1
225
+ }
226
+ },
227
+ {
228
+ "sample_idx": 9,
229
+ "valid": 1,
230
+ "smiles": "CCCCCN(C)C(C(=O)O)C(=O)O",
231
+ "checks": {
232
+ "connected": true,
233
+ "attachment_sites": true,
234
+ "ring_closure": true,
235
+ "long_chain": true,
236
+ "linker_atom_count": true,
237
+ "protac_mw": true,
238
+ "representational": true,
239
+ "sa_score": true
240
+ },
241
+ "properties": {
242
+ "mf": "C9H17NO4",
243
+ "mw": 203.24,
244
+ "polararea": 77.84,
245
+ "xlogp": 0.65,
246
+ "heavycnt": 14,
247
+ "hbonddonor": 2,
248
+ "hbondacc": 3,
249
+ "rotbonds": 7
250
+ }
251
+ },
252
+ {
253
+ "sample_idx": 10,
254
+ "valid": 1,
255
+ "smiles": "O=C(O)CN1CC(C(=O)O)C1",
256
+ "checks": {
257
+ "connected": true,
258
+ "attachment_sites": true,
259
+ "ring_closure": true,
260
+ "long_chain": true,
261
+ "linker_atom_count": true,
262
+ "protac_mw": true,
263
+ "representational": true,
264
+ "sa_score": true
265
+ },
266
+ "properties": {
267
+ "mf": "C6H9NO4",
268
+ "mw": 159.14,
269
+ "polararea": 77.84,
270
+ "xlogp": -0.91,
271
+ "heavycnt": 11,
272
+ "hbonddonor": 2,
273
+ "hbondacc": 3,
274
+ "rotbonds": 3
275
+ }
276
+ },
277
+ {
278
+ "sample_idx": 11,
279
+ "valid": 0,
280
+ "smiles": "NC1CN(CCN(C(=O)O)C(=O)O)C1",
281
+ "checks": {
282
+ "connected": true,
283
+ "attachment_sites": false,
284
+ "ring_closure": true,
285
+ "long_chain": true,
286
+ "linker_atom_count": true,
287
+ "protac_mw": true,
288
+ "representational": true,
289
+ "sa_score": true
290
+ },
291
+ "properties": {
292
+ "mf": "C7H13N3O4",
293
+ "mw": 203.2,
294
+ "polararea": 107.1,
295
+ "xlogp": -0.71,
296
+ "heavycnt": 14,
297
+ "hbonddonor": 3,
298
+ "hbondacc": 4,
299
+ "rotbonds": 3
300
+ }
301
+ },
302
+ {
303
+ "sample_idx": 12,
304
+ "valid": 1,
305
+ "smiles": "COC1COCCOC1C(=CCCC(=O)O)CCCCCC(=O)O",
306
+ "checks": {
307
+ "connected": true,
308
+ "attachment_sites": true,
309
+ "ring_closure": true,
310
+ "long_chain": true,
311
+ "linker_atom_count": true,
312
+ "protac_mw": true,
313
+ "representational": true,
314
+ "sa_score": true
315
+ },
316
+ "properties": {
317
+ "mf": "C17H28O7",
318
+ "mw": 344.4,
319
+ "polararea": 102.29,
320
+ "xlogp": 2.24,
321
+ "heavycnt": 24,
322
+ "hbonddonor": 2,
323
+ "hbondacc": 5,
324
+ "rotbonds": 11
325
+ }
326
+ },
327
+ {
328
+ "sample_idx": 13,
329
+ "valid": 1,
330
+ "smiles": "CNC(=O)CCCCCCN(C)C(C(=O)O)C(=O)O",
331
+ "checks": {
332
+ "connected": true,
333
+ "attachment_sites": true,
334
+ "ring_closure": true,
335
+ "long_chain": true,
336
+ "linker_atom_count": true,
337
+ "protac_mw": true,
338
+ "representational": true,
339
+ "sa_score": true
340
+ },
341
+ "properties": {
342
+ "mf": "C12H22N2O5",
343
+ "mw": 274.32,
344
+ "polararea": 106.94,
345
+ "xlogp": 0.15,
346
+ "heavycnt": 19,
347
+ "hbonddonor": 3,
348
+ "hbondacc": 4,
349
+ "rotbonds": 10
350
+ }
351
+ },
352
+ {
353
+ "sample_idx": 14,
354
+ "valid": 1,
355
+ "smiles": "O=C(O)C(CO)NC1CCCC1C(=O)O",
356
+ "checks": {
357
+ "connected": true,
358
+ "attachment_sites": true,
359
+ "ring_closure": true,
360
+ "long_chain": true,
361
+ "linker_atom_count": true,
362
+ "protac_mw": true,
363
+ "representational": true,
364
+ "sa_score": true
365
+ },
366
+ "properties": {
367
+ "mf": "C9H15NO5",
368
+ "mw": 217.22,
369
+ "polararea": 106.86,
370
+ "xlogp": -0.73,
371
+ "heavycnt": 15,
372
+ "hbonddonor": 4,
373
+ "hbondacc": 4,
374
+ "rotbonds": 5
375
+ }
376
+ },
377
+ {
378
+ "sample_idx": 15,
379
+ "valid": 1,
380
+ "smiles": "CC(C(=O)O)C(=O)C(=O)O",
381
+ "checks": {
382
+ "connected": true,
383
+ "attachment_sites": true,
384
+ "ring_closure": true,
385
+ "long_chain": true,
386
+ "linker_atom_count": true,
387
+ "protac_mw": true,
388
+ "representational": true,
389
+ "sa_score": true
390
+ },
391
+ "properties": {
392
+ "mf": "C5H6O5",
393
+ "mw": 146.1,
394
+ "polararea": 91.67,
395
+ "xlogp": -0.64,
396
+ "heavycnt": 10,
397
+ "hbonddonor": 2,
398
+ "hbondacc": 3,
399
+ "rotbonds": 3
400
+ }
401
+ },
402
+ {
403
+ "sample_idx": 16,
404
+ "valid": 1,
405
+ "smiles": "NC(=O)C(C(=O)O)C(=O)O",
406
+ "checks": {
407
+ "connected": true,
408
+ "attachment_sites": true,
409
+ "ring_closure": true,
410
+ "long_chain": true,
411
+ "linker_atom_count": true,
412
+ "protac_mw": true,
413
+ "representational": true,
414
+ "sa_score": true
415
+ },
416
+ "properties": {
417
+ "mf": "C4H5NO5",
418
+ "mw": 147.09,
419
+ "polararea": 117.69,
420
+ "xlogp": -1.74,
421
+ "heavycnt": 10,
422
+ "hbonddonor": 3,
423
+ "hbondacc": 3,
424
+ "rotbonds": 3
425
+ }
426
+ },
427
+ {
428
+ "sample_idx": 17,
429
+ "valid": 1,
430
+ "smiles": "CCC(C)(C(=O)O)C(=O)O",
431
+ "checks": {
432
+ "connected": true,
433
+ "attachment_sites": true,
434
+ "ring_closure": true,
435
+ "long_chain": true,
436
+ "linker_atom_count": true,
437
+ "protac_mw": true,
438
+ "representational": true,
439
+ "sa_score": true
440
+ },
441
+ "properties": {
442
+ "mf": "C6H10O4",
443
+ "mw": 146.14,
444
+ "polararea": 74.6,
445
+ "xlogp": 0.57,
446
+ "heavycnt": 10,
447
+ "hbonddonor": 2,
448
+ "hbondacc": 2,
449
+ "rotbonds": 3
450
+ }
451
+ },
452
+ {
453
+ "sample_idx": 18,
454
+ "valid": 1,
455
+ "smiles": "O=C(O)CCCCCCN1CCOCCCCN(CCC(=O)O)CC1",
456
+ "checks": {
457
+ "connected": true,
458
+ "attachment_sites": true,
459
+ "ring_closure": true,
460
+ "long_chain": true,
461
+ "linker_atom_count": true,
462
+ "protac_mw": true,
463
+ "representational": true,
464
+ "sa_score": true
465
+ },
466
+ "properties": {
467
+ "mf": "C18H34N2O5",
468
+ "mw": 358.48,
469
+ "polararea": 90.31,
470
+ "xlogp": 1.91,
471
+ "heavycnt": 25,
472
+ "hbonddonor": 2,
473
+ "hbondacc": 5,
474
+ "rotbonds": 10
475
+ }
476
+ },
477
+ {
478
+ "sample_idx": 19,
479
+ "valid": 1,
480
+ "smiles": "CCCCC(C=O)=C(OCC(=O)O)C(=O)O",
481
+ "checks": {
482
+ "connected": true,
483
+ "attachment_sites": true,
484
+ "ring_closure": true,
485
+ "long_chain": true,
486
+ "linker_atom_count": true,
487
+ "protac_mw": true,
488
+ "representational": true,
489
+ "sa_score": true
490
+ },
491
+ "properties": {
492
+ "mf": "C10H14O6",
493
+ "mw": 230.22,
494
+ "polararea": 100.9,
495
+ "xlogp": 0.82,
496
+ "heavycnt": 16,
497
+ "hbonddonor": 2,
498
+ "hbondacc": 4,
499
+ "rotbonds": 8
500
+ }
501
+ },
502
+ {
503
+ "sample_idx": 20,
504
+ "valid": 0,
505
+ "smiles": "CCNCC(=O)O.O=CO",
506
+ "checks": {
507
+ "connected": false,
508
+ "attachment_sites": true,
509
+ "ring_closure": true,
510
+ "long_chain": true,
511
+ "linker_atom_count": true,
512
+ "protac_mw": true,
513
+ "representational": true,
514
+ "sa_score": true
515
+ },
516
+ "properties": {
517
+ "mf": "C5H11NO4",
518
+ "mw": 149.15,
519
+ "polararea": 86.63,
520
+ "xlogp": -0.62,
521
+ "heavycnt": 10,
522
+ "hbonddonor": 3,
523
+ "hbondacc": 3,
524
+ "rotbonds": 3
525
+ }
526
+ },
527
+ {
528
+ "sample_idx": 21,
529
+ "valid": 1,
530
+ "smiles": "O=C(O)CCCCCCC(=O)O",
531
+ "checks": {
532
+ "connected": true,
533
+ "attachment_sites": true,
534
+ "ring_closure": true,
535
+ "long_chain": true,
536
+ "linker_atom_count": true,
537
+ "protac_mw": true,
538
+ "representational": true,
539
+ "sa_score": true
540
+ },
541
+ "properties": {
542
+ "mf": "C8H14O4",
543
+ "mw": 174.2,
544
+ "polararea": 74.6,
545
+ "xlogp": 1.5,
546
+ "heavycnt": 12,
547
+ "hbonddonor": 2,
548
+ "hbondacc": 2,
549
+ "rotbonds": 7
550
+ }
551
+ },
552
+ {
553
+ "sample_idx": 22,
554
+ "valid": 1,
555
+ "smiles": "CC(C)OCCOC(C(=O)O)C(=O)O",
556
+ "checks": {
557
+ "connected": true,
558
+ "attachment_sites": true,
559
+ "ring_closure": true,
560
+ "long_chain": true,
561
+ "linker_atom_count": true,
562
+ "protac_mw": true,
563
+ "representational": true,
564
+ "sa_score": true
565
+ },
566
+ "properties": {
567
+ "mf": "C8H14O6",
568
+ "mw": 206.19,
569
+ "polararea": 93.06,
570
+ "xlogp": -0.03,
571
+ "heavycnt": 14,
572
+ "hbonddonor": 2,
573
+ "hbondacc": 4,
574
+ "rotbonds": 7
575
+ }
576
+ },
577
+ {
578
+ "sample_idx": 23,
579
+ "valid": 1,
580
+ "smiles": "CCOCCOC(CC(C(=O)O)C(=O)O)=C(N)CO",
581
+ "checks": {
582
+ "connected": true,
583
+ "attachment_sites": true,
584
+ "ring_closure": true,
585
+ "long_chain": true,
586
+ "linker_atom_count": true,
587
+ "protac_mw": true,
588
+ "representational": true,
589
+ "sa_score": true
590
+ },
591
+ "properties": {
592
+ "mf": "C11H19NO7",
593
+ "mw": 277.27,
594
+ "polararea": 139.31,
595
+ "xlogp": -0.62,
596
+ "heavycnt": 19,
597
+ "hbonddonor": 4,
598
+ "hbondacc": 6,
599
+ "rotbonds": 10
600
+ }
601
+ },
602
+ {
603
+ "sample_idx": 24,
604
+ "valid": 1,
605
+ "smiles": "CCCCCCCOCCCNC(CO)=C(CCCC(=O)O)C(=O)O",
606
+ "checks": {
607
+ "connected": true,
608
+ "attachment_sites": true,
609
+ "ring_closure": true,
610
+ "long_chain": true,
611
+ "linker_atom_count": true,
612
+ "protac_mw": true,
613
+ "representational": true,
614
+ "sa_score": true
615
+ },
616
+ "properties": {
617
+ "mf": "C18H33NO6",
618
+ "mw": 359.46,
619
+ "polararea": 116.09,
620
+ "xlogp": 2.54,
621
+ "heavycnt": 25,
622
+ "hbonddonor": 4,
623
+ "hbondacc": 5,
624
+ "rotbonds": 17
625
+ }
626
+ },
627
+ {
628
+ "sample_idx": 25,
629
+ "valid": 0,
630
+ "smiles": "CC[N+]([O-])(CN(C)C(=O)O)C(=O)O",
631
+ "checks": {
632
+ "connected": true,
633
+ "attachment_sites": false,
634
+ "ring_closure": true,
635
+ "long_chain": true,
636
+ "linker_atom_count": true,
637
+ "protac_mw": true,
638
+ "representational": true,
639
+ "sa_score": true
640
+ },
641
+ "properties": {
642
+ "mf": "C6H12N2O5",
643
+ "mw": 192.17,
644
+ "polararea": 100.9,
645
+ "xlogp": 0.57,
646
+ "heavycnt": 13,
647
+ "hbonddonor": 2,
648
+ "hbondacc": 3,
649
+ "rotbonds": 3
650
+ }
651
+ },
652
+ {
653
+ "sample_idx": 26,
654
+ "valid": 1,
655
+ "smiles": "C=C(N=CC(=O)C(=O)O)C(CCCC)CNC(=O)CC(=O)O",
656
+ "checks": {
657
+ "connected": true,
658
+ "attachment_sites": true,
659
+ "ring_closure": true,
660
+ "long_chain": true,
661
+ "linker_atom_count": true,
662
+ "protac_mw": true,
663
+ "representational": true,
664
+ "sa_score": true
665
+ },
666
+ "properties": {
667
+ "mf": "C14H20N2O6",
668
+ "mw": 312.32,
669
+ "polararea": 133.13,
670
+ "xlogp": 0.62,
671
+ "heavycnt": 22,
672
+ "hbonddonor": 3,
673
+ "hbondacc": 5,
674
+ "rotbonds": 11
675
+ }
676
+ },
677
+ {
678
+ "sample_idx": 27,
679
+ "valid": 1,
680
+ "smiles": "O=C(O)CCCCCOCCC(=O)CC(=O)O",
681
+ "checks": {
682
+ "connected": true,
683
+ "attachment_sites": true,
684
+ "ring_closure": true,
685
+ "long_chain": true,
686
+ "linker_atom_count": true,
687
+ "protac_mw": true,
688
+ "representational": true,
689
+ "sa_score": true
690
+ },
691
+ "properties": {
692
+ "mf": "C11H18O6",
693
+ "mw": 246.26,
694
+ "polararea": 100.9,
695
+ "xlogp": 1.08,
696
+ "heavycnt": 17,
697
+ "hbonddonor": 2,
698
+ "hbondacc": 4,
699
+ "rotbonds": 11
700
+ }
701
+ },
702
+ {
703
+ "sample_idx": 28,
704
+ "valid": 1,
705
+ "smiles": "CCOC(C)C(=C(CCOCCO)C(=O)O)C(C)C(=O)O",
706
+ "checks": {
707
+ "connected": true,
708
+ "attachment_sites": true,
709
+ "ring_closure": true,
710
+ "long_chain": true,
711
+ "linker_atom_count": true,
712
+ "protac_mw": true,
713
+ "representational": true,
714
+ "sa_score": true
715
+ },
716
+ "properties": {
717
+ "mf": "C14H24O7",
718
+ "mw": 304.34,
719
+ "polararea": 113.29,
720
+ "xlogp": 0.91,
721
+ "heavycnt": 21,
722
+ "hbonddonor": 3,
723
+ "hbondacc": 5,
724
+ "rotbonds": 11
725
+ }
726
+ },
727
+ {
728
+ "sample_idx": 29,
729
+ "valid": 1,
730
+ "smiles": "CCCC(CC(=O)O)N(CC)C(=O)CN(CC(=O)O)CC1CCCC1",
731
+ "checks": {
732
+ "connected": true,
733
+ "attachment_sites": true,
734
+ "ring_closure": true,
735
+ "long_chain": true,
736
+ "linker_atom_count": true,
737
+ "protac_mw": true,
738
+ "representational": true,
739
+ "sa_score": true
740
+ },
741
+ "properties": {
742
+ "mf": "C18H32N2O5",
743
+ "mw": 356.46,
744
+ "polararea": 98.15,
745
+ "xlogp": 2.06,
746
+ "heavycnt": 25,
747
+ "hbonddonor": 2,
748
+ "hbondacc": 4,
749
+ "rotbonds": 12
750
+ }
751
+ },
752
+ {
753
+ "sample_idx": 30,
754
+ "valid": 1,
755
+ "smiles": "CCN(CCC(=O)O)C(C)C(=O)O",
756
+ "checks": {
757
+ "connected": true,
758
+ "attachment_sites": true,
759
+ "ring_closure": true,
760
+ "long_chain": true,
761
+ "linker_atom_count": true,
762
+ "protac_mw": true,
763
+ "representational": true,
764
+ "sa_score": true
765
+ },
766
+ "properties": {
767
+ "mf": "C8H15NO4",
768
+ "mw": 189.21,
769
+ "polararea": 77.84,
770
+ "xlogp": 0.26,
771
+ "heavycnt": 13,
772
+ "hbonddonor": 2,
773
+ "hbondacc": 3,
774
+ "rotbonds": 6
775
+ }
776
+ },
777
+ {
778
+ "sample_idx": 31,
779
+ "valid": 0,
780
+ "smiles": "O=C(O)NCCO.O=CO",
781
+ "checks": {
782
+ "connected": false,
783
+ "attachment_sites": false,
784
+ "ring_closure": true,
785
+ "long_chain": true,
786
+ "linker_atom_count": true,
787
+ "protac_mw": true,
788
+ "representational": true,
789
+ "sa_score": true
790
+ },
791
+ "properties": {
792
+ "mf": "C4H9NO5",
793
+ "mw": 151.12,
794
+ "polararea": 106.86,
795
+ "xlogp": -1.05,
796
+ "heavycnt": 10,
797
+ "hbonddonor": 4,
798
+ "hbondacc": 3,
799
+ "rotbonds": 2
800
+ }
801
+ },
802
+ {
803
+ "sample_idx": 32,
804
+ "valid": 1,
805
+ "smiles": "CCOCCOCCOCCC=C(OCCC(=O)O)C(=O)O",
806
+ "checks": {
807
+ "connected": true,
808
+ "attachment_sites": true,
809
+ "ring_closure": true,
810
+ "long_chain": true,
811
+ "linker_atom_count": true,
812
+ "protac_mw": true,
813
+ "representational": true,
814
+ "sa_score": true
815
+ },
816
+ "properties": {
817
+ "mf": "C14H24O8",
818
+ "mw": 320.34,
819
+ "polararea": 111.52,
820
+ "xlogp": 0.91,
821
+ "heavycnt": 22,
822
+ "hbonddonor": 2,
823
+ "hbondacc": 6,
824
+ "rotbonds": 15
825
+ }
826
+ },
827
+ {
828
+ "sample_idx": 33,
829
+ "valid": 1,
830
+ "smiles": "CCCCC(CCOC(=O)O)C(=O)O",
831
+ "checks": {
832
+ "connected": true,
833
+ "attachment_sites": true,
834
+ "ring_closure": true,
835
+ "long_chain": true,
836
+ "linker_atom_count": true,
837
+ "protac_mw": true,
838
+ "representational": true,
839
+ "sa_score": true
840
+ },
841
+ "properties": {
842
+ "mf": "C9H16O5",
843
+ "mw": 204.22,
844
+ "polararea": 83.83,
845
+ "xlogp": 1.96,
846
+ "heavycnt": 14,
847
+ "hbonddonor": 2,
848
+ "hbondacc": 3,
849
+ "rotbonds": 7
850
+ }
851
+ },
852
+ {
853
+ "sample_idx": 34,
854
+ "valid": 1,
855
+ "smiles": "Cc1cccc(C)c1C1(OCCOCC(=O)O)CC(OCC(=O)O)C1",
856
+ "checks": {
857
+ "connected": true,
858
+ "attachment_sites": true,
859
+ "ring_closure": true,
860
+ "long_chain": true,
861
+ "linker_atom_count": true,
862
+ "protac_mw": true,
863
+ "representational": true,
864
+ "sa_score": true
865
+ },
866
+ "properties": {
867
+ "mf": "C18H24O7",
868
+ "mw": 352.38,
869
+ "polararea": 102.29,
870
+ "xlogp": 1.88,
871
+ "heavycnt": 25,
872
+ "hbonddonor": 2,
873
+ "hbondacc": 5,
874
+ "rotbonds": 10
875
+ }
876
+ },
877
+ {
878
+ "sample_idx": 35,
879
+ "valid": 1,
880
+ "smiles": "CCCCCC(C(=O)O)C(=O)O",
881
+ "checks": {
882
+ "connected": true,
883
+ "attachment_sites": true,
884
+ "ring_closure": true,
885
+ "long_chain": true,
886
+ "linker_atom_count": true,
887
+ "protac_mw": true,
888
+ "representational": true,
889
+ "sa_score": true
890
+ },
891
+ "properties": {
892
+ "mf": "C8H14O4",
893
+ "mw": 174.2,
894
+ "polararea": 74.6,
895
+ "xlogp": 1.35,
896
+ "heavycnt": 12,
897
+ "hbonddonor": 2,
898
+ "hbondacc": 2,
899
+ "rotbonds": 6
900
+ }
901
+ },
902
+ {
903
+ "sample_idx": 36,
904
+ "valid": 1,
905
+ "smiles": "COCCOC(COCNOC(=O)O)C(=O)O",
906
+ "checks": {
907
+ "connected": true,
908
+ "attachment_sites": true,
909
+ "ring_closure": true,
910
+ "long_chain": true,
911
+ "linker_atom_count": true,
912
+ "protac_mw": true,
913
+ "representational": true,
914
+ "sa_score": true
915
+ },
916
+ "properties": {
917
+ "mf": "C8H15NO8",
918
+ "mw": 253.21,
919
+ "polararea": 123.55,
920
+ "xlogp": -0.72,
921
+ "heavycnt": 17,
922
+ "hbonddonor": 3,
923
+ "hbondacc": 7,
924
+ "rotbonds": 10
925
+ }
926
+ },
927
+ {
928
+ "sample_idx": 37,
929
+ "valid": 1,
930
+ "smiles": "CC(C)(CN)CCCCC(C(=O)O)C(=O)O",
931
+ "checks": {
932
+ "connected": true,
933
+ "attachment_sites": true,
934
+ "ring_closure": true,
935
+ "long_chain": true,
936
+ "linker_atom_count": true,
937
+ "protac_mw": true,
938
+ "representational": true,
939
+ "sa_score": true
940
+ },
941
+ "properties": {
942
+ "mf": "C11H21NO4",
943
+ "mw": 231.29,
944
+ "polararea": 100.62,
945
+ "xlogp": 1.32,
946
+ "heavycnt": 16,
947
+ "hbonddonor": 3,
948
+ "hbondacc": 3,
949
+ "rotbonds": 8
950
+ }
951
+ },
952
+ {
953
+ "sample_idx": 38,
954
+ "valid": 1,
955
+ "smiles": "COC(C(=O)O)C(NC=O)C(=O)O",
956
+ "checks": {
957
+ "connected": true,
958
+ "attachment_sites": true,
959
+ "ring_closure": true,
960
+ "long_chain": true,
961
+ "linker_atom_count": true,
962
+ "protac_mw": true,
963
+ "representational": true,
964
+ "sa_score": true
965
+ },
966
+ "properties": {
967
+ "mf": "C6H9NO6",
968
+ "mw": 191.14,
969
+ "polararea": 112.93,
970
+ "xlogp": -1.71,
971
+ "heavycnt": 13,
972
+ "hbonddonor": 3,
973
+ "hbondacc": 4,
974
+ "rotbonds": 6
975
+ }
976
+ },
977
+ {
978
+ "sample_idx": 39,
979
+ "valid": 1,
980
+ "smiles": "CC(C=O)C(CC(=O)O)C(=O)O",
981
+ "checks": {
982
+ "connected": true,
983
+ "attachment_sites": true,
984
+ "ring_closure": true,
985
+ "long_chain": true,
986
+ "linker_atom_count": true,
987
+ "protac_mw": true,
988
+ "representational": true,
989
+ "sa_score": true
990
+ },
991
+ "properties": {
992
+ "mf": "C7H10O5",
993
+ "mw": 174.15,
994
+ "polararea": 91.67,
995
+ "xlogp": -0.0,
996
+ "heavycnt": 12,
997
+ "hbonddonor": 2,
998
+ "hbondacc": 3,
999
+ "rotbonds": 5
1000
+ }
1001
+ },
1002
+ {
1003
+ "sample_idx": 40,
1004
+ "valid": 1,
1005
+ "smiles": "O=C(O)CCC(CO)NC(=O)C(=O)O",
1006
+ "checks": {
1007
+ "connected": true,
1008
+ "attachment_sites": true,
1009
+ "ring_closure": true,
1010
+ "long_chain": true,
1011
+ "linker_atom_count": true,
1012
+ "protac_mw": true,
1013
+ "representational": true,
1014
+ "sa_score": true
1015
+ },
1016
+ "properties": {
1017
+ "mf": "C7H11NO6",
1018
+ "mw": 205.17,
1019
+ "polararea": 123.93,
1020
+ "xlogp": -1.59,
1021
+ "heavycnt": 14,
1022
+ "hbonddonor": 4,
1023
+ "hbondacc": 4,
1024
+ "rotbonds": 5
1025
+ }
1026
+ },
1027
+ {
1028
+ "sample_idx": 41,
1029
+ "valid": 1,
1030
+ "smiles": "CCN(CCC(=O)O)CN(C)CCCCCC(=O)O",
1031
+ "checks": {
1032
+ "connected": true,
1033
+ "attachment_sites": true,
1034
+ "ring_closure": true,
1035
+ "long_chain": true,
1036
+ "linker_atom_count": true,
1037
+ "protac_mw": true,
1038
+ "representational": true,
1039
+ "sa_score": true
1040
+ },
1041
+ "properties": {
1042
+ "mf": "C13H26N2O4",
1043
+ "mw": 274.36,
1044
+ "polararea": 81.08,
1045
+ "xlogp": 1.32,
1046
+ "heavycnt": 19,
1047
+ "hbonddonor": 2,
1048
+ "hbondacc": 4,
1049
+ "rotbonds": 12
1050
+ }
1051
+ },
1052
+ {
1053
+ "sample_idx": 42,
1054
+ "valid": 0,
1055
+ "smiles": "CC(=O)C(=O)O.CC(=O)O",
1056
+ "checks": {
1057
+ "connected": false,
1058
+ "attachment_sites": true,
1059
+ "ring_closure": true,
1060
+ "long_chain": true,
1061
+ "linker_atom_count": true,
1062
+ "protac_mw": true,
1063
+ "representational": true,
1064
+ "sa_score": true
1065
+ },
1066
+ "properties": {
1067
+ "mf": "C5H8O5",
1068
+ "mw": 148.11,
1069
+ "polararea": 91.67,
1070
+ "xlogp": -0.25,
1071
+ "heavycnt": 10,
1072
+ "hbonddonor": 2,
1073
+ "hbondacc": 3,
1074
+ "rotbonds": 1
1075
+ }
1076
+ },
1077
+ {
1078
+ "sample_idx": 43,
1079
+ "valid": 0,
1080
+ "smiles": "CCCCC(=O)O.O=CO",
1081
+ "checks": {
1082
+ "connected": false,
1083
+ "attachment_sites": true,
1084
+ "ring_closure": true,
1085
+ "long_chain": true,
1086
+ "linker_atom_count": true,
1087
+ "protac_mw": true,
1088
+ "representational": true,
1089
+ "sa_score": true
1090
+ },
1091
+ "properties": {
1092
+ "mf": "C6H12O4",
1093
+ "mw": 148.16,
1094
+ "polararea": 74.6,
1095
+ "xlogp": 0.96,
1096
+ "heavycnt": 10,
1097
+ "hbonddonor": 2,
1098
+ "hbondacc": 2,
1099
+ "rotbonds": 3
1100
+ }
1101
+ },
1102
+ {
1103
+ "sample_idx": 44,
1104
+ "valid": 1,
1105
+ "smiles": "CCCCC(C(=O)O)C(C(=O)O)c1cccc(CNC)c1C",
1106
+ "checks": {
1107
+ "connected": true,
1108
+ "attachment_sites": true,
1109
+ "ring_closure": true,
1110
+ "long_chain": true,
1111
+ "linker_atom_count": true,
1112
+ "protac_mw": true,
1113
+ "representational": true,
1114
+ "sa_score": true
1115
+ },
1116
+ "properties": {
1117
+ "mf": "C17H25NO4",
1118
+ "mw": 307.39,
1119
+ "polararea": 86.63,
1120
+ "xlogp": 2.77,
1121
+ "heavycnt": 22,
1122
+ "hbonddonor": 3,
1123
+ "hbondacc": 3,
1124
+ "rotbonds": 9
1125
+ }
1126
+ },
1127
+ {
1128
+ "sample_idx": 45,
1129
+ "valid": 1,
1130
+ "smiles": "CC(C)(CC(=O)O)C(=O)O",
1131
+ "checks": {
1132
+ "connected": true,
1133
+ "attachment_sites": true,
1134
+ "ring_closure": true,
1135
+ "long_chain": true,
1136
+ "linker_atom_count": true,
1137
+ "protac_mw": true,
1138
+ "representational": true,
1139
+ "sa_score": true
1140
+ },
1141
+ "properties": {
1142
+ "mf": "C6H10O4",
1143
+ "mw": 146.14,
1144
+ "polararea": 74.6,
1145
+ "xlogp": 0.57,
1146
+ "heavycnt": 10,
1147
+ "hbonddonor": 2,
1148
+ "hbondacc": 2,
1149
+ "rotbonds": 3
1150
+ }
1151
+ },
1152
+ {
1153
+ "sample_idx": 46,
1154
+ "valid": 1,
1155
+ "smiles": "CN(CC(=O)O)CC(=O)NCCC(=O)O",
1156
+ "checks": {
1157
+ "connected": true,
1158
+ "attachment_sites": true,
1159
+ "ring_closure": true,
1160
+ "long_chain": true,
1161
+ "linker_atom_count": true,
1162
+ "protac_mw": true,
1163
+ "representational": true,
1164
+ "sa_score": true
1165
+ },
1166
+ "properties": {
1167
+ "mf": "C8H14N2O5",
1168
+ "mw": 218.21,
1169
+ "polararea": 106.94,
1170
+ "xlogp": -1.41,
1171
+ "heavycnt": 15,
1172
+ "hbonddonor": 3,
1173
+ "hbondacc": 4,
1174
+ "rotbonds": 7
1175
+ }
1176
+ },
1177
+ {
1178
+ "sample_idx": 47,
1179
+ "valid": 1,
1180
+ "smiles": "CCCCCCC(CC(=O)O)C(=O)O",
1181
+ "checks": {
1182
+ "connected": true,
1183
+ "attachment_sites": true,
1184
+ "ring_closure": true,
1185
+ "long_chain": true,
1186
+ "linker_atom_count": true,
1187
+ "protac_mw": true,
1188
+ "representational": true,
1189
+ "sa_score": true
1190
+ },
1191
+ "properties": {
1192
+ "mf": "C10H18O4",
1193
+ "mw": 202.25,
1194
+ "polararea": 74.6,
1195
+ "xlogp": 2.13,
1196
+ "heavycnt": 14,
1197
+ "hbonddonor": 2,
1198
+ "hbondacc": 2,
1199
+ "rotbonds": 8
1200
+ }
1201
+ },
1202
+ {
1203
+ "sample_idx": 48,
1204
+ "valid": 1,
1205
+ "smiles": "CC(C)CC(CC(=O)O)NC(=O)CCCC(=O)O",
1206
+ "checks": {
1207
+ "connected": true,
1208
+ "attachment_sites": true,
1209
+ "ring_closure": true,
1210
+ "long_chain": true,
1211
+ "linker_atom_count": true,
1212
+ "protac_mw": true,
1213
+ "representational": true,
1214
+ "sa_score": true
1215
+ },
1216
+ "properties": {
1217
+ "mf": "C12H21NO5",
1218
+ "mw": 259.3,
1219
+ "polararea": 103.7,
1220
+ "xlogp": 1.25,
1221
+ "heavycnt": 18,
1222
+ "hbonddonor": 3,
1223
+ "hbondacc": 3,
1224
+ "rotbonds": 9
1225
+ }
1226
+ },
1227
+ {
1228
+ "sample_idx": 49,
1229
+ "valid": 1,
1230
+ "smiles": "NC(CC(=O)O)CC(=O)O",
1231
+ "checks": {
1232
+ "connected": true,
1233
+ "attachment_sites": true,
1234
+ "ring_closure": true,
1235
+ "long_chain": true,
1236
+ "linker_atom_count": true,
1237
+ "protac_mw": true,
1238
+ "representational": true,
1239
+ "sa_score": true
1240
+ },
1241
+ "properties": {
1242
+ "mf": "C5H9NO4",
1243
+ "mw": 147.13,
1244
+ "polararea": 100.62,
1245
+ "xlogp": -0.74,
1246
+ "heavycnt": 10,
1247
+ "hbonddonor": 3,
1248
+ "hbondacc": 3,
1249
+ "rotbonds": 4
1250
+ }
1251
+ },
1252
+ {
1253
+ "sample_idx": 50,
1254
+ "valid": 1,
1255
+ "smiles": "CCCCOC(C)C(O)C(CCC(=O)O)C(=O)O",
1256
+ "checks": {
1257
+ "connected": true,
1258
+ "attachment_sites": true,
1259
+ "ring_closure": true,
1260
+ "long_chain": true,
1261
+ "linker_atom_count": true,
1262
+ "protac_mw": true,
1263
+ "representational": true,
1264
+ "sa_score": true
1265
+ },
1266
+ "properties": {
1267
+ "mf": "C12H22O6",
1268
+ "mw": 262.3,
1269
+ "polararea": 104.06,
1270
+ "xlogp": 1.12,
1271
+ "heavycnt": 18,
1272
+ "hbonddonor": 3,
1273
+ "hbondacc": 4,
1274
+ "rotbonds": 10
1275
+ }
1276
+ },
1277
+ {
1278
+ "sample_idx": 51,
1279
+ "valid": 1,
1280
+ "smiles": "CC(C)C(C(=O)O)C(=O)O",
1281
+ "checks": {
1282
+ "connected": true,
1283
+ "attachment_sites": true,
1284
+ "ring_closure": true,
1285
+ "long_chain": true,
1286
+ "linker_atom_count": true,
1287
+ "protac_mw": true,
1288
+ "representational": true,
1289
+ "sa_score": true
1290
+ },
1291
+ "properties": {
1292
+ "mf": "C6H10O4",
1293
+ "mw": 146.14,
1294
+ "polararea": 74.6,
1295
+ "xlogp": 0.43,
1296
+ "heavycnt": 10,
1297
+ "hbonddonor": 2,
1298
+ "hbondacc": 2,
1299
+ "rotbonds": 3
1300
+ }
1301
+ },
1302
+ {
1303
+ "sample_idx": 52,
1304
+ "valid": 1,
1305
+ "smiles": "COC(C(=O)O)C(CC(=O)O)C(C)C",
1306
+ "checks": {
1307
+ "connected": true,
1308
+ "attachment_sites": true,
1309
+ "ring_closure": true,
1310
+ "long_chain": true,
1311
+ "linker_atom_count": true,
1312
+ "protac_mw": true,
1313
+ "representational": true,
1314
+ "sa_score": true
1315
+ },
1316
+ "properties": {
1317
+ "mf": "C9H16O5",
1318
+ "mw": 204.22,
1319
+ "polararea": 83.83,
1320
+ "xlogp": 0.83,
1321
+ "heavycnt": 14,
1322
+ "hbonddonor": 2,
1323
+ "hbondacc": 3,
1324
+ "rotbonds": 6
1325
+ }
1326
+ },
1327
+ {
1328
+ "sample_idx": 53,
1329
+ "valid": 1,
1330
+ "smiles": "CC(N)(CC(=O)O)CC(=O)O",
1331
+ "checks": {
1332
+ "connected": true,
1333
+ "attachment_sites": true,
1334
+ "ring_closure": true,
1335
+ "long_chain": true,
1336
+ "linker_atom_count": true,
1337
+ "protac_mw": true,
1338
+ "representational": true,
1339
+ "sa_score": true
1340
+ },
1341
+ "properties": {
1342
+ "mf": "C6H11NO4",
1343
+ "mw": 161.16,
1344
+ "polararea": 100.62,
1345
+ "xlogp": -0.35,
1346
+ "heavycnt": 11,
1347
+ "hbonddonor": 3,
1348
+ "hbondacc": 3,
1349
+ "rotbonds": 4
1350
+ }
1351
+ },
1352
+ {
1353
+ "sample_idx": 54,
1354
+ "valid": 1,
1355
+ "smiles": "CCC1(C=C(CC(=O)O)C(=O)O)CCC1",
1356
+ "checks": {
1357
+ "connected": true,
1358
+ "attachment_sites": true,
1359
+ "ring_closure": true,
1360
+ "long_chain": true,
1361
+ "linker_atom_count": true,
1362
+ "protac_mw": true,
1363
+ "representational": true,
1364
+ "sa_score": true
1365
+ },
1366
+ "properties": {
1367
+ "mf": "C11H16O4",
1368
+ "mw": 212.24,
1369
+ "polararea": 74.6,
1370
+ "xlogp": 2.05,
1371
+ "heavycnt": 15,
1372
+ "hbonddonor": 2,
1373
+ "hbondacc": 2,
1374
+ "rotbonds": 5
1375
+ }
1376
+ },
1377
+ {
1378
+ "sample_idx": 55,
1379
+ "valid": 1,
1380
+ "smiles": "CC(C)C(CC(=O)O)C(=O)O",
1381
+ "checks": {
1382
+ "connected": true,
1383
+ "attachment_sites": true,
1384
+ "ring_closure": true,
1385
+ "long_chain": true,
1386
+ "linker_atom_count": true,
1387
+ "protac_mw": true,
1388
+ "representational": true,
1389
+ "sa_score": true
1390
+ },
1391
+ "properties": {
1392
+ "mf": "C7H12O4",
1393
+ "mw": 160.17,
1394
+ "polararea": 74.6,
1395
+ "xlogp": 0.82,
1396
+ "heavycnt": 11,
1397
+ "hbonddonor": 2,
1398
+ "hbondacc": 2,
1399
+ "rotbonds": 4
1400
+ }
1401
+ },
1402
+ {
1403
+ "sample_idx": 56,
1404
+ "valid": 1,
1405
+ "smiles": "COCCCCCCNC1CC(C(=O)O)(C(=O)O)C1",
1406
+ "checks": {
1407
+ "connected": true,
1408
+ "attachment_sites": true,
1409
+ "ring_closure": true,
1410
+ "long_chain": true,
1411
+ "linker_atom_count": true,
1412
+ "protac_mw": true,
1413
+ "representational": true,
1414
+ "sa_score": true
1415
+ },
1416
+ "properties": {
1417
+ "mf": "C13H23NO5",
1418
+ "mw": 273.33,
1419
+ "polararea": 95.86,
1420
+ "xlogp": 1.1,
1421
+ "heavycnt": 19,
1422
+ "hbonddonor": 3,
1423
+ "hbondacc": 4,
1424
+ "rotbonds": 10
1425
+ }
1426
+ },
1427
+ {
1428
+ "sample_idx": 57,
1429
+ "valid": 1,
1430
+ "smiles": "CCOCCOCCN(CCOC(CO)=C(C)C(=O)O)CCC(=O)O",
1431
+ "checks": {
1432
+ "connected": true,
1433
+ "attachment_sites": true,
1434
+ "ring_closure": true,
1435
+ "long_chain": true,
1436
+ "linker_atom_count": true,
1437
+ "protac_mw": true,
1438
+ "representational": true,
1439
+ "sa_score": true
1440
+ },
1441
+ "properties": {
1442
+ "mf": "C16H29NO8",
1443
+ "mw": 363.41,
1444
+ "polararea": 125.76,
1445
+ "xlogp": 0.18,
1446
+ "heavycnt": 25,
1447
+ "hbonddonor": 3,
1448
+ "hbondacc": 7,
1449
+ "rotbonds": 16
1450
+ }
1451
+ },
1452
+ {
1453
+ "sample_idx": 58,
1454
+ "valid": 0,
1455
+ "smiles": "O=C(O)N1CCCC(CO)CCN1C(=O)O",
1456
+ "checks": {
1457
+ "connected": true,
1458
+ "attachment_sites": false,
1459
+ "ring_closure": true,
1460
+ "long_chain": true,
1461
+ "linker_atom_count": true,
1462
+ "protac_mw": true,
1463
+ "representational": true,
1464
+ "sa_score": true
1465
+ },
1466
+ "properties": {
1467
+ "mf": "C9H16N2O5",
1468
+ "mw": 232.24,
1469
+ "polararea": 101.31,
1470
+ "xlogp": 0.65,
1471
+ "heavycnt": 16,
1472
+ "hbonddonor": 3,
1473
+ "hbondacc": 3,
1474
+ "rotbonds": 1
1475
+ }
1476
+ },
1477
+ {
1478
+ "sample_idx": 59,
1479
+ "valid": 0,
1480
+ "smiles": "CC(C)C(O)(CNC(=O)O)C(=O)O",
1481
+ "checks": {
1482
+ "connected": true,
1483
+ "attachment_sites": false,
1484
+ "ring_closure": true,
1485
+ "long_chain": true,
1486
+ "linker_atom_count": true,
1487
+ "protac_mw": true,
1488
+ "representational": true,
1489
+ "sa_score": true
1490
+ },
1491
+ "properties": {
1492
+ "mf": "C7H13NO5",
1493
+ "mw": 191.18,
1494
+ "polararea": 106.86,
1495
+ "xlogp": -0.27,
1496
+ "heavycnt": 13,
1497
+ "hbonddonor": 4,
1498
+ "hbondacc": 3,
1499
+ "rotbonds": 4
1500
+ }
1501
+ },
1502
+ {
1503
+ "sample_idx": 60,
1504
+ "valid": 0,
1505
+ "smiles": "CCN(C(=O)O)C(C)C(=O)O",
1506
+ "checks": {
1507
+ "connected": true,
1508
+ "attachment_sites": false,
1509
+ "ring_closure": true,
1510
+ "long_chain": true,
1511
+ "linker_atom_count": true,
1512
+ "protac_mw": true,
1513
+ "representational": true,
1514
+ "sa_score": true
1515
+ },
1516
+ "properties": {
1517
+ "mf": "C6H11NO4",
1518
+ "mw": 161.16,
1519
+ "polararea": 77.84,
1520
+ "xlogp": 0.46,
1521
+ "heavycnt": 11,
1522
+ "hbonddonor": 2,
1523
+ "hbondacc": 2,
1524
+ "rotbonds": 3
1525
+ }
1526
+ },
1527
+ {
1528
+ "sample_idx": 61,
1529
+ "valid": 1,
1530
+ "smiles": "CC(C)(O)C(CCCCC1(C(=O)O)CC1)C(=O)O",
1531
+ "checks": {
1532
+ "connected": true,
1533
+ "attachment_sites": true,
1534
+ "ring_closure": true,
1535
+ "long_chain": true,
1536
+ "linker_atom_count": true,
1537
+ "protac_mw": true,
1538
+ "representational": true,
1539
+ "sa_score": true
1540
+ },
1541
+ "properties": {
1542
+ "mf": "C13H22O5",
1543
+ "mw": 258.31,
1544
+ "polararea": 94.83,
1545
+ "xlogp": 1.88,
1546
+ "heavycnt": 18,
1547
+ "hbonddonor": 3,
1548
+ "hbondacc": 3,
1549
+ "rotbonds": 8
1550
+ }
1551
+ },
1552
+ {
1553
+ "sample_idx": 62,
1554
+ "valid": 1,
1555
+ "smiles": "CC(C)C(CC(=O)O)C(=O)O",
1556
+ "checks": {
1557
+ "connected": true,
1558
+ "attachment_sites": true,
1559
+ "ring_closure": true,
1560
+ "long_chain": true,
1561
+ "linker_atom_count": true,
1562
+ "protac_mw": true,
1563
+ "representational": true,
1564
+ "sa_score": true
1565
+ },
1566
+ "properties": {
1567
+ "mf": "C7H12O4",
1568
+ "mw": 160.17,
1569
+ "polararea": 74.6,
1570
+ "xlogp": 0.82,
1571
+ "heavycnt": 11,
1572
+ "hbonddonor": 2,
1573
+ "hbondacc": 2,
1574
+ "rotbonds": 4
1575
+ }
1576
+ },
1577
+ {
1578
+ "sample_idx": 63,
1579
+ "valid": 0,
1580
+ "smiles": "CCCO.O=CO.O=CO",
1581
+ "checks": {
1582
+ "connected": false,
1583
+ "attachment_sites": true,
1584
+ "ring_closure": true,
1585
+ "long_chain": true,
1586
+ "linker_atom_count": true,
1587
+ "protac_mw": true,
1588
+ "representational": true,
1589
+ "sa_score": true
1590
+ },
1591
+ "properties": {
1592
+ "mf": "C5H12O5",
1593
+ "mw": 152.15,
1594
+ "polararea": 94.83,
1595
+ "xlogp": -0.21,
1596
+ "heavycnt": 10,
1597
+ "hbonddonor": 3,
1598
+ "hbondacc": 3,
1599
+ "rotbonds": 1
1600
+ }
1601
+ },
1602
+ {
1603
+ "sample_idx": 64,
1604
+ "valid": 1,
1605
+ "smiles": "O=C(O)CCOCCNCC1COCC(CCC(=O)O)COC1",
1606
+ "checks": {
1607
+ "connected": true,
1608
+ "attachment_sites": true,
1609
+ "ring_closure": true,
1610
+ "long_chain": true,
1611
+ "linker_atom_count": true,
1612
+ "protac_mw": true,
1613
+ "representational": true,
1614
+ "sa_score": true
1615
+ },
1616
+ "properties": {
1617
+ "mf": "C15H27NO7",
1618
+ "mw": 333.38,
1619
+ "polararea": 114.32,
1620
+ "xlogp": 0.21,
1621
+ "heavycnt": 23,
1622
+ "hbonddonor": 3,
1623
+ "hbondacc": 6,
1624
+ "rotbonds": 11
1625
+ }
1626
+ },
1627
+ {
1628
+ "sample_idx": 65,
1629
+ "valid": 1,
1630
+ "smiles": "CCCCC(CCCC(=O)O)CC(=O)O",
1631
+ "checks": {
1632
+ "connected": true,
1633
+ "attachment_sites": true,
1634
+ "ring_closure": true,
1635
+ "long_chain": true,
1636
+ "linker_atom_count": true,
1637
+ "protac_mw": true,
1638
+ "representational": true,
1639
+ "sa_score": true
1640
+ },
1641
+ "properties": {
1642
+ "mf": "C11H20O4",
1643
+ "mw": 216.28,
1644
+ "polararea": 74.6,
1645
+ "xlogp": 2.52,
1646
+ "heavycnt": 15,
1647
+ "hbonddonor": 2,
1648
+ "hbondacc": 2,
1649
+ "rotbonds": 9
1650
+ }
1651
+ },
1652
+ {
1653
+ "sample_idx": 66,
1654
+ "valid": 1,
1655
+ "smiles": "CC(=O)NCCC(=O)C(CC(=O)O)C(=O)O",
1656
+ "checks": {
1657
+ "connected": true,
1658
+ "attachment_sites": true,
1659
+ "ring_closure": true,
1660
+ "long_chain": true,
1661
+ "linker_atom_count": true,
1662
+ "protac_mw": true,
1663
+ "representational": true,
1664
+ "sa_score": true
1665
+ },
1666
+ "properties": {
1667
+ "mf": "C9H13NO6",
1668
+ "mw": 231.2,
1669
+ "polararea": 120.77,
1670
+ "xlogp": -0.74,
1671
+ "heavycnt": 16,
1672
+ "hbonddonor": 3,
1673
+ "hbondacc": 4,
1674
+ "rotbonds": 7
1675
+ }
1676
+ },
1677
+ {
1678
+ "sample_idx": 67,
1679
+ "valid": 1,
1680
+ "smiles": "CCC(OC(=O)CC(N)C(=O)O)C(=O)O",
1681
+ "checks": {
1682
+ "connected": true,
1683
+ "attachment_sites": true,
1684
+ "ring_closure": true,
1685
+ "long_chain": true,
1686
+ "linker_atom_count": true,
1687
+ "protac_mw": true,
1688
+ "representational": true,
1689
+ "sa_score": true
1690
+ },
1691
+ "properties": {
1692
+ "mf": "C8H13NO6",
1693
+ "mw": 219.19,
1694
+ "polararea": 126.92,
1695
+ "xlogp": -0.81,
1696
+ "heavycnt": 15,
1697
+ "hbonddonor": 3,
1698
+ "hbondacc": 5,
1699
+ "rotbonds": 6
1700
+ }
1701
+ },
1702
+ {
1703
+ "sample_idx": 68,
1704
+ "valid": 0,
1705
+ "smiles": "",
1706
+ "checks": {
1707
+ "connected": false,
1708
+ "attachment_sites": false,
1709
+ "ring_closure": true,
1710
+ "long_chain": true,
1711
+ "linker_atom_count": false,
1712
+ "protac_mw": true,
1713
+ "representational": true,
1714
+ "sa_score": false
1715
+ },
1716
+ "properties": {
1717
+ "mf": "",
1718
+ "mw": 0.0,
1719
+ "polararea": 0.0,
1720
+ "xlogp": 0.0,
1721
+ "heavycnt": 0,
1722
+ "hbonddonor": 0,
1723
+ "hbondacc": 0,
1724
+ "rotbonds": 0
1725
+ }
1726
+ },
1727
+ {
1728
+ "sample_idx": 69,
1729
+ "valid": 1,
1730
+ "smiles": "CNC(C(=O)O)C(C)C(C)C(=O)O",
1731
+ "checks": {
1732
+ "connected": true,
1733
+ "attachment_sites": true,
1734
+ "ring_closure": true,
1735
+ "long_chain": true,
1736
+ "linker_atom_count": true,
1737
+ "protac_mw": true,
1738
+ "representational": true,
1739
+ "sa_score": true
1740
+ },
1741
+ "properties": {
1742
+ "mf": "C8H15NO4",
1743
+ "mw": 189.21,
1744
+ "polararea": 86.63,
1745
+ "xlogp": 0.02,
1746
+ "heavycnt": 13,
1747
+ "hbonddonor": 3,
1748
+ "hbondacc": 3,
1749
+ "rotbonds": 5
1750
+ }
1751
+ },
1752
+ {
1753
+ "sample_idx": 70,
1754
+ "valid": 1,
1755
+ "smiles": "CC(O)C(C)C(C(=O)O)N1CCCCC(CC(=O)O)CC1",
1756
+ "checks": {
1757
+ "connected": true,
1758
+ "attachment_sites": true,
1759
+ "ring_closure": true,
1760
+ "long_chain": true,
1761
+ "linker_atom_count": true,
1762
+ "protac_mw": true,
1763
+ "representational": true,
1764
+ "sa_score": true
1765
+ },
1766
+ "properties": {
1767
+ "mf": "C15H27NO5",
1768
+ "mw": 301.38,
1769
+ "polararea": 98.07,
1770
+ "xlogp": 1.42,
1771
+ "heavycnt": 21,
1772
+ "hbonddonor": 3,
1773
+ "hbondacc": 4,
1774
+ "rotbonds": 6
1775
+ }
1776
+ },
1777
+ {
1778
+ "sample_idx": 71,
1779
+ "valid": 1,
1780
+ "smiles": "CCCC(O)(CCOCC(=O)O)C(C)(O)Nc1cccc(C(=O)O)c1",
1781
+ "checks": {
1782
+ "connected": true,
1783
+ "attachment_sites": true,
1784
+ "ring_closure": true,
1785
+ "long_chain": true,
1786
+ "linker_atom_count": true,
1787
+ "protac_mw": true,
1788
+ "representational": true,
1789
+ "sa_score": true
1790
+ },
1791
+ "properties": {
1792
+ "mf": "C17H25NO7",
1793
+ "mw": 355.39,
1794
+ "polararea": 136.32,
1795
+ "xlogp": 1.53,
1796
+ "heavycnt": 25,
1797
+ "hbonddonor": 5,
1798
+ "hbondacc": 6,
1799
+ "rotbonds": 11
1800
+ }
1801
+ },
1802
+ {
1803
+ "sample_idx": 72,
1804
+ "valid": 1,
1805
+ "smiles": "CCCCCC(C(=O)O)C(=O)O",
1806
+ "checks": {
1807
+ "connected": true,
1808
+ "attachment_sites": true,
1809
+ "ring_closure": true,
1810
+ "long_chain": true,
1811
+ "linker_atom_count": true,
1812
+ "protac_mw": true,
1813
+ "representational": true,
1814
+ "sa_score": true
1815
+ },
1816
+ "properties": {
1817
+ "mf": "C8H14O4",
1818
+ "mw": 174.2,
1819
+ "polararea": 74.6,
1820
+ "xlogp": 1.35,
1821
+ "heavycnt": 12,
1822
+ "hbonddonor": 2,
1823
+ "hbondacc": 2,
1824
+ "rotbonds": 6
1825
+ }
1826
+ },
1827
+ {
1828
+ "sample_idx": 73,
1829
+ "valid": 1,
1830
+ "smiles": "CCOCCOCCOCCCN(CCCC(=O)O)CCCC(=O)O",
1831
+ "checks": {
1832
+ "connected": true,
1833
+ "attachment_sites": true,
1834
+ "ring_closure": true,
1835
+ "long_chain": true,
1836
+ "linker_atom_count": true,
1837
+ "protac_mw": true,
1838
+ "representational": true,
1839
+ "sa_score": true
1840
+ },
1841
+ "properties": {
1842
+ "mf": "C17H33NO7",
1843
+ "mw": 363.45,
1844
+ "polararea": 105.53,
1845
+ "xlogp": 1.48,
1846
+ "heavycnt": 25,
1847
+ "hbonddonor": 2,
1848
+ "hbondacc": 6,
1849
+ "rotbonds": 19
1850
+ }
1851
+ },
1852
+ {
1853
+ "sample_idx": 74,
1854
+ "valid": 1,
1855
+ "smiles": "CC1(C)CCN(CCOCC(=O)O)CCN(CCC(=O)O)C1",
1856
+ "checks": {
1857
+ "connected": true,
1858
+ "attachment_sites": true,
1859
+ "ring_closure": true,
1860
+ "long_chain": true,
1861
+ "linker_atom_count": true,
1862
+ "protac_mw": true,
1863
+ "representational": true,
1864
+ "sa_score": true
1865
+ },
1866
+ "properties": {
1867
+ "mf": "C15H28N2O5",
1868
+ "mw": 316.4,
1869
+ "polararea": 90.31,
1870
+ "xlogp": 0.6,
1871
+ "heavycnt": 22,
1872
+ "hbonddonor": 2,
1873
+ "hbondacc": 5,
1874
+ "rotbonds": 8
1875
+ }
1876
+ },
1877
+ {
1878
+ "sample_idx": 75,
1879
+ "valid": 1,
1880
+ "smiles": "CCC(=O)NCC(OC)(C(=O)O)C(=O)O",
1881
+ "checks": {
1882
+ "connected": true,
1883
+ "attachment_sites": true,
1884
+ "ring_closure": true,
1885
+ "long_chain": true,
1886
+ "linker_atom_count": true,
1887
+ "protac_mw": true,
1888
+ "representational": true,
1889
+ "sa_score": true
1890
+ },
1891
+ "properties": {
1892
+ "mf": "C8H13NO6",
1893
+ "mw": 219.19,
1894
+ "polararea": 112.93,
1895
+ "xlogp": -0.93,
1896
+ "heavycnt": 15,
1897
+ "hbonddonor": 3,
1898
+ "hbondacc": 4,
1899
+ "rotbonds": 6
1900
+ }
1901
+ },
1902
+ {
1903
+ "sample_idx": 76,
1904
+ "valid": 1,
1905
+ "smiles": "CCC(C)(C(=O)O)C(=O)O",
1906
+ "checks": {
1907
+ "connected": true,
1908
+ "attachment_sites": true,
1909
+ "ring_closure": true,
1910
+ "long_chain": true,
1911
+ "linker_atom_count": true,
1912
+ "protac_mw": true,
1913
+ "representational": true,
1914
+ "sa_score": true
1915
+ },
1916
+ "properties": {
1917
+ "mf": "C6H10O4",
1918
+ "mw": 146.14,
1919
+ "polararea": 74.6,
1920
+ "xlogp": 0.57,
1921
+ "heavycnt": 10,
1922
+ "hbonddonor": 2,
1923
+ "hbondacc": 2,
1924
+ "rotbonds": 3
1925
+ }
1926
+ },
1927
+ {
1928
+ "sample_idx": 77,
1929
+ "valid": 1,
1930
+ "smiles": "CC(CO)(C(=O)O)C(=O)O",
1931
+ "checks": {
1932
+ "connected": true,
1933
+ "attachment_sites": true,
1934
+ "ring_closure": true,
1935
+ "long_chain": true,
1936
+ "linker_atom_count": true,
1937
+ "protac_mw": true,
1938
+ "representational": true,
1939
+ "sa_score": true
1940
+ },
1941
+ "properties": {
1942
+ "mf": "C5H8O5",
1943
+ "mw": 148.11,
1944
+ "polararea": 94.83,
1945
+ "xlogp": -0.85,
1946
+ "heavycnt": 10,
1947
+ "hbonddonor": 3,
1948
+ "hbondacc": 3,
1949
+ "rotbonds": 3
1950
+ }
1951
+ },
1952
+ {
1953
+ "sample_idx": 78,
1954
+ "valid": 1,
1955
+ "smiles": "CCNC(CN(CCO)C(O)(CC(=O)O)C(=O)O)C(C)C",
1956
+ "checks": {
1957
+ "connected": true,
1958
+ "attachment_sites": true,
1959
+ "ring_closure": true,
1960
+ "long_chain": true,
1961
+ "linker_atom_count": true,
1962
+ "protac_mw": true,
1963
+ "representational": true,
1964
+ "sa_score": true
1965
+ },
1966
+ "properties": {
1967
+ "mf": "C13H26N2O6",
1968
+ "mw": 306.36,
1969
+ "polararea": 130.33,
1970
+ "xlogp": -0.84,
1971
+ "heavycnt": 21,
1972
+ "hbonddonor": 5,
1973
+ "hbondacc": 6,
1974
+ "rotbonds": 11
1975
+ }
1976
+ },
1977
+ {
1978
+ "sample_idx": 79,
1979
+ "valid": 1,
1980
+ "smiles": "CC(C)C(C(=O)O)C(=O)O",
1981
+ "checks": {
1982
+ "connected": true,
1983
+ "attachment_sites": true,
1984
+ "ring_closure": true,
1985
+ "long_chain": true,
1986
+ "linker_atom_count": true,
1987
+ "protac_mw": true,
1988
+ "representational": true,
1989
+ "sa_score": true
1990
+ },
1991
+ "properties": {
1992
+ "mf": "C6H10O4",
1993
+ "mw": 146.14,
1994
+ "polararea": 74.6,
1995
+ "xlogp": 0.43,
1996
+ "heavycnt": 10,
1997
+ "hbonddonor": 2,
1998
+ "hbondacc": 2,
1999
+ "rotbonds": 3
2000
+ }
2001
+ },
2002
+ {
2003
+ "sample_idx": 80,
2004
+ "valid": 0,
2005
+ "smiles": "NCCCCCOC(=O)O.O=CC(=O)O",
2006
+ "checks": {
2007
+ "connected": false,
2008
+ "attachment_sites": true,
2009
+ "ring_closure": true,
2010
+ "long_chain": true,
2011
+ "linker_atom_count": true,
2012
+ "protac_mw": true,
2013
+ "representational": true,
2014
+ "sa_score": true
2015
+ },
2016
+ "properties": {
2017
+ "mf": "C8H15NO6",
2018
+ "mw": 221.21,
2019
+ "polararea": 126.92,
2020
+ "xlogp": 0.08,
2021
+ "heavycnt": 15,
2022
+ "hbonddonor": 3,
2023
+ "hbondacc": 5,
2024
+ "rotbonds": 6
2025
+ }
2026
+ },
2027
+ {
2028
+ "sample_idx": 81,
2029
+ "valid": 1,
2030
+ "smiles": "CCCNCCC(C)(CC(=O)O)CC(=O)O",
2031
+ "checks": {
2032
+ "connected": true,
2033
+ "attachment_sites": true,
2034
+ "ring_closure": true,
2035
+ "long_chain": true,
2036
+ "linker_atom_count": true,
2037
+ "protac_mw": true,
2038
+ "representational": true,
2039
+ "sa_score": true
2040
+ },
2041
+ "properties": {
2042
+ "mf": "C11H21NO4",
2043
+ "mw": 231.29,
2044
+ "polararea": 86.63,
2045
+ "xlogp": 1.33,
2046
+ "heavycnt": 16,
2047
+ "hbonddonor": 3,
2048
+ "hbondacc": 3,
2049
+ "rotbonds": 9
2050
+ }
2051
+ },
2052
+ {
2053
+ "sample_idx": 82,
2054
+ "valid": 0,
2055
+ "smiles": "C.NCCCCCOC(=O)O.O=CO",
2056
+ "checks": {
2057
+ "connected": false,
2058
+ "attachment_sites": true,
2059
+ "ring_closure": true,
2060
+ "long_chain": true,
2061
+ "linker_atom_count": true,
2062
+ "protac_mw": true,
2063
+ "representational": true,
2064
+ "sa_score": true
2065
+ },
2066
+ "properties": {
2067
+ "mf": "C8H19NO5",
2068
+ "mw": 209.24,
2069
+ "polararea": 109.85,
2070
+ "xlogp": 1.15,
2071
+ "heavycnt": 14,
2072
+ "hbonddonor": 3,
2073
+ "hbondacc": 4,
2074
+ "rotbonds": 5
2075
+ }
2076
+ },
2077
+ {
2078
+ "sample_idx": 83,
2079
+ "valid": 1,
2080
+ "smiles": "CN(CCCCCCCO)C(C(=O)O)C(=O)O",
2081
+ "checks": {
2082
+ "connected": true,
2083
+ "attachment_sites": true,
2084
+ "ring_closure": true,
2085
+ "long_chain": true,
2086
+ "linker_atom_count": true,
2087
+ "protac_mw": true,
2088
+ "representational": true,
2089
+ "sa_score": true
2090
+ },
2091
+ "properties": {
2092
+ "mf": "C11H21NO5",
2093
+ "mw": 247.29,
2094
+ "polararea": 98.07,
2095
+ "xlogp": 0.4,
2096
+ "heavycnt": 17,
2097
+ "hbonddonor": 3,
2098
+ "hbondacc": 4,
2099
+ "rotbonds": 10
2100
+ }
2101
+ },
2102
+ {
2103
+ "sample_idx": 84,
2104
+ "valid": 1,
2105
+ "smiles": "CC(C)CCCC(C(=O)O)C(=O)O",
2106
+ "checks": {
2107
+ "connected": true,
2108
+ "attachment_sites": true,
2109
+ "ring_closure": true,
2110
+ "long_chain": true,
2111
+ "linker_atom_count": true,
2112
+ "protac_mw": true,
2113
+ "representational": true,
2114
+ "sa_score": true
2115
+ },
2116
+ "properties": {
2117
+ "mf": "C9H16O4",
2118
+ "mw": 188.22,
2119
+ "polararea": 74.6,
2120
+ "xlogp": 1.6,
2121
+ "heavycnt": 13,
2122
+ "hbonddonor": 2,
2123
+ "hbondacc": 2,
2124
+ "rotbonds": 6
2125
+ }
2126
+ },
2127
+ {
2128
+ "sample_idx": 85,
2129
+ "valid": 1,
2130
+ "smiles": "CC(CC(=O)O)CC(=O)O",
2131
+ "checks": {
2132
+ "connected": true,
2133
+ "attachment_sites": true,
2134
+ "ring_closure": true,
2135
+ "long_chain": true,
2136
+ "linker_atom_count": true,
2137
+ "protac_mw": true,
2138
+ "representational": true,
2139
+ "sa_score": true
2140
+ },
2141
+ "properties": {
2142
+ "mf": "C6H10O4",
2143
+ "mw": 146.14,
2144
+ "polararea": 74.6,
2145
+ "xlogp": 0.57,
2146
+ "heavycnt": 10,
2147
+ "hbonddonor": 2,
2148
+ "hbondacc": 2,
2149
+ "rotbonds": 4
2150
+ }
2151
+ },
2152
+ {
2153
+ "sample_idx": 86,
2154
+ "valid": 1,
2155
+ "smiles": "CC(N)(CC(=O)O)C(=O)O",
2156
+ "checks": {
2157
+ "connected": true,
2158
+ "attachment_sites": true,
2159
+ "ring_closure": true,
2160
+ "long_chain": true,
2161
+ "linker_atom_count": true,
2162
+ "protac_mw": true,
2163
+ "representational": true,
2164
+ "sa_score": true
2165
+ },
2166
+ "properties": {
2167
+ "mf": "C5H9NO4",
2168
+ "mw": 147.13,
2169
+ "polararea": 100.62,
2170
+ "xlogp": -0.74,
2171
+ "heavycnt": 10,
2172
+ "hbonddonor": 3,
2173
+ "hbondacc": 3,
2174
+ "rotbonds": 3
2175
+ }
2176
+ },
2177
+ {
2178
+ "sample_idx": 87,
2179
+ "valid": 1,
2180
+ "smiles": "C=CCC1CC(NC2(C(=O)O)CCCC2)(C(=O)O)C1",
2181
+ "checks": {
2182
+ "connected": true,
2183
+ "attachment_sites": true,
2184
+ "ring_closure": true,
2185
+ "long_chain": true,
2186
+ "linker_atom_count": true,
2187
+ "protac_mw": true,
2188
+ "representational": true,
2189
+ "sa_score": true
2190
+ },
2191
+ "properties": {
2192
+ "mf": "C14H21NO4",
2193
+ "mw": 267.32,
2194
+ "polararea": 86.63,
2195
+ "xlogp": 1.78,
2196
+ "heavycnt": 19,
2197
+ "hbonddonor": 3,
2198
+ "hbondacc": 3,
2199
+ "rotbonds": 6
2200
+ }
2201
+ },
2202
+ {
2203
+ "sample_idx": 88,
2204
+ "valid": 1,
2205
+ "smiles": "NC(CCOCCC(=O)O)C(=O)O",
2206
+ "checks": {
2207
+ "connected": true,
2208
+ "attachment_sites": true,
2209
+ "ring_closure": true,
2210
+ "long_chain": true,
2211
+ "linker_atom_count": true,
2212
+ "protac_mw": true,
2213
+ "representational": true,
2214
+ "sa_score": true
2215
+ },
2216
+ "properties": {
2217
+ "mf": "C7H13NO5",
2218
+ "mw": 191.18,
2219
+ "polararea": 109.85,
2220
+ "xlogp": -0.72,
2221
+ "heavycnt": 13,
2222
+ "hbonddonor": 3,
2223
+ "hbondacc": 4,
2224
+ "rotbonds": 7
2225
+ }
2226
+ },
2227
+ {
2228
+ "sample_idx": 89,
2229
+ "valid": 1,
2230
+ "smiles": "CCCCC(C(=O)O)C(=O)O",
2231
+ "checks": {
2232
+ "connected": true,
2233
+ "attachment_sites": true,
2234
+ "ring_closure": true,
2235
+ "long_chain": true,
2236
+ "linker_atom_count": true,
2237
+ "protac_mw": true,
2238
+ "representational": true,
2239
+ "sa_score": true
2240
+ },
2241
+ "properties": {
2242
+ "mf": "C7H12O4",
2243
+ "mw": 160.17,
2244
+ "polararea": 74.6,
2245
+ "xlogp": 0.96,
2246
+ "heavycnt": 11,
2247
+ "hbonddonor": 2,
2248
+ "hbondacc": 2,
2249
+ "rotbonds": 5
2250
+ }
2251
+ },
2252
+ {
2253
+ "sample_idx": 90,
2254
+ "valid": 1,
2255
+ "smiles": "CCOc1cc(C)cc(C(=O)O)c1C(=N)C(=O)O",
2256
+ "checks": {
2257
+ "connected": true,
2258
+ "attachment_sites": true,
2259
+ "ring_closure": true,
2260
+ "long_chain": true,
2261
+ "linker_atom_count": true,
2262
+ "protac_mw": true,
2263
+ "representational": true,
2264
+ "sa_score": true
2265
+ },
2266
+ "properties": {
2267
+ "mf": "C12H13NO5",
2268
+ "mw": 251.24,
2269
+ "polararea": 107.68,
2270
+ "xlogp": 1.54,
2271
+ "heavycnt": 18,
2272
+ "hbonddonor": 3,
2273
+ "hbondacc": 4,
2274
+ "rotbonds": 5
2275
+ }
2276
+ },
2277
+ {
2278
+ "sample_idx": 91,
2279
+ "valid": 1,
2280
+ "smiles": "C=CCCC(NC(=O)C(=O)O)C(=O)O",
2281
+ "checks": {
2282
+ "connected": true,
2283
+ "attachment_sites": true,
2284
+ "ring_closure": true,
2285
+ "long_chain": true,
2286
+ "linker_atom_count": true,
2287
+ "protac_mw": true,
2288
+ "representational": true,
2289
+ "sa_score": true
2290
+ },
2291
+ "properties": {
2292
+ "mf": "C8H11NO5",
2293
+ "mw": 201.18,
2294
+ "polararea": 103.7,
2295
+ "xlogp": -0.39,
2296
+ "heavycnt": 14,
2297
+ "hbonddonor": 3,
2298
+ "hbondacc": 3,
2299
+ "rotbonds": 5
2300
+ }
2301
+ },
2302
+ {
2303
+ "sample_idx": 92,
2304
+ "valid": 1,
2305
+ "smiles": "COC(CCC(=O)O)C(OCCC(C)O)OC(=O)O",
2306
+ "checks": {
2307
+ "connected": true,
2308
+ "attachment_sites": true,
2309
+ "ring_closure": true,
2310
+ "long_chain": true,
2311
+ "linker_atom_count": true,
2312
+ "protac_mw": true,
2313
+ "representational": true,
2314
+ "sa_score": true
2315
+ },
2316
+ "properties": {
2317
+ "mf": "C11H20O8",
2318
+ "mw": 280.27,
2319
+ "polararea": 122.52,
2320
+ "xlogp": 0.67,
2321
+ "heavycnt": 19,
2322
+ "hbonddonor": 3,
2323
+ "hbondacc": 6,
2324
+ "rotbonds": 10
2325
+ }
2326
+ },
2327
+ {
2328
+ "sample_idx": 93,
2329
+ "valid": 0,
2330
+ "smiles": "",
2331
+ "checks": {
2332
+ "connected": false,
2333
+ "attachment_sites": false,
2334
+ "ring_closure": true,
2335
+ "long_chain": true,
2336
+ "linker_atom_count": false,
2337
+ "protac_mw": true,
2338
+ "representational": true,
2339
+ "sa_score": false
2340
+ },
2341
+ "properties": {
2342
+ "mf": "",
2343
+ "mw": 0.0,
2344
+ "polararea": 0.0,
2345
+ "xlogp": 0.0,
2346
+ "heavycnt": 0,
2347
+ "hbonddonor": 0,
2348
+ "hbondacc": 0,
2349
+ "rotbonds": 0
2350
+ }
2351
+ },
2352
+ {
2353
+ "sample_idx": 94,
2354
+ "valid": 1,
2355
+ "smiles": "CCCCCC(=O)NCC(O)(C(=O)O)C(=O)O",
2356
+ "checks": {
2357
+ "connected": true,
2358
+ "attachment_sites": true,
2359
+ "ring_closure": true,
2360
+ "long_chain": true,
2361
+ "linker_atom_count": true,
2362
+ "protac_mw": true,
2363
+ "representational": true,
2364
+ "sa_score": true
2365
+ },
2366
+ "properties": {
2367
+ "mf": "C10H17NO6",
2368
+ "mw": 247.25,
2369
+ "polararea": 123.93,
2370
+ "xlogp": -0.42,
2371
+ "heavycnt": 17,
2372
+ "hbonddonor": 4,
2373
+ "hbondacc": 4,
2374
+ "rotbonds": 8
2375
+ }
2376
+ },
2377
+ {
2378
+ "sample_idx": 95,
2379
+ "valid": 0,
2380
+ "smiles": "",
2381
+ "checks": {
2382
+ "connected": false,
2383
+ "attachment_sites": false,
2384
+ "ring_closure": true,
2385
+ "long_chain": true,
2386
+ "linker_atom_count": false,
2387
+ "protac_mw": true,
2388
+ "representational": true,
2389
+ "sa_score": false
2390
+ },
2391
+ "properties": {
2392
+ "mf": "",
2393
+ "mw": 0.0,
2394
+ "polararea": 0.0,
2395
+ "xlogp": 0.0,
2396
+ "heavycnt": 0,
2397
+ "hbonddonor": 0,
2398
+ "hbondacc": 0,
2399
+ "rotbonds": 0
2400
+ }
2401
+ },
2402
+ {
2403
+ "sample_idx": 96,
2404
+ "valid": 1,
2405
+ "smiles": "O=C(O)CCC(CO)C(=O)O",
2406
+ "checks": {
2407
+ "connected": true,
2408
+ "attachment_sites": true,
2409
+ "ring_closure": true,
2410
+ "long_chain": true,
2411
+ "linker_atom_count": true,
2412
+ "protac_mw": true,
2413
+ "representational": true,
2414
+ "sa_score": true
2415
+ },
2416
+ "properties": {
2417
+ "mf": "C6H10O5",
2418
+ "mw": 162.14,
2419
+ "polararea": 94.83,
2420
+ "xlogp": -0.46,
2421
+ "heavycnt": 11,
2422
+ "hbonddonor": 3,
2423
+ "hbondacc": 3,
2424
+ "rotbonds": 5
2425
+ }
2426
+ },
2427
+ {
2428
+ "sample_idx": 97,
2429
+ "valid": 1,
2430
+ "smiles": "CCC(CC(=O)O)C(=O)O",
2431
+ "checks": {
2432
+ "connected": true,
2433
+ "attachment_sites": true,
2434
+ "ring_closure": true,
2435
+ "long_chain": true,
2436
+ "linker_atom_count": true,
2437
+ "protac_mw": true,
2438
+ "representational": true,
2439
+ "sa_score": true
2440
+ },
2441
+ "properties": {
2442
+ "mf": "C6H10O4",
2443
+ "mw": 146.14,
2444
+ "polararea": 74.6,
2445
+ "xlogp": 0.57,
2446
+ "heavycnt": 10,
2447
+ "hbonddonor": 2,
2448
+ "hbondacc": 2,
2449
+ "rotbonds": 4
2450
+ }
2451
+ },
2452
+ {
2453
+ "sample_idx": 98,
2454
+ "valid": 1,
2455
+ "smiles": "CC(C)(C(=O)O)C1(C(=O)O)CCCCC1",
2456
+ "checks": {
2457
+ "connected": true,
2458
+ "attachment_sites": true,
2459
+ "ring_closure": true,
2460
+ "long_chain": true,
2461
+ "linker_atom_count": true,
2462
+ "protac_mw": true,
2463
+ "representational": true,
2464
+ "sa_score": true
2465
+ },
2466
+ "properties": {
2467
+ "mf": "C11H18O4",
2468
+ "mw": 214.26,
2469
+ "polararea": 74.6,
2470
+ "xlogp": 2.13,
2471
+ "heavycnt": 15,
2472
+ "hbonddonor": 2,
2473
+ "hbondacc": 2,
2474
+ "rotbonds": 3
2475
+ }
2476
+ },
2477
+ {
2478
+ "sample_idx": 99,
2479
+ "valid": 1,
2480
+ "smiles": "COC(=CC(=O)O)CC(=O)NCCCCCCCC(=O)O",
2481
+ "checks": {
2482
+ "connected": true,
2483
+ "attachment_sites": true,
2484
+ "ring_closure": true,
2485
+ "long_chain": true,
2486
+ "linker_atom_count": true,
2487
+ "protac_mw": true,
2488
+ "representational": true,
2489
+ "sa_score": true
2490
+ },
2491
+ "properties": {
2492
+ "mf": "C14H23NO6",
2493
+ "mw": 301.34,
2494
+ "polararea": 112.93,
2495
+ "xlogp": 1.53,
2496
+ "heavycnt": 21,
2497
+ "hbonddonor": 3,
2498
+ "hbondacc": 4,
2499
+ "rotbonds": 12
2500
+ }
2501
+ }
2502
+ ]
CupOFMoCA-PROTAC/results/ablation_all/defog_local_edit_20260726_224039_summary.csv ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ sample_idx,valid,smiles,mw,logp,tpsa,hbd,rotbonds
2
+ 0,1,CCNCOCCOCCCCCCCC(C(=O)O)C(=O)O,319.4,1.71,105.09,3,16
3
+ 1,1,CC1(CC(O)=C(CCC(=O)O)C(=O)O)CC1,228.24,1.94,94.83,3,6
4
+ 2,0,CC(=O)NC(=O)O.O=CO,149.1,-0.5,103.7,3,0
5
+ 3,0,,0.0,0.0,0.0,0,0
6
+ 4,1,O=C(O)C=C(CCCCCCCC(=O)O)OCC(=O)O,288.3,1.87,121.13,3,12
7
+ 5,1,O=C(O)CCN1CCCCCCN(CCC(=O)C(=O)O)CC1,314.38,0.68,98.15,2,7
8
+ 6,1,O=C(O)C(=O)CCCC(=O)C(=O)O,188.13,-0.54,108.74,2,6
9
+ 7,1,CCCC(C(=O)O)C(=O)O,146.14,0.57,74.6,2,4
10
+ 8,0,CCN(C)C(=O)O.O=CO,149.15,0.32,77.84,2,1
11
+ 9,1,CCCCCN(C)C(C(=O)O)C(=O)O,203.24,0.65,77.84,2,7
12
+ 10,1,O=C(O)CN1CC(C(=O)O)C1,159.14,-0.91,77.84,2,3
13
+ 11,0,NC1CN(CCN(C(=O)O)C(=O)O)C1,203.2,-0.71,107.1,3,3
14
+ 12,1,COC1COCCOC1C(=CCCC(=O)O)CCCCCC(=O)O,344.4,2.24,102.29,2,11
15
+ 13,1,CNC(=O)CCCCCCN(C)C(C(=O)O)C(=O)O,274.32,0.15,106.94,3,10
16
+ 14,1,O=C(O)C(CO)NC1CCCC1C(=O)O,217.22,-0.73,106.86,4,5
17
+ 15,1,CC(C(=O)O)C(=O)C(=O)O,146.1,-0.64,91.67,2,3
18
+ 16,1,NC(=O)C(C(=O)O)C(=O)O,147.09,-1.74,117.69,3,3
19
+ 17,1,CCC(C)(C(=O)O)C(=O)O,146.14,0.57,74.6,2,3
20
+ 18,1,O=C(O)CCCCCCN1CCOCCCCN(CCC(=O)O)CC1,358.48,1.91,90.31,2,10
21
+ 19,1,CCCCC(C=O)=C(OCC(=O)O)C(=O)O,230.22,0.82,100.9,2,8
22
+ 20,0,CCNCC(=O)O.O=CO,149.15,-0.62,86.63,3,3
23
+ 21,1,O=C(O)CCCCCCC(=O)O,174.2,1.5,74.6,2,7
24
+ 22,1,CC(C)OCCOC(C(=O)O)C(=O)O,206.19,-0.03,93.06,2,7
25
+ 23,1,CCOCCOC(CC(C(=O)O)C(=O)O)=C(N)CO,277.27,-0.62,139.31,4,10
26
+ 24,1,CCCCCCCOCCCNC(CO)=C(CCCC(=O)O)C(=O)O,359.46,2.54,116.09,4,17
27
+ 25,0,CC[N+]([O-])(CN(C)C(=O)O)C(=O)O,192.17,0.57,100.9,2,3
28
+ 26,1,C=C(N=CC(=O)C(=O)O)C(CCCC)CNC(=O)CC(=O)O,312.32,0.62,133.13,3,11
29
+ 27,1,O=C(O)CCCCCOCCC(=O)CC(=O)O,246.26,1.08,100.9,2,11
30
+ 28,1,CCOC(C)C(=C(CCOCCO)C(=O)O)C(C)C(=O)O,304.34,0.91,113.29,3,11
31
+ 29,1,CCCC(CC(=O)O)N(CC)C(=O)CN(CC(=O)O)CC1CCCC1,356.46,2.06,98.15,2,12
32
+ 30,1,CCN(CCC(=O)O)C(C)C(=O)O,189.21,0.26,77.84,2,6
33
+ 31,0,O=C(O)NCCO.O=CO,151.12,-1.05,106.86,4,2
34
+ 32,1,CCOCCOCCOCCC=C(OCCC(=O)O)C(=O)O,320.34,0.91,111.52,2,15
35
+ 33,1,CCCCC(CCOC(=O)O)C(=O)O,204.22,1.96,83.83,2,7
36
+ 34,1,Cc1cccc(C)c1C1(OCCOCC(=O)O)CC(OCC(=O)O)C1,352.38,1.88,102.29,2,10
37
+ 35,1,CCCCCC(C(=O)O)C(=O)O,174.2,1.35,74.6,2,6
38
+ 36,1,COCCOC(COCNOC(=O)O)C(=O)O,253.21,-0.72,123.55,3,10
39
+ 37,1,CC(C)(CN)CCCCC(C(=O)O)C(=O)O,231.29,1.32,100.62,3,8
40
+ 38,1,COC(C(=O)O)C(NC=O)C(=O)O,191.14,-1.71,112.93,3,6
41
+ 39,1,CC(C=O)C(CC(=O)O)C(=O)O,174.15,-0.0,91.67,2,5
42
+ 40,1,O=C(O)CCC(CO)NC(=O)C(=O)O,205.17,-1.59,123.93,4,5
43
+ 41,1,CCN(CCC(=O)O)CN(C)CCCCCC(=O)O,274.36,1.32,81.08,2,12
44
+ 42,0,CC(=O)C(=O)O.CC(=O)O,148.11,-0.25,91.67,2,1
45
+ 43,0,CCCCC(=O)O.O=CO,148.16,0.96,74.6,2,3
46
+ 44,1,CCCCC(C(=O)O)C(C(=O)O)c1cccc(CNC)c1C,307.39,2.77,86.63,3,9
47
+ 45,1,CC(C)(CC(=O)O)C(=O)O,146.14,0.57,74.6,2,3
48
+ 46,1,CN(CC(=O)O)CC(=O)NCCC(=O)O,218.21,-1.41,106.94,3,7
49
+ 47,1,CCCCCCC(CC(=O)O)C(=O)O,202.25,2.13,74.6,2,8
50
+ 48,1,CC(C)CC(CC(=O)O)NC(=O)CCCC(=O)O,259.3,1.25,103.7,3,9
51
+ 49,1,NC(CC(=O)O)CC(=O)O,147.13,-0.74,100.62,3,4
52
+ 50,1,CCCCOC(C)C(O)C(CCC(=O)O)C(=O)O,262.3,1.12,104.06,3,10
53
+ 51,1,CC(C)C(C(=O)O)C(=O)O,146.14,0.43,74.6,2,3
54
+ 52,1,COC(C(=O)O)C(CC(=O)O)C(C)C,204.22,0.83,83.83,2,6
55
+ 53,1,CC(N)(CC(=O)O)CC(=O)O,161.16,-0.35,100.62,3,4
56
+ 54,1,CCC1(C=C(CC(=O)O)C(=O)O)CCC1,212.24,2.05,74.6,2,5
57
+ 55,1,CC(C)C(CC(=O)O)C(=O)O,160.17,0.82,74.6,2,4
58
+ 56,1,COCCCCCCNC1CC(C(=O)O)(C(=O)O)C1,273.33,1.1,95.86,3,10
59
+ 57,1,CCOCCOCCN(CCOC(CO)=C(C)C(=O)O)CCC(=O)O,363.41,0.18,125.76,3,16
60
+ 58,0,O=C(O)N1CCCC(CO)CCN1C(=O)O,232.24,0.65,101.31,3,1
61
+ 59,0,CC(C)C(O)(CNC(=O)O)C(=O)O,191.18,-0.27,106.86,4,4
62
+ 60,0,CCN(C(=O)O)C(C)C(=O)O,161.16,0.46,77.84,2,3
63
+ 61,1,CC(C)(O)C(CCCCC1(C(=O)O)CC1)C(=O)O,258.31,1.88,94.83,3,8
64
+ 62,1,CC(C)C(CC(=O)O)C(=O)O,160.17,0.82,74.6,2,4
65
+ 63,0,CCCO.O=CO.O=CO,152.15,-0.21,94.83,3,1
66
+ 64,1,O=C(O)CCOCCNCC1COCC(CCC(=O)O)COC1,333.38,0.21,114.32,3,11
67
+ 65,1,CCCCC(CCCC(=O)O)CC(=O)O,216.28,2.52,74.6,2,9
68
+ 66,1,CC(=O)NCCC(=O)C(CC(=O)O)C(=O)O,231.2,-0.74,120.77,3,7
69
+ 67,1,CCC(OC(=O)CC(N)C(=O)O)C(=O)O,219.19,-0.81,126.92,3,6
70
+ 68,0,,0.0,0.0,0.0,0,0
71
+ 69,1,CNC(C(=O)O)C(C)C(C)C(=O)O,189.21,0.02,86.63,3,5
72
+ 70,1,CC(O)C(C)C(C(=O)O)N1CCCCC(CC(=O)O)CC1,301.38,1.42,98.07,3,6
73
+ 71,1,CCCC(O)(CCOCC(=O)O)C(C)(O)Nc1cccc(C(=O)O)c1,355.39,1.53,136.32,5,11
74
+ 72,1,CCCCCC(C(=O)O)C(=O)O,174.2,1.35,74.6,2,6
75
+ 73,1,CCOCCOCCOCCCN(CCCC(=O)O)CCCC(=O)O,363.45,1.48,105.53,2,19
76
+ 74,1,CC1(C)CCN(CCOCC(=O)O)CCN(CCC(=O)O)C1,316.4,0.6,90.31,2,8
77
+ 75,1,CCC(=O)NCC(OC)(C(=O)O)C(=O)O,219.19,-0.93,112.93,3,6
78
+ 76,1,CCC(C)(C(=O)O)C(=O)O,146.14,0.57,74.6,2,3
79
+ 77,1,CC(CO)(C(=O)O)C(=O)O,148.11,-0.85,94.83,3,3
80
+ 78,1,CCNC(CN(CCO)C(O)(CC(=O)O)C(=O)O)C(C)C,306.36,-0.84,130.33,5,11
81
+ 79,1,CC(C)C(C(=O)O)C(=O)O,146.14,0.43,74.6,2,3
82
+ 80,0,NCCCCCOC(=O)O.O=CC(=O)O,221.21,0.08,126.92,3,6
83
+ 81,1,CCCNCCC(C)(CC(=O)O)CC(=O)O,231.29,1.33,86.63,3,9
84
+ 82,0,C.NCCCCCOC(=O)O.O=CO,209.24,1.15,109.85,3,5
85
+ 83,1,CN(CCCCCCCO)C(C(=O)O)C(=O)O,247.29,0.4,98.07,3,10
86
+ 84,1,CC(C)CCCC(C(=O)O)C(=O)O,188.22,1.6,74.6,2,6
87
+ 85,1,CC(CC(=O)O)CC(=O)O,146.14,0.57,74.6,2,4
88
+ 86,1,CC(N)(CC(=O)O)C(=O)O,147.13,-0.74,100.62,3,3
89
+ 87,1,C=CCC1CC(NC2(C(=O)O)CCCC2)(C(=O)O)C1,267.32,1.78,86.63,3,6
90
+ 88,1,NC(CCOCCC(=O)O)C(=O)O,191.18,-0.72,109.85,3,7
91
+ 89,1,CCCCC(C(=O)O)C(=O)O,160.17,0.96,74.6,2,5
92
+ 90,1,CCOc1cc(C)cc(C(=O)O)c1C(=N)C(=O)O,251.24,1.54,107.68,3,5
93
+ 91,1,C=CCCC(NC(=O)C(=O)O)C(=O)O,201.18,-0.39,103.7,3,5
94
+ 92,1,COC(CCC(=O)O)C(OCCC(C)O)OC(=O)O,280.27,0.67,122.52,3,10
95
+ 93,0,,0.0,0.0,0.0,0,0
96
+ 94,1,CCCCCC(=O)NCC(O)(C(=O)O)C(=O)O,247.25,-0.42,123.93,4,8
97
+ 95,0,,0.0,0.0,0.0,0,0
98
+ 96,1,O=C(O)CCC(CO)C(=O)O,162.14,-0.46,94.83,3,5
99
+ 97,1,CCC(CC(=O)O)C(=O)O,146.14,0.57,74.6,2,4
100
+ 98,1,CC(C)(C(=O)O)C1(C(=O)O)CCCCC1,214.26,2.13,74.6,2,3
101
+ 99,1,COC(=CC(=O)O)CC(=O)NCCCCCCCC(=O)O,301.34,1.53,112.93,3,12
CupOFMoCA-PROTAC/results/ablation_all/defog_local_edit_20260726_224813_final.json ADDED
@@ -0,0 +1,2502 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "sample_idx": 0,
4
+ "valid": 1,
5
+ "smiles": "O=C(O)CCNCNCCOCCOCCOCCC(=O)O",
6
+ "checks": {
7
+ "connected": true,
8
+ "attachment_sites": true,
9
+ "ring_closure": true,
10
+ "long_chain": true,
11
+ "linker_atom_count": true,
12
+ "protac_mw": true,
13
+ "representational": true,
14
+ "sa_score": true
15
+ },
16
+ "properties": {
17
+ "mf": "C13H26N2O7",
18
+ "mw": 322.36,
19
+ "polararea": 126.35,
20
+ "xlogp": -0.88,
21
+ "heavycnt": 22,
22
+ "hbonddonor": 4,
23
+ "hbondacc": 7,
24
+ "rotbonds": 17
25
+ }
26
+ },
27
+ {
28
+ "sample_idx": 1,
29
+ "valid": 1,
30
+ "smiles": "O=C(O)CCCCCCCCCCC(=O)O",
31
+ "checks": {
32
+ "connected": true,
33
+ "attachment_sites": true,
34
+ "ring_closure": true,
35
+ "long_chain": true,
36
+ "linker_atom_count": true,
37
+ "protac_mw": true,
38
+ "representational": true,
39
+ "sa_score": true
40
+ },
41
+ "properties": {
42
+ "mf": "C12H22O4",
43
+ "mw": 230.3,
44
+ "polararea": 74.6,
45
+ "xlogp": 3.06,
46
+ "heavycnt": 16,
47
+ "hbonddonor": 2,
48
+ "hbondacc": 2,
49
+ "rotbonds": 11
50
+ }
51
+ },
52
+ {
53
+ "sample_idx": 2,
54
+ "valid": 0,
55
+ "smiles": "CC(N)=O.O=CO.O=CO",
56
+ "checks": {
57
+ "connected": false,
58
+ "attachment_sites": true,
59
+ "ring_closure": true,
60
+ "long_chain": true,
61
+ "linker_atom_count": true,
62
+ "protac_mw": true,
63
+ "representational": true,
64
+ "sa_score": true
65
+ },
66
+ "properties": {
67
+ "mf": "C4H9NO5",
68
+ "mw": 151.12,
69
+ "polararea": 117.69,
70
+ "xlogp": -1.11,
71
+ "heavycnt": 10,
72
+ "hbonddonor": 3,
73
+ "hbondacc": 3,
74
+ "rotbonds": 0
75
+ }
76
+ },
77
+ {
78
+ "sample_idx": 3,
79
+ "valid": 0,
80
+ "smiles": "",
81
+ "checks": {
82
+ "connected": false,
83
+ "attachment_sites": false,
84
+ "ring_closure": true,
85
+ "long_chain": true,
86
+ "linker_atom_count": false,
87
+ "protac_mw": true,
88
+ "representational": true,
89
+ "sa_score": false
90
+ },
91
+ "properties": {
92
+ "mf": "",
93
+ "mw": 0.0,
94
+ "polararea": 0.0,
95
+ "xlogp": 0.0,
96
+ "heavycnt": 0,
97
+ "hbonddonor": 0,
98
+ "hbondacc": 0,
99
+ "rotbonds": 0
100
+ }
101
+ },
102
+ {
103
+ "sample_idx": 4,
104
+ "valid": 0,
105
+ "smiles": "O=C(O)CCOCCOOCOCCO.O=C(O)CO",
106
+ "checks": {
107
+ "connected": false,
108
+ "attachment_sites": true,
109
+ "ring_closure": true,
110
+ "long_chain": true,
111
+ "linker_atom_count": true,
112
+ "protac_mw": true,
113
+ "representational": true,
114
+ "sa_score": true
115
+ },
116
+ "properties": {
117
+ "mf": "C10H20O10",
118
+ "mw": 300.26,
119
+ "polararea": 151.98,
120
+ "xlogp": -1.54,
121
+ "heavycnt": 20,
122
+ "hbonddonor": 4,
123
+ "hbondacc": 8,
124
+ "rotbonds": 12
125
+ }
126
+ },
127
+ {
128
+ "sample_idx": 5,
129
+ "valid": 1,
130
+ "smiles": "CCOCCCN(CCN1CCC(C(=O)O)CC1)CC(=O)O",
131
+ "checks": {
132
+ "connected": true,
133
+ "attachment_sites": true,
134
+ "ring_closure": true,
135
+ "long_chain": true,
136
+ "linker_atom_count": true,
137
+ "protac_mw": true,
138
+ "representational": true,
139
+ "sa_score": true
140
+ },
141
+ "properties": {
142
+ "mf": "C15H28N2O5",
143
+ "mw": 316.4,
144
+ "polararea": 90.31,
145
+ "xlogp": 0.6,
146
+ "heavycnt": 22,
147
+ "hbonddonor": 2,
148
+ "hbondacc": 5,
149
+ "rotbonds": 11
150
+ }
151
+ },
152
+ {
153
+ "sample_idx": 6,
154
+ "valid": 0,
155
+ "smiles": "C.CCO.O=C(O)C(=O)O.O=CO",
156
+ "checks": {
157
+ "connected": false,
158
+ "attachment_sites": true,
159
+ "ring_closure": true,
160
+ "long_chain": true,
161
+ "linker_atom_count": true,
162
+ "protac_mw": true,
163
+ "representational": true,
164
+ "sa_score": true
165
+ },
166
+ "properties": {
167
+ "mf": "C6H14O7",
168
+ "mw": 198.17,
169
+ "polararea": 132.13,
170
+ "xlogp": -0.51,
171
+ "heavycnt": 13,
172
+ "hbonddonor": 4,
173
+ "hbondacc": 4,
174
+ "rotbonds": 0
175
+ }
176
+ },
177
+ {
178
+ "sample_idx": 7,
179
+ "valid": 1,
180
+ "smiles": "CCCC(C(=O)O)C(=O)O",
181
+ "checks": {
182
+ "connected": true,
183
+ "attachment_sites": true,
184
+ "ring_closure": true,
185
+ "long_chain": true,
186
+ "linker_atom_count": true,
187
+ "protac_mw": true,
188
+ "representational": true,
189
+ "sa_score": true
190
+ },
191
+ "properties": {
192
+ "mf": "C6H10O4",
193
+ "mw": 146.14,
194
+ "polararea": 74.6,
195
+ "xlogp": 0.57,
196
+ "heavycnt": 10,
197
+ "hbonddonor": 2,
198
+ "hbondacc": 2,
199
+ "rotbonds": 4
200
+ }
201
+ },
202
+ {
203
+ "sample_idx": 8,
204
+ "valid": 0,
205
+ "smiles": "C.CNCC(=O)O.O=CO",
206
+ "checks": {
207
+ "connected": false,
208
+ "attachment_sites": true,
209
+ "ring_closure": true,
210
+ "long_chain": true,
211
+ "linker_atom_count": true,
212
+ "protac_mw": true,
213
+ "representational": true,
214
+ "sa_score": true
215
+ },
216
+ "properties": {
217
+ "mf": "C5H13NO4",
218
+ "mw": 151.16,
219
+ "polararea": 86.63,
220
+ "xlogp": -0.37,
221
+ "heavycnt": 10,
222
+ "hbonddonor": 3,
223
+ "hbondacc": 3,
224
+ "rotbonds": 2
225
+ }
226
+ },
227
+ {
228
+ "sample_idx": 9,
229
+ "valid": 0,
230
+ "smiles": "CCC.NCCCC(C(=O)O)C(=O)O",
231
+ "checks": {
232
+ "connected": false,
233
+ "attachment_sites": true,
234
+ "ring_closure": true,
235
+ "long_chain": true,
236
+ "linker_atom_count": true,
237
+ "protac_mw": true,
238
+ "representational": true,
239
+ "sa_score": true
240
+ },
241
+ "properties": {
242
+ "mf": "C9H19NO4",
243
+ "mw": 205.25,
244
+ "polararea": 100.62,
245
+ "xlogp": 0.93,
246
+ "heavycnt": 14,
247
+ "hbonddonor": 3,
248
+ "hbondacc": 3,
249
+ "rotbonds": 5
250
+ }
251
+ },
252
+ {
253
+ "sample_idx": 10,
254
+ "valid": 0,
255
+ "smiles": "CN.O=C(O)CCCC(=O)O",
256
+ "checks": {
257
+ "connected": false,
258
+ "attachment_sites": true,
259
+ "ring_closure": true,
260
+ "long_chain": true,
261
+ "linker_atom_count": true,
262
+ "protac_mw": true,
263
+ "representational": true,
264
+ "sa_score": true
265
+ },
266
+ "properties": {
267
+ "mf": "C6H13NO4",
268
+ "mw": 163.17,
269
+ "polararea": 100.62,
270
+ "xlogp": -0.1,
271
+ "heavycnt": 11,
272
+ "hbonddonor": 3,
273
+ "hbondacc": 3,
274
+ "rotbonds": 4
275
+ }
276
+ },
277
+ {
278
+ "sample_idx": 11,
279
+ "valid": 0,
280
+ "smiles": "O=C(O)NCCCCCCNC(=O)O",
281
+ "checks": {
282
+ "connected": true,
283
+ "attachment_sites": false,
284
+ "ring_closure": true,
285
+ "long_chain": true,
286
+ "linker_atom_count": true,
287
+ "protac_mw": true,
288
+ "representational": true,
289
+ "sa_score": true
290
+ },
291
+ "properties": {
292
+ "mf": "C8H16N2O4",
293
+ "mw": 204.23,
294
+ "polararea": 98.66,
295
+ "xlogp": 1.08,
296
+ "heavycnt": 14,
297
+ "hbonddonor": 4,
298
+ "hbondacc": 2,
299
+ "rotbonds": 7
300
+ }
301
+ },
302
+ {
303
+ "sample_idx": 12,
304
+ "valid": 1,
305
+ "smiles": "CCCCOCCCC(CCOCCCCCCC(=O)O)C(=O)O",
306
+ "checks": {
307
+ "connected": true,
308
+ "attachment_sites": true,
309
+ "ring_closure": true,
310
+ "long_chain": true,
311
+ "linker_atom_count": true,
312
+ "protac_mw": true,
313
+ "representational": true,
314
+ "sa_score": true
315
+ },
316
+ "properties": {
317
+ "mf": "C18H34O6",
318
+ "mw": 346.46,
319
+ "polararea": 93.06,
320
+ "xlogp": 3.73,
321
+ "heavycnt": 24,
322
+ "hbonddonor": 2,
323
+ "hbondacc": 4,
324
+ "rotbonds": 18
325
+ }
326
+ },
327
+ {
328
+ "sample_idx": 13,
329
+ "valid": 0,
330
+ "smiles": "O=C(O)CC(=O)O.O=C1CCCCCCCCCN1",
331
+ "checks": {
332
+ "connected": false,
333
+ "attachment_sites": true,
334
+ "ring_closure": true,
335
+ "long_chain": true,
336
+ "linker_atom_count": true,
337
+ "protac_mw": true,
338
+ "representational": true,
339
+ "sa_score": true
340
+ },
341
+ "properties": {
342
+ "mf": "C13H23NO5",
343
+ "mw": 273.33,
344
+ "polararea": 103.7,
345
+ "xlogp": 1.78,
346
+ "heavycnt": 19,
347
+ "hbonddonor": 3,
348
+ "hbondacc": 3,
349
+ "rotbonds": 2
350
+ }
351
+ },
352
+ {
353
+ "sample_idx": 14,
354
+ "valid": 0,
355
+ "smiles": "",
356
+ "checks": {
357
+ "connected": false,
358
+ "attachment_sites": false,
359
+ "ring_closure": true,
360
+ "long_chain": true,
361
+ "linker_atom_count": false,
362
+ "protac_mw": true,
363
+ "representational": true,
364
+ "sa_score": false
365
+ },
366
+ "properties": {
367
+ "mf": "",
368
+ "mw": 0.0,
369
+ "polararea": 0.0,
370
+ "xlogp": 0.0,
371
+ "heavycnt": 0,
372
+ "hbonddonor": 0,
373
+ "hbondacc": 0,
374
+ "rotbonds": 0
375
+ }
376
+ },
377
+ {
378
+ "sample_idx": 15,
379
+ "valid": 0,
380
+ "smiles": "C.C.CC(=O)O.CC(=O)O",
381
+ "checks": {
382
+ "connected": false,
383
+ "attachment_sites": true,
384
+ "ring_closure": true,
385
+ "long_chain": true,
386
+ "linker_atom_count": true,
387
+ "protac_mw": true,
388
+ "representational": true,
389
+ "sa_score": true
390
+ },
391
+ "properties": {
392
+ "mf": "C6H16O4",
393
+ "mw": 152.19,
394
+ "polararea": 74.6,
395
+ "xlogp": 1.45,
396
+ "heavycnt": 10,
397
+ "hbonddonor": 2,
398
+ "hbondacc": 2,
399
+ "rotbonds": 0
400
+ }
401
+ },
402
+ {
403
+ "sample_idx": 16,
404
+ "valid": 0,
405
+ "smiles": "CC=O.O=C(O)CC(=O)O",
406
+ "checks": {
407
+ "connected": false,
408
+ "attachment_sites": true,
409
+ "ring_closure": true,
410
+ "long_chain": true,
411
+ "linker_atom_count": true,
412
+ "protac_mw": true,
413
+ "representational": true,
414
+ "sa_score": true
415
+ },
416
+ "properties": {
417
+ "mf": "C5H8O5",
418
+ "mw": 148.11,
419
+ "polararea": 91.67,
420
+ "xlogp": -0.25,
421
+ "heavycnt": 10,
422
+ "hbonddonor": 2,
423
+ "hbondacc": 3,
424
+ "rotbonds": 2
425
+ }
426
+ },
427
+ {
428
+ "sample_idx": 17,
429
+ "valid": 0,
430
+ "smiles": "CC(C(=O)O)C(=O)O.CN",
431
+ "checks": {
432
+ "connected": false,
433
+ "attachment_sites": true,
434
+ "ring_closure": true,
435
+ "long_chain": true,
436
+ "linker_atom_count": true,
437
+ "protac_mw": true,
438
+ "representational": true,
439
+ "sa_score": true
440
+ },
441
+ "properties": {
442
+ "mf": "C5H11NO4",
443
+ "mw": 149.15,
444
+ "polararea": 100.62,
445
+ "xlogp": -0.63,
446
+ "heavycnt": 10,
447
+ "hbonddonor": 3,
448
+ "hbondacc": 3,
449
+ "rotbonds": 2
450
+ }
451
+ },
452
+ {
453
+ "sample_idx": 18,
454
+ "valid": 0,
455
+ "smiles": "C.C.CCCCCCCCC(=O)O.CCOCCCCCCC(=O)O",
456
+ "checks": {
457
+ "connected": false,
458
+ "attachment_sites": true,
459
+ "ring_closure": true,
460
+ "long_chain": true,
461
+ "linker_atom_count": true,
462
+ "protac_mw": true,
463
+ "representational": true,
464
+ "sa_score": true
465
+ },
466
+ "properties": {
467
+ "mf": "C20H44O5",
468
+ "mw": 364.57,
469
+ "polararea": 83.83,
470
+ "xlogp": 6.15,
471
+ "heavycnt": 25,
472
+ "hbonddonor": 2,
473
+ "hbondacc": 3,
474
+ "rotbonds": 15
475
+ }
476
+ },
477
+ {
478
+ "sample_idx": 19,
479
+ "valid": 0,
480
+ "smiles": "CC(=O)O.CC(CC=O)C(=O)O.CCCC",
481
+ "checks": {
482
+ "connected": false,
483
+ "attachment_sites": true,
484
+ "ring_closure": true,
485
+ "long_chain": true,
486
+ "linker_atom_count": true,
487
+ "protac_mw": true,
488
+ "representational": true,
489
+ "sa_score": true
490
+ },
491
+ "properties": {
492
+ "mf": "C11H22O5",
493
+ "mw": 234.29,
494
+ "polararea": 91.67,
495
+ "xlogp": 2.19,
496
+ "heavycnt": 16,
497
+ "hbonddonor": 2,
498
+ "hbondacc": 3,
499
+ "rotbonds": 4
500
+ }
501
+ },
502
+ {
503
+ "sample_idx": 20,
504
+ "valid": 0,
505
+ "smiles": "NCC=O.O=CO.O=CO",
506
+ "checks": {
507
+ "connected": false,
508
+ "attachment_sites": true,
509
+ "ring_closure": true,
510
+ "long_chain": true,
511
+ "linker_atom_count": true,
512
+ "protac_mw": true,
513
+ "representational": true,
514
+ "sa_score": true
515
+ },
516
+ "properties": {
517
+ "mf": "C4H9NO5",
518
+ "mw": 151.12,
519
+ "polararea": 117.69,
520
+ "xlogp": -1.45,
521
+ "heavycnt": 10,
522
+ "hbonddonor": 3,
523
+ "hbondacc": 4,
524
+ "rotbonds": 1
525
+ }
526
+ },
527
+ {
528
+ "sample_idx": 21,
529
+ "valid": 0,
530
+ "smiles": "C.CC(=O)O.CCC(C)C(=O)O",
531
+ "checks": {
532
+ "connected": false,
533
+ "attachment_sites": true,
534
+ "ring_closure": true,
535
+ "long_chain": true,
536
+ "linker_atom_count": true,
537
+ "protac_mw": true,
538
+ "representational": true,
539
+ "sa_score": true
540
+ },
541
+ "properties": {
542
+ "mf": "C8H18O4",
543
+ "mw": 178.23,
544
+ "polararea": 74.6,
545
+ "xlogp": 1.84,
546
+ "heavycnt": 12,
547
+ "hbonddonor": 2,
548
+ "hbondacc": 2,
549
+ "rotbonds": 2
550
+ }
551
+ },
552
+ {
553
+ "sample_idx": 22,
554
+ "valid": 0,
555
+ "smiles": "CCOOC.O=C(O)C(CO)C(=O)O",
556
+ "checks": {
557
+ "connected": false,
558
+ "attachment_sites": true,
559
+ "ring_closure": true,
560
+ "long_chain": true,
561
+ "linker_atom_count": true,
562
+ "protac_mw": true,
563
+ "representational": true,
564
+ "sa_score": true
565
+ },
566
+ "properties": {
567
+ "mf": "C7H14O7",
568
+ "mw": 210.18,
569
+ "polararea": 113.29,
570
+ "xlogp": -0.65,
571
+ "heavycnt": 14,
572
+ "hbonddonor": 3,
573
+ "hbondacc": 5,
574
+ "rotbonds": 5
575
+ }
576
+ },
577
+ {
578
+ "sample_idx": 23,
579
+ "valid": 0,
580
+ "smiles": "CCOC.NCCOCCOO.O=C(O)CC(=O)O",
581
+ "checks": {
582
+ "connected": false,
583
+ "attachment_sites": true,
584
+ "ring_closure": true,
585
+ "long_chain": true,
586
+ "linker_atom_count": true,
587
+ "protac_mw": true,
588
+ "representational": true,
589
+ "sa_score": true
590
+ },
591
+ "properties": {
592
+ "mf": "C10H23NO8",
593
+ "mw": 285.29,
594
+ "polararea": 148.54,
595
+ "xlogp": -0.35,
596
+ "heavycnt": 19,
597
+ "hbonddonor": 4,
598
+ "hbondacc": 7,
599
+ "rotbonds": 8
600
+ }
601
+ },
602
+ {
603
+ "sample_idx": 24,
604
+ "valid": 0,
605
+ "smiles": "CCCCC1(C=O)CCN1CC.COCCOCCC(=O)O.O=CO",
606
+ "checks": {
607
+ "connected": false,
608
+ "attachment_sites": true,
609
+ "ring_closure": true,
610
+ "long_chain": true,
611
+ "linker_atom_count": true,
612
+ "protac_mw": true,
613
+ "representational": true,
614
+ "sa_score": true
615
+ },
616
+ "properties": {
617
+ "mf": "C17H33NO7",
618
+ "mw": 363.45,
619
+ "polararea": 113.37,
620
+ "xlogp": 1.66,
621
+ "heavycnt": 25,
622
+ "hbonddonor": 2,
623
+ "hbondacc": 6,
624
+ "rotbonds": 11
625
+ }
626
+ },
627
+ {
628
+ "sample_idx": 25,
629
+ "valid": 0,
630
+ "smiles": "CCCNCNC(=O)O.O.O=CO",
631
+ "checks": {
632
+ "connected": false,
633
+ "attachment_sites": false,
634
+ "ring_closure": true,
635
+ "long_chain": true,
636
+ "linker_atom_count": true,
637
+ "protac_mw": true,
638
+ "representational": true,
639
+ "sa_score": true
640
+ },
641
+ "properties": {
642
+ "mf": "C6H16N2O5",
643
+ "mw": 196.2,
644
+ "polararea": 130.16,
645
+ "xlogp": -0.91,
646
+ "heavycnt": 13,
647
+ "hbonddonor": 4,
648
+ "hbondacc": 3,
649
+ "rotbonds": 4
650
+ }
651
+ },
652
+ {
653
+ "sample_idx": 26,
654
+ "valid": 0,
655
+ "smiles": "CC(=O)O.CC=C(CN)C(C(=O)O)=C(N)COCCOOC",
656
+ "checks": {
657
+ "connected": false,
658
+ "attachment_sites": true,
659
+ "ring_closure": true,
660
+ "long_chain": true,
661
+ "linker_atom_count": true,
662
+ "protac_mw": true,
663
+ "representational": true,
664
+ "sa_score": true
665
+ },
666
+ "properties": {
667
+ "mf": "C13H24N2O7",
668
+ "mw": 320.34,
669
+ "polararea": 154.33,
670
+ "xlogp": -0.13,
671
+ "heavycnt": 22,
672
+ "hbonddonor": 4,
673
+ "hbondacc": 7,
674
+ "rotbonds": 9
675
+ }
676
+ },
677
+ {
678
+ "sample_idx": 27,
679
+ "valid": 0,
680
+ "smiles": "C1COO1.CC(=O)O.CC=O.CCN.O=CO",
681
+ "checks": {
682
+ "connected": false,
683
+ "attachment_sites": true,
684
+ "ring_closure": true,
685
+ "long_chain": true,
686
+ "linker_atom_count": true,
687
+ "protac_mw": true,
688
+ "representational": true,
689
+ "sa_score": true
690
+ },
691
+ "properties": {
692
+ "mf": "C9H21NO7",
693
+ "mw": 255.27,
694
+ "polararea": 136.15,
695
+ "xlogp": -0.09,
696
+ "heavycnt": 17,
697
+ "hbonddonor": 3,
698
+ "hbondacc": 6,
699
+ "rotbonds": 0
700
+ }
701
+ },
702
+ {
703
+ "sample_idx": 28,
704
+ "valid": 0,
705
+ "smiles": "CCO.O=C(O)CCCCOCCOCCOCC(=O)O",
706
+ "checks": {
707
+ "connected": false,
708
+ "attachment_sites": true,
709
+ "ring_closure": true,
710
+ "long_chain": true,
711
+ "linker_atom_count": true,
712
+ "protac_mw": true,
713
+ "representational": true,
714
+ "sa_score": true
715
+ },
716
+ "properties": {
717
+ "mf": "C13H26O8",
718
+ "mw": 310.34,
719
+ "polararea": 122.52,
720
+ "xlogp": 0.37,
721
+ "heavycnt": 21,
722
+ "hbonddonor": 3,
723
+ "hbondacc": 6,
724
+ "rotbonds": 13
725
+ }
726
+ },
727
+ {
728
+ "sample_idx": 29,
729
+ "valid": 0,
730
+ "smiles": "CC(=O)O.CCOCCC(=O)O.CCOCCOCCNC(=O)CO",
731
+ "checks": {
732
+ "connected": false,
733
+ "attachment_sites": true,
734
+ "ring_closure": true,
735
+ "long_chain": true,
736
+ "linker_atom_count": true,
737
+ "protac_mw": true,
738
+ "representational": true,
739
+ "sa_score": true
740
+ },
741
+ "properties": {
742
+ "mf": "C15H31NO9",
743
+ "mw": 369.41,
744
+ "polararea": 151.62,
745
+ "xlogp": -0.26,
746
+ "heavycnt": 25,
747
+ "hbonddonor": 4,
748
+ "hbondacc": 7,
749
+ "rotbonds": 12
750
+ }
751
+ },
752
+ {
753
+ "sample_idx": 30,
754
+ "valid": 0,
755
+ "smiles": "C.CCC=O.CNC(=O)O.O=CO",
756
+ "checks": {
757
+ "connected": false,
758
+ "attachment_sites": true,
759
+ "ring_closure": true,
760
+ "long_chain": true,
761
+ "linker_atom_count": true,
762
+ "protac_mw": true,
763
+ "representational": true,
764
+ "sa_score": true
765
+ },
766
+ "properties": {
767
+ "mf": "C7H17NO5",
768
+ "mw": 195.21,
769
+ "polararea": 103.7,
770
+ "xlogp": 0.82,
771
+ "heavycnt": 13,
772
+ "hbonddonor": 3,
773
+ "hbondacc": 3,
774
+ "rotbonds": 1
775
+ }
776
+ },
777
+ {
778
+ "sample_idx": 31,
779
+ "valid": 0,
780
+ "smiles": "O=C(O)NCCO.O=CO",
781
+ "checks": {
782
+ "connected": false,
783
+ "attachment_sites": false,
784
+ "ring_closure": true,
785
+ "long_chain": true,
786
+ "linker_atom_count": true,
787
+ "protac_mw": true,
788
+ "representational": true,
789
+ "sa_score": true
790
+ },
791
+ "properties": {
792
+ "mf": "C4H9NO5",
793
+ "mw": 151.12,
794
+ "polararea": 106.86,
795
+ "xlogp": -1.05,
796
+ "heavycnt": 10,
797
+ "hbonddonor": 4,
798
+ "hbondacc": 3,
799
+ "rotbonds": 2
800
+ }
801
+ },
802
+ {
803
+ "sample_idx": 32,
804
+ "valid": 0,
805
+ "smiles": "CC.CCOCCOCCOCC(OCCC(=O)O)C(=O)O",
806
+ "checks": {
807
+ "connected": false,
808
+ "attachment_sites": true,
809
+ "ring_closure": true,
810
+ "long_chain": true,
811
+ "linker_atom_count": true,
812
+ "protac_mw": true,
813
+ "representational": true,
814
+ "sa_score": true
815
+ },
816
+ "properties": {
817
+ "mf": "C14H28O8",
818
+ "mw": 324.37,
819
+ "polararea": 111.52,
820
+ "xlogp": 1.03,
821
+ "heavycnt": 22,
822
+ "hbonddonor": 2,
823
+ "hbondacc": 6,
824
+ "rotbonds": 14
825
+ }
826
+ },
827
+ {
828
+ "sample_idx": 33,
829
+ "valid": 0,
830
+ "smiles": "CCCCC.CCOC(=O)O.O=CO",
831
+ "checks": {
832
+ "connected": false,
833
+ "attachment_sites": true,
834
+ "ring_closure": true,
835
+ "long_chain": true,
836
+ "linker_atom_count": true,
837
+ "protac_mw": true,
838
+ "representational": true,
839
+ "sa_score": true
840
+ },
841
+ "properties": {
842
+ "mf": "C9H20O5",
843
+ "mw": 208.25,
844
+ "polararea": 83.83,
845
+ "xlogp": 2.6,
846
+ "heavycnt": 14,
847
+ "hbonddonor": 2,
848
+ "hbondacc": 3,
849
+ "rotbonds": 3
850
+ }
851
+ },
852
+ {
853
+ "sample_idx": 34,
854
+ "valid": 0,
855
+ "smiles": "C=Cc1ccc(OCC)cc1.O=C(O)CCCOCCOCC(=O)O",
856
+ "checks": {
857
+ "connected": false,
858
+ "attachment_sites": true,
859
+ "ring_closure": true,
860
+ "long_chain": true,
861
+ "linker_atom_count": true,
862
+ "protac_mw": true,
863
+ "representational": true,
864
+ "sa_score": true
865
+ },
866
+ "properties": {
867
+ "mf": "C18H26O7",
868
+ "mw": 354.4,
869
+ "polararea": 102.29,
870
+ "xlogp": 2.7,
871
+ "heavycnt": 25,
872
+ "hbonddonor": 2,
873
+ "hbondacc": 5,
874
+ "rotbonds": 12
875
+ }
876
+ },
877
+ {
878
+ "sample_idx": 35,
879
+ "valid": 0,
880
+ "smiles": "CC.CCC.O=C(O)CC(=O)O",
881
+ "checks": {
882
+ "connected": false,
883
+ "attachment_sites": true,
884
+ "ring_closure": true,
885
+ "long_chain": true,
886
+ "linker_atom_count": true,
887
+ "protac_mw": true,
888
+ "representational": true,
889
+ "sa_score": true
890
+ },
891
+ "properties": {
892
+ "mf": "C8H18O4",
893
+ "mw": 178.23,
894
+ "polararea": 74.6,
895
+ "xlogp": 1.99,
896
+ "heavycnt": 12,
897
+ "hbonddonor": 2,
898
+ "hbondacc": 2,
899
+ "rotbonds": 2
900
+ }
901
+ },
902
+ {
903
+ "sample_idx": 36,
904
+ "valid": 0,
905
+ "smiles": "O=C(O)COCCOCCOCCNC(=O)O",
906
+ "checks": {
907
+ "connected": true,
908
+ "attachment_sites": false,
909
+ "ring_closure": true,
910
+ "long_chain": true,
911
+ "linker_atom_count": true,
912
+ "protac_mw": true,
913
+ "representational": true,
914
+ "sa_score": true
915
+ },
916
+ "properties": {
917
+ "mf": "C9H17NO7",
918
+ "mw": 251.23,
919
+ "polararea": 114.32,
920
+ "xlogp": -0.61,
921
+ "heavycnt": 17,
922
+ "hbonddonor": 3,
923
+ "hbondacc": 5,
924
+ "rotbonds": 11
925
+ }
926
+ },
927
+ {
928
+ "sample_idx": 37,
929
+ "valid": 1,
930
+ "smiles": "O=CCC(=O)NCCCC(C(=O)O)C(=O)O",
931
+ "checks": {
932
+ "connected": true,
933
+ "attachment_sites": true,
934
+ "ring_closure": true,
935
+ "long_chain": true,
936
+ "linker_atom_count": true,
937
+ "protac_mw": true,
938
+ "representational": true,
939
+ "sa_score": true
940
+ },
941
+ "properties": {
942
+ "mf": "C9H13NO6",
943
+ "mw": 231.2,
944
+ "polararea": 120.77,
945
+ "xlogp": -0.74,
946
+ "heavycnt": 16,
947
+ "hbonddonor": 3,
948
+ "hbondacc": 4,
949
+ "rotbonds": 8
950
+ }
951
+ },
952
+ {
953
+ "sample_idx": 38,
954
+ "valid": 0,
955
+ "smiles": "CC.CNC(C)=O.O=CO.O=CO",
956
+ "checks": {
957
+ "connected": false,
958
+ "attachment_sites": true,
959
+ "ring_closure": true,
960
+ "long_chain": true,
961
+ "linker_atom_count": true,
962
+ "protac_mw": true,
963
+ "representational": true,
964
+ "sa_score": true
965
+ },
966
+ "properties": {
967
+ "mf": "C7H17NO5",
968
+ "mw": 195.22,
969
+ "polararea": 103.7,
970
+ "xlogp": 0.18,
971
+ "heavycnt": 13,
972
+ "hbonddonor": 3,
973
+ "hbondacc": 3,
974
+ "rotbonds": 0
975
+ }
976
+ },
977
+ {
978
+ "sample_idx": 39,
979
+ "valid": 0,
980
+ "smiles": "C.CCC(=O)O.CCCC(=O)O",
981
+ "checks": {
982
+ "connected": false,
983
+ "attachment_sites": true,
984
+ "ring_closure": true,
985
+ "long_chain": true,
986
+ "linker_atom_count": true,
987
+ "protac_mw": true,
988
+ "representational": true,
989
+ "sa_score": true
990
+ },
991
+ "properties": {
992
+ "mf": "C8H18O4",
993
+ "mw": 178.23,
994
+ "polararea": 74.6,
995
+ "xlogp": 1.99,
996
+ "heavycnt": 12,
997
+ "hbonddonor": 2,
998
+ "hbondacc": 2,
999
+ "rotbonds": 3
1000
+ }
1001
+ },
1002
+ {
1003
+ "sample_idx": 40,
1004
+ "valid": 0,
1005
+ "smiles": "O=C(O)NCCNOCC(=O)C(=O)O",
1006
+ "checks": {
1007
+ "connected": true,
1008
+ "attachment_sites": false,
1009
+ "ring_closure": true,
1010
+ "long_chain": true,
1011
+ "linker_atom_count": true,
1012
+ "protac_mw": true,
1013
+ "representational": true,
1014
+ "sa_score": true
1015
+ },
1016
+ "properties": {
1017
+ "mf": "C6H10N2O6",
1018
+ "mw": 206.15,
1019
+ "polararea": 124.96,
1020
+ "xlogp": -1.57,
1021
+ "heavycnt": 14,
1022
+ "hbonddonor": 4,
1023
+ "hbondacc": 5,
1024
+ "rotbonds": 7
1025
+ }
1026
+ },
1027
+ {
1028
+ "sample_idx": 41,
1029
+ "valid": 0,
1030
+ "smiles": "CCC(=O)O.CCOCCOCCOCCC(=O)O",
1031
+ "checks": {
1032
+ "connected": false,
1033
+ "attachment_sites": true,
1034
+ "ring_closure": true,
1035
+ "long_chain": true,
1036
+ "linker_atom_count": true,
1037
+ "protac_mw": true,
1038
+ "representational": true,
1039
+ "sa_score": true
1040
+ },
1041
+ "properties": {
1042
+ "mf": "C12H24O7",
1043
+ "mw": 280.32,
1044
+ "polararea": 102.29,
1045
+ "xlogp": 1.01,
1046
+ "heavycnt": 19,
1047
+ "hbonddonor": 2,
1048
+ "hbondacc": 5,
1049
+ "rotbonds": 11
1050
+ }
1051
+ },
1052
+ {
1053
+ "sample_idx": 42,
1054
+ "valid": 0,
1055
+ "smiles": "O=C(O)CO.O=C(O)CO",
1056
+ "checks": {
1057
+ "connected": false,
1058
+ "attachment_sites": true,
1059
+ "ring_closure": true,
1060
+ "long_chain": true,
1061
+ "linker_atom_count": true,
1062
+ "protac_mw": true,
1063
+ "representational": true,
1064
+ "sa_score": true
1065
+ },
1066
+ "properties": {
1067
+ "mf": "C4H8O6",
1068
+ "mw": 152.1,
1069
+ "polararea": 115.06,
1070
+ "xlogp": -1.87,
1071
+ "heavycnt": 10,
1072
+ "hbonddonor": 4,
1073
+ "hbondacc": 4,
1074
+ "rotbonds": 2
1075
+ }
1076
+ },
1077
+ {
1078
+ "sample_idx": 43,
1079
+ "valid": 0,
1080
+ "smiles": "C=C.CC.O=CO.O=CO",
1081
+ "checks": {
1082
+ "connected": false,
1083
+ "attachment_sites": true,
1084
+ "ring_closure": true,
1085
+ "long_chain": true,
1086
+ "linker_atom_count": true,
1087
+ "protac_mw": true,
1088
+ "representational": true,
1089
+ "sa_score": true
1090
+ },
1091
+ "properties": {
1092
+ "mf": "C6H14O4",
1093
+ "mw": 150.17,
1094
+ "polararea": 74.6,
1095
+ "xlogp": 1.23,
1096
+ "heavycnt": 10,
1097
+ "hbonddonor": 2,
1098
+ "hbondacc": 2,
1099
+ "rotbonds": 0
1100
+ }
1101
+ },
1102
+ {
1103
+ "sample_idx": 44,
1104
+ "valid": 0,
1105
+ "smiles": "CCCCC.O=C(O)CCCCCN1CCC(C(=O)O)CC1",
1106
+ "checks": {
1107
+ "connected": false,
1108
+ "attachment_sites": true,
1109
+ "ring_closure": true,
1110
+ "long_chain": true,
1111
+ "linker_atom_count": true,
1112
+ "protac_mw": true,
1113
+ "representational": true,
1114
+ "sa_score": true
1115
+ },
1116
+ "properties": {
1117
+ "mf": "C17H33NO4",
1118
+ "mw": 315.45,
1119
+ "polararea": 77.84,
1120
+ "xlogp": 3.62,
1121
+ "heavycnt": 22,
1122
+ "hbonddonor": 2,
1123
+ "hbondacc": 3,
1124
+ "rotbonds": 9
1125
+ }
1126
+ },
1127
+ {
1128
+ "sample_idx": 45,
1129
+ "valid": 0,
1130
+ "smiles": "C.CCNC(=O)O.O=CO",
1131
+ "checks": {
1132
+ "connected": false,
1133
+ "attachment_sites": false,
1134
+ "ring_closure": true,
1135
+ "long_chain": true,
1136
+ "linker_atom_count": true,
1137
+ "protac_mw": true,
1138
+ "representational": true,
1139
+ "sa_score": true
1140
+ },
1141
+ "properties": {
1142
+ "mf": "C5H13NO4",
1143
+ "mw": 151.16,
1144
+ "polararea": 86.63,
1145
+ "xlogp": 0.61,
1146
+ "heavycnt": 10,
1147
+ "hbonddonor": 3,
1148
+ "hbondacc": 2,
1149
+ "rotbonds": 1
1150
+ }
1151
+ },
1152
+ {
1153
+ "sample_idx": 46,
1154
+ "valid": 0,
1155
+ "smiles": "CCC(=O)O.CCC(=O)O.CCNCO",
1156
+ "checks": {
1157
+ "connected": false,
1158
+ "attachment_sites": true,
1159
+ "ring_closure": true,
1160
+ "long_chain": true,
1161
+ "linker_atom_count": true,
1162
+ "protac_mw": true,
1163
+ "representational": true,
1164
+ "sa_score": true
1165
+ },
1166
+ "properties": {
1167
+ "mf": "C9H21NO5",
1168
+ "mw": 223.27,
1169
+ "polararea": 106.86,
1170
+ "xlogp": 0.51,
1171
+ "heavycnt": 15,
1172
+ "hbonddonor": 4,
1173
+ "hbondacc": 4,
1174
+ "rotbonds": 4
1175
+ }
1176
+ },
1177
+ {
1178
+ "sample_idx": 47,
1179
+ "valid": 0,
1180
+ "smiles": "CC(CC(=O)O)C(=O)O.CNC(C)=O",
1181
+ "checks": {
1182
+ "connected": false,
1183
+ "attachment_sites": true,
1184
+ "ring_closure": true,
1185
+ "long_chain": true,
1186
+ "linker_atom_count": true,
1187
+ "protac_mw": true,
1188
+ "representational": true,
1189
+ "sa_score": true
1190
+ },
1191
+ "properties": {
1192
+ "mf": "C8H15NO5",
1193
+ "mw": 205.21,
1194
+ "polararea": 103.7,
1195
+ "xlogp": -0.07,
1196
+ "heavycnt": 14,
1197
+ "hbonddonor": 3,
1198
+ "hbondacc": 3,
1199
+ "rotbonds": 3
1200
+ }
1201
+ },
1202
+ {
1203
+ "sample_idx": 48,
1204
+ "valid": 0,
1205
+ "smiles": "CCC(=O)O.CCCOCNOCCNC(=O)O",
1206
+ "checks": {
1207
+ "connected": false,
1208
+ "attachment_sites": false,
1209
+ "ring_closure": true,
1210
+ "long_chain": true,
1211
+ "linker_atom_count": true,
1212
+ "protac_mw": true,
1213
+ "representational": true,
1214
+ "sa_score": true
1215
+ },
1216
+ "properties": {
1217
+ "mf": "C10H22N2O6",
1218
+ "mw": 266.29,
1219
+ "polararea": 117.12,
1220
+ "xlogp": 0.64,
1221
+ "heavycnt": 18,
1222
+ "hbonddonor": 4,
1223
+ "hbondacc": 5,
1224
+ "rotbonds": 9
1225
+ }
1226
+ },
1227
+ {
1228
+ "sample_idx": 49,
1229
+ "valid": 0,
1230
+ "smiles": "CC(=O)O.CC(=O)O.CN",
1231
+ "checks": {
1232
+ "connected": false,
1233
+ "attachment_sites": true,
1234
+ "ring_closure": true,
1235
+ "long_chain": true,
1236
+ "linker_atom_count": true,
1237
+ "protac_mw": true,
1238
+ "representational": true,
1239
+ "sa_score": true
1240
+ },
1241
+ "properties": {
1242
+ "mf": "C5H13NO4",
1243
+ "mw": 151.16,
1244
+ "polararea": 100.62,
1245
+ "xlogp": -0.24,
1246
+ "heavycnt": 10,
1247
+ "hbonddonor": 3,
1248
+ "hbondacc": 3,
1249
+ "rotbonds": 0
1250
+ }
1251
+ },
1252
+ {
1253
+ "sample_idx": 50,
1254
+ "valid": 0,
1255
+ "smiles": "CC(=O)NCCCCC(=O)O.CCCCC(=O)O",
1256
+ "checks": {
1257
+ "connected": false,
1258
+ "attachment_sites": true,
1259
+ "ring_closure": true,
1260
+ "long_chain": true,
1261
+ "linker_atom_count": true,
1262
+ "protac_mw": true,
1263
+ "representational": true,
1264
+ "sa_score": true
1265
+ },
1266
+ "properties": {
1267
+ "mf": "C12H23NO5",
1268
+ "mw": 261.32,
1269
+ "polararea": 103.7,
1270
+ "xlogp": 1.64,
1271
+ "heavycnt": 18,
1272
+ "hbonddonor": 3,
1273
+ "hbondacc": 3,
1274
+ "rotbonds": 8
1275
+ }
1276
+ },
1277
+ {
1278
+ "sample_idx": 51,
1279
+ "valid": 0,
1280
+ "smiles": "CC.CCC(=O)O.O=CO",
1281
+ "checks": {
1282
+ "connected": false,
1283
+ "attachment_sites": true,
1284
+ "ring_closure": true,
1285
+ "long_chain": true,
1286
+ "linker_atom_count": true,
1287
+ "protac_mw": true,
1288
+ "representational": true,
1289
+ "sa_score": true
1290
+ },
1291
+ "properties": {
1292
+ "mf": "C6H14O4",
1293
+ "mw": 150.17,
1294
+ "polararea": 74.6,
1295
+ "xlogp": 1.21,
1296
+ "heavycnt": 10,
1297
+ "hbonddonor": 2,
1298
+ "hbondacc": 2,
1299
+ "rotbonds": 1
1300
+ }
1301
+ },
1302
+ {
1303
+ "sample_idx": 52,
1304
+ "valid": 0,
1305
+ "smiles": "CC=O.O=C(O)CCCOCC(=O)O",
1306
+ "checks": {
1307
+ "connected": false,
1308
+ "attachment_sites": true,
1309
+ "ring_closure": true,
1310
+ "long_chain": true,
1311
+ "linker_atom_count": true,
1312
+ "protac_mw": true,
1313
+ "representational": true,
1314
+ "sa_score": true
1315
+ },
1316
+ "properties": {
1317
+ "mf": "C8H14O6",
1318
+ "mw": 206.19,
1319
+ "polararea": 100.9,
1320
+ "xlogp": 0.16,
1321
+ "heavycnt": 14,
1322
+ "hbonddonor": 2,
1323
+ "hbondacc": 4,
1324
+ "rotbonds": 6
1325
+ }
1326
+ },
1327
+ {
1328
+ "sample_idx": 53,
1329
+ "valid": 0,
1330
+ "smiles": "CC(=O)O.CCCCC(=O)O",
1331
+ "checks": {
1332
+ "connected": false,
1333
+ "attachment_sites": true,
1334
+ "ring_closure": true,
1335
+ "long_chain": true,
1336
+ "linker_atom_count": true,
1337
+ "protac_mw": true,
1338
+ "representational": true,
1339
+ "sa_score": true
1340
+ },
1341
+ "properties": {
1342
+ "mf": "C7H14O4",
1343
+ "mw": 162.18,
1344
+ "polararea": 74.6,
1345
+ "xlogp": 1.35,
1346
+ "heavycnt": 11,
1347
+ "hbonddonor": 2,
1348
+ "hbondacc": 2,
1349
+ "rotbonds": 3
1350
+ }
1351
+ },
1352
+ {
1353
+ "sample_idx": 54,
1354
+ "valid": 0,
1355
+ "smiles": "CCCCCC(=O)O.O=CCCC(=O)O",
1356
+ "checks": {
1357
+ "connected": false,
1358
+ "attachment_sites": true,
1359
+ "ring_closure": true,
1360
+ "long_chain": true,
1361
+ "linker_atom_count": true,
1362
+ "protac_mw": true,
1363
+ "representational": true,
1364
+ "sa_score": true
1365
+ },
1366
+ "properties": {
1367
+ "mf": "C10H18O5",
1368
+ "mw": 218.25,
1369
+ "polararea": 91.67,
1370
+ "xlogp": 1.7,
1371
+ "heavycnt": 15,
1372
+ "hbonddonor": 2,
1373
+ "hbondacc": 3,
1374
+ "rotbonds": 7
1375
+ }
1376
+ },
1377
+ {
1378
+ "sample_idx": 55,
1379
+ "valid": 0,
1380
+ "smiles": "C.O=C(O)CCOCC(=O)O",
1381
+ "checks": {
1382
+ "connected": false,
1383
+ "attachment_sites": true,
1384
+ "ring_closure": true,
1385
+ "long_chain": true,
1386
+ "linker_atom_count": true,
1387
+ "protac_mw": true,
1388
+ "representational": true,
1389
+ "sa_score": true
1390
+ },
1391
+ "properties": {
1392
+ "mf": "C6H12O5",
1393
+ "mw": 164.16,
1394
+ "polararea": 83.83,
1395
+ "xlogp": 0.2,
1396
+ "heavycnt": 11,
1397
+ "hbonddonor": 2,
1398
+ "hbondacc": 3,
1399
+ "rotbonds": 5
1400
+ }
1401
+ },
1402
+ {
1403
+ "sample_idx": 56,
1404
+ "valid": 0,
1405
+ "smiles": "CCOCCOCCOCCN.O=C(O)CC(=O)O",
1406
+ "checks": {
1407
+ "connected": false,
1408
+ "attachment_sites": true,
1409
+ "ring_closure": true,
1410
+ "long_chain": true,
1411
+ "linker_atom_count": true,
1412
+ "protac_mw": true,
1413
+ "representational": true,
1414
+ "sa_score": true
1415
+ },
1416
+ "properties": {
1417
+ "mf": "C11H23NO7",
1418
+ "mw": 281.3,
1419
+ "polararea": 128.31,
1420
+ "xlogp": -0.44,
1421
+ "heavycnt": 19,
1422
+ "hbonddonor": 3,
1423
+ "hbondacc": 6,
1424
+ "rotbonds": 11
1425
+ }
1426
+ },
1427
+ {
1428
+ "sample_idx": 57,
1429
+ "valid": 0,
1430
+ "smiles": "CCOCCOCCOCCOCCN.N.O=CCC(=O)O.O=CO",
1431
+ "checks": {
1432
+ "connected": false,
1433
+ "attachment_sites": true,
1434
+ "ring_closure": true,
1435
+ "long_chain": true,
1436
+ "linker_atom_count": true,
1437
+ "protac_mw": true,
1438
+ "representational": true,
1439
+ "sa_score": true
1440
+ },
1441
+ "properties": {
1442
+ "mf": "C14H32N2O9",
1443
+ "mw": 372.42,
1444
+ "polararea": 189.61,
1445
+ "xlogp": -0.45,
1446
+ "heavycnt": 25,
1447
+ "hbonddonor": 4,
1448
+ "hbondacc": 9,
1449
+ "rotbonds": 14
1450
+ }
1451
+ },
1452
+ {
1453
+ "sample_idx": 58,
1454
+ "valid": 0,
1455
+ "smiles": "CCO.NCCCCCNC(=O)O.O=CO",
1456
+ "checks": {
1457
+ "connected": false,
1458
+ "attachment_sites": false,
1459
+ "ring_closure": true,
1460
+ "long_chain": true,
1461
+ "linker_atom_count": true,
1462
+ "protac_mw": true,
1463
+ "representational": true,
1464
+ "sa_score": true
1465
+ },
1466
+ "properties": {
1467
+ "mf": "C9H22N2O5",
1468
+ "mw": 238.28,
1469
+ "polararea": 132.88,
1470
+ "xlogp": 0.08,
1471
+ "heavycnt": 16,
1472
+ "hbonddonor": 5,
1473
+ "hbondacc": 4,
1474
+ "rotbonds": 5
1475
+ }
1476
+ },
1477
+ {
1478
+ "sample_idx": 59,
1479
+ "valid": 0,
1480
+ "smiles": "CCNC1CC1O.O=CO.O=CO",
1481
+ "checks": {
1482
+ "connected": false,
1483
+ "attachment_sites": true,
1484
+ "ring_closure": true,
1485
+ "long_chain": true,
1486
+ "linker_atom_count": true,
1487
+ "protac_mw": true,
1488
+ "representational": true,
1489
+ "sa_score": true
1490
+ },
1491
+ "properties": {
1492
+ "mf": "C7H15NO5",
1493
+ "mw": 193.2,
1494
+ "polararea": 106.86,
1495
+ "xlogp": -0.87,
1496
+ "heavycnt": 13,
1497
+ "hbonddonor": 4,
1498
+ "hbondacc": 4,
1499
+ "rotbonds": 2
1500
+ }
1501
+ },
1502
+ {
1503
+ "sample_idx": 60,
1504
+ "valid": 0,
1505
+ "smiles": "CCCN.NC(=O)O.O=CO",
1506
+ "checks": {
1507
+ "connected": false,
1508
+ "attachment_sites": false,
1509
+ "ring_closure": true,
1510
+ "long_chain": true,
1511
+ "linker_atom_count": true,
1512
+ "protac_mw": true,
1513
+ "representational": true,
1514
+ "sa_score": true
1515
+ },
1516
+ "properties": {
1517
+ "mf": "C5H14N2O4",
1518
+ "mw": 166.18,
1519
+ "polararea": 126.64,
1520
+ "xlogp": -0.32,
1521
+ "heavycnt": 11,
1522
+ "hbonddonor": 4,
1523
+ "hbondacc": 3,
1524
+ "rotbonds": 1
1525
+ }
1526
+ },
1527
+ {
1528
+ "sample_idx": 61,
1529
+ "valid": 0,
1530
+ "smiles": "CCOCCOC.O=C(O)CCCCCC(=O)O",
1531
+ "checks": {
1532
+ "connected": false,
1533
+ "attachment_sites": true,
1534
+ "ring_closure": true,
1535
+ "long_chain": true,
1536
+ "linker_atom_count": true,
1537
+ "protac_mw": true,
1538
+ "representational": true,
1539
+ "sa_score": true
1540
+ },
1541
+ "properties": {
1542
+ "mf": "C12H24O6",
1543
+ "mw": 264.32,
1544
+ "polararea": 93.06,
1545
+ "xlogp": 1.78,
1546
+ "heavycnt": 18,
1547
+ "hbonddonor": 2,
1548
+ "hbondacc": 4,
1549
+ "rotbonds": 10
1550
+ }
1551
+ },
1552
+ {
1553
+ "sample_idx": 62,
1554
+ "valid": 0,
1555
+ "smiles": "C.NCC(CC(=O)O)C(=O)O",
1556
+ "checks": {
1557
+ "connected": false,
1558
+ "attachment_sites": true,
1559
+ "ring_closure": true,
1560
+ "long_chain": true,
1561
+ "linker_atom_count": true,
1562
+ "protac_mw": true,
1563
+ "representational": true,
1564
+ "sa_score": true
1565
+ },
1566
+ "properties": {
1567
+ "mf": "C6H13NO4",
1568
+ "mw": 163.17,
1569
+ "polararea": 100.62,
1570
+ "xlogp": -0.24,
1571
+ "heavycnt": 11,
1572
+ "hbonddonor": 3,
1573
+ "hbondacc": 3,
1574
+ "rotbonds": 4
1575
+ }
1576
+ },
1577
+ {
1578
+ "sample_idx": 63,
1579
+ "valid": 0,
1580
+ "smiles": "C.CCO.O=CO.O=CO",
1581
+ "checks": {
1582
+ "connected": false,
1583
+ "attachment_sites": true,
1584
+ "ring_closure": true,
1585
+ "long_chain": true,
1586
+ "linker_atom_count": true,
1587
+ "protac_mw": true,
1588
+ "representational": true,
1589
+ "sa_score": true
1590
+ },
1591
+ "properties": {
1592
+ "mf": "C5H14O5",
1593
+ "mw": 154.16,
1594
+ "polararea": 94.83,
1595
+ "xlogp": 0.04,
1596
+ "heavycnt": 10,
1597
+ "hbonddonor": 3,
1598
+ "hbondacc": 3,
1599
+ "rotbonds": 0
1600
+ }
1601
+ },
1602
+ {
1603
+ "sample_idx": 64,
1604
+ "valid": 0,
1605
+ "smiles": "CCC(=O)O.CCCOCCOCCOCCOCCC(=O)O",
1606
+ "checks": {
1607
+ "connected": false,
1608
+ "attachment_sites": true,
1609
+ "ring_closure": true,
1610
+ "long_chain": true,
1611
+ "linker_atom_count": true,
1612
+ "protac_mw": true,
1613
+ "representational": true,
1614
+ "sa_score": true
1615
+ },
1616
+ "properties": {
1617
+ "mf": "C15H30O8",
1618
+ "mw": 338.4,
1619
+ "polararea": 111.52,
1620
+ "xlogp": 1.42,
1621
+ "heavycnt": 23,
1622
+ "hbonddonor": 2,
1623
+ "hbondacc": 6,
1624
+ "rotbonds": 15
1625
+ }
1626
+ },
1627
+ {
1628
+ "sample_idx": 65,
1629
+ "valid": 1,
1630
+ "smiles": "O=C(O)CCCCCCCCCC(=O)O",
1631
+ "checks": {
1632
+ "connected": true,
1633
+ "attachment_sites": true,
1634
+ "ring_closure": true,
1635
+ "long_chain": true,
1636
+ "linker_atom_count": true,
1637
+ "protac_mw": true,
1638
+ "representational": true,
1639
+ "sa_score": true
1640
+ },
1641
+ "properties": {
1642
+ "mf": "C11H20O4",
1643
+ "mw": 216.28,
1644
+ "polararea": 74.6,
1645
+ "xlogp": 2.67,
1646
+ "heavycnt": 15,
1647
+ "hbonddonor": 2,
1648
+ "hbondacc": 2,
1649
+ "rotbonds": 10
1650
+ }
1651
+ },
1652
+ {
1653
+ "sample_idx": 66,
1654
+ "valid": 0,
1655
+ "smiles": "CC.CC(=O)O.NCN.O=C(O)CC(=O)O",
1656
+ "checks": {
1657
+ "connected": false,
1658
+ "attachment_sites": true,
1659
+ "ring_closure": true,
1660
+ "long_chain": true,
1661
+ "linker_atom_count": true,
1662
+ "protac_mw": true,
1663
+ "representational": true,
1664
+ "sa_score": true
1665
+ },
1666
+ "properties": {
1667
+ "mf": "C8H20N2O6",
1668
+ "mw": 240.26,
1669
+ "polararea": 163.94,
1670
+ "xlogp": -0.48,
1671
+ "heavycnt": 16,
1672
+ "hbonddonor": 5,
1673
+ "hbondacc": 5,
1674
+ "rotbonds": 2
1675
+ }
1676
+ },
1677
+ {
1678
+ "sample_idx": 67,
1679
+ "valid": 0,
1680
+ "smiles": "C.CC(=O)O.CCC(=O)O.N.N.O=CO",
1681
+ "checks": {
1682
+ "connected": false,
1683
+ "attachment_sites": true,
1684
+ "ring_closure": true,
1685
+ "long_chain": true,
1686
+ "linker_atom_count": true,
1687
+ "protac_mw": true,
1688
+ "representational": true,
1689
+ "sa_score": true
1690
+ },
1691
+ "properties": {
1692
+ "mf": "C7H22N2O6",
1693
+ "mw": 230.26,
1694
+ "polararea": 181.9,
1695
+ "xlogp": 1.23,
1696
+ "heavycnt": 15,
1697
+ "hbonddonor": 5,
1698
+ "hbondacc": 5,
1699
+ "rotbonds": 1
1700
+ }
1701
+ },
1702
+ {
1703
+ "sample_idx": 68,
1704
+ "valid": 0,
1705
+ "smiles": "",
1706
+ "checks": {
1707
+ "connected": false,
1708
+ "attachment_sites": false,
1709
+ "ring_closure": true,
1710
+ "long_chain": true,
1711
+ "linker_atom_count": false,
1712
+ "protac_mw": true,
1713
+ "representational": true,
1714
+ "sa_score": false
1715
+ },
1716
+ "properties": {
1717
+ "mf": "",
1718
+ "mw": 0.0,
1719
+ "polararea": 0.0,
1720
+ "xlogp": 0.0,
1721
+ "heavycnt": 0,
1722
+ "hbonddonor": 0,
1723
+ "hbondacc": 0,
1724
+ "rotbonds": 0
1725
+ }
1726
+ },
1727
+ {
1728
+ "sample_idx": 69,
1729
+ "valid": 1,
1730
+ "smiles": "CNCN(CC(=O)O)C(C)C(=O)O",
1731
+ "checks": {
1732
+ "connected": true,
1733
+ "attachment_sites": true,
1734
+ "ring_closure": true,
1735
+ "long_chain": true,
1736
+ "linker_atom_count": true,
1737
+ "protac_mw": true,
1738
+ "representational": true,
1739
+ "sa_score": true
1740
+ },
1741
+ "properties": {
1742
+ "mf": "C7H14N2O4",
1743
+ "mw": 190.2,
1744
+ "polararea": 89.87,
1745
+ "xlogp": -0.98,
1746
+ "heavycnt": 13,
1747
+ "hbonddonor": 3,
1748
+ "hbondacc": 4,
1749
+ "rotbonds": 6
1750
+ }
1751
+ },
1752
+ {
1753
+ "sample_idx": 70,
1754
+ "valid": 0,
1755
+ "smiles": "CCCCc1ccn(C)n1.CCOC(CC(=O)O)C(=O)O",
1756
+ "checks": {
1757
+ "connected": false,
1758
+ "attachment_sites": true,
1759
+ "ring_closure": true,
1760
+ "long_chain": true,
1761
+ "linker_atom_count": true,
1762
+ "protac_mw": true,
1763
+ "representational": true,
1764
+ "sa_score": true
1765
+ },
1766
+ "properties": {
1767
+ "mf": "C14H24N2O5",
1768
+ "mw": 300.35,
1769
+ "polararea": 101.65,
1770
+ "xlogp": 1.71,
1771
+ "heavycnt": 21,
1772
+ "hbonddonor": 2,
1773
+ "hbondacc": 4,
1774
+ "rotbonds": 8
1775
+ }
1776
+ },
1777
+ {
1778
+ "sample_idx": 71,
1779
+ "valid": 0,
1780
+ "smiles": "CCCCC(=O)O.CCCCCNC(C)=O.COCCOCC(=O)O",
1781
+ "checks": {
1782
+ "connected": false,
1783
+ "attachment_sites": true,
1784
+ "ring_closure": true,
1785
+ "long_chain": true,
1786
+ "linker_atom_count": true,
1787
+ "protac_mw": true,
1788
+ "representational": true,
1789
+ "sa_score": true
1790
+ },
1791
+ "properties": {
1792
+ "mf": "C17H35NO7",
1793
+ "mw": 365.47,
1794
+ "polararea": 122.16,
1795
+ "xlogp": 2.31,
1796
+ "heavycnt": 25,
1797
+ "hbonddonor": 3,
1798
+ "hbondacc": 5,
1799
+ "rotbonds": 12
1800
+ }
1801
+ },
1802
+ {
1803
+ "sample_idx": 72,
1804
+ "valid": 1,
1805
+ "smiles": "CC(C)OCC(C(=O)O)C(=O)O",
1806
+ "checks": {
1807
+ "connected": true,
1808
+ "attachment_sites": true,
1809
+ "ring_closure": true,
1810
+ "long_chain": true,
1811
+ "linker_atom_count": true,
1812
+ "protac_mw": true,
1813
+ "representational": true,
1814
+ "sa_score": true
1815
+ },
1816
+ "properties": {
1817
+ "mf": "C7H12O5",
1818
+ "mw": 176.17,
1819
+ "polararea": 83.83,
1820
+ "xlogp": 0.2,
1821
+ "heavycnt": 12,
1822
+ "hbonddonor": 2,
1823
+ "hbondacc": 3,
1824
+ "rotbonds": 5
1825
+ }
1826
+ },
1827
+ {
1828
+ "sample_idx": 73,
1829
+ "valid": 0,
1830
+ "smiles": "CN1CCC(C(=O)O)CC1.O=C(O)CCCCCOC1CCNCC1",
1831
+ "checks": {
1832
+ "connected": false,
1833
+ "attachment_sites": true,
1834
+ "ring_closure": true,
1835
+ "long_chain": true,
1836
+ "linker_atom_count": true,
1837
+ "protac_mw": true,
1838
+ "representational": true,
1839
+ "sa_score": true
1840
+ },
1841
+ "properties": {
1842
+ "mf": "C18H34N2O5",
1843
+ "mw": 358.48,
1844
+ "polararea": 99.1,
1845
+ "xlogp": 1.81,
1846
+ "heavycnt": 25,
1847
+ "hbonddonor": 3,
1848
+ "hbondacc": 5,
1849
+ "rotbonds": 8
1850
+ }
1851
+ },
1852
+ {
1853
+ "sample_idx": 74,
1854
+ "valid": 0,
1855
+ "smiles": "CCC(=O)O.CCOCCOC.CCOCCOCC(=O)O",
1856
+ "checks": {
1857
+ "connected": false,
1858
+ "attachment_sites": true,
1859
+ "ring_closure": true,
1860
+ "long_chain": true,
1861
+ "linker_atom_count": true,
1862
+ "protac_mw": true,
1863
+ "representational": true,
1864
+ "sa_score": true
1865
+ },
1866
+ "properties": {
1867
+ "mf": "C14H30O8",
1868
+ "mw": 326.39,
1869
+ "polararea": 111.52,
1870
+ "xlogp": 1.27,
1871
+ "heavycnt": 22,
1872
+ "hbonddonor": 2,
1873
+ "hbondacc": 6,
1874
+ "rotbonds": 11
1875
+ }
1876
+ },
1877
+ {
1878
+ "sample_idx": 75,
1879
+ "valid": 0,
1880
+ "smiles": "CCOCCOC.NC(C(=O)O)C(=O)O",
1881
+ "checks": {
1882
+ "connected": false,
1883
+ "attachment_sites": true,
1884
+ "ring_closure": true,
1885
+ "long_chain": true,
1886
+ "linker_atom_count": true,
1887
+ "protac_mw": true,
1888
+ "representational": true,
1889
+ "sa_score": true
1890
+ },
1891
+ "properties": {
1892
+ "mf": "C8H17NO6",
1893
+ "mw": 223.22,
1894
+ "polararea": 119.08,
1895
+ "xlogp": -0.85,
1896
+ "heavycnt": 15,
1897
+ "hbonddonor": 3,
1898
+ "hbondacc": 5,
1899
+ "rotbonds": 6
1900
+ }
1901
+ },
1902
+ {
1903
+ "sample_idx": 76,
1904
+ "valid": 0,
1905
+ "smiles": "C.CC(N)(C(=O)O)C(=O)O",
1906
+ "checks": {
1907
+ "connected": false,
1908
+ "attachment_sites": true,
1909
+ "ring_closure": true,
1910
+ "long_chain": true,
1911
+ "linker_atom_count": true,
1912
+ "protac_mw": true,
1913
+ "representational": true,
1914
+ "sa_score": true
1915
+ },
1916
+ "properties": {
1917
+ "mf": "C5H11NO4",
1918
+ "mw": 149.15,
1919
+ "polararea": 100.62,
1920
+ "xlogp": -0.49,
1921
+ "heavycnt": 10,
1922
+ "hbonddonor": 3,
1923
+ "hbondacc": 3,
1924
+ "rotbonds": 2
1925
+ }
1926
+ },
1927
+ {
1928
+ "sample_idx": 77,
1929
+ "valid": 0,
1930
+ "smiles": "C.CC.O.O=CO.O=CO",
1931
+ "checks": {
1932
+ "connected": false,
1933
+ "attachment_sites": true,
1934
+ "ring_closure": true,
1935
+ "long_chain": true,
1936
+ "linker_atom_count": true,
1937
+ "protac_mw": true,
1938
+ "representational": true,
1939
+ "sa_score": true
1940
+ },
1941
+ "properties": {
1942
+ "mf": "C5H16O5",
1943
+ "mw": 156.18,
1944
+ "polararea": 106.1,
1945
+ "xlogp": 0.24,
1946
+ "heavycnt": 10,
1947
+ "hbonddonor": 2,
1948
+ "hbondacc": 2,
1949
+ "rotbonds": 0
1950
+ }
1951
+ },
1952
+ {
1953
+ "sample_idx": 78,
1954
+ "valid": 0,
1955
+ "smiles": "CCC(=O)N=CCOCC(=O)O.CCCO.O=C(O)CO",
1956
+ "checks": {
1957
+ "connected": false,
1958
+ "attachment_sites": true,
1959
+ "ring_closure": true,
1960
+ "long_chain": true,
1961
+ "linker_atom_count": true,
1962
+ "protac_mw": true,
1963
+ "representational": true,
1964
+ "sa_score": true
1965
+ },
1966
+ "properties": {
1967
+ "mf": "C12H23NO8",
1968
+ "mw": 309.32,
1969
+ "polararea": 153.72,
1970
+ "xlogp": -0.45,
1971
+ "heavycnt": 21,
1972
+ "hbonddonor": 4,
1973
+ "hbondacc": 6,
1974
+ "rotbonds": 7
1975
+ }
1976
+ },
1977
+ {
1978
+ "sample_idx": 79,
1979
+ "valid": 0,
1980
+ "smiles": "CNC.O=C(O)CC(=O)O",
1981
+ "checks": {
1982
+ "connected": false,
1983
+ "attachment_sites": true,
1984
+ "ring_closure": true,
1985
+ "long_chain": true,
1986
+ "linker_atom_count": true,
1987
+ "protac_mw": true,
1988
+ "representational": true,
1989
+ "sa_score": true
1990
+ },
1991
+ "properties": {
1992
+ "mf": "C5H11NO4",
1993
+ "mw": 149.15,
1994
+ "polararea": 86.63,
1995
+ "xlogp": -0.62,
1996
+ "heavycnt": 10,
1997
+ "hbonddonor": 3,
1998
+ "hbondacc": 3,
1999
+ "rotbonds": 2
2000
+ }
2001
+ },
2002
+ {
2003
+ "sample_idx": 80,
2004
+ "valid": 0,
2005
+ "smiles": "C.COCCOC(=O)O.O.O=CC(=O)O",
2006
+ "checks": {
2007
+ "connected": false,
2008
+ "attachment_sites": true,
2009
+ "ring_closure": true,
2010
+ "long_chain": true,
2011
+ "linker_atom_count": true,
2012
+ "protac_mw": true,
2013
+ "representational": true,
2014
+ "sa_score": true
2015
+ },
2016
+ "properties": {
2017
+ "mf": "C7H16O8",
2018
+ "mw": 228.2,
2019
+ "polararea": 141.63,
2020
+ "xlogp": -0.59,
2021
+ "heavycnt": 15,
2022
+ "hbonddonor": 2,
2023
+ "hbondacc": 5,
2024
+ "rotbonds": 4
2025
+ }
2026
+ },
2027
+ {
2028
+ "sample_idx": 81,
2029
+ "valid": 0,
2030
+ "smiles": "CC(=O)O.CCOCCNC(=O)CC(=O)O",
2031
+ "checks": {
2032
+ "connected": false,
2033
+ "attachment_sites": true,
2034
+ "ring_closure": true,
2035
+ "long_chain": true,
2036
+ "linker_atom_count": true,
2037
+ "protac_mw": true,
2038
+ "representational": true,
2039
+ "sa_score": true
2040
+ },
2041
+ "properties": {
2042
+ "mf": "C9H17NO6",
2043
+ "mw": 235.24,
2044
+ "polararea": 112.93,
2045
+ "xlogp": -0.3,
2046
+ "heavycnt": 16,
2047
+ "hbonddonor": 3,
2048
+ "hbondacc": 4,
2049
+ "rotbonds": 6
2050
+ }
2051
+ },
2052
+ {
2053
+ "sample_idx": 82,
2054
+ "valid": 0,
2055
+ "smiles": "CNC(C)=O.COC.O=CO.O=CO",
2056
+ "checks": {
2057
+ "connected": false,
2058
+ "attachment_sites": true,
2059
+ "ring_closure": true,
2060
+ "long_chain": true,
2061
+ "linker_atom_count": true,
2062
+ "protac_mw": true,
2063
+ "representational": true,
2064
+ "sa_score": true
2065
+ },
2066
+ "properties": {
2067
+ "mf": "C7H17NO6",
2068
+ "mw": 211.21,
2069
+ "polararea": 112.93,
2070
+ "xlogp": -0.58,
2071
+ "heavycnt": 14,
2072
+ "hbonddonor": 3,
2073
+ "hbondacc": 4,
2074
+ "rotbonds": 0
2075
+ }
2076
+ },
2077
+ {
2078
+ "sample_idx": 83,
2079
+ "valid": 1,
2080
+ "smiles": "COCCOCCNCCC(C(=O)O)C(=O)O",
2081
+ "checks": {
2082
+ "connected": true,
2083
+ "attachment_sites": true,
2084
+ "ring_closure": true,
2085
+ "long_chain": true,
2086
+ "linker_atom_count": true,
2087
+ "protac_mw": true,
2088
+ "representational": true,
2089
+ "sa_score": true
2090
+ },
2091
+ "properties": {
2092
+ "mf": "C10H19NO6",
2093
+ "mw": 249.26,
2094
+ "polararea": 105.09,
2095
+ "xlogp": -0.59,
2096
+ "heavycnt": 17,
2097
+ "hbonddonor": 3,
2098
+ "hbondacc": 5,
2099
+ "rotbonds": 11
2100
+ }
2101
+ },
2102
+ {
2103
+ "sample_idx": 84,
2104
+ "valid": 0,
2105
+ "smiles": "O=C(O)NCCOCCNC(=O)O",
2106
+ "checks": {
2107
+ "connected": true,
2108
+ "attachment_sites": false,
2109
+ "ring_closure": true,
2110
+ "long_chain": true,
2111
+ "linker_atom_count": true,
2112
+ "protac_mw": true,
2113
+ "representational": true,
2114
+ "sa_score": true
2115
+ },
2116
+ "properties": {
2117
+ "mf": "C6H12N2O5",
2118
+ "mw": 192.17,
2119
+ "polararea": 107.89,
2120
+ "xlogp": -0.46,
2121
+ "heavycnt": 13,
2122
+ "hbonddonor": 4,
2123
+ "hbondacc": 3,
2124
+ "rotbonds": 6
2125
+ }
2126
+ },
2127
+ {
2128
+ "sample_idx": 85,
2129
+ "valid": 0,
2130
+ "smiles": "CC(=O)O.CCCC(=O)O",
2131
+ "checks": {
2132
+ "connected": false,
2133
+ "attachment_sites": true,
2134
+ "ring_closure": true,
2135
+ "long_chain": true,
2136
+ "linker_atom_count": true,
2137
+ "protac_mw": true,
2138
+ "representational": true,
2139
+ "sa_score": true
2140
+ },
2141
+ "properties": {
2142
+ "mf": "C6H12O4",
2143
+ "mw": 148.16,
2144
+ "polararea": 74.6,
2145
+ "xlogp": 0.96,
2146
+ "heavycnt": 10,
2147
+ "hbonddonor": 2,
2148
+ "hbondacc": 2,
2149
+ "rotbonds": 2
2150
+ }
2151
+ },
2152
+ {
2153
+ "sample_idx": 86,
2154
+ "valid": 0,
2155
+ "smiles": "C.O=C(O)CNCC(=O)O",
2156
+ "checks": {
2157
+ "connected": false,
2158
+ "attachment_sites": true,
2159
+ "ring_closure": true,
2160
+ "long_chain": true,
2161
+ "linker_atom_count": true,
2162
+ "protac_mw": true,
2163
+ "representational": true,
2164
+ "sa_score": true
2165
+ },
2166
+ "properties": {
2167
+ "mf": "C5H11NO4",
2168
+ "mw": 149.15,
2169
+ "polararea": 86.63,
2170
+ "xlogp": -0.62,
2171
+ "heavycnt": 10,
2172
+ "hbonddonor": 3,
2173
+ "hbondacc": 3,
2174
+ "rotbonds": 4
2175
+ }
2176
+ },
2177
+ {
2178
+ "sample_idx": 87,
2179
+ "valid": 0,
2180
+ "smiles": "CCC(=O)NCCCC(=O)O.O=C(O)COCCO",
2181
+ "checks": {
2182
+ "connected": false,
2183
+ "attachment_sites": true,
2184
+ "ring_closure": true,
2185
+ "long_chain": true,
2186
+ "linker_atom_count": true,
2187
+ "protac_mw": true,
2188
+ "representational": true,
2189
+ "sa_score": true
2190
+ },
2191
+ "properties": {
2192
+ "mf": "C11H21NO7",
2193
+ "mw": 279.29,
2194
+ "polararea": 133.16,
2195
+ "xlogp": -0.54,
2196
+ "heavycnt": 19,
2197
+ "hbonddonor": 4,
2198
+ "hbondacc": 5,
2199
+ "rotbonds": 9
2200
+ }
2201
+ },
2202
+ {
2203
+ "sample_idx": 88,
2204
+ "valid": 0,
2205
+ "smiles": "NC(=O)CCC(=O)O.O=C(O)CO",
2206
+ "checks": {
2207
+ "connected": false,
2208
+ "attachment_sites": true,
2209
+ "ring_closure": true,
2210
+ "long_chain": true,
2211
+ "linker_atom_count": true,
2212
+ "protac_mw": true,
2213
+ "representational": true,
2214
+ "sa_score": true
2215
+ },
2216
+ "properties": {
2217
+ "mf": "C6H11NO6",
2218
+ "mw": 193.15,
2219
+ "polararea": 137.92,
2220
+ "xlogp": -1.6,
2221
+ "heavycnt": 13,
2222
+ "hbonddonor": 4,
2223
+ "hbondacc": 4,
2224
+ "rotbonds": 4
2225
+ }
2226
+ },
2227
+ {
2228
+ "sample_idx": 89,
2229
+ "valid": 0,
2230
+ "smiles": "C.CCC.O=C(O)CC(=O)O",
2231
+ "checks": {
2232
+ "connected": false,
2233
+ "attachment_sites": true,
2234
+ "ring_closure": true,
2235
+ "long_chain": true,
2236
+ "linker_atom_count": true,
2237
+ "protac_mw": true,
2238
+ "representational": true,
2239
+ "sa_score": true
2240
+ },
2241
+ "properties": {
2242
+ "mf": "C7H16O4",
2243
+ "mw": 164.2,
2244
+ "polararea": 74.6,
2245
+ "xlogp": 1.6,
2246
+ "heavycnt": 11,
2247
+ "hbonddonor": 2,
2248
+ "hbondacc": 2,
2249
+ "rotbonds": 2
2250
+ }
2251
+ },
2252
+ {
2253
+ "sample_idx": 90,
2254
+ "valid": 0,
2255
+ "smiles": "C.CCC.O=C(O)c1cc2c3cc1C(C(=O)O)N23",
2256
+ "checks": {
2257
+ "connected": false,
2258
+ "attachment_sites": true,
2259
+ "ring_closure": true,
2260
+ "long_chain": true,
2261
+ "linker_atom_count": true,
2262
+ "protac_mw": true,
2263
+ "representational": true,
2264
+ "sa_score": true
2265
+ },
2266
+ "properties": {
2267
+ "mf": "C13H17NO4",
2268
+ "mw": 251.28,
2269
+ "polararea": 77.61,
2270
+ "xlogp": 3.03,
2271
+ "heavycnt": 18,
2272
+ "hbonddonor": 2,
2273
+ "hbondacc": 3,
2274
+ "rotbonds": 2
2275
+ }
2276
+ },
2277
+ {
2278
+ "sample_idx": 91,
2279
+ "valid": 0,
2280
+ "smiles": "C=CCCC(=O)O.CNC(=O)C(=O)O",
2281
+ "checks": {
2282
+ "connected": false,
2283
+ "attachment_sites": true,
2284
+ "ring_closure": true,
2285
+ "long_chain": true,
2286
+ "linker_atom_count": true,
2287
+ "protac_mw": true,
2288
+ "representational": true,
2289
+ "sa_score": true
2290
+ },
2291
+ "properties": {
2292
+ "mf": "C8H13NO5",
2293
+ "mw": 203.19,
2294
+ "polararea": 103.7,
2295
+ "xlogp": -0.15,
2296
+ "heavycnt": 14,
2297
+ "hbonddonor": 3,
2298
+ "hbondacc": 3,
2299
+ "rotbonds": 3
2300
+ }
2301
+ },
2302
+ {
2303
+ "sample_idx": 92,
2304
+ "valid": 0,
2305
+ "smiles": "CCOCCC(=O)O.O=C(O)OCCOCCOO",
2306
+ "checks": {
2307
+ "connected": false,
2308
+ "attachment_sites": true,
2309
+ "ring_closure": true,
2310
+ "long_chain": true,
2311
+ "linker_atom_count": true,
2312
+ "protac_mw": true,
2313
+ "representational": true,
2314
+ "sa_score": true
2315
+ },
2316
+ "properties": {
2317
+ "mf": "C10H20O9",
2318
+ "mw": 284.26,
2319
+ "polararea": 131.75,
2320
+ "xlogp": 0.68,
2321
+ "heavycnt": 19,
2322
+ "hbonddonor": 3,
2323
+ "hbondacc": 7,
2324
+ "rotbonds": 10
2325
+ }
2326
+ },
2327
+ {
2328
+ "sample_idx": 93,
2329
+ "valid": 0,
2330
+ "smiles": "",
2331
+ "checks": {
2332
+ "connected": false,
2333
+ "attachment_sites": false,
2334
+ "ring_closure": true,
2335
+ "long_chain": true,
2336
+ "linker_atom_count": false,
2337
+ "protac_mw": true,
2338
+ "representational": true,
2339
+ "sa_score": false
2340
+ },
2341
+ "properties": {
2342
+ "mf": "",
2343
+ "mw": 0.0,
2344
+ "polararea": 0.0,
2345
+ "xlogp": 0.0,
2346
+ "heavycnt": 0,
2347
+ "hbonddonor": 0,
2348
+ "hbondacc": 0,
2349
+ "rotbonds": 0
2350
+ }
2351
+ },
2352
+ {
2353
+ "sample_idx": 94,
2354
+ "valid": 0,
2355
+ "smiles": "C.CC.CCOCC(C)O.O=C(O)CC(=O)O",
2356
+ "checks": {
2357
+ "connected": false,
2358
+ "attachment_sites": true,
2359
+ "ring_closure": true,
2360
+ "long_chain": true,
2361
+ "linker_atom_count": true,
2362
+ "protac_mw": true,
2363
+ "representational": true,
2364
+ "sa_score": true
2365
+ },
2366
+ "properties": {
2367
+ "mf": "C11H26O6",
2368
+ "mw": 254.32,
2369
+ "polararea": 104.06,
2370
+ "xlogp": 1.61,
2371
+ "heavycnt": 17,
2372
+ "hbonddonor": 3,
2373
+ "hbondacc": 4,
2374
+ "rotbonds": 5
2375
+ }
2376
+ },
2377
+ {
2378
+ "sample_idx": 95,
2379
+ "valid": 0,
2380
+ "smiles": "",
2381
+ "checks": {
2382
+ "connected": false,
2383
+ "attachment_sites": false,
2384
+ "ring_closure": true,
2385
+ "long_chain": true,
2386
+ "linker_atom_count": false,
2387
+ "protac_mw": true,
2388
+ "representational": true,
2389
+ "sa_score": false
2390
+ },
2391
+ "properties": {
2392
+ "mf": "",
2393
+ "mw": 0.0,
2394
+ "polararea": 0.0,
2395
+ "xlogp": 0.0,
2396
+ "heavycnt": 0,
2397
+ "hbonddonor": 0,
2398
+ "hbondacc": 0,
2399
+ "rotbonds": 0
2400
+ }
2401
+ },
2402
+ {
2403
+ "sample_idx": 96,
2404
+ "valid": 1,
2405
+ "smiles": "CC(OCCC(=O)O)C(=O)O",
2406
+ "checks": {
2407
+ "connected": true,
2408
+ "attachment_sites": true,
2409
+ "ring_closure": true,
2410
+ "long_chain": true,
2411
+ "linker_atom_count": true,
2412
+ "protac_mw": true,
2413
+ "representational": true,
2414
+ "sa_score": true
2415
+ },
2416
+ "properties": {
2417
+ "mf": "C6H10O5",
2418
+ "mw": 162.14,
2419
+ "polararea": 83.83,
2420
+ "xlogp": -0.05,
2421
+ "heavycnt": 11,
2422
+ "hbonddonor": 2,
2423
+ "hbondacc": 3,
2424
+ "rotbonds": 5
2425
+ }
2426
+ },
2427
+ {
2428
+ "sample_idx": 97,
2429
+ "valid": 0,
2430
+ "smiles": "C.C.O=C(O)CCC(=O)O",
2431
+ "checks": {
2432
+ "connected": false,
2433
+ "attachment_sites": true,
2434
+ "ring_closure": true,
2435
+ "long_chain": true,
2436
+ "linker_atom_count": true,
2437
+ "protac_mw": true,
2438
+ "representational": true,
2439
+ "sa_score": true
2440
+ },
2441
+ "properties": {
2442
+ "mf": "C6H14O4",
2443
+ "mw": 150.17,
2444
+ "polararea": 74.6,
2445
+ "xlogp": 1.21,
2446
+ "heavycnt": 10,
2447
+ "hbonddonor": 2,
2448
+ "hbondacc": 2,
2449
+ "rotbonds": 3
2450
+ }
2451
+ },
2452
+ {
2453
+ "sample_idx": 98,
2454
+ "valid": 0,
2455
+ "smiles": "C.CC(=O)O.CCC(CC)NCC(=O)O",
2456
+ "checks": {
2457
+ "connected": false,
2458
+ "attachment_sites": true,
2459
+ "ring_closure": true,
2460
+ "long_chain": true,
2461
+ "linker_atom_count": true,
2462
+ "protac_mw": true,
2463
+ "representational": true,
2464
+ "sa_score": true
2465
+ },
2466
+ "properties": {
2467
+ "mf": "C10H23NO4",
2468
+ "mw": 221.3,
2469
+ "polararea": 86.63,
2470
+ "xlogp": 1.58,
2471
+ "heavycnt": 15,
2472
+ "hbonddonor": 3,
2473
+ "hbondacc": 3,
2474
+ "rotbonds": 5
2475
+ }
2476
+ },
2477
+ {
2478
+ "sample_idx": 99,
2479
+ "valid": 0,
2480
+ "smiles": "CC.CCC=O.O=CC(CCCCCCC(=O)O)C(=O)O",
2481
+ "checks": {
2482
+ "connected": false,
2483
+ "attachment_sites": true,
2484
+ "ring_closure": true,
2485
+ "long_chain": true,
2486
+ "linker_atom_count": true,
2487
+ "protac_mw": true,
2488
+ "representational": true,
2489
+ "sa_score": true
2490
+ },
2491
+ "properties": {
2492
+ "mf": "C15H28O6",
2493
+ "mw": 304.38,
2494
+ "polararea": 108.74,
2495
+ "xlogp": 2.93,
2496
+ "heavycnt": 21,
2497
+ "hbonddonor": 2,
2498
+ "hbondacc": 4,
2499
+ "rotbonds": 10
2500
+ }
2501
+ }
2502
+ ]