openbabel+GAMESSで計算できるようにする

Izu.R #0お疲れ様でした。いつもは22時前には寝るのだけど、2時半くらいまで起きてコード書いてた。たのしす。

1288429089 1288429091

今回が初めてで、Rらしく発表+LT的なほうがいいのか、ハッカソン的なもののほうがいいのか、わからなかったうえに初めての宿という不安はあったが、とりあえず集まってみて様子見しようという感じでしたが、蓋を開けてみれば、楽しい会になってくれて良かった。

次回もやる方向で考えているので、興味があれば。

今回のキーワード

Galaxy

pythonで書かれたワークフロー管理ツール。@bonohu さんに初期の導入のあたりを教えてもらいながら。みんな、ほとんどこれいじってたような。

ちなみにmacportsのpythonだと依存関係トラブリまくってうまく動かないので、潔く/usr/binのを使えという結論に落ち着いた。

これはもう少しいじる。次回にはなんか成果物をもっていきたいかな。

別トラックで流れていたセッションの情報交換

これはよい。あとで内容をきちんと把握する。あの、ユーザー会は一定の確率で面白い内容出てくるからよいです。面白さを面白いと感じるためには、面白さに対して感度をあげる努力を怠るとダメですな。

ジャパネットムスカ

きっかけは覚えてないが、MADの方向に行ってきた。

ついでに、一人ふぁぼ界に引きずり込まれてた。

Python

みんなのPythonは良書ですよね。

ProductName みんなのPython 改訂版
柴田 淳
ソフトバンククリエイティブ / ¥ 2,940 ()
在庫あり。

そういえば、前日の二次会でもPython利用者率を上げていこうという結論で落ち着いた(Pythonistaの中で)

書いたもの

openbabelで荒く構造立ち上げて、その後量子化学計算で精密化して、Mulliken Chargeとか楽に求めたいこと多いので、サクサク出来るようにラッパー欲しかったので書いてた。 ファイルの読み込みとかよくわからんバグが出ててはまったが、なんとか動くとこまでいった。

あとはもう少しちゃんと書いてクックブックにでもあげとく。

import openbabel as ob
from tempfile import mkstemp, mkdtemp
from os import removedirs, unlink, system, environ
import re
import os.path
import string
from random import choice

def randstr(n):
    "ランダムなファイル名を生成するため"
    return u''.join(choice('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') for i in xrange(n))

class Gamess(object):

    def __init__(self):
        self.tempdir = mkdtemp()
        self.gamess  = "/Users/kzfm/gamess/rungms"
        self.jobname = ''
        self.cwd    = os.getcwd()

    def calc(self, mol):
        self.jobname = randstr(6)
        obc = ob.OBConversion()
        obc.SetInFormat("gamout")

        gamin = self.write_file(mol)
        gamout = self.tempdir + "/" + self.jobname + ".out"
        os.chdir(self.tempdir)
        os.system("%s %s> %s  2> /dev/null" % (self.gamess, self.jobname, gamout))        

        # エラーが出たのでstringを渡したらなおった
        # TypeError: in method 'OBConversion_ReadFile', argument 3 of type 'std::string'
        new_mol = ob.OBMol()
        s = open(gamout).read()
        next = obc.ReadString(new_mol, s)

        os.chdir(self.cwd)
        unlink(gamin)
        unlink(gamout)
        return new_mol

    def header(self):
        h = """ $BASIS GBASIS=STO NGAUSS=3 $END
 $CONTRL SCFTYP=RHF RUNTYP=OPTIMIZE $END
 $STATPT OPTTOL=0.0001 NSTEP=20 $END"""

        return h

    def write_file(self,mol):
        obc = ob.OBConversion()
        obc.SetOutFormat("gamin")

        gamess_input_file = self.tempdir + "/" + self.jobname +".inp"
        gamess_input_str = obc.WriteString(mol)

        h = self.header()
        ng = gamess_input_str.replace(" $CONTRL COORD=CART UNITS=ANGS $END",h)

        with open(gamess_input_file, "w") as f:
            f.write(ng)
        return gamess_input_file

    def __del__(self):
        #print "remove " + self.tempdir
        removedirs(self.tempdir)

if __name__ == '__main__':

    g = Gamess()

    obc = ob.OBConversion()
    obc.SetInFormat("mol")

    mol = ob.OBMol()
    next = obc.ReadFile(mol,"test.mol")

    newmol = g.calc(mol)
    print [obatom.GetPartialCharge() for obatom in ob.OBMolAtomIter(newmol)]

GAMESSに関しては動く環境をもっているのが前提なので、そこをやりたい場合はこの本が良いです。

プレゼン用にGrowl通知するタイマーを作った

今日の朝、時計をもっていないことに気づいて。

import sys,os
import Growl
import threading

def timenotify(notify_string):
    image = Growl.Image.imageFromPath("/Users/kzfm/.tw_growl/kzfm.png")
    g = Growl.GrowlNotifier(applicationName='Timer', notifications=['Watch'])
    g.register()
    g.notify(
        noteType='Watch', 
        title="GrowlTimer", 
        description= notify_string,
        icon=image,
        sticky=False)

