Rational design of GPCR biased Ligand

GPCR is one of druggable target. GPCR activation controls many networks of signaling pathways, which for most receptors are mediated by both G proteins and beta-arrestins. Different signaling pathways give different effects. To avoid side effects from G protein signals, designing beta-arrestins selective ligand is useful strategy for drug discovery. And there are lots of reports about biased-ligand from a few years ago.

I am interested in these area and following article found.
“structure-inspired design of b-arrestin-biased ligands for aminergic GPCRs”

The authors design selective biased ligand of D2 receptor by using homology modeling/SBDD and MD.

At first they focused in to TM5 and EL2 region where are important for G protein/beta arrestin selectivity. And design new molecule from Aripiprazole, replace from di-chloro to indole moiety (Compound 1). The compound 1 was biased.
Next they tried to design substituted analogue of compound1 and got clear SAR of the substituents. Also they performed MD simulation about the indole motif and revealed the effect of the substituents.

Finally they could rationally design more selective biased ligand than initial compound 1 Fig5. Bias index is 20 vs 2 (compound7 vs compound1)

It was interesting for me because all molecules have quite similar structure but little difference affect protein-ligand contacts and can control their signaling pathway!

And computational approach helps rational biased drug design. I feel Low-molecular drug discovery is still exciting area of science.

BTW, in the article Aripiprazole is used for starting point.
Aripiprazole is one of major drug for schizophrenia and bipolar disorder. And Rexulti is also approved drug for schizophrenia and major depression. Structural difference of these molecules is a tail part, di chloro benzene or benzothiophene.

These compounds show different pharmacological profiles.
Also there are difference in metabolic profiles.
Receptor Rexulti Abilify(Ki nM)
5-HT1A 0.12 5.6
5-HT2A 0.47 8.7
5-HT2B 1.9 0.4
D2 0.3 1.6
D3 1.1 5.4
H1 19 27.9
a1b 0.17 34.4
a2c 0.59 37.6

I am now interested in the patent strategy. I will check it.

API for opentargets

Association of drug targets with diseases are important information for drug discovery. There are lots of databases to provide these information I think.

I like python. ;-) So, I am interested in following article.
Opentargets is a ” a data integration and visualization platform that provides evidence about the association of known and potential drug targets with diseases”.
That sounds good. The platform is provided by web app. You can use the data from https://www.targetvalidation.org/.
UI is very simple and sophisticated.
And also Python API is provided from pypi / github. I used the package by referring to the document.
At first I installed the package from pip command.

iwatobipen$ pip install git+git://github.com/CTTV/opentargets-py.git

Next, I tried to get evidence for a disease. Retrieved data related my query and printed it.

import pprint
from opentargets import OpenTargetsClient
ot = OpenTargetsClient()
e_for_disease = ot.get_evidence_for_disease('arthritis')
res = []
for e in e_for_disease:
        res.append([ e['disease']['efo_info']['label'], 
                   e['drug']['molecule_name']] )
# get unique dataset
uniqres = []
for i in res:
    if i in uniqres:

# check the result
for i in uniqres:

['gout', 'Cyclooxygenase inhibitor', 'Cyclooxygenase', 'INDOMETHACIN']
['rheumatoid arthritis', 'T-lymphocyte activation antigen CD86 inhibitor', 'T-lymphocyte activation antigen CD86', 'ABATACEPT']
['rheumatoid arthritis', 'Dihydrofolate reductase inhibitor', 'Dihydrofolate reductase', 'METHOTREXATE']
['rheumatoid arthritis', 'T-lymphocyte activation antigen CD80 inhibitor', 'T-lymphocyte activation antigen CD80', 'ABATACEPT']
['rheumatoid arthritis', 'Dihydroorotate dehydrogenase inhibitor', 'Dihydroorotate dehydrogenase', 'LEFLUNOMIDE']
['osteoarthritis', 'Plasminogen inhibitor', 'Plasminogen', 'TRANEXAMIC ACID']
['gout', 'Xanthine dehydrogenase inhibitor', 'Xanthine dehydrogenase', 'ALLOPURINOL']
['osteoarthritis', 'Adrenergic receptor agonist', 'Adrenergic receptor', 'EPINEPHRINE']
['rheumatoid arthritis', 'Janus Kinase (JAK) inhibitor', 'Janus Kinase (JAK)', 'TOFACITINIB']
['rheumatoid arthritis', 'TNF-alpha inhibitor', 'TNF-alpha', 'ADALIMUMAB']
['chronic childhood arthritis', 'Dihydrofolate reductase inhibitor', 'Dihydrofolate reductase', 'METHOTREXATE']
['osteoarthritis, hip', 'Adrenergic receptor agonist', 'Adrenergic receptor', 'EPINEPHRINE']
['rheumatoid arthritis', 'Interleukin-6 receptor alpha subunit inhibitor', 'Interleukin-6 receptor alpha subunit', 'TOCILIZUMAB']
['osteoarthritis', 'Coagulation factor X inhibitor', 'Coagulation factor X', 'RIVAROXABAN']
['osteoarthritis', 'Cyclooxygenase-2 inhibitor', 'Cyclooxygenase-2', 'CELECOXIB']
['rheumatoid arthritis', 'Cyclooxygenase-2 inhibitor', 'Cyclooxygenase-2', 'CELECOXIB']
['chronic childhood arthritis', 'Cyclooxygenase-2 inhibitor', 'Cyclooxygenase-2', 'CELECOXIB']
['rheumatoid arthritis', 'FK506-binding protein 1A inhibitor', 'FK506-binding protein 1A', 'TACROLIMUS']
['osteoarthritis', 'Mu opioid receptor agonist', 'Mu opioid receptor', 'MORPHINE']
['rheumatoid arthritis', 'TNF-alpha inhibitor', 'TNF-alpha', 'INFLIXIMAB']
['chronic childhood arthritis', 'Histamine H2 receptor antagonist', 'Histamine H2 receptor', 'FAMOTIDINE']
['osteoarthritis', 'Adrenergic receptor alpha-2 agonist', 'Adrenergic receptor alpha-2', 'DEXMEDETOMIDINE']
['chronic childhood arthritis', 'Cyclooxygenase inhibitor', 'Cyclooxygenase', 'IBUPROFEN']

Next, retrieve data with limited field. The returned object can be converted pandas dataframe.

from opentargets import OpenTargetsClient
ct = OpenTargetsClient()
res = ct.get_associations_for_target('PDCD1',
resdf = res.to_dataframe()

Statistics method can handle scores. (I do not understand the part well so I need to read document)

from opentargets import OpenTargetsClient
from opentargets.statistics import HarmonicSumScorer
ot = OpenTargetsClient()
r = ot.get_associations_for_target('PDCD1')
interesting_datatypes = ['genetic_association', 'known_drug', 'somatic_mutation']

def score_with_datatype_subset(datatypes,results):
    for i in results:
        datatype_scores = i['association_score']['datatypes']
        filtered_scores = [datatype_scores[dt] for dt in datatypes]
        custom_score = HarmonicSumScorer.harmonic_sum(filtered_scores)
        if custom_score:
            yield(custom_score, i['disease']['id'], dict(zip(datatypes, filtered_scores)))
for i in score_with_datatype_subset(interesting_datatypes, r):

Whole code is pushed my repo.