rdkit / rdkit-js

A powerful cheminformatics and molecule rendering toolbelt for JavaScript, powered by RDKit .
https://rdkitjs.com
BSD 3-Clause "New" or "Revised" License
142 stars 36 forks source link

Request for access to atoms and atom properties #294

Open baoilleach opened 1 year ago

baoilleach commented 1 year ago

Hi @ptosco. Any chance of access to the atoms and their properties? Specifically, I am developing an application that does a SMARTS match and then looks at the matching atoms. This works so far, in that I have the atom indices, but I need to be able to access the corresponding atoms, and then the ability to access degree, valence, charge, implicit H count, and whether in a ring. Actually, to be exact, I am implementing the same application across several JS cheminf toolkits, so would like to include RDKit of course!

ptosco commented 1 year ago

@baoilleach Hi Noel, currently getters/setters for atom and bond properties are not exposed. I agree they would be useful and it would be good to expose them to JS, together with other bits that several others have asked for (e.g., MCS, R group decomposition). However, as discussed with @greglandrum, before exposing all of that we need to do some work on the CMake build system in order to allow opting in/out different sets of features, otherwise we keep bloating a library which was meant to be lightweight, as the MinimalLib name suggests, with functionality that not everyone would need. Unfortunately at this time I do not have time to work on that, but it is definitely on my radar.

baoilleach commented 1 year ago

Understood. I'll keep an eye on the project.

papillot commented 1 year ago

@baoilleach with the mol.get_json() method you have access to an object containing a molecules property with a vector of atoms containing the following (optional) properties:

{
  chg: number;
  /** Implicit Hydrogens count */
  impHs: number;
  isotope: number;
  nRad: number;
  stereo: 'unspecified' | 'cw' | 'ccw' | 'other';
  z: number;
}

So, you could map the atom indices to this vector and get some of the information you are looking for.