Quantum chemistry calculation with python.

In this weekend, I played molecular design toolkit.
https://bionano.autodesk.com/MolecularDesignToolkit/
This is very nice open source tool kit for pythonist I think. At first, I tried to install the TK in OSx directly, but I had some trouble to run the code. So I installed my linux virtual PC. It is not so difficult to install molecular design TK in linux environment.
At frist mdt can install by using pip.

pip install moldesign

Easy!
And next, I installed some packages by using conda.
I recommend to install pyscf ( quantum chemistry package for python ) by using conda. Because I had some troubles when I build pyscf from source code.

conda install -c moldesign nbmolviz 
conda install -c conda-forge widgetsnbextension
conda install -c pyqc pyscf 
conda install -c omnia openmm
conda install -c omnia pdbfixer 

And also I installed openbabel by apt-get.

apt-get install openbabel python-openbabel

OK, Now ready!
Let’s start coding.
Today, I tried to simple example.
Read string, generate 3D, calculate orbitals and visualize it.
Following code is running on jupyter notebook. 😉

import moldesign as mdt
import moldesign.units as u
import pybel
# read molecule from smiles and generate 3D conf and save sdf.
mol = pybel.readstring( "smi","C1=NC2=C(N1)C(=NC=N2)N" )
mol.addh()
mol.make3D()
mol.write("sdf",'adenine.sdf')

Read and draw

mol=mdt.read("adenine.sdf")
mol.draw()


Draw function draws 2D and 3D structure.

Next, calculate energy and draw molecular orbital.

mol.set_energy_model( mdt.models.RHF, basis='sto-3g')
prop = mol.calculate()
print( prop.keys() )
print( "Energy: ", prop['potential_energy'])
['positions', 'mulliken', 'wfn', 'potential_energy', 'dipole_moment']
('Energy: ', <Quantity(-12479.0741253, 'eV')>)
mol.draw_orbitals()


Works fine. draw_orbitals() can draw some orbitals like HOMO, LUMO, and any other energy level orbitals.

Finally, minimize it.
And draw orbitals.

mintraj = mol.minimize()

Starting geometry optimization: built-in gradient descent
Starting geometry optimization: SciPy/bfgs with analytical gradients
Step 2/20, ΔE=-1.858e-01 eV, RMS ∇E=4.161e-01, max ∇E=1.305e+00 eV / ang
Step 4/20, ΔE=-2.445e-01 eV, RMS ∇E=1.818e-01, max ∇E=6.069e-01 eV / ang
Step 6/20, ΔE=-2.589e-01 eV, RMS ∇E=1.359e-01, max ∇E=4.905e-01 eV / ang
Step 8/20, ΔE=-2.620e-01 eV, RMS ∇E=1.250e-01, max ∇E=5.032e-01 eV / ang
Step 10/20, ΔE=-2.660e-01 eV, RMS ∇E=1.264e-01, max ∇E=3.384e-01 eV / ang
Step 12/20, ΔE=-2.751e-01 eV, RMS ∇E=1.125e-01, max ∇E=2.966e-01 eV / ang
Step 14/20, ΔE=-2.915e-01 eV, RMS ∇E=2.315e-01, max ∇E=5.801e-01 eV / ang
Step 16/20, ΔE=-2.942e-01 eV, RMS ∇E=2.492e-01, max ∇E=6.325e-01 eV / ang
Step 18/20, ΔE=-2.978e-01 eV, RMS ∇E=2.712e-01, max ∇E=7.771e-01 eV / ang
Step 20/20, ΔE=-3.016e-01 eV, RMS ∇E=2.639e-01, max ∇E=7.127e-01 eV / ang
Warning: Maximum number of iterations has been exceeded.
         Current function value: -12479.375700
         Iterations: 19
         Function evaluations: 26
         Gradient evaluations: 26
Reduced energy from -12479.0741253 eV to -12479.3757001 eV
mintraj.draw_orbitals()


mintraj object has each steps energy state. And it can be shown as movie.

Also lots of functions are implemented in molecular design tool kit.
I will play with package more and more. 😉
Today’s code was pushed my repository.
https://github.com/iwatobipen/moldesigntk/blob/master/test1.ipynb

家族で旅行に行った話

どちらかというと自分が出不精な性格であまり遠出しないタイプなのですが、この連休は家族や、子供の友達の家族と小田原の方に遊びに行きました。
昨日は小田原のわんぱくランドhttp://www.city.odawara.kanagawa.jp/public-i/park/wanpaku/というところに行ってきました。
駐車料金だけで入場料とかはかからないし、色々遊具があるので、アクティブに遊びたい家族にはいい場所かもと思います。
ただ、昨日は天気良すぎて暑いこと暑いこと、、、一緒になって遊んでるとこっちがやられてしまいそうになってきた。
暑い中ずーっと走り回って遊んで、ホテル行ってからもずっとハイテンションで花火して一瞬で寝てしまったようだ。
今日は今日で朝からプール行って公園行ってずーっと遊び通し。子供が成長して体力がついてくるのと逆にこっちはどんどん体力がなくなってくるのでしんどいしんどい。
負けないように走り込みと筋トレしないと。。。。

