agentsclimarketplace

Cheminformatics database querying

Skill HolobiomicsLab/asb-skill-collections/collections/metabolomics/v2/skills/cheminformatics-database-querying

Curated, evidence-grounded skill and software-tool collections for scientific AI agents, generated by the AgenticScienceBuilder

Install
npx -y skills add HolobiomicsLab/asb-skill-collections --skill cheminformatics-database-querying

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 14 stars14 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Use when you have a list of identified or suspected chemical compound names (e.g., from GC-MS Match.

The file declares its own license as CC-BY-4.0. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

8.8 KB, ~1.6k tokens by cl100k_base, as published. Nobody here has run it

cheminformatics-database-querying

License: restricted — no clear open-source license detected for the underlying tool; verify licensing before commercial use or redistribution. <!-- asb-license-banner -->

Summary

Query structural and categorical metadata for chemical compounds by name against integrated cheminformatics databases and libraries, using exact mass and functional group data to classify compounds and retrieve bioactivity or occurrence information. This skill bridges mass spectrometry peak identification with chemical property lookups and structural matching.

When to use

Apply this skill when you have a list of identified or suspected chemical compound names (e.g., from GC-MS Match.Factor hits or a query set) and need to enrich them with structural properties (molecular weight, ring count, functional groups), categorical affiliations (presence in PubChem reactive groups, LOTUS natural products, KEGG bioactivities, FEMA flavor database, or FDA/SPL registry), or best-match classification against a user-defined type library using structural similarity (FMCS score >0.95). Use it after spreadOut() and mzExacto() have prepared and extracted your compound candidates.

When NOT to use

  • Your input compound identifiers are already standardized InChI or SMILES strings rather than common chemical names — use direct structure-based tools instead.
  • You require real-time or custom-threshold structural matching beyond the pre-integrated FMCS score >0.95 threshold — categorate() applies a fixed matching pipeline.
  • Your query list contains only mass spectrometry peaks or m/z values without compound name assignments — use mzExacto() first to resolve names before querying databases.

Inputs

  • query_chemicals (character vector of compound names)
  • chem_library (optional data frame of reference chemical groups/types, wide or long format)
  • input_format parameter ('wide' for data frame columns as groups, or 'long' for vectors)

Outputs

  • categorate() output table: rows = query chemicals, columns = query name, matched type/group, matched compound identifier (CMP identifier or 'No')
  • exactoThese() subset: filtered character vector of chemical names meeting Database, FMCS property, or Library criteria

How to apply

Load your query chemical names as a character vector (e.g., c('Linalool', 'Methyl Salicylate')) and optionally a reference chemical library (chem_library) formatted as a data frame with compound type groups (wide format) or individual vectors (long format). Call categorate(query_chemicals, chem_library, input_format = 'wide') to invoke ChemmineR and fmcsR for structural matching via webchem, which queries PubChem, LOTUS, KEGG, FEMA, and FDA/SPL to return a categorized table. Each row reports the query chemical name, matched type/group (or 'No' if no structural match ≥0.95 found), and matched compound identifier (e.g., 'CMP2'). Filter results using exactoThese() with subsetBy parameters ('Database', 'FMCS', or 'Library') and subsetArgs (e.g., 'reactives', 'FEMA', 'MW', 'Rings', 'Groups', 'Atoms', 'NCharges') to subset for downstream mass spectrometry re-querying with mzExacto().

Related tools

Examples

query_chemicals = c("Linalool", "Methyl Salicylate", "Limonene"); chem_library = data.frame(cbind(GroupA = c("Guaiacol", "Ethyl heptanoate"), GroupB = c("Aspirin", "alpha-Pinene"))); query_categorated = categorate(query_chemicals, chem_library, input_format = "wide")

Evaluation signals

  • All query chemical names appear in the output rows; no queries are silently dropped.
  • Matched compound identifiers (CMP1, CMP2, etc., or 'No') are present in output and correspond to entries in the input chem_library or database.
  • Best-match structural scores (if reported) are ≥0.95, confirming FMCS threshold compliance.
  • exactoThese() subsets reduce the chemical list deterministically: Database='FEMA' returns only chemicals marked as flavor/odor in FEMA, FMCS='MW' filters by molecular weight, Library='GroupB' returns only chemicals from that reference group.
  • Spot-check a few output rows against PubChem or LOTUS database entries (via browser) to confirm chemical name resolution and property accuracy.

Limitations

  • categorate() is restricted to compounds resolvable by webchem to PubChem, LOTUS, KEGG, FEMA, or FDA/SPL; obscure or proprietary compounds may return 'No match'.
  • Structural matching threshold (FMCS >0.95) is fixed in the uafR implementation and cannot be tuned without code modification.
  • Performance degrades with very large query lists (>1000 compounds) due to network calls to external databases; batch processing or caching is not documented.
  • Categorical affiliations (e.g., 'reactive', 'natural product', 'FDA approved') reflect database state at query time and may become stale if databases are not regularly updated.

Evidence

  • [methods] categorate() function and structural matching: "categorate() is an overpowered function that accesses a broad array of categorical data for searched chemicals."
  • [other] FMCS structural matching score threshold: "The categorate() function, when applied under structural-matching conditions restricted to 4 chemical type sets, produces a best-match table that correctly identifies compound classifications (e.g.,"
  • [methods] Database sources integrated into categorate(): "Reactive Groups from PubChem, natural products occurrences from LOTUS, bioactivites and risk categories from the Kyoto"
  • [readme] exactoThese() subsetting by database or structural property: "these_chems = exactoThese(query_categorated, subsetBy = "Database", subsetArgs = "FEMA"); these_chems = exactoThese(query_categorated, subsetBy = "FMCS", subsetArgs = "MW", subsetArgs2 = "Between","
  • [readme] Input format and library structure for categorate(): "query_chemicals = c("Linalool", "Methyl Salicylate", "Limonene", "alpha-Thujene"); chem_library = data.frame(cbind(GroupA, GroupB)); query_categorated = categorate(query_chemicals, chem_library,"
  • [methods] ChemmineR, fmcsR, and webchem tool integration: "uafR taps into an amazing set of cheminformatics packages -- ChemmineR, [fmcsR](https://bioconductor.org/packages/release/bioc"

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.