Network pharmacology / Paper validation

Network Pharmacology + Molecular Docking + Molecular Dynamics: How to Do the Validation Section

This page is for graduate students writing network pharmacology papers on traditional Chinese medicine or natural products. It follows the order in which reviewers check the work: the full workflow table, current database status, where screening thresholds come from, how to validate with docking and molecular dynamics, and the questions reviewers raise most often with ways to address them. Database status and software versions were checked on 2026-10-10.

Short answer

A network pharmacology validation section holds up when it rests on three layers of evidence: compounds and thresholds with traceable sources, computational validation with controls, and experiments on the core compound-target pairs. For docking, define the binding site, redock first (RMSD ≤ 2 Å), dock a positive control under the same settings, and rank compounds relative to it instead of using unsourced cutoffs such as −5 kcal/mol. For molecular dynamics, run at least 3 independent replicas per complex, report the mean and standard deviation of ligand RMSD, contact and hydrogen-bond occupancy, and use MM/PBSA only to compare against the positive control. Finally, test the top-ranked compound-target pairs with molecular-level binding assays or with cell and animal experiments.

Summary

When reviewers read the validation section, they mainly check the five points below. The first three have to be settled before any computation starts.

The interpretation paper of the WFCMS Network Pharmacology Evaluation Method Guidance surveyed network pharmacology papers indexed in CNKI (up to June 2021): fewer than 30% validated their results experimentally, about one third of those with in vitro or in vivo experiments, and most studies only inferred their results from the literature. Reviewers have seen many manuscripts that rely on docking alone, and docking is no longer accepted as validation.

Compounds have chemical evidence

Show that each core compound is actually present in the herb or preparation used, with quantitative data: your own UHPLC-HRMS analysis, or quantitative literature on the same herb. Compounds taken only from a database ingredient list are the most likely to draw requests for more evidence.

Thresholds are fixed in advance and sourced

Fix OB, DL, target-prediction scores, GeneCards scores, STRING confidence and the core-target rule before seeing the results, and state database versions and access dates in the methods. Changing thresholds after seeing how many hits you get is the problem reviewers spot most easily.

Docking has a positive control and redocking

Dock to a defined site, validate the settings by redocking the co-crystallized ligand, and use a known inhibitor as a positive control. Compare compound scores with the positive control.

Molecular dynamics has independent replicas

Run at least 3 independent simulations per complex, report the mean and standard deviation, and simulate the positive control with the same protocol. An RMSD curve from a single trajectory does not show that binding is stable.

Core compound-target pairs have experiments

The computational results have to end in experiments: molecular-level binding or enzyme assays (SPR, MST, ITC, enzyme inhibition) to test direct interaction, and cell or animal experiments to test the pathway. The submission requirements of Frontiers in Pharmacology and Drug Design, Development and Therapy both treat experimental validation as a precondition for review.

Full workflow

Tool versions are current as of 2026-10-10. Steps 1, 9, 10 and 12 decide whether the validation section holds up; for steps 2 to 8, reviewers mainly check thresholds and versions.

StepInputToolsOutputFigure
1 Collect and confirm compoundsHerb or formula nameHERB 2.0, BATMAN-TCM 2.0, TCMSP, literature; UHPLC-HRMS when availableCompound table: name, PubChem CID, InChIKey, source, contentChromatogram for compound identification; compound source table
2 ADME screeningCompound SMILESOB/DL from TCMSP; SwissADMERetained compounds and threshold rationaleCompound screening table
3 Compound targetsCompound SMILESSwissTargetPrediction, BATMAN-TCM 2.0 (known and predicted reported separately), PharmMapperCompound-target pairs (UniProt IDs mapped to gene symbols)Compound-target network
4 Disease genesMeSH preferred disease name; GEO datasetsOMIM, DisGeNET curated, GeneCards; GEO differential expressionDisease gene tableVenn diagram of disease gene sources
5 OverlapTwo gene sets (harmonized to HGNC symbols)R or PythonOverlap genesVenn diagram of compound targets and disease genes
6 PPI and core targetsOverlap genesSTRING 12.5, Cytoscape 3.10.5 + stringApp 2.2Network TSV, topology tablePPI network; bar chart of core-target degree
7 Herb-compound-target-pathway networkResults of steps 1 to 8CytoscapeNetwork fileMulti-layer network
8 GO/KEGG enrichmentOverlap genes + background gene setclusterProfilerEnrichment table (with adjusted P values)Dot plot or bar chart
9 Molecular dockingPDB structures of core targets; 3D structures of core compounds and positive controlsAutoDock Vina 1.2.7, MeekoScore table, docked poses, redocking RMSDScore heat map (with positive control); 2D/3D interaction diagrams; redocking overlay
10 Molecular dynamicsDocked complexes (including positive control)GROMACS 2026; ligand parameters from AmberTools/ACPYPE or OpenFFAt least 3 trajectories per complexLigand RMSD, pocket RMSF, hydrogen-bond and contact occupancy (mean ± SD)
11 Binding free energyMD trajectoriesgmx_MMPBSA 1.7.0ΔG components and per-residue decompositionEnergy component bar chart; per-residue contribution plot
12 Experimental validationCore compounds and core targetsSPR, MST, ITC, enzyme assays; cell and animal experimentsExperimental dataBinding curves; Western blots, etc.

