Protonation states

24-09-2004 16:27:36

Given a pH-value, I would like to calculate the N most probable protonation states of a molecule using the Marvin API. How do I do that?

ChemAxon fb166edcbd

24-09-2004 17:37:46

We have the chemaxon.marvin.calculations.pKaPlugin class for this

purpose, the attached example code shows its usage.

Note the


params.put("mscalc", "true"); // microspecies calculation

line, it is important and the API doc does not mention this -

I will fix it for the next release.

Since the plugin is prepared to calculate the distributions

for a whole pH range (from lower pH to upper pH with specified

pH step), you should set this range instead of a single pH value

and will get the result as a double[] array. If you set the pH step

bigger than the pH range (upper - lower) then you will get a 1-length

array corresponding to the lower pH. I will also simplify this

in the next release.

An example run:


java MsTest t.mol

Microspecies    distribution at pH 3.4


NCCc1cc(C(O)=O)c(N)cc1C(O)=O    5.347414351318987E-6

NCCc1cc(C(O)=O)c([NH3+])cc1C(O)=O       3.413833274704238E-8

NCCc1cc(c(N)cc1C(O)=O)C([O-])=O 4.548150009744704E-6

NCCc1cc(C(O)=O)c(N)cc1C([O-])=O 3.7614997399809733E-6

Nc1cc(C(O)=O)c(CC[NH3+])cc1C(O)=O       23.29222735279577

NCCc1cc(c([NH3+])cc1C(O)=O)C([O-])=O    4.9881131735351495E-6

NCCc1cc(c([NH3+])cc1C([O-])=O)C(O)=O    6.078096243485594E-8

[NH3+]CCc1cc(C(O)=O)c([NH3+])cc1C(O)=O  0.1160158355995498

NCCc1cc(C([O-])=O)c(N)cc1C([O-])=O      7.114440880237923E-7

Nc1cc(C(O)=O)c(CC[NH3+])cc1C([O-])=O    21.758006439582875

Nc1cc(C([O-])=O)c(CC[NH3+])cc1C(O)=O    21.740610452662267

NCCc1cc(C([O-])=O)c([NH3+])cc1C([O-])=O 1.8998512244369232E-6

[NH3+]CCc1cc(c([NH3+])cc1C(O)=O)C([O-])=O       18.79404659825297

[NH3+]CCc1cc(C(O)=O)c([NH3+])cc1C([O-])=O       0.2735774290432635

Nc1cc(C([O-])=O)c(CC[NH3+])cc1C([O-])=O 4.522475563109383

[NH3+]CCc1cc(C([O-])=O)c([NH3+])cc1C([O-])=O    9.503018977562022

You can then sort the distribution values and take the N largest

in your code - currently there is no API support for this.