配列からすべてのメチオニン残基を最後まで抽出しようとしています。
以下の順序で:
MFEIEEHMKDSQVEYIIGLHNIPLLNATISVKCTGFQRTMNMQGCANKFMQRHYENPLTG
元のアミノ酸配列:
atgtttgaaatcgaagaacatatgaaggattcacaggtggaatacataattggccttcataatatcccattattgaatgcaactatttcagtgaagtgcacaggatttcaaagaactatgaatatgcaaggttgtgctaataaatttatgcaaagacattatgagaatcccctgacgggg
シーケンスから M 残基を最後まで抽出し、次の結果を得たいと考えています。
- MFEIEEHMKDSQVEYIIGLHNIPLLNATISVKCTGFQRTMNMQGCANKFMQRHYENPLTG
- MKDSQVEYIIGLHNIPLLNATISVKCTGFQRTMNMQGCANKFMQRHYENPLTG
- MNMQGCANKFMQRHYENPLTG
- MQGCANKFMQRHYENPLTG
- MQRHYENPLTG
私が取り組んでいるデータでは、配列にもっと多くの「M」残基がある場合があります。
私が現在持っているスクリプトは以下のとおりです。このスクリプトは、まずゲノム データを翻訳してから、アミノ酸配列を処理します。これにより、最初の 2 つの抽出が行われますが、それ以上は行われません。
2 回目のスキャン後に同じスキャン方法を繰り返そうとしましたが (以下のスクリプトのコメント部分を参照)、エラーが発生します。
private method scan called for #<Array:0x7f80884c84b0> No Method Error
ある種のループを作成する必要があることを理解しており、試してみましたが、すべて無駄でした。私もマッチングを試みましたが、できませんでした.重複する文字を単一のマッチング方法で一致させることはできないと思いますが、やはり私は初心者です...
だからここに私が使用しているスクリプトがあります:
#!/usr/bin/env ruby
require "bio"
def extract_open_reading_frames(input)
file_output = File.new("./output.aa", "w")
input.each_entry do |entry|
i = 1
entry.naseq.translate(1).scan(/M\w*/i) do |orf1|
file_output.puts ">#{entry.definition.to_s} 5\'3\' frame 1:#{i}\n#{orf1}"
i = i + 1
orf1.scan(/.(M\w*)/i) do |orf2|
file_output.puts ">#{entry.definition.to_s} 5\'3\' frame 1:#{i}\n#{orf2}"
i = i + 1
# orf2.scan(/.(M\w*)/i) do |orf3|
# file_output.puts ">#{entry.definition.to_s} 5\'3\' frame 1:#{i}\n#{orf3}"
# i = i + 1
# end
end
end
end
file_output.close
end
biofastafile = Bio::FlatFile.new(Bio::FastaFormat, ARGF)
extract_open_reading_frames(biofastafile)
これは、Ruby にある非常に長いスクリプトの一部であるため、スクリプトは Ruby にある必要があります。