Databases

The table reflects actual access on 2026-10-10. In the methods, give three items for each database: version or URL, access date and screening criteria.

The WFCMS guidance interpretation paper examined 13 network pharmacology papers on ginseng in CNKI: even with the same database and the same thresholds, the number of included compounds differed, because thresholds were changed and compounds added from the literature were not explained. In TCMSP, 22 ginseng compounds have OB > 30% and DL > 0.18, and 17 of them have predicted targets. Keeping the raw export tables and providing them as supplementary files is the most direct way to let others reproduce your compound and target counts.

DatabaseStatus in Oct 2026Practical experienceAlternatives or supplements
TCMSPtcmsp-e.com is now a portal: the legacy version is at old.tcmsp-e.com (footer version 2.3, latest update-log entry 2025-04-20); the new TCMSP 9.0.1 is at next.tcmsp-e.com, and its full analysis tools require a membershipThe methods text generated by the new version uses OB ≥ 15% and DL ≥ 0.11 by default, unlike the 30%/0.18 common in papers based on the legacy version, so do not mix data from the two versions in one paper; the legacy target tables can only be copied page by page, experience posts mostly use scripts, and you should check target counts after exportHERB 2.0, BATMAN-TCM 2.0
HERB 2.0herb.ac.cn/v2, published in NAR in November 2024Adds curation of 8,558 clinical trials and 8,032 meta-analyses; useful for finding clinical and experimental evidence for a herb or compound, which answers the question of whether a compound is supported by evidenceTCMSP, literature
BATMAN-TCM 2.0bionet.ncpsb.org.cn/batman-tcm, NAR 202417,068 known compound-target interactions and about 2.32 million predicted ones; bulk download from the Download page; report known and predicted targets separatelySwissTargetPrediction
SwissTargetPredictionAccessible; last method update in 2019Supports human, rat and mouse only; input SMILES from PubChem, which is less error-prone than searching by name; the meaning of Probability is explained in the next sectionPredicted part of BATMAN-TCM 2.0
PharmMapperlilab-ecust.cn/pharmmapper is accessible; last method update in 2017Reverse pharmacophore matching with a job queue; results are UniProt IDs, and when mapping them to gene symbols with UniProt ID mapping keep only reviewed human entriesSwissTargetPrediction
GeneCardsAccessible; Export on the search results page gives a CSVRelevance score is a search relevance score and is not comparable between searches for different diseases; confirm the preferred disease name in MeSH first, search synonyms separately and mergeOMIM, DisGeNET curated, GEO differential genes
OMIMWeb search availableBulk download of genemap2 requires an API key, and approval can take several working days, so export from the web search when you are short of time; coverage is mainly Mendelian, so few genes for complex diseases is normalDisGeNET curated
DisGeNETdisgenet.org now redirects to disgenet.comA free academic account shows curated data only, so results from older tutorials using all sources plus a score cutoff cannot be reproduced with a free account; state in the methods that you used curated dataOMIM, GeneCards
STRINGCurrent version 12.5Use version-12-5.string-db.org to pin the version so that results still match after a later upgrade; the combined score indicates how likely an interaction is to be true, not its strength—
Cytoscape and appsCytoscape 3.10.5 (2026-09-29); stringApp 2.2.0; the latest cytoHubba release in the App Store dates from 2017, CytoNCA from 2014, MCODE 2.0.3 from 2023The stringApp 2.2.0 release notes say this version keeps it working after 2024-12-31, so upgrade stringApp first if import fails; basic topology such as degree is available from the built-in Analyze NetworkPython networkx, R igraph

