jensengroup / propka

PROPKA predicts the pKa values of ionizable groups in proteins and protein-ligand complexes based in the 3D structure.
http://propka.org
GNU Lesser General Public License v2.1
258 stars 58 forks source link

Protonate class does not use predicted pKa information #130

Open furybubu opened 3 years ago

furybubu commented 3 years ago

Hi @sobolevnrm! I used your last release to predict the protonation state of a pdb structure using the methods found in the MolecularContainer and Protonate classes. The reason I went this way is that I need to use a pythonic approach instead of relying on external binaries or servers. See example below:

self.input = input
self.pH = pH #default is set to 7.4

optargs = ["--pH=" + str(self.pH)]
optargs = tuple(optargs)
optargs += (self.input,)
options = loadOptions(optargs)

parameters = read_parameter_file(options.parameters, Parameters())
self.molec = MolecularContainer(parameters, options)
self.molec = read_molecule_file(self.input, self.molec, stream=None)
self.molec.calculate_pka()

proton = Protonate(verbose=True)
proton.protonate(self.molec)

Judging by the output and the source code of the protonate method, it seems that the predicted pKas are not used in the protonation step. For instance, here is the predicted pKa for an Arginine in my structure:

ARG  44 A  12.40     0 %   -0.12  145   0.00    0    0.00 XXX   0 X    0.00 XXX   0 X    0.00 GLU  41 A
ARG  44 A                                            0.00 XXX   0 X    0.00 XXX   0 X    0.01 GLU  43 A

After the protonation step, hydrogens are only added to the side chain carbons. Can you please tell me if I am missing something here and how I could get the expected result? Thanks!

sobolevnrm commented 2 years ago

Very few force fields support titration state changes in arginine. In fact, there's a "bounty" to observe a neutral arginine in a real biomolecular system.