タイトルの通りです。
Fastaは、塩基配列やアミノ酸配列の形式です。リファレンスゲノムの表現によく利用されます。FastaはSamtoolsやSeqkitなどのコマンドラインツールを利用してインデックスファイル .fai
を作成することができます。インデックスファイルの中身はとても単純で、参照配列の名前、長さ、オフセット、ラインベース、改行を含む各行のバイト数、などが規定されています。
昨日、自作のライブラリruby-htslib をWindowsに対応させました。
その際、ほとんどのテストは通ったのですが、Faidxのテストが通りませんでした。
その原因は、WindowsではデフォルトでGitが自動的に改行コードを変換する仕組みがあって、Fastaの改行コードがLF
からCRLF
に変換されたため、オフセットや改行を含むバイト数が、変換後のFastaファイルと不整合になっていたというのが原因でした。WindowsとMac/Linux間の改行コードの自動変換はいろいろなケースで問題になるようで、QiitaにはどのようにGitを設定を設定するべきかについて考察した記事もあります。
改行コードの長さが異なるので、同じFastaファイルであっても、① Mac/Linux上で samtools faidx
した場合と、② Windows上で samtools faidex
した場合は内容の異なるファイルが作成されます。逆に言うと、Mac/Linux上で作成したインデックスファイルは、GitでチェックアウトされたWindows上のFASTAファイルには適応できません。
この問題を解決する方法として、毎回新しくインデックスファイルを作り直すということも考えましたが、それよりもむしろFASTAファイルの改行コードを決め打ちした方がよいだろうと考えました。実は .gitattribute
というファイルを作成すると、ファイルの拡張子単位で改行コードを指定することができます。
* text=auto
*.fa text eol=lf
このようにしておけば、拡張子 .fa
のファイルの改行コードは LF
に強制されます。便利ですね。これで、Fastaの含まれたGitリポジトリをチェックアウトしてもインデックスとの不整合を起こさなくなりました。
この記事は以上です。