Loading...
Searching...
No Matches
topo_bulk.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// This program is free software: you can redistribute it and/or modify
7// it under the terms of the MIT License as published by
8// the Open Source Initiative.
9//
10// A copy of the MIT License is included in the LICENSE file of this repository.
11// You should have received a copy of the MIT License along with this program.
12// If not, see <https://opensource.org/licenses/MIT>.
13//-----------------------------------------------------------------------------------
14
15#ifndef SEAMS_TOPO_BULK_H_
16#define SEAMS_TOPO_BULK_H_
17
18#include <algorithm>
19#include <array>
20#include <fstream>
21#include <iostream>
22#include <iterator>
23#include <cmath>
24#include <memory>
25#include <sstream>
26#include <string>
27#include <vector>
28
29#include <cage.hpp>
30#include <mol_sys.hpp>
31#include <order_parameter.hpp>
32#include <ring.hpp>
33#include <seams_input.hpp>
34#include <seams_output.hpp>
35#include <shapeMatch.hpp>
36
41
46
47namespace ring {
48
51[[nodiscard]] int bulkPolygonRingAnalysis(
52 std::string path, const std::vector<std::vector<int>> &rings,
53 const std::vector<std::vector<int>> &nList,
54 molSys::PointCloud<molSys::Point<double>, double> &yCloud, int maxDepth,
55 int firstFrame);
56
57// DDC HC Ring functions
58
62[[nodiscard]] int topoBulkAnalysis(std::string path, const std::vector<std::vector<int>> &rings,
63 const std::vector<std::vector<int>> &nList,
65 int firstFrame, bool onlyTetrahedral = true);
66
76 std::vector<std::vector<int>> ringsContainingAtom;
77};
78
80[[nodiscard]] RingSearchIndex
81buildRingSearchIndex(const std::vector<std::vector<int>> &rings, int numAtoms);
82
85std::vector<int> findDDC(const std::vector<std::vector<int>> &rings,
86 std::vector<strucType> &ringType,
87 const std::vector<int> &listHC,
88 std::vector<cage::Cage> &cageList);
89
91std::vector<int> findDDC(const std::vector<std::vector<int>> &rings,
92 std::vector<strucType> &ringType,
93 const std::vector<int> &listHC,
94 std::vector<cage::Cage> &cageList,
95 const RingSearchIndex &index);
96
100std::vector<int> findMixedRings(const std::vector<std::vector<int>> &rings,
101 std::vector<strucType> &ringType,
102 std::vector<int> &listDDC,
103 std::vector<int> &listHC);
104
107std::vector<int> findHC(const std::vector<std::vector<int>> &rings,
108 std::vector<strucType> &ringType,
109 const std::vector<std::vector<int>> &nList,
110 std::vector<cage::Cage> &cageList);
111
113std::vector<int> findHC(const std::vector<std::vector<int>> &rings,
114 std::vector<strucType> &ringType,
115 const std::vector<std::vector<int>> &nList,
116 std::vector<cage::Cage> &cageList,
117 const RingSearchIndex &index);
118
121bool conditionOneDDC(const std::vector<std::vector<int>> &rings,
122 std::vector<int> &peripheralRings, int iring);
123
125bool conditionOneDDC(const std::vector<std::vector<int>> &rings,
126 std::vector<int> &peripheralRings, int iring,
127 const RingSearchIndex &index);
128
131bool conditionTwoDDC(const std::vector<std::vector<int>> &rings,
132 std::vector<int> &peripheralRings, int iring);
133
135bool conditionTwoDDC(const std::vector<std::vector<int>> &rings,
136 std::vector<int> &peripheralRings, int iring,
137 const RingSearchIndex &index);
138
141bool conditionThreeDDC(const std::vector<std::vector<int>> &rings,
142 std::vector<int> &peripheralRings);
143
145bool basalConditions(const std::vector<std::vector<int>> &nList,
146 const std::vector<int> &basal1,
147 const std::vector<int> &basal2);
148
151bool basalNeighbours(const std::vector<std::vector<int>> &nList,
152 std::vector<int> &triplet, int atomOne, int atomTwo);
153
156bool notNeighboursOfRing(const std::vector<std::vector<int>> &nList,
157 std::vector<int> &triplet,
158 const std::vector<int> &ring);
159
161[[nodiscard]] int findPrismatic(const std::vector<std::vector<int>> &rings, std::vector<int> &listHC,
162 std::vector<strucType> &ringType, int iring, int jring,
163 std::vector<int> &prismaticRings);
164
166[[nodiscard]] int findPrismatic(const std::vector<std::vector<int>> &rings,
167 std::vector<int> &listHC,
168 std::vector<strucType> &ringType, int iring,
169 int jring, std::vector<int> &prismaticRings,
170 const RingSearchIndex &index);
171
174[[nodiscard]] int getAtomTypesTopoBulk(const std::vector<std::vector<int>> &rings,
175 const std::vector<ring::strucType> &ringType,
176 std::vector<cage::iceType> &atomTypes);
177
179[[nodiscard]] int getStrucNumbers(const std::vector<ring::strucType> &ringType,
180 const std::vector<cage::Cage> &cageList, int &numHC, int &numDDC,
181 int &mixedRings, int &prismaticRings, int &basalRings);
182
183} // namespace ring
185
190
191namespace prism3 {
192
194[[nodiscard]] int findBulkPrisms(const std::vector<std::vector<int>> &rings,
195 std::vector<ring::strucType> &ringType,
196 const std::vector<std::vector<int>> &nList,
198 std::vector<double> &rmsdPerAtom, double heightCutoff = 8);
199
202bool basalPrismConditions(const std::vector<std::vector<int>> &nList,
203 std::vector<int> &basal1, std::vector<int> &basal2);
204
207bool relaxedPrismConditions(const std::vector<std::vector<int>> &nList,
208 std::vector<int> &basal1, std::vector<int> &basal2);
209
213 const std::vector<int> &basal1, const std::vector<int> &basal2, double heightCutoff = 8);
214} // namespace prism3
215
216
217#endif // SEAMS_TOPO_BULK_H_
File for cage types for topological network criteria.
The main molecular system handler.
int findBulkPrisms(const std::vector< std::vector< int > > &rings, std::vector< ring::strucType > &ringType, const std::vector< std::vector< int > > &nList, molSys::PointCloud< molSys::Point< double >, double > &yCloud, std::vector< double > &rmsdPerAtom, double heightCutoff=8)
Find out which rings are prisms.
bool basalPrismConditions(const std::vector< std::vector< int > > &nList, std::vector< int > &basal1, std::vector< int > &basal2)
bool relaxedPrismConditions(const std::vector< std::vector< int > > &nList, std::vector< int > &basal1, std::vector< int > &basal2)
bool basalRingsSeparation(molSys::PointCloud< molSys::Point< double >, double > &yCloud, const std::vector< int > &basal1, const std::vector< int > &basal2, double heightCutoff=8)
Check to see that candidate basal prisms are not really far from each other.
Topological network criteria functions.
bool basalConditions(const std::vector< std::vector< int > > &nList, const std::vector< int > &basal1, const std::vector< int > &basal2)
Tests whether two rings are basal rings (true) or not (false).
RingSearchIndex buildRingSearchIndex(const std::vector< std::vector< int > > &rings, int numAtoms)
Builds the inverted atom-to-rings index used by the cage searches.
bool basalNeighbours(const std::vector< std::vector< int > > &nList, std::vector< int > &triplet, int atomOne, int atomTwo)
int getAtomTypesTopoBulk(const std::vector< std::vector< int > > &rings, const std::vector< ring::strucType > &ringType, std::vector< cage::iceType > &atomTypes)
int bulkPolygonRingAnalysis(std::string path, const std::vector< std::vector< int > > &rings, const std::vector< std::vector< int > > &nList, molSys::PointCloud< molSys::Point< double >, double > &yCloud, int maxDepth, int firstFrame)
std::vector< int > findDDC(const std::vector< std::vector< int > > &rings, std::vector< strucType > &ringType, const std::vector< int > &listHC, std::vector< cage::Cage > &cageList)
int findPrismatic(const std::vector< std::vector< int > > &rings, std::vector< int > &listHC, std::vector< strucType > &ringType, int iring, int jring, std::vector< int > &prismaticRings)
Finds the prismatic rings from basal rings iring and jring.
bool conditionTwoDDC(const std::vector< std::vector< int > > &rings, std::vector< int > &peripheralRings, int iring)
bool notNeighboursOfRing(const std::vector< std::vector< int > > &nList, std::vector< int > &triplet, const std::vector< int > &ring)
std::vector< int > findMixedRings(const std::vector< std::vector< int > > &rings, std::vector< strucType > &ringType, std::vector< int > &listDDC, std::vector< int > &listHC)
bool conditionOneDDC(const std::vector< std::vector< int > > &rings, std::vector< int > &peripheralRings, int iring)
int getStrucNumbers(const std::vector< ring::strucType > &ringType, const std::vector< cage::Cage > &cageList, int &numHC, int &numDDC, int &mixedRings, int &prismaticRings, int &basalRings)
Determines the number of HCs, DDCs, Mixed rings, prismatic and basal rings.
bool conditionThreeDDC(const std::vector< std::vector< int > > &rings, std::vector< int > &peripheralRings)
int topoBulkAnalysis(std::string path, const std::vector< std::vector< int > > &rings, const std::vector< std::vector< int > > &nList, molSys::PointCloud< molSys::Point< double >, double > &yCloud, int firstFrame, bool onlyTetrahedral=true)
std::vector< int > findHC(const std::vector< std::vector< int > > &rings, std::vector< strucType > &ringType, const std::vector< std::vector< int > > &nList, std::vector< cage::Cage > &cageList)
File containing common functions used by bulk and confined topological network critera.
File for functions that read in files).
This contains a collection of points; contains information for a particular frame.
Definition mol_sys.hpp:173
This contains per-particle information.
Definition mol_sys.hpp:152
Inverted index from an atom to the rings that contain it.
Definition topo_bulk.hpp:75
std::vector< std::vector< int > > ringsContainingAtom
Definition topo_bulk.hpp:76