Thresholds

Most thresholds have no agreed standard. The reliable approach is to choose a value with a source, fix it before seeing the results, and state the reason in the methods.

ParameterCommon practiceSourceProblemHow to report
OB / DLOB ≥ 30%, DL ≥ 0.18; lowered to OB ≥ 20% when too few compounds remainDL 0.18 is the drug-like level defined by TCMSP; the TCMSP parameter page suggests OB ≥ 20% and DL ≥ 0.1; the licorice example in the original TCMSP paper used OB ≥ 40% and DL ≥ 0.18OB is a predicted oral bioavailability and does not apply to injections or topical preparations; adjusting thresholds to the number of compounds is post hoc selectionState the TCMSP version and threshold source; add pharmacokinetic or plasma-compound literature for the retained core compounds
SwissTargetPrediction ProbabilityTop 15 per compound; or Probability ≥ 0.1 or > 0Probability is the probability that a bioactive molecule has the protein as a target, not the probability that the compound is active; in external testing, 72% of molecules had at least one known target in the top 15, and the top-ranked target was correct for 28%Most of the top 15 are false positivesTake the top 15 for all compounds and compare with known targets in BATMAN-TCM
GeneCards Relevance score≥ 1, ≥ median, ≥ 2 × medianNone; the score comes from text relevance in the GeneCards search engineA high score only means the gene entry mentions the disease more, not causation; scores are not comparable between searchesUse OMIM, DisGeNET curated or disease GEO differential genes as the main source, GeneCards only as a supplement, and report the search terms
STRING combined score0.4 or 0.9, with the Textmining channel removedSTRING calls ≥ 0.400 medium confidenceHigh-scoring edges may rest on text mining alone (see the test in the next section)Report the STRING version, cutoff and evidence channels used
Core targetsDegree ≥ median; or degree, betweenness and closeness all ≥ median; top 10 by cytoHubba MCCCommon practice; the WFCMS guidance interpretation notes that topology screening criteria are inconsistent and lack a basisDegree favors well-studied genes; in small networks many nodes tie at the medianFix one method in advance and check core targets independently against disease omics data or the literature

PPI network

The usual approach is to harmonize compound targets and disease genes to HGNC symbols, take the overlap, submit it to STRING, compute topology in Cytoscape, and take nodes with degree at or above the median as core targets.

Core targets obtained this way are highly uniform. Diao et al. (2026) surveyed 1,038 natural-product network pharmacology studies published from October 2023 to June 2024: AKT1 appeared among the core targets in 48.8% of studies, TNF in 39.1% and EGFR in 34.8%; AKT1 appeared in 54.9% of database-only studies and in 19.6% of studies that integrated omics or experimental data. Quercetin appeared in 71.9% and 42.3% of the two groups, respectively.

One reason is that STRING text-mining evidence favors well-studied genes. The script below first checks which protein each gene symbol maps to with get_string_ids, then fetches a network from a pinned STRING API version, flags edges supported only by text mining and lists core targets by median degree. Tested on this page (2026-10-10, STRING 12.5 API, Python 3 standard library): with 10 genes that recur in network pharmacology papers (AKT1, TNF, IL6, PTGS2, ESR1, STAT3, MAPK1, CASP3, BCL2, VEGFA) at required_score=700, the network had 33 edges, 5 of them supported only by text mining; the 0.88 score for AKT1–IL6 came entirely from text mining. The 9 connected nodes had a median degree of 8, and 5 nodes tied at or above the median.

The same test showed that in STRING 12.0 and 12.5 a query for VEGFA returns COL18A1 (9606.ENSP00000352798) without any error; queries by UniProt accession P15692 or Entrez ID 7422 return nothing, while STRING 11.5 still matches VEGFA correctly. If the gene list is submitted directly to the network endpoint, VEGFA enters the network as COL18A1 (at required_score=400, COL18A1 appears with 3 edges). VEGFA is a frequent core target in network pharmacology papers, so check the mapping before submission and report genes with inconsistent mapping separately in the methods.

Ways to reduce this uniformity: check whether core targets change in the disease using transcriptomic or proteomic data; report betweenness and other metrics alongside degree; and provide the full target list as a supplement so reviewers can judge.

