Skip to content

Instantly share code, notes, and snippets.

@kojix2
Last active September 25, 2022 09:27
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kojix2/a51177fbad722a4c0d13b6801d39f1cd to your computer and use it in GitHub Desktop.
Save kojix2/a51177fbad722a4c0d13b6801d39f1cd to your computer and use it in GitHub Desktop.
ruby-htslib最終報告

Ruby-htslib - 次世代シーケンサーのデータをRubyで操作する 最終報告

2021-03-15 kojix2

Github - https://github.com/kojix2/ruby-htslib

Slack - https://sciruby.slack.com

概要

   次世代のシーケンサーに関連する生命情報分野のファイルフォーマット SAM、BAM、VCF、BCF 等を Ruby から利用できるようにするために、これらのファイルを読み書きするC言語で書かれたライブラリ htslib の Ruby バインディングを作成する。

実装

  • 低レベルの API

    • HTS::FFI モジュールに約 320 個の htslib のメソッドを追加した。
    • 構造体のビットフィールドの読み取りに対応した。(中間報告から進展)
    • 関数形式マクロや、define によるエイリアスを一部実装した。
    • 低レベルの API を用いて Bam ファイルを読み込む example を作成した。
  • 高レベルの API

    • hts-python, hts-nim に準拠した API の実装を目指す。
    • Bam クラスを query メソッドを含めて実装した。(中間報告から進展)
    • 高レベルの API を用いて Bam ファイルを読み込む example を作成した。
    • Fai クラスの実装を開始し、いくつかのメソッドを追加した。(中間報告から進展)
    • VCF クラスの実装を開始し、いくつかのメソッドを追加した。(中間報告から進展)

今後と課題

  • 低レベルの API

    • 構造体におけるビットフィールドのサポート
    • 関数形式マクロ・定数等への対応
      • 必用な部分だけ Ruby で再実装する。
    • c2ffi 等のツールによるバインディングの自動生成またはバリデーションを検討している。
      • c2ffi は完璧ではないことがわかった。今後方針が変わる可能性もある。(中間報告から進展)
  • 高レベルの API

    • hts-nim と同じことができる程度の機能の提供を目指す。
    • 作者の HTS ファイルフォーマットに対する理解度は十分でなく、完成度が高まるまで年単位の時間がかかる。
    • 短期的には、VCF クラスにメソッドを追加して、Bam/VCF で一通りのメソッドが揃うようにする。

やらないことリスト

  • 処理速度を改善する
  • ruby-htslib の "内側" で BioRuby の API との統合を行う
  • Ruby-FFI から Fiddle へ移行する

資料

Qiita - 次世代シーケンサーのデータをRubyで操作するライブラリを作りたい話 ruby-htslib

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment