# OEGet2dPSA¶

bool OEGet2dPSA(const OEChem::OEMolBase &mol, float &psa, float *atomPSA=0,
bool SandP=false)


Returns the topological polar surface area for a given molecule as described in the Polar Surface Area section. The SandP parameter controls whether sulfur and phosphorus should be counted towards the total surface area. See example in Figure: Example of depicting the atom contributions of the polar surface area.

Warning

TPSA values are mildly sensitive to the protonation state of a molecule.

The atomPSA parameter can be used to retrieve the contribution of each atom to the total polar surface area as shown in Listing 1.

Listing 1: Example of retrieving individual atom contributions to PSA

  // declare an array for atom values
float * atomPSA = new float[mol.GetMaxAtomIdx()];
float psa;
OEGet2dPSA(mol, psa, atomPSA);

std::cout << "PSA = " << psa << std::endl;
for (OEIter<OEAtomBase> atom=mol.GetAtoms();atom;++atom)
{
unsigned int idx = atom->GetIdx();
std::cout << idx << " " << atomPSA[idx] << std::endl;
}

// clean up
delete [] atomPSA;


Example of depicting the atom contributions of the polar surface area (ignoring S and P atoms)

(Darker colors and longer spikes indicate larger PSA atom contributions)

Example of depicting the atom contributions of the polar surface area (considering S and P atoms)

(Darker colors and longer spikes indicate larger PSA atom contributions)