OSCR

LigGen-a GEN-AI based ligand generation approach for de-novo drug design.

Code ↔ Paper

12 matches between paragraphs of the paper and lines of its authors' code, computed by the harvester (lexical-v1). Click a colored paragraph or line to see its counterpart.

The 12 matches · 1 of them tie a paragraph to a whole file, not to given lines: a weak match, whose lines are not tinted
  1. [1] § Results and discussion › Crossdocked dataset ↔ server/frontend/src/App.js, lines 665–729 · score 0.97 · DecompDiff, DiffSBDD, GraphBP, Lingo3DMol, TargetDiff, Frag2Seq
  2. [2] § Results and discussion › Crossdocked dataset ↔ server/frontend/src/otherTools.js, the whole file · a weak match · score 0.92 · DecompDiff, DiffSBDD, GraphBP, Lingo3DMol, TargetDiff, Frag2Seq
  3. [3] § Results and discussion › Comparative analysis of LigGen for alzheimer’s-related targets: BACE1, MAO-B, and AChE ↔ server/frontend/src/App.js, lines 665–729 · score 0.91 · AutoDock, LigBuilder, Pocket2Mol, Acetylcholinesterase, Beta, Monoamine
  4. [4] § Methods › Recurrent neural network ↔ train_fragment_generator.py, lines 88–153 · score 0.73 · fragment generation, generative model, PyTorch, hidden, layer, mapping
  5. [5] § Methods › Recurrent neural network ↔ rnn_selfies.py, lines 7–64 · score 0.69 · PyTorch, linear, Embedded, GRU, masking, SELFIES
  6. [6] § Results and discussion ↔ server/frontend/src/App.js, lines 561–623 · score 0.66 · CrossDock, LigBuilder, LigGen, alzheimer, V3, novo
  7. [7] § Methods › Fragments to ligands ↔ mcsa.py, lines 270–389 · score 0.63 · random fragment, vina score, rejected, position, conformation, optimizers
  8. [8] § Methods › Fragments to ligands ↔ server/frontend/src/App.js, lines 374–434 · score 0.61 · vina score weight, synthesizability score, Metropolis, temperature, alpha, probability
  9. [9] § Methods › Recurrent neural network ↔ train_fragment_generator.py, lines 88–153 · score 0.59 · fragment generation, generative model, trained, SELFIES, token, RNN
  10. [10] § Methods › Fragments to ligands ↔ mcsa.py, lines 394–448 · score 0.59 · vina score weight, 0–1, rejection, alpha, RDKit, probability
  11. [11] § Methods › Recurrent neural network ↔ rnn_selfies.py, lines 7–64 · score 0.54 · end token, start token, SELFIES, RNN, model
  12. [12] § Methods › Fragments to ligands ↔ generate_ligands.py, lines 86–192 · score 0.51 · vina score, generated ligand, pose, box, RNN, SMILES

Paper

Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC

The paper is loaded when this pane is shown.

The authors' code

