comsol_surrogate_model / drug_comsol_params.py
guminhong's picture
Upload 8 files
60673f9 verified
Raw
History Blame Contribute Delete
8.56 kB
"""
drug_comsol_params.py โ€” ์•ฝ๋ฌผ๋ณ„ COMSOL ์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ (v2, ๋ฌผ๋ฆฌ๊ณต์‹ ๊ธฐ๋ฐ˜)
============================================================
์•ฝ๋ฌผ ์„ ํƒ ์‹œ ํ•ด๋‹น ์•ฝ๋ฌผ์˜ 10๊ฐœ COMSOL ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
โ˜… v2 ๋ณ€๊ฒฝ: BA ์—ญ์‚ฐ(์ˆœํ™˜ ๋…ผ๋ฆฌ) ํ๊ธฐ โ†’ ๋ฌผ๋ฆฌ ๊ณต์‹ยท๋ฌธํ—Œ ๊ธฐ๋ฐ˜ ์žฌ์œ ๋„
๊ธฐ์กด v1์€ k_decay๋ฅผ "๋ฌธํ—Œ BA๊ฐ€ ๋‚˜์˜ค๋„๋ก ์—ญ์‚ฐ"ํ•ด ๋„ฃ์–ด, ๋Œ€๋ฆฌ๋ชจ๋ธโ†’BA
๊ณ„์‚ฐ์ด ์ˆœํ™˜(BA๋ฅผ ๋„ฃ์–ด BA๋ฅผ ์–ป์Œ)์ด์—ˆ๋‹ค. v2๋Š” ์ด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๊ฐ
ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฌผ๋ฆฌ์  ๊ทผ๊ฑฐ๋กœ ๋…๋ฆฝ ๊ฒฐ์ •ํ•œ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ BA๋Š” ์ˆœ๋ฐฉํ–ฅ ์˜ˆ์ธก๊ฐ’์ด ๋œ๋‹ค.
ํŒŒ๋ผ๋ฏธํ„ฐ๋ณ„ ๊ฒฐ์ • ๋ฐฉ๋ฒ•:
Lp_ve, K ์กฐ์ง ์„ฑ์งˆ(์•ฝ๋ฌผ ๋ฌด๊ด€) โ†’ ๊ณตํ†ต ์ƒ์ˆ˜ (Lp_ve=8e-12, K=1e-15)
sigma_ve, sigma_le Curry ๋ฐ˜์‚ฌ๊ณ„์ˆ˜ ฯƒ=1-(1-(a/R)ยฒ)ยฒ, a=0.0515ยทMW^0.392 nm
(Erickson 2009). ๋ฒฝ ๊ณต๊ทน๋ฐ˜๊ฒฝ R_ve=6.22, R_le=24.5 nm๋Š”
ํŒŒ์ผ 3์ข…(IgG/INS/ALB) ์‹ค์ธก best-fit.
D_gel Stokes-Einstein ์ž์œ ํ™•์‚ฐ D=kBT/(6ฯ€ฮทr) ร— ECM ๋ฐฉํ•ด์ธ์ž
f=0.376ยทexp(0.1439ยทr_h[nm]) (ํŒŒ์ผ 3์ข… ์‹ค์ธก ํ”ผํŒ…, 37ยฐC)
p_ve, p_le ๋ฒฝ ํ™•์‚ฐํˆฌ๊ณผ๋„. ํŒŒ์ผ 3์ข… ์‹ค์ธก์„ log(MW) ์„ ํ˜• ๋ณด๊ฐ„.
kf_m, kr_m ECM ๊ฒฐํ•ฉ ์ƒ์ˆ˜ โ†’ ํŒŒ์ผ(250415_Drug_list) ์‹ค์ธก ๊ทธ๋Œ€๋กœ.
k_decay โ˜… ๋ชฉํ‘œ BA ์žฌํ˜„๊ฐ’(calibration). ์•Œ๋ ค์ง„ ์•ฝ๋ฌผ์€ ๋ฌธํ—Œ SC BA๋ฅผ
์žฌํ˜„ํ•˜๋„๋ก ์—ญ์‚ฐ๋œ ๊ฐ’์ด๋‹ค(์ˆœ๋ฐฉํ–ฅ '์˜ˆ์ธก'์ด ์•„๋‹ˆ๋ผ '์žฌํ˜„').
LODO ๊ฒ€์ฆ์ƒ ๋ฌผ์„ฑ์œผ๋กœ ์˜ˆ์ธก ๋ถˆ๊ฐ€(27.9%p)์ด๋ฏ€๋กœ ๋ฏธ์ง€ ์•ฝ๋ฌผ์—”
k_decay_physics(MW)(MW ๋กœ๊ทธ์Šค์ผ€์ผ ๋ฌผ๋ฆฌ์ถ”์ •)๋ฅผ ์“ธ ๊ฒƒ.
๋ฌผ๋ฆฌ๊ฐ’ ์›๋ณธ์€ K_DECAY_PHYSICS dict์— ๋ณด์กด.
TRA๋Š” ์ถ”์ฒœ๋ชจ๋ธ5(ํก์ˆ˜ ์™œ๊ณก)๋ผ model4 ๊ธฐ์ค€์œผ๋กœ ์žฌํ˜„ํ•จ.
ํŒŒ์ผ ์‹ค์ธก 3์ข…(IgG/INS/ALB, 251103_revised)์€ sigmaยทpยทD_gel์„ ์‹ค์ธก ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ.
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
โ˜… ํŒŒ๋ผ๋ฏธํ„ฐ ๊ทผ๊ฑฐ ๋“ฑ๊ธ‰ (์ƒ์ฒด๋ฌผ๋ฆฌ ๋ฌธํ—Œ ๊ฐ์‚ฌ, ์ƒ์„ธ: comsol_params_biophysics_refs_ko.md)
์ฃผ์˜: ์ด 10๊ฐœ๋Š” ์ž„์ƒ PK ์ƒ์ˆ˜(CLยทVยทBA)๊ฐ€ ์•„๋‹ˆ๋ผ ์กฐ์ง-๋ถ„์ž ์ˆ˜์†ก ์ƒ์ฒด๋ฌผ๋ฆฌ๋Ÿ‰์ด๋ผ
FDA/PopPK DB์—์„œ ์•ฝ๋ฌผ๋ณ„๋กœ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค. ๋ฏธ์„ธํ˜ˆ๊ด€ ์ƒ๋ฆฌยทECM ํ™•์‚ฐยท๊ณต๊ทน์ด๋ก ์œผ๋กœ ์œ ๋„.
๐ŸŸฉ ๋ฌผ๋ฆฌ๊ณต์‹/๋ฌธํ—Œ์‹ค์ธก (5๊ฐœ):
sigma_ve, sigma_le : Curry-Michel ๊ณต๊ทน์ด๋ก  + Rippe & Haraldsson two-pore
(two-pore eqs; ์†Œ๊ณต๊ทน~4nm/๋Œ€๊ณต๊ทน~24nm). ํŒŒ์ผ 3์ข… ์žฌํ˜„.
D_gel : Stokes-Einstein + ECM ๋ฐฉํ•ด(Pluen 2001 PNAS, Ramanujan 2002 BiophysJ).
p_ve, p_le : ๋ฏธ์„ธํ˜ˆ๊ด€ ๋‹จ๋ฐฑ์งˆ ํˆฌ๊ณผ๋„ ์‹ค์ธก๊ณผ ์ž๋ฆฟ์ˆ˜ ์ผ์น˜
(์•Œ๋ถ€๋ฏผ 1.8e-9, IgG 1.9~4.6e-9 m/s; Yuan 1993 PMID:8321142, PMC2363402).
โฌœ ์กฐ์ง์ƒ์ˆ˜ ๊ณ ์ • (์•ฝ๋ฌผ ๋ฌด๊ด€, 2๊ฐœ):
Lp_ve : ์‚ฌ๋žŒ ๋ฏธ์„ธํ˜ˆ๊ด€ ์ˆ˜๋ฆฌ์ „๋„๋„ ๋ฒ”์œ„ ๊ณ ์ •. Levick & Michel 2010.
K : ์‚ฌ๋žŒ ๊ฐ„์งˆ Darcy ํˆฌ๊ณผ๋„ ๋ฒ”์œ„ ๊ณ ์ •. Levick 1987, Q J Exp Physiol 72:409.
๐ŸŸง ๊ธฐ์ „์€ ๋ฌธํ—Œํ™•์ธ, ์ ˆ๋Œ€ ์†๋„์ƒ์ˆ˜ ๋ฏธ๊ฒ€์ฆ (3๊ฐœ โ€” ํŒŒ์ผ ์‹ค์ธก ์˜์กด):
kf_m, kr_m : ECM-ํ•˜์ด์•Œ๋ฃจ๋กœ๋‚œ ์ •์ „๊ธฐ ๊ฒฐํ•ฉ์€ ์‹ค์žฌ ๊ธฐ์ „(J Pharm Sci 2020)์ด๋‚˜
์•ฝ๋ฌผ๋ณ„ kon/koff ํ‘œ์ค€๊ฐ’ ์—†์Œ โ†’ ํŒŒ์ผ(250415) ์‹ค์ธก ์‚ฌ์šฉ.
k_decay : SC presystemic ๋ถ„ํ•ด. ๊ธฐ์ „ยท๋ฐฉํ–ฅ(ํŽฉํƒ€์ด๋“œโ†‘ mAbโ†“)ยทBA๋ฒ”์œ„(52~80%)๋Š”
๋ฌธํ—Œํ™•์ธ(PMC5613179; FcRn PBPK antibodies 2024 doi:10.3390/antib13030070;
FcRn๊ฒฐ์† BA 82.5%โ†’28.3% PMC6150636)์ด๋‚˜ ์•ฝ๋ฌผ๋ณ„ ์†๋„์ƒ์ˆ˜ ์‹ค์ธก ์—†์Œ
โ†’ MW ๋Œ€๋ฆฌ์Šค์ผ€์ผ. BA ์—ญ์‚ฐ ์•„๋‹˜(์ˆœํ™˜ ํšŒํ”ผ).
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆœ์„œ:
Lp_ve, K, p_le, sigma_ve, sigma_le, p_ve, D_gel, k_decay, kf_m, kr_m
"""
# ์•ฝ๋ฌผ ๋ฌด๊ด€ ์กฐ์ง ๊ณตํ†ต๊ฐ’
_COMMON = dict(Lp_ve=8e-12, K=1e-15)
# ์•ฝ๋ฌผ๋ณ„ COMSOL ํŒŒ๋ผ๋ฏธํ„ฐ
# IgG/INS/ALB: ํŒŒ์ผ ์‹ค์ธก(sigmaยทpยทD_gel) + ๋ฌธํ—Œ k_decay
# ๊ทธ ์™ธ 7์ข… : ๋ฌผ๋ฆฌ๊ณต์‹(sigmaยทD_gelยทp) + ํŒŒ์ผ kf/kr + ๋ฌธํ—Œ k_decay
# โ”€โ”€ k_decay ๋ฌผ๋ฆฌ๊ฐ’(MW ์Šค์ผ€์ผ, BA ๋ฏธ๋ณด์ •) โ€” ๋ฏธ์ง€ ์•ฝ๋ฌผ ํด๋ฐฑยท์ฐธ์กฐ์šฉ ๋ณด์กด โ”€โ”€
K_DECAY_PHYSICS = {
"INS": 3.000e-05,
"EXE": 3.925e-05,
"ETA": 2.000e-06,
"TRA": 2.051e-06,
"RIT": 2.070e-06,
"IgG": 2.000e-06,
"BOC": 2.056e-06,
}
# ์œ„ DRUG_COMSOL์˜ k_decay๋Š” ์•„๋ž˜ ๋ชฉํ‘œ BA๋ฅผ ์žฌํ˜„ํ•˜๋„๋ก ๋ณด์ •๋œ ๊ฐ’(calibration)์ด๋‹ค.
# โš  ์ด๋Š” ์ˆœ๋ฐฉํ–ฅ '์˜ˆ์ธก'์ด ์•„๋‹ˆ๋ผ ์•Œ๋ ค์ง„ ๋ฌธํ—Œ BA์˜ '์žฌํ˜„'๊ฐ’์ด๋‹ค. LODO ๊ฒ€์ฆ ๊ฒฐ๊ณผ
# ๋ฌผ์„ฑ(MWยทsigma_ve)์œผ๋กœ ์˜ˆ์ธก ๋ถˆ๊ฐ€(ํ‰๊ท ์˜ค์ฐจ 27.9%p)ํ•˜๋ฏ€๋กœ, ๋ฏธ์ง€ ์•ฝ๋ฌผ์—๋Š”
# k_decay_physics()(MW ๋กœ๊ทธ์Šค์ผ€์ผ)๋ฅผ ์จ์•ผ ํ•œ๋‹ค. ์ƒ์„ธ: pipeline_validation_report_ko.md
CALIBRATION_BA = {"INS": 66, "EXE": 100, "ETA": 58, "TRA": 77, "RIT": 64, "IgG": 70, "BOC": 46.5}
DRUG_COMSOL = {
"INS": dict(MW=5.80, sigma_ve=0.1000, sigma_le=0.0000, p_ve=1.000e-08, p_le=7.200e-08, D_gel=9.400e-11, k_decay=1.494e-05, kf_m=1.450, kr_m=6.82, **_COMMON),
"ALB": dict(MW=66.50, sigma_ve=0.7000, sigma_le=0.0500, p_ve=1.000e-09, p_le=1.000e-08, D_gel=6.200e-11, k_decay=3.937e-06, kf_m=0.170, kr_m=4.77, **_COMMON),
"IgG": dict(MW=150.00, sigma_ve=0.9000, sigma_le=0.1000, p_ve=1.000e-09, p_le=1.000e-08, D_gel=4.500e-11, k_decay=4.102e-06, kf_m=0.480, kr_m=4.20, **_COMMON),
"EXE": dict(MW=4.20, sigma_ve=0.0927, sigma_le=0.0061, p_ve=1.171e-08, p_le=8.241e-08, D_gel=1.093e-10, k_decay=1.361e-06, kf_m=0.624, kr_m=11.14, **_COMMON),
"LYS": dict(MW=14.30, sigma_ve=0.2328, sigma_le=0.0159, p_ve=4.600e-09, p_le=3.700e-08, D_gel=7.628e-11, k_decay=1.415e-05, kf_m=1.451, kr_m=99.70, **_COMMON),
"OVA": dict(MW=45.00, sigma_ve=0.5168, sigma_le=0.0389, p_ve=1.920e-09, p_le=1.749e-08, D_gel=5.821e-11, k_decay=5.449e-06, kf_m=0.371, kr_m=6.36, **_COMMON),
"RIT": dict(MW=143.90, sigma_ve=0.9417, sigma_le=0.0954, p_ve=7.913e-10, p_le=8.182e-09, D_gel=4.909e-11, k_decay=6.238e-06, kf_m=0.296, kr_m=6.35, **_COMMON),
"BOC": dict(MW=145.10, sigma_ve=0.9440, sigma_le=0.0960, p_ve=7.863e-10, p_le=8.137e-09, D_gel=4.905e-11, k_decay=1.140e-05, kf_m=0.311, kr_m=5.99, **_COMMON),
"TRA": dict(MW=145.50, sigma_ve=0.9448, sigma_le=0.0962, p_ve=7.846e-10, p_le=8.123e-09, D_gel=4.904e-11, k_decay=2.666e-06, kf_m=0.517, kr_m=8.77, **_COMMON),
"ETA": dict(MW=149.99, sigma_ve=0.9531, sigma_le=0.0985, p_ve=7.667e-10, p_le=7.963e-09, D_gel=4.892e-11, k_decay=6.981e-06, kf_m=0.756, kr_m=13.40, **_COMMON),
}
# ํŒŒ์ผ์—์„œ ์ง์ ‘ ์ธก์ •๋œ ์•ฝ๋ฌผ (์‹ค์ธก sigmaยทpยทD_gel, ์‹ ๋ขฐ๋„ ๋†’์Œ)
FILE_MEASURED = {"IgG", "INS", "ALB"}
PARAM_ORDER = ["Lp_ve", "K", "p_le", "sigma_ve", "sigma_le",
"p_ve", "D_gel", "k_decay", "kf_m", "kr_m"]
def get_comsol_params(drug="IgG"):
if drug not in DRUG_COMSOL:
raise KeyError(f"์•ฝ๋ฌผ '{drug}' ์—†์Œ. ์ง€์›: {list(DRUG_COMSOL)}")
return DRUG_COMSOL[drug]
def get_param_vector(drug="IgG"):
p = get_comsol_params(drug)
return [p[name] for name in PARAM_ORDER]
def is_file_measured(drug):
"""ํŒŒ์ผ์—์„œ ์ง์ ‘ ์ธก์ •๋œ ์•ฝ๋ฌผ์ธ์ง€ (vs ๋ฌผ๋ฆฌ๊ณต์‹ ๊ณ„์‚ฐ)."""
return drug in FILE_MEASURED
def k_decay_physics(mw_kda):
"""๋ฏธ์ง€ ์•ฝ๋ฌผ์šฉ k_decay (MW ๋กœ๊ทธ์Šค์ผ€์ผ ๋ฌผ๋ฆฌ ์ถ”์ •, 1/s).
BA calibration์ด ์—†๋Š” ์•ฝ๋ฌผ์— ์‚ฌ์šฉ. ํŽฉํƒ€์ด๋“œ(~5kDa)~3e-5, mAb(~150kDa)~2e-6.
โš  ๋ฌผ๋ฆฌ ์ˆœ๋ฐฉํ–ฅ ์ถ”์ •๊ฐ’ โ€” BA ์žฌํ˜„ ๋ณด์žฅ ์•ˆ ๋จ."""
import math
return 10**(-0.8326*math.log10(mw_kda*1000.0) + -1.3896)
def get_k_decay(drug, mw_kda=None):
"""์•ฝ๋ฌผ k_decay ๋ฐ˜ํ™˜. ์•Œ๋ ค์ง„ ์•ฝ๋ฌผ์€ calibration(๋ชฉํ‘œ BA ์žฌํ˜„)๊ฐ’,
๋ฏธ์ง€ ์•ฝ๋ฌผ์€ k_decay_physics(MW) ๋ฌผ๋ฆฌ ์ถ”์ •๊ฐ’."""
if drug in DRUG_COMSOL:
return DRUG_COMSOL[drug]["k_decay"]
if mw_kda is None:
raise ValueError("๋ฏธ์ง€ ์•ฝ๋ฌผ์€ mw_kda ํ•„์š”")
return k_decay_physics(mw_kda)
if __name__ == "__main__":
print(f"{'Drug':5s} " + " ".join(f"{n:>9s}" for n in PARAM_ORDER) + " source")
for d in DRUG_COMSOL:
v = get_param_vector(d)
tag = "file" if d in FILE_MEASURED else "calc"
print(f"{d:5s} " + " ".join(f"{x:>9.2e}" for x in v) + f" [{tag}]")