Think about Structure Kinetics Relationship

Here is a deep analysis about SKR from Merck.
https://pubs.acs.org/doi/abs/10.1021/acs.jmedchem.8b00080

Recently it is becoming important factor for understanding ligand target binding kinetics. You know there are tools such as SPR, ITC and in silico method like a MD.

The author analyzed Kinetic data about Hsp90. They analyzed relation ship between R-group of some scaffolds and Kon with two type of compounds set called “cavity-varying” and “entrance-varying”.
The “cavity” is hydrophobic region of Hsp90 and “entrance” is hydrophilic.
It is interesting that substituents of “cavity-varying” shows strong relation ships between lipophilicity and Kon . On the other hand, substituents of “entrance-varying” shows week correlation.

Also they performed MD simulations to confirm a polar desolvation barrier. Unfortunately I am not familiar for Molecular Dynamics but it reveal the effect of desolvation step of molecular binding.

In the article the author provides lots of data. It is worth to check and learn I think.

Advertisements

Make MMP network and send to cytoscape #chemoinfo

Recently I use cytoscape in my laboratory. You know Cytoscape is nice tool for network visualization.
I often make data with python and import data from cytoscape. The work flow is not so bad but I am thinking that it will be nice if python can communicate with cytoscape.
Fortunately cytocape has REST plugin called cyREST and also python has py2cytoscape to do it!
It sounds nice. I tried to use these libraries.
At first I installed cyREST to my cytoscape (v3.5.1). appmanager => cyREST >
And also I installed chemviz for drawing chemical structure in cytoscape.
Then install py2cytoscape via pip. 😉
You can access localhost:1234/v1 from web blowser when cytoscape launched if cyREST is successfully installed.

Ready.
I drew simple MMP network. Code is below.
First, I made MMP from SMILES file by using RDKit MMP script.

$ cat testdata.smi
Oc1ccccc1 phenol
Oc1ccccc1O catechol
Oc1ccccc1N 2-aminophenol
Oc1ccccc1Cl 2-chlorophenol
Nc1ccccc1N o-phenylenediamine
Nc1cc(O)ccc1N amidol
Oc1cc(O)ccc1O hydroxyquinol
Nc1ccccc1 phenylamine
C1CCCC1N cyclopentanol
$ python rfrag.py < testdata.smi> testdata.frag
$ python indexing.py < testdata.frag > testmmp.txt -r 0.2
$ cat testmmp.txt
Oc1ccccc1,Nc1ccccc1,phenol,phenylamine,O[*:1]>>N[*:1],c1ccc(cc1)[*:1]
Nc1cc(O)ccc1N,Nc1ccccc1N,amidol,o-phenylenediamine,O[*:1]>>[*:1][H],Nc1ccc(cc1N)[*:1]
Oc1ccccc1N,Nc1ccccc1N,2-aminophenol,o-phenylenediamine,O[*:1]>>N[*:1],Nc1ccccc1[*:1]
Oc1ccccc1N,Nc1ccccc1,2-aminophenol,phenylamine,O[*:1]>>[*:1][H],Nc1ccccc1[*:1]
Nc1ccccc1N,Nc1ccccc1,o-phenylenediamine,phenylamine,N[*:1]>>[*:1][H],Nc1ccccc1[*:1]
Oc1ccccc1O,Oc1ccccc1N,catechol,2-aminophenol,O[*:1]>>N[*:1],Oc1ccccc1[*:1]
Oc1ccccc1O,Oc1ccccc1Cl,catechol,2-chlorophenol,O[*:1]>>Cl[*:1],Oc1ccccc1[*:1]
Oc1ccccc1O,Oc1ccccc1,catechol,phenol,O[*:1]>>[*:1][H],Oc1ccccc1[*:1]
Oc1ccccc1N,Oc1ccccc1Cl,2-aminophenol,2-chlorophenol,N[*:1]>>Cl[*:1],Oc1ccccc1[*:1]
Oc1ccccc1N,Oc1ccccc1,2-aminophenol,phenol,N[*:1]>>[*:1][H],Oc1ccccc1[*:1]
Oc1ccccc1Cl,Oc1ccccc1,2-chlorophenol,phenol,Cl[*:1]>>[*:1][H],Oc1ccccc1[*:1]
Oc1cc(O)ccc1O,Oc1ccccc1O,hydroxyquinol,catechol,O[*:1]>>[*:1][H],Oc1ccc(cc1O)[*:1]

Now I got MMP data I used the data to make edge of my network and testdata.smi is used to make node data.