JavaScript · 766 lines · 26 KB · no license · 4 matches

  1. import React, { useState } from "react";
  2. import OtherTools from "./otherTools";
  3. import exampleFileContent from "./ExampleFile";
  4. import {
  5. AppBar,
  6. TextField,
  7. Checkbox,
  8. MenuItem,
  9. Button,
  10. Typography,
  11. Select,
  12. FormControl,
  13. FormControlLabel,
  14. InputLabel,
  15. Stack,
  16. Box,
  17. Container,
  18. Paper,
  19. Table,
  20. TableHead,
  21. TableRow,
  22. TableCell,
  23. TableBody,
  24. Dialog,
  25. DialogActions,
  26. DialogContent,
  27. DialogTitle,
  28. Tabs,
  29. Tab,
  30. Toolbar,
  31. TableContainer
  32. } from "@mui/material";
  33. import axios from "axios";
  34. var ADDRESS = "https://neurocare-liggen.iiitd.edu.in/"
  35. //var ADDRESS = "http://localhost:3000"
  36. const App = () => {
  37. const [jobId, setJobId] = useState("");
  38. const [status, setStatus] = useState("");
  39. const [file, setFile] = useState(null);
  40. const [helpOpen, setHelpOpen] = useState(false);
  41. const [activeTab, setActiveTab] = useState(0);
  42. const handleTabChange = (event, newValue) => {
  43. setActiveTab(newValue);
  44. };
  45. const handleHelpOpen = () => {
  46. setHelpOpen(true);
  47. };
  48. const handleHelpClose = () => {
  49. setHelpOpen(false);
  50. };
  51. const [parameters, setParameters] = useState({
  52. count: 10,
  53. grid_center: "",
  54. grid_size: "",
  55. threads: 1,
  56. rnn_device: "gpu",
  57. alpha: 0.3,
  58. chain_extend_probability: 0.8,
  59. weight: 500,
  60. temp: 50,
  61. score: 0,
  62. vina_weight: 0.5,
  63. jobId: "",
  64. example: false
  65. });
  66. const [ligandDetailsDict, setLigandDetailsDict] = useState(null);
  67. // Fetch ligand details from server
  68. const fetchLigandDetails = async (jobId) => {
  69. try {
  70. const response = await axios.get(`${ADDRESS}/ligand/details/${parameters.jobId}`);
  71. setLigandDetailsDict(response.data);
  72. console.log(response.data['0']['img'])
  73. } catch (error) {
  74. console.error("Error fetching ligand details:", error);
  75. }
  76. };
  77. const handleChange = (e) => {
  78. const { name, value, type, checked } = e.target;
  79. setParameters({
  80. ...parameters,
  81. [name]: type === "checkbox" ? checked : value,
  82. });
  83. };
  84. const submitJob = async () => {
  85. let rnn_device = parameters.rnn_device;
  86. if (rnn_device === "cpu") {
  87. rnn_device = "cpu";
  88. } else {
  89. rnn_device = "cuda";
  90. }
  91. try {
  92. let content = {
  93. count: +parameters.count,
  94. grid_center: parameters.grid_center.replaceAll(" ", "").split(',').map(str => parseFloat(str)),
  95. grid_size: parameters.grid_size.replaceAll(" ", "").split(',').map(str => parseFloat(str)),
  96. threads: +parameters.threads,
  97. rnn_device: rnn_device,
  98. alpha: parseFloat(parameters.alpha),
  99. chain_extend_probability: parseFloat(parameters.chain_extend_probability),
  100. weight: parseFloat(parameters.weight),
  101. temp: parseFloat(parameters.temp),
  102. score: parseFloat(parameters.score),
  103. vina_weight: parseFloat(parameters.vina_weight),
  104. target: file.content
  105. }
  106. const response = await axios.post(ADDRESS + "/submit-job", content);
  107. setJobId(response.data.job_id);
  108. } catch (error) {
  109. console.error("Error submitting job:", error);
  110. }
  111. };
  112. const checkStatus = async () => {
  113. if (!parameters.jobId) return;
  114. try {
  115. const response = await axios.get(`${ADDRESS}/job-status/${parameters.jobId}`);
  116. setStatus(response.data.status);
  117. console.log("sdssfdsfdsfsdfsdfsdfds")
  118. fetchLigandDetails();
  119. } catch (error) {
  120. console.error("Error checking job status:", error);
  121. }
  122. };
  123. const handleDownload = () => {
  124. if (!parameters.jobId) return;
  125. // Construct the URL with the job ID
  126. const downloadUrl = `${ADDRESS}/download/${parameters.jobId}`;
  127. // Create an anchor element to programmatically trigger a download
  128. const link = document.createElement("a");
  129. link.href = downloadUrl;
  130. link.download = `ligands_${parameters.jobId}.zip`; // Suggested file name
  131. link.click();
  132. };
  133. // Handle file upload
  134. const handleFileChange = (event) => {
  135. const uploadedFile = event.target.files[0];
  136. const reader = new FileReader();
  137. reader.onload = (e) => {
  138. const content = e.target.result;
  139. setFile({
  140. file_name: uploadedFile.name,
  141. content: content
  142. });
  143. };
  144. reader.readAsText(uploadedFile);
  145. };
  146. const loadExampleJob = async () => {
  147. // 1. Pre-fill the parameters so the user can see what inputs generate these results
  148. setParameters({
  149. count: 10,
  150. grid_center: "-4, -4, 30", // Replace with your actual 7D9O coordinates
  151. grid_size: "30, 30, 30", // Replace with your actual 7D9O grid size
  152. threads: 1,
  153. rnn_device: "gpu",
  154. alpha: 0.3,
  155. chain_extend_probability: 0.8,
  156. weight: 500,
  157. temp: 50,
  158. score: 0,
  159. vina_weight: 0.5,
  160. example: true
  161. });
  162. setFile({
  163. file_name: "example_2g94.pdbqt",
  164. content: exampleFileContent
  165. });
  166. };
  167. const submitJobUI = () => {
  168. return (<Container>
  169. <Box sx={{ textAlign: "center", mt: 4 }}>
  170. <Typography variant="subtitle1" color="textSecondary">
  171. Submit jobs for ligand generation.
  172. </Typography>
  173. </Box>
  174. <Box sx={{ mt: 4 }}>
  175. <Stack direction="row" justifyContent="space-between">
  176. <Typography variant="h5" gutterBottom>
  177. Job Parameters
  178. </Typography>
  179. <Stack direction="row" spacing={2}>
  180. <Button
  181. variant="outlined"
  182. color="secondary"
  183. onClick={handleHelpOpen}
  184. >
  185. Help
  186. </Button>
  187. <Button
  188. variant="outlined"
  189. color="secondary"
  190. onClick={loadExampleJob}
  191. >
  192. Example
  193. </Button>
  194. </Stack>
  195. </Stack>
  196. <br />
  197. <Stack spacing={3}>
  198. <Button
  199. variant="contained"
  200. component="label"
  201. sx={{ textAlign: "center" }}
  202. >
  203. Upload Target Protein PDBQT
  204. <input
  205. type="file"
  206. hidden
  207. onChange={handleFileChange}
  208. accept=".pdbqt"
  209. />
  210. </Button>
  211. {file && <Typography>Target File: {file.file_name}</Typography>}
  212. <Stack direction="row" spacing={2}>
  213. <TextField
  214. fullWidth
  215. label="Grid Center x, y, z"
  216. name="grid_center"
  217. value={parameters.grid_center}
  218. onChange={handleChange}
  219. />
  220. <TextField
  221. fullWidth
  222. label="Grid Size x, y, z"
  223. name="grid_size"
  224. value={parameters.grid_size}
  225. onChange={handleChange}
  226. />
  227. </Stack>
  228. <Stack direction="row" spacing={2}>
  229. <TextField
  230. fullWidth
  231. type="number"
  232. label="Weight of Ligands"
  233. name="weight"
  234. value={parameters.weight}
  235. onChange={handleChange}
  236. />
  237. </Stack>
  238. <Stack direction="row" spacing={2}>
  239. <TextField
  240. fullWidth
  241. type="number"
  242. label="Number of Ligands"
  243. name="count"
  244. value={parameters.count}
  245. onChange={handleChange}
  246. />
  247. <TextField
  248. fullWidth
  249. type="number"
  250. label="Threads"
  251. name="threads"
  252. value={parameters.threads}
  253. onChange={handleChange}
  254. />
  255. </Stack>
  256. <Stack direction="row" spacing={2}>
  257. <TextField
  258. fullWidth
  259. type="number"
  260. label="Temperature"
  261. name="temp"
  262. value={parameters.temp}
  263. onChange={handleChange}
  264. />
  265. <FormControl fullWidth>
  266. <InputLabel>Device</InputLabel>
  267. <Select
  268. name="rnn_device"
  269. value={parameters.rnn_device}
  270. onChange={handleChange}
  271. >
  272. <MenuItem value="cpu">CPU</MenuItem>
  273. <MenuItem value="gpu">GPU</MenuItem>
  274. </Select>
  275. </FormControl>
  276. </Stack>
  277. <Stack direction="row" spacing={2}>
  278. <TextField
  279. fullWidth
  280. type="number"
  281. step="0.1"
  282. label="Vina Weight"
  283. name="vina_weight"
  284. value={parameters.vina_weight}
  285. onChange={handleChange}
  286. />
  287. <TextField
  288. fullWidth
  289. type="number"
  290. step="0.1"
  291. label="Alpha"
  292. name="alpha"
  293. value={parameters.alpha}
  294. onChange={handleChange}
  295. />
  296. </Stack>
  297. <Stack direction="row" spacing={2}>
  298. <TextField
  299. fullWidth
  300. type="number"
  301. step="0.1"
  302. label="Chain Extend Probability"
  303. name="chain_extend_probability"
  304. value={parameters.chain_extend_probability}
  305. onChange={handleChange}
  306. />
  307. <TextField
  308. fullWidth
  309. type="number"
  310. step="1"
  311. label="Score"
  312. name="score"
  313. value={parameters.score}
  314. onChange={handleChange}
  315. />
  316. </Stack>
  317. </Stack>
  318. <br />
  319. <Stack>
  320. <Button
  321. variant="contained"
  322. color="primary"
  323. onClick={submitJob}
  324. sx={{ mr: 2 }}
  325. >
  326. Submit Job
  327. </Button>
  328. </Stack>
  329. </Box>
  330. <Dialog open={helpOpen} onClose={handleHelpClose} fullWidth
  331. maxWidth="md">
  332. <DialogTitle>Parameter Descriptions</DialogTitle>
  333. <DialogContent>
  334. <Typography variant="body1" gutterBottom>
  335. <strong>Grid Center x, y, z:</strong> Coordinates of the grid center for ligand generation.
  336. </Typography>
  337. <Typography variant="body1" gutterBottom>
  338. <strong>Grid Size x, y, z:</strong> Dimensions of the grid for ligand generation.
  339. </Typography>
  340. <Typography variant="body1" gutterBottom>
  341. <strong>Weight of Ligands:</strong> Weight in atomic mass units.
  342. </Typography>
  343. <Typography variant="body1" gutterBottom>
  344. <strong>Number of Ligands:</strong> Number of ligands to generate.
  345. </Typography>
  346. <Typography variant="body1" gutterBottom>
  347. <strong>Threads:</strong> Number of threads for computation.
  348. </Typography>
  349. <Typography variant="body1" gutterBottom>
  350. <strong>Temperature:</strong> Starting temperature for the Metropolis criteria.
  351. </Typography>
  352. <Typography variant="body1" gutterBottom>
  353. <strong>Device:</strong> Select CPU or GPU for computation.
  354. </Typography>
  355. <Typography variant="body1" gutterBottom>
  356. <strong>Vina Weight:</strong> Weight of vina score between [0 to 1], Final score of ligand = (vina_score_weight)*vina_score + (1-vina_score_weight)*synthesizability_score
  357. </Typography>
  358. <Typography variant="body1" gutterBottom>
  359. <strong>Alpha:</strong> Factor by which cooling schedule (Temperature) changes.
  360. </Typography>
  361. <Typography variant="body1" gutterBottom>
  362. <strong>Chain Extend Probability:</strong> Probablity by which fragment will get added to ends of ligand.
  363. </Typography>
  364. <Typography variant="body1" gutterBottom>
  365. <strong>Score:</strong> Initial minimum score to accept a ligand.
  366. </Typography>
  367. </DialogContent>
  368. <DialogActions>
  369. <Button onClick={handleHelpClose} color="primary">
  370. Close
  371. </Button>
  372. </DialogActions>
  373. </Dialog>
  374. </Container>);
  375. }
  376. const checkStatusUI = () => {
  377. return (<Container sx={{ mt: 4 }}>
  378. <Stack direction="row" spacing={2}>
  379. <Button
  380. variant="outlined"
  381. color="secondary"
  382. onClick={checkStatus}
  383. >
  384. Check Status
  385. </Button>
  386. <Button
  387. variant="outlined"
  388. color="secondary"
  389. onClick={handleDownload}
  390. >
  391. Download Ligands
  392. </Button>
  393. <TextField
  394. fullWidth
  395. label="Job Id"
  396. name="jobId"
  397. value={parameters.jobId}
  398. onChange={handleChange}
  399. />
  400. </Stack>
  401. </Container>);
  402. }
  403. // Render ligand details
  404. const ligandDetailsUI = (ligandDetails, key) => {
  405. console.log(ligandDetails);
  406. if (!ligandDetails || Object.keys(ligandDetails).length === 0) return (
  407. <Box sx={{ mt: 4 }}>
  408. <Typography variant="h5" gutterBottom>
  409. Ligand {key} : Generating
  410. </Typography>
  411. </Box>
  412. );
  413. return (
  414. <Box sx={{ mt: 4 }}>
  415. <Typography variant="h5" gutterBottom>
  416. Ligand {key}
  417. </Typography>
  418. {/* General Details */}
  419. <Paper sx={{ p: 2, mb: 4 }}>
  420. {ligandDetails.img ? <Stack direction="row" spacing={2}>
  421. {<img
  422. src={`data:image/png;base64,${ligandDetails.img}`}
  423. alt="Ligand"
  424. style={{ border: "1px solid #ccc" }}
  425. />}
  426. <Box>
  427. <Typography>
  428. <strong>Vina Score:</strong>{" "}
  429. {ligandDetails.undocked_final_energy}
  430. </Typography>
  431. <Typography>
  432. <strong>Synthesizability Score:</strong>{" "}
  433. {ligandDetails.synthesizability_score}
  434. </Typography>
  435. </Box>
  436. </Stack> : <Box> Generating </Box>}
  437. </Paper>
  438. {/* State Details Table */}
  439. <Table>
  440. <TableHead>
  441. <TableRow>
  442. <TableCell>Step</TableCell>
  443. <TableCell>Added Fragment</TableCell>
  444. <TableCell>Sub Ligand</TableCell>
  445. <TableCell>Total Score</TableCell>
  446. <TableCell>Vina Score</TableCell>
  447. <TableCell>Synthesizability Score</TableCell>
  448. </TableRow>
  449. </TableHead>
  450. <TableBody>
  451. {ligandDetails.state_details.map((detail, index) => (
  452. <TableRow key={index}>
  453. <TableCell>{index + 1}</TableCell>
  454. <TableCell>{detail.added_frag}</TableCell>
  455. <TableCell>{detail.out_ligand}</TableCell>
  456. <TableCell>{detail.total_score}</TableCell>
  457. <TableCell>{detail.vina_score}</TableCell>
  458. <TableCell>{detail.sa_score}</TableCell>
  459. </TableRow>
  460. ))}
  461. </TableBody>
  462. </Table>
  463. </Box>
  464. );
  465. };
  466. const introductionUI = () => (
  467. <Container maxWidth="md">
  468. {/* Header */}
  469. <Box sx={{ marginBottom: 4, textAlign: "center" }}>
  470. <Typography variant="h4" component="h1" gutterBottom>
  471. LigGen - A GEN-AI and Monte Carlo Simulated Annealing Based
  472. De Novo Drug Design Toolbox
  473. </Typography>
  474. </Box>
  475. {/* Introduction */}
  476. <Box sx={{ marginBottom: 3 }}>
  477. <Typography variant="body1" paragraph>
  478. We have developed a novel Gen-AI and Monte Carlo Simulated Annealing
  479. based de novo ligand generation tool referred to as <strong>LigGen</strong>, which
  480. uses fragments in SMILES format as building blocks.
  481. </Typography>
  482. <Typography variant="body1" paragraph>
  483. When compared to other de novo drug discovery packages such as
  484. <strong> LigBuilder</strong> and <strong>Pocket2Mol</strong>, LigGen's fragment generation
  485. is based on generative AI exploiting an RNN-LSTM approach. This approach
  486. was pretrained on the <strong>ChEMBL dataset</strong> and fine-tuned on LigBuilder’s
  487. fragment library.
  488. </Typography>
  489. </Box>
  490. {/* Performance Highlights */}
  491. <Box sx={{ marginBottom: 3 }}>
  492. <Typography variant="h5" component="h2" gutterBottom>
  493. Performance Highlights
  494. </Typography>
  495. <Typography variant="body1" paragraph>
  496. LigGen’s performance was evaluated on the <strong>CrossDock dataset</strong> and
  497. three Alzheimer’s-related proteins to compare it with several
  498. state-of-the-art de novo drug design tools, including
  499. <strong> Pocket2Mol</strong>, <strong>LigBuilder V3</strong>, and others.
  500. </Typography>
  501. <Typography variant="body1" paragraph>
  502. On the CrossDock dataset, LigGen demonstrated competitive binding
  503. affinities, achieving a Vina score of <strong>-7.508 ± 1.83</strong>,
  504. outperforming baseline methods like <strong>3D-SBDD</strong>, <strong>FLAG</strong>, and
  505. <strong>DrugGPS</strong>. LigGen also showcased strong diversity in the generated
  506. molecules while maintaining reasonable synthesizability.
  507. </Typography>
  508. <Typography variant="body1" paragraph>
  509. Although tools like Pocket2Mol showed higher QED values, LigGen
  510. consistently produced ligands with good <strong>Lipinski compliance</strong>,
  511. suggesting its balance between drug-likeness and innovation.
  512. </Typography>
  513. </Box>
  514. {/* Alzheimer's Protein Analysis */}
  515. <Box sx={{ marginBottom: 3 }}>
  516. <Typography variant="h5" component="h2" gutterBottom>
  517. Alzheimer’s-Related Protein Analysis
  518. </Typography>
  519. <Typography variant="body1" paragraph>
  520. In the Alzheimer’s-related protein analysis, ligands generated by LigGen
  521. consistently showed better binding affinities compared to those from
  522. LigBuilder and Pocket2Mol. LigGen demonstrated a balanced approach
  523. between ligand synthesizability and structural complexity, as seen in
  524. its ability to produce ligands with moderate synthesizability scores.
  525. </Typography>
  526. </Box>
  527. {/* Conclusion */}
  528. <Box sx={{ marginBottom: 3 }}>
  529. <Typography variant="h5" component="h2" gutterBottom>
  530. Conclusion
  531. </Typography>
  532. <Typography variant="body1" paragraph>
  533. Overall, the results indicate that LigGen is a robust tool for fragment-based
  534. ligand generation, capable of producing high-quality ligands with
  535. competitive docking scores and favorable synthesizability. LigGen provides
  536. a novel method for generating ligands using a fragment-based de novo
  537. drug design approach.
  538. </Typography>
  539. </Box>
  540. </Container>
  541. );
  542. const otherToolsUI = () => (
  543. <Container>
  544. <Typography variant="h4" gutterBottom>
  545. Other Tools
  546. </Typography>
  547. <Typography variant="body1">Explore additional functionalities and tools here...</Typography>
  548. </Container>
  549. );
  550. const computationUi = () => {
  551. return (
  552. <Container maxWidth="md">
  553. {submitJobUI()}
  554. <Container>
  555. <Box sx={{ mt: 4 }}>
  556. <Typography variant="subtitle1">Job ID: {jobId}</Typography>
  557. </Box>
  558. </Container>
  559. {checkStatusUI()}
  560. <Typography variant="subtitle2">Status: {status}</Typography>
  561. <Box>
  562. {ligandDetailsDict && Object.keys(ligandDetailsDict).length > 0 ? (
  563. Object.keys(ligandDetailsDict)
  564. .map((key) => Number(key)) // Convert keys to numbers for numeric sorting
  565. .sort((a, b) => a - b) // Sort numerically in ascending order
  566. .map((key) => {
  567. const ligandDetails = ligandDetailsDict[key.toString()]; // Access value using sorted key
  568. return ligandDetailsUI(ligandDetails, key); // Pass key if needed
  569. })
  570. ) : (
  571. <Typography variant="h6" align="center" sx={{ mt: 4 }}>
  572. No Ligand Details Available
  573. </Typography>
  574. )}
  575. </Box>
  576. </Container >
  577. );
  578. }
  579. const ourResultsUI = () => (
  580. <Container>
  581. <Typography variant="h4" gutterBottom>
  582. Results: CrossDock Dataset
  583. </Typography>
  584. <Typography variant="body1" gutterBottom>
  585. We evaluated LigGen using the test set of the CrossDock dataset. The test set contains 100 diverse protein-ligand pairs. This table summarizes the molecular properties of the ligands generated for these targets. We compared LigGen against multiple baselines, including 3D-SBDD, Pocket2Mol, GraphBP, TargetDiff, DecompDiff, DiffSBDD, FLAG, DrugGPS, Lingo3DMol, and Frag2Seq. Baseline results are sourced from the paper “Fragment and Geometry Aware Tokenization of Molecules for Structure-Based Drug Design Using Language Models”.
  586. We use the same evaluation matrix which was used in baselines. Vina Score estimates the binding affinity between generated molecules and given protein pockets; QED is a measure used to assess the drug-likeness of a molecule based on its molecular properties; SA estimates how easy it would be to synthesize a given chemical compound; Lipinski measures how well a molecule satisfies the Lipinski's rule of five , which evaluates the drug-likeness of a molecule; Diversity measures the average pairwise diversity (calculated as 1-Tanimotosimilarity) of generated molecules for a binding pocket; Time is the average time cost to generate 100 molecules for a protein pocket in the test set. All the Vina scores are calculated by QVina, and the chemical properties are calculated by RDKit .
  587. </Typography>
  588. <TableContainer component={Paper}>
  589. <Table>
  590. <TableHead>
  591. <TableRow>
  592. <TableCell><strong>Methods</strong></TableCell>
  593. <TableCell><strong>Vina Score (↓)</strong></TableCell>
  594. <TableCell><strong>QED (↑)</strong></TableCell>
  595. <TableCell><strong>SA (↑)</strong></TableCell>
  596. <TableCell><strong>Lipinski (↑)</strong></TableCell>
  597. <TableCell><strong>Diversity (↑)</strong></TableCell>
  598. <TableCell><strong>Time (s, ↓)</strong></TableCell>
  599. </TableRow>
  600. </TableHead>
  601. <TableBody>
  602. {[
  603. ["Test set*", "-6.87±2.32", "0.47±0.20", "0.72±0.14", "4.34±1.14", "-", "-"],
  604. ["3D-SBDD*", "-5.88±1.91", "0.50±0.17", "0.67±0.14", "4.78±0.51", "0.74±0.09", "15986.4±9851.0"],
  605. ["Pocket2Mol*", "-7.05±2.80", "0.57±0.16", "0.75±0.12", "4.93±0.27", "0.73±0.15", "2827.3±1456.8"],
  606. ["GraphBP*", "-4.71±4.03", "0.50±0.12", "0.30±0.09", "4.88±0.37", "0.84±0.01", "1162.8±438.5"],
  607. ["TargetDiff*", "-7.31±2.47", "0.48±0.20", "0.58±0.13", "4.59±0.83", "0.71±0.09", "~3428"],
  608. ["DecompDiff*", "-6.60±2.11", "0.49±0.21", "0.65±0.14", "4.49±1.02", "0.72±0.10", "~6189"],
  609. ["DiffSBDD*", "-7.17±3.28", "0.55±0.20", "0.72±0.12", "4.74±0.59", "0.71±0.07", "629.9±277.2"],
  610. ["FLAG*", "-6.38±3.24", "0.48±0.19", "0.70±0.15", "4.65±0.74", "0.70±0.14", "1289.1±378.0"],
  611. ["DrugGPS*", "-6.60±2.38", "0.46±0.21", "0.62±0.15", "4.49±0.99", "0.73±0.10", "1007.8±554.1"],
  612. ["Lingo3DMol*", "-7.25±1.69", "0.26±0.15", "0.65±0.08", "3.12±1.25", "0.48±0.12", "1481.9±1512.8"],
  613. ["Frag2Seq*", "-7.36±1.96", "0.64±0.15", "0.64±0.11", "4.98±0.11", "0.71±0.07", "48.8±14.6"],
  614. ["LigGen", "-7.50±1.83", "0.43±0.22", "0.68±0.10", "4.60±0.73", "0.69±0.13", "1271.335±3107.77"],
  615. ].map((row, index) => (
  616. <TableRow key={index}>
  617. {row.map((cell, cellIndex) => (
  618. <TableCell key={cellIndex}>{cell}</TableCell>
  619. ))}
  620. </TableRow>
  621. ))}
  622. </TableBody>
  623. </Table>
  624. </TableContainer>
  625. <br /> <br /><br /> <br /> <br />
  626. <Typography variant="h4" gutterBottom>
  627. Alzheimer’s-Related Protein Analysis
  628. </Typography>
  629. <Typography>
  630. In this section, we compare the performance of LigGen by generating ligands for Alzheimer's-Related Targets Beta-secretase 1, Monoamine Oxidase B and Acetylcholinesterase against tools LigBuilder V3 and Pocket2Mol. LigBuilder V3 and Pocket2Mol are popular ligand-building tools based on Genetic Algorithms and Deep Learning, respectively. We have generated results for three different targets with PDB IDs 2G94, 2V5Z, and 7D9O. The designed ligands were evaluated based on their Binding Affinities (using AutoDock Vina).
  631. A total of 100 ligands were generated for each protein using all three programs, LigGen, Pocket2Mol and LigBuilder. Subsequently, these compounds underwent docking using AutoDock-Vina.
  632. </Typography>
  633. <div style={{ display: "flex", justifyContent: "center", gap: "20px", alignItems: "center" }}>
  634. <div>
  635. <img src="/images/ba_7d9o.png" alt="7D9O: Docking Scores" style={{ width: "350px", height: "auto" }} />
  636. </div>
  637. <div>
  638. <img src="/images/ba_2v5z.png" alt="2V5Z: Docking Scores" style={{ width: "350px", height: "auto" }} />
  639. </div>
  640. <div>
  641. <img src="/images/ba_2g94.png" alt="2G94: Docking Scores" style={{ width: "350px", height: "auto" }} />
  642. </div>
  643. </div>
  644. </Container>
  645. );
  646. return (
  647. <Box>
  648. <AppBar position="static">
  649. <Toolbar>
  650. {/* Logo or Title */}
  651. <Box display="flex" alignItems="center" sx={{ marginRight: 2 }}>
  652. <Typography variant="h6" noWrap component="div">
  653. LigGen Webserver
  654. </Typography>
  655. </Box>
  656. <Tabs value={activeTab} onChange={handleTabChange} indicatorColor="secondary"
  657. textColor="inherit"
  658. centered sx={{ flexGrow: 0.5 }} >
  659. <Tab label="Introduction" />
  660. <Tab label="Computation" />
  661. <Tab label="Our Results" />
  662. <Tab label="Other Tools" />
  663. </Tabs>
  664. </Toolbar>
  665. </AppBar>
  666. <Box sx={{ p: 3 }}>
  667. {activeTab === 0 && introductionUI()}
  668. {activeTab === 1 && computationUi()}
  669. {activeTab === 2 && ourResultsUI()}
  670. {activeTab === 3 && OtherTools()}
  671. </Box>
  672. </Box>
  673. );
  674. };
  675. export default App;

