seams CLI¶
The engine command is seams. The parser is Argum (the same parser as
eonclient). Help, errors, ice-type counts, and --features are
colorized through Argum’s environmentColorStatus.
seams --help
seams --version
seams --features
seams read FILE
seams chill FILE
seams chill-plus FILE
seams cages FILE
seams rdf FILE
seams cn FILE
seams hbonds FILE
seams pairs FILE
seams density-z FILE
seams domains FILE
A positional command and a positional file are required. Missing
either, an unknown command, or a parse error exits 2.
Every command accepts --format text|json. Text is the human-readable
format documented below. JSON emits one JSON object per output frame on
stdout, with the fields schema (dseams.cli/v1), command, frame,
status, and text. The text field contains the command’s text output
without changing its contents. --strict-input returns 2 when a requested
frame has no atoms; without it, empty input retains the legacy text output.
Commands¶
The command positional help string is read | chill | chill-plus | cages | fingerprint | ions | f4 | steinhardt | rdf | cn | hbonds | pairs | density-z | domains. chill_plus is an accepted alias of
chill-plus (not listed in that help string).
command |
action |
stdout |
|---|---|---|
|
print the loaded cloud |
|
|
CHILL labels |
|
|
CHILL+ labels |
same as |
|
ice score on six-membered rings |
|
|
closed polyhedra whose ring-size census matches |
one line per signature, |
|
topology keys of the bonded graph |
|
|
the frame’s distinct keys as library lines |
|
|
atoms named by key libraries |
|
|
ions classed by their first water shell against the seeded cages |
|
|
Rodger F4 on H-O…O-H pairs |
|
|
host \(q_3\), \(\bar q_3\), \(q_{12}\), \(\bar q_{12}\) |
|
|
partial site-site \(g_{IJ}(r)\) |
|
|
site-site coordination number |
|
|
cage degree on |
|
|
geometric hydrogen-bond count |
|
|
mutual-nearest contact pairs |
|
|
type-resolved \(\rho\) along one axis |
|
|
polar/apolar Stoddard component |
|
chill / chill-plus default to --graph cutoff: nneigh::neighListO,
every pair closer than --cutoff. --graph mutual (alias knn) calls
nneigh::kNearestNeighbourList with k = 4, mutual; there --cutoff
is only the cell-size hint (cutoff + 1.5). Other graphs exit 2. Then
chill::getCorrel / chill::getIceTypeNoPrint or
chill::getCorrelPlus / chill::getIceTypePlusNoPrint.
--water-types T,U is the neighbour mask (OW only); --type is the
load filter and is not that mask. Ice names are the
molSys::atom_state_type enumerators: cubic, hexagonal,
water, interfacial, clathrate, interClathrate, reCubic,
reHex, unclassified.
cages reports cage membership, not CHILL labels: hexagonal = HC
(Ih), cubic = DDC (Ic), water = neither. The bond graph is
--graph.
rdf and cn call rdf::partialRdf on LAMMPS type IDs from
--types I,J (default I = J = --type). --cutoff is rmax. --bins
is optional. The volume is nneigh::dumpVolume (det of dump H).
cn integrates the site-site RDF to that cutoff
(rdf::coordinationNumber). Help text and the cn header say
site-site. There is no cage CN and no --ions.
cn --ions --site SPEC builds site::ionCloud and prints the mean
unlike degree of type-1 (cation) vertices from
nneigh::neighList(cutoff, ions, 1, 2). The line contains cage.
pairs --site SPEC prints the size of
nneigh::mutualNearestUnlike(ions, 1, 2). That line contains
contact-pair, not ionicity. Both need --site.
density-z calls site::densityZ. --type 0 (default) keeps
every atom; --type I keeps that LAMMPS type. --axis is x,
y, or z (default z). --bins defaults to the bound span
over \(0.1\). Each slab volume is \(A_\perp \times dz\), with
\(A_\perp\) from dump H (recovered lx, ly, lz, not bound
spans). This is not an ice score.
chill, chill-plus, and cages call site::iceScoreAllowed.
When --family is not waterIce they print site::refuseIceScore
(the message names the family) and exit 2. They do not fall through
to atom_state_type::water. Unflagged seams chill stays
waterIce. If --family is absent and the frame has more than two
LAMMPS types, one stderr line names --family and the command
still exits 0.
An empty cloud (nop 0) still prints. chill / chill-plus print
nop 0. cages prints nop 0 graph KIND hexagonal 0 cubic 0 water 0. rdf / cn still emit their headers. hbonds prints
nop 0 hbonds 0. density-z prints # z rho and zero-density bins.
hbonds loads the heavy-atom cloud with --type and the hydrogen
cloud with --htype, then builds a cutoff neighbour list. Without
--donors it uses the water two-hydrogen-per-molecule set
(hAtomMolList). --donors passes every hydrogen index to
populateHbondsFromDonors. --hdist and --hangle are the acceptor-H
distance and the acceptor-centered O-O-H angle cutoffs (angle
between OO and OH); the C++ defaults stay the water values and are
not an ionic-liquid criterion.
Options¶
Names and help text are the Argum Option / Positional
definitions in src/seams_cli.cpp. Defaults are the C++
initializers (Argum does not write defaults into the help).
flag |
default |
Argum help |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
omitted ( |
|
|
|
|
|
off |
|
|
|
|
|
off |
|
|
|
|
|
unset |
Neighbour graph on these LAMMPS types only (OW). Substrate and ions never enter the 4-NN list |
|
|
|
|
|
Material family. Ice scores refuse every value except |
|
Type-to-kind map for |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
off |
Seeded cages: fill the last vertex of six-rings whose other vertices carry a label (ring completion) |
|
|
|
|
off |
|
|
|
|
|
|
|
|
|
|
|
off |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
water C++ default |
|
|
water C++ default |
|
|
off |
|
|
|
Dotenv of |
|
Print the resolved runtime knobs and exit |
|
|
|
Threads per particle for the device k-NN ( |
|
|
CUDA block size ( |
|
|
Fraction of free device memory for a resident batch ( |
|
|
Link-cell hint so NPT frames share a grid ( |
--help, --version, --features, and --print-config print and
exit 0 before any file is opened.
--tpp, --block, --resident, and --cell apply to the device
TUM ice score (seams cages) only. CHILL and \(q_{lm}\) stay on
the host.
--cutoff is in Angstrom. -k also applies to knn-union (the
same k feeds nneigh::kNearestNeighbourList). --graph is used
by cages and fingerprint; a fingerprint wants one graph, so
seeded (two graphs) falls back to cutoff there. --complete is used by cages and ions: it
passes true as the fifth argument of seededCageAffiliation.
--type¶
value |
single frame ( |
|
|---|---|---|
|
LAMMPS: type 2, then type 1 if that cloud is empty. chemfiles: keep every atom. XYZ: every atom is type 1 |
LAMMPS: every atom ( |
|
LAMMPS |
LAMMPS |
XYZ always stores type 1. Classification still uses --type after
the read (type 0 then becomes 1).
A mixed-type dump that is not the water guess needs --type I.
density-z treats 0 as every atom, not the oxygen guess.
See Ionic-liquid dumps.
--water-types¶
--type is a load filter (one LAMMPS type, or the oxygen guess).
It is not the neighbour mask. --water-types T,U loads the mixed
dump (loadType = -1) and builds nneigh::kNearestNeighbourList
/ kNearestNeighbourPair on that type set. Ag, I, protein and
ions stay in the cloud for guests and ions, but they never
enter the four neighbours of OW. chill, chill-plus, cages
and ions honour the flag. Ice and cage counts are the water
types only.
seams chill-plus FILE --water-types 1
seams cages FILE --graph seeded --water-types 1
seams ions FILE --ion-types 3,4 --water-types 1
--types¶
Used by rdf and cn. The Argum form is I,J (one comma). A bad
string exits 2 (bad --types (want I,J)). Omit the flag to set both
sides to --type. These are LAMMPS type IDs on the original cloud
(site-site). cn --ions is a different path (ionCloud cage degree).
|
single-frame load |
|
|---|---|---|
omitted |
same as |
same as |
|
keep type |
keep type |
|
every atom ( |
every atom ( |
cmdRdf / cmdCn then call rdf::partialRdf on those two integers.
typeOf still resolves a zero to the first atom (or 1).
seams read and the box¶
seams read prints gen::formatDumpBox: the three bound spans,
then xy xz yz when box.size() >= 6. There is no separate tilt
flag. seams rdf uses the same dump H (gen::periodicDist and
nneigh::dumpVolume). seams density-z uses recovered lx, ly, lz for \(A_\perp\), not bound spans. The in-plane sampler remains
rdf2::sampleRDF_AA; see
Sheared cells.
--graph¶
Used only by cages.
value |
graph |
|---|---|
|
mutual |
|
pairs inside |
|
mutual k-nearest ( |
|
union k-nearest ( |
nneigh::bondGraphFromName also accepts knn-mutual and mutual
as knn, and union as knn-union. seeded is handled in the CLI
and is not a BondGraph enumerator. Any other name throws
std::invalid_argument (unknown bond graph 'NAME' (use cutoff, knn, knn-union)) and cages exits 2.
Candidate cutoff for the knn graphs is --cutoff + 1.5.
--cage-edge¶
Used by cages --signature.
Each face is kept when every minimum-image edge lies in the window.
The default is 2.65,3.15.
none (also off or false) leaves that test out, and the cage bound is the face census alone, which is the search from before the window existed.
hc and ddc keep their geometric finders. The window applies to the ring-census search.
The numbers are in the coordinate units of the file.
The LAMMPS dumps in this tree are angstroms, and the default covers the oxygen-oxygen contacts of the reference cells (about 2.74 to 2.81).
Set the window to the heavy-atom contact range of the model.
Widen it for a compressed cell or a guest that stretches a cage.
A file in nanometres uses 0.265,0.315, or none when the contact range is unknown.
Use a comma, a colon, or a slash. 2.65-3.15 is rejected.
seams cages FILE --graph cutoff --signature 512
seams cages FILE --graph cutoff --signature 512 --cage-edge none
seams cages FILE --graph cutoff --signature 512 --cage-edge 2.4,3.4
The same string is SEAMS_CAGE_EDGE.
Python passes it as frame.cages_by_signature("512", edge="none").
Lua passes it as dseams.cages_by_signature(frame, "512", {edge = "none"}) with require("dseams").
The C entry is seams_frame_signature_edge; a null edge string is the default window.
Runtime knobs¶
Defaults live in the binary. An optional dotenv (SEAMS_CONFIG or
./seams.env) fills unset keys. The process environment wins the
file; CLI flags win the environment. seams --print-config dumps
the table.
variable |
default |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
occupancy picker ( |
|
occupancy picker ( |
|
|
|
empty |
Analysis choice (which command) is not this table.
File suffix¶
seams picks a reader from the path suffix
(path.find_last_of('.')):
suffix |
reader |
compile-time gate |
|---|---|---|
|
|
always |
|
|
|
|
|
|
anything else |
LAMMPS dump ( |
always |
A build without chemfiles or readcon-core treats .pdb / .gro /
.dcd / .con as LAMMPS dumps. seams --features reports those
gates.
Frame ranges¶
Omit --last, or set it equal to --frame, for one frame. That
path calls load and works for every linked suffix.
A range (--last > --frame) dispatches by suffix. LAMMPS dumps use
sinp::forEachLammpsFrame, with one handle per OpenMP worker and
deterministic output order. XYZ is a single-frame input and emits frame 1
at most. Chemfiles and readcon inputs are read serially until the requested
range or the first missing frame. --jobs 1 is serial; non-LAMMPS readers
do not use OpenMP workers.
A serial range carries rings and cage affiliation from one frame to the
next: primitive::RingUpdater and ring::AffiliationUpdater recompute only
the atoms whose bounded ball changed. LAMMPS ranges with --jobs above 1,
MPI ranks, single frames and --rebuild rebuild every frame. The output is
the same either way; tests/cli_carry.py checks that.
An MPI build (-Dwith_mpi=enabled) started by mpiexec shares a LAMMPS
dump’s frames among the ranks in serpentine rounds: of R ranks, rank r takes
slot r of even rounds and slot R-1-r of odd ones, so a cost that steps,
drifts or alternates along the run reaches every rank. Rank 0 prints every
frame in order; ranks past the frame count idle. Other readers stay on rank
0, --per-atom needs a single rank, ranks that differ in arguments,
directory or SEAMS_ settings are refused, and colour stays off unless the
environment forces it. Each rank runs --jobs frame workers, OpenMP threads
inside a frame, and linkcell’s rayon pool; on a launch of several ranks,
OMP_NUM_THREADS and RAYON_NUM_THREADS default to 1 when unset. For
hybrid runs set them per rank and bind each rank to its cores; with Open
MPI:
mpiexec -n 2 --map-by slot:PE=4 -x OMP_NUM_THREADS=4 -x RAYON_NUM_THREADS=1 \
seams --jobs 4 --frame 1 --last 100 cages dump.lammpstrj
On a host without a libfabric network, Open MPI’s ofi transport spends
about a second probing at start-up; --mca btl ^ofi skips it. Ranks then
matched --jobs on one 8-core node, beat it where frame cost steps or
alternates along the run, and eight ranks on two 4-core core sets talking
only over TCP took about half the time of threads on one. A run without a
launcher, or with SEAMS_MPI=0, never initialises MPI.
--features¶
Heading Compile-time features: then one line per backend. Each
line is NAME: enabled or NAME: disabled.
printed name |
macro |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Colors¶
colorizerForFile(environmentColorStatus(), stdout). Argum’s
environmentColorStatus (first match wins):
condition |
result |
|---|---|
|
off |
|
on |
|
on |
|
off |
|
off |
|
allowed (TTY decides) |
|
allowed |
|
off |
otherwise |
TTY / |
Color roles on this binary:
role |
used for |
|---|---|
|
|
|
|
|
|
|
|
|
usage line; |
|
parse / missing-args / unknown-command; |
uncolored |
|
Exit status¶
code |
when |
|---|---|
|
success, including |
|
parse error, missing command or file, unknown command, unknown |
Examples¶
seams read input/traj/exampleTraj.lammpstrj
seams chill-plus input/traj/exampleTraj.lammpstrj --cutoff 3.5 --type 2
seams cages input/traj/mW_cubic.lammpstrj --type 1 --graph seeded
seams cages dump.lammpstrj --graph cutoff
seams cages dump.lammpstrj --graph knn
seams cages dump.lammpstrj --graph knn-union
seams chill-plus dump.lammpstrj --frame 1 --last 50 --jobs 8
seams rdf dump.lammpstrj --types 1,2 --cutoff 10 --bins 100
seams cn dump.lammpstrj --types 1,2 --cutoff 4.5
seams cn dump.lammpstrj --ions --site '1=cationHead,2=anion' --cutoff 6.0
seams pairs dump.lammpstrj --site '1=cationHead,2=anion'
seams hbonds dump.lammpstrj --type 2 --htype 1
seams hbonds dump.lammpstrj --donors
seams chill dump.lammpstrj --family ionicLiquid
Lua and Python are not this binary. See
yodaStruct
(require("dseams")) and
PydSEAMSlib
(pydseams).