OEGetRadiusOfGyration¶
bool OEGetRadiusOfGyration(double* radiusOfGyration, const double* pmi, const OEMolBase& mol)
bool OEGetRadiusOfGyration(double* radiusOfGyration, const double* pmi, const OEConfBase& mol)
bool OEGetRadiusOfGyration(double* radiusOfGyration, const double* pmi, const OEMCMolBase& mol)
Calculates the radius of gyration of the given molecule, using the given PMI that has already been calculated
with the function OECalcPMI
. Units of the calculated radius are the same as those used to
set the radius of the molecule, which need to be the same radius units used to calculate the PMI.
The function returns true if calculation is successful, false otherwise. If the molecule is not centered, or radius of gyration values are all 0, the function will return false,
Note that for an OEMCMolBase, the OECalcPMI
only calculates the PMI for the
active conformer, and therefore this function similarly uses only the mass of the active conformer to calculate the
radius of gyration.
- radiusOfGyration
This double array will be populated by the radius of gyration in each dimension, X, Y, and Z.
- pmi
This is a pointer to the PMI of the given molecule in each dimension, in X, Y, and Z.
- mol
This is the molecule for which the PMI is calculated. It must have a set radius and set mass for the calculation to be valid.
Warning
These functions only work correctly with a molecule that has been centered using the function
OECenter
. If the molecule has not been centered, the function will return false.
See also
OECalcPMI
function to calculate principle moment of inertia.
The following code snippet demonstrates how to calculate the PMI and radius of gyration for a molecule.
int main(int argc, char *argv[])
{
if (argc < 2)
OEThrow.Usage("%s <infile_1> [<infle2>...]", argv[0]);
double pmi[3] = {0};
double radiusOfGyration[3] = {0};
for (int i = 1; i < argc; i++)
{
oemolistream ifs;
if (!ifs.open(argv[i]))
OEThrow.Fatal("Unable to open %s for reading", argv[1]);
OEMol mol;
while (OEReadMolecule(ifs, mol))
{
OECalcPMI(pmi, mol);
std::cout << "PMI: ";
for (int k = 0; k < 3; k++)
std::cout << pmi[k] << " ";
std::cout << std::endl;
std::cout << "Radius Of Gyration: ";
for (int j = 0; j < 3; j++)
std::cout << radiusOfGyration[j] << " ";
std::cout << std::endl;
}
}
return 0;
}