seqtrimnext 2.0.29

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.
Files changed (115) hide show
  1. data/History.txt +3 -0
  2. data/Manifest.txt +114 -0
  3. data/PostInstall.txt +7 -0
  4. data/README.rdoc +159 -0
  5. data/Rakefile +38 -0
  6. data/bin/create_graphs.rb +46 -0
  7. data/bin/extract_seqs.rb +45 -0
  8. data/bin/extract_seqs_from_fasta.rb +56 -0
  9. data/bin/extract_seqs_from_fastq.rb +45 -0
  10. data/bin/fasta2fastq.rb +38 -0
  11. data/bin/fastq2fasta.rb +35 -0
  12. data/bin/gen_qual.rb +46 -0
  13. data/bin/get_seq.rb +46 -0
  14. data/bin/group_by_range.rb +17 -0
  15. data/bin/join_ilumina_paired.rb +130 -0
  16. data/bin/parse_amplicons.rb +95 -0
  17. data/bin/parse_json_results.rb +66 -0
  18. data/bin/parse_params.rb +82 -0
  19. data/bin/resume_clusters.rb +48 -0
  20. data/bin/resume_rejected.sh +9 -0
  21. data/bin/reverse_paired.rb +49 -0
  22. data/bin/seqtrimnext +368 -0
  23. data/bin/split_fastq.rb +42 -0
  24. data/bin/split_ilumina_paired.rb +65 -0
  25. data/bin/split_paired.rb +70 -0
  26. data/lib/seqtrimnext/actions/action_ab_adapter.rb +32 -0
  27. data/lib/seqtrimnext/actions/action_ab_far_adapter.rb +32 -0
  28. data/lib/seqtrimnext/actions/action_ab_left_adapter.rb +32 -0
  29. data/lib/seqtrimnext/actions/action_empty_insert.rb +22 -0
  30. data/lib/seqtrimnext/actions/action_ignore_repeated.rb +24 -0
  31. data/lib/seqtrimnext/actions/action_indetermination.rb +30 -0
  32. data/lib/seqtrimnext/actions/action_induced_low_complexity.rb +29 -0
  33. data/lib/seqtrimnext/actions/action_insert.rb +32 -0
  34. data/lib/seqtrimnext/actions/action_is_contaminated.rb +30 -0
  35. data/lib/seqtrimnext/actions/action_key.rb +30 -0
  36. data/lib/seqtrimnext/actions/action_left_adapter.rb +32 -0
  37. data/lib/seqtrimnext/actions/action_left_primer.rb +17 -0
  38. data/lib/seqtrimnext/actions/action_linker.rb +30 -0
  39. data/lib/seqtrimnext/actions/action_low_complexity.rb +30 -0
  40. data/lib/seqtrimnext/actions/action_low_high_size.rb +31 -0
  41. data/lib/seqtrimnext/actions/action_low_quality.rb +33 -0
  42. data/lib/seqtrimnext/actions/action_mid.rb +30 -0
  43. data/lib/seqtrimnext/actions/action_multiple_linker.rb +29 -0
  44. data/lib/seqtrimnext/actions/action_paired_reads.rb +28 -0
  45. data/lib/seqtrimnext/actions/action_poly_a.rb +29 -0
  46. data/lib/seqtrimnext/actions/action_poly_t.rb +29 -0
  47. data/lib/seqtrimnext/actions/action_rem_adit_artifacts.rb +32 -0
  48. data/lib/seqtrimnext/actions/action_right_adapter.rb +29 -0
  49. data/lib/seqtrimnext/actions/action_right_primer.rb +25 -0
  50. data/lib/seqtrimnext/actions/action_short_insert.rb +32 -0
  51. data/lib/seqtrimnext/actions/action_unexpected_poly_t.rb +29 -0
  52. data/lib/seqtrimnext/actions/action_unexpected_vector.rb +31 -0
  53. data/lib/seqtrimnext/actions/action_vectors.rb +31 -0
  54. data/lib/seqtrimnext/actions/seqtrim_action.rb +136 -0
  55. data/lib/seqtrimnext/classes/action_manager.rb +47 -0
  56. data/lib/seqtrimnext/classes/em_classes/seqtrim_work_manager.rb +335 -0
  57. data/lib/seqtrimnext/classes/em_classes/seqtrim_worker.rb +290 -0
  58. data/lib/seqtrimnext/classes/extract_stats.rb +255 -0
  59. data/lib/seqtrimnext/classes/gnu_plot_graph.rb +140 -0
  60. data/lib/seqtrimnext/classes/graph_stats.rb +74 -0
  61. data/lib/seqtrimnext/classes/install_database.rb +43 -0
  62. data/lib/seqtrimnext/classes/install_requirements.rb +123 -0
  63. data/lib/seqtrimnext/classes/list_db.rb +49 -0
  64. data/lib/seqtrimnext/classes/make_blast_db.rb +113 -0
  65. data/lib/seqtrimnext/classes/one_blast.rb +41 -0
  66. data/lib/seqtrimnext/classes/params.rb +387 -0
  67. data/lib/seqtrimnext/classes/piro.rb +78 -0
  68. data/lib/seqtrimnext/classes/plugin_manager.rb +153 -0
  69. data/lib/seqtrimnext/classes/scan_for_restr_site.rb +138 -0
  70. data/lib/seqtrimnext/classes/scbi_stats.rb +68 -0
  71. data/lib/seqtrimnext/classes/seqtrim.rb +317 -0
  72. data/lib/seqtrimnext/classes/sequence.rb +55 -0
  73. data/lib/seqtrimnext/classes/sequence_group.rb +72 -0
  74. data/lib/seqtrimnext/classes/sequence_with_action.rb +503 -0
  75. data/lib/seqtrimnext/plugins/plugin.rb +267 -0
  76. data/lib/seqtrimnext/plugins/plugin_ab_adapters.rb +189 -0
  77. data/lib/seqtrimnext/plugins/plugin_adapters.rb +165 -0
  78. data/lib/seqtrimnext/plugins/plugin_amplicons.rb +221 -0
  79. data/lib/seqtrimnext/plugins/plugin_contaminants.rb +209 -0
  80. data/lib/seqtrimnext/plugins/plugin_extract_inserts.rb +438 -0
  81. data/lib/seqtrimnext/plugins/plugin_find_poly_at.rb +393 -0
  82. data/lib/seqtrimnext/plugins/plugin_ignore_repeated.rb +101 -0
  83. data/lib/seqtrimnext/plugins/plugin_indeterminations.rb +199 -0
  84. data/lib/seqtrimnext/plugins/plugin_key.rb +70 -0
  85. data/lib/seqtrimnext/plugins/plugin_linker.rb +232 -0
  86. data/lib/seqtrimnext/plugins/plugin_low_complexity.rb +98 -0
  87. data/lib/seqtrimnext/plugins/plugin_low_high_size.rb +74 -0
  88. data/lib/seqtrimnext/plugins/plugin_low_quality.rb +394 -0
  89. data/lib/seqtrimnext/plugins/plugin_mids.rb +231 -0
  90. data/lib/seqtrimnext/plugins/plugin_rem_adit_artifacts.rb +246 -0
  91. data/lib/seqtrimnext/plugins/plugin_short_insert.rb +244 -0
  92. data/lib/seqtrimnext/plugins/plugin_vectors.rb +191 -0
  93. data/lib/seqtrimnext/templates/amplicons.txt +16 -0
  94. data/lib/seqtrimnext/templates/genomics_454.txt +5 -0
  95. data/lib/seqtrimnext/templates/genomics_454_with_paired.txt +5 -0
  96. data/lib/seqtrimnext/templates/low_quality.txt +5 -0
  97. data/lib/seqtrimnext/templates/low_quality_and_low_complexity.txt +5 -0
  98. data/lib/seqtrimnext/templates/transcriptomics_454.txt +8 -0
  99. data/lib/seqtrimnext/templates/transcriptomics_plants.txt +8 -0
  100. data/lib/seqtrimnext/utils/extract_samples.rb +52 -0
  101. data/lib/seqtrimnext/utils/fasta2xml.rb +69 -0
  102. data/lib/seqtrimnext/utils/global_match.rb +65 -0
  103. data/lib/seqtrimnext/utils/hash_stats.rb +29 -0
  104. data/lib/seqtrimnext/utils/json_utils.rb +50 -0
  105. data/lib/seqtrimnext/utils/load_fasta_names_in_hash.rb +37 -0
  106. data/lib/seqtrimnext/utils/load_qual_in_hash.rb +37 -0
  107. data/lib/seqtrimnext/utils/recover_mid.rb +95 -0
  108. data/lib/seqtrimnext/utils/string_utils.rb +56 -0
  109. data/lib/seqtrimnext.rb +37 -0
  110. data/script/console +10 -0
  111. data/script/destroy +14 -0
  112. data/script/generate +14 -0
  113. data/test/test_helper.rb +3 -0
  114. data/test/test_seqtrimnext.rb +11 -0
  115. metadata +318 -0
