Loading...
Searching...
No Matches
cage_affiliation.hpp
Go to the documentation of this file.
1//-----------------------------------------------------------------------------------
2// d-SEAMS - Deferred Structural Elucidation Analysis for Molecular Simulations
3//
4// Copyright (c) 2018--present d-SEAMS core team
5//
6// SPDX-License-Identifier: MIT
7//-----------------------------------------------------------------------------------
8
9#ifndef SEAMS_CAGE_AFFILIATION_H_
10#define SEAMS_CAGE_AFFILIATION_H_
11
12#include <memory>
13#include <vector>
14
54
55namespace ring {
56
61 std::vector<bool> hc;
62 std::vector<bool> ddc;
63};
64
74 std::vector<bool> basal;
75 std::vector<bool> equatorial;
76};
77
79 const std::vector<std::vector<int>> &rings,
80 const std::vector<std::vector<int>> &nList);
81
86 const std::vector<std::vector<int>> &rings,
87 const std::vector<std::vector<int>> &nList);
88
99public:
103 AffiliationUpdater &operator=(AffiliationUpdater &&) noexcept;
105 AffiliationUpdater &operator=(const AffiliationUpdater &) = delete;
106
110 const CageAffiliation &update(const std::vector<std::vector<int>> &rings,
111 const std::vector<std::vector<int>> &nList);
112
115 [[nodiscard]] int lastReclassified() const;
116
117private:
118 struct Impl;
119 std::unique_ptr<Impl> impl_;
120};
121
126 std::vector<bool> hc;
127 std::vector<bool> ddc;
128};
129
152 const std::vector<std::vector<int>> &strictRings,
153 const std::vector<std::vector<int>> &strictNList,
154 const std::vector<std::vector<int>> &permissiveRings,
155 const std::vector<std::vector<int>> &permissiveNList,
156 bool ringAdjacentCompletion = false);
157
176[[nodiscard]] SeededAtomLabels
178 const std::vector<std::vector<int>> &permissiveRings);
179
180} // namespace ring
181
182#endif // SEAMS_CAGE_AFFILIATION_H_
const CageAffiliation & update(const std::vector< std::vector< int > > &rings, const std::vector< std::vector< int > > &nList)
int lastReclassified() const
AffiliationUpdater(AffiliationUpdater &&) noexcept
Topological network criteria functions.
SeededAtomLabels seededCageAffiliation(const std::vector< std::vector< int > > &strictRings, const std::vector< std::vector< int > > &strictNList, const std::vector< std::vector< int > > &permissiveRings, const std::vector< std::vector< int > > &permissiveNList, bool ringAdjacentCompletion=false)
Seeded affiliation over two graphs on the same atoms: the strict graph (typically the mutual k-neares...
SeededAtomLabels ringAdjacentCompletion(const SeededAtomLabels &labels, const std::vector< std::vector< int > > &permissiveRings)
Ring completion of seeded labels.
CageAffiliation cageAffiliation(const std::vector< std::vector< int > > &rings, const std::vector< std::vector< int > > &nList)
StackingPlanes stackingPlanes(const std::vector< std::vector< int > > &rings, const std::vector< std::vector< int > > &nList)
Per-ring affiliation flags, indexed like the input ring vector.
std::vector< bool > ddc
Basal or prismatic of a passing basal pair.
std::vector< bool > hc
Per-atom cage flags from seeded (hysteresis) affiliation.
std::vector< bool > ddc
Atom belongs to an accepted HC-affiliated ring.
Six-rings that are ice-I stacking planes.
std::vector< bool > equatorial
HC basal of a passing pair.
std::vector< bool > basal