Spaces:
Running
Running
Leader table per board; drug-withdrawal board with year-matched controls
Browse filesFront page now lists the current leader on every board, left blank where no entrant has submitted. Adds a post-marketing withdrawal board: withdrawal rate tracks approval decade, so controls are matched on approval year and a year-only predictor is required to score at chance before the board opens. Fixes two places that treated an unmeasured axis as zero.
- app.py +52 -3
- categories.json +3 -1
- data/withdrawal_card.json +44 -0
- data/withdrawal_test.json +1 -0
- i18n.js +12 -0
- index.html +53 -6
app.py
CHANGED
|
@@ -95,14 +95,27 @@ def _load_boards():
|
|
| 95 |
continue
|
| 96 |
nf = d.get("noise_floor") or {}
|
| 97 |
base = d.get("baselines") or {}
|
| 98 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 99 |
d["dataset_sha"] = _sha(p)
|
| 100 |
d["spec"] = SPEC
|
| 101 |
d["best_baseline"] = best
|
| 102 |
# ๋ชจ๋ธ ์ค์ฐจ๊ฐ ์คํ ์ค์ฐจ์ ๋ช ๋ฐฐ์ธ๊ฐ. 1 ์ ๋ถ์์๋ก ์ธก์ ํ๊ณ๋ค.
|
| 103 |
-
if best and nf.get("sd_single"):
|
| 104 |
d["error_over_noise"] = round(base[best]["mae"] / nf["sd_single"], 2)
|
| 105 |
-
if "์์ ์์ธก" in base and "Morgan+LightGBM" in base
|
|
|
|
|
|
|
| 106 |
d["beats_constant"] = base["Morgan+LightGBM"]["mae"] < base["์์ ์์ธก"]["mae"]
|
| 107 |
if d.get("n_test"):
|
| 108 |
d["near_pct"] = round(100.0 * d.get("near_threshold", 0) / d["n_test"], 1)
|
|
@@ -199,6 +212,42 @@ def api_categories():
|
|
| 199 |
"open": len(bd), "ledger": bool(HF_TOKEN)}}
|
| 200 |
|
| 201 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 202 |
@app.get("/api/board/{name}")
|
| 203 |
def api_board(name: str):
|
| 204 |
b = boards().get(name)
|
|
|
|
| 95 |
continue
|
| 96 |
nf = d.get("noise_floor") or {}
|
| 97 |
base = d.get("baselines") or {}
|
| 98 |
+
# ๋ถ๋ฅ ์ ์ฉ ๋ถ๋ฌธ์๋ MAE ๊ธฐ์ค์ ์ด ์๋ค. ๊ทธ๋ด ๋๋ AUROC ๊ฐ ๊ฐ์ฅ ๋์ ๊ฒ์ ์ต์ ์ผ๋ก ๋ณธ๋ค.
|
| 99 |
+
# ์๋ ๊ฐ์ 0 ์ผ๋ก ์น๋ฉด ๊ทธ ๋ถ๋ฌธ์ด "๊ฐ์ฅ ์ ํํ ๊ณณ"์ผ๋ก ํ์ ์ค๋ฅธ๋ค.
|
| 100 |
+
with_mae = {k: v for k, v in base.items() if v.get("mae") is not None}
|
| 101 |
+
if with_mae:
|
| 102 |
+
best = min(with_mae, key=lambda k: with_mae[k]["mae"])
|
| 103 |
+
d["metric"] = "mae"
|
| 104 |
+
elif base:
|
| 105 |
+
best = max(base, key=lambda k: base[k].get("auroc") or 0)
|
| 106 |
+
d["metric"] = "auroc"
|
| 107 |
+
else:
|
| 108 |
+
best = None
|
| 109 |
+
d["metric"] = None
|
| 110 |
d["dataset_sha"] = _sha(p)
|
| 111 |
d["spec"] = SPEC
|
| 112 |
d["best_baseline"] = best
|
| 113 |
# ๋ชจ๋ธ ์ค์ฐจ๊ฐ ์คํ ์ค์ฐจ์ ๋ช ๋ฐฐ์ธ๊ฐ. 1 ์ ๋ถ์์๋ก ์ธก์ ํ๊ณ๋ค.
|
| 114 |
+
if best and nf.get("sd_single") and d["metric"] == "mae":
|
| 115 |
d["error_over_noise"] = round(base[best]["mae"] / nf["sd_single"], 2)
|
| 116 |
+
if ("์์ ์์ธก" in base and "Morgan+LightGBM" in base
|
| 117 |
+
and base["Morgan+LightGBM"].get("mae") is not None
|
| 118 |
+
and base["์์ ์์ธก"].get("mae") is not None):
|
| 119 |
d["beats_constant"] = base["Morgan+LightGBM"]["mae"] < base["์์ ์์ธก"]["mae"]
|
| 120 |
if d.get("n_test"):
|
| 121 |
d["near_pct"] = round(100.0 * d.get("near_threshold", 0) / d["n_test"], 1)
|
|
|
|
| 212 |
"open": len(bd), "ledger": bool(HF_TOKEN)}}
|
| 213 |
|
| 214 |
|
| 215 |
+
@app.get("/api/leaders")
|
| 216 |
+
def api_leaders():
|
| 217 |
+
"""๋ถ๋ฌธ๋ง๋ค ํ์ฌ 1์ ํ ์ค. ์ฒซ ํ๋ฉด์์ ์ ์ฒด๋ฅผ ํ๋์ ๋ณด๊ธฐ ์ํ ๊ฒ์ด๋ค.
|
| 218 |
+
|
| 219 |
+
๋ถ๋ฌธ๋ณ๋ก ์์ํ๋ฅผ ๋ฐ๋ก ๋ถ๋ฅด๋ฉด ์๋ณต์ด ๋ถ๋ฌธ ์๋งํผ ๋์ด๋๋ค. ์ฌ๊ธฐ์ ํ ๋ฒ์ ๋ชจ์๋ค.
|
| 220 |
+
**์ฐธ๊ฐ ์ ์ถ์ด ์์ผ๋ฉด ๋น์์ ๋ณด๋ธ๋ค** - ๊ธฐ์ค์ ์ 1์ ์๋ฆฌ์ ์ํ์ง ์๋๋ค.
|
| 221 |
+
๊ธฐ์ค์ ์ ๋์ด์ผ ํ ์ ์ด์ง ์ฐ์น์๊ฐ ์๋๋ค.
|
| 222 |
+
"""
|
| 223 |
+
def build():
|
| 224 |
+
out = []
|
| 225 |
+
for name, b in boards().items():
|
| 226 |
+
rolled = ledger_read("leaderboard/%s.json" % name.lower(), {}) or {}
|
| 227 |
+
ent = (rolled.get("entries") or [])
|
| 228 |
+
top = ent[0] if ent else None
|
| 229 |
+
nf = (b.get("noise_floor") or {}).get("sd_single")
|
| 230 |
+
base = b.get("baselines") or {}
|
| 231 |
+
row = {"board": name, "n_test": b.get("n_test"),
|
| 232 |
+
"split_grade": b.get("split_grade"), "answer_grade": b.get("answer_grade"),
|
| 233 |
+
"noise_floor": nf, "entries": len(ent),
|
| 234 |
+
"baseline_best": (min((v["mae"] for v in base.values() if v.get("mae") is not None),
|
| 235 |
+
default=None)),
|
| 236 |
+
"baseline_best_auroc": (max((v["auroc"] for v in base.values()
|
| 237 |
+
if v.get("auroc") is not None), default=None)),
|
| 238 |
+
"leader": None}
|
| 239 |
+
if top:
|
| 240 |
+
row["leader"] = {"method": top.get("method"), "user": top.get("user"),
|
| 241 |
+
"mae": top.get("mae"), "auroc": top.get("auroc"),
|
| 242 |
+
"verified": bool(top.get("verified")), "leak": top.get("leak")}
|
| 243 |
+
out.append(row)
|
| 244 |
+
out.sort(key=lambda r: (r["leader"] is None, -(r["n_test"] or 0)))
|
| 245 |
+
return out
|
| 246 |
+
rows = cached("leaders", 60, build)
|
| 247 |
+
return {"spec": SPEC, "n": len(rows), "rows": rows,
|
| 248 |
+
"held": sum(1 for r in rows if r["leader"])}
|
| 249 |
+
|
| 250 |
+
|
| 251 |
@app.get("/api/board/{name}")
|
| 252 |
def api_board(name: str):
|
| 253 |
b = boards().get(name)
|
categories.json
CHANGED
|
@@ -122,7 +122,9 @@
|
|
| 122 |
"icon": "๐ฅ",
|
| 123 |
"desc": "์ฌ๋ ๋ชธ์์์ ๋๋ ยท ์ฝ๋ฌผ ์ถฉ๋ ยท ์ฉ๋. ๊ฒจ๋ฃฐ ํ๊ฐ ์์ง ์๋ ์๋ฆฌ",
|
| 124 |
"planned": 6,
|
| 125 |
-
"boards": [
|
|
|
|
|
|
|
| 126 |
"desc_en": "Human exposure, drug-drug interaction and dose โ endpoints with no leaderboard yet"
|
| 127 |
},
|
| 128 |
{
|
|
|
|
| 122 |
"icon": "๐ฅ",
|
| 123 |
"desc": "์ฌ๋ ๋ชธ์์์ ๋๋ ยท ์ฝ๋ฌผ ์ถฉ๋ ยท ์ฉ๋. ๊ฒจ๋ฃฐ ํ๊ฐ ์์ง ์๋ ์๋ฆฌ",
|
| 124 |
"planned": 6,
|
| 125 |
+
"boards": [
|
| 126 |
+
"Withdrawal"
|
| 127 |
+
],
|
| 128 |
"desc_en": "Human exposure, drug-drug interaction and dose โ endpoints with no leaderboard yet"
|
| 129 |
},
|
| 130 |
{
|
data/withdrawal_card.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"board": "Withdrawal",
|
| 3 |
+
"target": "โ",
|
| 4 |
+
"type": "์ํ ํ ํด์ถ ์ฌ๋ถ",
|
| 5 |
+
"cut": null,
|
| 6 |
+
"threshold": 0.5,
|
| 7 |
+
"n_train": 408,
|
| 8 |
+
"n_test": 184,
|
| 9 |
+
"positive_rate": 0.27717391304347827,
|
| 10 |
+
"noise_floor": {
|
| 11 |
+
"sd_single": 0.044457723625306804,
|
| 12 |
+
"pairs": 400,
|
| 13 |
+
"compounds": 184,
|
| 14 |
+
"median": 0.044457723625306804,
|
| 15 |
+
"mean": 0.044457723625306804,
|
| 16 |
+
"p90": 0.07291066674550316,
|
| 17 |
+
"kind": "metric_bootstrap"
|
| 18 |
+
},
|
| 19 |
+
"control_year_auroc": 0.5038425249573899,
|
| 20 |
+
"baselines": {
|
| 21 |
+
"์์ ์์ธก": {
|
| 22 |
+
"auroc": 0.5,
|
| 23 |
+
"prauc": 0.27717391304347827,
|
| 24 |
+
"mae": null
|
| 25 |
+
},
|
| 26 |
+
"์ต๊ทผ์ ์ด์": {
|
| 27 |
+
"auroc": 0.5530738611233966,
|
| 28 |
+
"prauc": 0.3059462915601023,
|
| 29 |
+
"mae": null
|
| 30 |
+
},
|
| 31 |
+
"Morgan+LightGBM": {
|
| 32 |
+
"auroc": 0.5928055432699395,
|
| 33 |
+
"prauc": 0.36923077992989084,
|
| 34 |
+
"mae": null
|
| 35 |
+
}
|
| 36 |
+
},
|
| 37 |
+
"near_threshold": 0,
|
| 38 |
+
"split_grade": "S",
|
| 39 |
+
"split_grade_note": "๊ณจ๊ฒฉ ๋ถํ ยท ์น์ธ ์ฐ๋ ์ง์ง๊ธฐ",
|
| 40 |
+
"answer_grade": "P1",
|
| 41 |
+
"answer_grade_note": "ํด์ถ ๊ธฐ๋ก์ ๊ณต๊ฐ ์๋ฃ๋ค. ์กฐํ ๋ฐฉ์ด๋ 8์กฐ๊ฐ ๋ด๋นํ๋ค",
|
| 42 |
+
"source": "ChEMBL_37 ์น์ธยทํด์ถ ๊ธฐ๋ก",
|
| 43 |
+
"built": "2026-08-22"
|
| 44 |
+
}
|
data/withdrawal_test.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"board": "Withdrawal", "n": 184, "source": "ChEMBL_37 (EMBL-EBI)", "source_url": "https://www.ebi.ac.uk/chembl/", "license": "CC BY-SA 3.0 Unported", "license_url": "https://creativecommons.org/licenses/by-sa/3.0/", "attribution": "Derived from ChEMBL (EMBL-EBI), licensed CC BY-SA 3.0.", "note": "๊ตฌ์กฐ์ ์น์ธ ์ฐ๋๋ง ํฌํจํ๋ค. ํด์ถ ์ฌ๋ถ๋ ๋ฐฐํฌํ์ง ์๋๋ค.", "compounds": [{"compound_id": "LB-2D0DB1BD3BB2", "smiles": "CC(C)(C)c1nc(-c2cccc(NS(=O)(=O)c3c(F)cccc3F)c2F)c(-c2ccnc(N)n2)s1", "approval_year": 2013}, {"compound_id": "LB-D55611596516", "smiles": "CC(C)[C@H](N)C(=O)OCCOCn1cnc2c(=O)nc(N)[nH]c21.Cl", "approval_year": 1995}, {"compound_id": "LB-4D5B0A121C97", "smiles": "NC1=NC(=O)C(c2ccccc2)O1", "approval_year": 1975}, {"compound_id": "LB-B7773C13AC21", "smiles": "CN1CCN(CCCN2c3ccccc3Sc3ccc(C(F)(F)F)cc32)CC1.Cl.Cl", "approval_year": 1959}, {"compound_id": "LB-75B87500DB03", "smiles": "CC(=O)c1ccc2c(c1)N(CCCN1CCN(CCO)CC1)c1ccccc1S2.O=C(O)/C=C\\C(=O)O.O=C(O)/C=C\\C(=O)O", "approval_year": 1961}, {"compound_id": "LB-C1B1F3F49953", "smiles": "CCCCCCC(=O)OCCN1CCN(CCCN2c3ccccc3Sc3ccc(C(F)(F)F)cc32)CC1", "approval_year": 1967}, {"compound_id": "LB-6C203EC954E3", "smiles": "O=C(O)COc1ccc(C(=O)c2cccs2)c(Cl)c1Cl", "approval_year": 1979}, {"compound_id": "LB-29C4F7252DBC", "smiles": "CC(C(=O)O)c1ccc(C(=O)c2cccs2)cc1", "approval_year": 1985}, {"compound_id": "LB-B8CDC264D9A8", "smiles": "Nc1ccc(/N=N/c2ccccc2)c(N)n1", "approval_year": 1987}, {"compound_id": "LB-9B483E11B27D", "smiles": "CC(C)(O/N=C(\\C(=O)N[C@@H]1C(=O)N2C(C(=O)[O-])=C(C[n+]3ccccc3)CS[C@H]12)c1csc(N)n1)C(=O)[O-].[Na+]", "approval_year": 1989}, {"compound_id": "LB-32993042D2E8", "smiles": "N#Cc1cccc([C@@H](NCC2CC2)c2ccc(F)c(NC(=O)c3cc(C(F)(F)F)nn3-c3cccc(CN)c3)c2)c1", "approval_year": 2020}, {"compound_id": "LB-A727206109F5", "smiles": "O=C1NCCN1CCN1CCC(c2cn(-c3ccc(F)cc3)c3ccc(Cl)cc23)CC1", "approval_year": 1996}, {"compound_id": "LB-EBFFF30B78DC", "smiles": "Cl.O=C1CC[C@@]2(O)[C@H]3Cc4ccc(O)c5c4[C@@]2(CCN3CC2CC2)[C@H]1O5", "approval_year": 1984}, {"compound_id": "LB-57F338637FEA", "smiles": "COc1ccc(CCN2CCC(Nc3nc4ccccc4n3Cc3ccc(F)cc3)CC2)cc1", "approval_year": 1988}, {"compound_id": "LB-FB0A96B47472", "smiles": "O=C1O[C@H]([C@@H](O)CO)C(O)=C1O", "approval_year": 1985}, {"compound_id": "LB-5DA2740C7C19", "smiles": "CCN[C@@H]1C[C@H](N)[C@@H](O[C@H]2OC(CN)=CC[C@H]2N)[C@H](O)[C@H]1O[C@H]1OC[C@](C)(O)[C@H](NC)[C@H]1O", "approval_year": 1983}, {"compound_id": "LB-C52555B25E23", "smiles": "O=c1[nH]c(=O)n([C@H]2C[C@H](O)[C@@H](CO)O2)cc1F", "approval_year": 1970}, {"compound_id": "LB-75BBADA0C099", "smiles": "CO/N=C(\\C(=O)N[C@@H]1C(=O)N2C(C(=O)OC(C)OC(C)=O)=C(COC(N)=O)CS[C@H]12)c1ccco1", "approval_year": 1987}, {"compound_id": "LB-09548458B21C", "smiles": "C=CC(=O)N1CCC([C@@H]2CCNc3c(C(N)=O)c(-c4ccc(Oc5ccccc5)cc4)nn32)CC1", "approval_year": 2019}, {"compound_id": "LB-A041C8F7DA86", "smiles": "CNC(=O)c1c(I)c(C(=O)NCC(=O)Nc2c(I)c(C(=O)[O-])c(I)c(C(=O)NCCO)c2I)c(I)c(N(C)C(C)=O)c1I.[Na+]", "approval_year": 1985}, {"compound_id": "LB-F4EBF5EB4DBB", "smiles": "CN(C)CCC=C1c2ccccc2CCc2ccccc21", "approval_year": 1961}, {"compound_id": "LB-DFAE1B675DC7", "smiles": "CNCCC=C1c2ccccc2CCc2ccccc21", "approval_year": 1964}, {"compound_id": "LB-BBCAA75E1A5C", "smiles": "O=C(NCC1CCCCN1)c1cc(OCC(F)(F)F)ccc1OCC(F)(F)F", "approval_year": 1985}, {"compound_id": "LB-3367D3EF3B0F", "smiles": "Cc1cccc(C)c1NC(=O)C1CCCCN1C", "approval_year": 1960}, {"compound_id": "LB-35BD9836E948", "smiles": "COc1ccc2c(c1)c(CC(=O)O)c(C)n2C(=O)c1ccc(Cl)cc1", "approval_year": 1965}, {"compound_id": "LB-B13BF1A2674A", "smiles": "CC(C)n1nccc1-c1ncccc1COc1cccc(O)c1C=O", "approval_year": 2019}, {"compound_id": "LB-FB8CCF9EDFE8", "smiles": "CNCCCN1c2ccccc2CCc2ccccc21.Cl", "approval_year": 1964}, {"compound_id": "LB-D06B630E822A", "smiles": "COc1cc(C(=O)NS(=O)(=O)c2ccccc2C)ccc1Cc1cn(C)c2ccc(NC(=O)OC3CCCC3)cc12", "approval_year": 1996}, {"compound_id": "LB-8B19F412232A", "smiles": "CCCS(=O)(=O)N[C@H]1C[C@@H](N(C)c2ncnc3[nH]ccc23)C1", "approval_year": 2021}, {"compound_id": "LB-A840DD1B169A", "smiles": "CC[N+](C)(CC)CCOC(=O)C1c2ccccc2Oc2ccccc21", "approval_year": 1951}, {"compound_id": "LB-74C66313102D", "smiles": "COc1cc(N)c(Cl)cc1C(=O)NC1CCN(CCCOc2ccc(F)cc2)CC1OC", "approval_year": 1993}, {"compound_id": "LB-F5705D78392C", "smiles": "COc1cc(N)c(Cl)cc1C(=O)NC1CCN(CCCOc2ccc(F)cc2)CC1OC.O", "approval_year": 1993}, {"compound_id": "LB-94E066FF6439", "smiles": "OCCOCCN1CCN(C(c2ccccc2)c2ccc(Cl)cc2)CC1", "approval_year": 1956}, {"compound_id": "LB-BB8564F0F37D", "smiles": "Cl.Cl.O=C(O)COCCN1CCN(C(c2ccccc2)c2ccc(Cl)cc2)CC1", "approval_year": 1995}, {"compound_id": "LB-3E77D0C64408", "smiles": "Cl.OC(CCN1CCCCC1)(c1ccccc1)C1CC2C=CC1C2", "approval_year": 1959}, {"compound_id": "LB-A03FBC571415", "smiles": "CC(O)C(=O)O.OC(CCN1CCCCC1)(c1ccccc1)C1CC2C=CC1C2", "approval_year": 1961}, {"compound_id": "LB-C49109F11770", "smiles": "CCOC(=O)c1ccc(C#Cc2ccc3c(c2)C(C)(C)CCS3)nc1", "approval_year": 1997}, {"compound_id": "LB-FFBC0D98BCF7", "smiles": "Cc1cnc(C(=O)NCCc2ccc(S(=O)(=O)NC(=O)NC3CCCCC3)cc2)cn1", "approval_year": 1984}, {"compound_id": "LB-07B624AF8A5A", "smiles": "CC[C@@H](CO)NC(=O)[C@@H]1C=C2c3cccc4c3c(cn4C)C[C@H]2N(C)C1", "approval_year": 1962}, {"compound_id": "LB-81267B14DD17", "smiles": "C[C@H]1O[C@@H](O[C@H]2CC[C@@]3(C)[C@H](CC[C@@H]4[C@@H]3C[C@@H](O)[C@]3(C)[C@@H](C5=CC(=O)OC5)CC[C@]43O)C2)C[C@H](O)[C@@H]1O[C@H]1C[C@H](O)[C@H](O[C@H]2C[C@H](O)[C@H](O[C@@H]3O[C@H](CO)[C@@H](O)[C@H](O)[C@H]3O)[C@@H](C)O2)[C@@H](C)O1", "approval_year": 1982}, {"compound_id": "LB-7D3CCBA9DA94", "smiles": "CCCc1cc(=O)[nH]c(=S)[nH]1", "approval_year": 1947}, {"compound_id": "LB-D71259C5BD67", "smiles": "CC(Cc1cccc(C(F)(F)F)c1)NCCOC(=O)c1ccccc1", "approval_year": 1974}, {"compound_id": "LB-582B0B9A109C", "smiles": "COC(=O)C1=C(C)NC(C)=C(C(=O)OCCN(C)Cc2ccccc2)C1c1cccc([N+](=O)[O-])c1", "approval_year": 1988}, {"compound_id": "LB-4B61F62E685B", "smiles": "c1ccc(CC2=NCCN2)cc1", "approval_year": 1985}, {"compound_id": "LB-17F76D36DF64", "smiles": "Cc1cc(C(C)(C)C)c(O)c(C)c1CC1=NCCN1.Cl", "approval_year": 1986}, {"compound_id": "LB-8C3A4C712E71", "smiles": "CCN[C@H]1C[C@H](C)S(=O)(=O)c2sc(S(N)(=O)=O)cc21", "approval_year": 1994}, {"compound_id": "LB-F94346F87A5E", "smiles": "CC1(C)S[C@@H]2[C@H](NC(=O)C(C(=O)Oc3ccc4c(c3)CCC4)c3ccccc3)C(=O)N2[C@H]1C(=O)[O-].[Na+]", "approval_year": 1972}, {"compound_id": "LB-04E7B04E595C", "smiles": "C#C[C@]1(O)CC[C@H]2[C@@H]3CCC4=C(CCC(=O)C4)[C@H]3CC[C@@]21C", "approval_year": 1961}, {"compound_id": "LB-1D9407CA58B6", "smiles": "CN(C)[C@@H]1C([O-])=C(C(N)=O)C(=O)[C@@]2(O)C(O)=C3C(=O)c4c(O)cccc4[C@@](C)(O)[C@H]3[C@H](O)[C@@H]12.CN(C)[C@@H]1C([O-])=C(C(N)=O)C(=O)[C@@]2(O)C(O)=C3C(=O)c4c(O)cccc4[C@@](C)(O)[C@H]3[C@H](O)[C@@H]12.[Ca+2]", "approval_year": 1982}, {"compound_id": "LB-A7FBA97A04EC", "smiles": "CC(CN1c2ccccc2Sc2ccccc21)N(C)C", "approval_year": 1951}, {"compound_id": "LB-1BFCE96D6283", "smiles": "CN(C)CCCN1c2ccccc2Sc2ccc(Cl)cc21.Cl", "approval_year": 1957}, {"compound_id": "LB-EBE581D86602", "smiles": "CN(C)CCCN1c2ccccc2Sc2ccccc21.Cl", "approval_year": 1956}, {"compound_id": "LB-AAB0653AB330", "smiles": "CN(C)CCCN1c2ccccc2Sc2ccc(C(F)(F)F)cc21.Cl", "approval_year": 1957}, {"compound_id": "LB-FE0915B15B45", "smiles": "CCC(=O)c1ccc2c(c1)N(CC(C)N(C)C)c1ccccc1S2", "approval_year": 1960}, {"compound_id": "LB-C5E7336A86C0", "smiles": "N[C@@H]1C[C@H]1c1ccccc1.N[C@H]1C[C@@H]1c1ccccc1.O=S(=O)(O)O", "approval_year": 1961}, {"compound_id": "LB-BDA884938E52", "smiles": "COc1ccnc(C[S+]([O-])c2nc3cc(OC(F)F)ccc3[nH]2)c1OC", "approval_year": 2000}, {"compound_id": "LB-5C9856DB867A", "smiles": "CC(=O)OCC(CCn1cnc2cnc(N)nc21)COC(C)=O", "approval_year": 1994}, {"compound_id": "LB-A7E924303334", "smiles": "Nc1nc([O-])c2ncn(CCC(CO)CO)c2n1.[Na+]", "approval_year": 1996}, {"compound_id": "LB-8F3EC627D603", "smiles": "CCOc1ccc(Cc2cc([C@@H]3O[C@H](SC)[C@@H](O)[C@H](O)[C@H]3O)ccc2Cl)cc1", "approval_year": 2019}, {"compound_id": "LB-8B8E9E47CC4A", "smiles": "CN1C2CCCC1CC(NC(=O)c1nn(C)c3ccccc13)C2.Cl", "approval_year": 1993}, {"compound_id": "LB-37AB46F75E08", "smiles": "CCCC(C)C1(CC)C(=O)N=C([O-])NC1=O.[Na+]", "approval_year": 1973}, {"compound_id": "LB-3F9DEE4AC2B5", "smiles": "COc1ccc(CCN(C)CCCC(C#N)(c2ccc(OC)c(OC)c2)C(C)C)cc1OC", "approval_year": 1981}, {"compound_id": "LB-D7D06F3E8EF6", "smiles": "Cl.Oc1ccc(CCCCNC[C@H](O)c2ccc(O)c(O)c2)cc1", "approval_year": 1997}, {"compound_id": "LB-4E51D1B8AEF2", "smiles": "COc1ccc(CC2c3cc(OC)c(OC)cc3CC[N+]2(C)CCC(=O)OCCCCCOC(=O)CC[N+]2(C)CCc3cc(OC)c(OC)cc3C2Cc2ccc(OC)c(OC)c2)cc1OC", "approval_year": 1983}, {"compound_id": "LB-C518E61AA8CA", "smiles": "C=CCC1(C(C)CCC)C(=O)NC(=O)NC1=O", "approval_year": 1950}, {"compound_id": "LB-A3AAAA80475A", "smiles": "CCCC(C)C1(CC)C(=O)NC(=O)NC1=O", "approval_year": 1973}, {"compound_id": "LB-0561A13CBCB7", "smiles": "NC12CC3CC(CC(C3)C1)C2", "approval_year": 1968}, {"compound_id": "LB-51506A735086", "smiles": "CC12CC3CC(C)(C1)CC(N)(C3)C2.Cl", "approval_year": 2002}, {"compound_id": "LB-05043FA5E86E", "smiles": "CC(=O)Oc1ccccc1C(=O)O", "approval_year": 1950}, {"compound_id": "LB-4A02EC0F9338", "smiles": "Nc1ccc(C(=O)O)c(O)c1", "approval_year": 1950}, {"compound_id": "LB-3EFC271C8F61", "smiles": "CCC(Cc1c(I)cc(I)c(N)c1I)C(=O)O", "approval_year": 1951}, {"compound_id": "LB-74D586C7FFDF", "smiles": "O=C(N[C@H](CO)[C@H](O)c1ccc([N+](=O)[O-])cc1)C(Cl)Cl", "approval_year": 1950}, {"compound_id": "LB-E5731E0BDA1D", "smiles": "CCN(CC)CC(=O)Nc1c(C)cccc1C", "approval_year": 1948}, {"compound_id": "LB-3841656AD8C7", "smiles": "CCCN(CCC)S(=O)(=O)c1ccc(C(=O)O)cc1", "approval_year": 1951}, {"compound_id": "LB-E6E8F39FA856", "smiles": "CCCOc1ccc(C(=O)OCCN(CC)CC)cc1N", "approval_year": 1953}, {"compound_id": "LB-50788BD23AC0", "smiles": "COc1ccccc1OCC(O)COC(N)=O", "approval_year": 1957}, {"compound_id": "LB-7521FD2CCCE5", "smiles": "CC(N)C(O)c1ccccc1", "approval_year": 1958}, {"compound_id": "LB-526E93E2F0F0", "smiles": "CC(N)C(O)c1ccccc1.Cl", "approval_year": 1958}, {"compound_id": "LB-543775A59053", "smiles": "CC(C)(N)Cc1ccccc1", "approval_year": 1959}, {"compound_id": "LB-7E6F98419121", "smiles": "CCN(CC)C(C)C(=O)c1ccccc1.Cl", "approval_year": 1959}, {"compound_id": "LB-B74FF978CE13", "smiles": "CCN(CC)C(C)C(=O)c1ccccc1", "approval_year": 1959}, {"compound_id": "LB-476B2232695C", "smiles": "CNC(=O)c1c(I)c(NC(C)=O)c(I)c(C(=O)O)c1I", "approval_year": 1962}, {"compound_id": "LB-CB2CFBD8C366", "smiles": "CC(CN(C)C)C(C)(O)Cc1ccc(Cl)cc1", "approval_year": 1961}, {"compound_id": "LB-23EEC4A6877A", "smiles": "CCOC(=O)[C@@](C)(N)Cc1ccc(O)c(O)c1", "approval_year": 1962}, {"compound_id": "LB-4E0A3DF30545", "smiles": "CCCNC(C)C(=O)Nc1ccccc1C.Cl", "approval_year": 1965}, {"compound_id": "LB-D7CC7B630792", "smiles": "CNC[C@H](O)c1ccc(O)c(O)c1.O=C(O)C(O)C(O)C(=O)O", "approval_year": 1965}, {"compound_id": "LB-8073F3A4E5A8", "smiles": "CCNC(C)Cc1cccc(C(F)(F)F)c1", "approval_year": 1963}, {"compound_id": "LB-1C764F41CA37", "smiles": "CCNC(C)Cc1cccc(C(F)(F)F)c1.Cl", "approval_year": 1963}, {"compound_id": "LB-71FAD8F96658", "smiles": "CCOC(=O)C(C)(C)Oc1ccc(Cl)cc1", "approval_year": 1967}, {"compound_id": "LB-9573ABD842F6", "smiles": "CCCC(=O)Nc1c(I)cc(I)c(CC(CC)C(=O)O)c1I", "approval_year": 1969}, {"compound_id": "LB-F04252C02108", "smiles": "CC(C)NCC(O)c1cc(O)cc(O)c1", "approval_year": 1973}, {"compound_id": "LB-0F2D5BADD1A1", "smiles": "NCCc1ccc(O)c(O)c1", "approval_year": 1974}, {"compound_id": "LB-F0A5164EBABD", "smiles": "CC(C)(C)NCC(O)c1cc(O)cc(O)c1", "approval_year": 1974}, {"compound_id": "LB-871F8EFE80D0", "smiles": "N[C@@H](Cc1ccc(O)c(O)c1)C(=O)O", "approval_year": 1970}, {"compound_id": "LB-FBAA681E876C", "smiles": "C[C@@](Cc1ccc(O)c(O)c1)(NN)C(=O)O.O", "approval_year": 1975}, {"compound_id": "LB-74891FAF939F", "smiles": "CNC[C@H](O)c1cccc(O)c1.O=C(O)C(O)C(O)C(=O)O", "approval_year": 1973}, {"compound_id": "LB-3F0378FC379F", "smiles": "CCCCCCCCNC(C)C(O)c1ccc(SC(C)C)cc1", "approval_year": 1979}, {"compound_id": "LB-56F08422E2F3", "smiles": "C#CCN(C)Cc1ccccc1.Cl", "approval_year": 1982}, {"compound_id": "LB-9A08D759B56C", "smiles": "CC[N+](CC)(CC)CCOc1cccc(OCC[N+](CC)(CC)CC)c1OCC[N+](CC)(CC)CC.[I-].[I-].[I-]", "approval_year": 1982}, {"compound_id": "LB-2011E87B145C", "smiles": "Nc1ccc(C(=O)NCC(=O)O)cc1", "approval_year": 1982}, {"compound_id": "LB-BDA8C371A35C", "smiles": "N[C@@H](Cc1ccc(O)cc1)C(=O)O", "approval_year": 1982}, {"compound_id": "LB-D5EBC3A2E1CB", "smiles": "CCOC(=O)/C=C(C)/C=C/C=C(C)/C=C/c1c(C)cc(OC)c(C)c1C", "approval_year": 1986}, {"compound_id": "LB-B37DAE18B3DB", "smiles": "COC(=O)CCc1ccc(OCC(O)CNC(C)C)cc1", "approval_year": 1986}, {"compound_id": "LB-94934B9D7D53", "smiles": "CC(C)c1cccc(C(C)C)c1O", "approval_year": 1989}, {"compound_id": "LB-C832261F584B", "smiles": "C=CCOc1ccccc1OCC(O)CNC(C)C.Cl", "approval_year": 1983}, {"compound_id": "LB-760942CF59A5", "smiles": "COC(=O)CCc1ccc(OCC(O)CNC(C)C)cc1.Cl", "approval_year": 1986}, {"compound_id": "LB-B73BE9F05D21", "smiles": "O=C([O-])Cc1ccccc1.[Na+]", "approval_year": 1987}, {"compound_id": "LB-496EA1B8FF5F", "smiles": "Cl.N=C(N)NC(=O)Cc1c(Cl)cccc1Cl", "approval_year": 1986}, {"compound_id": "LB-A4A91A00836E", "smiles": "CC(=O)N(CC(O)CO)c1c(I)c(C(=O)NCC(O)CO)c(I)c(C(=O)NCC(O)CO)c1I", "approval_year": 1985}, {"compound_id": "LB-9E8B6BB6F8E9", "smiles": "Nc1ccc(O)c(C(=O)O)c1", "approval_year": 1987}, {"compound_id": "LB-CA34BE5C6F4D", "smiles": "CC(=O)Oc1c(C)cc(OCC(O)CNC(C)C)c(C)c1C", "approval_year": 1989}, {"compound_id": "LB-CE99EEEF9B9D", "smiles": "CC(=O)Oc1c(C)cc(OCC(O)CNC(C)C)c(C)c1C.Cl", "approval_year": 1989}, {"compound_id": "LB-A501076E701F", "smiles": "NC(=O)OCC(COC(N)=O)c1ccccc1", "approval_year": 1993}, {"compound_id": "LB-ADB003C8EB53", "smiles": "CC(C)Cc1ccc([C@H](C)C(=O)O)cc1", "approval_year": 1994}, {"compound_id": "LB-9FF0888ED943", "smiles": "N#Cc1cc(NC(=O)C(=O)O)c(Cl)c(NC(=O)C(=O)O)c1", "approval_year": 1993}, {"compound_id": "LB-793A2D8AFC67", "smiles": "O=P(O)(O)C(Sc1ccc(Cl)cc1)P(=O)(O)O", "approval_year": 1997}, {"compound_id": "LB-56E579A43F4D", "smiles": "O=C([O-])CCCc1ccccc1.[Na+]", "approval_year": 1996}, {"compound_id": "LB-C387206677FF", "smiles": "C[C@H](N)Cc1ccccc1.O=C(O)[C@@H](O)[C@@H](O)[C@H](O)[C@@H](O)C(=O)O", "approval_year": 1996}, {"compound_id": "LB-2EC202613B71", "smiles": "COCCCC/C(=N\\OCCN)c1ccc(C(F)(F)F)cc1", "approval_year": 1994}, {"compound_id": "LB-A6EB0AF99B03", "smiles": "CC(C)(C)NC[C@H](O)c1ccc(O)c(CO)c1.Cl", "approval_year": 1999}, {"compound_id": "LB-009996B01551", "smiles": "CCN(C)C(=O)Oc1cccc([C@H](C)N(C)C)c1.O=C(O)[C@H](O)[C@@H](O)C(=O)O", "approval_year": 1998}, {"compound_id": "LB-ADE353CC89BF", "smiles": "Oc1ccc(O)cc1", "approval_year": 2002}, {"compound_id": "LB-18EDBA8120AC", "smiles": "Br.CC(NC(C)(C)C)C(=O)c1cccc(Cl)c1", "approval_year": 2008}, {"compound_id": "LB-82907546432B", "smiles": "CN[C@@H](C)[C@H](O)c1ccccc1", "approval_year": 2016}, {"compound_id": "LB-84E2CD64D954", "smiles": "COc1cc(/C=C/C(=O)N2CCN(CC(=O)N3CCCC3)CC2)cc(OC)c1OC", "approval_year": 1980}, {"compound_id": "LB-5F7A64267BAF", "smiles": "COC(=O)[C@H](c1ccccc1Cl)N1CCc2sccc2C1.O=S(=O)(O)c1ccccc1", "approval_year": 2009}, {"compound_id": "LB-85B99C10D1ED", "smiles": "O=P(O)(O)O.c1ccc(CN(CC2=NCCN2)c2ccccc2)cc1", "approval_year": 1994}, {"compound_id": "LB-B5DFB6561F21", "smiles": "C=CC[N+]1([C@H]2C[C@H]3[C@@H]4CC[C@H]5C[C@H](OC(C)=O)[C@@H](N6CCCCC6)C[C@]5(C)[C@H]4CC[C@]3(C)[C@H]2OC(=O)CC)CCCCC1.[Br-]", "approval_year": 1999}, {"compound_id": "LB-6271E9C58BCF", "smiles": "C=CC[N+]1([C@H]2C[C@H]3[C@@H]4CC[C@H]5C[C@H](OC(C)=O)[C@@H](N6CCCCC6)C[C@]5(C)[C@H]4CC[C@]3(C)[C@H]2OC(=O)CC)CCCCC1", "approval_year": 1999}, {"compound_id": "LB-CBE894929602", "smiles": "Cc1nnc2n1-c1sc(Br)cc1C(c1ccccc1Cl)=NC2", "approval_year": 1984}, {"compound_id": "LB-30D3C4A88162", "smiles": "Clc1ccc(COC(Cn2ccnc2)c2ccc(Cl)cc2Cl)cc1", "approval_year": 1982}, {"compound_id": "LB-73851B154805", "smiles": "CC(C(=O)O)c1ccc2oc(-c3ccc(Cl)cc3)nc2c1", "approval_year": 1982}, {"compound_id": "LB-9AA2EDE5E4AA", "smiles": "CN1CC[C@]23CCCC[C@H]2[C@H]1Cc1ccc(O)cc13.O.O.O=C(O)C(O)C(O)C(=O)O", "approval_year": 1991}, {"compound_id": "LB-1194545589EC", "smiles": "CC1=C(/C=C/C(C)=C/C=C/C(C)=C/C=C/C=C(C)/C=C/C=C(C)/C=C/C2=C(C)CCCC2(C)C)C(C)(C)CCC1", "approval_year": 1982}, {"compound_id": "LB-CBCA79841B80", "smiles": "CC(C)Oc1ccc(-c2nn([C@@H](C)c3oc4ccc(F)cc4c(=O)c3-c3cccc(F)c3)c3ncnc(N)c23)cc1F", "approval_year": 2021}, {"compound_id": "LB-2E73E20A28D7", "smiles": "C[N+]12CCC(CC1)C(OC(=O)C(O)(c1ccccc1)c1ccccc1)C2", "approval_year": 1982}, {"compound_id": "LB-D21636830F4E", "smiles": "CCC1(c2ccccc2)C(=O)NC(=O)NC1=O", "approval_year": 2022}, {"compound_id": "LB-44EC44B6BAB3", "smiles": "N=C(N)c1ccc(/C=C/c2ccc(C(=N)N)cc2O)cc1.O=S(=O)(O)CCO.O=S(=O)(O)CCO", "approval_year": 1953}, {"compound_id": "LB-68C25A488211", "smiles": "Cc1c(C)c2c(c(C)c1O)CCC(C)(COc1ccc(CC3SC(=O)NC3=O)cc1)O2", "approval_year": 1997}, {"compound_id": "LB-39DEBA2D2FB4", "smiles": "Cc1cc2c(cc1CC(=O)c1sccc1S(=O)(=O)[N-]c1onc(C)c1Cl)OCO2.[Na+]", "approval_year": 2006}, {"compound_id": "LB-5238256F5C50", "smiles": "COc1ccc(C2C(=O)c3ccccc3C2=O)cc1", "approval_year": 1957}, {"compound_id": "LB-D1B07C4677CD", "smiles": "CCc1nn(CCCN2CCN(c3cccc(Cl)c3)CC2)c(=O)n1CCOc1ccccc1", "approval_year": 1994}, {"compound_id": "LB-D34B460DDAA5", "smiles": "CCc1nn(CCCN2CCN(c3cccc(Cl)c3)CC2)c(=O)n1CCOc1ccccc1.Cl", "approval_year": 1994}, {"compound_id": "LB-C5B6734131A6", "smiles": "NS(=O)(=O)c1cc2c(cc1Cl)N=C[N-]S2(=O)=O.[Na+]", "approval_year": 1958}, {"compound_id": "LB-EB7C46CC9C2E", "smiles": "CCCN[C@H]1CCc2nc(N)sc2C1", "approval_year": 1997}, {"compound_id": "LB-0D56D3142136", "smiles": "CCCCC(=O)N(Cc1ccc(-c2ccccc2-c2nnn[nH]2)cc1)[C@H](C(=O)O)C(C)C", "approval_year": 1996}, {"compound_id": "LB-308EA583F473", "smiles": "CC[C@H]1[C@@H](O)[C@@H]2[C@H](CC[C@]3(C)[C@@H]([C@H](C)CCC(=O)O)CC[C@@H]23)[C@@]2(C)CC[C@@H](O)C[C@@H]12", "approval_year": 2016}, {"compound_id": "LB-CE41A9432FB2", "smiles": "C[C@H](CCC(=O)O)[C@H]1CC[C@H]2[C@@H]3CC[C@@H]4C[C@H](O)CC[C@]4(C)[C@H]3C[C@H](O)[C@]12C", "approval_year": 2015}, {"compound_id": "LB-82D843DC404A", "smiles": "CNS(=O)(=O)CCc1ccc2[nH]cc(C3CCN(C)CC3)c2c1.Cl", "approval_year": 1998}, {"compound_id": "LB-29B5C740B1D4", "smiles": "N[C@@H](C(=O)N[C@@H]1C(=O)N2C(C(=O)O)=C(Cl)CC[C@H]12)c1ccccc1.O", "approval_year": 1991}, {"compound_id": "LB-A6772BD10653", "smiles": "O[C@@H]1CO[C@H]2[C@@H]1OC[C@@H]2O", "approval_year": 1974}, {"compound_id": "LB-E80DB013A19E", "smiles": "O=[N+]([O-])O[C@H]1CO[C@H]2[C@@H]1OC[C@H]2O[N+](=O)[O-]", "approval_year": 1986}, {"compound_id": "LB-341E08C6D340", "smiles": "CC(C(=O)O)c1ccc2c(c1)[nH]c1ccc(Cl)cc12", "approval_year": 1987}, {"compound_id": "LB-1A95AAFE3CB6", "smiles": "Fc1ccccc1C1=NCC(=S)N(CC(F)(F)F)c2ccc(Cl)cc21", "approval_year": 1985}, {"compound_id": "LB-CDC4096AC1B4", "smiles": "Cl[C@H]1[C@H](Cl)[C@@H](Cl)[C@@H](Cl)[C@H](Cl)[C@H]1Cl", "approval_year": 1974}, {"compound_id": "LB-2ABD2C74649B", "smiles": "C#CC1(OC(N)=O)CCCCC1", "approval_year": 1982}, {"compound_id": "LB-0F9854AC87A8", "smiles": "Cc1cc2c(s1)Nc1ccccc1N=C2N1CCN(C)CC1.O.O=C(O)c1cc2ccccc2c(Cc2c(O)c(C(=O)O)cc3ccccc23)c1O", "approval_year": 2008}, {"compound_id": "LB-97BDA723BA60", "smiles": "CC1(C)O[C@@H]2C[C@H]3[C@@H]4C[C@H](F)C5=CC(=O)C=C[C@]5(C)[C@@]4(F)[C@@H](O)C[C@]3(C)[C@]2(C(=O)CO)O1", "approval_year": 1963}, {"compound_id": "LB-E2D8D6568994", "smiles": "CC(C)(C)CC(=O)OCC(=O)[C@@]12OC(C)(C)O[C@@H]1C[C@H]1[C@@H]3CCC4=CC(=O)C=C[C@]4(C)[C@@]3(F)[C@@H](O)C[C@@]12C", "approval_year": 1969}, {"compound_id": "LB-5A74E6A446AF", "smiles": "CC(=O)OCC(=O)[C@@]12OC(C)(C)O[C@@H]1C[C@H]1[C@@H]3C[C@H](F)C4=CC(=O)C=C[C@]4(C)[C@@]3(F)[C@@H](O)C[C@@]12C", "approval_year": 1971}, {"compound_id": "LB-D11E9E238C84", "smiles": "CCCC1O[C@@H]2C[C@H]3[C@@H]4CCC5=CC(=O)C=C[C@]5(C)[C@H]4[C@@H](O)C[C@]3(C)[C@]2(C(=O)CO)O1", "approval_year": 1994}, {"compound_id": "LB-7447E2F8B9CB", "smiles": "O=C1NC(=O)C(c2ccccc2)(c2ccccc2)N1", "approval_year": 1953}, {"compound_id": "LB-5DC377F3A031", "smiles": "O=C1OCCN1/N=C/c1ccc([N+](=O)[O-])o1", "approval_year": 1958}, {"compound_id": "LB-44232DEE3E57", "smiles": "CC[C@H]1OC(=O)[C@H](C)[C@@H](O[C@H]2C[C@@](C)(OC)[C@@H](O)[C@H](C)O2)[C@H](C)[C@@H](O[C@@H]2O[C@H](C)C[C@H](N(C)C)[C@H]2O)[C@](C)(O)C[C@@H](C)CN(C)[C@H](C)[C@@H](O)[C@]1(C)O", "approval_year": 1991}, {"compound_id": "LB-EF384F74B304", "smiles": "CNC1(c2ccccc2Cl)CCCCC1=O.Cl", "approval_year": 1970}, {"compound_id": "LB-9B6B4948745A", "smiles": "CCC(=O)O[C@H]1[C@H](O[C@@H]2[C@@H](C)[C@H](O[C@H]3C[C@@](C)(OC)[C@@H](O)[C@H](C)O3)[C@@H](C)C(=O)O[C@H](CC)[C@@](C)(O)[C@H](O)[C@@H](C)C(=O)[C@H](C)C[C@@]2(C)O)O[C@H](C)C[C@@H]1N(C)C.CCCCCCCCCCCCOS(=O)(=O)O", "approval_year": 1967}, {"compound_id": "LB-3FE0D1A7F2E9", "smiles": "CCC(=O)O[C@H]1[C@H](O[C@@H]2[C@@H](C)[C@H](O[C@H]3C[C@@](C)(OC)[C@@H](O)[C@H](C)O3)[C@@H](C)C(=O)O[C@H](CC)[C@@](C)(O)[C@H](O)[C@@H](C)C(=O)[C@H](C)C[C@@]2(C)O)O[C@H](C)C[C@@H]1N(C)C", "approval_year": 1967}, {"compound_id": "LB-57D020D47344", "smiles": "OCc1cc(C(O)CNCCCCCCOCCCCc2ccccc2)ccc1O", "approval_year": 1994}, {"compound_id": "LB-E1F9AFD3C661", "smiles": "Cn1c(=O)c2c(ncn2CC(O)CO)n(C)c1=O", "approval_year": 1951}, {"compound_id": "LB-EEB18FF5019D", "smiles": "CC(=O)CCCCn1c(=O)c2c(ncn2C)n(C)c1=O", "approval_year": 1984}, {"compound_id": "LB-D4528CD90F2E", "smiles": "CC(C)(C(=O)c1cccnc1)c1cccnc1", "approval_year": 1961}, {"compound_id": "LB-1F1DC15CD00E", "smiles": "CN1C[C@H](C(=O)N[C@]2(C)O[C@@]3(O)[C@@H]4CCCN4C(=O)[C@H](Cc4ccccc4)N3C2=O)C=C2c3cccc4[nH]cc(c34)C[C@H]21.CN1C[C@H](C(=O)N[C@]2(C)O[C@@]3(O)[C@@H]4CCCN4C(=O)[C@H](Cc4ccccc4)N3C2=O)C=C2c3cccc4[nH]cc(c34)C[C@H]21.O=C(O)C(O)C(O)C(=O)O", "approval_year": 1948}, {"compound_id": "LB-E5D058B05B95", "smiles": "CC(C)c1nc(CN(C)C(=O)N[C@H](C(=O)N[C@@H](Cc2ccccc2)C[C@H](O)[C@H](Cc2ccccc2)NC(=O)OCc2cncs2)C(C)C)cs1", "approval_year": 1996}, {"compound_id": "LB-03C776830277", "smiles": "O=C1CCC(N2C(=O)c3ccccc3C2=O)C(=O)N1", "approval_year": 1956}, {"compound_id": "LB-B716789F071F", "smiles": "Oc1c(Cl)cc(Cl)c(Cl)c1Cc1c(O)c(Cl)cc(Cl)c1Cl", "approval_year": 1949}, {"compound_id": "LB-3F7E1F936B98", "smiles": "CCC(=O)C(CC(C)N(C)C)(c1ccccc1)c1ccccc1", "approval_year": 1947}, {"compound_id": "LB-94A025AAE26E", "smiles": "CC(C)[N+](C)(CCC(C(N)=O)(c1ccccc1)c1ccccc1)C(C)C", "approval_year": 1957}, {"compound_id": "LB-FFA70C8AE80E", "smiles": "Cc1ccccc1C(OCCN(C)C)c1ccccc1.O=C(O)CC(O)(CC(=O)O)C(=O)O", "approval_year": 1959}, {"compound_id": "LB-60EE6A30B006", "smiles": "Cc1ccccc1C(OCCN(C)C)c1ccccc1", "approval_year": 1957}, {"compound_id": "LB-E15EC412CE1C", "smiles": "CN(C)CCC(O)(c1ccccc1)c1ccccc1Cl.Cl", "approval_year": 1982}, {"compound_id": "LB-8C75E317499E", "smiles": "CC(CC(c1ccccc1)c1ccccc1)NC(C)(C)C", "approval_year": 1986}, {"compound_id": "LB-C7C7E017EA20", "smiles": "CC(CC(c1ccccc1)c1ccccc1)NC(C)(C)C.Cl", "approval_year": 1986}, {"compound_id": "LB-A3A078FA2BBA", "smiles": "CC[C@H](OC(C)=O)C(C[C@H](C)N(C)C)(c1ccccc1)c1ccccc1", "approval_year": 1993}, {"compound_id": "LB-3692EA0B272F", "smiles": "CC(C)C(=O)Oc1ccc(CO)cc1[C@H](CCN(C(C)C)C(C)C)c1ccccc1.O=C(O)/C=C/C(=O)O", "approval_year": 2007}]}
|
i18n.js
CHANGED
|
@@ -21,6 +21,12 @@ ko: {
|
|
| 21 |
statBoards: "๊ฐ์ค ๋ถ๋ฌธ", statCompounds: "ํ
์คํธ ํํฉ๋ฌผ", statFields: "๋ถ์ผ",
|
| 22 |
statClauses: "๊ท๊ฒฉ ์กฐํญ", statPlanned: "๊ณํ ๋ถ๋ฌธ",
|
| 23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
secBrowse: "๋ถ์ผ", secBrowseLead: "๋ถ์ผ๋ฅผ ์ ํํ๋ฉด ์์ ๋ถ๋ฌธ์ ์์ํ์ ์ ์ถ ์ฐฝ๊ตฌ๋ก ์ด๋ํฉ๋๋ค.",
|
| 25 |
secEvidence: "์ธก์ ํ๊ณ ์งํ",
|
| 26 |
secEvidenceLead: "๊ฐ๋ก์ถ์ <b>๊ธฐ์ค์ ์ค์ฐจ รท ์คํ ์ฌํ ์ค์ฐจ</b>์
๋๋ค. 1.0 ์ ๊ทผ์ ํ ์๋ก " +
|
|
@@ -185,6 +191,12 @@ en: {
|
|
| 185 |
statBoards: "open boards", statCompounds: "test compounds", statFields: "disciplines",
|
| 186 |
statClauses: "spec clauses", statPlanned: "planned boards",
|
| 187 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 188 |
secBrowse: "Disciplines",
|
| 189 |
secBrowseLead: "Select a discipline to reach its boards, leaderboards and submission desk.",
|
| 190 |
secEvidence: "Measurement-limit landscape",
|
|
|
|
| 21 |
statBoards: "๊ฐ์ค ๋ถ๋ฌธ", statCompounds: "ํ
์คํธ ํํฉ๋ฌผ", statFields: "๋ถ์ผ",
|
| 22 |
statClauses: "๊ท๊ฒฉ ์กฐํญ", statPlanned: "๊ณํ ๋ถ๋ฌธ",
|
| 23 |
|
| 24 |
+
secLeaders: "๋ถ๋ฌธ๋ณ 1์",
|
| 25 |
+
secLeadersLead: "๊ฐ ๋ถ๋ฌธ์ ํ์ฌ ์ ๋์
๋๋ค. ์ฐธ๊ฐ ์ ์ถ์ด ์๋ ๋ถ๋ฌธ์ ๋น์ ๋ก๋๋ค โ ๊ธฐ์ค์ ์ ๋์ด์ผ ํ ์ ์ด์ง ์ฐ์น์๊ฐ ์๋๋๋ค.",
|
| 26 |
+
thBoard: "๋ถ๋ฌธ", thBest: "1์", thScore: "์ ์", thVs: "๊ธฐ์ค์ ๋๋น", thN: "ํ
์คํธ",
|
| 27 |
+
noLeader: "์์ง ์์",
|
| 28 |
+
leadersEmpty: n => `${n}๊ฐ ๋ถ๋ฌธ ๋ชจ๋ ์ฐธ๊ฐ ์ ์ถ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค.`,
|
| 29 |
+
leadersSome: (a, b) => `${b}๊ฐ ๋ถ๋ฌธ ์ค ${a}๊ฐ์ ์ ๋๊ฐ ์์ต๋๋ค.`,
|
| 30 |
secBrowse: "๋ถ์ผ", secBrowseLead: "๋ถ์ผ๋ฅผ ์ ํํ๋ฉด ์์ ๋ถ๋ฌธ์ ์์ํ์ ์ ์ถ ์ฐฝ๊ตฌ๋ก ์ด๋ํฉ๋๋ค.",
|
| 31 |
secEvidence: "์ธก์ ํ๊ณ ์งํ",
|
| 32 |
secEvidenceLead: "๊ฐ๋ก์ถ์ <b>๊ธฐ์ค์ ์ค์ฐจ รท ์คํ ์ฌํ ์ค์ฐจ</b>์
๋๋ค. 1.0 ์ ๊ทผ์ ํ ์๋ก " +
|
|
|
|
| 191 |
statBoards: "open boards", statCompounds: "test compounds", statFields: "disciplines",
|
| 192 |
statClauses: "spec clauses", statPlanned: "planned boards",
|
| 193 |
|
| 194 |
+
secLeaders: "Current leaders",
|
| 195 |
+
secLeadersLead: "The leading entry on each board. Boards without an entrant are left blank โ a baseline is a line to cross, not a winner.",
|
| 196 |
+
thBoard: "Board", thBest: "Leader", thScore: "Score", thVs: "vs baseline", thN: "Test",
|
| 197 |
+
noLeader: "none yet",
|
| 198 |
+
leadersEmpty: n => `All ${n} boards are awaiting their first entry.`,
|
| 199 |
+
leadersSome: (a, b) => `${a} of ${b} boards have a leader.`,
|
| 200 |
secBrowse: "Disciplines",
|
| 201 |
secBrowseLead: "Select a discipline to reach its boards, leaderboards and submission desk.",
|
| 202 |
secEvidence: "Measurement-limit landscape",
|
index.html
CHANGED
|
@@ -171,6 +171,8 @@
|
|
| 171 |
border-radius:8px;background:var(--bg2);font-size:12px;font-weight:750}
|
| 172 |
.rk.g1{background:#f0c44a26;color:#9c7710}.rk.g2{background:#aab4c426;color:#77828f}
|
| 173 |
.rk.g3{background:#c9885526;color:#95612f}
|
|
|
|
|
|
|
| 174 |
.mini{display:inline-block;height:6px;border-radius:3px;background:var(--acc);opacity:.5;
|
| 175 |
vertical-align:middle;margin-right:7px}
|
| 176 |
|
|
@@ -286,7 +288,14 @@ function terrain(items,link){
|
|
| 286 |
<i>0</i><i>โ ${t.terrLeft} ยท 1.0 ยท ${t.terrRight} โ</i><i>${MAX.toFixed(1)}</i>
|
| 287 |
</span><span></span></div></div>`;
|
| 288 |
}
|
| 289 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 290 |
|
| 291 |
async function boot(){
|
| 292 |
try{ME=await j("/api/me");}catch(e){}
|
|
@@ -309,7 +318,8 @@ function route(){
|
|
| 309 |
/* โโโ ํ๋ธ โโโ */
|
| 310 |
function hub(){
|
| 311 |
const T0=CATS.totals, bs=Object.values(BOARDS);
|
| 312 |
-
const items=bs.map(b=>({board:b.board,ratio:ratioOf(b)}))
|
|
|
|
| 313 |
const inside=items.filter(x=>x.ratio<1.3).length;
|
| 314 |
const lost=bs.filter(b=>b.beats_constant===false).length;
|
| 315 |
app.innerHTML=W(`
|
|
@@ -339,6 +349,9 @@ function hub(){
|
|
| 339 |
<div class="find"><b>${t.found3t}</b><p>${t.found3d}</p></div>
|
| 340 |
</div></div>
|
| 341 |
|
|
|
|
|
|
|
|
|
|
| 342 |
<div class="sec"><h2>${t.secBrowse}</h2><p class="lead2">${t.secBrowseLead}</p>
|
| 343 |
<div class="grid">${CATS.categories.map(cardHTML).join("")}</div></div>
|
| 344 |
|
|
@@ -374,6 +387,39 @@ function hub(){
|
|
| 374 |
<div class="note n">${t.dataNote}<br><br>
|
| 375 |
${t.srcLabel} ยท <a href="https://www.ebi.ac.uk/chembl/">ChEMBL_37 (EMBL-EBI)</a> ยท
|
| 376 |
<a href="https://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA 3.0 Unported</a></div></div>`);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 377 |
}
|
| 378 |
|
| 379 |
function cardHTML(c){
|
|
@@ -392,7 +438,8 @@ function cardHTML(c){
|
|
| 392 |
function category(id){
|
| 393 |
const c=CATS.categories.find(x=>x.id===id); if(!c)return hub();
|
| 394 |
const bs=(c.board_cards||[]).slice().sort((a,b)=>b.n_test-a.n_test);
|
| 395 |
-
const items=bs.map(b=>({board:b.board,ratio:ratioOf(b)}))
|
|
|
|
| 396 |
const nm=L==="ko"?c.name:c.en;
|
| 397 |
app.innerHTML=W(`
|
| 398 |
<div class="crumb"><a href="#/">${t.all}</a> โบ ${esc(nm)}</div>
|
|
@@ -412,9 +459,9 @@ function boardMini(b){
|
|
| 412 |
const bl=b.baselines[b.best_baseline]||{};
|
| 413 |
return `<a class="cc" href="#/b/${encodeURIComponent(b.board)}">
|
| 414 |
<div class="nm">${esc(b.board)}<span class="chip">${b.split_grade}/${b.answer_grade}</span></div>
|
| 415 |
-
<div class="ds">${t.cardCompounds(b.n_test.toLocaleString())} ยท ${t.noiseH} ${f(b.noise_floor.sd_single)}<br>
|
| 416 |
-
${esc(b.best_baseline)} ${f(bl.mae)}</div>
|
| 417 |
-
<div class="mt"><span>${esc(b.source)}</span><span>${f(ratioOf(b),2)
|
| 418 |
}
|
| 419 |
|
| 420 |
/* โโโ ๋ถ๋ฌธ โโโ */
|
|
|
|
| 171 |
border-radius:8px;background:var(--bg2);font-size:12px;font-weight:750}
|
| 172 |
.rk.g1{background:#f0c44a26;color:#9c7710}.rk.g2{background:#aab4c426;color:#77828f}
|
| 173 |
.rk.g3{background:#c9885526;color:#95612f}
|
| 174 |
+
.gain{color:var(--good);font-weight:700}
|
| 175 |
+
.loss{color:var(--bad);font-weight:700}
|
| 176 |
.mini{display:inline-block;height:6px;border-radius:3px;background:var(--acc);opacity:.5;
|
| 177 |
vertical-align:middle;margin-right:7px}
|
| 178 |
|
|
|
|
| 288 |
<i>0</i><i>โ ${t.terrLeft} ยท 1.0 ยท ${t.terrRight} โ</i><i>${MAX.toFixed(1)}</i>
|
| 289 |
</span><span></span></div></div>`;
|
| 290 |
}
|
| 291 |
+
/* ๋ถ๋ฅ ์ ์ฉ ๋ถ๋ฌธ์ MAE ๊ธฐ์ค์ ์ด ์๋ค. ๊ทธ๋ฐ ๋ถ๋ฌธ์ 0 ์ผ๋ก ์ฒ๋ฆฌํ๋ฉด ์งํ๋ ๋งจ ์ผ์ชฝ์
|
| 292 |
+
๋ถ์ด "์ธก์ ํ๊ณ์ ๋๋ฌํ๋ค"๋ก ๋ณด์ธ๋ค. ์ฌ์ง ๋ชปํ ๊ฒ๊ณผ ์ฌ์ ์์ ๊ฒ์ ๋ค๋ฅด๋ฏ๋ก ๋น์ด๋ค. */
|
| 293 |
+
const ratioOf=b=>{
|
| 294 |
+
const nf=(b.noise_floor||{}).sd_single;
|
| 295 |
+
const maes=Object.values(b.baselines||{}).map(v=>v.mae).filter(v=>v!=null);
|
| 296 |
+
if(!nf||!maes.length) return null;
|
| 297 |
+
return Math.min(...maes)/nf;
|
| 298 |
+
};
|
| 299 |
|
| 300 |
async function boot(){
|
| 301 |
try{ME=await j("/api/me");}catch(e){}
|
|
|
|
| 318 |
/* โโโ ํ๋ธ โโโ */
|
| 319 |
function hub(){
|
| 320 |
const T0=CATS.totals, bs=Object.values(BOARDS);
|
| 321 |
+
const items=bs.map(b=>({board:b.board,ratio:ratioOf(b)}))
|
| 322 |
+
.filter(x=>x.ratio!=null).sort((a,b)=>a.ratio-b.ratio);
|
| 323 |
const inside=items.filter(x=>x.ratio<1.3).length;
|
| 324 |
const lost=bs.filter(b=>b.beats_constant===false).length;
|
| 325 |
app.innerHTML=W(`
|
|
|
|
| 349 |
<div class="find"><b>${t.found3t}</b><p>${t.found3d}</p></div>
|
| 350 |
</div></div>
|
| 351 |
|
| 352 |
+
<div class="sec"><h2>${t.secLeaders}</h2><p class="lead2">${t.secLeadersLead}</p>
|
| 353 |
+
<div id="leaders"><div class="skel" style="height:200px"></div></div></div>
|
| 354 |
+
|
| 355 |
<div class="sec"><h2>${t.secBrowse}</h2><p class="lead2">${t.secBrowseLead}</p>
|
| 356 |
<div class="grid">${CATS.categories.map(cardHTML).join("")}</div></div>
|
| 357 |
|
|
|
|
| 387 |
<div class="note n">${t.dataNote}<br><br>
|
| 388 |
${t.srcLabel} ยท <a href="https://www.ebi.ac.uk/chembl/">ChEMBL_37 (EMBL-EBI)</a> ยท
|
| 389 |
<a href="https://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA 3.0 Unported</a></div></div>`);
|
| 390 |
+
paintLeaders();
|
| 391 |
+
}
|
| 392 |
+
|
| 393 |
+
/* ๋ถ๋ฌธ๋ณ 1์ ํ. ๋น๋๊ธฐ๋ก ์ฑ์ด๋ค - ์์ฅ์ ๋ถ๋ฌธ ์๋งํผ ์ฝ์ด์ผ ํด์ ์ฒซ ๊ทธ๋ฆผ์ ๋ง์ผ๋ฉด ์ ๋๋ค. */
|
| 394 |
+
async function paintLeaders(){
|
| 395 |
+
const el=$("#leaders"); if(!el)return;
|
| 396 |
+
let d; try{ d=await j("/api/leaders"); }catch(e){ el.innerHTML=""; return; }
|
| 397 |
+
const rows=d.rows.map(r=>{
|
| 398 |
+
const L=r.leader;
|
| 399 |
+
// ์ ์๋ ๋ถ๋ฌธ๋ง๋ค ์ฃผ์งํ๊ฐ ๋ค๋ฅด๋ค. ํ๊ท ๋ถ๋ฌธ์ MAE, ๋ถ๋ฅ ์ ์ฉ ๋ถ๋ฌธ์ AUROC.
|
| 400 |
+
const reg=r.baseline_best!=null;
|
| 401 |
+
const score=L?(reg?L.mae:L.auroc):null;
|
| 402 |
+
const bas=reg?r.baseline_best:r.baseline_best_auroc;
|
| 403 |
+
let vs="โ";
|
| 404 |
+
if(L&&score!=null&&bas!=null){
|
| 405 |
+
const better=reg?score<bas:score>bas;
|
| 406 |
+
const gap=reg?(bas-score):(score-bas);
|
| 407 |
+
vs=`<span class="${better?"gain":"loss"}">${better?"โฒ":"โผ"} ${Math.abs(gap).toFixed(3)}</span>`;
|
| 408 |
+
}
|
| 409 |
+
return `<tr>
|
| 410 |
+
<td style="text-align:left"><a href="#/b/${encodeURIComponent(r.board)}">${esc(r.board)}</a>
|
| 411 |
+
<span class="chip g" style="margin-left:6px">${r.split_grade}/${r.answer_grade}</span></td>
|
| 412 |
+
<td style="text-align:left">${L?esc(L.method):`<span class="dim">${t.noLeader}</span>`}</td>
|
| 413 |
+
<td style="text-align:left">${L?esc(L.user):"โ"}</td>
|
| 414 |
+
<td>${score!=null?f(score):"โ"}</td>
|
| 415 |
+
<td>${vs}</td>
|
| 416 |
+
<td>${(r.n_test||0).toLocaleString()}</td></tr>`;}).join("");
|
| 417 |
+
el.innerHTML=`<div class="tw"><table><thead><tr>
|
| 418 |
+
<th style="text-align:left;width:auto">${t.thBoard}</th>
|
| 419 |
+
<th style="text-align:left">${t.thBest}</th><th style="text-align:left">${t.thUser}</th>
|
| 420 |
+
<th>${t.thScore}</th><th>${t.thVs}</th><th>${t.thN}</th></tr></thead>
|
| 421 |
+
<tbody>${rows}</tbody></table></div>
|
| 422 |
+
<p class="dim" style="font-size:13px">${d.held?t.leadersSome(d.held,d.n):t.leadersEmpty(d.n)}</p>`;
|
| 423 |
}
|
| 424 |
|
| 425 |
function cardHTML(c){
|
|
|
|
| 438 |
function category(id){
|
| 439 |
const c=CATS.categories.find(x=>x.id===id); if(!c)return hub();
|
| 440 |
const bs=(c.board_cards||[]).slice().sort((a,b)=>b.n_test-a.n_test);
|
| 441 |
+
const items=bs.map(b=>({board:b.board,ratio:ratioOf(b)}))
|
| 442 |
+
.filter(x=>x.ratio!=null).sort((a,b)=>a.ratio-b.ratio);
|
| 443 |
const nm=L==="ko"?c.name:c.en;
|
| 444 |
app.innerHTML=W(`
|
| 445 |
<div class="crumb"><a href="#/">${t.all}</a> โบ ${esc(nm)}</div>
|
|
|
|
| 459 |
const bl=b.baselines[b.best_baseline]||{};
|
| 460 |
return `<a class="cc" href="#/b/${encodeURIComponent(b.board)}">
|
| 461 |
<div class="nm">${esc(b.board)}<span class="chip">${b.split_grade}/${b.answer_grade}</span></div>
|
| 462 |
+
<div class="ds">${t.cardCompounds(b.n_test.toLocaleString())} ยท ${t.noiseH} ${f((b.noise_floor||{}).sd_single)}<br>
|
| 463 |
+
${esc(b.best_baseline)} ${bl.mae!=null?f(bl.mae):f(bl.auroc)}</div>
|
| 464 |
+
<div class="mt"><span>${esc(b.source)}</span><span>${ratioOf(b)==null?"โ":f(ratioOf(b),2)+"ร"}</span></div></a>`;
|
| 465 |
}
|
| 466 |
|
| 467 |
/* โโโ ๋ถ๋ฌธ โโโ */
|