Calculating hydrogen bond donor/acceptor locations

User 0cd5667845

28-03-2016 15:27:43


I am using the following snippet to calculate the counts of hydrogen bond donors and acceptors:

  private ChemJEP hBondAcceptorCountEvaluator;
  private ChemJEP hBondDonorCountEvaluator;

      Evaluator evaluator = new Evaluator();
      hBondAcceptorCountEvaluator = evaluator.compile("acceptorCount()", MolContext.class);
      hBondDonorCountEvaluator = evaluator.compile("donorCount()", MolContext.class);

      MolContext molContext = new MolContext(molecule);

      hBondAcceptorCount = (int) hBondAcceptorCountEvaluator.evaluate_double(molContext);
      hBondDonorCount = (int) hBondDonorCountEvaluator.evaluate_double(molContext);

However, I am also interested in determining the locations of the hydrogen bond donors and acceptors. Presumably there is some pattern running in the evaluator that locates these sites, before simply returning the total count. Is it possible to return the hydrogen bond donor/acceptor locations using ChemJEP and/or Evaluator, or even some other ChemAxon API?

PS. I understand that without first cleaning the molecule, there will be no coordinates assigned to the atoms, and so there would also likely be no coordinates assigned to the hydrogen bond donor/acceptor sites. I am also using the Cleaner to generate 3D coordinates, so ideally, I would like to find the 3D coordinates of the hydrogen bond donor/acceptor sites. However, if it is possible to just locate the hydrogen bond donor/acceptor sites by reference to some atom or set of atoms, that would also be a workable solution.

Thank you!


ChemAxon d51151248d

04-04-2016 13:37:37

Hi Richard, 

Thank you for letting us know this issue. We are investigating it and will come back to you soon. 


User 0cd5667845

04-04-2016 15:22:49

Hi Daniel,

It is not necessarily an issue, I am just trying to establish what is the correct way to obtain the locations of the HBA and HBD sites. In the meantime, I have found this method which seems to work:

PMapper pm = null;
PMap pmap = null;

pm = new PMapper(new File(PATH_OF_XML_FILE));

PSymbols symbols = pm.getSymbols();

pmap = pm.createFeatureMap(inputMol);

String delimitedSymbols = pmap.toString(symbols);

and then find the atom indices in this semi-colon delimited String which contain the letters 'a' or 'd' (HBA and HBD respectively). These indices line up with the indices in inputMol, so I can identify the HBA and HBD atoms.

If there is a better way than this, I would certainly be interested in hearing about it, but this does seem to meet my need.

Thank you,


ChemAxon 5fc3e8d7d0

20-04-2016 12:40:14

Dear Richard,

Try to use our Hydrogen Bond Donor Acceptor (HBDA) Plugin (Documentation, API doc).

The following code example demonstrates how to identify HBDA atoms:

final Molecule mol = ...

// create and run calculation
final HBDAPlugin plugin = new HBDAPlugin();

// HBA atoms
for (int i = 0; i < mol.getAtomCount(); i++) {
if (plugin.getAcceptorSiteCount(i) > 0) { // for HBD atoms: getDonorSiteCount(i) 
final MolAtom atom = mol.getAtom(i);
// do something with the atom ...

Best regards,

User 0cd5667845

29-04-2016 16:35:26

Thank you Laszlo,


User 4535fea438

26-08-2016 02:27:14

That's quite effective. I will suggest it should be tried in our research for hsp90 inhibitors design.