Functions | |
int | ring::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) |
int | ring::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) |
std::vector< int > | ring::findDDC (std::vector< std::vector< int >> rings, std::vector< strucType > *ringType, std::vector< int > listHC, std::vector< cage::Cage > *cageList) |
std::vector< int > | ring::findMixedRings (std::vector< std::vector< int >> rings, std::vector< strucType > *ringType, std::vector< int > *listDDC, std::vector< int > *listHC) |
std::vector< int > | ring::findHC (std::vector< std::vector< int >> rings, std::vector< strucType > *ringType, std::vector< std::vector< int >> nList, std::vector< cage::Cage > *cageList) |
bool | ring::conditionOneDDC (std::vector< std::vector< int >> rings, std::vector< int > *peripheralRings, int iring) |
bool | ring::conditionTwoDDC (std::vector< std::vector< int >> rings, std::vector< int > *peripheralRings, int iring) |
bool | ring::conditionThreeDDC (std::vector< std::vector< int >> rings, std::vector< int > *peripheralRings) |
bool | ring::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) More... | |
bool | ring::basalNeighbours (std::vector< std::vector< int >> nList, std::vector< int > *triplet, int atomOne, int atomTwo) |
bool | ring::notNeighboursOfRing (std::vector< std::vector< int >> nList, std::vector< int > *triplet, std::vector< int > *ring) |
int | ring::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. More... | |
int | ring::getAtomTypesTopoBulk (std::vector< std::vector< int >> rings, std::vector< ring::strucType > ringType, std::vector< cage::iceType > *atomTypes) |
int | ring::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. More... | |
int | prism3::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. More... | |
bool | prism3::basalPrismConditions (std::vector< std::vector< int >> nList, std::vector< int > *basal1, std::vector< int > *basal2) |
bool | prism3::relaxedPrismConditions (std::vector< std::vector< int >> nList, std::vector< int > *basal1, std::vector< int > *basal2) |
bool | prism3::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. More... | |
bool ring::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)
Check to see if two basal rings are HCs or not, using the neighbour list information. The neighbour list nList is a vector of vectors, containing atom indices (not atom IDs!). The first element of each subvector in nList is the atom index of the particle for which the other elements are the nearest neighbours. Internally, the following functions are called:
[in] | nList | Vector of vectors of the neighbour list (by index). |
[in] | basal1 | Vector containing the first candidate basal ring. |
[in] | basal2 | Vector containing the second candidate basal ring. |
Definition at line 786 of file topo_bulk.cpp.
bool ring::basalNeighbours | ( | std::vector< std::vector< int >> | nList, |
std::vector< int > * | triplet, | ||
int | atomOne, | ||
int | atomTwo | ||
) |
Tests whether the last two elements of a triplet are neighbours of two atom IDs passed in
Tests whether the last two elements of a triplet are neighbours of two atom indices which have been passed in as inputs.
[in] | nList | Vector of vectors of the neighbour list (by index). |
[in] | triplet | Vector containing the current triplet being tested. |
[in] | atomOne | Index of the first atom. |
[in] | atomTwo | Index of the second atom. |
Definition at line 908 of file topo_bulk.cpp.
bool prism3::basalPrismConditions | ( | 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) for a prism (strict criterion)
A function that checks to see if two basal rings are basal rings of a prism block or not, using the neighbour list information. The neighbour list nList is a row-ordered vector of vectors, containing atom indices (not atom IDs!). The first element of each subvector in nList is the atom index of the particle for which the other elements are the nearest neighbours.
[in] | nList | Row-ordered neighbour list by atom index. |
[in] | basal1 | The vector for one of the basal rings. |
[in] | basal2 | The vector for the other basal ring. |
Definition at line 1429 of file topo_bulk.cpp.
bool prism3::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.
Check to see that candidate basal prisms are not really far from each other Return true if the basal rings are within the heightCutoff
Definition at line 1557 of file topo_bulk.cpp.
int ring::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 | ||
) |
Find out rings in the bulk, looping through all ring sizes upto the maxDepth The input ringsAllSizes array has rings of every size.
Function that loops through the primitive rings (which is a vector of vectors) of all sizes, upto maxDepth (the largest ring size).
[in] | path | The string to the output directory, in which files will be written out. |
[in] | rings | Row-ordered vector of vectors for rings of a single type. |
[in] | nList | Row-ordered neighbour list by index. |
[in] | yCloud | The input PointCloud. |
[in] | maxDepth | The maximum possible size of the primitive rings. |
[in] | firstFrame | The first frame to be analyzed |
Definition at line 44 of file topo_bulk.cpp.
bool ring::conditionOneDDC | ( | std::vector< std::vector< int >> | rings, |
std::vector< int > * | peripheralRings, | ||
int | iring | ||
) |
First condition for the DDC: There must be at least 3 other rings in which each element of the equatorial ring is present
For a given ring, which is being tested as the equatorial ring, this function tests if each element of the ring \( (m_k) \) is present in at least three other rings or not. Returns false if this is not true. The ring indices of rings that have the common element are saved inside the periperal ring vector (peripheralRings) as potential peripheral rings, which is then passed as an input to the subsequent functions testing conditions.
[in] | rings | Vector of vectors containing the 6-membered primitive rings. |
[in] | peripheralRings | Vector containing the indices of rings which are potential peripheral rings. |
[in] | iring | Index of the ring being tested as equatorial. |
Definition at line 416 of file topo_bulk.cpp.
bool ring::conditionThreeDDC | ( | std::vector< std::vector< int >> | rings, |
std::vector< int > * | peripheralRings | ||
) |
Third condition for the DDC: Even (by vector index) numbered index triplets and odd triplets must have at least one element in common
For a given ring, which is being tested as the equatorial ring, this function tests the following, given peripheralRings stored in increasing order of the triplet starting element:
[in] | rings | Vector of vectors containing the 6-membered primitive rings. |
[in] | peripheralRings | Vector containing the indices of rings which are potential peripheral rings. |
Definition at line 569 of file topo_bulk.cpp.
bool ring::conditionTwoDDC | ( | std::vector< std::vector< int >> | rings, |
std::vector< int > * | peripheralRings, | ||
int | iring | ||
) |
Second condition for the DDC: There must be at least 1 other ring for every triplet in the equatorial ring
For a given ring, which is being tested as the equatorial ring, this function tests if each triplet that can be formed from the ring is common to at least one other ring or not. Returns false if this is not true. The ring indices of rings that have the common triplet are ultimately saved inside the periperal ring vector as potential peripheral rings, which is passed as an input to the subsequent condition-testing functions. The function calls the following function internally:
[in] | rings | Vector of vectors containing the 6-membered primitive rings. |
[in] | peripheralRings | Vector containing the indices of rings which are potential peripheral rings. |
[in] | iring | Index of the ring being tested as equatorial. |
Definition at line 488 of file topo_bulk.cpp.
int prism3::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.
Determines which rings are n-sided prisms. This function returns a vector which contains the ring indices of all the rings which are prisms. The ring indices correspond to the index of the rings inside the vector of vector rings, starting from 0. Prism rings can be found using a three-step procedure, in which first two basal rings are found. Prismatic rings are simply rings which share every face made by upper and lower triplets of the basal rings The neighbour list is also required as an input, which is a vector of vectors, containing atom IDs. The first element of the neighbour list is the atom index of the atom for which the other elements are nearest neighbours.\
[in] | rings | The input vector of vectors containing the primitive rings of a single ring size (number of nodes). |
[in] | ringType | A vector containing a ring::strucType value (a classification type) for each ring. |
[in] | nPrisms | The number of prism blocks identified for the number of nodes. |
[in] | nList | The row-ordered neighbour list (by atom index). |
[in] | yCloud | The input PointCloud. |
Definition at line 1328 of file topo_bulk.cpp.
std::vector< int > ring::findDDC | ( | std::vector< std::vector< int >> | rings, |
std::vector< strucType > * | ringType, | ||
std::vector< int > | listHC, | ||
std::vector< cage::Cage > * | cageList | ||
) |
Find out which hexagonal rings are DDC (Double Diamond Cages) rings. Returns a vector containing all the ring IDs which are DDC rings
Determines which hexagonal rings are DDC rings. This function returns a vector which contains the ring IDs of all the rings which are DDC rings. The ring IDs correspond to the index of the rings inside the vector of vector rings, starting from 0. DDC rings can be found using a three-step procedure, in which equatorial rings and their corresponding rings can be found. Peripheral rings can be shared, so first all the equatorial rings must be found. Whenever an equatorial ring and the corresponding peripheral rings are found, their values must be updated to DDC enum type inside the ringType vector, which has been passed as an input to this function. At the end, the output vector can be updated to avoid adding the same ring index more than once (this may happen for peripheral rings, which can be shared). Internally, the function calls the following:
[in] | rings | Vector of vectors containing 6-membered primitive rings (wherein each ring contains the atom indices of the particles which constitute the ring). |
[in] | ringType | Vector containing a ring::strucType (structure type) for each ring. |
[in] | cageList | Vector in which every cage is saved. |
Definition at line 285 of file topo_bulk.cpp.
std::vector< int > ring::findHC | ( | std::vector< std::vector< int >> | rings, |
std::vector< strucType > * | ringType, | ||
std::vector< std::vector< int >> | nList, | ||
std::vector< cage::Cage > * | cageList | ||
) |
Find out which hexagonal rings are HC rings. Returns a vector containing all the ring IDs which are HC rings
Determines which hexagonal rings are HCs. This function returns a vector which contains the ring IDs of all the rings which are HC rings. The ring IDs correspond to the index of the rings inside the vector of vector rings, starting from 0. HC rings can be found using a three-step procedure, in which first two basal rings are found. Prismatic rings are simply rings which share every face made by upper and lower triplets of the basal rings The neighbour list is also required as an input, which is a vector of vectors, containing atom IDs. The first element of the neighbour list is the atomID of the atom for which the other elements are nearest neighbours. The function calls the following functions internally:
[in] | rings | Vector of vectors containing 6-membered primitive rings (wherein each ring contains the atom indices of the particles which constitute the ring). |
[in] | ringType | Vector containing a ring::strucType (structure type) for each ring. |
[in] | nList | Row-ordered vector of vectors of the neighbour list (by index). |
[in] | cageList | Vector in which every cage is saved. |
Definition at line 651 of file topo_bulk.cpp.
std::vector< int > ring::findMixedRings | ( | std::vector< std::vector< int >> | rings, |
std::vector< strucType > * | ringType, | ||
std::vector< int > * | listDDC, | ||
std::vector< int > * | listHC | ||
) |
Find out which hexagonal rings are both DDCs (Double Diamond Cages) and HCs (Hexagonal Cages). Returns a vector containing all the ring IDs which are of this type
Determines which hexagonal rings are both DDCs and HCs. This function returns a vector which contains the ring IDs of all the rings which are both. The ring IDs correspond to the index of the rings inside the vector of vector rings, starting from 0. Rings which are both are of enum type bothBasal OR bothPrismatic. Reassign rings which are mixed in listDDC and listHC as the dummy value -10.
[in] | rings | The 6-membered primitive rings. |
[in] | ringType | Structure type for every ring. |
[in] | listDDC | Contains a vector of ring indices of DDCs. |
[in] | listHC | Contains a vector of ring indices of HCs. |
Definition at line 1117 of file topo_bulk.cpp.
int ring::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.
Finding prismatic rings when passed the information in the ringType input vector.
[in] | rings | The 6-membered primitive rings. |
[in] | listHC | Vector containing the ring indices of rings which are part of HCs. |
[in] | ringType | Contains a structure type for each ring. |
[in] | iring | Index of the \( i^{th} \) ring. |
[in] | jring | Index of the \( j^{th} \) ring. |
[in] | prismaticRings | Vector containing the indices of rings which are prismatic. |
Definition at line 1021 of file topo_bulk.cpp.
int ring::getAtomTypesTopoBulk | ( | std::vector< std::vector< int >> | rings, |
std::vector< ring::strucType > | ringType, | ||
std::vector< cage::iceType > * | atomTypes | ||
) |
Assigns a type of enum class iceType, to every atom, using information from ringType, which has the information of every ring
Assigns a type (cage::iceType) to each atom, according to the previous classification of every ring in ringType. Each subring or vector inside the vector of vector rings, is by index, meaning that the atoms are saved by their indices starting from 0 in the PointCloud.
[in] | rings | Vector of vectors of 6-membered rings. |
[in] | ringType | Vector containing the structural type for each ring. |
[in] | atomTypes | Structural type for each atom. |
Definition at line 1164 of file topo_bulk.cpp.
int ring::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.
Determines the number of HCs, DDCs from the cageList vector, containing a list of cages. The number of mixed rings, prismatic rings and basal rings are obtained from the ringType vector.
[in] | ringType | Vector containing the structural type for each ring. |
[in] | cageList | Contains all the cages (DDCs and HCs). |
[in] | numHC | The number of HCs. |
[in] | numDDC | The number of DDCs. |
[in] | mixedRings | The number of mixed rings. |
[in] | prismaticRings | The number of prismatic rings (of HCs/mixed rings). |
[in] | basalRings | TThe number of basal rings (of HCs/mixed rings). |
Definition at line 1247 of file topo_bulk.cpp.
bool ring::notNeighboursOfRing | ( | std::vector< std::vector< int >> | nList, |
std::vector< int > * | triplet, | ||
std::vector< int > * | ring | ||
) |
Tests to check that elements of a triplet are not neighbours of a ring (vector) passed
Checks to make sure that the elements of the triplet are NOT neighbours of any elements inside a vector (ring) passed in (false) If any of them are neighbours, this function returns false.
[in] | nList | Vector of vectors of the neighbour list (by index). |
[in] | triplet | Vector containing the current triplet being tested. |
[in] | ring | Ring passed in. |
Definition at line 981 of file topo_bulk.cpp.
bool prism3::relaxedPrismConditions | ( | std::vector< std::vector< int >> | nList, |
std::vector< int > * | basal1, | ||
std::vector< int > * | basal2 | ||
) |
Reduced criterion: Two candidate basal rings of a prism block should have at least one bond between them
Relaxed criteria for deformed prism blocks: at least one bond should exist between the basal rings.
Definition at line 1516 of file topo_bulk.cpp.
int ring::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 |
||
) |
Find out which rings are DDCs or HCs, which are comprised of 6-membered primitive rings. Start with a neighbour list (by index) and a vector of vectors of rings (also by index). TODO: try 'square' ice and ice0
Finds out if rings constitute double-diamond cages or hexagonal cages. Requires a neighbour list (by index) and a vector of vectors of primitive rings which should also be by index. This is registered as a Lua function and is accessible to the user. Internally, this function calls the following functions:
[in] | path | The file path of the output directory to which output files will be written. |
[in] | rings | Vector of vectors containing the primitive rings. This contains rings of all sizes. |
[in] | nList | Row-ordered neighbour list, by index. |
[in] | yCloud | The input PointCloud, with respect to which the indices in the rings and nList vector of vectors have been saved. |
[in] | firstFrame | First frame to be analyzed |
[in] | onlyTetrahedral | Flag for only finding DDCs and HCs (true) or also finding PNCs (false) |
Definition at line 134 of file topo_bulk.cpp.