@@ -0,0 +1,387 @@
1
+ #########################################
2
+ # Author:: Almudena Bocinos Rioboo
3
+ # This class provided the methods to read the parameter's file and to create the structure where will be storaged the param's name and the param's numeric-value
4
+ #########################################
5
+ require 'scbi_fasta'
6
+
7
+ class Params
8
+
9
+ #Creates the structure and start the reading of parameter's file
10
+ def initialize(path)
11
+ @params = {}
12
+ @comments = {}
13
+ # @param_order={}
14
+ @mids = {}
15
+ @linkers = {}
16
+ @clusters = {}
17
+
18
+ @plugin_comments = {}
19
+
20
+ read_file(path)
21
+ end
22
+
23
+ # Reads param's file
24
+ def read_file(path_file)
25
+
26
+ if path_file && File.exists?(path_file)
27
+ comments= []
28
+ File.open(path_file).each_line do |line|
29
+ line.chomp! # delete end of line
30
+
31
+ if !line.empty?
32
+ if !(line =~ /^\s*#/) # if line is not a comment
33
+ # extract the parameter's name in params[0] and the parameter's value in params[1]
34
+ params = line.split(/\s*=\s*/)
35
+
36
+ # store in the hash the pair key/value, in our case will be name/numeric-value ,
37
+ # that are save in params[0] and params[1], respectively
38
+ if (!params[0].nil?) && (!params[1].nil?)
39
+ set_param(params[0].strip,params[1].strip,comments)
40
+ comments=[]
41
+ end
42
+
43
+ #$LOG.debug "read: #{params[1]}"
44
+ else
45
+ comments << line.gsub(/^\s*#/,'')
46
+ end # end if comentario
47
+ end #end if line
48
+ end #end each
49
+ if @params.empty?
50
+ puts "INVALID PARAMETER FILE: #{path_file}. No parameters defined"
51
+ exit
52
+ end
53
+
54
+ end
55
+ end# end def
56
+
57
+ # Load mid's file
58
+ def load_mids(path_file)
59
+ if File.exists?(path_file)
60
+ ff = FastaFile.new(path_file)
61
+ ff.each {|n,f|
62
+ # @mid_sizes[n]=f.size
63
+ @mids[n]=f
64
+ }
65
+
66
+ ff.close
67
+ end
68
+ end
69
+
70
+ # Load mid's file
71
+ def load_linkers(path_file)
72
+ if File.exists?(path_file)
73
+ ff = FastaFile.new(path_file)
74
+ ff.each {|n,f|
75
+ @linkers[n]=f
76
+ }
77
+ ff.close
78
+ end
79
+ end
80
+
81
+ def load_repeated_seqs(file_path)
82
+ @clusters={}
83
+
84
+ if File.exists?(file_path)
85
+ # File.open(ARGV[0]).each_line do |line|
86
+ $LOG.debug("Repeated file path:"+file_path)
87
+ File.open(file_path).each_line do |line|
88
+ #puts line,line[0]
89
+ # en ruby19 line[0] da el caracter, no el chr
90
+ #if (line[0]!=62) && (line[0]!=48)
91
+ if (line[0]!='>'[0]) && (line[0]!='0'[0])
92
+ #puts line
93
+ #puts line,line[0]
94
+ if line =~ />([^\.]+)\.\.\.\s/
95
+ #puts 'ok'
96
+ @clusters[$1]=1
97
+ end
98
+ end
99
+ end
100
+ $LOG.info("Repeated sequence count: #{@clusters.count}")
101
+ else
102
+ $LOG.error("Clustering file's doesn't exists: #{@clusters.count}")
103
+ end
104
+
105
+
106
+ end
107
+
108
+ def repeated_seq?(name)
109
+ return !@clusters[name].nil?
110
+ end
111
+
112
+ # Reads param's file
113
+ def save_file(path_file)
114
+
115
+ f=File.open(path_file,'w')
116
+ @plugin_comments.keys.sort.reverse.each do |plugin_name|
117
+ f.puts "#"*50
118
+ f.puts "# " + plugin_name
119
+ f.puts "#"*50
120
+ f.puts ''
121
+
122
+ @plugin_comments[plugin_name].keys.each do |param|
123
+ comment=get_comment(plugin_name,param)
124
+ if !comment.nil? && !comment.empty? && comment!=''
125
+ f.puts comment.map{|c| '# '+c if c!=''}
126
+ end
127
+ f.puts ''
128
+ f.puts "#{param} = #{@params[param]}"
129
+ f.puts ''
130
+ end
131
+ end
132
+ f.close
133
+
134
+ end# end def
135
+
136
+ # Prints the pair name/numeric-value for every parameter
137
+ def print_parameters()
138
+ @params.each do |clave, valor|
139
+ #$LOG.debug "The Parameter #{clave} have the value " +valor.to_s
140
+ puts "#{clave} = #{valor} "
141
+ end
142
+ end
143
+
144
+ # Return the parameter's list in an array
145
+ def get_param(param)
146
+ #$LOG.debug "Get Param: #{@params[param]}"
147
+ return @params[param]
148
+ end
149
+
150
+ # Return the mid's size of param
151
+ def get_mid(param)
152
+ return @mids[param]
153
+ end
154
+
155
+ # Return the linker of param
156
+ def get_linker(linker)
157
+ return @linkers[linker]
158
+ end
159
+
160
+ def get_plugin
161
+ plugin='General'
162
+ # puts caller(2)[1]
163
+ at = caller(2)[1]
164
+ if /^(.+?):(\d+)(?::in `(.*)')?/ =~ at
165
+ file = Regexp.last_match[1]
166
+ line = Regexp.last_match[2].to_i
167
+ method = Regexp.last_match[3]
168
+ plugin=File.basename(file,File.extname(file))
169
+
170
+ # puts "CALLER: #{plugin}"
171
+ # puts [file, line, method]
172
+
173
+ end
174
+
175
+ end
176
+
177
+ def set_param(param,value,comment=nil)
178
+ plugin=get_plugin
179
+
180
+ @params[param] = value
181
+
182
+ if get_comment(plugin,param).nil?
183
+ set_comment(plugin,param,comment)
184
+ end
185
+
186
+
187
+ end
188
+
189
+ # def set_order(plugin,param)
190
+ #
191
+ # if @param_order[plugin].nil?
192
+ # @param_order[plugin]=[]
193
+ # end
194
+ #
195
+ # if !@param_order[plugin].index(param)
196
+ # @param_order[plugin].push param
197
+ # end
198
+ # end
199
+
200
+
201
+ def get_comment(plugin,param)
202
+ res = nil
203
+ if @plugin_comments[plugin]
204
+ res =@plugin_comments[plugin][param]
205
+ end
206
+ return res
207
+ end
208
+
209
+
210
+ def set_comment(plugin,param,comment)
211
+ if !comment.is_a?(Array) && !comment.nil?
212
+ comment=comment.split("\n").compact.map{|l| l.strip}
213
+ end
214
+
215
+ if @plugin_comments[plugin].nil?
216
+ @plugin_comments[plugin]={}
217
+ end
218
+
219
+ old_comment=''
220
+ # remove from other plugins
221
+ @plugin_comments.each do |plugin_name,comments|
222
+ if comments.keys.include?(param) && plugin_name!=plugin
223
+ old_comment=comments[param]
224
+ comments.delete(param)
225
+ end
226
+ end
227
+
228
+ if comment.nil?
229
+ comment=old_comment
230
+ end
231
+
232
+ # @comments[param]=(comment || [''])
233
+ @plugin_comments[plugin][param]=(comment || [''])
234
+ # puts @plugin_comments.keys.to_json
235
+
236
+ # remove empty comments
237
+
238
+ @plugin_comments.reverse_each do |plugin_name,comments|
239
+ if comments.empty?
240
+ @plugin_comments.delete(plugin_name)
241
+ end
242
+ end
243
+
244
+ end
245
+
246
+
247
+ def set_mid(param,value)
248
+ @mids[param] = value
249
+ end
250
+ #attr_accessor :h # to accede to the atribute 'h' from out of this class
251
+
252
+ # Returns true if exists the parameter and nil if don't
253
+ def exists?(param_name)
254
+ return !@params[param_name].nil?
255
+ end
256
+
257
+ def check_plugin_list_param(errors,param_name)
258
+ # get plugin list
259
+ pl_list=get_param(param_name)
260
+
261
+ # puts pl_list,param_name
262
+ list=pl_list.split(',')
263
+
264
+ list.map!{|e| e.strip}
265
+
266
+ # puts "Lista:",list.join(',')
267
+
268
+
269
+ # always the pluginExtractInserts at the end
270
+ list.delete('PluginExtractInserts')
271
+ list << 'PluginExtractInserts'
272
+
273
+ set_param(param_name,list.join(','))
274
+ # if !list.include?('PluginExtractInserts')
275
+ # raise "PluginExtractInserts do not exists"
276
+ #
277
+ # end
278
+
279
+
280
+
281
+ end
282
+
283
+ # def split_databases(db_param_name)
284
+ def check_db_param(errors,db_param_name)
285
+ # expand database paths
286
+ dbs= get_param(db_param_name).gsub('"','').split(/\s+/)
287
+ # puts "ALGO"*20
288
+ puts dbs.join(',')
289
+ #
290
+ # TODO - chequear aqui que la db no esta vacia y que esta formateada.
291
+ dbs.reverse_each {|db|
292
+ if !File.exists?(db)
293
+ path=File.join($FORMATTED_DB_PATH,db)
294
+ else
295
+ path=db
296
+ end
297
+
298
+ if Dir.glob(path+'*.n*').entries.empty?
299
+ puts "DB file #{path} not formatted"
300
+
301
+ if File.writable_real?(path)
302
+ cmd = "makeblastdb -in #{path} -parse_seqids -dbtype nucl"
303
+ system(cmd)
304
+ else
305
+ raise "Can't format database. We don't have write permissions in: #{path}"
306
+ end
307
+ end
308
+
309
+ if !File.exists?(path)
310
+ raise "DB File #{path} does not exists"
311
+ # exit
312
+ end
313
+ }
314
+ db_paths = '"'+dbs.join(' ')+'"'
315
+
316
+ set_param(db_param_name,db_paths)
317
+ # puts "DATABASES"+db_paths
318
+ end
319
+
320
+
321
+ def self.generate_sample_params
322
+
323
+ filename = 'sample_params.txt'
324
+ x=1
325
+ while File.exists?(filename)
326
+ filename = "sample_params#{x}.txt"
327
+ x+=1
328
+ end
329
+
330
+ f=File.open(filename,'w')
331
+ f.puts "SAMPLE_PARAMS"
332
+ f.close
333
+
334
+ puts "Sample params file generated: #{filename}"
335
+
336
+ end
337
+
338
+ def check_param(errors,param,param_class,default_value=nil, comment=nil)
339
+
340
+ if !exists?(param)
341
+ if default_value.nil? #|| (default_value.is_a?(String) && default_value.empty?)
342
+ errors.push "The param #{param} is required and no default value is available"
343
+ else
344
+ set_param(param,default_value,comment)
345
+ end
346
+ end
347
+
348
+ s = get_param(param)
349
+
350
+
351
+ set_comment(get_plugin,param,comment)
352
+
353
+ # check_class=Object.const_get(param_class)
354
+ begin
355
+
356
+ case param_class
357
+ when 'Integer'
358
+ r = Integer(s)
359
+ when 'Float'
360
+ r = Float(s)
361
+ when 'String'
362
+ r = String(s)
363
+ when 'DB'
364
+ # it is a string
365
+ r = String(s)
366
+ # and must be a valid db
367
+
368
+ r = check_db_param(errors,param)
369
+
370
+ when 'PluginList'
371
+ r=String(s)
372
+ r= check_plugin_list_param(errors,param)
373
+ end
374
+
375
+ rescue Exception => e
376
+ message="Current value is ##{s}#. "
377
+ if param_class=='DB'
378
+ message += e.message
379
+ end
380
+
381
+ errors.push "Param #{param} is not a valid #{param_class}. #{message}"
382
+ end
383
+ # end
384
+
385
+ end
386
+
387
+ end
@@ -0,0 +1,78 @@
1
+ # require '../utils/fasta_qual_reader' #descomentar en test_extracts
2
+ require 'fasta_qual_reader' #descomentar en seqtrimii
3
+
4
+
5
+
6
+ require 'make_blast_db'
7
+ require 'scbi_blast'
8
+
9
+
10
+
11
+
12
+ ######################################
13
+ # Author:: Almudena Bocinos Rioboo
14
+ # Extract stats like mean of sequence's length
15
+ # Inherit:: FastaReader
16
+ ######################################
17
+
18
+ class Piro < FastaQualReader
19
+ #attr_accessor :na
20
+ def initialize(path_fasta,path_qual)
21
+ @path_fasta=path_fasta
22
+ super(path_fasta,path_qual)
23
+ MakeBlastDb.execute('../sequences/gemini.fasta')
24
+
25
+
26
+ end
27
+
28
+ def on_process_sequence(name_seq,fasta_seq,qual_seq)
29
+ puts "in piro, in on process sequence, #{name_seq}"
30
+
31
+
32
+ blast = BatchBlast.new('-db '+ @path_fasta ,'blastn',' -task blastn -evalue 1e-10 -perc_identity 95') #get contaminants
33
+ #blast = BatchBlast.new('DB/vectors.fasta','blastn',' -task blastn ') #get vectors
34
+
35
+ $LOG.debug "-------OK----"
36
+
37
+ # puts seq.seq_fasta
38
+ res = blast.do_blast(fasta_seq) #rise seq to contaminants executing over blast
39
+ #
40
+ # blast_table_results = BlastTableResult.new(res,nil)
41
+
42
+ # vectors=[]
43
+ # blast_table_results.querys.each do |query| # first round to save contaminants without overlap
44
+ # merge_hits(query.hits,vectors)
45
+ # end
46
+ #
47
+ # begin
48
+ # vectors2=vectors # second round to save contaminants without overlap
49
+ # vectors = []
50
+ # merge_hits(vectors2,vectors)
51
+ # end until (vectors2.count == vectors.count)
52
+ #
53
+ #
54
+ # vectors.each do |c| # adds the correspondent action to the sequence
55
+ # #if @seq_specie!=seq_specie-contaminant
56
+ #
57
+ # if (@params.get_param('genus')!=c.subject_id.split('_')[1])
58
+ # # puts "DIFFERENT SPECIE #{specie} ,#{hit.subject_id.split('_')[1].to_s}"
59
+ # a = seq.add_action(c.q_beg,c.q_end,type)
60
+ # a.message = c.subject_id
61
+ # end
62
+ # end
63
+
64
+
65
+ end
66
+
67
+ def on_end_process()
68
+
69
+
70
+
71
+
72
+
73
+
74
+ end
75
+
76
+
77
+
78
+ end
@@ -0,0 +1,153 @@
1
+ #########################################
2
+ # Author:: Almudena Bocinos Rioboo
3
+ # This class provided the methods to manage the execution of the plugins
4
+ #########################################
5
+
6
+ require 'json'
7
+
8
+ require 'sequence_with_action'
9
+ require 'sequence_group'
10
+
11
+ class PluginManager
12
+ attr_accessor :plugin_names
13
+
14
+ #Storages the necessary plugins specified in 'plugin_list' and start the loading of plugins
15
+ def initialize(plugin_list,params)
16
+ @plugin_names = plugin_list.strip.split(',').map{|p| p.strip}.reject{|p| ['',nil].include?(p)}
17
+ @params = params
18
+
19
+ # puts plugin_list
20
+ load_plugins_from_files
21
+
22
+ end
23
+
24
+ # Receives the plugin's list , and create an instance from its respective class (it's that have the same name)
25
+ def execute_plugins(running_seqs)
26
+ # $LOG.info " Begin process: Execute plugins "
27
+
28
+ if !@plugin_names.empty?
29
+
30
+ # keeps a list of rejected sequences
31
+
32
+
33
+ rejected_seqs = []
34
+
35
+ @plugin_names.each do |plugin_name|
36
+
37
+
38
+ # remove rejected or empty seqs from execution list
39
+ running_seqs.reverse_each do |seq|
40
+ if seq.seq_rejected || seq.seq_fasta.empty?
41
+ # remove from running
42
+ running_seqs.delete(seq)
43
+ # save in rejecteds
44
+ rejected_seqs.push seq
45
+ end
46
+ end
47
+
48
+ if running_seqs.empty?
49
+ break
50
+ end
51
+
52
+ # Creates an instance of the respective plugin stored in "plugin_name",and asociate it to the sequence 'seq'
53
+ plugin_class = Object.const_get(plugin_name)
54
+ # puts "ANTES *************" + seq.to_text_seq_fasta
55
+ plugin_execution=plugin_class.new(running_seqs,@params)
56
+ #puts plugin_name+':'+ plugin_execution.stats.to_json
57
+ running_seqs.stats[plugin_name] = plugin_execution.stats
58
+
59
+
60
+ # puts running_seqs.stats.to_json
61
+ plugin_execution=nil
62
+
63
+
64
+ end #end each
65
+
66
+ running_seqs.add(rejected_seqs)
67
+
68
+
69
+ else
70
+
71
+ raise "Plugin list not found"
72
+ end #end if lista-param
73
+ end
74
+
75
+ # Checks if the parameters are right for all plugins's execution. Finally return true if all is right or false if isn't
76
+ def check_plugins_params(params)
77
+ res = true
78
+
79
+ if !@plugin_names.empty?
80
+ #$LOG.debug " Check params values #{plugin_list} "
81
+
82
+ @plugin_names.each do |plugin_name|
83
+
84
+ #Call to the respective plugin storaged in 'plugin_name'
85
+ plugin_class = Object.const_get(plugin_name)
86
+ # DONE - chequear si es un plugin de verdad u otra clase
87
+ # puts plugin_class,plugin_class.ancestors.map {|e| puts e,e.class}
88
+
89
+ if plugin_class.ancestors.include?(Plugin)
90
+ errors=plugin_class.check_params(params)
91
+ else
92
+ errors= [plugin_name + ' is not a valid plugin']
93
+ end
94
+
95
+ if !errors.empty?
96
+ $LOG.error plugin_name+ ' found following errors:'
97
+ errors.each do |error|
98
+ $LOG.error ' -' + error
99
+ res = false
100
+ end #end each
101
+ end #end if
102
+
103
+ end #end each
104
+ else
105
+ $LOG.error "No plugin list provided"
106
+ res = false
107
+ end #end if plugin-list
108
+
109
+ return res
110
+ end
111
+
112
+
113
+ # Iterates by the files from the folder 'plugins', and load it
114
+ def load_plugins_from_files
115
+
116
+ # DONE - CARGAR los plugins que hay en @plugin_names en vez de todos
117
+
118
+ # the plugin_name changes to file using plugin_name.decamelize
119
+ @plugin_names.each do |plugin_name|
120
+ plugin_file = plugin_name.decamelize
121
+ require plugin_file
122
+ end
123
+
124
+ end # end def
125
+
126
+
127
+ # Iterates by the files from the folder 'plugins', and load it
128
+ def load_plugins_from_files_old
129
+
130
+ # DONE - CARGAR los plugins que hay en @plugin_names en vez de todos
131
+
132
+
133
+
134
+ ignore = ['.','..','plugin.rb']
135
+ #carpeta=Dir.open("progs/ruby/seqtrimii/plugins")
136
+
137
+ plugins_path = File.expand_path(File.join(File.dirname(__FILE__), "../plugins"))
138
+ if !File.exists?(plugins_path)
139
+ raise "Plugin folder does not exists"
140
+ end
141
+
142
+ # carpeta=Dir.open(plugins_path)
143
+ entries = Dir.glob(File.join(plugins_path,'*.rb'))
144
+ # carpeta.
145
+ entries.each do |plugin|
146
+ if !ignore.include?(plugin)
147
+ require plugin
148
+ end # end if
149
+ end # end each
150
+ end # end def
151
+
152
+
153
+ end