Google Summer of Code 2018 参加記 (2) プロジェクト終了編

Google Summer of Code 2018 参加記 (1) 応募編 - n-yoshikawa’s blogの続きです。

先日、GSoCのプロジェクトが無事終了したことを認定するメールが来ました。

というわけで参加記の続きを書きます。

プロジェクトの内容

私が参加したのは Open Chemistry という団体の Open Babel というソフトのプロジェクトです。 Open Babel は分子情報のフォーマットを変換する際に使われるソフトです。分子情報のフォーマットにはSMILESのように文字列で原子間の結合のみを表すもののほかに、MOLやSDFのように結合情報に加えて各原子の3次元座標の情報を含むものがあります。SMILESには3次元座標情報が含まれていないので、SMILESをSDFに変換するためには結合情報から3次元構造を予測する必要があります。

Open Babel には原子を1つずつつないで3次元構造を予測する機能が実装されていましたが、このプロジェクトでは複数の原子を一気につなぐ仕組みに変更することで3次元構造の予測を高速化しました。A.Andronico, et al. の論文の方針に従って入力分子を rotatable bond で切断し、回転する結合を含まない分子の断片を fragment としました。事前に Crystallography Open Database などに含まれる分子から fragment の3次元構造データベースを作成しておき、入力分子の fragment がデータベースに含まれているものと一致した場合は fragment 中の原子の座標をデータベースに基づいて設定します。既知の fragment に含まれる原子は fragment 内で相対位置が保たれるようにしながら同時につなぎ、既知の fragment に含まれない原子は以前のように1つずつつなぐことで以前よりも高速な3次元構造予測を実現しました。この方法で求めた構造は MMFF94 で最適化を行った後で出力されます。

なお、この方法ではシス-トランスが間違っている構造が出力される場合があります。間違っている場合は Distance Geometry という RDKit に実装されているのと同じ手法を使って3次元構造を予測するのですが、Open Babel では実装できていません。現在できている部分のデバッグを手伝ったのですがまだ完全ではないので、GSoC終了後もこの部分について実装を手伝おうと思っています。

その他の詳細については Final Evaluationの資料を見てください。

期間中の出来事

Community Bonding (4/14〜5/15)

最初の1ヶ月はコミュニティと交流する期間ということで、開発者MLにプロジェクト紹介のメールを投げたりSlackに入れてもらったりしました。 コードを眺めたりもしましたが全く進捗はありませんでした。

First Evaluation (6/15) まで

コーディング期間が始まったらメンターから連絡が来て、メンターが昔書いたがまだうまく動いていないコードを渡されました。MLに質問を投げるなどしているうちに動くようになりましたが、一部の分子でNaNが出るバグがありつらくなっていたらFirst Evaluationになりました。Evaluationでは How often do you interact with your mentor(s)? とか What is your favorite part of participating in GSoC? とかの軽い質問を聞かれるだけでした。メンターがこの人はpassだと答えたらpassする仕組みのようです。

Second Evaluation (7/14) まで

1週間くらいかけてNaNの原因を探していましたが、1つの分子の中に同じ fragment があるときの扱いが間違っていたことが判明し解決しました。 その後は精度向上の測定、フラグメントデータベース作成方法の変更、検索の高速化、torsion angle を使うことで精度が向上するかの調査、メモリリークの調査などをしました。Second Evaluation は First Evaluation と同じような感じでした。

Final Evaluation (8/15) まで

幾何異性体をうまく扱えないと3次元構造予測が失敗してしまうので、最後の期間はDistance Geometry のデバッグを行いました。メンターに渡された動かないコードを論文に従って書きなおすなどしてバグの要因を探しました。結局シス-トランスが正しくなっているかを判定する関数が間違っていたことが分かり、その部分を書き直したらなんか動くっぽい感じになりました。ただ現在の実装はあまりにも雑なので一から書き直すことになるかもしれません。

Final Evaluation では GSoC 期間中にやったことをまとめた文章を提出する必要があるのでGoogle Docsに書いてコメントをもらい、コメントに従って修正し……を繰り返してOKが出た文章を提出しました。

8/23にFinal Evaluationの結果が出て、冒頭に書いたように無事合格しました。

全体を通して

週40時間コードを書くという設定でしたが、実際のところはちょっと書く→詰まる→メンターに相談する→半日後に返事が来る→またちょっと書く→詰まる……という感じだったので実際に40時間は書いていないと思います……。研究室の教授にこっちを優先していいと言われたこともあって、授業期間でしたがGSoCとの両立は全く問題ありませんでした。参加資格のある人は来年応募するといいと思います。

得られたもの

  • $6000
  • OSSの開発経験
  • ケモインフォマティクス研究者の知り合い
  • GSoC Tシャツ(そのうち届くらしい)
  • Googleインターンかフルタイムのポジションに1回紹介してもらう権利
  • サンフランシスコに行ったときにGoogleのオフィスを見学する権利