topo_bulk.hpp
Go to the documentation of this file.
Code
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 __TOPO_BULK_H_
16#define __TOPO_BULK_H_
17
18#include <algorithm>
19#include <array>
20#include <fstream>
21#include <iostream>
22#include <iterator>
23#include <math.h>
24#include <memory>
25#include <sstream>
26#include <string>
27#include <sys/stat.h>
28#include <vector>
29
30#include <cage.hpp>
31#include <mol_sys.hpp>
32#include <order_parameter.hpp>
33#include <ring.hpp>
34#include <seams_input.hpp>
35#include <seams_output.hpp>
36#include <shapeMatch.hpp>
37
48namespace ring {
49
53 std::string path, std::vector<std::vector<int>> rings,
54 std::vector<std::vector<int>> nList,
55 molSys::PointCloud<molSys::Point<double>, double> *yCloud, int maxDepth,
56 int firstFrame);
57
58// DDC HC Ring functions
59
63int topoBulkAnalysis(std::string path, std::vector<std::vector<int>> rings,
64 std::vector<std::vector<int>> nList,
66 int firstFrame, bool onlyTetrahedral = true);
67
70std::vector<int> findDDC(std::vector<std::vector<int>> rings,
71 std::vector<strucType> *ringType,
72 std::vector<int> listHC,
73 std::vector<cage::Cage> *cageList);
74
78std::vector<int> findMixedRings(std::vector<std::vector<int>> rings,
79 std::vector<strucType> *ringType,
80 std::vector<int> *listDDC,
81 std::vector<int> *listHC);
82
85std::vector<int> findHC(std::vector<std::vector<int>> rings,
86 std::vector<strucType> *ringType,
87 std::vector<std::vector<int>> nList,
88 std::vector<cage::Cage> *cageList);
89
92bool conditionOneDDC(std::vector<std::vector<int>> rings,
93 std::vector<int> *peripheralRings, int iring);
94
97bool conditionTwoDDC(std::vector<std::vector<int>> rings,
98 std::vector<int> *peripheralRings, int iring);
99
102bool conditionThreeDDC(std::vector<std::vector<int>> rings,
103 std::vector<int> *peripheralRings);
104
106bool basalConditions(std::vector<std::vector<int>> nList,
107 std::vector<int> *basal1, std::vector<int> *basal2);
108
111bool basalNeighbours(std::vector<std::vector<int>> nList,
112 std::vector<int> *triplet, int atomOne, int atomTwo);
113
116bool notNeighboursOfRing(std::vector<std::vector<int>> nList,
117 std::vector<int> *triplet, std::vector<int> *ring);
118
120int findPrismatic(std::vector<std::vector<int>> rings, std::vector<int> *listHC,
121 std::vector<strucType> *ringType, int iring, int jring,
122 std::vector<int> *prismaticRings);
123
126int getAtomTypesTopoBulk(std::vector<std::vector<int>> rings,
127 std::vector<ring::strucType> ringType,
128 std::vector<cage::iceType> *atomTypes);
129
131int getStrucNumbers(std::vector<ring::strucType> ringType,
132 std::vector<cage::Cage> cageList, int *numHC, int *numDDC,
133 int *mixedRings, int *prismaticRings, int *basalRings);
134
135} // namespace ring
136
142namespace prism3 {
143
145int findBulkPrisms(std::vector<std::vector<int>> rings,
146 std::vector<ring::strucType> *ringType,
147 std::vector<std::vector<int>> nList,
149 std::vector<double> *rmsdPerAtom, double heightCutoff = 8);
150
153bool basalPrismConditions(std::vector<std::vector<int>> nList,
154 std::vector<int> *basal1, std::vector<int> *basal2);
155
158bool relaxedPrismConditions(std::vector<std::vector<int>> nList,
159 std::vector<int> *basal1, std::vector<int> *basal2);
160
164 std::vector<int> basal1, std::vector<int> basal2, double heightCutoff = 8);
165} // namespace prism3
166
167#endif // __TOPO_BULK_H_
File for cage types for topological network criteria.
int getAtomTypesTopoBulk(std::vector< std::vector< int > > rings, std::vector< ring::strucType > ringType, std::vector< cage::iceType > *atomTypes)
bool notNeighboursOfRing(std::vector< std::vector< int > > nList, std::vector< int > *triplet, std::vector< int > *ring)
bool conditionTwoDDC(std::vector< std::vector< int > > rings, std::vector< int > *peripheralRings, int iring)
bool conditionOneDDC(std::vector< std::vector< int > > rings, std::vector< int > *peripheralRings, int iring)
bool basalPrismConditions(std::vector< std::vector< int > > nList, std::vector< int > *basal1, std::vector< int > *basal2)
bool basalConditions(std::vector< std::vector< int > > nList, std::vector< int > *basal1, std::vector< int > *basal2)
Tests whether two rings are basal rings (true) or not (false)
bool conditionThreeDDC(std::vector< std::vector< int > > rings, std::vector< int > *peripheralRings)
int topoBulkAnalysis(std::string path, std::vector< std::vector< int > > rings, std::vector< std::vector< int > > nList, molSys::PointCloud< molSys::Point< double >, double > *yCloud, int firstFrame, bool onlyTetrahedral=true)
int findBulkPrisms(std::vector< std::vector< int > > rings, std::vector< ring::strucType > *ringType, 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.
int getStrucNumbers(std::vector< ring::strucType > ringType, 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 basalNeighbours(std::vector< std::vector< int > > nList, std::vector< int > *triplet, int atomOne, int atomTwo)
std::vector< int > findDDC(std::vector< std::vector< int > > rings, std::vector< strucType > *ringType, std::vector< int > listHC, std::vector< cage::Cage > *cageList)
bool basalRingsSeparation(molSys::PointCloud< molSys::Point< double >, double > *yCloud, std::vector< int > basal1, std::vector< int > basal2, double heightCutoff=8)
Check to see that candidate basal prisms are not really far from each other.
bool relaxedPrismConditions(std::vector< std::vector< int > > nList, std::vector< int > *basal1, std::vector< int > *basal2)
int bulkPolygonRingAnalysis(std::string path, std::vector< std::vector< int > > rings, std::vector< std::vector< int > > nList, molSys::PointCloud< molSys::Point< double >, double > *yCloud, int maxDepth, int firstFrame)
Definition topo_bulk.cpp:44
std::vector< int > findHC(std::vector< std::vector< int > > rings, std::vector< strucType > *ringType, std::vector< std::vector< int > > nList, std::vector< cage::Cage > *cageList)
int findPrismatic(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.
std::vector< int > findMixedRings(std::vector< std::vector< int > > rings, std::vector< strucType > *ringType, std::vector< int > *listDDC, std::vector< int > *listHC)
The main molecular system handler.
Topological network criteria functions.
Definition ring.hpp:64
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:170
This contains per-particle information.
Definition mol_sys.hpp:149