complearn 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/AUTHORS +13 -0
- data/COPYING +340 -0
- data/ChangeLog +0 -0
- data/INSTALL +231 -0
- data/Makefile +352 -0
- data/Makefile.am +76 -0
- data/Makefile.in +352 -0
- data/NEWS +7 -0
- data/README +0 -0
- data/aclocal.m4 +104 -0
- data/bin/Makefile +209 -0
- data/bin/Makefile.am +8 -0
- data/bin/Makefile.in +209 -0
- data/bin/labeltree +68 -0
- data/bin/labeltree.in +68 -0
- data/bin/makesvm +70 -0
- data/bin/makesvm.in +70 -0
- data/bin/maketree +98 -0
- data/bin/maketree.in +98 -0
- data/bin/ncd +43 -0
- data/bin/ncd.in +43 -0
- data/bin/ncdmatrix +54 -0
- data/bin/ncdmatrix.in +54 -0
- data/bin/ncdvector +50 -0
- data/bin/ncdvector.in +50 -0
- data/complearn-0.6.2.gem +0 -0
- data/complearn.gemspec +57 -0
- data/config.log +597 -0
- data/config.status +1082 -0
- data/configure +4922 -0
- data/configure.ac +91 -0
- data/confstat5FpLBf/config.h +65 -0
- data/confstat5FpLBf/subs-1.sed +50 -0
- data/confstat5FpLBf/subs-2.sed +13 -0
- data/confstat5FpLBf/subs.frag +0 -0
- data/confstat5FpLBf/subs.sed +59 -0
- data/confstat5FpLBf/undefs.sed +24 -0
- data/doc/FAQ.txt +67 -0
- data/doc/Makefile +286 -0
- data/doc/Makefile.am +11 -0
- data/doc/Makefile.in +286 -0
- data/doc/devguide.txt +15 -0
- data/doc/example.complearnrc +14 -0
- data/doc/examples.txt +35 -0
- data/doc/man/Makefile +255 -0
- data/doc/man/Makefile.am +11 -0
- data/doc/man/Makefile.in +255 -0
- data/doc/man/complearn.5 +91 -0
- data/doc/man/labeltree.1 +35 -0
- data/doc/man/makesvm.1 +60 -0
- data/doc/man/maketree.1 +58 -0
- data/doc/man/ncd.1 +51 -0
- data/doc/man/ncdmatrix.1 +40 -0
- data/doc/man/ncdvector.1 +42 -0
- data/doc/readme.txt +101 -0
- data/doc/userguide.txt +46 -0
- data/examples/genes/blueWhale.txt +1 -0
- data/examples/genes/cat.txt +1 -0
- data/examples/genes/chimpanzee.txt +1 -0
- data/examples/genes/finWhale.txt +1 -0
- data/examples/genes/graySeal.txt +1 -0
- data/examples/genes/harborSeal.txt +1 -0
- data/examples/genes/horse.txt +1 -0
- data/examples/genes/human.txt +1 -0
- data/examples/genes/mouse.txt +1 -0
- data/examples/genes/rat.txt +1 -0
- data/ext/Makefile +167 -0
- data/ext/Quartet.c +399 -0
- data/ext/Quartet.h +62 -0
- data/ext/TreeScore.c +244 -0
- data/ext/TreeScore.h +3 -0
- data/ext/config.h +65 -0
- data/ext/config.h.in +64 -0
- data/ext/extconf.rb +3 -0
- data/ext/lib/CompLearnLib/CLConfig.rb +241 -0
- data/ext/lib/CompLearnLib/CompressionObject.rb +59 -0
- data/ext/lib/CompLearnLib/CompressionTask.rb +99 -0
- data/ext/lib/CompLearnLib/DistMatrix.rb +18 -0
- data/ext/lib/CompLearnLib/FoundComp.rb +10 -0
- data/ext/lib/CompLearnLib/FoundComp.rb.in +10 -0
- data/ext/lib/CompLearnLib/Ncd.rb +248 -0
- data/ext/lib/CompLearnLib/RunEnv.rb +150 -0
- data/ext/lib/CompLearnLib/Task.rb +39 -0
- data/ext/lib/CompLearnLib/TaskMaster.rb +13 -0
- data/ext/lib/CompLearnLib/TaskMasterMPI.rb +112 -0
- data/ext/lib/CompLearnLib/TaskMasterSingle.rb +39 -0
- data/ext/lib/CompLearnLib/Tree.rb +300 -0
- data/install-sh +294 -0
- data/missing +336 -0
- data/mkinstalldirs +111 -0
- data/o +24 -0
- data/scripts/CompLearn.iss +89 -0
- data/scripts/CompLearn.iss.in +89 -0
- data/scripts/debian/changelog +6 -0
- data/scripts/debian/control +14 -0
- data/scripts/makeSetup.sh +23 -0
- data/scripts/makeSetup.sh.in +23 -0
- data/scripts/makedeb.zsh +46 -0
- data/scripts/makedeb.zsh.in +46 -0
- data/tests/alltests.rb +2 -0
- data/tests/bz2test.rb +516 -0
- data/tests/sshagent-test.rb +48 -0
- data/tests/tests.rb +275 -0
- metadata +164 -0
data/bin/labeltree
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
#!/usr/bin/ruby1.8
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require 'CompLearnLib/CLConfig'
|
5
|
+
|
6
|
+
setup = Hash.new('')
|
7
|
+
|
8
|
+
ARGV.options { |opt|
|
9
|
+
|
10
|
+
opt.banner = "Usage: labeltree tree.dot {dirname|filelist.txt}"
|
11
|
+
opt.on("")
|
12
|
+
opt.on("Relabels a tree's leaf vertices according to filenames")
|
13
|
+
opt.on("If a directory is specified, all files in that directory are used")
|
14
|
+
opt.on("If a file is specified, it must contain filenames one per line")
|
15
|
+
opt.on("The original unlabelled tree.dot will be renamed tree.dot.orig")
|
16
|
+
|
17
|
+
opt.on("Options:\n")
|
18
|
+
opt.on("--configfile filename", "-f", String,
|
19
|
+
"Read alternate configuration file") { |setup['cfgfile']| }
|
20
|
+
opt.on("--help", "-h", "Print this help text and exit") { puts opt; exit 0 }
|
21
|
+
opt.on("--version", "-v", "Print version and exit") { CLConfig.printVersionAndExit() }
|
22
|
+
|
23
|
+
opt.parse!
|
24
|
+
|
25
|
+
if ARGV.size < 2
|
26
|
+
puts opt
|
27
|
+
exit(1)
|
28
|
+
end
|
29
|
+
}
|
30
|
+
|
31
|
+
CLConfig.setDefaultConfig(CLConfig.new(setup['cfgfile'])) if setup.has_key?('cfgfile')
|
32
|
+
cfg = CLConfig.getDefaultConfig
|
33
|
+
|
34
|
+
begin
|
35
|
+
treefile, objname = ARGV
|
36
|
+
|
37
|
+
files = cfg.getFilelistFromDirOrFile(objname)
|
38
|
+
|
39
|
+
newnames = { }
|
40
|
+
|
41
|
+
files.each_index { |i|
|
42
|
+
fname = File.basename(files[i])
|
43
|
+
fname.gsub!(/[.].*/, '')
|
44
|
+
fname.gsub!(/[^a-zA-Z0-9]+/, '')
|
45
|
+
fname = "zz#{fname}" if fname =~ /^[0-9]/ && fname =~ /[a-zA-Z]/
|
46
|
+
newnames[i.to_s] = fname
|
47
|
+
puts "Relabelling #{i} to #{fname}"
|
48
|
+
}
|
49
|
+
|
50
|
+
f = File.open(treefile, 'r')
|
51
|
+
orig = f.read
|
52
|
+
|
53
|
+
newnames.each { |k, v|
|
54
|
+
orig.gsub!(Regexp.new("^\s*#{k}\s*--"), "#{v} --")
|
55
|
+
orig.gsub!(Regexp.new("--\s*#{k}\s*$"), "-- #{v}")
|
56
|
+
}
|
57
|
+
|
58
|
+
File.rename(treefile, "#{treefile}.orig")
|
59
|
+
|
60
|
+
f = File.open(treefile, 'w')
|
61
|
+
f.write(orig)
|
62
|
+
f.close
|
63
|
+
|
64
|
+
rescue
|
65
|
+
puts "Exception: #{$!}"
|
66
|
+
end
|
67
|
+
exit(0)
|
68
|
+
|
data/bin/labeltree.in
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
#!@RUBYBIN@
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require 'CompLearnLib/CLConfig'
|
5
|
+
|
6
|
+
setup = Hash.new('')
|
7
|
+
|
8
|
+
ARGV.options { |opt|
|
9
|
+
|
10
|
+
opt.banner = "Usage: labeltree tree.dot {dirname|filelist.txt}"
|
11
|
+
opt.on("")
|
12
|
+
opt.on("Relabels a tree's leaf vertices according to filenames")
|
13
|
+
opt.on("If a directory is specified, all files in that directory are used")
|
14
|
+
opt.on("If a file is specified, it must contain filenames one per line")
|
15
|
+
opt.on("The original unlabelled tree.dot will be renamed tree.dot.orig")
|
16
|
+
|
17
|
+
opt.on("Options:\n")
|
18
|
+
opt.on("--configfile filename", "-f", String,
|
19
|
+
"Read alternate configuration file") { |setup['cfgfile']| }
|
20
|
+
opt.on("--help", "-h", "Print this help text and exit") { puts opt; exit 0 }
|
21
|
+
opt.on("--version", "-v", "Print version and exit") { CLConfig.printVersionAndExit() }
|
22
|
+
|
23
|
+
opt.parse!
|
24
|
+
|
25
|
+
if ARGV.size < 2
|
26
|
+
puts opt
|
27
|
+
exit(1)
|
28
|
+
end
|
29
|
+
}
|
30
|
+
|
31
|
+
CLConfig.setDefaultConfig(CLConfig.new(setup['cfgfile'])) if setup.has_key?('cfgfile')
|
32
|
+
cfg = CLConfig.getDefaultConfig
|
33
|
+
|
34
|
+
begin
|
35
|
+
treefile, objname = ARGV
|
36
|
+
|
37
|
+
files = cfg.getFilelistFromDirOrFile(objname)
|
38
|
+
|
39
|
+
newnames = { }
|
40
|
+
|
41
|
+
files.each_index { |i|
|
42
|
+
fname = File.basename(files[i])
|
43
|
+
fname.gsub!(/[.].*/, '')
|
44
|
+
fname.gsub!(/[^a-zA-Z0-9]+/, '')
|
45
|
+
fname = "zz#{fname}" if fname =~ /^[0-9]/ && fname =~ /[a-zA-Z]/
|
46
|
+
newnames[i.to_s] = fname
|
47
|
+
puts "Relabelling #{i} to #{fname}"
|
48
|
+
}
|
49
|
+
|
50
|
+
f = File.open(treefile, 'r')
|
51
|
+
orig = f.read
|
52
|
+
|
53
|
+
newnames.each { |k, v|
|
54
|
+
orig.gsub!(Regexp.new("^\s*#{k}\s*--"), "#{v} --")
|
55
|
+
orig.gsub!(Regexp.new("--\s*#{k}\s*$"), "-- #{v}")
|
56
|
+
}
|
57
|
+
|
58
|
+
File.rename(treefile, "#{treefile}.orig")
|
59
|
+
|
60
|
+
f = File.open(treefile, 'w')
|
61
|
+
f.write(orig)
|
62
|
+
f.close
|
63
|
+
|
64
|
+
rescue
|
65
|
+
puts "Exception: #{$!}"
|
66
|
+
end
|
67
|
+
exit(0)
|
68
|
+
|
data/bin/makesvm
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
#!/usr/bin/ruby1.8
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
|
5
|
+
require 'CompLearnLib/Ncd.rb'
|
6
|
+
|
7
|
+
setup = Hash.new('')
|
8
|
+
|
9
|
+
TaskMaster.init()
|
10
|
+
|
11
|
+
ARGV.options { |opt|
|
12
|
+
|
13
|
+
opt.banner = "Usage: makesvm [options] filelist.txt"
|
14
|
+
opt.on("")
|
15
|
+
opt.on("Creates SVM classification training files from NCD's of listed files")
|
16
|
+
opt.on("filelist.txt must be a list of files, one per line")
|
17
|
+
opt.on("Each line must consist of:")
|
18
|
+
opt.on("<category> <type> <filename>")
|
19
|
+
opt.on("where <category> is an integer specifying the category")
|
20
|
+
opt.on("and <type> is either F, G, or P")
|
21
|
+
opt.on("F means this file is to be used as a feature extractor")
|
22
|
+
opt.on("G means this file is to be used for training (given)")
|
23
|
+
opt.on("P means this file is to be used for testing (prediction)")
|
24
|
+
opt.on("Options:\n")
|
25
|
+
opt.on("--configfile filename", "-f", String,
|
26
|
+
"Read alternate configuration file") { |setup['cfgfile']| }
|
27
|
+
opt.on("--help", "-h", "Print this help text and exit") { puts opt; exit 0 }
|
28
|
+
opt.on("--version", "-v", "Print version and exit") { CLConfig.printVersionAndExit() }
|
29
|
+
|
30
|
+
opt.parse!
|
31
|
+
|
32
|
+
if ARGV.size < 1
|
33
|
+
puts opt
|
34
|
+
exit(1)
|
35
|
+
end
|
36
|
+
}
|
37
|
+
|
38
|
+
CLConfig.setDefaultConfig(CLConfig.new(setup['cfgfile'])) if setup.has_key?('cfgfile')
|
39
|
+
cfg = CLConfig.getDefaultConfig
|
40
|
+
|
41
|
+
filelist = ARGV[0]
|
42
|
+
|
43
|
+
training, features, testing = cfg.readTaggedFileList(filelist)
|
44
|
+
|
45
|
+
unless features.size > 0
|
46
|
+
puts "You must have at least one feature specified (with an F type code)"
|
47
|
+
exit(1)
|
48
|
+
end
|
49
|
+
|
50
|
+
n = Ncd.new()
|
51
|
+
|
52
|
+
[['trainsvm.txt', training], ['testsvm.txt', testing]].each { |outname, vecs|
|
53
|
+
|
54
|
+
f = File.open(outname, "w")
|
55
|
+
|
56
|
+
vecs.each { |tag, fname|
|
57
|
+
f.write "#{tag} "
|
58
|
+
fv = n.ncdVectorFile(fname, features)
|
59
|
+
fv.each_index { |i|
|
60
|
+
f.write "#{i+1}:#{fv[i]} "
|
61
|
+
}
|
62
|
+
f.puts
|
63
|
+
}
|
64
|
+
|
65
|
+
f.close
|
66
|
+
|
67
|
+
}
|
68
|
+
|
69
|
+
exit(0)
|
70
|
+
|
data/bin/makesvm.in
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
#!@RUBYBIN@
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
|
5
|
+
require 'CompLearnLib/Ncd.rb'
|
6
|
+
|
7
|
+
setup = Hash.new('')
|
8
|
+
|
9
|
+
TaskMaster.init()
|
10
|
+
|
11
|
+
ARGV.options { |opt|
|
12
|
+
|
13
|
+
opt.banner = "Usage: makesvm [options] filelist.txt"
|
14
|
+
opt.on("")
|
15
|
+
opt.on("Creates SVM classification training files from NCD's of listed files")
|
16
|
+
opt.on("filelist.txt must be a list of files, one per line")
|
17
|
+
opt.on("Each line must consist of:")
|
18
|
+
opt.on("<category> <type> <filename>")
|
19
|
+
opt.on("where <category> is an integer specifying the category")
|
20
|
+
opt.on("and <type> is either F, G, or P")
|
21
|
+
opt.on("F means this file is to be used as a feature extractor")
|
22
|
+
opt.on("G means this file is to be used for training (given)")
|
23
|
+
opt.on("P means this file is to be used for testing (prediction)")
|
24
|
+
opt.on("Options:\n")
|
25
|
+
opt.on("--configfile filename", "-f", String,
|
26
|
+
"Read alternate configuration file") { |setup['cfgfile']| }
|
27
|
+
opt.on("--help", "-h", "Print this help text and exit") { puts opt; exit 0 }
|
28
|
+
opt.on("--version", "-v", "Print version and exit") { CLConfig.printVersionAndExit() }
|
29
|
+
|
30
|
+
opt.parse!
|
31
|
+
|
32
|
+
if ARGV.size < 1
|
33
|
+
puts opt
|
34
|
+
exit(1)
|
35
|
+
end
|
36
|
+
}
|
37
|
+
|
38
|
+
CLConfig.setDefaultConfig(CLConfig.new(setup['cfgfile'])) if setup.has_key?('cfgfile')
|
39
|
+
cfg = CLConfig.getDefaultConfig
|
40
|
+
|
41
|
+
filelist = ARGV[0]
|
42
|
+
|
43
|
+
training, features, testing = cfg.readTaggedFileList(filelist)
|
44
|
+
|
45
|
+
unless features.size > 0
|
46
|
+
puts "You must have at least one feature specified (with an F type code)"
|
47
|
+
exit(1)
|
48
|
+
end
|
49
|
+
|
50
|
+
n = Ncd.new()
|
51
|
+
|
52
|
+
[['trainsvm.txt', training], ['testsvm.txt', testing]].each { |outname, vecs|
|
53
|
+
|
54
|
+
f = File.open(outname, "w")
|
55
|
+
|
56
|
+
vecs.each { |tag, fname|
|
57
|
+
f.write "#{tag} "
|
58
|
+
fv = n.ncdVectorFile(fname, features)
|
59
|
+
fv.each_index { |i|
|
60
|
+
f.write "#{i+1}:#{fv[i]} "
|
61
|
+
}
|
62
|
+
f.puts
|
63
|
+
}
|
64
|
+
|
65
|
+
f.close
|
66
|
+
|
67
|
+
}
|
68
|
+
|
69
|
+
exit(0)
|
70
|
+
|
data/bin/maketree
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
#!/usr/bin/ruby1.8
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require 'CompLearn'
|
5
|
+
require 'CompLearnLib/TaskMaster'
|
6
|
+
require 'CompLearnLib/Tree'
|
7
|
+
require 'CompLearnLib/CLConfig'
|
8
|
+
require 'CompLearnLib/DistMatrix'
|
9
|
+
|
10
|
+
include MTree
|
11
|
+
|
12
|
+
setup = Hash.new('')
|
13
|
+
|
14
|
+
TaskMaster.init()
|
15
|
+
|
16
|
+
ARGV.options { |opt|
|
17
|
+
|
18
|
+
opt.banner = "Usage: maketree [options] distmat.txt treeout.dot"
|
19
|
+
opt.on("")
|
20
|
+
opt.on("Computes a good tree to fit a distance matrix distmat.txt.")
|
21
|
+
opt.on("distmat.txt must be a distance matrix file listing n*n")
|
22
|
+
opt.on("positive real numbers. Each line must contain n numbers")
|
23
|
+
opt.on("separated by spaces. The resultant tree will be written")
|
24
|
+
opt.on("to treeout.dot. This file is suitable for further processing")
|
25
|
+
opt.on("by labeltree, dot, or neato, for example.")
|
26
|
+
opt.on("If relative filenames are used, inputDir and cwd will be searched\n")
|
27
|
+
opt.on("Options:\n")
|
28
|
+
opt.on("--configfile filename", "-f", String,
|
29
|
+
"Read alternate configuration file") { |setup['cfgfile']| }
|
30
|
+
opt.on("--help", "-h", "Print this help text and exit") { puts opt; exit 0 }
|
31
|
+
opt.on("--version", "-v", "Print version and exit") { CLConfig.printVersionAndExit() }
|
32
|
+
|
33
|
+
opt.parse!
|
34
|
+
|
35
|
+
if ARGV.size < 2
|
36
|
+
puts opt
|
37
|
+
exit(1)
|
38
|
+
end
|
39
|
+
|
40
|
+
}
|
41
|
+
|
42
|
+
begin
|
43
|
+
|
44
|
+
CLConfig.setDefaultConfig(CLConfig.new(setup['cfgfile'])) if setup.has_key?('cfgfile')
|
45
|
+
cfg = CLConfig.getDefaultConfig
|
46
|
+
distmat, treename = ARGV
|
47
|
+
dm = DistMatrix.readFromFile(distmat)
|
48
|
+
speciescount = dm.size
|
49
|
+
best = Tree.randomTree(speciescount)
|
50
|
+
TaskMaster.init
|
51
|
+
TaskMaster.storeEverywhere('dm', dm)
|
52
|
+
ts = cfg.isUseBestThirdOnly?()?
|
53
|
+
TreeScore.makeBestList(dm):
|
54
|
+
TreeScore.makeFullList(dm)
|
55
|
+
ts.penalty = cfg.unpairedPenalty()
|
56
|
+
maxfailedtries = cfg.maxFailedTries()
|
57
|
+
treespertry = cfg.treesPerTry()
|
58
|
+
bestscore = ts.score(best)
|
59
|
+
|
60
|
+
puts "The penalty term is #{ts.penalty}"
|
61
|
+
puts "Score is first #{bestscore}"
|
62
|
+
|
63
|
+
enqc = 0
|
64
|
+
todo = treespertry
|
65
|
+
failcount = 0
|
66
|
+
while todo > 0 && failcount < maxfailedtries
|
67
|
+
t = TreeTask.new(best, 100, cfg.unpairedPenalty())
|
68
|
+
enqc += 1
|
69
|
+
TaskMaster.enqueue(t) { |res,t,src|
|
70
|
+
newbest, newbestscore = res
|
71
|
+
if newbestscore > bestscore
|
72
|
+
bestscore = newbestscore
|
73
|
+
best = newbest
|
74
|
+
failcount = 0
|
75
|
+
puts "New best score found: #{bestscore}"
|
76
|
+
else
|
77
|
+
failcount += 1
|
78
|
+
end
|
79
|
+
enqc -= 1
|
80
|
+
}
|
81
|
+
todo -= 1
|
82
|
+
end
|
83
|
+
|
84
|
+
while enqc > 0
|
85
|
+
TaskMaster.waitForSlave()
|
86
|
+
end
|
87
|
+
|
88
|
+
bestscore = ts.score(best)
|
89
|
+
puts "Best tree score is #{bestscore}"
|
90
|
+
f = File.open(treename, 'w')
|
91
|
+
names = [ ]
|
92
|
+
speciescount.times { |i| names << i.to_s }
|
93
|
+
f.write(best.toDotString(names, 'tree', "Score: #{bestscore}"))
|
94
|
+
|
95
|
+
rescue
|
96
|
+
puts "Exception: #{$!}"
|
97
|
+
end
|
98
|
+
exit(0)
|
data/bin/maketree.in
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
#!@RUBYBIN@
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require 'CompLearn'
|
5
|
+
require 'CompLearnLib/TaskMaster'
|
6
|
+
require 'CompLearnLib/Tree'
|
7
|
+
require 'CompLearnLib/CLConfig'
|
8
|
+
require 'CompLearnLib/DistMatrix'
|
9
|
+
|
10
|
+
include MTree
|
11
|
+
|
12
|
+
setup = Hash.new('')
|
13
|
+
|
14
|
+
TaskMaster.init()
|
15
|
+
|
16
|
+
ARGV.options { |opt|
|
17
|
+
|
18
|
+
opt.banner = "Usage: maketree [options] distmat.txt treeout.dot"
|
19
|
+
opt.on("")
|
20
|
+
opt.on("Computes a good tree to fit a distance matrix distmat.txt.")
|
21
|
+
opt.on("distmat.txt must be a distance matrix file listing n*n")
|
22
|
+
opt.on("positive real numbers. Each line must contain n numbers")
|
23
|
+
opt.on("separated by spaces. The resultant tree will be written")
|
24
|
+
opt.on("to treeout.dot. This file is suitable for further processing")
|
25
|
+
opt.on("by labeltree, dot, or neato, for example.")
|
26
|
+
opt.on("If relative filenames are used, inputDir and cwd will be searched\n")
|
27
|
+
opt.on("Options:\n")
|
28
|
+
opt.on("--configfile filename", "-f", String,
|
29
|
+
"Read alternate configuration file") { |setup['cfgfile']| }
|
30
|
+
opt.on("--help", "-h", "Print this help text and exit") { puts opt; exit 0 }
|
31
|
+
opt.on("--version", "-v", "Print version and exit") { CLConfig.printVersionAndExit() }
|
32
|
+
|
33
|
+
opt.parse!
|
34
|
+
|
35
|
+
if ARGV.size < 2
|
36
|
+
puts opt
|
37
|
+
exit(1)
|
38
|
+
end
|
39
|
+
|
40
|
+
}
|
41
|
+
|
42
|
+
begin
|
43
|
+
|
44
|
+
CLConfig.setDefaultConfig(CLConfig.new(setup['cfgfile'])) if setup.has_key?('cfgfile')
|
45
|
+
cfg = CLConfig.getDefaultConfig
|
46
|
+
distmat, treename = ARGV
|
47
|
+
dm = DistMatrix.readFromFile(distmat)
|
48
|
+
speciescount = dm.size
|
49
|
+
best = Tree.randomTree(speciescount)
|
50
|
+
TaskMaster.init
|
51
|
+
TaskMaster.storeEverywhere('dm', dm)
|
52
|
+
ts = cfg.isUseBestThirdOnly?()?
|
53
|
+
TreeScore.makeBestList(dm):
|
54
|
+
TreeScore.makeFullList(dm)
|
55
|
+
ts.penalty = cfg.unpairedPenalty()
|
56
|
+
maxfailedtries = cfg.maxFailedTries()
|
57
|
+
treespertry = cfg.treesPerTry()
|
58
|
+
bestscore = ts.score(best)
|
59
|
+
|
60
|
+
puts "The penalty term is #{ts.penalty}"
|
61
|
+
puts "Score is first #{bestscore}"
|
62
|
+
|
63
|
+
enqc = 0
|
64
|
+
todo = treespertry
|
65
|
+
failcount = 0
|
66
|
+
while todo > 0 && failcount < maxfailedtries
|
67
|
+
t = TreeTask.new(best, 100, cfg.unpairedPenalty())
|
68
|
+
enqc += 1
|
69
|
+
TaskMaster.enqueue(t) { |res,t,src|
|
70
|
+
newbest, newbestscore = res
|
71
|
+
if newbestscore > bestscore
|
72
|
+
bestscore = newbestscore
|
73
|
+
best = newbest
|
74
|
+
failcount = 0
|
75
|
+
puts "New best score found: #{bestscore}"
|
76
|
+
else
|
77
|
+
failcount += 1
|
78
|
+
end
|
79
|
+
enqc -= 1
|
80
|
+
}
|
81
|
+
todo -= 1
|
82
|
+
end
|
83
|
+
|
84
|
+
while enqc > 0
|
85
|
+
TaskMaster.waitForSlave()
|
86
|
+
end
|
87
|
+
|
88
|
+
bestscore = ts.score(best)
|
89
|
+
puts "Best tree score is #{bestscore}"
|
90
|
+
f = File.open(treename, 'w')
|
91
|
+
names = [ ]
|
92
|
+
speciescount.times { |i| names << i.to_s }
|
93
|
+
f.write(best.toDotString(names, 'tree', "Score: #{bestscore}"))
|
94
|
+
|
95
|
+
rescue
|
96
|
+
puts "Exception: #{$!}"
|
97
|
+
end
|
98
|
+
exit(0)
|