expetable 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+ gem "rphylip", "~> 0.1.0"
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "shoulda", ">= 0"
10
+ gem "bundler", "~> 1.1.3"
11
+ gem "jeweler", "~> 1.6.4"
12
+ gem "rcov", ">= 0"
13
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,22 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ git (1.2.5)
5
+ jeweler (1.6.4)
6
+ bundler (~> 1.0)
7
+ git (>= 1.2.5)
8
+ rake
9
+ rake (0.9.2.2)
10
+ rcov (0.9.9)
11
+ rphylip (0.1.0)
12
+ shoulda (2.11.3)
13
+
14
+ PLATFORMS
15
+ ruby
16
+
17
+ DEPENDENCIES
18
+ bundler (~> 1.1.3)
19
+ jeweler (~> 1.6.4)
20
+ rcov
21
+ rphylip (~> 0.1.0)
22
+ shoulda
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Fernando Izquierdo-Carrasco
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,19 @@
1
+ = expetable
2
+
3
+ Description goes here.
4
+
5
+ == Contributing to expetable
6
+
7
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
8
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
9
+ * Fork the project
10
+ * Start a feature/bugfix branch
11
+ * Commit and push until you are happy with your contribution
12
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
13
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
14
+
15
+ == Copyright
16
+
17
+ Copyright (c) 2012 Fernando Izquierdo-Carrasco. See LICENSE.txt for
18
+ further details.
19
+
data/Rakefile ADDED
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'rake'
11
+
12
+ require 'jeweler'
13
+ Jeweler::Tasks.new do |gem|
14
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
15
+ gem.name = "expetable"
16
+ gem.homepage = "http://github.com/fizquierdo/expetable"
17
+ gem.license = "MIT"
18
+ gem.summary = %Q{Tables to persist experimental data in Yaml format}
19
+ gem.description = %Q{}
20
+ gem.email = "fer.izquierdo@gmail.com"
21
+ gem.authors = ["Fernando Izquierdo-Carrasco"]
22
+ # dependencies defined in Gemfile
23
+ gem.add_dependency "rphylip", "~> 0.1.0"
24
+ end
25
+ Jeweler::RubygemsDotOrgTasks.new
26
+
27
+ require 'rake/testtask'
28
+ Rake::TestTask.new(:test) do |test|
29
+ test.libs << 'lib' << 'test'
30
+ test.pattern = 'test/**/test_*.rb'
31
+ test.verbose = true
32
+ end
33
+
34
+ require 'rcov/rcovtask'
35
+ Rcov::RcovTask.new do |test|
36
+ test.libs << 'test'
37
+ test.pattern = 'test/**/test_*.rb'
38
+ test.verbose = true
39
+ test.rcov_opts << '--exclude "gems/*"'
40
+ end
41
+
42
+ task :default => :test
43
+
44
+ require 'rdoc/task'
45
+ Rake::RDocTask.new do |rdoc|
46
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
47
+
48
+ rdoc.rdoc_dir = 'rdoc'
49
+ rdoc.title = "expetable #{version}"
50
+ rdoc.rdoc_files.include('README*')
51
+ rdoc.rdoc_files.include('lib/**/*.rb')
52
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/expetable.gemspec ADDED
@@ -0,0 +1,66 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{expetable}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = [%q{Fernando Izquierdo-Carrasco}]
12
+ s.date = %q{2012-05-08}
13
+ s.description = %q{}
14
+ s.email = %q{fer.izquierdo@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "LICENSE.txt",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "expetable.gemspec",
28
+ "lib/experiment.rb",
29
+ "lib/expetable.rb",
30
+ "test/helper.rb",
31
+ "test/test_expetable.rb"
32
+ ]
33
+ s.homepage = %q{http://github.com/fizquierdo/expetable}
34
+ s.licenses = [%q{MIT}]
35
+ s.require_paths = [%q{lib}]
36
+ s.rubygems_version = %q{1.8.6}
37
+ s.summary = %q{Tables to persist experimental data in Yaml format}
38
+
39
+ if s.respond_to? :specification_version then
40
+ s.specification_version = 3
41
+
42
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
43
+ s.add_runtime_dependency(%q<rphylip>, ["~> 0.1.0"])
44
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
45
+ s.add_development_dependency(%q<bundler>, ["~> 1.1.3"])
46
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
47
+ s.add_development_dependency(%q<rcov>, [">= 0"])
48
+ s.add_runtime_dependency(%q<rphylip>, ["~> 0.1.0"])
49
+ else
50
+ s.add_dependency(%q<rphylip>, ["~> 0.1.0"])
51
+ s.add_dependency(%q<shoulda>, [">= 0"])
52
+ s.add_dependency(%q<bundler>, ["~> 1.1.3"])
53
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
54
+ s.add_dependency(%q<rcov>, [">= 0"])
55
+ s.add_dependency(%q<rphylip>, ["~> 0.1.0"])
56
+ end
57
+ else
58
+ s.add_dependency(%q<rphylip>, ["~> 0.1.0"])
59
+ s.add_dependency(%q<shoulda>, [">= 0"])
60
+ s.add_dependency(%q<bundler>, ["~> 1.1.3"])
61
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
62
+ s.add_dependency(%q<rcov>, [">= 0"])
63
+ s.add_dependency(%q<rphylip>, ["~> 0.1.0"])
64
+ end
65
+ end
66
+
data/lib/experiment.rb ADDED
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env ruby
2
+ #require 'rphylip'
3
+ require 'fileutils'
4
+ require 'yaml'
5
+
6
+ class Experiment
7
+ def initialize(name, basedir)
8
+ @name = name
9
+ @base_dir = basedir
10
+ end
11
+ def dirname(a)
12
+ File.join @base_dir, 'experiments', @name, a
13
+ end
14
+ def last_bunch_dir
15
+ dirs = Dir.entries(dirname("output")).select{|f| f =~ /^bunch/}
16
+ dirs.sort_by{|s| s.split("_").last.to_i}.last
17
+ end
18
+ def setup_dirs
19
+ setup_ready = true
20
+ %w(alignment output).map{|n| self.dirname n}.each do |dir|
21
+ if File.exist?(dir)
22
+ puts "Exists #{dir}"
23
+ setup_ready = false # to avoid overwrite
24
+ else
25
+ FileUtils.mkdir_p dir
26
+ end
27
+ end
28
+ setup_ready
29
+ end
30
+ def expand_with_updates(opts, updates_are_full_alignments = true)
31
+ ali = self.dirname("alignment")
32
+ phy = opts[:phylip]
33
+ raise "phylip file not available" if phy.nil? or not File.exist?(phy)
34
+ FileUtils.copy phy, ali
35
+ p = Phylip.new(File.join ali, File.basename(phy))
36
+ p.subdivide_random opts
37
+ end
38
+ end
39
+
40
+ class ExperimentList
41
+ # Persistent storage in .yml file of the experiment status
42
+ attr_accessor :name, :date
43
+ def initialize(expfile)
44
+ @expfile = expfile
45
+ File.open(expfile, "w"){|f| f.puts "---"} unless File.exist?(expfile)
46
+ @list = YAML.load_file(expfile) || Array.new
47
+ end
48
+ def add(opts)
49
+ name_available = self.name_available?(opts[:name])
50
+ if name_available
51
+ #newexp = {:name => opts[:name], :date => Time.now, :fake_phy => opts[:fake_phy]}
52
+ newexp = {:name => opts[:name], :date => Time.now}
53
+ newexp.merge!({:fake_phy => opts[:fake_phy]}) unless opts[:fake_phy].nil?
54
+ newexp.merge!({:initial_phy => opts[:initial_phy]}) unless opts[:initial_phy].nil?
55
+ @list.push newexp
56
+ self.save
57
+ true
58
+ end
59
+ end
60
+ def update(name, step, state)
61
+ e = self.find_by_name(name)
62
+ unless e.nil?
63
+ @list.each do |item|
64
+ if item[:name] == name
65
+ if item[step].nil?
66
+ item[step] = state
67
+ else
68
+ item[step] += " " + state
69
+ end
70
+ end
71
+ end
72
+ end
73
+ self.save
74
+ end
75
+ def show
76
+ puts "Current Experiments"
77
+ puts "ID\tname"
78
+ @list.each_with_index do |item, i|
79
+ fake_name = item[:fake_phy].nil? ? "-" : File.basename(item[:fake_phy])
80
+ initial_name = item[:initial_phy].nil? ? "-" : File.basename(item[:initial_phy])
81
+ puts "#{i}\t#{item[:name]}\t fake: #{fake_name} \t init: #{initial_name} Best LH: #{item["bestLH"]}"
82
+ item.keys.select{|k| k =~ /^u\d+$/}.sort.each do |update_key|
83
+ puts " #{update_key}: #{item[update_key]}"
84
+ end
85
+ end
86
+ end
87
+ def remove(name)
88
+ item = find_by_name(name)
89
+ unless item.nil?
90
+ @list.delete(item)
91
+ self.save
92
+ end
93
+ end
94
+ def save
95
+ File.open(@expfile, "w"){|f| f.write @list.to_yaml}
96
+ puts "Experiment list updated"
97
+ end
98
+ def name_available?(name)
99
+ existing_items = find_by_name(name)
100
+ unless existing_items.nil?
101
+ if existing_items.size >= 1
102
+ puts "A expremient with this name exists already"
103
+ p existing_items
104
+ return false
105
+ end
106
+ end
107
+ return true
108
+ end
109
+ protected
110
+ def find_by_name(name)
111
+ @list.find{|e| e[:name] == name}
112
+ end
113
+ end
data/lib/expetable.rb ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env ruby
2
+ require 'experiment'
data/test/helper.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'shoulda'
12
+
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
15
+ require 'expetable'
16
+
17
+ class Test::Unit::TestCase
18
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestExpetable < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,128 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: expetable
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Fernando Izquierdo-Carrasco
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-08 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rphylip
16
+ requirement: &11398640 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.1.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *11398640
25
+ - !ruby/object:Gem::Dependency
26
+ name: shoulda
27
+ requirement: &11398040 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *11398040
36
+ - !ruby/object:Gem::Dependency
37
+ name: bundler
38
+ requirement: &11397440 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 1.1.3
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *11397440
47
+ - !ruby/object:Gem::Dependency
48
+ name: jeweler
49
+ requirement: &11396860 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 1.6.4
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *11396860
58
+ - !ruby/object:Gem::Dependency
59
+ name: rcov
60
+ requirement: &11396240 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *11396240
69
+ - !ruby/object:Gem::Dependency
70
+ name: rphylip
71
+ requirement: &11395700 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: 0.1.0
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *11395700
80
+ description: ''
81
+ email: fer.izquierdo@gmail.com
82
+ executables: []
83
+ extensions: []
84
+ extra_rdoc_files:
85
+ - LICENSE.txt
86
+ - README.rdoc
87
+ files:
88
+ - .document
89
+ - Gemfile
90
+ - Gemfile.lock
91
+ - LICENSE.txt
92
+ - README.rdoc
93
+ - Rakefile
94
+ - VERSION
95
+ - expetable.gemspec
96
+ - lib/experiment.rb
97
+ - lib/expetable.rb
98
+ - test/helper.rb
99
+ - test/test_expetable.rb
100
+ homepage: http://github.com/fizquierdo/expetable
101
+ licenses:
102
+ - MIT
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ! '>='
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ segments:
114
+ - 0
115
+ hash: -76775336940039374
116
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ! '>='
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ requirements: []
123
+ rubyforge_project:
124
+ rubygems_version: 1.8.6
125
+ signing_key:
126
+ specification_version: 3
127
+ summary: Tables to persist experimental data in Yaml format
128
+ test_files: []