mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* benchmark/bm_so_fasta.rb: added.
* benchmark/bm_so_k_nucleotide.rb: added. * benchmark/bm_so_reverse_complement.rb: added. * benchmark/make_fasta_output.rb: added. * benchmark/prepare_so_k_nucleotide.rb: added. * benchmark/prepare_so_reverse_complement.rb: added. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13550 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
d6c43c45ea
commit
fbebfdf23d
7 changed files with 196 additions and 0 deletions
14
ChangeLog
14
ChangeLog
|
@ -1,3 +1,17 @@
|
|||
Fri Sep 28 22:33:47 2007 Koichi Sasada <ko1@atdot.net>
|
||||
|
||||
* benchmark/bm_so_fasta.rb: added.
|
||||
|
||||
* benchmark/bm_so_k_nucleotide.rb: added.
|
||||
|
||||
* benchmark/bm_so_reverse_complement.rb: added.
|
||||
|
||||
* benchmark/make_fasta_output.rb: added.
|
||||
|
||||
* benchmark/prepare_so_k_nucleotide.rb: added.
|
||||
|
||||
* benchmark/prepare_so_reverse_complement.rb: added.
|
||||
|
||||
Fri Sep 28 19:14:51 2007 Koichi Sasada <ko1@atdot.net>
|
||||
|
||||
* benchmark/driver.rb: fix notations.
|
||||
|
|
81
benchmark/bm_so_fasta.rb
Normal file
81
benchmark/bm_so_fasta.rb
Normal file
|
@ -0,0 +1,81 @@
|
|||
# The Computer Language Shootout
|
||||
# http://shootout.alioth.debian.org/
|
||||
# Contributed by Sokolov Yura
|
||||
|
||||
$last = 42.0
|
||||
def gen_random (max,im=139968,ia=3877,ic=29573)
|
||||
(max * ($last = ($last * ia + ic) % im)) / im
|
||||
end
|
||||
|
||||
alu =
|
||||
"GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG"+
|
||||
"GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA"+
|
||||
"CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT"+
|
||||
"ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA"+
|
||||
"GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG"+
|
||||
"AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC"+
|
||||
"AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"
|
||||
|
||||
iub = [
|
||||
["a", 0.27],
|
||||
["c", 0.12],
|
||||
["g", 0.12],
|
||||
["t", 0.27],
|
||||
|
||||
["B", 0.02],
|
||||
["D", 0.02],
|
||||
["H", 0.02],
|
||||
["K", 0.02],
|
||||
["M", 0.02],
|
||||
["N", 0.02],
|
||||
["R", 0.02],
|
||||
["S", 0.02],
|
||||
["V", 0.02],
|
||||
["W", 0.02],
|
||||
["Y", 0.02],
|
||||
]
|
||||
homosapiens = [
|
||||
["a", 0.3029549426680],
|
||||
["c", 0.1979883004921],
|
||||
["g", 0.1975473066391],
|
||||
["t", 0.3015094502008],
|
||||
]
|
||||
|
||||
def make_repeat_fasta(id, desc, src, n)
|
||||
puts ">#{id} #{desc}"
|
||||
v = nil
|
||||
width = 60
|
||||
l = src.length
|
||||
s = src * ((n / l) + 1)
|
||||
s.slice!(n, l)
|
||||
puts(s.scan(/.{1,#{width}}/).join("\n"))
|
||||
end
|
||||
|
||||
def make_random_fasta(id, desc, table, n)
|
||||
puts ">#{id} #{desc}"
|
||||
rand, v = nil,nil
|
||||
width = 60
|
||||
chunk = 1 * width
|
||||
prob = 0.0
|
||||
table.each{|v| v[1]= (prob += v[1])}
|
||||
for i in 1..(n/width)
|
||||
puts((1..width).collect{
|
||||
rand = gen_random(1.0)
|
||||
table.find{|v| v[1]>rand}[0]
|
||||
}.join)
|
||||
end
|
||||
if n%width != 0
|
||||
puts((1..(n%width)).collect{
|
||||
rand = gen_random(1.0)
|
||||
table.find{|v| v[1]>rand}[0]
|
||||
}.join)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
n = (ARGV[0] or 250_000).to_i
|
||||
|
||||
make_repeat_fasta('ONE', 'Homo sapiens alu', alu, n*2)
|
||||
make_random_fasta('TWO', 'IUB ambiguity codes', iub, n*3)
|
||||
make_random_fasta('THREE', 'Homo sapiens frequency', homosapiens, n*5)
|
||||
|
48
benchmark/bm_so_k_nucleotide.rb
Normal file
48
benchmark/bm_so_k_nucleotide.rb
Normal file
|
@ -0,0 +1,48 @@
|
|||
# The Computer Language Shootout
|
||||
# http://shootout.alioth.debian.org
|
||||
#
|
||||
# contributed by jose fco. gonzalez
|
||||
# modified by Sokolov Yura
|
||||
|
||||
seq = String.new
|
||||
|
||||
def frecuency( seq,length )
|
||||
n, table = seq.length - length + 1, Hash.new(0)
|
||||
f, i = nil, nil
|
||||
(0 ... length).each do |f|
|
||||
(f ... n).step(length) do |i|
|
||||
table[seq[i,length]] += 1
|
||||
end
|
||||
end
|
||||
[n,table]
|
||||
|
||||
end
|
||||
|
||||
def sort_by_freq( seq,length )
|
||||
n,table = frecuency( seq,length )
|
||||
a, b, v = nil, nil, nil
|
||||
table.sort{|a,b| b[1] <=> a[1]}.each do |v|
|
||||
puts "%s %.3f" % [v[0].upcase,((v[1]*100).to_f/n)]
|
||||
end
|
||||
puts
|
||||
end
|
||||
|
||||
def find_seq( seq,s )
|
||||
n,table = frecuency( seq,s.length )
|
||||
puts "#{table[s].to_s}\t#{s.upcase}"
|
||||
end
|
||||
|
||||
input = open(File.join(File.dirname($0), 'fasta.output.100000'), 'rb')
|
||||
|
||||
line = input.gets while line !~ /^>THREE/
|
||||
line = input.gets
|
||||
|
||||
while (line !~ /^>/) & line do
|
||||
seq << line.chomp
|
||||
line = input.gets
|
||||
end
|
||||
|
||||
[1,2].each {|i| sort_by_freq( seq,i ) }
|
||||
|
||||
%w(ggt ggta ggtatt ggtattttaatt ggtattttaatttatagt).each{|s| find_seq( seq,s) }
|
||||
|
30
benchmark/bm_so_reverse_complement.rb
Normal file
30
benchmark/bm_so_reverse_complement.rb
Normal file
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/ruby
|
||||
# The Great Computer Language Shootout
|
||||
# http://shootout.alioth.debian.org/
|
||||
#
|
||||
# Contributed by Peter Bjarke Olsen
|
||||
# Modified by Doug King
|
||||
|
||||
seq=Array.new
|
||||
|
||||
def revcomp(seq)
|
||||
seq.reverse!.tr!('wsatugcyrkmbdhvnATUGCYRKMBDHVN','WSTAACGRYMKVHDBNTAACGRYMKVHDBN')
|
||||
stringlen=seq.length
|
||||
0.step(stringlen-1,60) {|x| print seq.slice(x,60) , "\n"}
|
||||
end
|
||||
|
||||
input = open(File.join(File.dirname($0), 'fasta.output.2500000'), 'rb')
|
||||
|
||||
while input.gets
|
||||
if $_ =~ />/
|
||||
if seq.length != 0
|
||||
revcomp(seq.join)
|
||||
seq=Array.new
|
||||
end
|
||||
puts $_
|
||||
else
|
||||
$_.sub(/\n/,'')
|
||||
seq.push $_
|
||||
end
|
||||
end
|
||||
revcomp(seq.join)
|
19
benchmark/make_fasta_output.rb
Normal file
19
benchmark/make_fasta_output.rb
Normal file
|
@ -0,0 +1,19 @@
|
|||
# prepare 'fasta.output'
|
||||
|
||||
def prepare_fasta_output n
|
||||
filebase = File.join(File.dirname($0), 'fasta.output')
|
||||
script = File.join(File.dirname($0), 'bm_so_fasta.rb')
|
||||
file = "#{filebase}.#{n}"
|
||||
|
||||
unless FileTest.exist?(file)
|
||||
STDERR.puts "preparing #{file}"
|
||||
|
||||
open(file, 'w'){|f|
|
||||
ARGV[0] = n
|
||||
$stdout = f
|
||||
load script
|
||||
$stdout = STDOUT
|
||||
}
|
||||
end
|
||||
end
|
||||
|
2
benchmark/prepare_so_k_nucleotide.rb
Normal file
2
benchmark/prepare_so_k_nucleotide.rb
Normal file
|
@ -0,0 +1,2 @@
|
|||
require File.join(File.dirname(__FILE__), 'make_fasta_output')
|
||||
prepare_fasta_output(100_000)
|
2
benchmark/prepare_so_reverse_complement.rb
Normal file
2
benchmark/prepare_so_reverse_complement.rb
Normal file
|
@ -0,0 +1,2 @@
|
|||
require File.join(File.dirname(__FILE__), 'make_fasta_output')
|
||||
prepare_fasta_output(2_500_000)
|
Loading…
Reference in a new issue