string_hubs.py (Python standard library only)python
# Usage: python3 string_hubs.py overlap_genes.txt 700
# overlap_genes.txt: one overlapping gene symbol per line; second argument is required_score (0-1000)
import sys, csv, io, statistics, urllib.parse, urllib.request
from collections import defaultdict

API = "https://version-12-5.string-db.org/api/tsv"


def post(method, **params):
    params.update({"species": 9606, "caller_identity": "np_validation_tutorial"})
    data = urllib.parse.urlencode(params).encode()
    with urllib.request.urlopen(f"{API}/{method}", data=data) as r:
        return list(csv.DictReader(io.StringIO(r.read().decode()), delimiter="\t"))


genes = [g.strip() for g in open(sys.argv[1]) if g.strip()]
score = int(sys.argv[2]) if len(sys.argv) > 2 else 400

# 1. Check symbol mapping first: STRING silently maps unmatched symbols to other proteins
mapped = post("get_string_ids", identifiers="\r".join(genes), echo_query=1, limit=1)
hit = {m["queryItem"]: m for m in mapped}
for g in genes:
    if g not in hit:
        print(f"WARNING not found in STRING: {g}")
    elif hit[g]["preferredName"].upper() != g.upper():
        print(f"WARNING {g} mapped to {hit[g]['preferredName']} ({hit[g]['stringId']})")
ids = [hit[g]["stringId"] for g in genes if g in hit and hit[g]["preferredName"].upper() == g.upper()]

# 2. Fetch the network using only consistently mapped STRING IDs
rows = post("network", identifiers="\r".join(ids), required_score=score)

edges = {}
for x in rows:
    key = tuple(sorted((x["preferredName_A"], x["preferredName_B"])))
    other = max(float(x[c]) for c in ("nscore", "fscore", "pscore", "ascore", "escore", "dscore"))
    edges[key] = (float(x["score"]), float(x["tscore"]), other)

tm_only = [k for k, (s, t, o) in edges.items() if o == 0]
print(f"edges={len(edges)}  textmining_only={len(tm_only)}")
for a, b in tm_only:
    print(f"  textmining only: {a}-{b} score={edges[(a, b)][0]}")

deg = defaultdict(int)
for a, b in edges:
    deg[a] += 1
    deg[b] += 1
med = statistics.median(deg.values())
print(f"nodes={len(deg)}  median_degree={med}")
for g, d in sorted(deg.items(), key=lambda kv: -kv[1]):
    print(f"{g}\t{d}\t{'>=median' if d >= med else ''}")
Runbash
python3 string_hubs.py overlap_genes.txt 700

Enrichment

The two common gaps in enrichment analysis are an unreported background gene set and missing multiple-testing correction.

Wijesooriya et al. (2022) reviewed 186 articles that used enrichment analysis: 95% of over-representation analyses did not use or did not describe an appropriate background gene set, and 43% did not correct for multiple testing. In network pharmacology studies, the AGE-RAGE and PI3K-Akt pathways appear in 54.9% and 54.7% of studies, respectively (Diao et al. 2026).

A workable approach is to use the union of all compound targets and disease genes as the background and to report the background size, correction method and KEGG access date in the methods. In clusterProfiler, the ont argument of enrichGO() defaults to "MF", so omitting it returns molecular function only; enrichKEGG() downloads current KEGG data online by default, so record the access date.

Tested on this page (2026-10-10, R 4.5.3, clusterProfiler 4.18.4, org.Hs.eg.db 3.22.0, macOS arm64): with the 10 genes above as the overlap set and their 191 STRING 12.5 interaction partners as the background, the script ran successfully. With this background, 170 GO BP terms and 20 KEGG pathways were significant; without universe (the default background of all annotated genes), the counts were 1,493 and 132; omitting ont returned 77 MF terms. Under both backgrounds, the top KEGG pathway was AGE-RAGE signaling pathway in diabetic complications. The example background is for demonstration only; in a real analysis use the union of all compound targets and disease genes.

enrichment.Rr
# Dependencies: BiocManager::install(c("clusterProfiler", "org.Hs.eg.db"))
library(clusterProfiler)
library(org.Hs.eg.db)

hits <- readLines("overlap_genes.txt")     # overlap genes (symbols)
bg   <- readLines("background_genes.txt")  # background: union of all compound targets and disease genes

