遺伝子のプロモータ配列を簡単に得るスクリプト
遺伝子のプロモータを得るだけのために、各種ゲノム配列を準備するのは面倒。NCBI のE-Utils利用すると、ゲノム配列の準備とかしなくても、プロモータ配列が得られます*1。
準備するもの
使い方
引数にプロモータを得たい遺伝子のNCBI Gene IDをカンマ区切りで列挙します。
以下の様にすると、3つのIgG (FCGR1A(2212), FCGR2B(2213),FCGR3A(2214))のプロモータを取得して表示します(転写開始点から上流250bp, 転写開始点下流50bpの計300bp)。
% ruby get_promoter_seqs.rb 2212,2213,2214
取る領域を変更したい場合はスクリプト内のPROMLEN(取る配列の長さ)とPROMINGENE(転写開始点から下流を何塩基取るか)を変更してください。
結果のサンプル
MultiFasta形式で、注釈にはNCBI Gene ID, Symbol名, 取得した配列のゲノム上の場所が書かれます。
% ruby get_promoter_seqs.rb 2212,2213,2214 >2212|FCGR2A| from >ref|NC_000001.9|NC_000001:159741593-159741892 Homo sapiens chromosome 1, reference assembly, complete sequence CCGCGCCCGGCCGACCAGGAATTATCTTAAACAGAAAAAGAATACTCTAAGGAGGGGTATACCGGCCAGC AGAACAGTAACCCCTCCCCGGGGTTTTCACAAGGACACAAGCTGGTGTGTAATAGACTTATCTATAAAGC AGACTCAACTCCTAACTGGAATTGTTCCTGATTGGTTAGCAGAAACAGAATTGAGGACTGACGACAGCTG CACAAGAAGATGAAACCATTTCCTTCCTCTTTTCTAAGCTTGTCTCTTAAAACCCACTGGACGTTGGCAC AGTGCTGGGATGACTATGGA >2213|FCGR2B| from >ref|NC_000001.9|NC_000001:159899313-159899612 Homo sapiens chromosome 1, reference assembly, complete sequence CTGAGCTGAGTTTTGGTGACCATTTCCCTCTTTCTCCCAGAGGCCCAGGCCAGCTGTGGCCTCAGAGGAA GAAGAAGGGAGTTGTTTCCCTAGTTTCTAAAATTTCTGTGAATTTGAACATGGGCTACACCAGATTTATT CTGGGAAGCTCTGAATCTTCTAGGAGGGAAAGACTGAGAGGAAAGAGGGTGGAAAGGGAGGAGCCTGTGA TAAAACAGAACATTTCTTTTTCACTTCCCCTTTCAGACTCCAGAATTTGTTTGCCCTCTAGGGTAGAATC CGCCAAGCTTTGAGAGAAGG >2214|FCGR3A| from >ref|NC_000001.9|NC_000001:159786392-159786691 Homo sapiens chromosome 1, reference assembly, complete sequence TTTACTCCCTCAAAGGTCTGTGGCTGAGCATCTGAGGACACACACAGAATCTGCCAGAGTGTGCCCTCAG CCATCCCAGGATGCTTGCCCCATCTCCTGGATTTGGATCCACCCAGCACCAAGAATGGGACAGTGAGACC CTGGGGATGAGATTCAAGGTGGGAGGAGCATTCTCTGAGGGCTTCCTTCATTTCACCTCAGAACTTGTCA CTCTCCTGCCTCGCCCAGACCCATCTATCTCCAGCTGAGGCCCTGCCTGCACACAGAAAGTGGTCCTTTC AAATCTTCAGACCACTAGCA
スクリプト
get_promoter_seqs.rb
#!/usr/bin/env ruby require 'rubygems' require 'xmlsimple' require 'open-uri' require 'pp' PROMLEN = 300 # length of promoter PROMINGENE = 50 # argument is a list of Entrez gene ids separated by commas gids = ARGV.shift # read gene information summary uri = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?" uri += "db=gene&id=#{gids}&retmode=xml" #uri = "gid_780_5982.xml" xmldata = open(uri).read genesinfo = XmlSimple.xml_in(xmldata) # parse gene information xml genesinfo["DocSum"].each do |ginfo| chrstart = nil chrstop = nil chraccver = nil geneid = ginfo["Id"][0].to_i genename = nil begin ginfo["Item"].each do |item| if item["Name"] == "Name" genename = item["content"] elsif item["Name"] == "GenomicInfo" chrinfo = item["Item"][0]["Item"] chrinfo.each do |info| if info["Name"] == "ChrStart" chrstart = info["content"].to_i elsif info["Name"] == "ChrStop" chrstop = info["content"].to_i elsif info["Name"] == "ChrAccVer" chraccver = info["content"] end end end end rescue STDERR.puts "Read Error at #{geneid}" next end promstart = nil promstop = nil strand = nil if chrstart < chrstop promstart = chrstart + PROMINGENE - PROMLEN promstop = chrstart + PROMINGENE - 1 strand = 1 else promstart = chrstart - PROMINGENE + PROMLEN promstop = chrstart - PROMINGENE + 1 strand = 2 end query = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?" query += "db=genome&id=#{chraccver}&seq_start=#{promstart}" query += "&seq_stop=#{promstop}&strand=1" # "#{strand}" query += "&rettype=fasta" # get its promoter sequence fp = open(query) promseq = fp.read().split("\n") fp.close # display the promoter sequence promseq[0] = ">" + geneid.to_s + "|" + genename.to_s + "| from " + promseq[0] puts promseq.join("\n") end
*1:TogoWS使いたいんだけど、部分配列の抽出に対応していないので断念対応しているそうです。コメント参照。