Count the number of specified chiral carbons using SMARTS & RDKit Substructure Counter Node

Hi everybody,

I want to count the number of defined chiral carbons in molecules. Meaning only those chiral centers which are defined and not also those which are potentially chiral but which chirality is not defined.

To count the specified chiral carbons I'm using the RDKit Substructure Counter node with the following SMARTS:


Anyway, as you can see from the attached example workflow, this seems to count the specified chiral carbons, the unspecified chiral and even the achiral ones.

Please, do you know if there is something wrong with the SMARTS query or if there could be a problem in the node?

Any help is appreciated.


Hi Gio,

I think that the problem is in your smarts string: in the first part ([#6X4@](*)(*)(*)*) you are asking to match all carbons with 4 bonds and connected to 4 "any atom". in the secod part of the string ([#6X4@H](*)(*)*) you intruduce the possibility of hydrogen as a connected atom but in neither of the two parts you are specifying that the 4 groups connected with the central atom must be different.

in fact, the first one would match tetrafluoromethyl and the second one trifluoromethyl.


I am not aware of any way to do this with just smarts strings but if you have access to moe, you can do it in their svl snippet node and I assume that schrodinger has a similar functionality.







Hi Giovanni,

Thanks for your reply. Unfortunately I don't have access to MOE and I also would like to do it with SMARTS for personal reasons. Actually I don't have too much experience using SMARTS but the one I mentioned it is also between the examples of the Daylight SMARTS tutorial:

Search “chirality” in

So currently I'm quite confused.

Does anybody has suggestions on what I'm doing wrong here?

I think what you have encountered is the slight differences in the way different toolkits interpret SMARTs matches.  It may be worth comparing the Indigo or CDK toolkits.

Alternatively, if you want something simple, then a java snippet with an integer return type and:

c_ChiralCentres = c_SMILES.split("(@|@@)").length - 1;

should give you the answer - but then I agree that that isnt actually using the SMARTS!