hits_id <- bitr(hits, fromType = "SYMBOL", toType = "ENTREZID", OrgDb = org.Hs.eg.db)$ENTREZID
bg_id   <- bitr(bg,   fromType = "SYMBOL", toType = "ENTREZID", OrgDb = org.Hs.eg.db)$ENTREZID

ego <- enrichGO(gene = hits_id, universe = bg_id, OrgDb = org.Hs.eg.db,
                keyType = "ENTREZID", ont = "BP",  # ont defaults to "MF"
                pAdjustMethod = "BH", pvalueCutoff = 0.05, qvalueCutoff = 0.2,
                readable = TRUE)
ekegg <- enrichKEGG(gene = hits_id, universe = bg_id, organism = "hsa",
                    keyType = "kegg", pAdjustMethod = "BH",
                    pvalueCutoff = 0.05, qvalueCutoff = 0.2)

write.csv(as.data.frame(ego),   "go_bp.csv", row.names = FALSE)
write.csv(as.data.frame(ekegg), "kegg.csv",  row.names = FALSE)
writeLines(c(paste("hits", length(hits_id)),
             paste("background", length(bg_id)),
             paste("KEGG accessed", Sys.Date())), "enrichment_meta.txt")

Molecular docking

In a network pharmacology paper, docking provides structural plausibility for the core compounds and core targets. A docking score does not prove binding.

Che and Zhang (2025) reviewed 35 network pharmacology papers published in 2024: about 15 used −5.0 kcal/mol as an affinity cutoff and the others used values from −1.2 to −7.0, none with a traceable source; scores from different docking programs are not comparable; none of the 35 papers used a positive control; 4 explicitly used blind docking, and in another 13 different ligands docked to different regions of the protein, suggesting blind docking. In their test on 285 complexes from CASF-2016, Vina scores from site-specific docking correlated with experimental affinity at r = 0.604, against 0.387 for blind docking; for blind docking, the median RMSD was 3.37 Å at exhaustiveness 8 and 2.21 Å at 64, at about 8 times the run time.

Receptor and ligand preparation, box setup and complete commands are covered in /learn/autodock-vina-docking.

  1. 01

    Choose the structure

    Prefer human crystal structures with a co-crystallized ligand and a complete binding pocket, and report the PDB ID and resolution. If only a predicted structure is available, check the pLDDT of the pocket residues first (see /learn/alphafold-results).

  2. 02

    Define the site

    Define the docking box from the co-crystallized ligand position or from functional residues reported in the literature. If the site is unknown, run pocket prediction first and cross-check with a second docking program.

  3. 03

    Redock

    Remove the co-crystallized ligand and redock it with the same settings. A heavy-atom RMSD ≤ 2 Å between the top pose and the crystal pose shows that the settings reproduce the known binding mode (PoseBusters uses the same criterion).

  4. 04

    Positive control

    Dock a known inhibitor of the target, or the co-crystallized ligand, in the same box with the same settings. Compare compound scores with the positive control, and take only compounds that score close to or better than it into MD.

  5. 05

    Report the settings

    Report the box center and size, exhaustiveness, random seed and Vina version, with 2D/3D interaction diagrams and the redocking overlay.

Vina score (kcal/mol)Kd if read as ΔG (298.15 K)Common wording in papers
−4.25about 770 μM"has binding activity"
−5.0about 216 μM"good binding"
−7.0about 7.4 μM"strong binding"
−9.0about 0.25 μM—
Converted with ΔG = RT ln Kd and a 1 M standard state. A Vina score is the output of an empirical scoring function; on CASF-2016, site-specific docking scores correlate with experimental affinity at a Pearson r of about 0.60.

Molecular dynamics

Molecular docking and molecular dynamics are two successive steps: docking searches ligand poses on a nearly rigid receptor and scores them, and molecular dynamics tests whether a pose persists over time in explicit solvent. If the docking site is wrong, MD cannot correct it.

There is no agreed simulation length. The MD reliability checklist published in Communications Biology in 2023 asks for evidence of convergence and at least 3 independent simulations per condition; it does not set a fixed number of nanoseconds. A common practical way to judge equilibration: least-squares fit each frame on the protein backbone to a reference structure, compute the RMSD, apply a running average to the curve, and treat the structure as equilibrated only from the point where the curve no longer rises or falls overall.

