2017-03-14 17 views
0

私の問題は非常に単純ですが、私はそれを解決する方法を見つけることができません。 私は約100万の配列のリストを持っており、それぞれ配列決定アダプターにアライメントする必要があります。私はBiopythonのpairwise2ツールを使ってPythonでの位置合わせを行うことを考えています。すべてのアライメントスコアを収集し、数学を行い、数学に基づいてシーケンスを選択する必要があるため、このツールを使用したいと思います。下のコードを実行すると動作しますが、1回のアライメントが1回だけ実行されるため速度が遅くなります。マルチスレッド上でのPythonのマルチスレッド

def align_call(record, adapter): 
score = pairwise2.align.localms(record.seq, adapter.seq, 1, -3, -1, -0.99, one_alignment_only=1, score_only=1) 
print record.id + " " + record.seq + " " + adapter.id + " " + str(score) 
#results.append(line) 
return 

if __name__ == '__main__':  
fastaSeq = argv[1] 
threads = argv[2] 
fastaAdapt = argv[3] 
listSeq = [] 
adpt = list(SeqIO.parse(fastaAdapt, "fasta")) 
for record in SeqIO.parse(fastaSeq, "fasta"): 
    align_call(record, adpt[0]) 

したがって、私は、コードを変更し、コンピュータが持つスレッドの数に基づいて、並列ジョブのn個の数を送信することによって、プロセスをスピードアップするためにマルチスレッドまたはマルチプロセスを使用することを考えていました。スクリプトの動作

results = [] 

def align_call(record, adapter): 
score = pairwise2.align.localms(record.seq, adapter.seq, 1, -3, -1, -0.99, one_alignment_only=1, score_only=1) 
line = record.id + " " + record.seq + " " + adapter.id + " " + str(score) 
results.append(line) 
return results 

if __name__ == '__main__':  
fastaSeq = argv[1] 
threads = argv[2] 
fastaAdapt = argv[3] 

listSeq = [] 
adpt = list(SeqIO.parse(fastaAdapt, "fasta")) 
for record in SeqIO.parse(fastaSeq, "fasta"): 
    pool = Pool(processes=1) 
    result = pool.apply_async(align_call, args= (record, adpt[0])) 
    print result.get() 

が、私は毎回送付する必要があると私はそれらの多くを得るとき、私はコアとメモリ不足にどのように多くのシーケンスを調節することはできません。だから私はこのような何かを思いつきました。

どうすればいいですか?提案? これはかなり速いです 私はキューを実装することで、試してみましたが、それは

おかげ ルイージ

答えて

0

を動作しませんでしたあなたはvsearch(またはusearch)に見たいと思うかもしれません! (この場合は80%)、最大%のあなたができるようになります、標的配列の違い

--iddef 0であるが

https://github.com/torognes/vsearch

vsearch --usearch_global big.fasta -db adapter_seq.fasta --uc outputfile.txt --id 0.8 --iddef 0 --threads 6 

--idをされたマルチスレッドをサポートスコアリング方法0 =最短シーケンスに基づく同一性、2 =ストリップ端子ギャップ...)

次に、このoutputfile.txtを読み込み、アラインメントスコア/マッチ/ギャップ/アライメント長さのクエリ名を取得できます。各シーケンスの 目的のクエリー名を収集すると、これらを使用して元のfastaファイルから関連する配列を取り出すことができます

x%より大きい配列をアダプターに一致させたい場合は、--matched、 --ucの代わりに、--idのしきい値よりも上にマッチしたシーケンスのfastaファイルを提供します。

また、 - amoutは、seq名、アラインメントの長さ、アラインメントのシガーコード、およびクエリーシーケンスを含むsamファイルを提供します。

https://github.com/torognes/vsearch/releases/download/v2.7.1/vsearch_manual.pdfには、出力オプションとコマンドのフルセットがあります。

関連する問題