Perlを使った塩基配列のチェックについて

このQ&Aのポイント
  • Perlを使用して、塩基配列のチェックを行うプログラムを作成したいです。具体的な手順や必要な点について教えてください。
  • 塩基配列データと制限酵素データをファイルで用意し、指定した制限酵素による切断位置と場所を表示するプログラムを作成したいです。
  • プログラムの実行時には、塩基配列ファイル名、制限酵素データファイル名、制限酵素名を指定します。正規表現を使用して制限酵素名を認識させる方法についても教えてください。
回答を見る
  • ベストアンサー

どのようなプログラムをつくればいいでしょうか?

Perlをもちいて塩基配列のチェックをおこないたいんですがどのようなプログラムを作成したらいいのかがわからないので教えてください。 以下の塩基配列のデータファイル(1)があります 塩基配列の説明文~ 5’-ATATAGATAGATCATAGATCCCCGATAGCCCAGTAAATGATGACCCGATGATGACCCAGTACCCGGATGAGTAGTGATAGTACCCGTGTGTAAGTGATAGATAGTCCCATGTAGACAAAGATCCAGTAACGCGCGTTTTT-3’ これに対し、制限酵素A、B、Cを含んだデータファイル(2)があります。 ファイル形式は以下のような内容です。 制限酵素の説明文~ <1>A(制限酵素名) <2> <3> <4> 5’-A^TAGT-3’(認識部位) このデータファイル(1)に対し、(2)のファイル内の制限酵素A(認識部位5’-A^TAGT-3’)で切断する位置の数、位置の場所を表す番号(塩基配列の中の何番目か)を表示させるプログラムを作りたいんですがどのようにしたらいいんでしょうか? プログラムを実行する際には以下の手順を踏んでおこないます。 ./プログラムファイル名.pl 塩基配列ファイル名.fasta 制限酵素データファイル.txt 制限酵素名前(ここではAとする) これらをおこなうために必要な点として自分が考えているのは、(2)のファイル内の制限酵素名Aを認識させるために正規表現で<1>を認識させるようにして、実行時に指定する制限酵素名がなければそこでプログラムを終了させ、逆に存在する場合は、塩基配列を認識する部位である<4> 5’-A^TAGT-3’(認識部位)の部分を読み込んで(1)のファイル内の塩基配列認識部位の数と位置を表示させるプログラムを組み込めばいいのではないかと考えているのですが、<1>A(制限酵素名)があった場合に<4> 5’-A^TAGT-3’(認識部位)を認識させるためにはどうしたらいいんでしょうか?

noname#184617
noname#184617
  • Perl
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • SE-1
  • ベストアンサー率57% (26/45)
回答No.3

Perl はかなり柔軟な書き方ができますが、この2行を書いておくと少し厳しい文法を強要されるようになります。数十行の使い捨てスクリプトを書くならばこの2行は要りませんが、将来的に数百、数千行のプログラムを書く可能性があるなら今からこの2行を入れても警告が出ないようなプログラムを書くようにするのが良いと思います。詳しくはGoogleあたりで調べてください。

その他の回答 (2)

  • SE-1
  • ベストアンサー率57% (26/45)
回答No.2