Next code is example for communication between python and cytoscape.
At first, import CyRestClient and make connection. Default URL is localhost and port is 1234. But if user would like to use another IP and Port, user can modify from cytoscape.
Edit => Preferences => add => rest.url xxxxx, rest.port xxxx

I used python-igraph for making graph but py2cytoscape handle data generated by networkx, geohi and something.

import igraph
from py2cytoscape.data.cyrest_client import CyRestClient
import py2cytoscape

cy = CyRestClient()
cy.session.delete()
G = igraph.Graph()

with open('testdata.smi', 'r') as vertexis:
    for v in vertexis:
        G.add_vertex(v.split(' ')[0], molname=v.split(' ')[1])

with open("testmmp.txt", "r") as edges:
    for edge in edges:
        G.add_edge(edge.split(",")[0], edge.split(",")[1], transform=edge.split(",")[4])

After making network, go to next step.
network_create_from_igraph method receives data from igraph and send to cytoscape.
Then I set network layout ‘force-directed’.
Finally I set some view style and update the graph settings.

g_cy = cy.network.create_from_igraph(G)
cy.layout.apply(name='force-directed', network=g_cy)

mystyle = cy.style.create('mystyle')

defaults = {
    'NODE_HIGHT': 100,
    'NODE_WIDTH': 100,
    'NODE_FILL_COLOR': "#87CEFA",
    'NODE_BORDER_WIDTH': 5,
    'NODE_BORDER_PAINT': '#FFFFFF',
    'NODE_LABEL_FONT_SIZE': 14,
    'NODE_LABEL_COLOR': '#555555',
    'EDGE_TRANSPARENCY': 100,
    'EDGE_WIDTH': 20,
    'EDGE_STROKE_UNSELECTED_PAINT': '#FFFFFF',
    'NETWORK_BACKGROUND_PAINT': '#3B426F'
}

mystyle.update_defaults(defaults)
cy.style.apply(mystyle, network=g_cy)

View screenshots.
Before run the code, there is no network in cytoscape.

After run the code I could see MMP network without chemical structure.

Finally I set chemviz setting and run paint structure from menu, I could see structure on each node.

And also each node and edge has their own attribute that is set by igraph.
It interesting and useful because all work is done by using only python!

This example is one way python => cytoscape. But the library can send data in both directions.
There are nice documents written in Japanese such like a following URL.
https://qiita.com/keiono/items/ed796643107bd03aff64
Enjoy!

競技ドッジボールC級審判講習会、判定会に参加した件

 長男が競技ドッジボールのチームに入り約一年経ちました。
小学生のチームなので6年生が卒業し、また心機一転新しいチームを監督が作っている最中です。今まではもっぱらみているだけだったのですが、ルールを勉強してもいいかと思いC級審判の講習、試験を受けてきました。
 講習会は基本各地区で年一回のようで、今回は結構遠方での開催だったの朝7時から車を飛ばして会場に行ってきました。

 講習会〜判定会は1日がかりで、前半に座学でルールブックに沿ったルールの講習、筆記試験(100点満点中90点以上で合格)後半は、同日に開催されているジュニアのドッジボール交流会に実際に入って線審、副審、主審などをやります。
筆記は下記のルールブックに従い行われます。意外と複雑。
↓

 筆記はOXのシンプルな構成ですが久しぶりのテストで緊張しますね、、、結果は95点でセーフ。

実技講習はジュニアの試合といえど展開が早く、ライン踏んでないか、アウトになったのか、その他反則してないなど色々見るので大忙し。
応援席で見ている分には気楽ですが、いざ審判やろうと思うと、また視点が変わってきますね。
筆記実技は無事終わったのであとは協会に登録すると晴れてC級審判登録となります。

まさか自分が審判の講習受けるなんてなー

inter and intra reaction handling in RDKit #RDKit

RDKit can handle reaction. Enumeration of many molecules with template reaction and building blocks are useful for library generation.
Recently I have a question about how to handle intramolecular reactions with RDKit such as micro cyclization etc.
In the case of amidation reaction that is often used for drug synthesis SMARTS query is below.
‘[C:1][C:2](=[O:6])[O:3].[N:4][C:5]>>[C:1][C:2](=[O:6])[N:4][C:5]’
The query is inter molecular reaction in RDKit. A + B => C. So this query can not apply to intramolecular reaction such like a “OC(=O)CCCCN => C(=O)1CCCCN1”
In the RDKit, intramolecular reaction query is represented by including reactants in parentheses.
You can found in the document.
http://www.rdkit.org/docs/RDKit_Book.html

By the way how to distinguish between intra and inter reaction in my code?🤔

I propose simple solution, multiple SMILES is handled as one mol object and perform reaction and then separate it.
OK my english is difficult to understand, let’s go to code.

