seqtrimnext 2.0.29

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