App.js at commit 4563b04, no license · at the source

Overview

Authors: Anshul Yadav1, Natarajan Arul Murugan1
  1. Department of Computational Biology, Indraprastha Institute of Information Technology, Okhla Phase 3, New Delhi, 110020 India
Journal: Scientific reports, volume 16, issue 1, article 20477
Dates: received 21 December 2025; accepted 7 April 2026; published online 2 May 2026
Type: Research article · Language: English
License: CC BY-NC-ND
Identifiers: DOI 10.1038/s41598-026-48239-2 · PMID 42069853 · PMCID PMC13328569 · OpenAlex W7159971684
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: computational modeling (no new data) (modality), human (organism), computational (subfield)
Methods: Machine learning
Keywords: Fragment-based drug design, Recurrent neural networks, Monte Carlo simulated annealing, Chemistry, Computational biology and bioinformatics, Drug discovery
MeSH: Drug Design*, Acetylcholinesterase, Amyloid Precursor Protein Secretases, Aspartic Acid Endopeptidases, Drug Discovery, Humans, Ligands, Monoamine Oxidase, Monte Carlo Method, Recurrent Neural Networks (* major topic)
Topic: Computational Drug Discovery Methods (Computational Theory and Mathematics, Computer Science), according to OpenAlex
Funding: SERB-SURE (SUR/2022/005296)
Citations: not cited yet (Europe PMC); 59 references in the paper

