13#include <unordered_map>
102 const std::vector<bool> &iceFlag,
const std::vector<int> &ionIndices,
103 int waterType,
double cutoff);
112 const std::vector<int> &shell,
int maxRingSize);
134 const std::vector<std::vector<int>> &cages,
135 const std::vector<int> &guestIndices,
double radius);
141 const std::vector<int> &atoms);
151 const std::vector<std::vector<int>> &rings,
152 const std::vector<std::vector<int>> &cageFaces,
153 const std::vector<int> &guestIndices);
167 const std::vector<bool> &
ice,
168 const std::vector<std::vector<int>> &nListByIndex,
169 const std::vector<int> &ionIndices,
double cutoff);
The main molecular system handler.
int lammpsTypeOfKind(const Table &table, Kind kind)
std::array< double, 3 > periodicCentroid(const molSys::PointCloud< molSys::Point< double >, double > &yCloud, const std::vector< int > &atoms)
Periodic centroid of a set of atoms: every atom is unwrapped to its minimum image about the first,...
IceClusterIons iceClusterIonCensus(const molSys::PointCloud< molSys::Point< double >, double > &yCloud, const std::vector< bool > &ice, const std::vector< std::vector< int > > &nListByIndex, const std::vector< int > &ionIndices, double cutoff)
std::vector< int > shellRingCensus(const std::vector< std::vector< int > > &rings, const std::vector< int > &shell, int maxRingSize)
Rings of the water network that pass through a first shell: the census by size of every ring with at ...
molSys::PointCloud< molSys::Point< double >, double > ionCloud(const molSys::PointCloud< molSys::Point< double >, double > &src, const Table &table)
IonEnvironment ionEnvironment(const molSys::PointCloud< molSys::Point< double >, double > &yCloud, const std::vector< bool > &iceFlag, const std::vector< int > &ionIndices, int waterType, double cutoff)
iceFlag is indexed like yCloud.pts; waterType selects the water oxygens (0 accepts every atom that is...
std::vector< int > indicesOf(const molSys::PointCloud< molSys::Point< double >, double > &yCloud, const Table &table, Kind kind)
IonState
Ions read against a per-atom ice assignment.
GuestOccupancy guestOccupancyInside(const molSys::PointCloud< molSys::Point< double >, double > &yCloud, const std::vector< std::vector< int > > &rings, const std::vector< std::vector< int > > &cageFaces, const std::vector< int > &guestIndices)
Occupancy by ray-parity: a guest sits in a cage when a ray from the guest, in the frame that unwraps ...
Table parseSiteSpec(std::string_view spec)
GuestOccupancy guestOccupancy(const molSys::PointCloud< molSys::Point< double >, double > &yCloud, const std::vector< std::vector< int > > &cages, const std::vector< int > &guestIndices, double radius)
cages are vertex index lists into yCloud.pts; radius in the cloud's length unit (half the cage diamet...
This contains a collection of points; contains information for a particular frame.
This contains per-particle information.
Guests read against enumerated cages.
std::vector< int > cageOfGuest
per guest in input order, cage index or -1
std::vector< double > centreDistance
per guest, distance to its cage centre (-1 when free)
int occupied
cages with at least one guest
int multiply
cages with more than one guest
int free
guests in no cage
std::vector< int > guestsPerCage
per cage, guests inside
std::vector< int > occupancyHistogram
hist[k] = cages with k guests
Connected components of ice atoms on the water graph, and the ion count per component: each ion is as...
std::vector< int > clusterOfIon
per ion in input order, or -1
std::vector< int > ionsInCluster
per cluster
std::vector< int > clusterOf
per atom, cluster id or -1
std::vector< int > ion
cloud indices of the ions, in input order
std::vector< int > shell
water molecules within the cutoff
std::vector< std::vector< int > > members
per ion, the shell molecules (cloud indices)
std::vector< double > iceFraction
labelled share of that shell
std::vector< IonState > state
std::unordered_map< int, Kind > typeToKind
Kind ofType(int typeId) const
Kind of(const molSys::Point< double > &p) const
std::unordered_map< int, Kind > atomOverride