egor 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/Manifest.txt +32 -0
- data/PostInstall.txt +5 -0
- data/README.rdoc +88 -0
- data/Rakefile +32 -0
- data/bin/egor +10 -0
- data/config/website.yml +2 -0
- data/config/website.yml.sample +2 -0
- data/egor.gemspec +53 -0
- data/lib/egor/cli.rb +1063 -0
- data/lib/egor.rb +6 -0
- data/lib/enumerable_extensions.rb +11 -0
- data/lib/environment.rb +58 -0
- data/lib/environment_feature.rb +14 -0
- data/lib/math_extensions.rb +7 -0
- data/lib/narray_extensions.rb +21 -0
- data/lib/nmatrix_extensions.rb +24 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/script/txt2html +71 -0
- data/test/test_egor.rb +11 -0
- data/test/test_egor_cli.rb +8 -0
- data/test/test_enumerable_extensions.rb +16 -0
- data/test/test_environment_feature.rb +11 -0
- data/test/test_helper.rb +2 -0
- data/test/test_nmatrix_extensions.rb +16 -0
- data/website/index.html +78 -0
- data/website/index.txt +48 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +159 -0
- data/website/template.html.erb +50 -0
- metadata +154 -0
data/lib/egor.rb
ADDED
data/lib/environment.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "set"
|
3
|
+
require "narray"
|
4
|
+
require "facets"
|
5
|
+
|
6
|
+
class Environment
|
7
|
+
|
8
|
+
@@amino_acids = "ACDEFGHIKLMNPQRSTVWYJ".split("")
|
9
|
+
|
10
|
+
attr_accessor :number,
|
11
|
+
:label,
|
12
|
+
:freq_array,
|
13
|
+
:prob_array,
|
14
|
+
:logodd_array,
|
15
|
+
:smooth_prob_array
|
16
|
+
|
17
|
+
def initialize(number, label)
|
18
|
+
@number = number
|
19
|
+
@label = label
|
20
|
+
@freq_array = $noweight ? NArray.int(21) : NArray.float(21)
|
21
|
+
@prob_array = NArray.float(21)
|
22
|
+
@logodd_array = NArray.float(21)
|
23
|
+
@smooth_prob_array = NArray.float(21)
|
24
|
+
end
|
25
|
+
|
26
|
+
def add_residue_count(a, inc = 1.0)
|
27
|
+
@freq_array[@@amino_acids.index(a.upcase)] += inc
|
28
|
+
end
|
29
|
+
|
30
|
+
def label_set
|
31
|
+
label.split("").map_with_index { |l, i| "#{i}#{l}" }.to_set
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_s
|
35
|
+
"#{number}-#{label}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
if $0 == __FILE__
|
40
|
+
|
41
|
+
require "test/unit"
|
42
|
+
|
43
|
+
class TestEnvironment < Test::Unit::TestCase
|
44
|
+
|
45
|
+
def setup
|
46
|
+
@env = Environment.new(1, "AHaSon")
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_label_set
|
50
|
+
assert_equal(%w[0A 1H 2a 3S 4o 5n].to_set, @env.label_set)
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_to_s
|
54
|
+
assert_equal("1-AHaSon", @env.to_s)
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "facets"
|
3
|
+
|
4
|
+
module NArrayExtensions
|
5
|
+
|
6
|
+
def pretty_string(opts={})
|
7
|
+
{ :col_header => nil,
|
8
|
+
:row_header => nil }.merge!(opts)
|
9
|
+
|
10
|
+
("%-3s" % "#") + opts[:col_header].inject("") { |s, a| s + ("%7s" % a) } + "\n" +
|
11
|
+
self.to_a.inject("%-3s" % opts[:row_header]) { |s, v|
|
12
|
+
if v.is_a? Float
|
13
|
+
s + ("%7.2f" % v)
|
14
|
+
else
|
15
|
+
s + ("%7d" % v)
|
16
|
+
end
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
NArray.send(:include, NArrayExtensions)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "facets"
|
3
|
+
require "narray"
|
4
|
+
|
5
|
+
module NMatrixExtensions
|
6
|
+
def pretty_string(opts={})
|
7
|
+
{ :col_header => nil,
|
8
|
+
:row_header => nil }.merge!(opts)
|
9
|
+
|
10
|
+
("%-3s" % "#") + opts[:col_header].inject("") { |s, a|
|
11
|
+
s + ("%7s" % a)
|
12
|
+
} + "\n" + self.to_a.map_with_index { |a, i|
|
13
|
+
("%-3s" % opts[:row_header][i]) + a.inject("") { |s, v|
|
14
|
+
if v.is_a? Float
|
15
|
+
s + ("%7.2f" % v)
|
16
|
+
else
|
17
|
+
s + ("%7d" % v)
|
18
|
+
end
|
19
|
+
}
|
20
|
+
}.join("\n")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
NMatrix.send(:include, NMatrixExtensions)
|
data/script/console
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# File: script/console
|
3
|
+
irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
|
4
|
+
|
5
|
+
libs = " -r irb/completion"
|
6
|
+
# Perhaps use a console_lib to store any extra methods I may want available in the cosole
|
7
|
+
# libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
|
8
|
+
libs << " -r #{File.dirname(__FILE__) + '/../lib/egor.rb'}"
|
9
|
+
puts "Loading egor gem"
|
10
|
+
exec "#{irb} #{libs} --simple-prompt"
|
data/script/destroy
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'rubigen'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
require 'rubigen'
|
9
|
+
end
|
10
|
+
require 'rubigen/scripts/destroy'
|
11
|
+
|
12
|
+
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
13
|
+
RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
|
14
|
+
RubiGen::Scripts::Destroy.new.run(ARGV)
|
data/script/generate
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'rubigen'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
require 'rubigen'
|
9
|
+
end
|
10
|
+
require 'rubigen/scripts/generate'
|
11
|
+
|
12
|
+
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
13
|
+
RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
|
14
|
+
RubiGen::Scripts::Generate.new.run(ARGV)
|
data/script/txt2html
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
load File.dirname(__FILE__) + "/../Rakefile"
|
4
|
+
require 'rubyforge'
|
5
|
+
require 'redcloth'
|
6
|
+
require 'syntax/convertors/html'
|
7
|
+
require 'erb'
|
8
|
+
|
9
|
+
download = "http://rubyforge.org/projects/#{$hoe.rubyforge_name}"
|
10
|
+
version = $hoe.version
|
11
|
+
|
12
|
+
def rubyforge_project_id
|
13
|
+
RubyForge.new.configure.autoconfig["group_ids"][$hoe.rubyforge_name]
|
14
|
+
end
|
15
|
+
|
16
|
+
class Fixnum
|
17
|
+
def ordinal
|
18
|
+
# teens
|
19
|
+
return 'th' if (10..19).include?(self % 100)
|
20
|
+
# others
|
21
|
+
case self % 10
|
22
|
+
when 1: return 'st'
|
23
|
+
when 2: return 'nd'
|
24
|
+
when 3: return 'rd'
|
25
|
+
else return 'th'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class Time
|
31
|
+
def pretty
|
32
|
+
return "#{mday}#{mday.ordinal} #{strftime('%B')} #{year}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def convert_syntax(syntax, source)
|
37
|
+
return Syntax::Convertors::HTML.for_syntax(syntax).convert(source).gsub(%r!^<pre>|</pre>$!,'')
|
38
|
+
end
|
39
|
+
|
40
|
+
if ARGV.length >= 1
|
41
|
+
src, template = ARGV
|
42
|
+
template ||= File.join(File.dirname(__FILE__), '/../website/template.html.erb')
|
43
|
+
else
|
44
|
+
puts("Usage: #{File.split($0).last} source.txt [template.html.erb] > output.html")
|
45
|
+
exit!
|
46
|
+
end
|
47
|
+
|
48
|
+
template = ERB.new(File.open(template).read)
|
49
|
+
|
50
|
+
title = nil
|
51
|
+
body = nil
|
52
|
+
File.open(src) do |fsrc|
|
53
|
+
title_text = fsrc.readline
|
54
|
+
body_text_template = fsrc.read
|
55
|
+
body_text = ERB.new(body_text_template).result(binding)
|
56
|
+
syntax_items = []
|
57
|
+
body_text.gsub!(%r!<(pre|code)[^>]*?syntax=['"]([^'"]+)[^>]*>(.*?)</\1>!m){
|
58
|
+
ident = syntax_items.length
|
59
|
+
element, syntax, source = $1, $2, $3
|
60
|
+
syntax_items << "<#{element} class='syntax'>#{convert_syntax(syntax, source)}</#{element}>"
|
61
|
+
"syntax-temp-#{ident}"
|
62
|
+
}
|
63
|
+
title = RedCloth.new(title_text).to_html.gsub(%r!<.*?>!,'').strip
|
64
|
+
body = RedCloth.new(body_text).to_html
|
65
|
+
body.gsub!(%r!(?:<pre><code>)?syntax-temp-(\d+)(?:</code></pre>)?!){ syntax_items[$1.to_i] }
|
66
|
+
end
|
67
|
+
stat = File.stat(src)
|
68
|
+
created = stat.ctime
|
69
|
+
modified = stat.mtime
|
70
|
+
|
71
|
+
$stdout << template.result(binding)
|
data/test/test_egor.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
2
|
+
|
3
|
+
require "test/unit"
|
4
|
+
require "enumerable_extensions"
|
5
|
+
|
6
|
+
class TestEnumerableExtensions < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def test_cart_product
|
9
|
+
a = [1,2]
|
10
|
+
b = [3,4]
|
11
|
+
products = [[1,3], [1,4], [2,3], [2,4]]
|
12
|
+
results = Enumerable.cart_prod(a,b)
|
13
|
+
assert_equal(4, results.size)
|
14
|
+
products.each { |p| assert(results.include? p) }
|
15
|
+
end
|
16
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
2
|
+
|
3
|
+
require "test/unit"
|
4
|
+
require "nmatrix_extensions"
|
5
|
+
|
6
|
+
class TestNmatrixExtensions < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def test_pretty_string(opts={})
|
9
|
+
m = NMatrix.float(3,3).indgen
|
10
|
+
result ="# A B C\n" +
|
11
|
+
"VAL 0.00 1.00 2.00\n" +
|
12
|
+
" 3.00 4.00 5.00\n" +
|
13
|
+
" 6.00 7.00 8.00"
|
14
|
+
assert_equal(result, m.pretty_string(:col_header => %w[A B C], :row_header => %w[VAL]))
|
15
|
+
end
|
16
|
+
end
|
data/website/index.html
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
4
|
+
<head>
|
5
|
+
<link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
7
|
+
<title>
|
8
|
+
egor: Environment-specific substitution table GeneratOR
|
9
|
+
</title>
|
10
|
+
<script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
|
11
|
+
<style>
|
12
|
+
|
13
|
+
</style>
|
14
|
+
<script type="text/javascript">
|
15
|
+
window.onload = function() {
|
16
|
+
settings = {
|
17
|
+
tl: { radius: 10 },
|
18
|
+
tr: { radius: 10 },
|
19
|
+
bl: { radius: 10 },
|
20
|
+
br: { radius: 10 },
|
21
|
+
antiAlias: true,
|
22
|
+
autoPad: true,
|
23
|
+
validTags: ["div"]
|
24
|
+
}
|
25
|
+
var versionBox = new curvyCorners(settings, document.getElementById("version"));
|
26
|
+
versionBox.applyCornersToAll();
|
27
|
+
}
|
28
|
+
</script>
|
29
|
+
</head>
|
30
|
+
<body>
|
31
|
+
<div id="main">
|
32
|
+
|
33
|
+
<h1>egor: Environment-specific substitution table GeneratOR</h1>
|
34
|
+
<div class="sidebar">
|
35
|
+
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/egor"; return false'>
|
36
|
+
<p>Get Version</p>
|
37
|
+
<a href="http://rubyforge.org/projects/egor" class="numbers">0.0.1</a>
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
<h2>What</h2>
|
41
|
+
<p>‘egor’ is a program for calculating environment-specific substitution tables</p>
|
42
|
+
<h2>Installation</h2>
|
43
|
+
<p><pre class='syntax'><span class="global">$ </span><span class="ident">sudo</span> <span class="ident">gem</span> <span class="ident">install</span> <span class="ident">egor</span></pre></p>
|
44
|
+
<h2>Features</h2>
|
45
|
+
<ul>
|
46
|
+
<li>No more segmentation fault</li>
|
47
|
+
<li>Full smoothing supported</li>
|
48
|
+
<li>In theory, infinite number of environment features can be handled</li>
|
49
|
+
</ul>
|
50
|
+
<h2>Demonstration of usage</h2>
|
51
|
+
<p>It’s pretty much the same as Kenji’s subst, so in most cases, you just need swap ‘subst’ with ‘egor’.</p>
|
52
|
+
<pre>$ egor -l TEMLIST-file -c classdef.dat</pre>
|
53
|
+
or
|
54
|
+
<pre>$ egor -l TEM-file -c classdef.dat</pre>
|
55
|
+
<h2>Repository</h2>
|
56
|
+
<p>You can download a pre-built RubyGem package from</p>
|
57
|
+
<ul>
|
58
|
+
<li>rubyforge: <a href="http://rubyforge.org/projects/egor">http://rubyforge.org/projects/egor</a></li>
|
59
|
+
</ul>
|
60
|
+
<p>or, You can fetch the source from</p>
|
61
|
+
<ul>
|
62
|
+
<li>github: <a href="http://github.com/semin/egor/tree/master">http://github.com/semin/egor/tree/master</a></li>
|
63
|
+
</ul>
|
64
|
+
<pre>$ git clone git://github.com/semin/egor.git</pre>
|
65
|
+
<h2>License</h2>
|
66
|
+
<p>This code is free to use under the terms of the <span class="caps">MIT</span> license.</p>
|
67
|
+
<h2>Contact</h2>
|
68
|
+
<p>Comments are welcome, please send an email to me (seminlee at gmail dot com).</p>
|
69
|
+
<p class="coda">
|
70
|
+
<a href="FIXME email">Semin Lee</a>, 10th November 2008<br>
|
71
|
+
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
72
|
+
</p>
|
73
|
+
</div>
|
74
|
+
|
75
|
+
<!-- insert site tracking codes here, like Google Urchin -->
|
76
|
+
|
77
|
+
</body>
|
78
|
+
</html>
|
data/website/index.txt
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
h1. egor: Environment-specific substitution table GeneratOR
|
2
|
+
|
3
|
+
|
4
|
+
h2. What
|
5
|
+
|
6
|
+
'egor' is a program for calculating environment-specific substitution tables
|
7
|
+
|
8
|
+
|
9
|
+
h2. Installation
|
10
|
+
|
11
|
+
<pre syntax="ruby">$ sudo gem install egor</pre>
|
12
|
+
|
13
|
+
|
14
|
+
h2. Features
|
15
|
+
|
16
|
+
* No more segmentation fault
|
17
|
+
* Full smoothing supported
|
18
|
+
* In theory, infinite number of environment features can be handled
|
19
|
+
|
20
|
+
|
21
|
+
h2. Demonstration of usage
|
22
|
+
|
23
|
+
It's pretty much the same as Kenji's subst, so in most cases, you just need swap 'subst' with 'egor'.
|
24
|
+
|
25
|
+
<pre>$ egor -l TEMLIST-file -c classdef.dat</pre>
|
26
|
+
or
|
27
|
+
<pre>$ egor -l TEM-file -c classdef.dat</pre>
|
28
|
+
|
29
|
+
|
30
|
+
h2. Repository
|
31
|
+
|
32
|
+
You can download a pre-built RubyGem package from
|
33
|
+
|
34
|
+
* rubyforge: "http://rubyforge.org/projects/egor":http://rubyforge.org/projects/egor
|
35
|
+
|
36
|
+
or, You can fetch the source from
|
37
|
+
|
38
|
+
* github: "http://github.com/semin/egor/tree/master":http://github.com/semin/egor/tree/master
|
39
|
+
|
40
|
+
<pre>$ git clone git://github.com/semin/egor.git</pre>
|
41
|
+
|
42
|
+
h2. License
|
43
|
+
|
44
|
+
This code is free to use under the terms of the MIT license.
|
45
|
+
|
46
|
+
h2. Contact
|
47
|
+
|
48
|
+
Comments are welcome, please send an email to me (seminlee at gmail dot com).
|