はじめに
やや今更感は否めませんが、Magicodeリリース祝いということで書くことにしました笑
かなりニッチなソフトなので、紹介したところで皆さんが使うことはないと思います。しかし「記事内でプログラムを編集・実行できる」という面白い機能があるため、実験的にコードを紹介することにしました。ご容赦ください。
Viola-SVとは?
Viola-SVはDNAの構造多型(Structural Variant; SV)を解析するためのPythonパッケージです。
最近は次世代シーケンサという遺伝子配列を端から端まで読めるマシーンがあり、個体が有する配列異常をゲノム横断的に検出できる可能性を秘めています。DNAの変異にはさまざまなカテゴリーがありますが、このパッケージでは50bp以上の大きめな変異およびフィラデルフィア染色体の代表されるような転座、総称して構造多型(SV)を主に扱っています。
SVのデータはVCF(Variant Call Format)ファイルという形式に記録されることが主流です。しかしVCFファイルは人間にとっては可読性が高いのですが、プログラム処理上はかなり厄介なファイル形式でした。
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT mouse01_N mouse01_T
chr1 100000 M1 N <DEL> . MinSomaticScore IMPRECISE;SVTYPE=DEL;SVLEN=-100000;END=200000;CIPOS=-51,52;CIEND=-51,52;SOMATIC;SOMATICSCORE=10 PR:SR 21,0:10,0 43,4:15,3
chr1 200000 MD1 N <DEL> . MinSomaticScore IMPRECISE;SVTYPE=DEL;SVLEN=-100000;END=300000;CIPOS=-13,13;CIEND=-51,52;SOMATIC;SOMATICSCORE=10 PR:SR 21,0:10,0 43,4:15,3
chr1 300000 ML1 N <DEL> . MinSomaticScore IMPRECISE;SVTYPE=DEL;SVLEN=-100000;END=400000;CIPOS=-51,52;CIEND=-51,52;SOMATIC;SOMATICSCORE=10 PR:SR 21,0:10,0 43,4:15,3
chr1 400000 MG1 N <DEL> . MinSomaticScore IMPRECISE;SVTYPE=DEL;SVLEN=-100000;END=500000;CIPOS=-51,52;CIEND=-51,52;SOMATIC;SOMATICSCORE=10 PR:SR 21,0:10,0 43,4:15,3
chr2 100000 MDL1 N <DUP:TANDEM> . MinSomaticScore IMPRECISE;SVTYPE=DUP;SVLEN=100000;END=200000;CIPOS=-30,30;CIEND=-31,31;SOMATIC;SOMATICSCORE=10 PR:SR 21,0:10,0 43,4:15,3
chr2 100500 MDG1 N <DUP:TANDEM> . MinSomaticScore IMPRECISE;SVTYPE=DUP;SVLEN=100000;END=200500;CIPOS=-51,52;CIEND=-51,52;SOMATIC;SOMATICSCORE=10 PR:SR 21,0:10,0 43,4:15,3
chr2 200000 MLG1 N <DUP:TANDEM> . MinSomaticScore IMPRECISE;SVTYPE=DUP;SVLEN=100000;END=300000;CIPOS=-51,52;CIEND=-51,52;SOMATIC;SOMATICSCORE=10 PR:SR 21,0:10,0 43,4:15,3
chr3 100000 MDLG1o N N]chr4:200000] . MinSomaticScore IMPRECISE;SVTYPE=BND;CIPOS=-100,100;MATEID=MDLG1h;BND_DEPTH=49;MATE_BND_DEPTH=35;SOMATIC;SOMATICSCORE=12 PR 30,1 68,9
chr4 200000 MDLG1h N N]chr3:100000] . MinSomaticScore IMPRECISE;SVTYPE=BND;CIPOS=-100,100;MATEID=MDLG1o;BND_DEPTH=49;MATE_BND_DEPTH=35;SOMATIC;SOMATICSCORE=12 PR 30,1 68,9
なぜ厄介なのかを語れば長くなるのですが、一番は「1セルに複数の値が格納されている列がある」という部分です。VCFは上例の通りTABで仕切られたテーブルデータなのですが、行と列を指定しても値が一意に決まらないことがあります。例えば1行目のINFO列を見ると、
IMPRECISE;SVTYPE=DEL;SVLEN=-100000;END=200000;CIPOS=-51,52;CIEND=-51,52;SOMATIC;SOMATICSCORE=10
となっていますね。この中の値に到達するには、さらなる処理が必要です。なんて複雑な構造!
Viola-SVの最初のモチベーションは、VCFファイルの再構成でした。論文化するために色々な機能を載せてはいますが、本質は「VCFの再構成」につきます。