Mishima.syk #10に参加した話

 今回で記念すべき10回目となるmishisima.sykに参加してきました。
 私は、機械学習+luigiを使ったパイプラインの話をしました。何かしら参考になる情報が提供できていればいいのですが。
今回は機械学習ネタ、バイオ系のネタ、パイプライン系のネタ、国内創薬業界のアイドルの話、さらにはAI(愛?)の話、美味しいお好み焼きの話など多岐にわたる話題がありました。
発表者の皆様、参加者の皆様、感じの皆様本当にありがとうございました。とても楽しい時間を過ごすことができました。
 今回もいつもながら発表者のプレゼンのクオリティが高くビビりました。面白くかつ本質をビシッと表現できるってのはやっぱり問題の本質をしっかり見据えてかつ、それを理解してないとできないことだと思います。
 私は普段シーケンスとかNGSみたいな仕事に関わることないので、MinIONなど初めて知りました。 あのサイズで、、、技術、科学の進歩ってすごいですね、、、
 有機合成でもFlow ChemistryやLab on chipなどありますし、集積化高速化は研究のキーになるところですかね。
勉強会中も懇親会でも色々と良いお話を聞くことができました。
まだまだ勉強全然たらん。明日から頑張ろうと思います。
また次回も開催したいですね。

Platfrom-as-a-Service for Deep Learning.

Yesterday, I enjoyed mishima.syk #10. I uploaded my presentation and code to mishimasyk repo.
I introduced briefly about a PaaS for DL named ‘Floyd’. I think the service is interesting because I can run DL on cloud with GPU!

So, I describe very simple example to start DL with “FLOYD” 😉
At first, Make account from the site.
Next, install command line tools. Just type pip install -U floyd-cli!

# Install floyd-cli
$ pip install -U floyd-cli

Third step, login the floyd.

# from terminal
$ floyd login

Then web browser will launch and the page provides authentication token. Copy and paste it.
Ready to start!
Let’s play with floyd.
Fist example is iris dataset classification using sklearn.

import numpy as np
from sklearn.datasets import load_iris
from sklearn.svm import SVC
from sklearn.cross_validation import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
dataset = load_iris()
X = dataset.data
y = dataset.target

trainx, testx, trainy, testy = train_test_split( X, y, test_size=0.2,random_state = 123 )

svc = SVC( kernel='rbf' )
svc.fit( trainx, trainy )

rfc = RandomForestClassifier()
rfc.fit( trainx, trainy )

predsvc = svc.predict( testx )
predrf = rfc.predict( testx )

print( classification_report(testy, predsvc ))

Use floyd run command to start the code after initialize the project.

$ mkdir test_pj
$ cd test_pj
$ floyd init
$ floyd run 'python svc_rf_test.py'
Creating project run. Total upload size: 168.9KiB
Syncing code ...
[================================] 174656/174656 - 00:00:02
Done
RUN ID                  NAME                     VERSION
----------------------  ---------------------  ---------
xxxxxxxx  iwatobipen/test_pj:10         10

To view logs enter:
    floyd logs xxxxxxxx

I could check the status via web browser.

Next run the DNN classification model.
It is very very simple example. not so deeeeeeeeeeeep.

mport numpy as np
from sklearn.datasets import load_iris
from sklearn.cross_validation import train_test_split
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.utils import np_utils

dataset = load_iris()
X = dataset.data

xdim = 4
y = dataset.target
y = np_utils.to_categorical( y, 3 )
trainx, testx, trainy, testy = train_test_split( X, y, test_size=0.2,random_state = 123 )

model = Sequential()
model.add( Dense( 16, input_dim = xdim  ) )
model.add( Activation( 'relu' ))
model.add( Dense( 3 ))
model.add( Activation( 'softmax' ))
model.compile( loss = 'categorical_crossentropy',
               optimizer = 'rmsprop',
               metrics = ['accuracy'])

hist = model.fit( trainx, trainy, epochs = 50, batch_size = 1 )
classes = model.predict( testx, batch_size = 1 )

print( [ np.argmax(i) for i in classes ] )
print( [ np.argmax(i) for i in testy ] )
loss, acc = model.evaluate( testx, testy )

print( "loss, acc ={0},{1}".format( loss, acc ))

To run the code in the same manner.

iwatobipen$ floyd run 'python dnn_test.py'
Creating project run. Total upload size: 168.9KiB
Syncing code ...
[================================] 174653/174653 - 00:00:02
Done
RUN ID                  NAME                     VERSION
----------------------  ---------------------  ---------
xxxxxxx  iwatobipen/test_pj:11         11

To view logs enter:
    floyd logs xxxxxxx