Abstract

The abstract is not reproduced here: the paper's license (CC BY-NC-ND) does not allow it. Read it in the paper, at the publisher or on Europe PMC.

Repository

Its files are read in the Code ↔ Paper reader above, with 12 matches between paragraphs and lines of code.

neurocare-iiitd/LigGen

License: none: the authors keep all their rights
State: the link answers, verified on 28 September 2026
Evidence: files inventoried
Commit: 4563b04ddd71739d4d555680d3bdbbf6761b5825, 15 June 2026
Languages: Python (9), JavaScript (7), Jupyter (2)
Size: 76 files, 18 scripts
Software Heritage: not archived
Found in: “Data availability”
Holds: README, environment (environment.yml), tests, 1 notebook
Not found: license file, CITATION.cff, continuous integration, documentation
Tools: PyTorch (5 files), RDKit (5 files), NumPy (2 files), Matplotlib (1 file), SciPy (1 file)
Availability: 1 check, the latest on 28 September 2026: the link answers
  • 28 September 2026: the link answers
19 files

The paper's code and data availability statement is in the Data section.

Tracing map

Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.

What the map holds:

  • 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 18 scripts, each with its path and the digest of its content;
  • 12 matches between paragraphs of the paper and lines of the code (method lexical-v1);
  • neither the text of the paper nor the code itself.

Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.

