2016-04-07 31 views
0

おそらく簡単な質問ですが、MultipleSeqAlignmentオブジェクトの単純なリストを作成するのに問題があります。Biopythonで複数シーケンスアライメントオブジェクトのリストを作成するにはどうすればいいですか?

from Bio import AlignIO 
import Bio.Align 

#Read multi-aligned fasta file 
alignment = AlignIO.read(sys.argv[1], "fasta") 

#some testing values 
first_POI = 10 #base position 
major = "a" #major allele 
minor = "g" #minor allele 

#create lists of sequence ids that are major or minor allele 
align_major = Bio.Align.MultipleSeqAlignment([]) 
align_minor = Bio.Align.MultipleSeqAlignment([]) 

for record in alignment: 
    if (record.seq[first_POI] == major): 
     #compile the sequences that have major allele 
     align_major = align_major + record 
    elif (record.seq[first_POI] == minor): 
     #compile sequences with minor allele 
     align_minor = align_minor + record  

私はこのエラーを取得する:

File "FindHaplotypes.py", line 53, in <module> 
    align_major=align_major+record 
    File "C:\Python34\lib\site-packages\Bio\Align\__init__.py", line 385, in __add__ 
    raise NotImplementedError 

は、だから私はやや混乱していますし、私はすでにBio.AlignからMultipleSeqAlignmentはおそらくBio.AlignIOのために保存されているオブジェクトと同じタイプではないことを想像することができます。彼らはどちらもMSAを扱っていたので、私は同じであると思った。 AlignIOオブジェクトについては、文字列のようにそれらを一緒に追加できますが、空のAlignIOオブジェクトを初期化して上記の方法で一緒に追加する方法がわかりません。以前は、最初のレコードを新しい変数に設定し、それに追加するforループを入力することによって、醜い方法でそれを実行しなければなりませんでした。

+0

注意Bio.AlignIOは、Bio.Align.MultipleSeqAlignmentオブジェクトを返します。 – peterjc

+0

空の 'AlignIO'オブジェクトを初期化して' AlignIO.read'オブジェクトを追加する方法はありますか?それとも正しい方法でやっているのですか?私はオリジナルのコードで、 'Bio.Align'、' Bio.Seq'、 'AlignIO'のために非常に多くの異なるライブラリをインポートしていたと思います。 – nchuang

答えて

0

エラーはかなり明確です:NotImplementedError__add__MultipleSeqAlignmentにBiopythonを実装するには、2つのオブジェクトがMultipleSeqAlignmentのインスタンスである必要があります。他のオブジェクトを含む追加は実装されていません。

あなたのMSAの方法append()を使用する必要があります。

for record in alignment: 
    if (record.seq[first_POI]==major): 
     #compile the sequences that have major allele 
     align_major.append(record) 
    elif (record.seq[first_POI]==minor): 
     #compile sequences with minor allele 
     align_minor.append(record) 

これは、同じalign_mayorAlphabetalign_minorと同じな長さで、SeqRecordするrecordを必要とします。

+0

それは働いた!ありがとうございました! 私はあなたの説明を完全に理解しているとは思わない。 '__add__'は' MultipleSeqAlignment'のメソッドではないことを理解していますが、 'MultipleSeqAlignment'オブジェクトに' AlignIO'オブジェクトをどのように追加できましたか?両方とも 'SeqRecord'を使用しているからでしょうか?私はソースコードを見てみましたが、これを理解するにはまだまだ多くの初心者です。 – nchuang

+0

'__add__'は' MultipleSeqAlignment'のメソッドです。 'MultipleSeqAlignment'オブジェクト(' AlignIO'を返すもののようなもの)だけを受け取り、 'SeqRecords'は受け付けません。 – xbello

+0

詳細については、ヘルプ(整列)を使用するか、オンラインでhttp://biopython.org/DIST/docs/api/Bio.Align.MultipleSeqAlignment-class.htmlを参照してください。 – peterjc

関連する問題