export interface EndpointResult { prob: number; pred: number; label: string; } export interface PredictionResult { smiles: string; name: string; pred: Record; meta: { model_version: string }; } export interface EndpointCategory { name: string; color: string; bgColor: string; endpoints: string[]; } export interface CompoundData { name?: string; smiles: string; molecular_weight: number; Clint: number; logP: number; pKa: number; solubility: number; permeability: number; plasma_protein_binding: number; fu_in_vitro: number; } export interface NCAData { Cmax?: number; Tmax?: number; AUClast?: number; AUC?: number; AUCINF_obs?: number; AUCINF?: number; AUCINF_pred?: number; Lambda_z?: number; Cl_obs?: number; Vz_obs?: number; F?: number; ka?: number; [key: string]: number | undefined; } export interface ConcentrationData { time: number[]; plasma_conc: number[]; liver_cell_conc: number[]; kidney_cell_conc: number[]; brain_cell_conc: number[]; muscle_cell_conc: number[]; fat_cell_conc: number[]; } export interface PBPKSimulationResult { status: string; drug_name: string; drug_data: Record; nca_data: NCAData; concentrations: ConcentrationData; modelOptions: { useADMET: boolean; useClearance: boolean; }; } export const ENDPOINT_CATEGORIES: EndpointCategory[] = [ { name: "CYP Substrate", color: "text-blue-400", bgColor: "bg-blue-500/20 border-blue-500/30", endpoints: [ "cyp450_1a2_substrate.cls", "cyp450_2c9_substrate.cls", "cyp450_2d6_substrate.cls", "cyp450_3a4_substrate.cls", ], }, { name: "CYP Inhibitor", color: "text-purple-400", bgColor: "bg-purple-500/20 border-purple-500/30", endpoints: [ "cyp450_2c19_inhibitor.cls", "cyp450_2c9_inhibitor.cls", "cyp450_2d6_inhibitor.cls", "cyp450_3a4_inhibitor.cls", "cyp_inhibitory_promiscuity.cls", ], }, { name: "Toxicity", color: "text-red-400", bgColor: "bg-red-500/20 border-red-500/30", endpoints: [ "ames_toxicity.cls", "carcinogenicity.cls", "herg_inhibitor_1.cls", "herg_inhibitor_2.cls", ], }, { name: "Absorption / Distribution", color: "text-green-400", bgColor: "bg-green-500/20 border-green-500/30", endpoints: ["bbb.cls", "caco2.cls", "hia.cls", "biodegradation.cls"], }, { name: "Transporter", color: "text-amber-400", bgColor: "bg-amber-500/20 border-amber-500/30", endpoints: [ "p_glycoprotein_inhibitor_1.cls", "p_glycoprotein_inhibitor_2.cls", "p_glycoprotein_substrate.cls", "renal_organic_cation_transporter.cls", ], }, ]; export const ENDPOINT_DISPLAY_NAMES: Record = { "ames_toxicity.cls": "Ames Toxicity", "bbb.cls": "BBB Permeability", "biodegradation.cls": "Biodegradation", "caco2.cls": "Caco-2 Permeability", "carcinogenicity.cls": "Carcinogenicity", "cyp450_1a2_substrate.cls": "CYP1A2 Substrate", "cyp450_2c19_inhibitor.cls": "CYP2C19 Inhibitor", "cyp450_2c9_inhibitor.cls": "CYP2C9 Inhibitor", "cyp450_2c9_substrate.cls": "CYP2C9 Substrate", "cyp450_2d6_inhibitor.cls": "CYP2D6 Inhibitor", "cyp450_2d6_substrate.cls": "CYP2D6 Substrate", "cyp450_3a4_inhibitor.cls": "CYP3A4 Inhibitor", "cyp450_3a4_substrate.cls": "CYP3A4 Substrate", "cyp_inhibitory_promiscuity.cls": "CYP Inhibitory Promiscuity", "herg_inhibitor_1.cls": "hERG Inhibitor (Type 1)", "herg_inhibitor_2.cls": "hERG Inhibitor (Type 2)", "hia.cls": "Human Intestinal Absorption", "p_glycoprotein_inhibitor_1.cls": "P-gp Inhibitor (Type 1)", "p_glycoprotein_inhibitor_2.cls": "P-gp Inhibitor (Type 2)", "p_glycoprotein_substrate.cls": "P-gp Substrate", "renal_organic_cation_transporter.cls": "Renal OCT Inhibitor", }; export const SAMPLE_PREDICTIONS: PredictionResult[] = [ { smiles: "CCO", name: "Ethanol", pred: { "ames_toxicity.cls": { prob: 0.9085, pred: 1, label: "Non AMES toxic" }, "bbb.cls": { prob: 0.9986, pred: 1, label: "True" }, "biodegradation.cls": { prob: 0.9934, pred: 1, label: "Ready biodegradable" }, "caco2.cls": { prob: 0.9956, pred: 1, label: "True" }, "carcinogenicity.cls": { prob: 0.0195, pred: 0, label: "Carcinogens " }, "cyp450_1a2_substrate.cls": { prob: 0.215, pred: 0, label: "Non-substrate" }, "cyp450_2c19_inhibitor.cls": { prob: 0.999, pred: 1, label: "Non-inhibitor" }, "cyp450_2c9_inhibitor.cls": { prob: 0.9249, pred: 1, label: "Non-inhibitor" }, "cyp450_2c9_substrate.cls": { prob: 0.0001, pred: 0, label: "Non-substrate" }, "cyp450_2d6_inhibitor.cls": { prob: 0.9998, pred: 1, label: "Non-inhibitor" }, "cyp450_2d6_substrate.cls": { prob: 0.0016, pred: 0, label: "Non-substrate" }, "cyp450_3a4_inhibitor.cls": { prob: 0.9998, pred: 1, label: "Non-inhibitor" }, "cyp450_3a4_substrate.cls": { prob: 0.001, pred: 0, label: "Non-substrate" }, "cyp_inhibitory_promiscuity.cls": { prob: 0.9996, pred: 1, label: "Low CYP Inhibitory Promiscuity" }, "herg_inhibitor_1.cls": { prob: 0.9636, pred: 1, label: "Weak inhibitor" }, "herg_inhibitor_2.cls": { prob: 0.9998, pred: 1, label: "Non-inhibitor" }, "hia.cls": { prob: 0.9878, pred: 1, label: "True" }, "p_glycoprotein_inhibitor_1.cls": { prob: 0.9997, pred: 1, label: "Non-inhibitor" }, "p_glycoprotein_inhibitor_2.cls": { prob: 0.9999, pred: 1, label: "Non-inhibitor" }, "p_glycoprotein_substrate.cls": { prob: 0.0082, pred: 0, label: "Non-substrate" }, "renal_organic_cation_transporter.cls": { prob: 0.9999, pred: 1, label: "Non-inhibitor" }, }, meta: { model_version: "admet_smiles_merge_didb_seed202" }, }, { smiles: "CC(=O)Oc1ccccc1C(=O)O", name: "Aspirin", pred: { "ames_toxicity.cls": { prob: 0.8721, pred: 1, label: "Non AMES toxic" }, "bbb.cls": { prob: 0.8345, pred: 1, label: "True" }, "biodegradation.cls": { prob: 0.7823, pred: 1, label: "Ready biodegradable" }, "caco2.cls": { prob: 0.9234, pred: 1, label: "True" }, "carcinogenicity.cls": { prob: 0.8912, pred: 1, label: "Non-carcinogens" }, "cyp450_1a2_substrate.cls": { prob: 0.1234, pred: 0, label: "Non-substrate" }, "cyp450_2c19_inhibitor.cls": { prob: 0.9567, pred: 1, label: "Non-inhibitor" }, "cyp450_2c9_inhibitor.cls": { prob: 0.3456, pred: 0, label: "Inhibitor" }, "cyp450_2c9_substrate.cls": { prob: 0.789, pred: 1, label: "Substrate" }, "cyp450_2d6_inhibitor.cls": { prob: 0.9876, pred: 1, label: "Non-inhibitor" }, "cyp450_2d6_substrate.cls": { prob: 0.0234, pred: 0, label: "Non-substrate" }, "cyp450_3a4_inhibitor.cls": { prob: 0.9654, pred: 1, label: "Non-inhibitor" }, "cyp450_3a4_substrate.cls": { prob: 0.1567, pred: 0, label: "Non-substrate" }, "cyp_inhibitory_promiscuity.cls": { prob: 0.9234, pred: 1, label: "Low CYP Inhibitory Promiscuity" }, "herg_inhibitor_1.cls": { prob: 0.9456, pred: 1, label: "Weak inhibitor" }, "herg_inhibitor_2.cls": { prob: 0.9789, pred: 1, label: "Non-inhibitor" }, "hia.cls": { prob: 0.9912, pred: 1, label: "True" }, "p_glycoprotein_inhibitor_1.cls": { prob: 0.9876, pred: 1, label: "Non-inhibitor" }, "p_glycoprotein_inhibitor_2.cls": { prob: 0.9934, pred: 1, label: "Non-inhibitor" }, "p_glycoprotein_substrate.cls": { prob: 0.0567, pred: 0, label: "Non-substrate" }, "renal_organic_cation_transporter.cls": { prob: 0.9987, pred: 1, label: "Non-inhibitor" }, }, meta: { model_version: "admet_smiles_merge_didb_seed202" }, }, { smiles: "Cn1c(=O)c2c(ncn2C)n(C)c1=O", name: "Caffeine", pred: { "ames_toxicity.cls": { prob: 0.7654, pred: 1, label: "Non AMES toxic" }, "bbb.cls": { prob: 0.9567, pred: 1, label: "True" }, "biodegradation.cls": { prob: 0.3456, pred: 0, label: "Not ready biodegradable" }, "caco2.cls": { prob: 0.9123, pred: 1, label: "True" }, "carcinogenicity.cls": { prob: 0.9345, pred: 1, label: "Non-carcinogens" }, "cyp450_1a2_substrate.cls": { prob: 0.8765, pred: 1, label: "Substrate" }, "cyp450_2c19_inhibitor.cls": { prob: 0.8234, pred: 1, label: "Non-inhibitor" }, "cyp450_2c9_inhibitor.cls": { prob: 0.8901, pred: 1, label: "Non-inhibitor" }, "cyp450_2c9_substrate.cls": { prob: 0.0345, pred: 0, label: "Non-substrate" }, "cyp450_2d6_inhibitor.cls": { prob: 0.9234, pred: 1, label: "Non-inhibitor" }, "cyp450_2d6_substrate.cls": { prob: 0.0567, pred: 0, label: "Non-substrate" }, "cyp450_3a4_inhibitor.cls": { prob: 0.789, pred: 1, label: "Non-inhibitor" }, "cyp450_3a4_substrate.cls": { prob: 0.6789, pred: 1, label: "Substrate" }, "cyp_inhibitory_promiscuity.cls": { prob: 0.8567, pred: 1, label: "Low CYP Inhibitory Promiscuity" }, "herg_inhibitor_1.cls": { prob: 0.9123, pred: 1, label: "Weak inhibitor" }, "herg_inhibitor_2.cls": { prob: 0.9567, pred: 1, label: "Non-inhibitor" }, "hia.cls": { prob: 0.9876, pred: 1, label: "True" }, "p_glycoprotein_inhibitor_1.cls": { prob: 0.9345, pred: 1, label: "Non-inhibitor" }, "p_glycoprotein_inhibitor_2.cls": { prob: 0.9678, pred: 1, label: "Non-inhibitor" }, "p_glycoprotein_substrate.cls": { prob: 0.1234, pred: 0, label: "Non-substrate" }, "renal_organic_cation_transporter.cls": { prob: 0.9876, pred: 1, label: "Non-inhibitor" }, }, meta: { model_version: "admet_smiles_merge_didb_seed202" }, }, ]; // Hardcoded compound database (fallback when CSV not available) export const COMPOUNDS_DATABASE: Record = { alogliptin: { name: "Alogliptin", smiles: "CN1C(=O)C=C(N(C1=O)CC2=CC=CC=C2C#N)N3CCC[C@H](C3)N", molecular_weight: 339.397, Clint: 3.333, logP: -0.9, pKa: 8.5, solubility: 19.2, permeability: 1.059, plasma_protein_binding: 20.0, fu_in_vitro: 0.8, }, linagliptin: { name: "Linagliptin", smiles: "CC#CC(=O)N1CCC2=C(C1)N(C(=O)N2CC3=NC4=CC=CC=C4C(=N3)C)CC5=CC=C(C=C5)F", molecular_weight: 472.54, Clint: 5.0, logP: 1.7, pKa: 8.6, solubility: 0.9, permeability: 15.0, plasma_protein_binding: 75.0, fu_in_vitro: 0.25, }, ibrutinib: { name: "Ibrutinib", smiles: "C=CC(=O)N1CCC(CC1)N2C3=NC=NC(=C3C(=N2)C4=CC=C(C=C4)OC5=CC=CC=C5)N", molecular_weight: 440.5, Clint: 120.0, logP: 3.0, pKa: 3.6, solubility: 0.01, permeability: 25.0, plasma_protein_binding: 97.3, fu_in_vitro: 0.027, }, vemurafenib: { name: "Vemurafenib", smiles: "CCCS(=O)(=O)NC1=CC(=C(C=C1)F)C(=O)C2=CNC3=NC=C(C=C32)C4=CC=C(C=C4)Cl", molecular_weight: 489.92, Clint: 8.5, logP: 3.2, pKa: 7.9, solubility: 0.1, permeability: 12.0, plasma_protein_binding: 99.0, fu_in_vitro: 0.01, }, ruxolitinib: { name: "Ruxolitinib", smiles: "N#CC1=CC=C(C=C1)C2=NC(=NC=C2)NC3CC3", molecular_weight: 306.37, Clint: 45.0, logP: 2.1, pKa: 4.2, solubility: 5.0, permeability: 20.0, plasma_protein_binding: 97.0, fu_in_vitro: 0.03, }, }; export function getCompoundBySmiles(smiles: string): CompoundData | null { for (const data of Object.values(COMPOUNDS_DATABASE)) { if (data.smiles === smiles) return data; } return null; } export function searchCompounds(query: string): string[] { if (!query || query.length < 2) return []; const lower = query.toLowerCase(); return Object.keys(COMPOUNDS_DATABASE) .filter((name) => name.includes(lower)) .slice(0, 10); }