-
Notifications
You must be signed in to change notification settings - Fork 8
STARのSAMファイルパース時エラーの修正 (修正版) #17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: devel
Are you sure you want to change the base?
Conversation
|
ありがとうございます。ただ、このエラーはこれまで生じなかったので、、例えばこのエラーを起こすような共有できるテストデータなどあれば嬉しいですがいかがでしょうか? |
|
エラーを再現するためのサンプルデータを用意しました。 こちらのzipファイルに以下のファイルを同梱しています:
|
|
修正を最新のdevelブランチにリベースしました。 |
|
エラーが再現したのはbwaでアライメントしたうえで、出力されたSAMをfusionfusionが期待するSTARのSAM形式に調整した結果のファイル、とのことですが、fastqを直接STARでアライメントした結果のファイルをfusionfusionに入力していただけないでしょうか。 |
|
コメントありがとうございます。 こちらの件について、#17 (comment) で共有致しましたサンプルデータをこちらでSTARでマッピングしてみましたが、 STARのオプションの調整で意図したアライメントの組が得られるようになるか、また別のfusionでよりエラーを再現しやすいものがあるか等、もう少しこちらで調べてみたいと思います。 |
|
こちらの件について、改めて60件ほどinsertionを含むfusionの配列を準備して検証してみましたが、STARによって直接アライメントすることでエラーを再現できるサンプルは見つけられませんでした。 しかし、エラーが発生する箇所はfusionfusionがinsertionを検出した場合には必ず実行される処理で、サンプルが異なることで、あるいは将来的なSTARやfusionfusionの更新によってinsertionが検出可能になった場合、必ず未定義変数エラーを引き起こすことになるため、修正しておくのが望ましいではないかと考えています。 なお、このエラーは以下のようにPythonの静的解析ツール(pylint等)でも検出することができます: $ pip install pylint
$ pylint fusionfusion | grep -E 'E[[:digit:]]+'
...
fusionfusion/parseJunctionInfo.py:494:30: E0602: Undefined variable 'read' (undefined-variable)
fusionfusion/parseJunctionInfo.py:566:30: E0602: Undefined variable 'read' (undefined-variable)
...
$ |
#16 の修正版のプルリクエストになります。
基本的には #16 と同様に、insertionを持つ融合遺伝子を検出した場合に発生するエラーを修正する変更です。
前回の修正では、
read.seqという未定義変数の参照を避け、F[9](SAMファイルのSEQカラムに当たる)からinsertionの配列を抽出するようにしてエラーを修正しようしていました。しかし、前回の修正ではアライメントの並びによっては正しいアライメントからinsertion配列を抽出できない場合がありました。具体的には、同一QNAMEを持つプライマリ、サプリメンタリ、およびそれらのペアからなるアライメントの3つ組が、入力SAMファイル中で、
もしくは、
の順に並んでいる場合、ペアのアライメントから誤ってinsertion配列を抽出してしまう問題がありました。
このプルリクエストでは、insertion配列を必ずプライマリのアライメントから抽出するように変更することで、このアライメントの順序依存性による問題を解決します。