Known limitations of MM/PBSA (Genheden and Ryde 2015): the energies are usually too large; ranking is often unreliable when ligand affinities differ by less than 12 kJ/mol (about 2.9 kcal/mol); r² against experiment is about 0.3 across PDBbind and 0 to 0.8 for individual proteins; the entropy term has the largest statistical uncertainty and does not improve results in large tests, so it is often omitted; results are often best with a solute dielectric constant of 2 to 4; and the single-trajectory approach is usually more accurate than the three-trajectory approach. State in the paper whether entropy was computed and which dielectric constant was used.

The current gmx_MMPBSA version is 1.7.0. When copying older tutorials, note that extdiel in &gb has defaulted to 78.5 since 1.5.0 (80.0 before); with Interaction Entropy, report σIE, and treat results as unreliable when σIE exceeds about 3.6 kcal/mol. System setup, mdp parameters and commands are covered in /learn/gromacs-protein-ligand, and computing and plotting RMSD, RMSF, hydrogen bonds and SASA in /learn/md-trajectory-analysis.

MetricQuestion answeredCommon mistake
Ligand RMSD (after fitting on the protein backbone)Whether the ligand stays in its original binding poseFitting on the ligand itself, which hides overall ligand drift
Protein backbone RMSDWhether the overall protein structure is stableUsing it in place of ligand RMSD as evidence of stable binding
Pocket-residue RMSFFlexibility of the binding regionShowing only a whole-protein RMSF curve without marking pocket residues
Hydrogen-bond and contact occupancyWhich interactions persistPlotting only the number of hydrogen bonds over time, without naming residues
Rg, SASAWhether the protein unfolds or collapsesTreating flat Rg or SASA as evidence of stable ligand binding
MM/PBSA or MM/GBSARelative binding strength compared with the positive controlTreating the absolute value as a binding free energy and comparing it directly with experimental ΔG
  • Run at least 3 independent simulations per complex (different initial-velocity random seeds) and report the mean and standard deviation.
  • Show evidence that the analyzed properties have equilibrated, and state how the equilibration and analysis segments are divided.
  • Run at least one simulation from a different starting conformation (for example the second-ranked docking pose) to show that conclusions do not depend on the starting structure.
  • Provide a system setup table: box dimensions, total atoms, number of water molecules, salt concentration, force field and water model, protonation states.
  • Report software versions and provide the initial coordinates, input parameter files and final coordinates.
  • Simulate the positive-control complex with the same protocol.

Reviewer comments

The questions below come from journal review requirements and methodological review papers. The responses can be completed before submission.

QuestionHow to address itBasis
Only computation, no experimentsRun molecular-level binding or enzyme assays on the top-ranked compound-target pairs, then test key pathways in cells or animalsFrontiers in Pharmacology Four Pillars; DDDT submission guidance
Is the compound present in the herb, and in sufficient amount?Analyze the herb or preparation by UHPLC-HRMS, or cite quantitative literature on the same herb; prefer compounds detected in plasmaFour Pillars requirements on compound identification and content
Quercetin, kaempferol and similar compounds hit many targetsGive the compound's content in this herb and evidence of specificity, or discuss it as a secondary compoundFour Pillars; Diao et al. 2026 (quercetin in 71.9% of database-only studies)
Why were OB/DL and other thresholds set this way?Cite the threshold source and state that thresholds were fixed before analysis; for non-oral preparations, explain why OB was not usedTCMSP parameter page; WFCMS guidance on rationality
Core targets are AKT1, TNF and IL6 againCheck core targets against disease omics data; report the full target list; report topology metrics other than degreeDiao et al. 2026
Unclear enrichment background, no correctionReport the background gene set, correction method, software version and KEGG access dateWijesooriya et al. 2022
Blind docking, no positive control, unsupported cutoffSite-specific docking, redocking RMSD ≤ 2 Å, positive control docked under the same settings, relative ranking instead of a fixed cutoffChe and Zhang 2025
MD has a single trajectoryAt least 3 independent replicas per complex, reported as mean ± SDCommunications Biology 2023 reliability checklist
MM/PBSA values are too large or disagree with experimentCompare only relative values against the positive control; state the entropy and dielectric settingsGenheden and Ryde 2015
Database versions and access dates unclear, results not reproducibleProvide access dates, versions, raw export tables and all scriptsWFCMS guidance on data traceability
Formula or extract composition unclearReport the composition ratio, extraction procedure, batch number and chemical characterizationFour Pillars requirements on composition

Practice in China

