The question says it all. I want to calculate lipophilicity of proteins to screen the compounds out for antigen-antibody interactions.

  • $\begingroup$ Membrane affinity of protein is dependent on their structure and for a membrane associated protein only one side will be hydrophobic with a tell-tell charged ring around it (e.g. DHR1 domain). I.e. The structure or that of a homologue needs to be known. $\endgroup$ Feb 7, 2020 at 0:31
  • $\begingroup$ I am not sure what you mean by " screen the compounds out for". Compounds normally means small molecules, but I have the feeling you mean the protein themselves (macromolecules). If so, that sounds like you are interested in doing global docking of a panel of protein vs. a threaded model (or similar) of an antibody, which is an absolute no go zone due to the propagated imprecision. $\endgroup$ Feb 7, 2020 at 0:31
  • $\begingroup$ Agreed the question requires further clarification $\endgroup$
    – M__
    Feb 7, 2020 at 7:31
  • $\begingroup$ A clarification: $\endgroup$ Feb 10, 2020 at 21:49
  • $\begingroup$ I am not going to dock anything. I would like to calculate the lipophilicity of peptides, so still the question 'How?' remains. Also, protein is a chemical compound. $\endgroup$ Feb 10, 2020 at 21:59

1 Answer 1



The lipophilicity of an oligopeptide or a small molecule can be calculated with RDKit, the classic compChem python toolkit. The measure is logP or partition coefficient, namely the magnitude of the ratio of the concentration in octanol over than in water, so the higher it is, the more it partitions in the octanol phase. However, with a compound of several dalton it may be good to see what the contribution of each atom to this score are. This measure is the Crippen contribution to logP, which can be handily plotted on the molecule. Note that these are may be at first glance look similar to Gastaiger partial changes, but are not.

Okay, first the imports

from rdkit import Chem
from rdkit.Chem import AllChem, Descriptors
from rdkit.Chem.Draw import SimilarityMaps

Now let's make the molecules. Let's start with something we can simply use a SMILES string of the web: Bortezomib.

name = 'Bortezomib'
mol = Chem.MolFromSmiles('O=C(N[C@H](C(=O)N[C@H](B(O)O)CC(C)C)Cc1ccccc1)c2nccnc2')

Now we can do all the relevant calculations on the mol object:

print('logP', Descriptors.MolLogP(mol))
contribs = Chem.rdMolDescriptors._CalcCrippenContribs(mol)
fig = SimilarityMaps.GetSimilarityMapFromWeights(mol, [x for x,y in contribs], colorMap='BuPu', contourLines=10)
fig.savefig(name+'_crippen.png', bbox_inches='tight')

LogP=0.3 Bortezomib

colorMap='BuPu' is the matplotlib colorscheme. I have no idea which work best, I have spent way too much time trying and I do not know. But with BuPu, white is hydrophilic, purple is hydrophobic.

Say the oligopeptide does not have a SMILES or we don't want to do it that way. Let's take β-Casomorphins 1–3:

name = 'β-Casomorphins 1–3'
mol = Chem.MolFromFASTA('YPF')
mol = AllChem.ReplaceSubstructs(mol,

The result with the last block from before gives:

logP=1 casomorphin


With protein, it is a lot harder. Membrane affinity of protein is dependent on their structure. In PyMOL you can use the Adaptive Poisson-Boltzmann Solver (APBS) to show the surface by charge. For transmembrane protein there is clear ring of hydrophobicity —CHARMM-GUI membrane builder and a variety of tools for example can guess where it is. For a membrane associated protein only one side will be hydrophobic with a tell-tell charged ring around it (e.g. DHR1 domain) and there are no hard and tested methods for that.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.