# ご質問の意味を一部取り違えていました。すみません。 # それと、認識部位の位置取得が少しずれていたので直しました。 # 以下、修正版です。配列と制限酵素データはテストする都合上改変してあります。 # データファイル内が半角英数字のみであればJPerlでも同じ結果が出ると思います。 # EcoRI,3,[24;116;145] # ↑実行結果:EcoRI切断部位が[24;116;145]に3箇所の意。 use strict; use warnings; my $seq = "ATATAGATAGATCATAGATCCCCGAATTCCCAGTAAATGATGACCCGATGATGACCCGTCGACAGTACCCGGATGAGTAGTGATAGTACCCGTGTGTAAGTGATAGATAGTCCCAGAATTCTGTAGACAAAGATCCAGTAACGCGAATTCGCGTTTTT"; my $re_name = 'EcoRI'; # 制限酵素のデータを全て文字列に読み込みます。 $/ = undef; my $re_data = <DATA>; # それぞれの制限酵素のデータに切り分けます。 my @res = $re_data =~ /^(<1>.+?<4>.+?)$/smg; foreach my $re (@res) { # 制限酵素名 my ($ename) = $re =~ /<1>\s(\w+)/; # 目的の制限酵素でなければ処理せず次へ。 next unless $ename eq $re_name; # 認識部位 my ($cut) = $re =~ /<4>\s5\'-(.+?)-3\'/; $cut =~ s/\^//; my $cut_len = length($cut); # 処理用に配列をコピーします。 my $tmp_seq = $seq; my $tmp_pos = 0; my @m_pos; while(1) { # 認識部位が見つかった場所 my $pos = index($tmp_seq,$cut); unless ($pos<0) { $tmp_pos = $tmp_pos+$pos+1; push @m_pos, $tmp_pos; # 配列から認識部位までを切り取ります。 $tmp_seq = substr $tmp_seq,$pos+$cut_len; $tmp_pos = $tmp_pos+$cut_len-1; }else{ last; } } my $pstr = join ';', @m_pos; my $mcnt = $#m_pos+1; print $ename.",".$mcnt.",[".$pstr."]\n"; } #system("PAUSE"); __DATA__ <1> EcoRI <2> <3> <4> 5'-G^AATTC-3' <1> HindIII <2> <3> <4> 5'-A^AGCTT-3' <1> SalI <2> <3> <4> 5'-G^TCGAC-3'

noname#184617
質問者

お礼

わざわざ回答ありがとうございます。 早速試してみます。 またできなかった場合に補足の欄に記載させていただきますので宜しくお願いいたします。

noname#184617
質問者

補足

use strict; use warnings; はどんな意味があるんでしょうか?

  • SE-1
  • ベストアンサー率57% (26/45)
回答No.1

# もっと上手い方法があろうかと思いますが、 # ご参考まで。 use strict; use warnings; my $seq = "5'-ATATAGATAGATCATAGATCCCCGAATTCCCAGTAAATGATGACCCGATGATGACCCGTCGACAGTACCCGGATGAGTAGTGATAGTACCCGTGTGTAAGTGATAGATAGTCCCAGAATTCTGTAGACAAAGATCCAGTAACGCGAATTCGCGTTTTT-3'"; $/ = undef; my $re_data = <DATA>; my @res = $re_data =~ /^(<1>.+?<4>.+?)$/smg; foreach my $re (@res) { my ($ename) = $re =~ /<1>(.+?)$/m; chomp $ename; my ($cut) = $re =~ /<4> 5\'-(.+?)-3\'/; $cut =~ s/\^//; my $cut_len = length($cut); my $tmp_seq = $seq; my $tmp_pos = 0; my @m_pos; while(1) { my $pos = index($tmp_seq,$cut); unless ($pos<0) { $tmp_pos += $pos; push @m_pos, $tmp_pos; $tmp_seq = substr $tmp_seq,$pos+$cut_len; }else{ last; } } if ($#m_pos>-1) { my $pstr = join ';', @m_pos; my $mcnt = $#m_pos+1; print $ename.",".$mcnt.",[".$pstr."]\n"; } } #system("PAUSE"); __DATA__ <1>EcoRI <2> <3> <4> 5'-G^AATTC-3' <1>HindIII <2> <3> <4> 5'-A^AGCTT-3' <1>SalI <2> <3> <4> 5'-G^TCGAC-3'

noname#184617
質問者

お礼

すいません、もしよろしければ実行結果をお見せいただけませんでしょうか? 宜しくお願いします。 またJPerlでプログラムを実行しようと考えた場合、なにか大きな変化は出ますでしょうか?

noname#184617
質問者

補足

$/ = undef; my $re_data = <DATA>; の意味は何でしょうか? また<DATA>には質問欄に記載した各種の制限酵素が入ったファイルを代入すればよろしいんでしょうか?