The target table of the old TCMSP gives protein names (the target_name column), which must be converted to gene symbols before intersection and enrichment. The usual approach in Chinese experience posts is to download human reviewed UniProt entries and match protein names to gene names (Excel VLOOKUP or an R script). Below are test results for this step, the cases that need manual handling, and common problems when importing into Cytoscape.

tcmsp2symbol.py: convert TCMSP target names to gene symbols and flag entries for manual checkingpython
# Usage: python3 tcmsp2symbol.py tcmsp_targets.txt > target_symbol.tsv
# tcmsp_targets.txt: one TCMSP target name per line (target_name column, deduplicated)
# Python 3 standard library only; downloads human reviewed UniProt entries (about 20,000 rows) at run time
import csv, io, re, sys, urllib.request

URL = ("https://rest.uniprot.org/uniprotkb/stream?query=organism_id:9606+AND+reviewed:true"
       "&fields=accession,protein_name,gene_primary&format=tsv")
rec, alt = {}, {}
with urllib.request.urlopen(URL, timeout=600) as r:
    for row in csv.DictReader(io.StringIO(r.read().decode()), delimiter="\t"):
        gene = row["Gene Names (primary)"]
        if not gene:
            continue
        pn = row["Protein names"].split(" [Cleaved")[0]   # drop the cleaved-chain description
        rec.setdefault(re.sub(r"\s*\(.*$", "", pn).strip().lower(), set()).add(gene)  # recommended name
        for name in re.findall(r"\(([^()]*)\)", pn):      # alternative names in parentheses
            alt.setdefault(name.strip().lower(), set()).add(gene)

names = [l.strip() for l in open(sys.argv[1], encoding="utf-8") if l.strip()]
n_rec = n_alt = 0
print("target_name\tsymbols\tmatch")
for n in dict.fromkeys(names):
    key = n.lower()
    if key in rec:
        genes, how = rec[key], "recommended"; n_rec += 1
    elif key in alt:
        genes, how = alt[key], "alternative"; n_alt += 1   # alternative-name match: check each one by hand
    else:
        genes, how = set(), "none"                          # unmatched: look up in UniProt by hand
    flag = "ambiguous" if len(genes) > 1 else how
    print(f"{n}\t{'/'.join(sorted(genes))}\t{flag}")
print(f"targets={len(dict.fromkeys(names))} recommended={n_rec} alternative={n_alt} "
      f"unmatched={len(dict.fromkeys(names)) - n_rec - n_alt}", file=sys.stderr)

Exact matching alone loses about a third of the targets

Test on this page (2026-10-10, old TCMSP 2.3, UniProt REST API): for Scutellariae Radix (Huangqin), the 36 compounds with OB ≥ 30% and DL ≥ 0.18 give 507 compound-target pairs and 124 unique target names. 85 match a UniProt recommended name exactly; matching the alternative names in parentheses adds 15, for 100 in total; 24 match neither way. The R scripts in experience posts also run several extra rounds of matching after replacing hyphens with spaces and dropping parenthesized parts, for the same reason.

Check unmatched and alternative-name matches one by one

In the same test the unmatched names fell into four groups: UniProt changed the recommended name (VEGFA is now Vascular endothelial growth factor A, long form); the TCMSP name is a cleavage product (Thrombin belongs to Prothrombin, encoded by F2); the name covers a gene family (Calmodulin maps to CALM1, CALM2 and CALM3; Heat shock protein HSP 90 to HSP90AA1 and others); and entries of the form "mRNA of …". Among the alternative-name matches, Beta-lactamase was matched to human DPEP1; the Beta-lactamase in the TCMSP table is the bacterial β-lactamase and Cytochrome P450-cam is CYP101 from Pseudomonas putida, so both should be removed and not counted as human targets.

Cytoscape import errors and odd nodes

For the import error Could not initialize preview, experience posts save the Excel sheet as "CSV UTF-8" before importing and replace line breaks, commas, semicolons and other special characters inside cells; the "CSV (comma delimited)" format of Chinese Excel is saved in GBK encoding, so node names with Chinese characters become garbled on import. Write each gene the same way everywhere: HIF1A and Hif1a become two nodes. Isolated targets without edges in the PPI network usually point to an error in the earlier gene-name conversion, so check the mapping table first. The advice in some posts to raise the SwissTargetPrediction threshold when there are too many nodes for a tidy concentric layout amounts to changing a threshold after seeing the results; with many nodes, draw a subnetwork of the core targets instead.

Hand off to an agent