if __name__ == "__main__":
    t1 = threading.Timer(600, timenotify, args=["10分経過しました"])
    t2 = threading.Timer(1200, timenotify, args=["20分経過しました"])
    t3 = threading.Timer(1500, timenotify, args=["25分経過しました。そろそろまとめ"])
    t4 = threading.Timer(1800, timenotify, args=["30分経過しました。発表終了"])
    t1.start()
    t2.start()
    t3.start()
    t4.start()

やっつけスクリプト

旨い純米酒が味わえる店

近所の情報が載ってないと悲しい思いをするので、中見てからだな。

ProductName 旨い純米酒が味わえる店

エンターブレイン / ¥ 998 ()
近日発売 予約可

FMトランスミッターを購入

5,6年使ってたのが壊れたので、新しいのを買った。ちなみに初代iPod nanoを使っていて、バッテリーはないけど車内では電源があるのであまり困らない(電車内ではすぐ切れて使い物にならないが)。

色によって値段がかなり違うが色にはこだわらないので安いの購入。

満足。朝聴いてたHospital podcastのNu:Logic - Sundownがやたらと良かった。

おりがみプログラミング 3.14

apoL'を使ってinsertを定義する

-- 3.14

apoL' :: (b -> Maybe (a, Either b (List a))) -> b -> List a
apoL' f u = case f u of
              Nothing            -> Nil
              Just (x, Left v)   -> Cons x (apoL' f v)
              Just (x, Right xs) -> Cons x xs

insert3 = apoL' step u
    where 
      step Nil = Nothing
      step (Cons x xs) = if x < u then Just (x, Left xs) else Just (x, Right xs)

とやると

Not in scope: `u'

と言われるが理由がわからん。

ProductName 関数プログラミングの楽しみ

オーム社 / ¥ 4,410 ()
在庫あり。

疲れたので、今日はもう読むのをやめよう。

「Scheme手習い」と「起業のファイナンス」が届いた

Scheme手習いは、最後の方の章が気になる。あと娘か息子が読んでくれればいいなぁと思いつつ。

ProductName Scheme手習い
Daniel P. Friedman,Matthias Felleisen
オーム社 / ¥ 2,940 ()
在庫あり。

ProductName 起業のファイナンス ベンチャーにとって一番大切なこと
磯崎 哲也
日本実業出版社 / ¥ 2,310 ()
一時的に在庫切れですが、商品が入荷次第配送します。配送予定日がわかり次第Eメールにてお知らせします。商品の代金は発送時に請求いたします。

王様のカレー@富士宮

久しぶりの王様のカレー。富士、富士宮界隈ではピカイチだと思う。東京行ったらデリーとかうどんとかエチオピアとかあるけど、ここらへんはおいしいカレーがないから貴重だ。インドの方が経営しているんだけど接客がすごい良いですな。子連れにもやさしいし素晴らしい。

1288006782

チーズナンで、ほうれん草ベースのカレーとトマトベースのカレー

1288006776 1288006789

タンドリーチキンを頼んでみた。これまた美味い。

1288006795

帰りによこぜきでお酒買って、イオンでお買い物という鉄板コース。これにオプションで魚セイとかさの萬、ビオデリというオプションをつけると、だいたい事足りる。

第10回静岡Haskell読書会

先週末の読書会。切符遊びの章。

ProductName プログラミングHaskell
Graham Hutton
オーム社 / ¥ 2,940 ()
在庫あり。

団子うまかった。

1288005978

懇親会はセルフ串揚げの店。マジセルフ。ネタケースから串を持ってきて、衣つけて揚げる。

1288005975

なんていうか、この地域の居酒屋の名前を借りるなら、串電車でGoみたいなセルフ感満載だった。

来月、京都行きとかぶってるじゃんということにさっき気づいた。というわけで次回は初の欠席になりますな。

Real World Haskell 26章

ブルームフィルター

ProductName Real World Haskell―実戦で学ぶ関数型言語プログラミング
Bryan O'Sullivan,John Goerzen,Don Stewart
オライリージャパン / ¥ 3,990 ()
在庫あり。

3,4日かけて一応buildまではしたが、テストとか動かしてない。いまいち理解も追いついてなかったのが心残りだが、一通り読み終わったのでよしとしよう。それにしてもこの本はPerl的には「続・はじめてのPerl」くらいのレベル?「実用 Perlプログラミング 第2版」ではないでしょうなぁと。

みなさんこの先どうやって進んでいくんだろう?超気になるところ。

一周目は15章以降がほとんど理解できなかったけど、今回読んだら結構理解できたのでよかった。

1288005286

プログラミングHaskell読書会にでて、問題もきちんと解いたってのも良かったのかも。

ProductName プログラミングHaskell
Graham Hutton
オーム社 / ¥ 2,940 ()
在庫あり。

芳泉閣でゆったりしませんか?

熱海でだらだらと温泉につかりながら、コード書いたり書かなかったりという場を設けました。キーワードはchemoinformatics,bioinformatics,R,Python,Rubyで製薬企業でコード書いているヒト多めです。僕はFlaskいじるかopenbabelのMCS実装かなんかをする予定です(でもいい日本酒がゲットできたら飲んでるかも)

  • 2010.10.29-30
  • 芳泉閣@熱海
  • 一泊二日で10500くらい

まだ何人か分の空きがありますので興味があれば私にメールかtwitterでメッセージを下さい。金曜から土曜にかけてという日程です。

今のとこの参加者

  • kzfm
  • zgmfx20a
  • bohohu
  • garuby
  • shirahakase
  • hiro_h