![]() |
ProSHADE
0.7.6.6 (JUL 2022)
Protein Shape Detection
|
This header file declares all the functions required for computing various information from the ProSHADE data. More...
Go to the source code of this file.
Classes | |
class | ProSHADE_internal_spheres::ProSHADE_rotFun_sphere |
This class contains all inputed data for the rotation function angle-axis converted spheres. More... | |
class | ProSHADE_internal_maths::BicubicInterpolator |
Namespaces | |
ProSHADE_internal_spheres | |
This namespace contains the structure and functions required for storing internal map projections onto a set of concentric spheres. | |
ProSHADE_internal_maths | |
This namespace contains the internal functions for common mathematical operations. | |
Functions | |
void | dgesdd_ (char *jobz, int *m, int *n, double *a, int *lda, double *s, double *u, int *ldu, double *vt, int *ldvt, double *work, int *lwork, double *rwork, int *iwork, int *info) |
void | zgesdd_ (char *jobz, int *m, int *n, std::complex< double > *a, int *lda, double *s, std::complex< double > *u, int *ldu, std::complex< double > *vt, int *ldvt, std::complex< double > *work, int *lwork, double *rwork, int *iwork, int *info) |
void | dgeev_ (char *jobvl, char *jobvr, int *n, double *a, int *lda, double *wr, double *wi, double *vl, int *ldvl, double *vr, int *ldvr, double *work, int *lwork, int *info) |
void | ProSHADE_internal_maths::complexMultiplication (proshade_double *r1, proshade_double *i1, proshade_double *r2, proshade_double *i2, proshade_double *retReal, proshade_double *retImag) |
Function to multiply two complex numbers. More... | |
void | ProSHADE_internal_maths::complexMultiplicationConjug (proshade_double *r1, proshade_double *i1, proshade_double *r2, proshade_double *i2, proshade_double *retReal, proshade_double *retImag) |
Function to multiply two complex numbers by using the second number's conjugate. More... | |
proshade_double | ProSHADE_internal_maths::complexMultiplicationRealOnly (proshade_double *r1, proshade_double *i1, proshade_double *r2, proshade_double *i2) |
Function to multiply two complex numbers and return the real part only. More... | |
proshade_double | ProSHADE_internal_maths::complexMultiplicationConjugRealOnly (proshade_double *r1, proshade_double *i1, proshade_double *r2, proshade_double *i2) |
Function to conjuggate multiply two complex numbers and return the real part only. More... | |
void | ProSHADE_internal_maths::vectorMeanAndSD (std::vector< proshade_double > *vec, proshade_double *&ret) |
Function to get vector mean and standard deviation. More... | |
void | ProSHADE_internal_maths::vectorMedianAndIQR (std::vector< proshade_double > *vec, proshade_double *&ret) |
Function to get vector median and inter-quartile range. More... | |
void | ProSHADE_internal_maths::arrayMedianAndIQR (proshade_double *vec, proshade_unsign vecSize, proshade_double *&ret) |
Function to get array median and inter-quartile range. More... | |
proshade_double | ProSHADE_internal_maths::pearsonCorrCoeff (proshade_double *valSet1, proshade_double *valSet2, proshade_unsign length) |
Function for computing the Pearson's correlation coefficient. More... | |
void | ProSHADE_internal_maths::getLegendreAbscAndWeights (proshade_unsign order, proshade_double *abscissas, proshade_double *weights, proshade_unsign noSteps) |
Function to prepare abscissas and weights for Gauss-Legendre integration using the Glaser-Liu-Rokhlin method. More... | |
void | ProSHADE_internal_maths::getGLPolyAtZero (proshade_unsign order, proshade_double *polyValue, proshade_double *deriValue) |
This function obtains the Legendre polynomial values and its derivative at zero for any positive integer order polynomial. More... | |
void | ProSHADE_internal_maths::getGLFirstRealRoot (proshade_double polyAtZero, proshade_unsign order, proshade_double *abscAtZero, proshade_double *weighAtZero, proshade_unsign taylorSeriesCap) |
This function finds the first root for Legendre polynomials of odd order. More... | |
proshade_double | ProSHADE_internal_maths::evaluateGLPolynomial (proshade_double *series, proshade_double target, proshade_unsign terms) |
This function evaluates the decomposed Legendre polynomial at a given position. More... | |
proshade_double | ProSHADE_internal_maths::advanceGLPolyValue (proshade_double from, proshade_double to, proshade_double valAtFrom, proshade_unsign order, proshade_unsign noSteps) |
This function finds the next value of a Legendre polynomial using the Runge-Kutta method. More... | |
void | ProSHADE_internal_maths::completeAbscissasAndWeights (proshade_unsign order, proshade_double *abscissa, proshade_double *weights, proshade_unsign noSteps) |
This function completes the abscissas and weights series from the first roots computed beforehand. More... | |
proshade_double | ProSHADE_internal_maths::gaussLegendreIntegrationReal (proshade_double *vals, proshade_unsign valsSize, proshade_unsign order, proshade_double *abscissas, proshade_double *weights, proshade_double integralOverRange, proshade_double maxSphereDists) |
Function to compute real part of the Gauss-Legendre integration over spherical harmonic values in different shells. More... | |
void | ProSHADE_internal_maths::gaussLegendreIntegration (proshade_complex *vals, proshade_unsign valsSize, proshade_unsign order, proshade_double *abscissas, proshade_double *weights, proshade_double integralOverRange, proshade_double maxSphereDists, proshade_double *retReal, proshade_double *retImag) |
Function to compute the complete complex Gauss-Legendre integration over spherical harmonic values in different shells. More... | |
void | ProSHADE_internal_maths::complexMatrixSVDSigmasOnly (proshade_complex **mat, int dim, double *&singularValues) |
Function to compute the complete complex matrix SVD and return only the sigmas. More... | |
void | ProSHADE_internal_maths::realMatrixSVDUandVOnly (proshade_double *mat, int dim, proshade_double *uAndV, bool fail=true) |
Function to compute the real matrix SVD and return the U and V matrices. More... | |
void | ProSHADE_internal_maths::getEulerZYZFromSOFTPosition (proshade_signed band, proshade_signed x, proshade_signed y, proshade_signed z, proshade_double *eulerAlpha, proshade_double *eulerBeta, proshade_double *eulerGamma) |
Function to find Euler angles (ZYZ convention) from index position in the inverse SOFT map. More... | |
void | ProSHADE_internal_maths::getSOFTPositionFromEulerZYZ (proshade_signed band, proshade_double eulerAlpha, proshade_double eulerBeta, proshade_double eulerGamma, proshade_double *x, proshade_double *y, proshade_double *z) |
Function to find the index position in the inverse SOFT map from given Euler angles (ZYZ convention). More... | |
void | ProSHADE_internal_maths::getRotationMatrixFromEulerZYZAngles (proshade_double eulerAlpha, proshade_double eulerBeta, proshade_double eulerGamma, proshade_double *matrix) |
Function to find the rotation matrix from Euler angles (ZYZ convention). More... | |
void | ProSHADE_internal_maths::getRotationMatrixFromEulerZYZAngles (proshade_single eulerAlpha, proshade_single eulerBeta, proshade_single eulerGamma, proshade_single *matrix) |
Function to find the rotation matrix from Euler angles (ZYZ convention). More... | |
void | ProSHADE_internal_maths::getAxisAngleFromRotationMatrix (proshade_double *rotMat, proshade_double *x, proshade_double *y, proshade_double *z, proshade_double *ang, proshade_signed verbose=1) |
This function converts rotation matrix to the axis-angle representation. More... | |
void | ProSHADE_internal_maths::getAxisAngleFromRotationMatrix (std::vector< proshade_double > *rotMat, proshade_double *x, proshade_double *y, proshade_double *z, proshade_double *ang, proshade_signed verbose=1) |
This function converts rotation matrix to the axis-angle representation. More... | |
void | ProSHADE_internal_maths::getRotationMatrixFromAngleAxis (proshade_double *rotMat, proshade_double x, proshade_double y, proshade_double z, proshade_double ang) |
This function converts the axis-angle representation to the rotation matrix representation. More... | |
void | ProSHADE_internal_maths::getRotationMatrixFromAngleAxis (proshade_single *rotMat, proshade_double x, proshade_double y, proshade_double z, proshade_double ang) |
This function converts the axis-angle representation to the rotation matrix representation. More... | |
void | ProSHADE_internal_maths::getEulerZYZFromRotMatrix (proshade_double *rotMat, proshade_double *eA, proshade_double *eB, proshade_double *eG) |
This function converts rotation matrix to the Euler ZYZ angles representation. More... | |
void | ProSHADE_internal_maths::getEulerZYZFromAngleAxis (proshade_double axX, proshade_double axY, proshade_double axZ, proshade_double axAng, proshade_double *eA, proshade_double *eB, proshade_double *eG) |
This function converts angle-axis representation to the Euler ZYZ angles representation. More... | |
void | ProSHADE_internal_maths::multiplyTwoSquareMatrices (proshade_double *A, proshade_double *B, proshade_double *res, proshade_unsign dim=3) |
Function to compute matrix multiplication. More... | |
std::vector< proshade_signed > | ProSHADE_internal_maths::primeFactorsDecomp (proshade_signed number) |
Function to find prime factors of an integer. More... | |
proshade_double | ProSHADE_internal_maths::normalDistributionValue (proshade_double mean, proshade_double standardDev, proshade_double value) |
Function to the heiht of normal distribution given by mean and standard deviation for a given value. More... | |
proshade_double | ProSHADE_internal_maths::computeDotProduct (proshade_double *x1, proshade_double *y1, proshade_double *z1, proshade_double *x2, proshade_double *y2, proshade_double *z2) |
Simple 3D vector dot product computation. More... | |
proshade_double | ProSHADE_internal_maths::computeDotProduct (proshade_double x1, proshade_double y1, proshade_double z1, proshade_double x2, proshade_double y2, proshade_double z2) |
Simple 3D vector dot product computation. More... | |
proshade_double * | ProSHADE_internal_maths::computeCrossProduct (proshade_double *x1, proshade_double *y1, proshade_double *z1, proshade_double *x2, proshade_double *y2, proshade_double *z2) |
Simple 3D vector cross product computation. More... | |
proshade_double * | ProSHADE_internal_maths::computeCrossProduct (proshade_double x1, proshade_double y1, proshade_double z1, proshade_double x2, proshade_double y2, proshade_double z2) |
Simple 3D vector cross product computation. More... | |
proshade_double * | ProSHADE_internal_maths::compute3x3MatrixMultiplication (proshade_double *mat1, proshade_double *mat2) |
Function for computing a 3x3 matrix multiplication. More... | |
proshade_double * | ProSHADE_internal_maths::compute3x3MatrixVectorMultiplication (proshade_double *mat, proshade_double x, proshade_double y, proshade_double z) |
Function for computing a 3x3 matrix to 3x1 vector multiplication. More... | |
proshade_single * | ProSHADE_internal_maths::compute3x3MatrixVectorMultiplication (proshade_single *mat, proshade_single x, proshade_single y, proshade_single z) |
Function for computing a 3x3 matrix to 3x1 vector multiplication. More... | |
proshade_double * | ProSHADE_internal_maths::compute3x3MatrixInverse (proshade_double *mat) |
Function for computing a 3x3 matrix inverse. More... | |
void | ProSHADE_internal_maths::transpose3x3MatrixInPlace (proshade_single *mat) |
Transposes 3x3 matrix in place. More... | |
void | ProSHADE_internal_maths::transpose3x3MatrixInPlace (proshade_double *mat) |
Transposes 3x3 matrix in place. More... | |
proshade_double * | ProSHADE_internal_maths::build3x3MatrixFromDiag (proshade_double *diag) |
Function for building a 3x3 matrix from diagonal (and assuming zero padding). More... | |
proshade_double * | ProSHADE_internal_maths::build3x3MatrixFromXYZRotations (proshade_double xRot, proshade_double yRot, proshade_double zRot) |
Function for building a 3x3 rotation matrix from the x, y and z rotations in degrees. More... | |
proshade_double * | ProSHADE_internal_maths::findRotMatMatchingVectors (proshade_double x1, proshade_double y1, proshade_double z1, proshade_double x2, proshade_double y2, proshade_double z2) |
Computation of rotation matrix rotating one vector onto the other. More... | |
proshade_double * | ProSHADE_internal_maths::compute3x3MoorePenrosePseudoInverseOfIMinusMat (std::vector< proshade_double > *rMat, proshade_signed verbose) |
This function computes the Moore-Penrose pseudo-inverse of equation I - input matrix. More... | |
std::vector< proshade_double > | ProSHADE_internal_maths::findVectorFromTwoVAndTwoD (proshade_double x1, proshade_double y1, proshade_double z1, proshade_double x2, proshade_double y2, proshade_double z2, proshade_double dot1, proshade_double dot2) |
Function for finding a vector which would have a given two dot products to two other vectors. More... | |
std::vector< proshade_double > | ProSHADE_internal_maths::findVectorFromThreeVAndThreeD (proshade_double x1, proshade_double y1, proshade_double z1, proshade_double x2, proshade_double y2, proshade_double z2, proshade_double x3, proshade_double y3, proshade_double z3, proshade_double dot1, proshade_double dot2, proshade_double dot3) |
Function for finding a vector which would have a given three dot products to three other vectors. More... | |
std::vector< proshade_double > | ProSHADE_internal_maths::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 and output. More... | |
bool | ProSHADE_internal_maths::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 using tolerance. More... | |
bool | ProSHADE_internal_maths::rotationMatrixSimilarity (proshade_double *mat1, proshade_double *mat2, proshade_double tolerance=0.1) |
This function compares the distance between two rotation matrices and decides if they are similar using tolerance. More... | |
proshade_double | ProSHADE_internal_maths::rotationMatrixSimilarityValue (std::vector< proshade_double > *mat1, std::vector< proshade_double > *mat2) |
This function computes the distance between two rotation matrices and returns it. More... | |
proshade_double | ProSHADE_internal_maths::rotationMatrixSimilarityValue (proshade_double *mat1, proshade_double *mat2) |
This function computes the distance between two rotation matrices and returns it. More... | |
bool | ProSHADE_internal_maths::vectorOrientationSimilarity (proshade_double a1, proshade_double a2, proshade_double a3, proshade_double b1, proshade_double b2, proshade_double b3, proshade_double tolerance=0.1) |
This function compares two vectors using cosine distance and decides if they are similar using tolerance. More... | |
bool | ProSHADE_internal_maths::vectorOrientationSimilaritySameDirection (proshade_double a1, proshade_double a2, proshade_double a3, proshade_double b1, proshade_double b2, proshade_double b3, proshade_double tolerance=0.1) |
This function compares two vectors using cosine distance and decides if they are similar using tolerance. More... | |
void | ProSHADE_internal_maths::optimiseAxisBiCubicInterpolation (proshade_double *bestLattitude, proshade_double *bestLongitude, proshade_double *bestSum, std::vector< proshade_unsign > *sphereList, std::vector< ProSHADE_internal_spheres::ProSHADE_rotFun_sphere * > *sphereMappedRotFun, proshade_double step=0.05) |
This function provides axis optimisation given starting lattitude and longitude indices. More... | |
void | ProSHADE_internal_maths::prepareBiCubicInterpolatorsMinusMinus (proshade_double bestLattitude, proshade_double bestLongitude, std::vector< proshade_unsign > *sphereList, std::vector< ProSHADE_internal_maths::BicubicInterpolator * > *interpols, std::vector< ProSHADE_internal_spheres::ProSHADE_rotFun_sphere * > *sphereMappedRotFun) |
This function prepares the interpolation objects for the bi-cubic interpolation. More... | |
void | ProSHADE_internal_maths::prepareBiCubicInterpolatorsMinusPlus (proshade_double bestLattitude, proshade_double bestLongitude, std::vector< proshade_unsign > *sphereList, std::vector< ProSHADE_internal_maths::BicubicInterpolator * > *interpols, std::vector< ProSHADE_internal_spheres::ProSHADE_rotFun_sphere * > *sphereMappedRotFun) |
This function prepares the interpolation objects for the bi-cubic interpolation. More... | |
void | ProSHADE_internal_maths::prepareBiCubicInterpolatorsPlusMinus (proshade_double bestLattitude, proshade_double bestLongitude, std::vector< proshade_unsign > *sphereList, std::vector< ProSHADE_internal_maths::BicubicInterpolator * > *interpols, std::vector< ProSHADE_internal_spheres::ProSHADE_rotFun_sphere * > *sphereMappedRotFun) |
This function prepares the interpolation objects for the bi-cubic interpolation. More... | |
void | ProSHADE_internal_maths::prepareBiCubicInterpolatorsPlusPlus (proshade_double bestLattitude, proshade_double bestLongitude, std::vector< proshade_unsign > *sphereList, std::vector< ProSHADE_internal_maths::BicubicInterpolator * > *interpols, std::vector< ProSHADE_internal_spheres::ProSHADE_rotFun_sphere * > *sphereMappedRotFun) |
This function prepares the interpolation objects for the bi-cubic interpolation. More... | |
bool | ProSHADE_internal_maths::isAxisUnique (std::vector< proshade_double * > *CSymList, proshade_double *axis, proshade_double tolerance=0.1, bool improve=false) |
This function checks if new axis is unique, or already detected. More... | |
bool | ProSHADE_internal_maths::isAxisUnique (std::vector< proshade_double * > *CSymList, proshade_double X, proshade_double Y, proshade_double Z, proshade_double fold, proshade_double tolerance) |
This function checks if new axis is unique, or already detected. More... | |
proshade_signed | ProSHADE_internal_maths::whichAxisUnique (std::vector< proshade_double * > *CSymList, proshade_double *axis, proshade_double tolerance) |
This function checks if new axis is unique, or already detected and returns the position of match or -1. More... | |
proshade_signed | ProSHADE_internal_maths::whichAxisUnique (std::vector< proshade_double * > *CSymList, proshade_double X, proshade_double Y, proshade_double Z, proshade_double fold, proshade_double tolerance) |
This function checks if new axis is unique, or already detected and returns the position of match or -1. More... | |
std::vector< proshade_unsign > | ProSHADE_internal_maths::findAllPrimes (proshade_unsign upTo) |
This function finds all prime numbers up to the supplied limit. More... | |
bool | ProSHADE_internal_maths::isPrime (proshade_unsign toCheck) |
This function check is the supplied number is prime or not. More... | |
proshade_double | ProSHADE_internal_maths::computeGaussian (proshade_double val, proshade_double sigma) |
This function computes a Gaussian (normal) distribution value given distance from mean and sigma. More... | |
std::vector< proshade_double > | ProSHADE_internal_maths::smoothen1D (proshade_double step, proshade_signed windowSize, proshade_double sigma, std::vector< proshade_double > data, proshade_signed decRound=2) |
This function takes a 1D vector and computes smoothened version based on the parameters. More... | |
proshade_single | ProSHADE_internal_maths::getResolutionOfReflection (proshade_single h, proshade_single k, proshade_single l, proshade_single xDim, proshade_single yDim, proshade_single zDim) |
This function computes the resolution of a particular reflection. More... | |
void | ProSHADE_internal_maths::binReciprocalSpaceReflections (proshade_unsign xInds, proshade_unsign yInds, proshade_unsign zInds, proshade_single xSize, proshade_single ySize, proshade_single zSize, proshade_signed *noBin, proshade_signed *&binIndexing, std::vector< proshade_single > *&resArray) |
This function does binning of the reciprocal space reflections. More... | |
void | ProSHADE_internal_maths::cutIndicesToResolution (proshade_signed xInds, proshade_signed yInds, proshade_signed zInds, proshade_single resolution, proshade_signed *binIndexing, std::vector< proshade_single > *resArray, proshade_signed *cutXDim, proshade_signed *cutYDim, proshade_signed *cutZDim, proshade_signed *&cutBinIndices, proshade_signed *&noBins) |
This function cuts the bin assignment array into a smaller array containing all bins up to a given resolution. More... | |
void | ProSHADE_internal_maths::cutArrayToResolution (proshade_signed xInds, proshade_signed yInds, proshade_signed zInds, proshade_signed noBins, fftw_complex *inputMap, fftw_complex *&cutMap) |
This function re-sizes data array to contain only values up to a particular resolution bin. More... | |
proshade_double | ProSHADE_internal_maths::computeFSC (fftw_complex *fCoeffs1, fftw_complex *fCoeffs2, proshade_signed xInds, proshade_signed yInds, proshade_signed zInds, proshade_signed noBins, proshade_signed *binIndexing, proshade_double **&binData, proshade_signed *&binCounts, proshade_double *&fscByBin, bool averageByBinSize=false) |
This function computes the FSC. More... | |
void | ProSHADE_internal_maths::computeFSCWeightByBin (proshade_double *&weights1, proshade_double *&weights2, proshade_signed *binIndexing, proshade_double *fscByBin, proshade_signed noBins, proshade_signed xDim, proshade_signed yDim, proshade_signed zDim) |
This function computes the weights for each reflection using its bin belonging. More... | |
proshade_double | ProSHADE_internal_maths::computeTheFValue (proshade_complex *fCoeffs, proshade_double *weights, proshade_signed xDim, proshade_signed yDim, proshade_signed zDim) |
This function computes the real part of the sum of all coefficients except where the weight is less than -2. More... | |
void | ProSHADE_internal_maths::computeTrFunDerivatives (proshade_complex *fCoeffs, proshade_double *weights1, proshade_double *weights2, proshade_signed xDim, proshade_signed yDim, proshade_signed zDim, proshade_double *&firstDers, proshade_double *&secondDers) |
This function computes the first and second derivatives of the translation function at coefficient [0,0,0]. More... | |
proshade_double * | ProSHADE_internal_maths::computeTrFunStep (proshade_double *firstDers, proshade_double *secondDers) |
This function computes the step sizes for translation function optimisation from the first and second derivatives. More... | |
std::vector< proshade_signed > | ProSHADE_internal_maths::findPeaks1D (std::vector< proshade_double > data) |
This function simply finds all the peaks in a 1D data array. More... | |
proshade_double | ProSHADE_internal_maths::findTopGroupSmooth (std::vector< proshade_double * > *CSym, size_t peakPos, proshade_double step, proshade_double sigma, proshade_signed windowSize, proshade_double maxLim=1.0) |
This function finds a subgroup of axes with distinctly higher correlation value. More... | |
proshade_double | ProSHADE_internal_maths::findTopGroupSmooth (std::vector< std::vector< proshade_double > > *CSym, size_t peakPos, proshade_double step, proshade_double sigma, proshade_signed windowSize, proshade_double maxLim=1.0) |
This function finds a subgroup of axes with distinctly higher correlation value. More... | |
void | ProSHADE_internal_maths::combineFourierForTranslation (fftw_complex *tmpOut1, fftw_complex *tmpOut2, fftw_complex *&resOut, proshade_unsign xD, proshade_unsign yD, proshade_unsign zD) |
This function combines Fourier coefficients of two structures in a way, so that inverse Fourier of the combination will be the translation function. More... | |
void | ProSHADE_internal_maths::findHighestValueInMap (fftw_complex *resIn, proshade_unsign xD, proshade_unsign yD, proshade_unsign zD, proshade_double *trsX, proshade_double *trsY, proshade_double *trsZ, proshade_double *mapPeak) |
This function simply finds the highest value in fftw_complex map and returns its position and value. More... | |
This header file declares all the functions required for computing various information from the ProSHADE data.
This header file declares the ProSHADE_internal_maths namespace, which groups all the functions required to computed various information from the specific ProSHADE data and its organisation. The functionalities available here include complex number computations, rotation representation conversions as well as Gauss-Legendre integration.
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 holder 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.
Definition in file ProSHADE_maths.hpp.