tree_clusters 0.1.0 → 0.2.0
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.
- checksums.yaml +4 -4
- data/.gitignore +9 -0
- data/lib/tree_clusters/version.rb +1 -1
- data/lib/tree_clusters.rb +35 -14
- data/test_files/non_bifurcating.aln +20 -0
- data/test_files/non_bifurcating.tre +1 -0
- metadata +4 -3
- data/test_files/test.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f069c5801fa47b4861acb1ef2468526082c311b6
|
4
|
+
data.tar.gz: f865bbcc0da44a648847e9093a4d40511d8eaef1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d82b8821ab2205517bb111602bbcc83bbf28091d8503c56332fe78db24ca1681a72d1be21f6272360629fa4e1e48872e4447ba65cd4c5c2f5971ebc90652b1da
|
7
|
+
data.tar.gz: 694d9b68a945546b912ba998b817964cc98e1086d2ca2bd3933311834b26649c4ec0b66b26ac0889c76347c7167de8d0d50a6dba642c637e6353b58055b329cb
|
data/.gitignore
CHANGED
data/lib/tree_clusters.rb
CHANGED
@@ -29,10 +29,14 @@ module TreeClusters
|
|
29
29
|
#
|
30
30
|
# @param tree [NewickTree] a NewickTree object
|
31
31
|
#
|
32
|
-
# @
|
32
|
+
# @yieldparam clade [Clade] a clade of the tree
|
33
|
+
#
|
34
|
+
# @return [Enumerator<Clade>] enumerator of Clade objects
|
33
35
|
def all_clades tree
|
34
|
-
tree
|
35
|
-
|
36
|
+
return enum_for(:all_clades, tree) unless block_given?
|
37
|
+
|
38
|
+
tree.clade_nodes.reverse.each do |node|
|
39
|
+
yield Clade.new node, tree
|
36
40
|
end
|
37
41
|
end
|
38
42
|
|
@@ -72,6 +76,14 @@ module TreeClusters
|
|
72
76
|
|
73
77
|
TreeClusters::AttrArray.new ary
|
74
78
|
end
|
79
|
+
|
80
|
+
def add leaf, attr, val
|
81
|
+
if self.has_key? leaf
|
82
|
+
self[leaf][attr] = val
|
83
|
+
else
|
84
|
+
self[leaf] = { attr => val }
|
85
|
+
end
|
86
|
+
end
|
75
87
|
end
|
76
88
|
|
77
89
|
# Provides convenience methods for working with Arrays of Sets
|
@@ -97,8 +109,10 @@ module TreeClusters
|
|
97
109
|
:all_leaves,
|
98
110
|
:left_leaves,
|
99
111
|
:right_leaves,
|
100
|
-
:
|
112
|
+
:all_sibling_leaves,
|
113
|
+
:each_sibling_leaf_set,
|
101
114
|
:parent_leaves,
|
115
|
+
:non_parent_leaves,
|
102
116
|
:other_leaves
|
103
117
|
|
104
118
|
# @param node [NewickNode] a NewickNode from a NewickTree
|
@@ -107,19 +121,22 @@ module TreeClusters
|
|
107
121
|
@name = node.name
|
108
122
|
@all_leaves = descendant_leaves node
|
109
123
|
|
110
|
-
children = node.children
|
111
|
-
|
112
|
-
"Not a bifurcating tree (See: #{node.name})"
|
113
|
-
lchild, rchild = node.children
|
124
|
+
if (children = node.children).count == 2
|
125
|
+
lchild, rchild = node.children
|
114
126
|
|
115
|
-
|
127
|
+
@left_leaves = descendant_leaves lchild
|
116
128
|
|
117
|
-
|
129
|
+
@right_leaves = descendant_leaves rchild
|
130
|
+
end
|
118
131
|
|
119
132
|
siblings = node.siblings
|
120
|
-
assert siblings.count == 1,
|
121
|
-
|
122
|
-
|
133
|
+
# assert siblings.count == 1,
|
134
|
+
# "Node #{node.name} has more than one sibling."
|
135
|
+
|
136
|
+
@each_sibling_leaf_set = siblings.
|
137
|
+
map { |node| descendant_leaves node }
|
138
|
+
|
139
|
+
@all_sibling_leaves = @each_sibling_leaf_set.flatten.uniq
|
123
140
|
|
124
141
|
parent = node.parent
|
125
142
|
assert parent,
|
@@ -128,6 +145,9 @@ module TreeClusters
|
|
128
145
|
|
129
146
|
@other_leaves =
|
130
147
|
Object::Set.new(tree.taxa) - Object::Set.new(all_leaves)
|
148
|
+
|
149
|
+
@non_parent_leaves =
|
150
|
+
Object::Set.new(tree.taxa) - Object::Set.new(parent_leaves)
|
131
151
|
end
|
132
152
|
|
133
153
|
# Compares two Clades field by field.
|
@@ -140,7 +160,8 @@ module TreeClusters
|
|
140
160
|
self.all_leaves == clade.all_leaves &&
|
141
161
|
self.left_leaves == clade.left_leaves &&
|
142
162
|
self.right_leaves == clade.right_leaves &&
|
143
|
-
self.
|
163
|
+
self.all_sibling_leaves == clade.all_sibling_leaves &&
|
164
|
+
self.each_sibling_leaf_set == clade.each_sibling_leaf_set &&
|
144
165
|
self.parent_leaves == clade.parent_leaves &&
|
145
166
|
self.other_leaves == clade.other_leaves
|
146
167
|
)
|
@@ -0,0 +1 @@
|
|
1
|
+
((g1,g2,g3)cluster3,(g4,g5,g6)cluster2,(g7,g8,g9)cluster1)cluster4;
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tree_clusters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Moore
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-11-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -133,7 +133,8 @@ files:
|
|
133
133
|
- bin/setup
|
134
134
|
- lib/tree_clusters.rb
|
135
135
|
- lib/tree_clusters/version.rb
|
136
|
-
- test_files/
|
136
|
+
- test_files/non_bifurcating.aln
|
137
|
+
- test_files/non_bifurcating.tre
|
137
138
|
- test_files/test.tre
|
138
139
|
- tree_clusters.gemspec
|
139
140
|
homepage: https://github.com/mooreryan/tree_clusters
|
data/test_files/test.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
# Require the library
|
2
|
-
require "tree_clusters"
|
3
|
-
|
4
|
-
# Make the TreeClusters methods available under the namespace
|
5
|
-
# TreeClusters
|
6
|
-
TreeClusters.extend TreeClusters
|
7
|
-
|
8
|
-
# Read in the Newick formatted tree
|
9
|
-
tree = NewickTree.fromFile ARGV.first
|
10
|
-
|
11
|
-
# Iterate through all the clades
|
12
|
-
TreeClusters.all_clades(tree).each do |clade|
|
13
|
-
# Print out the clade name and the names of all leaves in that clade
|
14
|
-
printf "%s\t%s\n", clade.name, clade.all_leaves.join(", ")
|
15
|
-
end
|