tree_clusters 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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