関連するQ&A

  • TOPOベクタ-に入っているcDNAを制限酵素配列付加プライマーを使っ

    TOPOベクタ-に入っているcDNAを制限酵素配列付加プライマーを使ってPCRで増やし、発現ベクターに入れたいのですが、色々と問題がありそうです。可能でしょうか? 遺伝子工学の初心者です。 2つ質問があります。どちらか一方だけでも良いので、回答よろしくお願いします。 (1)TOPOベクタ-に入っているcDNAを制限酵素で切り出すのではなく制限酵素配列付加プライマーを使ってPCRで増やし、発現ベクターに入れたいのですが、付加する制限酵素の配列がTOPOベクターに存在してしまっています。この場合、非特異産物がでてきてしまうでしょうか?このような手法は一般的ではないのでしょうか?ちなみに、コザック配列をつけるため(制限酵素配列-コザック配列-5´端相補的配列)のプライマーで増やそうとしています。 (2)制限酵素の切断効率を上げるために制限酵素認識配列の両端に数塩基余分な配列を入れるとプロトコルにかいてあり、プライマーの5´端は入れようと思うのですが、制限酵素認識配列の3´側にも入れる必要があるでしょうか? 切断効率は制限酵素認識配列の両端にある塩基の数が重要で、どの塩基かはそれほど重要ではないとか、そんなことはないですか?

  • 制限酵素について

    制限酵素は塩基配列をどのようにして認識しているのですか?教えてください。あと、参考にできる文献などがありましたら教えてください。よろしくお願いします。

  • 制限酵素切断後のゲノムの大きさは?

    実験初心者です.初歩的な質問で申し訳ありません. ゲノムを制限酵素で切断した後の大きさは,どのくらいの大きさになるのでしょうか? 何塩基を認識して切るかにより認識部位の頻度が変わることはわかります. 単なる確率の計算のように, 「6塩基認識酵素であれば,6つ並ぶ塩基が4つのATGCから一致する確率,」 として,「4の6乗=4000」より計算すればよいのでしょうか? 教えてください.

  • 条件に一致した塩基配列を含むデータを抽出するには?

    条件に一致した塩基配列を含むデータの抽出方法を教えて下さい。(perl) 下記のように、塩基配列(ACTTC…)と、その上に配列名(>id_000)が 数百万配列ならんだデータがあります。 (fasta形式) >id_001 CGCTGCCGGGGAACGGTCTGGTCAGGGATCTATCATGAGG CGTGGGAATTTCGCCCCGGACAGTGAGGATTTGGGTGCTT CCTTTGCTGTGATTTTAAGTTACCTCACCAAA >id_002 GCAGTCCTTCGCCTGAAGTGCAGGACGGGTAGTAACGTAG AGAGATCTTGCTTAGTTACTACTGC >id_003  ・  ・ この中から、指定した塩基配列(例:TGAAGTGCA)を含むデータを、 下記のように別名のファイルに、配列名と塩基配列を一緒に出力したいのですが、 どのようにすればよいかが、分からず困っています。 >id_002 GCAGTCCTTCGCCTGAAGTGCAGGACGGGTAGTAACGTAG AGAGATCTTGCTTAGTTACTACTGC >id_015 ATGTGAAGTGCAGTGTGTTAGT  ・  ・ 「BioPerl」のSeqIOオブジェクト?を使用することで、 何とか同じ結果を出せるようにはなったのですが、 実際に、どのような処理がされているのかは、理解できていません。 今後、色々なパターンに活用できるよう、perlだけの記述では どのような記述をすればよいのか、理解したいのです。 perl初心者なので、より基本的な記述だと助かります。 よろしくお願い致します。

    • ベストアンサー
    • Perl
  • 12/7第三回駿台全国模試について

    12/7にあった第三回駿台全国模試について 生物の第2問に遺伝子操作の問題がでたのですが SAU3Aという制限酵素は認識配列は ⚫︎GATC⚫︎ ⚫︎CATG⚫︎ (⚫︎はどの塩基でも構わない) と問題文にあるのですが SAU3Aは GATC CTAG という塩基配列を認識するとサイトにあります http://catalog.takara-bio.co.jp/product/basic_info.php?unitid=U100003739 解答ではおそらく下の配列を⚫︎CTAG⚫︎として扱っているようなのですが これは問題の誤植でしょうか? またはこれであっているんでしょうか? それとも生物受けた方、試験中にこの誤植について説明などありましたか? 二本鎖で下と上の塩基が同じってありえるんでしょうか…

  • 大腸菌の転写に関する正誤問題

    1.ρ因子に非依存性の転写種決部位は単純二回繰り返し配列を保持している 2.プロモーター配列の大部分はαサブユニットによって認識される 3.RNA鎖伸長途中でRNAポリメラーゼホロ酵素からβサブユニットが遊離する 4.RNAポリメラーゼコア酵素はα、β、β’、ωのサブユニットからなっている 5.プロモーター配列には転写開始点上流の25番目付近の塩基を中心に6塩基の共通配列が存在する 自分なりの答えでは 1.○、2.αではなくσ(^70) ,3.βではなくσ 4.○ 5.? 5番は何を言っているのかよくわかりません、共通配列をもつTATAボックスと-35領域の中間点の事を指しているのでしょうか? よろしくお願いします

  • プログラム 課題

    14.1と16の組み合わせと、32と33.9の組み合わせを分けて取り出す プログラムを作りたいのですが、正直どんなプログラムになるのかわかりません。 (予想としては、ifを使ったりするのではないかと思うのですが。) 以下の配列がファイルのデータです 32 33.9 14.1 14.1 16 16 16 14.1 33.9

  • PCR決定法について

    PCRでは、増幅したいDNAの端の塩基配列がわかれば、それと相補的なプライマーを作るとよいというふうに授業で習いました。 では、既知配列の外側領域の塩基配列をPCRを用いて決定したい時にはどうしたらよいのでしょうか? ーーーー「ーー」●○○○○○○●「ーー」ーーーー この「--」の塩基配列です。 ○の塩基配列は●をプライマーとすれば決定できるのはわかるのですが、その外側の塩基配列の場合のことです。制限酵素とかで切ったりしてやるのかなぁとも思うのですが、よくわかりません。。

  • 制限酵素 BamHIについて

    最近生化学の実験で制限酵素BamHIを用いて、その性質や働きを電気泳動で調べました。 制限酵素により切られたバンドを確認してみると、一つは1353bp付近に、もう一つは310bp付近に見ることができました。一応実験的には成功なんだと思いますが、後日生化学辞典で調べてみるとBamHIのような6塩基配列を認識するクラスII酵素は、DNAを平均約4000塩基対毎に切断すると書いてありました。 これは実験結果とはだいぶかけ離れているのですが、BamHIが例外的にこのような性質を示すのでしょうか? 宜しくお願いしますm(__)m

  • 遺伝子の正誤問題 part2

    お世話様です、添削お願いします。 【制限酵素に関して】 1.平滑末端を与える断片同士は塩基対号できないが、DNAリガーゼの基質になることはできる 2.制限酵素は5’末端にリン酸基、3’末端に水酸基を残すようにDNAを断片を切断する 3.DNAリガーゼは塩基対合した断片同士を共有結合で連結する 4.同じ付着末端を持つ断片同士は塩基対合できる 5.EcoRIはヘテロ二量体ではたらく 6.制限酵素の認識配列は一般にパリンドローム構造をとる 7.制限酵素によるDNAの切断断片の付着末端には同一の制限酵素でなくとも塩基対合できるものがある 8.DNA断片が平滑末端同士の場合は異なる制限酵素で切断されていても連結することが可能である 9.制限酵素の生産菌は自身のDNAが自分の生産する制限酵素で切断されない構造を持っている 自己回答 1.○? 2.○ 3.○ 4.○ 5.X:ホモ二量体 6.○ 7.○  8.○ 9.○:メチル化

専門家に質問してみよう