genfrag 0.0.0.1 → 0.0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +7 -2
- data/README.rdoc +304 -3
- data/lib/genfrag.rb +1 -1
- data/lib/genfrag/app.rb +3 -1
- data/lib/genfrag/app/command.rb +2 -2
- data/lib/genfrag/app/search_command.rb +54 -15
- data/lib/genfrag/app/search_command/match.rb +30 -40
- data/spec/genfrag/app/search_command/predictor_spec.rb +24 -0
- data/spec/genfrag/app_spec.rb +2 -3
- data/spec/genfrag_spec.rb +1 -1
- data/tasks/rdoc.rake +4 -3
- data/tasks/setup.rb +11 -19
- metadata +5 -4
data/History.txt
CHANGED
data/README.rdoc
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
Genfrag version 0.0.0.
|
1
|
+
Genfrag version 0.0.0.2
|
2
2
|
by Pjotr Prins and Trevor Wennblom
|
3
3
|
http://genfrag.rubyforge.org
|
4
|
-
|
4
|
+
http://rubyforge.org/projects/genfrag/
|
5
5
|
|
6
6
|
|
7
7
|
== DESCRIPTION:
|
8
8
|
|
9
|
-
This is a development release.
|
9
|
+
This is a development release. Some features are functional at this time.
|
10
10
|
|
11
11
|
Genfrag allows for rapid in-silico searching of fragments cut by
|
12
12
|
different restriction enzymes in large nucleotide acid databases,
|
@@ -33,6 +33,307 @@ This works
|
|
33
33
|
* sudo gem install genfrag
|
34
34
|
|
35
35
|
|
36
|
+
== EXAMPLES:
|
37
|
+
|
38
|
+
=== Index command
|
39
|
+
|
40
|
+
=== Search command
|
41
|
+
|
42
|
+
==== Example 1
|
43
|
+
|
44
|
+
Return all sequences from the file 'example.fasta.tdf' that are referenced by the index 'example.fasta_bstyi_msei_index.tdf'
|
45
|
+
|
46
|
+
genfrag search -f example.fasta --re5 BstYI --re3 MseI -v
|
47
|
+
|
48
|
+
Only one entry from output is shown below.
|
49
|
+
|
50
|
+
---
|
51
|
+
- sequence
|
52
|
+
gattgcaacaatcgctttggaggatgtaattgtgcaattggccaatgcacaaatcgacaatgtccttgttttgctgctaatcgtgaatgcgatccagatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttttaattggggtgcatttacatgggactctcttaaaaagaatgagtatctcggagaatatactggagaactgatcactcatgatgaagctaatgagcgtgggagaatagaagatcggattggttcttcctacctctttaccttgaatgatca
|
53
|
+
- sequence size
|
54
|
+
380
|
55
|
+
- fragment - primary strand
|
56
|
+
gatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttt..
|
57
|
+
- fragment - complement strand
|
58
|
+
....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttattatttttctaagagtaacctttcagactacaagtacctaagtaccaaaat
|
59
|
+
- fragment with adapters - primary strand
|
60
|
+
gatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttt..
|
61
|
+
- fragment with adapters - complement strand
|
62
|
+
....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttattatttttctaagagtaacctttcagactacaagtacctaagtaccaaaat
|
63
|
+
|
64
|
+
The first cut is made using RE5 (restriction enzyme with first match in reference to 5') BstYI. BstYI has the cut patten
|
65
|
+
5' - r^g a t c y - 3'
|
66
|
+
3' - y c t a g^r - 5'
|
67
|
+
|
68
|
+
The first 96bp of the sequence are removed when BstYI makes its cut, starting the strand fragment. The primary strand
|
69
|
+
fragment begins with 'gatctttgtc', four bases are lost from the complement strand due to the cut pattern of BstYI, therefore 'gatc'
|
70
|
+
from the primary strand has no hydrogen bonds with the complement strand. These missing nucleotides are represented with a period
|
71
|
+
('.').
|
72
|
+
|
73
|
+
The second cut is made using RE3 (restriction enzyme with first match in reference to 3') MseI. MseI has the cut pattern
|
74
|
+
5' - t^t a a - 3'
|
75
|
+
3' - a a t^t - 5'
|
76
|
+
|
77
|
+
This leaves a final fragment of 136bp. The way MseI cuts will leave the complement strand two nucleotides longer than the primary
|
78
|
+
strand. This is represented on the primary stand with two periods.
|
79
|
+
|
80
|
+
|
81
|
+
==== Example 2
|
82
|
+
|
83
|
+
This demonstrates using an adapter.
|
84
|
+
|
85
|
+
genfrag search -f example.fasta --re5 BstYI --re3 MseI -v --adapter5 t
|
86
|
+
|
87
|
+
---
|
88
|
+
- sequence
|
89
|
+
gattgcaacaatcgctttggaggatgtaattgtgcaattggccaatgcacaaatcgacaatgtccttgttttgctgctaatcgtgaatgcgatccagatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttttaattggggtgcatttacatgggactctcttaaaaagaatgagtatctcggagaatatactggagaactgatcactcatgatgaagctaatgagcgtgggagaatagaagatcggattggttcttcctacctctttaccttgaatgatca
|
90
|
+
- sequence size
|
91
|
+
380
|
92
|
+
- fragment - primary strand
|
93
|
+
gatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttt..
|
94
|
+
- fragment - complement strand
|
95
|
+
....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttattatttttctaagagtaacctttcagactacaagtacctaagtaccaaaat
|
96
|
+
- fragment with adapters - primary strand
|
97
|
+
+++++ttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttt..
|
98
|
+
- fragment with adapters - complement strand
|
99
|
+
....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttattatttttctaagagtaacctttcagactacaagtacctaagtaccaaaat
|
100
|
+
|
101
|
+
The adapter can be considered an extension to the restriction enzyme. When searching for a specified adapter, anything that
|
102
|
+
the restriction enzyme would need to make its match is first ignored before comparing the adapter to the sequence.
|
103
|
+
|
104
|
+
It was shown previously that BstYI has the cut patten
|
105
|
+
5' - r^g a t c y - 3'
|
106
|
+
3' - y c t a g^r - 5'
|
107
|
+
|
108
|
+
The 'y' symbol indicates a nucleotide of 't' or 'c'.[Footnote 1] Adapter5 is defined as the nucleotide 't' in this example.
|
109
|
+
5 nucleotides from the restriction enzyme are matched ('gatct') as indicated by the plus ('+') symbols, then the 1 nucleotide
|
110
|
+
from the adapter is matched ('t').
|
111
|
+
|
112
|
+
Note that in this current version of Genfrag only the primary strand has the plus symbols applied. In a future version
|
113
|
+
the complement strand would have a plus symbol in place of the initial 'a'.
|
114
|
+
|
115
|
+
|
116
|
+
==== Example 3
|
117
|
+
|
118
|
+
The previous example with a longer adapter.
|
119
|
+
|
120
|
+
genfrag search -f example.fasta --re5 BstYI --re3 MseI -v --adapter5 ttgtcg
|
121
|
+
|
122
|
+
---
|
123
|
+
- sequence
|
124
|
+
gattgcaacaatcgctttggaggatgtaattgtgcaattggccaatgcacaaatcgacaatgtccttgttttgctgctaatcgtgaatgcgatccagatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttttaattggggtgcatttacatgggactctcttaaaaagaatgagtatctcggagaatatactggagaactgatcactcatgatgaagctaatgagcgtgggagaatagaagatcggattggttcttcctacctctttaccttgaatgatca
|
125
|
+
- sequence size
|
126
|
+
380
|
127
|
+
- fragment - primary strand
|
128
|
+
gatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttt..
|
129
|
+
- fragment - complement strand
|
130
|
+
....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttattatttttctaagagtaacctttcagactacaagtacctaagtaccaaaat
|
131
|
+
- fragment with adapters - primary strand
|
132
|
+
+++++ttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttt..
|
133
|
+
- fragment with adapters - complement strand
|
134
|
+
....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttattatttttctaagagtaacctttcagactacaagtacctaagtaccaaaat
|
135
|
+
|
136
|
+
|
137
|
+
==== Example 4
|
138
|
+
|
139
|
+
This demonstrates Adapter3.
|
140
|
+
|
141
|
+
genfrag search -f example.fasta --re5 BstYI --re3 MseI -v --adapter3 aacca
|
142
|
+
|
143
|
+
---
|
144
|
+
- sequence
|
145
|
+
gattgcaacaatcgctttggaggatgtaattgtgcaattggccaatgcacaaatcgacaatgtccttgttttgctgctaatcgtgaatgcgatccagatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttttaattggggtgcatttacatgggactctcttaaaaagaatgagtatctcggagaatatactggagaactgatcactcatgatgaagctaatgagcgtgggagaatagaagatcggattggttcttcctacctctttaccttgaatgatca
|
146
|
+
- sequence size
|
147
|
+
380
|
148
|
+
- fragment - primary strand
|
149
|
+
gatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttt..
|
150
|
+
- fragment - complement strand
|
151
|
+
....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttattatttttctaagagtaacctttcagactacaagtacctaagtaccaaaat
|
152
|
+
- fragment with adapters - primary strand
|
153
|
+
gatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggtt+..
|
154
|
+
- fragment with adapters - complement strand
|
155
|
+
....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttattatttttctaagagtaacctttcagactacaagtacctaagtaccaaaat
|
156
|
+
|
157
|
+
It was shown previously that MseI has the cut patten
|
158
|
+
5' - t^t a a - 3'
|
159
|
+
3' - a a t^t - 5'
|
160
|
+
|
161
|
+
Looking at primary strand fragment, the ending nucleotide remaining that has also been used by the restriction enzyme to
|
162
|
+
match is 't'. When the Adapter3 filter is made, the restriction enzyme match will replace the 't' with a plus symbol.
|
163
|
+
|
164
|
+
An end of the primary strand is
|
165
|
+
5' - atggattcatggtt+.. - 3'
|
166
|
+
|
167
|
+
If that end is reversed and complemented, 'aaca' is the initial four nucleotides that match.
|
168
|
+
|
169
|
+
Note that in this current version of Genfrag only the primary strand has the plus symbols applied. In a future version
|
170
|
+
the complement strand would have a plus symbol in place of the final 'aat'.
|
171
|
+
|
172
|
+
|
173
|
+
==== Example 5
|
174
|
+
|
175
|
+
The previous example with Adapter3 using alternate notation.
|
176
|
+
|
177
|
+
genfrag search -f example.fasta --re5 BstYI --re3 MseI -v --adapter3 _tggtt
|
178
|
+
|
179
|
+
---
|
180
|
+
- sequence
|
181
|
+
gattgcaacaatcgctttggaggatgtaattgtgcaattggccaatgcacaaatcgacaatgtccttgttttgctgctaatcgtgaatgcgatccagatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttttaattggggtgcatttacatgggactctcttaaaaagaatgagtatctcggagaatatactggagaactgatcactcatgatgaagctaatgagcgtgggagaatagaagatcggattggttcttcctacctctttaccttgaatgatca
|
182
|
+
- sequence size
|
183
|
+
380
|
184
|
+
- fragment - primary strand
|
185
|
+
gatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttt..
|
186
|
+
- fragment - complement strand
|
187
|
+
....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttattatttttctaagagtaacctttcagactacaagtacctaagtaccaaaat
|
188
|
+
- fragment with adapters - primary strand
|
189
|
+
gatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggtt+..
|
190
|
+
- fragment with adapters - complement strand
|
191
|
+
....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttattatttttctaagagtaacctttcagactacaagtacctaagtaccaaaat
|
192
|
+
|
193
|
+
If Adapter3 is supplied with an initial underscore ('_') in the sequence, the sequence is matched directly without a
|
194
|
+
reverse complement.
|
195
|
+
|
196
|
+
|
197
|
+
==== Example 6
|
198
|
+
|
199
|
+
Using two adapters together.
|
200
|
+
|
201
|
+
genfrag search -f example.fasta --re5 BstYI --re3 MseI -v --adapter5 ttgtcg --adapter3 aacca
|
202
|
+
|
203
|
+
---
|
204
|
+
- fragment with adapters - primary strand
|
205
|
+
+++++ttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggtt+..
|
206
|
+
- fragment with adapters - complement strand
|
207
|
+
....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttattatttttctaagagtaacctttcagactacaagtacctaagtaccaaaat
|
208
|
+
|
209
|
+
Note that in this current version of Genfrag only the primary strand has the plus symbols applied. In a future version
|
210
|
+
the complement strand would have a plus symbol in place of the initial 'a' and the final 'aat'.
|
211
|
+
|
212
|
+
|
213
|
+
==== Example 7
|
214
|
+
|
215
|
+
Using an adapter and specifying an adapter sequence.
|
216
|
+
|
217
|
+
You may have particular adapter sequences that you have used. These can be specified with 'adapter5-sequence' or 'adapter3-sequence'.
|
218
|
+
Note that 'adapter3-sequence' will be reversed when applied to the primary strand. Any change to the sequence caused
|
219
|
+
by the adapter sequence will be noted with an equals ('=') symbol.
|
220
|
+
|
221
|
+
genfrag search -f example.fasta --re5 BstYI --re3 MseI -v --adapter5 ttgtcg --adapter3 aacca --adapter5-sequence NXNXNXNX --adapter3-sequence NZNZNZNZ
|
222
|
+
|
223
|
+
---
|
224
|
+
- sequence
|
225
|
+
gattgcaacaatcgctttggaggatgtaattgtgcaattggccaatgcacaaatcgacaatgtccttgttttgctgctaatcgtgaatgcgatccagatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttttaattggggtgcatttacatgggactctcttaaaaagaatgagtatctcggagaatatactggagaactgatcactcatgatgaagctaatgagcgtgggagaatagaagatcggattggttcttcctacctctttaccttgaatgatca
|
226
|
+
- sequence size
|
227
|
+
380
|
228
|
+
- fragment - primary strand
|
229
|
+
gatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttt..
|
230
|
+
- fragment - complement strand
|
231
|
+
....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttattatttttctaagagtaacctttcagactacaagtacctaagtaccaaaat
|
232
|
+
- fragment with adapters - primary strand
|
233
|
+
NXNXNXNXttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttZNZNZNZN
|
234
|
+
- fragment with adapters - complement strand
|
235
|
+
===....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttattatttttctaagagtaacctttcagactacaagtacctaagtaccaaaat=====
|
236
|
+
|
237
|
+
|
238
|
+
==== Example 8
|
239
|
+
|
240
|
+
The previous example but with short adapter sequences.
|
241
|
+
|
242
|
+
genfrag search -f example.fasta --re5 BstYI --re3 MseI --adapter5 ttgtcg --adapter3 aacca --adapter5-sequence X --adapter3-sequence Z
|
243
|
+
|
244
|
+
---
|
245
|
+
- fragment with adapters - primary strand
|
246
|
+
====XttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttZ==
|
247
|
+
- fragment with adapters - complement strand
|
248
|
+
....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttattatttttctaagagtaacctttcagactacaagtacctaagtaccaaaat
|
249
|
+
|
250
|
+
|
251
|
+
==== Example 9
|
252
|
+
|
253
|
+
Using an adapter and specifying an adapter size, these can be specified with 'adapter5-size' or 'adapter3-size'.
|
254
|
+
|
255
|
+
You may know the size of your adapter, but not have a particular sequence in mind. The unknown nucleotides will be represented
|
256
|
+
with a question mark character ('?').
|
257
|
+
|
258
|
+
genfrag search -f example.fasta --re5 BstYI --re3 MseI --adapter5 ttgtcg --adapter3 aacca --adapter5-size 6 --adapter3-size 8
|
259
|
+
|
260
|
+
---
|
261
|
+
- fragment with adapters - primary strand
|
262
|
+
????????ttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggtt??????
|
263
|
+
- fragment with adapters - complement strand
|
264
|
+
===....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttattatttttctaagagtaacctttcagactacaagtacctaagtaccaaaat===
|
265
|
+
|
266
|
+
|
267
|
+
==== Example 10
|
268
|
+
|
269
|
+
The previous example but with short adapter sizes.
|
270
|
+
|
271
|
+
genfrag search -f example.fasta --re5 BstYI --re3 MseI --adapter5 ttgtcg --adapter3 aacca --adapter5-size 1 --adapter3-size 2
|
272
|
+
|
273
|
+
---
|
274
|
+
- fragment with adapters - primary strand
|
275
|
+
====?ttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggtt??=
|
276
|
+
- fragment with adapters - complement strand
|
277
|
+
....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttattatttttctaagagtaacctttcagactacaagtacctaagtaccaaaat
|
278
|
+
|
279
|
+
|
280
|
+
==== Example 11
|
281
|
+
|
282
|
+
An exact fragmentation length can be searched for with the 'seqsize' argument.
|
283
|
+
|
284
|
+
genfrag search -f example.fasta --re5 BstYI --re3 MseI -s 136
|
285
|
+
|
286
|
+
---
|
287
|
+
- fragment with adapters - primary strand
|
288
|
+
gatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttt..
|
289
|
+
- fragment with adapters - complement strand
|
290
|
+
....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttattatttttctaagagtaacctttcagactacaagtacctaagtaccaaaat
|
291
|
+
|
292
|
+
|
293
|
+
==== Example 12
|
294
|
+
|
295
|
+
The previous example with multiple fragment result sizes accepted. Different sizes can be separated by commas.
|
296
|
+
|
297
|
+
genfrag search -f example.fasta --re5 BstYI --re3 MseI -s 136,166
|
298
|
+
|
299
|
+
---
|
300
|
+
- fragment with adapters - primary strand
|
301
|
+
gatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaattcctccttcaaaccaataaaaagattctcattggaaagtctgatgttcatggatggggtgcatttacatgggactctct..
|
302
|
+
- fragment with adapters - complement strand
|
303
|
+
....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttaaggaggaagtttggttatttttctaagagtaacctttcagactacaagtacctaccccacgtaaatgtaccctgagagaat
|
304
|
+
---
|
305
|
+
- fragment with adapters - primary strand
|
306
|
+
gatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttt..
|
307
|
+
- fragment with adapters - complement strand
|
308
|
+
....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttattatttttctaagagtaacctttcagactacaagtacctaagtaccaaaat
|
309
|
+
|
310
|
+
|
311
|
+
==== Example 13
|
312
|
+
|
313
|
+
The previous example with a sequence size range accepted. Since you may only have an approximate idea of the fragment size
|
314
|
+
you are expecting, you may give a range by using a plus symbol ('+') to indicate a tolerance to a size.
|
315
|
+
|
316
|
+
genfrag search -f example.fasta --re5 BstYI --re3 MseI -s 144+10,166
|
317
|
+
|
318
|
+
---
|
319
|
+
- fragment with adapters - primary strand
|
320
|
+
gatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaattcctccttcaaaccaataaaaagattctcattggaaagtctgatgttcatggatggggtgcatttacatgggactctct..
|
321
|
+
- fragment with adapters - complement strand
|
322
|
+
....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttaaggaggaagtttggttatttttctaagagtaacctttcagactacaagtacctaccccacgtaaatgtaccctgagagaat
|
323
|
+
---
|
324
|
+
- fragment with adapters - primary strand
|
325
|
+
gatctttgtcggagttgtcctcttagctgtggagatggcactcttggtgagacaccagtgcaaatccaatgcaagaacatgcaataataaaaagattctcattggaaagtctgatgttcatggattcatggttt..
|
326
|
+
- fragment with adapters - complement strand
|
327
|
+
....aaacagcctcaacaggagaatcgacacctctaccgtgagaaccactctgtggtcacgtttaggttacgttcttgtacgttattatttttctaagagtaacctttcagactacaagtacctaagtaccaaaat
|
328
|
+
|
329
|
+
|
330
|
+
==== Footnotes
|
331
|
+
[1]:
|
332
|
+
require 'rubygems'
|
333
|
+
require 'bio'
|
334
|
+
puts Bio::Sequence::NA.new('y').to_re # => (?-mix:[tcy])
|
335
|
+
|
336
|
+
|
36
337
|
== LICENSE:
|
37
338
|
|
38
339
|
Copyright (c) 2009 Pjotr Prins and Trevor Wennblom
|
data/lib/genfrag.rb
CHANGED
data/lib/genfrag/app.rb
CHANGED
data/lib/genfrag/app/command.rb
CHANGED
@@ -89,9 +89,9 @@ class Command
|
|
89
89
|
lambda { |value|
|
90
90
|
options[:filefasta] = value
|
91
91
|
}],
|
92
|
-
:
|
92
|
+
:seqsize => ['-s', '--seqsize SIZE', Array, '',
|
93
93
|
lambda { |value|
|
94
|
-
options[:
|
94
|
+
options[:seqsize] = value
|
95
95
|
}],
|
96
96
|
|
97
97
|
:adapter5 => ['-y', '--adapter5 ADAPTER', String, '',
|
@@ -45,7 +45,7 @@ class SearchCommand < Command
|
|
45
45
|
ary = [:verbose, :quiet, :tracktime, :indir, :outdir, :sqlite, :re5, :re3,
|
46
46
|
:filelookup, :filefasta, :fileadapters, :adapter5_sequence, :adapter3_sequence,
|
47
47
|
:adapter5_size, :adapter3_size, :named_adapter5, :named_adapter3,
|
48
|
-
:adapter5, :adapter3
|
48
|
+
:adapter5, :adapter3, :seqsize
|
49
49
|
]
|
50
50
|
ary.each { |a| opts.on(*std_opts[a]) }
|
51
51
|
|
@@ -54,10 +54,11 @@ class SearchCommand < Command
|
|
54
54
|
opts.on( '-h', '--help', 'show this message' ) { @out.puts opts; exit }
|
55
55
|
|
56
56
|
opts.separator ' Examples:'
|
57
|
+
opts.separator ' genfrag search -f example.fasta --re5 BstYI --re3 MseI -v'
|
57
58
|
opts.separator ' genfrag search -f example.fasta --re5 BstYI --re3 MseI --adapter5 tt'
|
58
59
|
opts.separator ' genfrag search -f example.fasta --re5 BstYI --re3 MseI --add 26 --adapter5 ct --adapter3 aa --size 190,215'
|
59
60
|
opts.separator ' genfrag search -f example.fasta --re5 BstYI --re3 MseI --adapter5-size 11 --adapter5 tt --adapter3-size 15 --size 168'
|
60
|
-
opts.separator ' genfrag search -f example.fasta --re5 BstYI --re3 MseI --adapter5-sequence GACTGCGTAGTGATC --adapter5 tt --
|
61
|
+
opts.separator ' genfrag search -f example.fasta --re5 BstYI --re3 MseI --adapter5-sequence GACTGCGTAGTGATC --adapter5 tt --size 168'
|
61
62
|
opts.separator ' genfrag search -f example.fasta --re5 BstYI --re3 MseI --adapter5-size 11 --adapter5 ct --adapter3-size 15 --adapter3 aa --size 190,215'
|
62
63
|
opts.separator ' genfrag search -f example.fasta --re5 BstYI --re3 MseI --add 26 --named-adapter5 BstYI-T4 --named-adapter3 MseI-21 --size 190,215'
|
63
64
|
opts
|
@@ -122,7 +123,7 @@ class SearchCommand < Command
|
|
122
123
|
@ops.sqlite ||= false
|
123
124
|
@ops.re5 ||= nil
|
124
125
|
@ops.re3 ||= nil
|
125
|
-
@ops.
|
126
|
+
@ops.seqsize ||= [0]
|
126
127
|
@ops.adapter5_size ||= nil
|
127
128
|
@ops.adapter3_size ||= nil
|
128
129
|
@ops.adapter5 ||= nil
|
@@ -158,6 +159,37 @@ END
|
|
158
159
|
raise ArgumentError, "Must specify --fileadapters when using a named_adapter"
|
159
160
|
end
|
160
161
|
|
162
|
+
if @ops.adapter5_size and @ops.adapter5_sequence
|
163
|
+
raise ArgumentError, '--adapter5-sequence and --adapter5-size both supplied, may only have one'
|
164
|
+
end
|
165
|
+
if @ops.adapter3_size and @ops.adapter3_sequence
|
166
|
+
raise ArgumentError, '--adapter3-sequence and --adapter3-size both supplied, may only have one'
|
167
|
+
end
|
168
|
+
|
169
|
+
if (@ops.adapter5_sequence or @ops.adapter5_size) and !@ops.adapter5
|
170
|
+
raise ArgumentError, '--adapter5 missing in presence of --adapter5-sequence or --adapter5-size'
|
171
|
+
end
|
172
|
+
if (@ops.adapter3_sequence or @ops.adapter3_size) and !@ops.adapter3
|
173
|
+
raise ArgumentError, '--adapter3 missing in presence of --adapter3-sequence or --adapter3-size'
|
174
|
+
end
|
175
|
+
|
176
|
+
if [@ops.seqsize].flatten == [0] or [@ops.seqsize].flatten == [nil] or [@ops.seqsize].flatten == ['0']
|
177
|
+
@ops.seqsize = nil
|
178
|
+
else
|
179
|
+
h = {:ranges => [], :ints => []}
|
180
|
+
@ops.seqsize.flatten.each do |s|
|
181
|
+
if s.include?('+')
|
182
|
+
a = s.split('+')
|
183
|
+
c = a[0].to_i
|
184
|
+
r = a[1].to_i
|
185
|
+
h[:ranges] << (c-r..c+r)
|
186
|
+
else
|
187
|
+
h[:ints] << s.to_i
|
188
|
+
end
|
189
|
+
end
|
190
|
+
@ops.seqsize = h
|
191
|
+
end
|
192
|
+
|
161
193
|
if processed_adapters
|
162
194
|
adapter_setup_1(processed_adapters)
|
163
195
|
else
|
@@ -171,13 +203,6 @@ END
|
|
171
203
|
seq3 = Bio::Sequence::NA.new(@adapters[:adapter3_specificity][1..-1]).downcase
|
172
204
|
@adapters[:adapter3_specificity] = seq3.complement.to_s
|
173
205
|
end
|
174
|
-
|
175
|
-
if @ops.adapter5_size and @ops.adapter5_sequence and (@ops.adapter5_size != @adapters[:adapter5_size])
|
176
|
-
raise ArgumentError, "--adapter5-sequence and --adapter5-size both supplied"
|
177
|
-
end
|
178
|
-
if @ops.adapter3_size and @ops.adapter3_sequence and (@ops.adapter3_size != @adapters[:adapter3_size])
|
179
|
-
raise ArgumentError, "--adapter3-sequence and --adapter3-size both supplied"
|
180
|
-
end
|
181
206
|
|
182
207
|
@trim = calculate_trim_for_nucleotides(@re5_ds, @re3_ds)
|
183
208
|
|
@@ -185,11 +210,10 @@ END
|
|
185
210
|
# Start calculations
|
186
211
|
#
|
187
212
|
left_trim, right_trim = calculate_left_and_right_trims(@trim)
|
188
|
-
|
189
|
-
matching_fragments = find_matching_fragments(@sizes, left_trim, right_trim)
|
213
|
+
|
190
214
|
results = []
|
191
215
|
|
192
|
-
|
216
|
+
@sizes.values.each do |hit|
|
193
217
|
hit.each do |entry|
|
194
218
|
seq = @sequences[entry[:fasta_id]][:sequence]
|
195
219
|
raw_frag = seq[entry[:offset]..(entry[:offset]+entry[:raw_size]-1)]
|
@@ -199,7 +223,7 @@ END
|
|
199
223
|
p = primary_frag.dup
|
200
224
|
c = complement_frag.dup
|
201
225
|
|
202
|
-
# note the next two if-statements at this
|
226
|
+
# note the next two if-statements at this level chain together with 'p' and 'c'
|
203
227
|
if @adapters[:adapter5_specificity]
|
204
228
|
p, c = matches_adapter(5, p, c, raw_frag, @trim)
|
205
229
|
next if !p # next if returned false -- no match
|
@@ -212,8 +236,23 @@ END
|
|
212
236
|
|
213
237
|
primary_frag_with_adapters = p
|
214
238
|
complement_frag_with_adapters = c
|
239
|
+
|
240
|
+
if @ops.seqsize
|
241
|
+
primary_frag_with_adapters_size = primary_frag_with_adapters.size
|
242
|
+
good = false
|
243
|
+
if @ops.seqsize[:ints].include?(primary_frag_with_adapters_size)
|
244
|
+
good = true
|
245
|
+
else
|
246
|
+
@ops.seqsize[:ranges].each do |range|
|
247
|
+
good = true if range.include?(primary_frag_with_adapters_size)
|
248
|
+
break if good
|
249
|
+
end
|
250
|
+
end
|
251
|
+
# next if fragment size not in range
|
252
|
+
next if !good
|
253
|
+
end
|
215
254
|
|
216
|
-
results << {:raw_frag => raw_frag, :primary_frag => primary_frag, :primary_frag_with_adapters => primary_frag_with_adapters, :complement_frag => complement_frag, :complement_frag_with_adapters => complement_frag_with_adapters, :entry => entry, :seq => seq}
|
255
|
+
results << {:raw_frag => raw_frag, :primary_frag => primary_frag, :primary_frag_with_adapters => primary_frag_with_adapters, :complement_frag => complement_frag, :complement_frag_with_adapters => complement_frag_with_adapters, :entry => entry, :seq => seq}
|
217
256
|
end
|
218
257
|
end
|
219
258
|
|
@@ -26,6 +26,7 @@ class SearchCommand < Command
|
|
26
26
|
primary_frag =~ /(\.*)/
|
27
27
|
dots_on_primary = $1.size
|
28
28
|
lead_in = tail.size + dots_on_primary
|
29
|
+
|
29
30
|
return false if primary_frag[ lead_in .. -1 ].tr('.', '') !~ /^#{adapter_specificity}/i
|
30
31
|
|
31
32
|
elsif five_or_three == 3
|
@@ -54,70 +55,41 @@ class SearchCommand < Command
|
|
54
55
|
raise "First argument to matches_adapter must be a '5' or a '3'. Received: #{five_or_three.inspect}"
|
55
56
|
end
|
56
57
|
|
57
|
-
#return false if raw_frag[ [trim_primary, trim_complement].max .. -1 ] !~ /^#{adapter_specificity}/i
|
58
|
-
|
59
|
-
#overhang = [trim_primary, trim_complement].max - [trim_primary, trim_complement].min
|
60
|
-
|
61
|
-
#lead_in = overhang
|
62
|
-
|
63
58
|
if adapter_sequence
|
64
|
-
|
65
|
-
|
66
|
-
# if lead_in >= adapter_sequence.size
|
67
|
-
# # need to preserve dots on primary string
|
68
|
-
# new_primary_frag = ('.' * (lead_in - adapter_sequence.size)) + adapter_sequence + primary_frag[ lead_in .. -1 ]
|
69
|
-
# new_complement_frag = complement_frag
|
70
|
-
# else
|
71
|
-
# # need to add dots to beginning of complement string
|
72
|
-
# new_primary_frag = adapter_sequence + primary_frag[ lead_in .. -1 ]
|
73
|
-
# new_complement_frag = ('.' * (adapter_sequence.size - lead_in) ) + complement_frag
|
74
|
-
# end
|
75
|
-
|
59
|
+
# adapter-sequence supplied
|
60
|
+
new_primary_frag, new_complement_frag = preserve_or_add(adapter_sequence.size, lead_in, adapter_sequence, primary_frag, complement_frag)
|
76
61
|
elsif adapter_size
|
77
|
-
|
78
|
-
|
79
|
-
# # only the size and the specificity of the adapter has been provided
|
80
|
-
# size_of_specificity = adapter_specificity.size
|
81
|
-
# size_of_sequence = adapter_size - size_of_specificity
|
82
|
-
# if lead_in >= size_of_sequence
|
83
|
-
# # need to preserve dots on primary string
|
84
|
-
# new_primary_frag = primary_frag[ 0 .. (lead_in - 1) ].upcase + primary_frag[ lead_in .. -1 ]
|
85
|
-
# new_complement_frag = complement_frag
|
86
|
-
# else
|
87
|
-
# # need to add dots to beginning of complement string
|
88
|
-
# new_primary_frag = ('+' * (size_of_sequence - lead_in) ) + primary_frag[ 0 .. (lead_in - 1) ].upcase + primary_frag[ lead_in .. -1 ]
|
89
|
-
# new_complement_frag = ('.' * (size_of_sequence - lead_in) ) + complement_frag
|
90
|
-
# end
|
91
|
-
|
62
|
+
# adapter-size supplied
|
63
|
+
new_primary_frag, new_complement_frag = preserve_or_add(adapter_size, lead_in, adapter_sequence, primary_frag, complement_frag)
|
92
64
|
else
|
93
65
|
# only the specificity has been provided
|
94
66
|
new_primary_frag = ('.' * dots_on_primary) + ('+' * tail.size) + primary_frag[ lead_in .. -1 ]
|
95
67
|
new_complement_frag = complement_frag
|
96
|
-
|
97
68
|
end
|
98
69
|
|
99
70
|
if five_or_three == 3
|
100
|
-
new_primary_frag.reverse
|
101
|
-
|
71
|
+
return [new_primary_frag.reverse, new_complement_frag.reverse]
|
72
|
+
else
|
73
|
+
return [new_primary_frag, new_complement_frag]
|
102
74
|
end
|
103
|
-
|
104
|
-
return [new_primary_frag, new_complement_frag]
|
105
75
|
end
|
106
76
|
|
107
77
|
|
78
|
+
=begin
|
108
79
|
# Find the fragments that match the search parameters
|
109
80
|
#
|
110
81
|
def find_matching_fragments(sizes, left, right)
|
111
82
|
hits=[]
|
83
|
+
|
112
84
|
s = (@adapters[:adapter5_size] or 0) + (@adapters[:adapter3_size] or 0)
|
113
85
|
|
114
|
-
if [@ops.
|
86
|
+
if [@ops.seqsize].flatten == [0] or [@ops.seqsize].flatten == [nil] or [@ops.seqsize].flatten == ['0']
|
115
87
|
sizes.each do |raw_size, info|
|
116
88
|
hits << info
|
117
89
|
end
|
118
90
|
|
119
91
|
else
|
120
|
-
[@ops.
|
92
|
+
[@ops.seqsize].flatten.each do |seek_size|
|
121
93
|
seek_size = seek_size.to_i
|
122
94
|
sizes.each do |raw_size, info|
|
123
95
|
frag_size = raw_size - left[:trim_from_both] - right[:trim_from_both]
|
@@ -130,6 +102,7 @@ class SearchCommand < Command
|
|
130
102
|
|
131
103
|
return hits
|
132
104
|
end
|
105
|
+
=end
|
133
106
|
|
134
107
|
def right_tail_of(s)
|
135
108
|
# 'PpiI' => "n n n n n n^n n n n n n n g a a c n n n n n c t c n n n n n n n n n n n n n^n"
|
@@ -157,6 +130,23 @@ class SearchCommand < Command
|
|
157
130
|
end
|
158
131
|
|
159
132
|
end
|
133
|
+
|
134
|
+
def preserve_or_add(size, lead_in, adapter_sequence, primary_frag, complement_frag)
|
135
|
+
if adapter_sequence.nil? or adapter_sequence.empty?
|
136
|
+
adapter_sequence = '?' * size
|
137
|
+
end
|
138
|
+
|
139
|
+
if lead_in >= size
|
140
|
+
# need to preserve dots on primary string
|
141
|
+
p = ('=' * (lead_in - size)) + adapter_sequence + primary_frag[ lead_in .. -1 ]
|
142
|
+
c = complement_frag
|
143
|
+
else
|
144
|
+
# need to add dots to beginning of complement string
|
145
|
+
p = adapter_sequence + primary_frag[ lead_in .. -1 ]
|
146
|
+
c = ('=' * (size - lead_in) ) + complement_frag
|
147
|
+
end
|
148
|
+
[p,c]
|
149
|
+
end
|
160
150
|
|
161
151
|
end # class SearchCommand
|
162
152
|
end # class App
|
@@ -0,0 +1,24 @@
|
|
1
|
+
|
2
|
+
require File.expand_path(
|
3
|
+
File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper]))
|
4
|
+
|
5
|
+
# --------------------------------------------------------------------------
|
6
|
+
describe "Genfrag::App::PredictorCommand" do
|
7
|
+
|
8
|
+
it "should receive a resultset from the search command"
|
9
|
+
|
10
|
+
it "should receive what predictor method to use"
|
11
|
+
|
12
|
+
describe "test adjusted sizes with a resultset" do
|
13
|
+
|
14
|
+
it "should calculate a p-value for every match"
|
15
|
+
|
16
|
+
it "should return p-values and flags for outlier values"
|
17
|
+
|
18
|
+
it "should optionally return the classifiers"
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
# EOF
|
data/spec/genfrag/app_spec.rb
CHANGED
@@ -58,9 +58,8 @@ describe Genfrag::App do
|
|
58
58
|
end
|
59
59
|
|
60
60
|
it 'should report an error for unrecognized commands' do
|
61
|
-
|
62
|
-
@err.readline.should == '
|
63
|
-
@err.readline.should == ' Unknown command "bad_func"'
|
61
|
+
@app.cli_run %w[bad_func]
|
62
|
+
@err.readline.should == 'Unknown command "bad_func"'
|
64
63
|
end
|
65
64
|
|
66
65
|
it 'should report a version number' do
|
data/spec/genfrag_spec.rb
CHANGED
data/tasks/rdoc.rake
CHANGED
@@ -19,10 +19,11 @@ namespace :doc do
|
|
19
19
|
end
|
20
20
|
rd.rdoc_files.push(*files)
|
21
21
|
|
22
|
-
|
23
|
-
|
22
|
+
name = PROJ.name
|
24
23
|
rf_name = PROJ.rubyforge.name
|
25
|
-
|
24
|
+
|
25
|
+
title = "#{name}-#{PROJ.version} Documentation"
|
26
|
+
title = "#{rf_name}'s " + title if rf_name.valid? and rf_name != name
|
26
27
|
|
27
28
|
rd.options << "-t #{title}"
|
28
29
|
rd.options.concat(rdoc.opts)
|
data/tasks/setup.rb
CHANGED
@@ -6,7 +6,7 @@ require 'fileutils'
|
|
6
6
|
require 'ostruct'
|
7
7
|
require 'find'
|
8
8
|
|
9
|
-
class OpenStruct; undef :gem; end
|
9
|
+
class OpenStruct; undef :gem if defined? :gem; end
|
10
10
|
|
11
11
|
# TODO: make my own openstruct type object that includes descriptions
|
12
12
|
# TODO: use the descriptions to output help on the available bones options
|
@@ -124,9 +124,7 @@ import(*rakefiles)
|
|
124
124
|
%w(lib ext).each {|dir| PROJ.libs << dir if test ?d, dir}
|
125
125
|
|
126
126
|
# Setup some constants
|
127
|
-
|
128
|
-
|
129
|
-
DEV_NULL = WIN32 ? 'NUL:' : '/dev/null'
|
127
|
+
DEV_NULL = File.exist?('/dev/null') ? '/dev/null' : 'NUL:'
|
130
128
|
|
131
129
|
def quiet( &block )
|
132
130
|
io = [STDOUT.dup, STDERR.dup]
|
@@ -139,21 +137,15 @@ ensure
|
|
139
137
|
$stdout, $stderr = STDOUT, STDERR
|
140
138
|
end
|
141
139
|
|
142
|
-
DIFF = if
|
143
|
-
else
|
144
|
-
|
145
|
-
|
146
|
-
end unless defined?
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
else '' end
|
152
|
-
end
|
153
|
-
|
154
|
-
RCOV = WIN32 ? 'rcov.bat' : 'rcov'
|
155
|
-
RDOC = WIN32 ? 'rdoc.bat' : 'rdoc'
|
156
|
-
GEM = WIN32 ? 'gem.bat' : 'gem'
|
140
|
+
DIFF = if system("gdiff '#{__FILE__}' '#{__FILE__}' > #{DEV_NULL} 2>&1") then 'gdiff'
|
141
|
+
else 'diff' end unless defined? DIFF
|
142
|
+
|
143
|
+
SUDO = if system("which sudo > #{DEV_NULL} 2>&1") then 'sudo'
|
144
|
+
else '' end unless defined? SUDO
|
145
|
+
|
146
|
+
RCOV = "#{RUBY} -S rcov"
|
147
|
+
RDOC = "#{RUBY} -S rdoc"
|
148
|
+
GEM = "#{RUBY} -S gem"
|
157
149
|
|
158
150
|
%w(rcov spec/rake/spectask rubyforge bones facets/ansicode).each do |lib|
|
159
151
|
begin
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: genfrag
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.0.
|
4
|
+
version: 0.0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pjotr Prins and Trevor Wennblom
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-03-16 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -40,9 +40,9 @@ dependencies:
|
|
40
40
|
requirements:
|
41
41
|
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 2.4.
|
43
|
+
version: 2.4.2
|
44
44
|
version:
|
45
|
-
description: This is a development release.
|
45
|
+
description: This is a development release. Some features are functional at this time. Genfrag allows for rapid in-silico searching of fragments cut by different restriction enzymes in large nucleotide acid databases, followed by matching specificity adapters which allow a further data reduction when looking for differential expression of genes and markers.
|
46
46
|
email: trevor@corevx.com
|
47
47
|
executables:
|
48
48
|
- genfrag
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- spec/genfrag/app/command_spec.rb
|
83
83
|
- spec/genfrag/app/index_command_spec.rb
|
84
84
|
- spec/genfrag/app/search_command/match_spec.rb
|
85
|
+
- spec/genfrag/app/search_command/predictor_spec.rb
|
85
86
|
- spec/genfrag/app/search_command/process_file_spec.rb
|
86
87
|
- spec/genfrag/app/search_command/trim_spec.rb
|
87
88
|
- spec/genfrag/app/search_command_spec.rb
|