The computational steps are fixed, produce many files and run for a long time, so they suit a science agent. Judgment calls and experiments remain yours.

Example one-sentence instruction: "Study Scutellaria baicalensis for ulcerative colitis: collect compounds and targets from HERB 2.0 and BATMAN-TCM 2.0, screen with OB ≥ 30%, DL ≥ 0.18 and the SwissTargetPrediction top 15; take disease genes from OMIM, DisGeNET curated and GEO differential genes; build a STRING 12.5 network and flag edges supported only by text mining; run GO/KEGG enrichment with the union of all compound targets and disease genes as background; do site-specific docking, redocking and positive-control docking for the top 5 core targets; run 3 replicas of 100 ns for each of the 3 best-scoring complexes and the positive control, compute MM/GBSA and make the figures."

  1. 01

    Retrieval and records

    Queries each database, saves raw export tables and records versions and access dates.

  2. 02

    Network and enrichment

    Runs Python and R scripts for the overlap, PPI, core targets and enrichment, and writes tables and figures.

  3. 03

    Docking

    Downloads PDB structures, prepares receptors and ligands, runs redocking, compound docking and positive-control docking, and outputs the score table and interaction diagrams.

  4. 04

    Molecular dynamics

    Builds systems in an environment with GROMACS, AmberTools and ACPYPE preinstalled, rents a GPU as needed for the replicas, and completes trajectory analysis and gmx_MMPBSA calculations.

  5. 05

    Adversarial review

    Checks whether the task is actually complete, for example whether redocking RMSD is ≤ 2 Å, whether every complex has all its replicas, and whether figures show the mean and standard deviation.

  • The workspace keeps: compound tables, target tables, network TSV files, enrichment results, docking logs and poses, MD input files and analysis results, and all scripts and figures.
  • You still need to check: whether the core compounds are actually present in the herb and in what amount, whether the thresholds fit your study design, and whether the PDB structures and positive controls are appropriate.
  • You design and run the experimental validation yourself.

References

FAQ

Can I publish with network pharmacology, docking and molecular dynamics only, without experiments?

It is hard to get through journals such as Frontiers in Pharmacology or Drug Design, Development and Therapy: the former expects network analysis to be combined with in vitro or in vivo experiments, and the latter expects at least molecular-level in vitro experiments to validate ligand-target interactions. Molecular dynamics is also computation and cannot replace experiments. With limited resources, start with a binding or enzyme assay on the top-ranked compound-target pair.

What is the difference and relationship between molecular docking and molecular dynamics?

Docking searches ligand poses on a nearly rigid receptor and scores them with an empirical scoring function; molecular dynamics simulates the motion of the complex over time in explicit solvent to test whether the docked pose persists. In a paper, docking comes first, MD then tests the best poses, and MM/PBSA finally compares relative binding strength against the positive control.

Does a docking score below −5 kcal/mol mean good binding?

No. The −5 kcal/mol cutoff has no traceable source, and even if a Vina score is read as a true ΔG, it corresponds to a weak binder of about 216 μM. A more reliable approach is site-specific docking with settings validated by redocking, then comparing compound scores with a positive control docked under the same settings.

Can I still use TCMSP?

Yes. The legacy version at old.tcmsp-e.com (footer version 2.3) is searchable; the new TCMSP 9.0.1 at next.tcmsp-e.com requires a membership for its full analysis tools. The new version defaults to OB ≥ 15% and DL ≥ 0.11, unlike the 30%/0.18 common in papers based on the legacy version, so state which version you used.

How long should MD run, and how many replicas?

There is no agreed length; you need convergence evidence showing that the analyzed properties have equilibrated. For replicas, follow the 2023 Communications Biology reliability checklist: at least 3 independent simulations per complex, reported as mean and standard deviation, with the positive control run under the same protocol.

Is DisGeNET still free?

disgenet.org now redirects to disgenet.com. A free academic account shows curated data only, without text-mined data, so the all-sources-plus-score-cutoff approach in older tutorials cannot be reproduced with a free account. State in the methods that you used curated data, and supplement with OMIM or disease GEO differential genes.

Hand your network pharmacology validation to Scientify

Give the herb, the disease and your screening thresholds. The science agent runs database retrieval, network and enrichment analysis, docking and multi-replica molecular dynamics in an isolated cloud computer, and keeps all scripts, parameter files and logs. New users receive free credit worth 5 US dollars.