 |
ProSHADE
0.7.6.6 (JUL 2022)
Protein Shape Detection
|
Go to the documentation of this file.
41 for ( proshade_unsign iter = 0; iter < static_cast<proshade_unsign> ( settings->
inputFiles.size() ); iter++ )
62 proshade_signed* nonZeroBounds =
new proshade_signed[6];
69 delete[] nonZeroBounds;
74 ss << settings->
outName <<
"_" << iter <<
".map";
77 else { strToRebox->
writeMap ( ss.str() ); }
85 proshade_double* mapCopy =
nullptr;
111 throw ProSHADE_exception (
"There is no input structure for map manipulation.",
"EB00002", __FILE__, __LINE__, __func__,
"The ProSHADE_settings object does not contain any\n : structure that could be manipulated. Please supply exactly\n : one structure using the addStructure() function." );
117 ProSHADE_internal_messages::printWarningMessage ( settings->
verbose,
"!!! ProSHADE WARNING !!! The input file is not of the MAP (MRC) format. Will output re-boxed map, but beware that this is simple PDB->MAP conversion and REFMAC5 should be used to compute more appropriate maps.",
"WB00004" );
122 throw ProSHADE_exception (
"No resolution given for PDB file re-boxing.",
"EB00011", __FILE__, __LINE__, __func__,
"The ProSHADE_settings object does not contain any\n : resolution value. However, resolution is required when\n : re-boxing structures read from PDB files. Please supply\n : the resolution value using the setResolution() function." );
129 throw ProSHADE_exception (
"No output file name.",
"EB00016", __FILE__, __LINE__, __func__,
"There is no output file name set in the settings object.\n : Please supply the file name to where the re-boxed map\n : should be saved using the setOutputFilename() function." );
168 for ( proshade_unsign iter = 1; iter < static_cast<proshade_unsign> ( settings->
inputFiles.size() ); iter++ )
186 proshade_double enLevDist = 0.0;
190 proshade_double trSigmDist = 0.0;
194 proshade_double rotFunDist = 0.0;
207 delete compareChanging;
212 delete compareAgainst;
230 std::stringstream hlpSS;
231 hlpSS <<
"Distances between " << str1 <<
" and " << str2;
234 std::stringstream hlpSSE;
235 hlpSSE <<
"Energy levels distance : " << enLevDist;
238 std::stringstream hlpSSS;
239 hlpSSS <<
"Trace sigma distance : " << trSigmDist;
242 std::stringstream hlpSSR;
243 hlpSSR <<
"Rotation function distance: " << rotFunDist;
263 throw ProSHADE_exception (
"There are not enough structures for distance computation.",
"ED00012", __FILE__, __LINE__, __func__,
"There needs to be at least two structures between which\n : distances are computed. The ProSHADE_settings object\n : contains less than two structures and therefore cannot\n : proceed. Please supply at least two structures by\n : repeatedly using the addStructure() function." );
267 const FloatingPoint< proshade_single > lhs ( settings->
requestedResolution ), rhs ( -1.0f );
268 if ( lhs.AlmostEquals ( rhs ) )
270 throw ProSHADE_exception (
"Resolution value not set.",
"ED00013", __FILE__, __LINE__, __func__,
"The resolution value was not set. Please set the\n : resolution value for the distance computation by using\n : the setResolution() function." );
296 for ( proshade_unsign iter = 0; iter < static_cast<proshade_unsign> ( settings->
inputFiles.size() ); iter++ )
323 std::stringstream ss;
358 delete symmetryStructure;
397 std::vector< std::vector< proshade_double > > allCs;
398 std::vector< proshade_double > hlpVec;
399 for (
size_t it1 = 0; it1 < symStr->
getCyclicAxes()->size(); it1++ )
407 if ( relSym.size() == 0 )
410 settings->
centrePosition.at(0) = std::numeric_limits< proshade_double >::infinity();
411 settings->
centrePosition.at(1) = std::numeric_limits< proshade_double >::infinity();
412 settings->
centrePosition.at(2) = std::numeric_limits< proshade_double >::infinity();
417 std::stringstream ssHlp;
418 std::stringstream ssHlp2;
419 if ( relSym.size() == 1 )
421 ssHlp <<
"Decided that there is one reliable axis forming C" << allCs.at(relSym.at(0))[0];
422 ssHlp2 <<
"The axis is: [" << allCs.at(relSym.at(0))[1] <<
" , " << allCs.at(relSym.at(0))[2] <<
" , " << allCs.at(relSym.at(0))[3] <<
"] with angle " << allCs.at(relSym.at(0))[4] <<
" peak height " << allCs.at(relSym.at(0))[5] <<
" and average FSC of " << allCs.at(relSym.at(0))[6];
426 ssHlp <<
"Decided that there are two reliable axes forming D" << std::max ( allCs.at(relSym.at(0))[0], allCs.at(relSym.at(1))[0] );
427 ssHlp2 <<
"The first axis is: [" << allCs.at(relSym.at(0))[1] <<
" , " << allCs.at(relSym.at(0))[2] <<
" , " << allCs.at(relSym.at(0))[3] <<
"] with angle " << allCs.at(relSym.at(0))[4] <<
" peak height " << allCs.at(relSym.at(0))[5] <<
" and average FSC of " << allCs.at(relSym.at(0))[6] << std::endl;
428 for (
size_t it = 0; it < static_cast< size_t > ( settings->
verbose + settings->
messageShift ); it++ ) { ssHlp2 <<
" ..."; }
429 ssHlp2 <<
" and the second axis is: [" << allCs.at(relSym.at(1))[1] <<
" , " << allCs.at(relSym.at(1))[2] <<
" , " << allCs.at(relSym.at(1))[3] <<
"] with angle " << allCs.at(relSym.at(1))[4] <<
" peak height " << allCs.at(relSym.at(1))[5] <<
" and average FSC of " << allCs.at(relSym.at(1))[6];
438 if ( relSym.size() == 2 )
451 fftw_complex *origMap =
nullptr, *origCoeffs =
nullptr, *rotMapComplex =
nullptr, *rotCoeffs =
nullptr, *trFunc =
nullptr, *trFuncCoeffs =
nullptr;
452 fftw_plan planForwardFourier, planForwardFourierRot, planReverseFourierComb;
453 ProSHADE_internal_symmetry::allocateCentreOfMapFourierTransforms ( symStr->
getXDim(), symStr->
getYDim(), symStr->
getZDim(), origMap, origCoeffs, rotMapComplex, rotCoeffs, trFunc, trFuncCoeffs, &planForwardFourier, &planForwardFourierRot, &planReverseFourierComb );
456 for ( proshade_unsign it = 0; it < static_cast< proshade_unsign > ( symStr->
getXDim() * symStr->
getYDim() * symStr->
getZDim() ); it++ ) { origMap[it][0] = symStr->
getMapValue( it ); origMap[it][1] = 0.0; }
457 fftw_execute ( planForwardFourier );
460 if ( relSym.size() == 1 )
463 proshade_double xMapCOM = 0.0, yMapCOM = 0.0, zMapCOM = 0.0;
464 std::vector< proshade_unsign > axLst;
465 std::vector< std::vector< proshade_double > > symElems;
472 origCoeffs, rotMapComplex,
473 rotCoeffs, planForwardFourierRot,
474 trFuncCoeffs, trFunc,
475 planReverseFourierComb );
478 ProSHADE_internal_mapManip::findMAPCOMValues ( symStr->
internalMap, &xMapCOM, &yMapCOM, &zMapCOM, symStr->
xDimSize, symStr->
yDimSize, symStr->
zDimSize, symStr->
xFrom, symStr->
xTo, symStr->
yFrom, symStr->
yTo, symStr->
zFrom, symStr->
zTo, settings->
removeNegativeDensity );
481 proshade_double xBoxCentre = ( (
static_cast< proshade_double
> ( symStr->
xTo ) -
static_cast< proshade_double
> ( symStr->
xFrom ) ) / 2.0 ) +
static_cast< proshade_double
> ( symStr->
xFrom );
482 proshade_double yBoxCentre = ( (
static_cast< proshade_double
> ( symStr->
yTo ) -
static_cast< proshade_double
> ( symStr->
yFrom ) ) / 2.0 ) +
static_cast< proshade_double
> ( symStr->
yFrom );
483 proshade_double zBoxCentre = ( (
static_cast< proshade_double
> ( symStr->
zTo ) -
static_cast< proshade_double
> ( symStr->
zFrom ) ) / 2.0 ) +
static_cast< proshade_double
> ( symStr->
zFrom );
486 proshade_double xCOMFromBoxCen = xBoxCentre - ( xMapCOM / (
static_cast< proshade_double
> ( symStr->
xDimSize ) /
static_cast< proshade_double
> ( symStr->
xDimIndices ) ) );
487 proshade_double yCOMFromBoxCen = yBoxCentre - ( yMapCOM / (
static_cast< proshade_double
> ( symStr->
yDimSize ) /
static_cast< proshade_double
> ( symStr->
yDimIndices ) ) );
488 proshade_double zCOMFromBoxCen = zBoxCentre - ( zMapCOM / (
static_cast< proshade_double
> ( symStr->
zDimSize ) /
static_cast< proshade_double
> ( symStr->
zDimIndices ) ) );
492 pointPos.at(1) - yCOMFromBoxCen,
493 pointPos.at(2) - zCOMFromBoxCen,
494 allCs.at(relSym.at(0))[1],
495 allCs.at(relSym.at(0))[2],
496 allCs.at(relSym.at(0))[3] ) /
498 allCs.at(relSym.at(0))[2],
499 allCs.at(relSym.at(0))[3],
500 allCs.at(relSym.at(0))[1],
501 allCs.at(relSym.at(0))[2],
502 allCs.at(relSym.at(0))[3] );
505 settings->
centrePosition.at(0) = pointPos.at(0) + ( alpha1 * allCs.at(relSym.at(0))[1] );
506 settings->
centrePosition.at(1) = pointPos.at(1) + ( alpha1 * allCs.at(relSym.at(0))[2] );
507 settings->
centrePosition.at(2) = pointPos.at(2) + ( alpha1 * allCs.at(relSym.at(0))[3] );
513 std::vector< proshade_unsign > axLst;
514 std::vector< std::vector< proshade_double > > symElems;
521 origCoeffs, rotMapComplex,
522 rotCoeffs, planForwardFourierRot,
523 trFuncCoeffs, trFunc,
524 planReverseFourierComb );
527 axLst.at(0) =
static_cast< proshade_unsign
> ( relSym.at(1) );
531 origCoeffs, rotMapComplex,
532 rotCoeffs, planForwardFourierRot,
533 trFuncCoeffs, trFunc,
534 planReverseFourierComb );
538 allCs.at(relSym.at(1))[1], allCs.at(relSym.at(1))[2], allCs.at(relSym.at(1))[3] );
541 tangentToAxes[0], tangentToAxes[1], tangentToAxes[2] );
544 tangentToAxes[0], tangentToAxes[1], tangentToAxes[2] );
548 point2Pos.at(1) - point1Pos.at(1),
549 point2Pos.at(2) - point1Pos.at(2),
550 correctedFirstAxis[0], correctedFirstAxis[1], correctedFirstAxis[2] ) /
552 correctedFirstAxis[0], correctedFirstAxis[1], correctedFirstAxis[2] );
554 point1Pos.at(1) - point2Pos.at(1),
555 point1Pos.at(2) - point2Pos.at(2),
556 correctedSecondAxis[0], correctedSecondAxis[1], correctedSecondAxis[2] ) /
558 correctedSecondAxis[0], correctedSecondAxis[1], correctedSecondAxis[2] );
561 settings->
centrePosition.at(0) = ( ( point1Pos.at(0) + ( alpha1 * allCs.at(relSym.at(0))[1] ) ) + ( point2Pos.at(0) + ( alpha2 * allCs.at(relSym.at(1))[1] ) ) ) / 2.0;
562 settings->
centrePosition.at(1) = ( ( point1Pos.at(1) + ( alpha1 * allCs.at(relSym.at(0))[2] ) ) + ( point2Pos.at(1) + ( alpha2 * allCs.at(relSym.at(1))[2] ) ) ) / 2.0;
563 settings->
centrePosition.at(2) = ( ( point1Pos.at(2) + ( alpha1 * allCs.at(relSym.at(0))[3] ) ) + ( point2Pos.at(2) + ( alpha2 * allCs.at(relSym.at(1))[3] ) ) ) / 2.0;
566 delete[] tangentToAxes;
567 delete[] correctedSecondAxis;
568 delete[] correctedFirstAxis;
608 throw ProSHADE_exception (
"There are not enough structures for symmetry detection.",
"ES00028", __FILE__, __LINE__, __func__,
"There needs to be at least one structure for which\n : symmetry is to be detected. Please supply at least one\n : structure by using the addStructure() function." );
614 throw ProSHADE_exception (
"Symmetry axis detection tolerance set to negative value.",
"ES00053", __FILE__, __LINE__, __func__,
"The symmetry axis detection tolerance was manually set to\n : negative value. This makes no sense, please supply\n : value >= 0.0." );
638 proshade_double eulA, eulB, eulG, trsX, trsY, trsZ;
649 delete staticStructure;
650 delete movingStructure;
670 movingStructure->
writeOutOverlayFiles ( settings, eulA, eulB, eulG, rotationCentre, finalTranslation );
678 movingStructure->
reportOverlayResults ( settings, rotationCentre, eulerAngles, finalTranslation );
681 delete staticStructure;
682 delete movingStructure;
701 throw ProSHADE_exception (
"There are not enough structures for map overlay\n : computation.",
"EO00033", __FILE__, __LINE__, __func__,
"There needs to be exactly two structures for map overlay\n : mode to work; the first structure is the static and the\n : second is the moving structure." );
void MapOverlayTask(ProSHADE_settings *settings, std::vector< proshade_double > *rotationCentre, std::vector< proshade_double > *eulerAngles, std::vector< proshade_double > *finalTranslation)
The symmetry detection task driver function.
void computeSphericalHarmonics(ProSHADE_settings *settings)
This function computes the spherical harmonics decomposition for the whole structure.
std::vector< proshade_double * > cyclicSymmetries
This is where the detected cyclic ("C") symmetries will be kept.
proshade_signed zFrom
This is the starting index along the z axis.
proshade_unsign xDimIndices
This is the size of the map cell x dimension in indices.
bool computeTraceSigmaDesc
If true, the trace sigma descriptor will be computed, otherwise all its computations will be omitted.
bool findSymCentre
Should phase-less map be used to determine centre of symmetry?
bool computeRotationFuncDesc
If true, the rotation function descriptor will be computed, otherwise all its computations will be om...
void addToDblPtrVector(std::vector< proshade_double * > *vecToAddTo, proshade_double *elementToAdd)
Adds the element to the vector.
void createNewMapFromBounds(ProSHADE_settings *settings, ProSHADE_data *&newStr, proshade_signed *newBounds)
This function creates a new structure from the calling structure and new bounds values.
bool isFilePDB(std::string fName)
Function determining if the input data type is PDB.
void computeRotationFunction(ProSHADE_settings *settings)
This function computes the self-rotation function for this structure.
void getReBoxBoundaries(ProSHADE_settings *settings, proshade_signed *&ret)
This function finds the boundaries enclosing positive map values and adds some extra space.
proshade_double * 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.
void checkDistancesSettings(ProSHADE_settings *settings)
The distances computation settings checks.
std::vector< std::vector< proshade_double * > > * getDihedralAxes(void)
This function allows access to the list of detected dihedral axes.
This class is the representation of ProSHADE exception.
std::string outName
The file name where the output structure(s) should be saved.
std::vector< proshade_double > findPointFromTranslations(ProSHADE_internal_data::ProSHADE_data *symStr, std::vector< std::vector< proshade_double > > symElems, fftw_complex *origCoeffs, fftw_complex *rotMapComplex, fftw_complex *rotCoeffs, fftw_plan planForwardFourierRot, fftw_complex *trFuncCoeffs, fftw_complex *trFunc, fftw_plan planReverseFourierComb)
This function computes the average of optimal translations for a cyclic point group.
std::string requestedSymmetryType
The symmetry type requested by the user. Allowed values are C, D, T, O and I.
void allocateCentreOfMapFourierTransforms(proshade_unsign xDim, proshade_unsign yDim, proshade_unsign zDim, fftw_complex *&origMap, fftw_complex *&origCoeffs, fftw_complex *&rotMapComplex, fftw_complex *&rotCoeffs, fftw_complex *&trFunc, fftw_complex *&trFuncCoeffs, fftw_plan *planForwardFourier, fftw_plan *planForwardFourierRot, fftw_plan *planReverseFourierComb)
This function allocates the required memory for the Fourier transforms required to find the centre of...
proshade_double computeRotationFunctionDescriptor(ProSHADE_internal_data::ProSHADE_data *obj1, ProSHADE_internal_data::ProSHADE_data *obj2, ProSHADE_settings *settings)
This function computes the rotation function descriptor value between two objects.
This class contains all inputed and derived data for a single structure.
bool removeNegativeDensity
Should the negative density be removed from input files?
proshade_single zDimSize
This is the size of the map cell z dimension in Angstroms.
proshade_single requestedResolution
The resolution to which the calculations are to be done.
proshade_double mapCOMProcessChangeX
The change in X axis between the creation of the structure (originalMapXCom) and just before rotation...
proshade_double originalPdbRotCenY
The centre of rotation as it relates to the original PDB positions (and not the ProSHADE internal map...
void checkOverlaySettings(ProSHADE_settings *settings)
The map overlay computation settings checks.
proshade_double mapCOMProcessChangeZ
The change in Z axis between the creation of the structure (originalMapZCom) and just before rotation...
bool usePhase
If true, the full data will be used, if false, Patterson maps will be used instead and phased data wi...
proshade_unsign getRecommendedSymmetryFold(void)
This function simply returns the detected recommended symmetry fold.
void getOptimalRotation(ProSHADE_settings *settings, ProSHADE_internal_data::ProSHADE_data *staticStructure, ProSHADE_internal_data::ProSHADE_data *movingStructure, proshade_double *eulA, proshade_double *eulB, proshade_double *eulG)
This function finds the optimal rotation between two structures as described by the settings object.
void optimiseDGroupAngleFromAxesHeights(std::vector< std::vector< proshade_double > > *ret, ProSHADE_internal_data::ProSHADE_data *dataObj, ProSHADE_settings *settings)
This function takes two axes with almost dihedral angle and optimises their relative positions as wel...
void printWarningMessage(proshade_signed verbose, std::string message, std::string warnCode)
General stderr message printing (used for warnings).
proshade_signed * getXFromPtr(void)
This function allows access to the map start along the X axis.
proshade_signed verbose
Should the software report on the progress, or just be quiet? Value between -1 (nothing) and 4 (loud)
std::vector< std::vector< proshade_double > > getAllGroupElements(std::vector< proshade_unsign > axesList, std::string groupType="", proshade_double matrixTolerance=0.05)
This function returns the group elements as rotation matrices of any defined point group.
proshade_unsign yDimIndices
This is the size of the map cell y dimension in indices.
void deepCopyMap(proshade_double *&saveTo, proshade_signed verbose)
This function copies the internal map into the supplied pointer, which it also allocates.
proshade_signed messageShift
This value allows shifting the messages to create more readable log for sub-processes.
void addToDoubleVector(std::vector< proshade_double > *vecToAddTo, proshade_double elementToAdd)
Adds the element to the vector.
std::string getRecommendedSymmetryType(void)
This function simply returns the detected recommended symmetry type.
proshade_unsign getXDim(void)
This function allows access to the map size in indices along the X axis.
std::vector< proshade_double * > * getCyclicAxes(void)
This function allows access to the list of detected cyclic axes.
proshade_double originalPdbTransX
The optimal translation vector as it relates to the original PDB positions (and not the ProSHADE inte...
proshade_signed zTo
This is the final index along the z axis.
void readInStructure(std::string fName, proshade_unsign inputO, ProSHADE_settings *settings, proshade_double *maskArr=nullptr, proshade_unsign maskXDim=0, proshade_unsign maskYDim=0, proshade_unsign maskZDim=0, proshade_double *weightsArr=nullptr, proshade_unsign weigXDim=0, proshade_unsign weigYDim=0, proshade_unsign weigZDim=0)
This function initialises the basic ProSHADE_data variables and reads in a single structure.
proshade_signed xTo
This is the final index along the x axis.
void SymmetryDetectionTask(ProSHADE_settings *settings, std::vector< proshade_double > *mapCOMShift, std::string *symT, proshade_unsign *symF, std::vector< proshade_double * > *symA, std::vector< std::vector< proshade_double > > *allCs)
The symmetry detection task driver function.
void mapToSpheres(ProSHADE_settings *settings)
This function converts the internal map onto a set of concentric spheres.
proshade_double originalPdbTransY
The optimal translation vector as it relates to the original PDB positions (and not the ProSHADE inte...
void MapManipulationTask(ProSHADE_settings *settings, std::vector< proshade_signed * > *originalBounds, std::vector< proshade_signed * > *reboxedBounds, std::vector< proshade_double * > *manipulatedMaps)
The re-boxing task driver function.
proshade_signed yTo
This is the final index along the y axis.
proshade_single xDimSize
This is the size of the map cell x dimension in Angstroms.
proshade_double 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.
void deepCopyAxisToDblPtrVector(std::vector< proshade_double * > *dblPtrVec, proshade_double *axis)
Does a deep copy of a double array to a vector of double arrays.
proshade_double * internalMap
The internal map data representation, which may be amended as the run progresses.
void reportOverlayResults(ProSHADE_settings *settings, std::vector< proshade_double > *rotationCentre, std::vector< proshade_double > *eulerAngles, std::vector< proshade_double > *finalTranslation)
This function reports the results of the overlay mode.
proshade_signed xFrom
This is the starting index along the x axis.
void writeMap(std::string fName, std::string title="Created by ProSHADE and written by GEMMI", int mode=2)
Function for writing out the internal structure representation in MRC MAP format.
bool reBoxMap
This switch decides whether re-boxing is needed.
void getOptimalTranslation(ProSHADE_settings *settings, ProSHADE_internal_data::ProSHADE_data *staticStructure, ProSHADE_internal_data::ProSHADE_data *movingStructure, proshade_double *trsX, proshade_double *trsY, proshade_double *trsZ, proshade_double eulA, proshade_double eulB, proshade_double eulG)
This function finds the optimal translation between two structures as described by the settings objec...
proshade_single addExtraSpace
If this value is non-zero, this many angstroms of empty space will be added to the internal map.
proshade_unsign getYDim(void)
This function allows access to the map size in indices along the Y axis.
This class stores all the settings and is passed to the executive classes instead of a multitude of p...
proshade_double originalPdbTransZ
The optimal translation vector as it relates to the original PDB positions (and not the ProSHADE inte...
void writeOutOverlayFiles(ProSHADE_settings *settings, proshade_double eulA, proshade_double eulB, proshade_double eulG, std::vector< proshade_double > *rotCentre, std::vector< proshade_double > *ultimateTranslation)
This function writes out the rotated map, co-ordinates and transformation JSON file.
void DistancesComputationTask(ProSHADE_settings *settings, std::vector< proshade_double > *enLevs, std::vector< proshade_double > *trSigm, std::vector< proshade_double > *rotFun)
The distances computation task driver function.
void processInternalMap(ProSHADE_settings *settings)
This function simply clusters several other functions which should be called together.
void findMAPCOMValues(proshade_double *map, proshade_double *xCom, proshade_double *yCom, proshade_double *zCom, proshade_single xAngs, proshade_single yAngs, proshade_single zAngs, proshade_signed xFrom, proshade_signed xTo, proshade_signed yFrom, proshade_signed yTo, proshade_signed zFrom, proshade_signed zTo, bool removeNegDens)
This function finds the Centre of Mass for a map.
std::vector< proshade_unsign > findReliableUnphasedSymmetries(std::vector< proshade_double * > *allCs, std::vector< std::vector< proshade_double * > > *allDs, proshade_signed verbose, proshade_signed messageShift, proshade_double tolerance)
This function checks the list of detected axes (presumably from phaseless symmetry detection) and ret...
proshade_unsign getZDim(void)
This function allows access to the map size in indices along the Z axis.
std::vector< proshade_double > centrePosition
The position of the centre of the map in "real space" co-ordinates.
bool changeMapResolution
Should maps be re-sampled to obtain the required resolution?
std::vector< proshade_double * > recommendedSymmetryValues
The axes and other info of the recommended symmetry for the structure.
proshade_double getMapValue(proshade_unsign pos)
This function returns the internal map representation value of a particular array position.
void releaseCentreOfMapFourierTransforms(fftw_complex *origMap, fftw_complex *origCoeffs, fftw_complex *rotMapComplex, fftw_complex *rotCoeffs, fftw_complex *trFunc, fftw_complex *trFuncCoeffs, fftw_plan planForwardFourier, fftw_plan planForwardFourierRot, fftw_plan planReverseFourierComb)
This function releases the allocated memory for the Fourier transforms used to find the centre of the...
void ReportDistancesResults(ProSHADE_settings *settings, std::string str1, std::string str2, proshade_double enLevDist, proshade_double trSigmDist, proshade_double rotFunDist)
Simple function for reporting the distances computation results.
proshade_double computeTraceSigmaDescriptor(ProSHADE_internal_data::ProSHADE_data *obj1, ProSHADE_internal_data::ProSHADE_data *obj2, ProSHADE_settings *settings)
This function computes the trace sigma descriptor value between two objects.
proshade_signed * getYToPtr(void)
This function allows access to the map last position along the Y axis.
bool moveToCOM
Logical value stating whether the structure should be moved to have its Centre Of Mass (COM) in the m...
proshade_signed * getXToPtr(void)
This function allows access to the map last position along the X axis.
proshade_signed * getYFromPtr(void)
This function allows access to the map start along the Y axis.
proshade_double mapCOMProcessChangeY
The change in Y axis between the creation of the structure (originalMapYCom) and just before rotation...
void addToDoubleVectorVector(std::vector< std::vector< proshade_double > > *vecToAddTo, std::vector< proshade_double > elementToAdd)
Adds the element to the vector of vectors.
proshade_signed yFrom
This is the starting index along the y axis.
void addToUnsignVector(std::vector< proshade_unsign > *vecToAddTo, proshade_unsign elementToAdd)
Adds the element to the vector.
std::vector< std::string > inputFiles
This vector contains the filenames of all input structure files.
proshade_double computeEnergyLevelsDescriptor(ProSHADE_internal_data::ProSHADE_data *obj1, ProSHADE_internal_data::ProSHADE_data *obj2, ProSHADE_settings *settings)
This function computes the energy levels descriptor value between two objects.
void checkMapManipulationSettings(ProSHADE_settings *settings)
The re-boxing settings checks.
This header declares all the taks functions.
proshade_double originalPdbRotCenZ
The centre of rotation as it relates to the original PDB positions (and not the ProSHADE internal map...
proshade_double axisErrTolerance
Allowed error on vector axis in in dot product ( acos ( 1 - axErr ) is the allowed difference in radi...
void checkSymmetrySettings(ProSHADE_settings *settings)
The symmetry computation settings checks.
void SymmetryCentreDetectionTask(ProSHADE_settings *settings, proshade_unsign strIndex=0)
The task for finding the structure centre based on phase-less symmetry detection.
void reportSymmetryResultsList(ProSHADE_settings *settings)
This function takes prints the report for symmetry detection using multiple thresholds....
proshade_unsign zDimIndices
This is the size of the map cell z dimension in indices.
void detectSymmetryFromAngleAxisSpace(ProSHADE_settings *settings)
This function runs the symmetry detection algorithms on this structure using the angle-axis space and...
proshade_double originalPdbRotCenX
The centre of rotation as it relates to the original PDB positions (and not the ProSHADE internal map...
void printProgressMessage(proshade_signed verbose, proshade_signed messageLevel, std::string message, proshade_signed messageShift=0)
General stdout message printing.
proshade_single yDimSize
This is the size of the map cell y dimension in Angstroms.
void deepCopyBoundsSigPtrVector(std::vector< proshade_signed * > *sigPtrVec, proshade_signed *xFrom, proshade_signed *xTo, proshade_signed *yFrom, proshade_signed *yTo, proshade_signed *zFrom, proshade_signed *zTo)
Does a deep copy of a signed int array to a vector of signed int arrays.
proshade_signed * getZFromPtr(void)
This function allows access to the map start along the Z axis.
proshade_signed * getZToPtr(void)
This function allows access to the map last position along the Z axis.
bool computeEnergyLevelsDesc
If true, the energy levels descriptor will be computed, otherwise all its computations will be omitte...