In the blog post, I wrote an example for amidation.

from rdkit import Chem
from rdkit.Chem import rdChemReactions
from rdkit.Chem import AllChem
from rdkit.Chem.Draw import IPythonConsole
from rdkit.Chem import Draw
IPythonConsole.ipython_useSVG=True

# define intra and inter molecular reaction
intra_rxn = AllChem.ReactionFromSmarts('([C:1][C:2](=[O:6])[O:3].[N:4][C:5])>>[C:1][C:2](=[O:6])[N:4][C:5]')
inter_rxn = AllChem.ReactionFromSmarts('[C:1][C:2](=[O:6])[O:3].[N:4][C:5]>>[C:1][C:2](=[O:6])[N:4][C:5]')

# basic acid / amine
acid = Chem.MolFromSmiles('CC(=O)O')
amine = Chem.MolFromSmiles('NC')
# intramolecular
aminoacid =  Chem.MolFromSmiles('N(C)CCC(O)CC(=O)O')

# two molecules in one mol object!
combmol = Chem.MolFromSmiles("CC(=O)O.N1CCC(C)1")

In the case of A + B => C is below

inter_rxn.RunReactants([acid, amine])[0][0]


In this case reaction seems good. By the way, in case of intra reaction is below.

# Intra reaction can not represent with inter molecular reactoin query
inter_rxn.RunReactant(aminoacid,0)[0][0]

But intra SMIRKS query works fine.

#inra moleclar query works fine
intra_rxn.RunReactant(aminoacid,0)[0][0]

Next run the reaction with one mol object in two molecules and intra molecular reaction object.

# paired molecular object also works but reactant two molecules is handled as one object
intra_rxn.RunReactant(combmol,0)[0][0]

Finally combined molecules are separated with Sep_mol function. The function convert molecule to SMILES and split by ‘.’ then transforms SMILES to molecules.

def sepMol(mol):
    smi_list = Chem.MolToSmiles(mol).split('.')
    mols = [ Chem.MolFromSmiles(smi) for smi in smi_list]
    return mols
ms = sepMol(combmol)
print(len(ms))
ms.append(intra_rxn.RunReactant(combmol,0)[0][0])
# out
  2

I tried the function only amidation and do not know whether the method is efficient or not.
Any comment or advice is appreciated.

All my code can check from following URL.

https://nbviewer.jupyter.org/github/iwatobipen/chemo_info/blob/master/rdkit_notebook/reaction_rdkit.ipynb
https://github.com/iwatobipen/chemo_info/tree/master/rdkit_notebook

Similar but not similar compounds….

Some months ago I wrote a blog post about biased ligand. It is still exciting area for me.

https://iwatobipen.wordpress.com/2018/02/10/rational-design-of-gpcr-biased-ligand/

BYW, the post is about Rexulti developed by Otuka Pharmaceutical.
And the drug approved 19th Jan. 2018 in Japan for schizophrenia. Just by looking, Rexulit has very similar structure to Abilify.
I interested the patent strategy and got some U.S. patent from google patent.

Rexulti
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4927015/
Abilify
https://en.wikipedia.org/wiki/Aripiprazole

U.S. patent number of Abilify is 5,006,528 filed in oct. 20, 1989 “CARBOSTYRIL DERIVERTIVES”.
https://patents.google.com/patent/US5006528A/en
Common structure is below.

R in the formula is limited substituted benzene.
In this patent, there are many in vivo data but no in vitro data.

Let’s move to next patent, rexulti.
I found following U.S. patent.
https://patents.google.com/patent/US9480686B2/en?oq=US+9.480%2c686+B2
The claimed structure is below.

In the figure, Q is calbostyril moiety. Main difference is monocyclic benzene and benzothiophene.
In this patent, inventor differentiate competitors patents from pharmaceutical or structural side.
Let’s see background art!
WO2004/026864A1 discloses that acarbostyril derivative represented by the general formula.

It seems too similar I think. But they differentiate from biological activity.
However, there is no description in WO2004/026864A150 that carbostyril derivatives described in the document have D receptor partial agonist activity,5-HT2 receptor antagonist activity, a receptor antagonist activity and serotonin uptake inhibitory activity together and have a wide treatment spectrum.
Hmm. OK CNS area is very complex. It will be difficulty point for drug discovery but also will be chance.

Next patent WO 2005/019215A1 disclose the following formula.
https://patents.google.com/patent/WO2005019215A1/en?oq=WO+2005%2f019215A1+

The claimed structure is also similar. But the patent does not disclose the structure of rexuti.
However, WO 2005/019215 A1 does not specifically disclose the compounds of the present invention

