bio-nwk 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/bio/nwk/version.rb +1 -1
- data/lib/bio/nwk.rb +41 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5f845416e561baa214dee9ad326763f784b5ca2f891bdb01c4deb9572f9ca23
|
4
|
+
data.tar.gz: e7720ae89b70955493c510b4291ae8f2125e00a6d83e88d4274fa8b3490b137a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a252ea335e65cbf252f3482a5fb93d5c33499df3cc401932de7db4c491628c1e3c72e9628613cf66bc632a9723bf2c541cd76c583c8aca3e8d1a456d17d71676
|
7
|
+
data.tar.gz: 960aa5a028aa7d475654d80683983f0b2f1900aaa665f09a37fa776d67bec11992ed0b9328c9d1aeb2a9fbf1bf884ee39629236f2ab70e41b6445289e3b95cdc
|
data/lib/bio/nwk/version.rb
CHANGED
data/lib/bio/nwk.rb
CHANGED
@@ -7,6 +7,7 @@ class Bio::Tree
|
|
7
7
|
DELIMITER = ';'
|
8
8
|
attr_accessor :tip2index, :index2tip
|
9
9
|
|
10
|
+
|
10
11
|
def tips(node)
|
11
12
|
rv = Array.new
|
12
13
|
if node.isTip?(self)
|
@@ -17,16 +18,19 @@ class Bio::Tree
|
|
17
18
|
return(rv)
|
18
19
|
end
|
19
20
|
|
21
|
+
|
20
22
|
def all_nodes_of_subtree(node)
|
21
23
|
[leaves(node), tips(node)].flatten
|
22
24
|
end
|
23
25
|
|
26
|
+
|
24
27
|
def cleanName!
|
25
28
|
allTips.each do |tip|
|
26
29
|
tip.name.gsub!(' ', '_')
|
27
30
|
end
|
28
31
|
end
|
29
32
|
|
33
|
+
|
30
34
|
def twoTaxaNode(node)
|
31
35
|
if node.isTip?(self)
|
32
36
|
return(node)
|
@@ -34,6 +38,7 @@ class Bio::Tree
|
|
34
38
|
return children(node).map{|child|tips(child).sort_by{|i|i.name}.shift}.sort_by{|i|i.name}
|
35
39
|
end
|
36
40
|
end
|
41
|
+
|
37
42
|
|
38
43
|
def twoTaxaNodeName(node)
|
39
44
|
if node.isTip?(self)
|
@@ -43,6 +48,7 @@ class Bio::Tree
|
|
43
48
|
end
|
44
49
|
end
|
45
50
|
|
51
|
+
|
46
52
|
def twoTaxaNodeNameStr(node, sep='|')
|
47
53
|
a = twoTaxaNodeName(node)
|
48
54
|
if a.is_a?(Array)
|
@@ -52,6 +58,7 @@ class Bio::Tree
|
|
52
58
|
end
|
53
59
|
end
|
54
60
|
|
61
|
+
|
55
62
|
def sisters(node)
|
56
63
|
if node == root
|
57
64
|
return([])
|
@@ -60,10 +67,12 @@ class Bio::Tree
|
|
60
67
|
end
|
61
68
|
end
|
62
69
|
|
70
|
+
|
63
71
|
def sister(node)
|
64
72
|
return(sisters(node)[0])
|
65
73
|
end
|
66
74
|
|
75
|
+
|
67
76
|
def internal_nodes
|
68
77
|
a = Array.new
|
69
78
|
nodes.each do |node|
|
@@ -74,6 +83,7 @@ class Bio::Tree
|
|
74
83
|
return(a)
|
75
84
|
end
|
76
85
|
|
86
|
+
|
77
87
|
def allSubtreeRepresentatives
|
78
88
|
arr = Array.new
|
79
89
|
nodes.each do |node|
|
@@ -82,6 +92,7 @@ class Bio::Tree
|
|
82
92
|
return(arr)
|
83
93
|
end
|
84
94
|
|
95
|
+
|
85
96
|
def allTips
|
86
97
|
a = Array.new
|
87
98
|
nodes.each do |node|
|
@@ -90,6 +101,7 @@ class Bio::Tree
|
|
90
101
|
return(a)
|
91
102
|
end
|
92
103
|
|
104
|
+
|
93
105
|
def outputNexus(isTranslate=false, isTip2Index=false)
|
94
106
|
puts "#NEXUS"
|
95
107
|
puts
|
@@ -101,6 +113,7 @@ class Bio::Tree
|
|
101
113
|
newickIndexToTip if isTip2Index
|
102
114
|
end
|
103
115
|
|
116
|
+
|
104
117
|
def cleanNewick
|
105
118
|
output = output_newick
|
106
119
|
output.gsub!(/[\n\s]/, '')
|
@@ -108,6 +121,7 @@ class Bio::Tree
|
|
108
121
|
return(output)
|
109
122
|
end
|
110
123
|
|
124
|
+
|
111
125
|
def tipToIndex
|
112
126
|
@tip2index = Hash.new
|
113
127
|
@index2tip = Hash.new
|
@@ -117,6 +131,7 @@ class Bio::Tree
|
|
117
131
|
end
|
118
132
|
end
|
119
133
|
|
134
|
+
|
120
135
|
def newickTipToIndex()
|
121
136
|
tipToIndex
|
122
137
|
allTips.each do |tip|
|
@@ -125,6 +140,7 @@ class Bio::Tree
|
|
125
140
|
end
|
126
141
|
end
|
127
142
|
|
143
|
+
|
128
144
|
def newickIndexToTip()
|
129
145
|
tipToIndex if @index2tip.empty?
|
130
146
|
allTips.each do |tip|
|
@@ -133,6 +149,7 @@ class Bio::Tree
|
|
133
149
|
end
|
134
150
|
end
|
135
151
|
|
152
|
+
|
136
153
|
def getAlldistances()
|
137
154
|
distances = Array.new
|
138
155
|
each_edge do |node0, node1, edge|
|
@@ -142,6 +159,7 @@ class Bio::Tree
|
|
142
159
|
return(distances)
|
143
160
|
end
|
144
161
|
|
162
|
+
|
145
163
|
def normalizeBranchLength!()
|
146
164
|
min, max = getAlldistances().minmax
|
147
165
|
each_edge do |node0, node1, edge|
|
@@ -149,6 +167,7 @@ class Bio::Tree
|
|
149
167
|
end
|
150
168
|
end
|
151
169
|
|
170
|
+
|
152
171
|
def normalizeBranchLengthGainAndLoss!()
|
153
172
|
min, max = getAlldistances().select{|i|i>=0}.minmax
|
154
173
|
each_edge do |node0, node1, edge|
|
@@ -161,6 +180,27 @@ class Bio::Tree
|
|
161
180
|
end
|
162
181
|
end
|
163
182
|
|
183
|
+
|
184
|
+
def getNameTipRela()
|
185
|
+
tip2name, name2tip = [Hash.new, Hash.new]
|
186
|
+
allTips.each do |tip|
|
187
|
+
tip2name[tip] = tip.name
|
188
|
+
name2tip[tip.name] = tip
|
189
|
+
end
|
190
|
+
return([name2tip, tip2name])
|
191
|
+
end
|
192
|
+
|
193
|
+
|
194
|
+
def getNameNodeRela()
|
195
|
+
node2name, name2node = [Hash.new, Hash.new]
|
196
|
+
nodes.each do |node|
|
197
|
+
node2name[node] = node.name
|
198
|
+
name2node[node.name] = node
|
199
|
+
end
|
200
|
+
return([name2node, node2name])
|
201
|
+
end
|
202
|
+
|
203
|
+
|
164
204
|
private
|
165
205
|
def translate
|
166
206
|
# TRANSLATE
|
@@ -212,3 +252,4 @@ def getTreeObjFromMcmctree(tree_file)
|
|
212
252
|
return([first_line, treeio])
|
213
253
|
end
|
214
254
|
|
255
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bio-nwk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sishuo Wang
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|