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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 814af5b305dc911aa41bb70fc7afd7c5103ca0bc
4
- data.tar.gz: cefdde1e0149b0ccd30b44ae0ae1e2c3646548c9
3
+ metadata.gz: f069c5801fa47b4861acb1ef2468526082c311b6
4
+ data.tar.gz: f865bbcc0da44a648847e9093a4d40511d8eaef1
5
5
  SHA512:
6
- metadata.gz: 5a60b4ab7d3284f2ba2f81b122771868c6f33d4e5f3c2a8d7b36fab6bb234a123587bd7f6db81e7b5190e0c27c6287a58eb745403d9f5abdad5308e2549f59b4
7
- data.tar.gz: 6e649c14f41a250e1150e798d9109f1b96f32445dfb33192c5b361f6ea2078b5e785319b18616cbe41c1c243e74b50aebc55b7e31c01e50faaa65be42d56c044
6
+ metadata.gz: d82b8821ab2205517bb111602bbcc83bbf28091d8503c56332fe78db24ca1681a72d1be21f6272360629fa4e1e48872e4447ba65cd4c5c2f5971ebc90652b1da
7
+ data.tar.gz: 694d9b68a945546b912ba998b817964cc98e1086d2ca2bd3933311834b26649c4ec0b66b26ac0889c76347c7167de8d0d50a6dba642c637e6353b58055b329cb
data/.gitignore CHANGED
@@ -8,5 +8,14 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
 
11
+ test_files/pola*
12
+ test_files/rnr*
13
+ test_files/OUTPUT*
14
+ test_files/ignore
15
+
16
+ .DS_Store
17
+
18
+ .ruby-*
19
+
11
20
  # rspec failure tracking
12
21
  .rspec_status
@@ -1,3 +1,3 @@
1
1
  module TreeClusters
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
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
- # @return [Array<Clade>] array of Clade objects
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.clade_nodes.reverse.map do |node|
35
- Clade.new node, tree
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
- :sibling_leaves,
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
- assert children.count == 2,
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
- @left_leaves = descendant_leaves lchild
127
+ @left_leaves = descendant_leaves lchild
116
128
 
117
- @right_leaves = descendant_leaves rchild
129
+ @right_leaves = descendant_leaves rchild
130
+ end
118
131
 
119
132
  siblings = node.siblings
120
- assert siblings.count == 1,
121
- "Node #{node.name} has more than one sibling."
122
- @sibling_leaves = descendant_leaves siblings.first
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.sibling_leaves == clade.sibling_leaves &&
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,20 @@
1
+ >g1
2
+ AT-C
3
+ >g2
4
+ ATAC
5
+ >g3
6
+ ATGC
7
+
8
+ >g4
9
+ CTGC
10
+ >g5
11
+ CT-C
12
+ >g6
13
+ CTTC
14
+
15
+ >g7
16
+ TA-C
17
+ >g8
18
+ TA-C
19
+ >g9
20
+ TA-C
@@ -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.1.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-10-29 00:00:00.000000000 Z
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/test.rb
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