There are lots of patents about Abilify and Rexulti. In this industry patent strategy is very important because finding new drug is needed long time and efforts.

This post shows only very easy part these drugs but I feel very difficult and interesting point of CNS area drug discovery.

An article about strategy for extending half life in vivo

In compound optimization stage, “reduce lipophilicity” is mantra for chemists. High lipophilicity compound tend to be metabolically unstable, promiscuous and binding many off targets. To reduce lipophilicity is important strategy for drug discovery process but it is not always suitable strategy.
Researchers from Genentech report their useful experience in JMC lett.
You can find the article in ASAP, url is below.
https://pubs.acs.org/doi/10.1021/acsmedchemlett.8b00047

They analyzed in house in vivo PK data and lipophilicity and summarized that “Decreasing lipophilicity without addressing a metabolic soft-spot will often lead to both lower clearance and volume of distribution without extending half-life”.

You know, reducing lipohilicity is decreasing permeability it is not good for PK. And also Fig2 shows clear cut of their opinion.
In rat PK-IV, it found weak correlation between volume of distribution of unbound fraction (VDss-u) and LogD, clearance of unbound fraction(CLu) and LogD. It means that VDss-u and CLu highly correlates as same as LogD.
And in one component model, half-time is defined as following equation.
T1/2 = VDss,u/CL,u * ln2
From the equation and relation ship between VDss and CL, simple reduction of lipophilicity decreases not only CL,u but also VDss,u and no effect for T1/2!
In the article, the authors analyzed in-house data with MMPA and showed some transformations for improve half-life.
I think it worth to read the article.

MMPA is performed with Knime vernalis node. This tool kit is open source, it can use everybody without fee.
https://www.knime.com/book/vernalis-nodes-for-knime-trusted-extension
MedChem x Chemoinformatics = exciting! 😉

RDKit 2018.03.01 release! #rdkit

Dear RDKitter,
It’s good news that new version of rdkit is released!
You can find details in original repository.
https://github.com/rdkit
There are many improvement and bug fixes in the release. I appreciate developers work!
Recent version of RDKit has lots of 3D descriptors. PMI/NPR.
https://pubs.acs.org/doi/abs/10.1021/jp004042l?journalCode=jpcafh
And new version of rdkit has new function “ComputePrincipalAxesAndMoments” that computes principal axes and moments of inertia for a conformer.
I tried to use the function. 😉
At first I installed new version of rdkit via conda command.

iwatobipen$ conda install -c rdkit rdkit=018.03.1.0

Then wrote code.

from pprint import pprint
from rdkit import Chem
from rdkit import rdBase
from rdkit.Chem import Draw
from rdkit.Chem.Draw import IPythonConsole
from rdkit.Chem import AllChem
print(rdBase.rdkitVersion)
# 2018.03.1
mol=Chem.MolFromSmiles('O=C2C(Cc1ccc(cc1)C(C(=O)O)C)CCC2')
mol = Chem.AddHs(mol)
#generate 3d conf
AllChem.EmbedMolecule(mol, useExpTorsionAnglePrefs=True, useBasicKnowledge=True)
#calc PMI and NPR with default function
pmi1=AllChem.CalcPMI1(mol)
pmi2=AllChem.CalcPMI2(mol)
pmi3=AllChem.CalcPMI3(mol)
npr1 = AllChem.CalcNPR1(mol)
npr2 = AllChem.CalcNPR2(mol)
pprint([pmi1, pmi2, pmi3,"##",npr1, npr2])
[Out]
[484.9333356244745,
 2954.3752956989097,
 3158.6098121028335,
 '##',
 0.15352745811348945,
 0.9353403780291699]

# Next use new function
from rdkit.Chem import rdMolTransforms as rdmt
rdmt.ComputePrincipalAxesAndMoments(mol.GetConformer())
[Out]
(array([[ 0.98500524,  0.17113466,  0.02185434],
        [-0.1185898 ,  0.57961538,  0.8062149 ],
        [-0.1253042 ,  0.7967176 , -0.59121901]]),
 array([ 30.83932592, 203.65737152, 218.01591889]))

There are differences in both function. Why ??? I checked source code but I can not understand the reason.
Most difference is scale, but not equal.

print([484.9333356244745/30.83932592, 2954.3752956989097/203.65737152, 3158.6098121028335/218.01591889])
[Out]
[15.724511517613434, 14.506596415582127, 14.487977887965654]

RDKit 3D conformer generator shows good performance as same as commercial packages. It indicates 3D descriptors of RDKit is useful in Computer Aided Drug Discovery I think.

At last, I attached today’s snippet as PDF files.
test1