For researchers

Search nets by coordination sequence

Identify a net from numbers you computed yourself, from the browser or from a script.

You have a periodic structure and you have computed its coordination sequences. You want to know which known net it is — or whether it is one at all.

From the browser

On Search topologies, open Symmetry, transitivity and coordination sequences and use the Coordination sequences box.

One sequence per line, one line per crystallographically distinct vertex. Numbers separated by spaces or commas:

4 12 24 42 64
4 10 20 38 60

A net matches when every sequence you give is carried by some vertex of that net. Matching is done on as many shells as you supply, so four or five numbers per vertex is normally enough — and giving more shells than you are confident about will lose you the right answer rather than confirm it.

Vertex symbols, if you have them, go in the box beside it, one per line. They are combined with the sequences: a net must satisfy both.

A sequence search ignores the name, coordination and transitivity fields above it.

From a script, over REST

import requests

response = requests.post(
    "https://mofplus.org/api/v1/nets/search-cs",
    json={
        "cs": [[4, 12, 24, 42, 64], [4, 10, 20, 38, 60]],
        "vs": [],
        "filter_catenated": True,
    },
)
print(response.json()["results"])

No credentials needed. filter_catenated drops interpenetrated nets, whose names carry a -c suffix; leave it false if you want them.

Read response.json()["held_pending_licence"] as well as ["results"]. It counts nets that carried your sequence but are held pending licence verification — 634 of the 3077 records are held, because they came from the RCSR archive alone and nobody has confirmed its terms. A match you cannot see is not the same answer as no match.

On this search the count is currently always 0, and that is not good news: a held record carries no coordination sequence at all — the archive supplies none — so it can never match your query in the first place. Read it as "no held record was ruled out", not as "nothing is being withheld". The API reference has what a held record does when you fetch it directly.

From the mofplus client

The installed client reaches the same code through the older XML-RPC endpoint:

from mofplus import user_api

api = user_api()
names = api.search_cs([[4, 12, 24, 42, 64], [4, 10, 20, 38, 60]], [])

user_api.search_cs filters catenated nets client-side by default; pass cfilter=False to keep them.

A caveat about the other fields

Spacegroup and transitivity are not derivable from a deposited topology file, so some nets have neither on record. A filter on one of those fields can therefore neither match nor rule such a net out, and it drops from the results.

The search says so: it reports how many nets it set aside for want of the data, and the REST response carries the same number as excluded_for_missing_data. Treat a filtered count as a statement about the nets and about the metadata, and clear the field if you want the full candidate list.

Coordination numbers and coordination sequences come from the deposited topology, so every net with a deposit has them — 2443 of the 3077. The 634 RCSR-only records have none at all, and 19 deposited nets (raf and rag among them) store no sequence upstream; their vertices carry an empty list, never a computed stand-in. A coordination-sequence search cannot reach any of those, which is a statement about the sources rather than about the nets.

When nothing matches

  • Drop the last shell or two. A single wrong number at shell five eliminates every candidate.
  • Check you are searching distinct vertices, not every vertex in the cell. Symmetry-equivalent vertices have identical sequences; listing them all is harmless, but listing a vertex you thought was distinct and is not can over-constrain the search.
  • Do not read a zero held count as "nothing withheld". 634 records are held, but none of them carries a coordination sequence, so this search can never report one. A net whose sequence lives only in the RCSR archive is not here to be found at all — see Licensing.
  • Try one vertex at a time. If each sequence has candidates alone but the combination has none, your structure may be a net not yet in the database — which is worth depositing.