ProSHADE: src/proshade/ProSHADE_data.cpp File Reference

| ProSHADE 0.7.5.4 (MAR 2021) Protein Shape Detection

Macros | Functions
ProSHADE_data.cpp File Reference

This is the source file containing internal data representation and manipulation structures and functions. More...

`#include "ProSHADE_data.hpp"`
`#include <gemmi/to_pdb.hpp>`

Go to the source code of this file.

## Functions
void | axesToGroupTypeSanityCheck (proshade_unsign requiredAxes, proshade_unsign obtainedAxes, std::string groupType)
| This function checks that the required and obtained numbers of axes are correct, printing error if they are not. More...
bool | checkElementAlreadyExists (std::vector< std::vector< proshade_double > > *elements, std::vector< proshade_double > *elem, proshade_double matrixTolerance)
| This function checks if the element list already contains a given matrix. More...
bool | checkElementsFormGroup (std::vector< std::vector< proshade_double > > *elements, proshade_double matrixTolerance)
| This function checks if all group element products produce another group element. More...

## Detailed Description

This is the source file containing internal data representation and manipulation structures and functions.

This source file contains the ProSHADE_data class definitions as well as the code for simple manipulations with the data (more complex manipulations are done in dedicated source files) and caller functions for the more complex manipulations. The class described here is how ProSHADE stores the structural data internally; however, the user should not need to access any of this code manually, as changes to this structure may have large consequences unforseen by the user.

Copyright by Michal Tykac and individual contributors. All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1) Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2) Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3) Neither the name of Michal Tykac nor the names of this code's contributors may be used to endorse or promote products derived from this software without specific prior written permission.

This software is provided by the copyright holders and contributors "as is" and any express or implied warranties, including, but not limitted to, the implied warranties of merchantibility and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or the contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limitted to, procurement of substitute goods or services, loss of use, data or profits, or business interuption) however caused and on any theory of liability, whether in contract, strict liability or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage.

Author
  Michal Tykac
  Garib N. Murshudov

Version
  0.7.5.4

Date
  MAR 2021

Definition in file ProSHADE_data.cpp.

## Function Documentation

## ◆ axesToGroupTypeSanityCheck()

void axesToGroupTypeSanityCheck | ( | proshade_unsign | requiredAxes,
|  | proshade_unsign | obtainedAxes,
|  | std::string | groupType
| ) |  |

This function checks that the required and obtained numbers of axes are correct, printing error if they are not.

Parameters

  [in] | requiredAxes | Number of axes that are required by the symmetry type.
  [in] | obtainedAxes | Number of axes given.
  [in] | groupType | A string specifying for which symmetry type the group elements are to be computed.

Definition at line 2397 of file ProSHADE_data.cpp.

2398 {
2399 //================================================ Sanity check
2400 if ( obtainedAxes != requiredAxes )
2401 {
2402 std::stringstream hlpSS;
2403 hlpSS << "The supplied number of axes for group element\n : detection ( >" << obtainedAxes << "< ) does not match the group type ( >" << groupType << "< ).";
2404 throw ProSHADE_exception ( "Mismatch between supplied number of axes and\n : symmetry type.", "ES00059", __FILE__, __LINE__, __func__, hlpSS.str() );
2405 }
2406
2407 //================================================ Done
2408 return ;
2409
2410 }

## ◆ checkElementAlreadyExists()

bool checkElementAlreadyExists | ( | std::vector< std::vector< proshade_double > > * | elements,
|  | std::vector< proshade_double > * | elem,
|  | proshade_double | matrixTolerance
| ) |  |

This function checks if the element list already contains a given matrix.

Parameters

  [in] | elements | Vector containing all group elements.
  [in] | elem | A single element which should already be in the list.
  [in] | matrixTolerance | The maximum allowed trace error on rotation matrices to be still considered the same.
  [out] | elementFound | A boolean value stating if the element was found int the elements list or not.

Definition at line 2419 of file ProSHADE_data.cpp.

2420 {
2421 //================================================ Initialise variables
2422 bool elementFound = false;
2423
2424 //================================================ For each existing element
2425 for ( proshade_unsign elIt = 0; elIt < static_cast<proshade_unsign> ( elements->size() ); elIt++ )
2426 {
2427 if ( ProSHADE_internal_maths::rotationMatrixSimilarity ( &elements->at(elIt), elem, matrixTolerance ) )
2428 {
2429 elementFound = true;
2430 break;
2431 }
2432 }
2433
2434 //================================================ Done
2435 return ( elementFound );
2436
2437 }

## ◆ checkElementsFormGroup()

bool checkElementsFormGroup | ( | std::vector< std::vector< proshade_double > > * | elements,
|  | proshade_double | matrixTolerance
| ) |  |

This function checks if all group element products produce another group element.

Parameters

  [in] | elements | Vector containing all group elements.
  [in] | matrixTolerance | The maximum trace error for the matrices to be still considered the same.
  [out] | isGroup | A boolean value stating if all group element products for another group element.

Definition at line 2445 of file ProSHADE_data.cpp.

2446 {
2447 //================================================ Initialise variables
2448 bool isGroup = true;
2449
2450 //================================================ Multiply all group element pairs
2451 for ( proshade_unsign gr1 = 0; gr1 < static_cast<proshade_unsign> ( elements->size() ); gr1++ )
2452 {
2453 for ( proshade_unsign gr2 = 1; gr2 < static_cast<proshade_unsign> ( elements->size() ); gr2++ )
2454 {
2455 //======================================== Use unique pairs only
2456 if ( gr1 >= gr2 ) { continue; }
2457
2458 //======================================== Multiply the two rotation matrices
2459 std::vector< proshade_double > product = ProSHADE_internal_maths::multiplyGroupElementMatrices ( &elements->at(gr1), &elements->at(gr2) );
2460
2461 //======================================== Check the group already contains the produces as an element
2462 if ( !checkElementAlreadyExists ( elements, &product, matrixTolerance ) )
2463 {
2464 isGroup = false;
2465 break;
2466 }
2467 }
2468
2469 //============================================ Stop if problem was found
2470 if ( !isGroup ) { break; }
2471 }
2472
2473 //================================================ Done
2474 return ( isGroup );
2475
2476 }
ProSHADE_exception
This class is the representation of ProSHADE exception.
Definition: ProSHADE_exceptions.hpp:37
ProSHADE_internal_maths::rotationMatrixSimilarity
bool rotationMatrixSimilarity(std::vector< proshade_double > *mat1, std::vector< proshade_double > *mat2, proshade_double tolerance=0.1)
This function compares the distance between two rotation matrices and decides if they are similar usi...
Definition: ProSHADE_maths.cpp:2195
ProSHADE_internal_maths::multiplyGroupElementMatrices
std::vector< proshade_double > multiplyGroupElementMatrices(std::vector< proshade_double > *el1, std::vector< proshade_double > *el2)
This function computes matrix multiplication using the ProSHADE group element matrix format as input ...
Definition: ProSHADE_maths.cpp:2141
checkElementAlreadyExists
bool checkElementAlreadyExists(std::vector< std::vector< proshade_double > > *elements, std::vector< proshade_double > *elem, proshade_double matrixTolerance)
This function checks if the element list already contains a given matrix.
Definition: ProSHADE_data.cpp:2419