Data

Datasets cited

Code and data availability statement

The paper has a code and data availability statement. Its license (CC BY-NC-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:

Read it in the paper: doi.org/10.1038/s41598-026-48239-2.

Versions

The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.

Version 1, 28 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 2 authors, 6 keywords, 10 MeSH terms, 1 funder, 41 references.

Cite

This paper

Yadav, A., & Murugan, N. A. (2026). LigGen-a GEN-AI based ligand generation approach for de-novo drug design. Scientific reports, 16(1), 20477. https://doi.org/10.1038/s41598-026-48239-2

BibTeX

@article{yadav2026liggen,
author = {Yadav, Anshul and Murugan, Natarajan Arul},
title = {{LigGen-a GEN-AI based ligand generation approach for de-novo drug design}},
journal = {Scientific reports},
year = {2026},
month = may,
volume = {16},
number = {1},
pages = {20477},
publisher = {Nature Publishing Group},
issn = {2045-2322},
doi = {10.1038/s41598-026-48239-2},
url = {https://doi.org/10.1038/s41598-026-48239-2},
pmid = {42069853},
pmcid = {PMC13328569}
}

RIS

TY - JOUR
AU - Yadav, Anshul
AU - Murugan, Natarajan Arul
TI - LigGen-a GEN-AI based ligand generation approach for de-novo drug design
T2 - Scientific reports
J2 - Sci Rep
PY - 2026
DA - 2026/05/02
VL - 16
IS - 1
SP - 20477
SN - 2045-2322
PB - Nature Publishing Group
DO - 10.1038/s41598-026-48239-2
UR - https://doi.org/10.1038/s41598-026-48239-2
LA - en
ER -

CSL-JSON

{
"id": "10.1038/s41598-026-48239-2",
"type": "article-journal",
"title": "LigGen-a GEN-AI based ligand generation approach for de-novo drug design",
"container-title": "Scientific reports",
"author": [
{
"family": "Yadav",
"given": "Anshul"
},
{
"family": "Murugan",
"given": "Natarajan Arul"
}
],
"container-title-short": "Sci Rep",
"volume": "16",
"issue": "1",
"page": "20477",
"DOI": "10.1038/s41598-026-48239-2",
"PMID": "42069853",
"PMCID": "PMC13328569",
"ISSN": "2045-2322",
"publisher": "Nature Publishing Group",
"URL": "https://doi.org/10.1038/s41598-026-48239-2",
"language": "en",
"issued": {
"date-parts": [
[
2026,
5,
2
]
]
}
}

The tracing map gets a citation of its own once an author has validated it and it has a DOI.

Similar papers

The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.

[1] doi:10.1038/s41598-026-53415-5 [code]
Computational design and immunoinformatics validation of a T cell multi-epitope vaccine targeting glioblastoma stem cells.
Journal: Scientific reports
In common: RDKit, PyTorch, SciPy, 2 other tools, computational modeling (no new data), 2 references
[2] doi:10.1021/acs.jmedchem.6c00231 [code]
Applying Deep-Learning-Driven &lt;i&gt;De Novo&lt;/i&gt; Design to Hit Identification: A Case Study on A&lt;sub&gt;2A&lt;/sub&gt; Adenosine Receptor Antagonists.
Journal: Journal of medicinal chemistry
In common: RDKit, PyTorch, SciPy, 1 other tool, 2 references
[3] doi:10.1021/acs.jcim.6c01299 [code]
Targeting BCL-2 through Deep Learning-Based Drug Repurposing: A Multimodal Approach Combining Diffusion-Based Generative Modeling, Neural Relational Inference, and In Vitro Validation.
Journal: Journal of chemical information and modeling
In common: RDKit, PyTorch, SciPy, 2 other tools, computational modeling (no new data)
[4] doi:10.1093/bib/bbag118 [code]
Drug screening for α-synuclein aggregation inhibitors via multimodal graph neural network.
Journal: Briefings in bioinformatics
In common: RDKit, PyTorch, SciPy, 2 other tools, computational modeling (no new data)
[5] doi:10.1038/s41586-026-10670-w [code]
Zero-shot design of drug-binding proteins via neural iterative selection-expansion.
Journal: Nature
In common: RDKit, PyTorch, SciPy, 2 other tools, computational modeling (no new data)
[6] doi:10.1038/s41467-026-75444-4 [code]
Structural insights enable drug discovery for the neuronal NBCn2 carbonate transporter.
Journal: Nature communications
In common: RDKit, SciPy, Matplotlib, 1 other tool, 1 reference
[7] doi:10.1098/rstb.2024.0461 [code]
Shallow recurrent decoders for neural and behavioural dynamics.
Journal: Philosophical transactions of the Royal Society of London. Series B, Biological sciences
In common: PyTorch, SciPy, Matplotlib, 1 other tool, computational, 1 reference
[8] doi:10.1038/s42003-026-10957-8 [code]
Brain defence by the extracellular matrix protein Cochlin.
Journal: Communications biology
In common: RDKit, PyTorch, SciPy, 2 other tools
[9] doi:10.1371/journal.pone.0345854 [code]
Shedding light on neural learning to rank models for anticancer drug prioritization.
Journal: PloS one
In common: RDKit, PyTorch, SciPy, 2 other tools
[10] doi:10.1093/nar/gkag706 [code]
scDifformer: diffusion-based post-training for virtual cell modeling across large-scale single-cell data.
Journal: Nucleic acids research
In common: RDKit, PyTorch, SciPy, 2 other tools

Contribute

The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.

Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.

Request its removal

To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).

Discussion, reproductions, activity

Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.

Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.

Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.