Check the log from web site.

2017-07-09 01:51:37,703 INFO - Preparing to run TaskInstance <TaskInstance: iwatobipen/test_pj:11 (id: Uus7cp996732cBWdgt3nz3) (checksum: 144078ab50a63ea6276efee221669d13) (last update: 2017-07-09 01:51:37.694913) [queued]>
2017-07-09 01:51:37,723 INFO - Starting attempt 1 at 2017-07-09 01:51:37.708707
2017-07-09 01:51:38,378 INFO - adding pip install -r floyd_requirements
2017-07-09 01:51:38,394 INFO - Executing command in container: stdbuf -o0 sh command.sh
2017-07-09 01:51:38,394 INFO - Pulling Docker image: floydhub/tensorflow:1.1.0-py3_aws.4
2017-07-09 01:51:39,652 INFO - Starting container...
2017-07-09 01:51:39,849 INFO -
################################################################################

2017-07-09 01:51:39,849 INFO - Run Output:
2017-07-09 01:51:40,317 INFO - Requirement already satisfied: Pillow in /usr/local/lib/python3.5/site-packages (from -r floyd_requirements.txt (line 1))
2017-07-09 01:51:40,320 INFO - Requirement already satisfied: olefile in /usr/local/lib/python3.5/site-packages (from Pillow->-r floyd_requirements.txt (line 1))
2017-07-09 01:51:43,354 INFO - Epoch 1/50
2017-07-09 01:51:43,460 INFO - 1/120 [..............................] - ETA: 8s - loss: 0.8263 - acc: 0.0000e+00
 58/120 [=============>................] - ETA: 0s - loss: 1.5267 - acc: 0.6552
115/120 [===========================>..] - ETA: 0s - loss: 1.2341 - acc: 0.6522
120/120 [==============================] - 0s - loss: 1.2133 - acc: 0.6583
2017-07-09 01:51:43,461 INFO - Epoch 2/50
..........................
 57/120 [=============>................] - ETA: 0s - loss: 0.1135 - acc: 0.9649
115/120 [===========================>..] - ETA: 0s - loss: 0.1242 - acc: 0.9739
120/120 [==============================] - 0s - loss: 0.1270 - acc: 0.9750
2017-07-09 01:51:48,660 INFO - Epoch 50/50
2017-07-09 01:51:48,799 INFO - 1/120 [..............................] - ETA: 0s - loss: 0.0256 - acc: 1.0000
 57/120 [=============>................] - ETA: 0s - loss: 0.0911 - acc: 0.9825
114/120 [===========================>..] - ETA: 0s - loss: 0.1146 - acc: 0.9737
120/120 [==============================] - 0s - loss: 0.1161 - acc: 0.9750
2017-07-09 01:51:48,799 INFO - [1, 2, 2, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 2, 2, 2, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 2, 2, 0]
2017-07-09 01:51:48,800 INFO - [1, 2, 2, 1, 0, 2, 1, 0, 0, 1, 2, 0, 1, 2, 2, 2, 0, 0, 1, 0, 0, 2, 0, 2, 0, 0, 0, 2, 2, 0]
2017-07-09 01:51:48,800 INFO - 30/30 [==============================] - 0s
2017-07-09 01:51:48,800 INFO - loss, acc =0.23778462409973145,0.8666666746139526

The following software packages (in addition to many other common libraries) are available in all the environments:
h5py, iPython, Jupyter, matplotlib, numpy, OpenCV, Pandas, Pillow, scikit-learn, scipy, sklearn

Also, user can install additional packages from pypi. ( Not anaconda … 😦 ) To install that, put file named ‘floyd_requirements.txt’ in the project folder.

In summary, Floyd is very interesting service. Easy to set up DL environment and use GPU on cloud.
I want to support anaconda in FLOYD, because I want to use chemoinformatics package like RDKit, Openbabel etc…

ドッジボール

子供の頃ドッジボールよくやりました。最近長男がはまっている。公式ルールがあるなんて知らなかった。
https://www.dodgeball.or.jp/%E3%83%89%E3%83%83%E3%82%B8%E3%83%9C%E3%83%BC%E3%83%AB%E3%81%A8%E3%81%AF/

そして長男くんは最近地区のドッチボールチームに入りました。本格的にやってるチームはアタッカーとか、カッターとか役割もあり当てればいいって雰囲気ではなくしっかりと戦略があるので面白いし、迫力がある。練習しっかりやって成長したら負けそう。

さて、
今日は地域の小学校で予選を勝ち抜いてきたチームの大会でした。
体育館はむちゃくちゃ暑かったが、みんな元気に最後までやってました。朝8時から16時くらいまで、、さらにそのあと公園で遊びだし、、、。

体力すでに負けてそうだ。いや、負けてる、、、

まあ、好きなこと見つけて熱中してくれるといいなと思う。
しかし子供はHPが0になるまで全力で遊ぶなぁ。