bio-polyploid-tools 0.3.3 → 0.4.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: 381e678b7d15cffb675e941b461ccd7a8cbc1132
4
- data.tar.gz: bb2632d78ed15718ea6e295de21539e158896625
3
+ metadata.gz: 612c7e5e39e8908003387efe2e6ba739b7fb981d
4
+ data.tar.gz: eac406e26c6985115884ba53f0c3dadf22bf3e81
5
5
  SHA512:
6
- metadata.gz: 7c3c364a4fc0bdd6e20aa69eacb9e76c90e1a8b34de50775ce5a77177d4438c3f0b768e73e751f282bfa14dc88645e8e19c1c69c0ce4d60d9c01d5371bb0ea08
7
- data.tar.gz: f16d826561a31ac8d045ca9934068f6f7f2101d306405c5c5d0d0aaa8bc8976039fcc3d0f5f3d0170f08f150257e914a135a706f1f07ae8b6e85b0572d46cb0c
6
+ metadata.gz: c9408f36825e70458901b867b3733d878291240b937d120be658c71e5b7d53f22ae2c7023408a9cfb2be385a630ed1fae4e0e321160d6556820baa36a657bc7a
7
+ data.tar.gz: 84bf294ab30e62fe758b54274adcca0c1f0f5331a0bc56a2932b2af9d112518c45535b59496f7f33365ef70d10a578946d398b095da473fd5d0af857383f1c10
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.3
1
+ 0.4.0
data/bin/polymarker.rb CHANGED
@@ -35,6 +35,19 @@ options[:bucket_size] = 0
35
35
  options[:bucket] = 1
36
36
  options[:model] = "est2genome"
37
37
  options[:arm_selection] = arm_selection_functions[:arm_selection_embl] ;
38
+ options[:flanking_size] = 100;
39
+ options[:primer_3_preferences] = {
40
+ :primer_product_size_range => "50-150" ,
41
+ :primer_max_size => 25 ,
42
+ :primer_lib_ambiguity_codes_consensus => 1,
43
+ :primer_liberal_base => 1,
44
+ :primer_num_return=>5,
45
+ :primer_thermodynamic_parameters_path=>File.expand_path(File.dirname(__FILE__) + '../../conf/primer3_config/') + '/'
46
+
47
+ }
48
+
49
+
50
+
38
51
  OptionParser.new do |opts|
39
52
  opts.banner = "Usage: polymarker.rb [options]"
40
53
 
@@ -66,9 +79,21 @@ OptionParser.new do |opts|
66
79
  options[:arm_selection] = arm_selection_functions[o.to_sym];
67
80
  end
68
81
 
82
+ opts.on("-p", "--primer_3_preferences FILE", "file with preferences to be sent to primer3") do |o|
83
+ options[:primer_3_preferences] = Bio::DB::Primer3.read_primer_preferences(o, options[:primer_3_preferences] )
84
+ end
69
85
 
70
86
  end.parse!
71
87
 
88
+ if options[:primer_3_preferences][:primer_product_size_range]
89
+ range = options[:primer_3_preferences][:primer_product_size_range]
90
+ range_arr = range.split("-")
91
+ min = range_arr[0].to_i
92
+ max = range_arr[1].to_i
93
+ raise Bio::DB::Exonerate::ExonerateException.new "Ragne #{range} is invalid!" unless max > min
94
+ options[:flanking_size] = max
95
+ end
96
+
72
97
  p options
73
98
  p ARGV
74
99
 
@@ -111,6 +136,8 @@ end
111
136
  min_identity= 90
112
137
  snps = Array.new
113
138
 
139
+ begin
140
+
114
141
  write_status "Loading Reference"
115
142
  #0. Load the fasta index
116
143
  fasta_reference_db = nil
@@ -124,7 +151,6 @@ end
124
151
 
125
152
 
126
153
  #1. Read all the SNP files
127
- #All the SNPs should be on the same chromosome as the first SNP.
128
154
  #chromosome = nil
129
155
  write_status "Reading SNPs"
130
156
  File.open(test_file) do | f |
@@ -140,7 +166,7 @@ File.open(test_file) do | f |
140
166
  region = fasta_reference_db.index.region_for_entry(snp.gene).get_full_region
141
167
  snp.template_sequence = fasta_reference_db.fetch_sequence(region)
142
168
  else
143
- $stderr.puts "Unable to find entry for #{snp.gene}"
169
+ $stderr.puts "ERROR: Unable to find entry for #{snp.gene}"
144
170
  end
145
171
 
146
172
  else
@@ -149,7 +175,12 @@ File.open(test_file) do | f |
149
175
  rise Bio::DB::Exonerate::ExonerateException.new "No SNP for line '#{line}'" if snp == nil
150
176
  snp.snp_in = snp_in
151
177
  snp.original_name = original_name
152
- snps << snp
178
+ if snp.position
179
+ snps << snp
180
+ else
181
+ $stderr.puts "ERROR: #{snp.gene} doesn't contain a SNP"
182
+ end
183
+
153
184
  # chromosome = snp.chromosome unless chromosome
154
185
  # raise Bio::DB::Exonerate::ExonerateException.new "All the snps should come from the same chromosome" if chromosome != snp.chromosome
155
186
  end
@@ -207,7 +238,7 @@ write_status "Reading best alignment on each chromosome"
207
238
 
208
239
 
209
240
  container= Bio::PolyploidTools::ExonContainer.new
210
- container.flanking_size=100
241
+ container.flanking_size=options[:flanking_size]
211
242
  container.gene_models(temp_fasta_query)
212
243
  container.chromosomes(temp_contigs)
213
244
  container.add_parental({:name=>snp_in})
@@ -227,12 +258,14 @@ container.print_fasta_snp_exones(file)
227
258
  file.close
228
259
 
229
260
  file = File.open(primer_3_input, "w")
230
- file.puts("PRIMER_PRODUCT_SIZE_RANGE=50-150")
231
- file.puts("PRIMER_MAX_SIZE=25")
232
- file.puts("PRIMER_LIB_AMBIGUITY_CODES_CONSENSUS=1")
233
- file.puts("PRIMER_LIBERAL_BASE=1")
234
- file.puts("PRIMER_NUM_RETURN=5")
235
- file.puts("PRIMER_THERMODYNAMIC_PARAMETERS_PATH=#{primer_3_config}/")
261
+ #file.puts("PRIMER_PRODUCT_SIZE_RANGE=50-150")
262
+ #file.puts("PRIMER_MAX_SIZE=25")
263
+ #file.puts("PRIMER_LIB_AMBIGUITY_CODES_CONSENSUS=1")
264
+ #file.puts("PRIMER_LIBERAL_BASE=1")
265
+ #file.puts("PRIMER_NUM_RETURN=5")
266
+ #file.puts("PRIMER_THERMODYNAMIC_PARAMETERS_PATH=#{primer_3_config}/")
267
+
268
+ Bio::DB::Primer3.prepare_input_file(file, options[:primer_3_preferences])
236
269
  container.print_primer_3_exons(file, nil, snp_in)
237
270
  file.close
238
271
 
@@ -253,4 +286,11 @@ kasp_container.add_primers_file(primer_3_output)
253
286
  header = "Marker,SNP,RegionSize,chromosome,total_contigs,contig_regions,SNP_type,#{snp_in},#{original_name},common,primer_type,orientation,#{snp_in}_TM,#{original_name}_TM,common_TM,selected_from,product_size"
254
287
  File.open(output_primers, 'w') { |f| f.write("#{header}\n#{kasp_container.print_primers}") }
255
288
 
256
- write_status "DONE"
289
+ write_status "DONE"
290
+ rescue StandardError => e
291
+ write_status "ERROR\t#{e.message}"
292
+ raise e
293
+ rescue Exception => e
294
+ write_status "ERROR\t#{e.message}"
295
+ raise e
296
+ end
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #This This script converts the a file with snps and positions with the header:
4
+ #GENE,BASE,POS,SNP,Chromosome
5
+ # snp.gene, snp.original, snp.position, snp.snp, snp.chromosome
6
+ #To the input expected by polymarker
7
+ #ID, Chromosome, sequence
8
+ #With sequence containing the SNP in the notation "[A/T]"
9
+ require 'bio'
10
+ require 'optparse'
11
+
12
+ $: << File.expand_path(File.dirname(__FILE__) + '/../lib')
13
+ $: << File.expand_path('.')
14
+ path= File.expand_path(File.dirname(__FILE__) + '/../lib/bioruby-polyploid-tools.rb')
15
+ require path
16
+
17
+
18
+ def log(msg)
19
+ time=Time.now.strftime("%Y-%m-%d %H:%M:%S.%L")
20
+ puts "#{time}: #{msg}"
21
+ end
22
+
23
+ markers = nil
24
+
25
+ options = {}
26
+ options[:flanking_size] = 100
27
+ OptionParser.new do |opts|
28
+
29
+ opts.banner = "Usage: snp_postion_to_polymarker.rb [options]"
30
+
31
+ opts.on("-s", "--sno_file CSV", "CSV file with the following columnns:\nID,Allele_1,position,Allele_1,target_chromosome") do |o|
32
+ options[:snp_file] = o
33
+ end
34
+ opts.on("-r", "--reference FASTA", "reference with the genes/contings/marker seuqnece") do |o|
35
+ options[:reference] = o
36
+ end
37
+ opts.on("-o", "--out CSV", "Output file ") do |o|
38
+ options[:output] = o
39
+ end
40
+ opts.on()("-f", "--flanking_size INT", "Flanking size around the SNP")
41
+
42
+ end.parse!
43
+ #reference="/Users/ramirezr/Documents/TGAC/references/Triticum_aestivum.IWGSP1.21.dna_rm.genome.fa"
44
+
45
+ fasta_reference = options[:reference] if options[:reference]
46
+ fasta_reference_db = Bio::DB::Fasta::FastaFile.new({:fasta=>fasta_reference})
47
+ fasta_reference_db.load_fai_entries
48
+
49
+ out = $stdout
50
+ out = File.open(options[:output], "w") if options[:output]
51
+ File.open(options[:snp_file]) do | f |
52
+ f.each_line do | line |
53
+ snp = nil
54
+ snp = Bio::PolyploidTools::SNP.parse(line)
55
+ entry = fasta_reference_db.index.region_for_entry(snp.gene)
56
+ if entry
57
+ region = fasta_reference_db.index.region_for_entry(snp.gene).get_full_region
58
+ snp.template_sequence = fasta_reference_db.fetch_sequence(region)
59
+
60
+ out.puts "#{snp.gene}_#{snp.snp_id_in_seq},#{snp.chromosome},#{snp.to_polymarker_sequence(options[:flanking_size])}"
61
+ else
62
+ $stderr.puts "ERROR: Unable to find entry for #{snp.gene}"
63
+ end
64
+ end
65
+ end
66
+
67
+ out.close if options[:output]
68
+
@@ -2,19 +2,19 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: bio-polyploid-tools 0.3.3 ruby lib
5
+ # stub: bio-polyploid-tools 0.4.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "bio-polyploid-tools"
9
- s.version = "0.3.3"
9
+ s.version = "0.4.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Ricardo H. Ramirez-Gonzalez"]
14
- s.date = "2014-05-30"
14
+ s.date = "2014-09-25"
15
15
  s.description = "Repository of tools developed in TGAC and Crop Genetics in JIC to work with polyploid wheat"
16
16
  s.email = "ricardo.ramirez-gonzalez@tgac.ac.uk"
17
- s.executables = ["bfr.rb", "count_variations.rb", "filter_blat_by_target_coverage.rb", "find_best_blat_hit.rb", "find_best_exonerate.rb", "hexaploid_primers.rb", "homokaryot_primers.rb", "map_markers_to_contigs.rb", "markers_in_region.rb", "polymarker.rb", "snps_between_bams.rb"]
17
+ s.executables = ["bfr.rb", "count_variations.rb", "filter_blat_by_target_coverage.rb", "find_best_blat_hit.rb", "find_best_exonerate.rb", "hexaploid_primers.rb", "homokaryot_primers.rb", "map_markers_to_contigs.rb", "markers_in_region.rb", "polymarker.rb", "snp_position_to_polymarker.rb", "snps_between_bams.rb"]
18
18
  s.extra_rdoc_files = [
19
19
  "README",
20
20
  "README.md"
@@ -36,6 +36,7 @@ Gem::Specification.new do |s|
36
36
  "bin/map_markers_to_contigs.rb",
37
37
  "bin/markers_in_region.rb",
38
38
  "bin/polymarker.rb",
39
+ "bin/snp_position_to_polymarker.rb",
39
40
  "bin/snps_between_bams.rb",
40
41
  "bio-polyploid-tools.gemspec",
41
42
  "conf/defaults.rb",
@@ -98,19 +99,25 @@ Gem::Specification.new do |s|
98
99
  "test/data/LIB1721.bam.bai",
99
100
  "test/data/LIB1722.bam",
100
101
  "test/data/LIB1722.bam.bai",
102
+ "test/data/PST130_7067.csv",
103
+ "test/data/PST130_7067.fa",
104
+ "test/data/PST130_7067.fa.fai",
105
+ "test/data/PST130_reverse_primer.csv",
101
106
  "test/data/S22380157.fa",
102
107
  "test/data/S22380157.fa.fai",
103
108
  "test/data/Test3Aspecific.csv",
104
109
  "test/data/Test3Aspecific_contigs.fa",
105
110
  "test/data/bfr_out_test.csv",
106
111
  "test/data/patological_cases5D.csv",
112
+ "test/data/primer_3_input_header_test",
107
113
  "test/data/short_primer_design_test.csv",
108
114
  "test/data/test_primer3_error.csv",
109
115
  "test/data/test_primer3_error_contigs.fa",
110
116
  "test/test_bfr.rb",
111
117
  "test/test_exon_container.rb",
112
118
  "test/test_exonearate.rb",
113
- "test/test_snp_parsing.rb"
119
+ "test/test_snp_parsing.rb",
120
+ "test/test_wrong_selection.sh"
114
121
  ]
115
122
  s.homepage = "http://github.com/tgac/bioruby-polyploid-tools"
116
123
  s.licenses = ["MIT"]
@@ -37,7 +37,16 @@ module Bio::PolyploidTools
37
37
  def initialize
38
38
  @genomes_count = 3 #TODO: if we want to use this with other polyploids, me need to set this as a variable in the main script.
39
39
  end
40
+
41
+ def to_polymarker_sequence
42
+ out = template_sequence.clone
43
+ out[position-1] = "[#{original}/#{snp}]"
44
+ out
45
+ end
40
46
 
47
+ def snp_id_in_seq
48
+ "#{original}#{position}#{snp}"
49
+ end
41
50
 
42
51
  #We Only want the chromosome, we drop the arm.
43
52
  #We don't use this any more.
@@ -3,11 +3,49 @@ module Bio::DB::Primer3
3
3
  class Primer3Exception < RuntimeError
4
4
  end
5
5
 
6
+ def self.read_primer_preferences(file, defaults)
7
+
8
+ File.open(file) do |f|
9
+ f.each_line do | line |
10
+ line.chomp!
11
+ arr = line.split("=")
12
+ defaults[arr[0].downcase.to_sym] = arr[1];
13
+ end
14
+ end
15
+
16
+ return defaults
17
+ end
18
+
19
+ def self.prepare_input_file(file, opts2={})
20
+ #file.puts("PRIMER_PRODUCT_SIZE_RANGE=50-150")
21
+ #file.puts("PRIMER_MAX_SIZE=25")
22
+ #file.puts("PRIMER_LIB_AMBIGUITY_CODES_CONSENSUS=1")
23
+ #file.puts("PRIMER_LIBERAL_BASE=1")
24
+ #file.puts("PRIMER_NUM_RETURN=5")
25
+ #file.puts("PRIMER_THERMODYNAMIC_PARAMETERS_PATH=#{primer_3_config}/")
26
+ opts = {
27
+ :primer_product_size_range => "50-150" ,
28
+ :primer_max_size => 25 ,
29
+ :primer_lib_ambiguity_codes_consensus => 1,
30
+ :primer_liberal_base => 1,
31
+ :primer_num_return=>5,
32
+ :primer_thermodynamic_parameters_path=>File.expand_path(File.dirname(__FILE__) + '../../../../conf/primer3_config/') + '/'
33
+
34
+ }.merge(opts2)
35
+
36
+ opts.each do |key,value|
37
+ file.puts "#{key.to_s.upcase}=#{value}\n"
38
+ end
39
+ # file.puts "="
40
+ end
41
+
6
42
  def self.run(opts={})
7
43
  puts "Primer3.run running..."
8
44
 
9
45
  f_in=opts[:in]
10
46
  f_out=opts[:out]
47
+ opts.delete(:in)
48
+ opts.delete(:out)
11
49
  primer_3_in = File.read(f_in)
12
50
  status = systemu "primer3_core", 0=>primer_3_in, 1=>stdout='', 2=>stderr=''
13
51
  # $stderr.puts cmdline
@@ -0,0 +1 @@
1
+ PST130_7067,T,3334,G,7067
@@ -0,0 +1,2 @@
1
+ >PST130_7067
2
+ ggggggaggctaacttttggaaatcttttcctttctcttcttttcctatcatcttattatgaacattattattctatctgtgcacggagtgaactattatttattatttttgattgggatattctttttgttttgttttggagtgttattcagtaaggcagtaaggaagagatcagtccttattagttaaagaattctcttctcctttgggtcagaccttttagcgtgcaccacaaagtagcttacggagaagaggccatatttaccctccagctttcatctcaacctacctgtcccggaaacggacaggcaggtagttgctgagtaagttaaataactacttattctacaccaactcacttttctttccatagcgcaaagggccagcctccaaaggatccaaaggagggacttgttggggatactcaaatcttgcactgagagcatccactggtttggtgggcgattttttcccctgccttcacaacacctttgtggagctcaaaaatcacgcctgtgggacctgtttatgcacttttccgtccagcatggttacaaaacaacaacagaatgcttatgctccttagatctccagaggtagaaccaagaacacaagtgttgttgtgatgaagtcaatgagtgaggattcaattccaggcttgttttagataaagcttttcaccttacctagcatgtcttgttaaatagatatactgccgcagcagaatcgtgatgattatccagcaagccttatagtgtcttgcagttttttttgaggtgaagaggacggtagaagatagctacagttgtatgttgtaacgtcagtggactcctcggtagtctcgtttacggagaatggcccagcgaagtctgagccacaaaatatttcgaaaaacttcagtgctcgaagtcacgatagtcatattgcatcagatcaggaacctcaaagaaaattttcgggtgtggtacccaaaatgagcagacccttatttgaaagccaaccatcccgaccgtctaagtttactacttgaggcaagactaggtgtcaagcctctctcagaggctgatttcggaaggagttgaaacgtacaactgcgctcagctcgctgatagatcaagccaagacgaacgagccatcatcatcttagactgcaggaccaacaagccaggaaggtaaatctgtttcatgcattgcgagcacacaatcacgaatcacgggatgttcatttacagttctaaataacaaatggtgaaagtgacaaaaatggcgcgaagaggtttgctagcagttaggacaagccttcaagatcacgacgtatcgtccttcgccgatcggatagacgatataatgcagcaaagatgtttggaagagagcttgtgccagttcgttcaacccatcgagttcacccggtgctctacggatggtttcagagaattgatcatttggttagggtcccgtgtgcttaatagaagttgaaactggaagatagatcagtgatggcgtactgttagtggttccatcgttgtgaaattcggatagactgctgggctaggatactggaacgcaaccaaccgtctttgcttctgatactttgtgaccgcggttgacctttagtcgcagaacatttattggggtgaattcacaagtcttgcgtaatcagacaggcaatttgtgaaagaaatctgactcactgtcagtttgtaccgaggacaacaccagagcacgtcatgcggagcacatgttgggggatccaccgcgatgtctttcattccacatcaacagaggaaaaaacatgagcgtggtcaactctaagcgtgatttgaggagggaaaaaaagaatcacaaagattcctgtcgctttccttgccattgctgcacgcaggccacggagtgtcgccgctgcacttcgacgatacgaactcgctaagaccaaagacgcaaagtagaagtgcgggtttcatgaagttcatggtatcgaacaggcgacggggagtgcgatagggctgaagatgaagtggatgcttgtggatttgagggtgagttcgagaaaaatatgtgagttgttgacttctgagggcggccgaagtgaaaccactcgcctgttatatacatttccgaaagaagcctttcaaatgtatcaggtgtaatccaatcaccgaagattcctgcaaaaccttcagctgaggaatagacagcgggatgatttccccgacgacggtacagtcacagtgcccggtggcaccgcaggataacacacaaccccgtcgaaagctgtagctaacggggccgtcaagttgggccctgtgtggcctcggcgtactggctggcgaccctgagggtctccttggctttatacgattgcgtcgtgagcgcgcattgggtcaccggtcacccgtcgccacaaccaactcggtggggtccgatgctgtctgatggcgcctcgcggcgaccaaccttatgagctaagggaagtcacaaactcacacgaacaataaagtgggatatacatgctcgcaagagtcaggaaaatacaatggcttggagtgatgttagtgataaaaatgaatcagatggatgaaggtgctgaacccactttttgttctcttttcgagattactctatacatacaacctcagctgcaagtttatcggaaaaatgatcaaaacttgacataaatatcgaaaaaacctcaattgtcaatgtaactcagtgtaatgtttcgataagcaacaatcgttgctgattgaatttttcaaataagtggcatagagattgaagtatcgttaaaaatagatcaagaaagatacaatgagttattttgagtcattggaaggtcattgatgtaaaagatgatcaagcgaagtaaaatatggtaccgacgacttttcacaaactgatcaagaaaagaggattgtaaaactttcgacacagcgtggacaaagataaacaacaggaattgcttatgtctcttagatctcaagggaaagagaaaaaaaaaagcaagctgtgacatgatgggatcaatgagtttggccttgaaagtcgtgttttagatagagcttgtcgtatcttttagctagtctcctacaaatgaataaatccccatttcaaaagtggcattcttagtcagctggcctcatagtggcttgaagtttttcttggaggtgaagagacccttcaaggaaggtcgagacagtctgctgttgtagcgagaggtgacatgttgagataagagggacactcacattttctgaaaaaggcccagcgcattttgtgcttccaaagtttccaaaaagatttactcgtcaaagcagctatcatttccctacaccaaatcgagaatctgtaaaaatgcgtttgggtgtggtgcttggcttgacgcaaccgagacttggcagccaaccaccaaagttgacgttttggtatcccattatacttgtgacatttcttattagaatgacctcgttttactagtgttctttgttgtcgtccggtcattgtccgggattgaacgagactggtctccatgctttctcgctctctcaaacaatatatgagaagagcagcttcctcttcggcctcctctgagtcaacatcatcatttgctaagtcaaccctattggtttctacgattgaattctgggtcgaagaggttctttccaagggacctaatttcagctcatctcccgcttcttcgcccatggtaccggtttccttgttcccgagcgcgagcgtctttatggactctaagtcgtggattccattttctactccaactgggccatgtgcgacgcccccaatgccatgaagaggtattaaaagaaagatcaagtaaaatgggagatgcatgatttcttcactacttgtgagtaattttaaagttctcaaagggtgatggatggcaagatgaatgcaatctctcctccggcaaagattccaaggatgactgaaggttttatattgtttactccggagattgtgaggtacctgcgcagccgaatctagagctgcactgccttttgcttacttgtacgatagtcacatacacgactgtgaacactgacttcgcgcaaacatgaaagatactctccctaccacacaaggccatcgacgttctccaaatgtgtcggcgtctcaggtgatgtagaagcggggcatctcgtagatagtgccgtcatacggtgcaagaaaccctctgctgtgaagatagtggggaaatgtgggcggtcgcatcggaggtggcaagttgtgatcccttcaaactctcaatatatcaaagtgtccgaacaaccacgcggcaaaactgaccatgacttagcttgcaatcgggtgacgaaatcaaaatctcgtcatgctgacgttctgaatacgtatcctcaagttcgcgtgcaggcctgcacaggctcagtcgtcgtcacatacacaagtactgtgaacactgacctcgcgcagacatgacagatagcctgcctacaacgaggctatggaggttctgcgagttgaccggcgtctcaagtagtgtagtcacggagcgatgcaaggcataacctctgatgtggtaatagggggtcaaattttcgtggtcggatccagggtggcaagttgtgatcatttcaaactcatattagagtattgagactccgaacaaccgcaccacaaaaccaagacggccggcacgagtgtctctactaatcttacggtaatacgtagtctttcgttcaagcagcgttacctcttgactgtatgaatgtataattcagtaattctggttcaattttaatcagcatatgggaggacttccggccgatctgtaggatcagatctagacccccctggaaattgatttttccgggggcatctggttctgaggcaggcaaatctgactctgtaagggctgccaagggctacagaaaatgacgagaagtcctccattacatacgacatacaagtaatcaaacatatggcttactagagatcaattttacccaagaatacaaaatacacagatagagatatatgggtttagcaaatcacttttcctctcaattttcaacgttttttctagatagtgtgtgtgacgagatggtttggatgtacatggaatctgtgaagagattgggtgggtattgaatgaataagagattgcgtgaatataagaatcaagcttctaatttttcttgcgttcgctcagactgggtactaagatttcgaacaaagcttcttcccgttccctgaaagatggtatttggcttatgcctagagcgagtgtattgattcgattagctgcgaccctgacagtgcccatgggactaggagctcgattgttgtgactctcatctgggttttgtccggcttcccaattagtaccatgttccaagtcattcttgagtctatcgattttggtgggatgagttctttctccatggctcacactttctaccgcagattcatcgtcatctcgggctaaagcttgagtagaggaagcgatcaaaaataattgagcagctagtggttgaaggtgaggtggacaatcttccactttgaggatcgatggataaccgcttcctaaattcaccactcgtacttgacgatcagcgggattgacaagcgtcaatgaaacttctagaatagctagacagagtgcaccaaagtatgctcgagagagttgaccatcggttgaatttctggattgtaatatttcgaagactgttggggtggtataaaggatatcggtaagtgatgcgtacagcgtttcacgaataatactaagtgcaggatggttttccagagcggaatcaagcccagaaagaggtgatgtgttcaatttggcaccggagttcggagcgagagtaggaggtattgtagcgggggtagcatttccctcgtacgctggaggcggtcgaaaggtggaagaaggcactactgttggtgtagctctggtatcgtgaccgaattgaagcgcataatcaagatctacagtcaaagatggaggaggaagggttcagtaaacctcccaattccgtcagatggcccgagctggtgttcgaagatcacaactgactcaccttgagagaatctctcttgaaatgtacgccgctgagaaatttcaattgcgatcgctttcaaatctcgagccatgatcggaaggtcaattcggatcggttggcattgaggttcttgatcacaaatcattctggccaaatcgttgctcagatccggcggaagtgctttaatcttggggactgattgaaaagatgtacaggtgtgcatttttgaggattgattagataggtatgtcgtaactcgatggattgcagaaaacatagaagaagactgaccagcttcggaccagagtatgaaccagttccgaaaagaggcagggcaattatttgcgtccaagcatatcatggaggtggcaatgctgggaggtctcccttcgctacgaagtgctgccaggaagagacatatagcagggcccgcaatctggatatcagcttccgcggaactgaggacgctggtatctagcagtcgttcggcatgggcttgagccaaggcaccctagttttccacttcgaaaattagtaagccggccaatgattcgtcagaggggcgagtctggaaggctcacctggaggaaagagtgaaaggcaacaatgacctgaaacggagaatgtcgatcagctcacgttatctcgtcggagttctttgctcgtggacagcagctgaggatgactggagaactgatgatgagggactaacctgctcctccgaaatgttagtgtgtatcaagttgctgggcgacatccaatcagcagggtatcgtggaataagaaaacgggtcaagttctgttggactagcttcacatctgaattcttggcgtggcctggttttccccacacaaactccgcatacagcttgcaccgcaccctctgagctcaatcgggtcacccgatcccccggagtggcaatggagtcaaacgcccggcagggactcttggggctggaaaccagctctattcctgaattttggtgcttgatagcgtcaaatgggtgtatctccaagtagacatctgttaccctgcatcgaaaaagcgtcagcttgattgatccatcaagagttgaccaagtatttcaagattctttcaccctgctccaacccctctgtactagcagttaaggtcacccagctaggtacttcacaaaattcaagcatgttgctgaagagaagagggatgaaatgttacacccatatgtgcttctccacgggttgtacccctctttttccttctccccctttaccaatttgctgctcagaagctaaggcctacgaaggaaaagctgaaaagatactcaagatattactgatgtataaaccatttcaaacttctcctcttggacatgctgagagtcttatcttggcgtactcggttttaacatcagggttcccccaaatgcgagaaaatctcccaatgtgaacagagcatttctcaaggttcaaatcaaggatgtataaaggcagctttcctaggtcctcagtcagtctcttgctatgatcaagttattgattgatggtcgctcgggtcgtgaatccatttgccttcatttcacgcgcacctcattgctgtcggtggaaagcgtcgatgtttcgcgcagaggaccctgtgatctctatagctttgcttctttcatcctcatcacgttggagctgcaggacaaactgacacttgtgttgatctgcctaattttttactagacgcgaactgctctcgttaactggacgaataacagcagggaaaaaaaaatcatgcatcactttatctagcagctcttccgatcagaacaatggaaagcttattcttttgttactgaaagaatgcaggagctatggggtgttgttgtcgtaatattcgatagcagtgataaaggtttgcttggctttgtagaactgatcctgccaagtagcaaaccaagtcacgaagtaagttcgacttggaaaaccgtcggtttccgggatcagaggcacaaagtgaaggagtatgagaactaagcaagatgaaagacgagtgctaaggttttcagcctctcgagtaagctgatcgatgatgacgtgcttatacgtcgtctcagcttgttctatggataacttgatattggtgatggatttatgaacgtcgtccaccgagtcccccaaagtctgtagttgataagaatgcatccctgtgcacaacggaagtcgcctcttgttcatgcctcgtctggataattgcttgaaaaagagtctacacagcttcgtgattgttattgctgatctagccaggacaacgactggcgaaccgaggcgatcgctcacaagtgcttcagcttgaggtttcgcattttctccctcggcgttgtttggggaattggcaagcgttagaagattttgaagggtggactccattttctctaactgctggggccacttaatttgaacaacatccaattcggatccttcaaagcagagcatcatgtccttggtttcaatatgagttgagtagtcgaggaaataatgtctgatttcgtagatctcactctcatacggaggtctctctgtggagagctggagttgttttatgagcgaagaggtttctgcaacagcgtggacgagatgccgaaaacatggagcctcgatccagttcctgagcgcctcgactcggtacattttgaattctttgtgatgctggtcgtcacttttgtttgatgctaatatcttggtttctccacagttgacaaagaatagaggtgagatctgatcgacagctcgttcgatctccggttgaacggccaagatgagtttgagtgccgagcctggttctttgagtaagtcggatgtgtttaggagacgtgtaagaatcgaacattgatgaagtagtagcggcaggacgcttgagcgtagctggcccatgtaagctttgatcgggtcgtctccttcgatagactcaattgtaggcctcctctcgcggtaatgcaaatcccaaagtttggcagctattccttcaaagccttggatgaccaaatctagcacaagagttgtgggaagggtcagccactacgcccaaacatgtctggtgttgatcagatctggtgaatgagtcgctccagtacacaccaccttgttgccagacctctcgtcttgctgattcactcaaatgctcgagcgggtccgcggcgccttgaatgatcgagttgtaatcgatcgagcataccatcgtttgccgtagatttttcttggccttcccacaaaatttccgtggataaatccgtgttgagcagcggtctcaggcgcaaggtggccctgtacagtcagctgcttcttgctgaggcgagagcggatttcgtctaggaagccgtggaagattgaaggtgcggcgggcgacaaacttacaccaccgggtcaccttttgtgatcggtggccattaatacaatccatgcatgatttgtaagcagtttgccaacaaaatctcagatcgaggaccattggtccaacccaatccttgatcgtggactagtgtgggtcaacatgaaccacctcggccgcccgcggggcgtgggcgtggttgcgggacgattggcaggcgattgacgccacgcttgccccaaccttggcacttcgctgtcgttggcccaacctgaattcagacattttgtcgaacactcgggttgggaccggtcttgaccattgatgggctggcaggctgtccatgcctgcgggcccgcttggttgcaacatgtcagacggacaaatttcatcctttttgtccaagaagtcaagaaaactttgttagaaaaaaaaattaaaatgttaaaaaaaataaaaataaaacgttagacacttcaacagtgacacaattacccaagtgggtaatgaagtaaaatttagggtaattgagtatttttccatttttattcttctaattttcattatacatctacagaaaaaagatacaaaagagaaaaacaagctcattaccctgaattttactgaattacccacttgggtaattgtgtcactgttgaagtgagagtcaaaataaaaaataaataaatgacacttagaacgttcatagatgtttttgagtgtggatgaggaaagaaacaatggccaagtggttagcgtgatggctagagatgcgtgcatccggatgtagagggttcatacctgagtctatctttttggcaaatgcggccccttcggagggctcttggaggccattggagggccattgaagggccattggggggtcattgagaggagattggaggcaatggtgggttgatgtggtattgggaggaggttggtacagtccacacagccaacacatcgtgtgttcccatttggggacggcatcaaaatacggacacaatcttggttaccaaagcccaaattgtggcttggtccaatgcctccagaggtattgaaccactagcgagatgacccagtggtgtaacacaagtcccttgcttcggaggggataattttttgcgggtaaattgccgaccgagtgtgagcctccaaaggagggacttgttggaaatctggcctgggagctggaggtctcttggtggaagaaattttcccctgccaattccccctccttcccaaaaccaaaaacttccgctggatgtgaccaggcaaaaggcctgatttttccctttatttctgtccaggcaaaatggccttgggcctcctccttctgcagtgaaaaattgtgaaagatttcacttttcacttgaatttggaggagtgaaacagaagttccttgatcttccatgagcttccctctcttatttacagcagatcaattgaaatgcgcatggctgtggcatcaatcccttatgtacacattgaatcacaaatacagctcaagatggcatccggtacccggcacccgcccacacccgcctcacacccggttgggcggtccgggtgcggtgccaggtccctgatttcctcagcaaatttggatggcacccgggtgccgcctgccacacccgcccacagccacttattatgccgggggcttgggtgagccagggggttgcgcaagtgtaaattacattcaaaactcgccctaagcaatcaatcttcacggggggcttggggagactggagggcgcgcaacggtgaatctcatccgagcggatctggatatccacatatccagcccttcagatatcccccacccggaaccaacacaatgccctcgtcacgcaagcaaaaaaagaacaaccacccctcactcgaatcctcagccatctcctccccaaccaacccacccctaattgaagttggccattactcatagggtgggcggatacaaagtacgggtacgggtgttgatattttgtgattttccaagcgggtacccgagtaccgtcacccaattcctgtccgggtatccatgttccaccggttgcaacctaacctgttagtttacacacaatgagactcagctgctgctgataccaagaaggtatggtttatcggacaagagttcctctccaccagtcttccgctcttcacaccagtcttccgctcttcaccattcacaacgtcccttccatcaaatcttctcacaactaccaatgaccatgaatcgatgtccacgtaacaaggcccggccttgcagctcaccctcccccagctctgcaaccaaccatagcgcagtacctgactctttaacacaagaagaagaatcaattgacaaacccaccgaaagtgtagatctaacacccctcactgacaaagaagagcttggtcagttcctcaaagcaatttcttcatatgtatcaagctgacaatgtattttttcaacttagcccgtgcacagagaattgcaaaaacagctgtcagtttcagttacgcttcatacaaccgttcgcagctatcaaatcaaatggataagaacggacggcaaatgatcacatatccctgtaaaacgtgagctttttgcttatcatttttttggaggctgcactgattcttcttaacctgtagctgtggaaccaaaatcaatcgtcctatgaccgactctccatgtagcaacctccttaaacatgcagccagttgcaaaaggaaacagacggaaaaggaacaaacttgtttgctggcatcactcagagtttgaggaacaggggatatcaatgtttgtgaggtgagttatgtttgactaaaccaacaattttttttcatgttaattacctgacattccatcaaacaggtcaaccaactgtgtgcgatctggtgtgcagaggctgcccaaccattctcggcattggaagacaagagcctcaagagactatcacacccaacggtcctcaagcactaaccaactcaatgcacggtcttgagatccatccatctcctgtacactgtggtacaggaaagctttaagcttgaactcaaggtattttccattcccaattcctcacttgagaagatatactaacagataattgattctatgcttcatagaaccacactcgtgcgttttatctgggtgtcaatgcatggcaatcactgaatggattcaacatccttggtattttcatgtcctggatcaacaaatcggaagctttgagtcagaaacttcaatcaatgctgctggacttcatcaagttgtctcaaagccacacgggcaaatacttggctgaaatggtccaatttgtcgtggagaagttttggttcaaaacaaggtatgttgtgttcacctgtctggatatctaattgccagccactgaccatttttcatttcagatctgtggcattgtttcagataacgcttccaacaacgcagtgatggtcgatgagttgaaaaaacttaaatggcctcgtttcaagggagaaccccattggatctgttgctttgcgcacatactcaaccttatcgtgaaaaccatcttgagatcgtttggaaccgagaggaactcaagccaaaacatcaacattgattcagaacacaaaaaggaagctaatatacaacaggttgaccagtaagtttgaaaacatcgattgatctatattcttgcctgagactgacgaaatgttggttttacctaagctacactaaagggcaccccaattctcagttggccaaagaagatgatttggattcagatgaggatgacaagggagtgaccagagtcacataagttgaaggattggatatcacagacatcaacaatctgagtgacaaagacgatcaagatcagtacactgcgcacaattgtcaacagactcttgcaaaggtaataagaacgtaatgaatcatatttttgattccgcctggaaattaactcatctttctctgatgcagccacagttttgagcaattgctcgtaaattgaaaaagtcaccaaaatccaaagagttgtttgccgagatctgtgaagcccactcaattcaatcacctcatagaatcccacaagacgtacaaacgaggtggaactcaacgttcctggaactaaccagtgttgattggtgtcacaaggcaatgtaagtaatttcttatatgctgagatcaatcaaacaacaccatgctgatccaacaattcagccttgagtggcaacacgatgagaaatacggccttaatcaaaagtaccaagtcggtgctagtgacttggaattgtcgaacgattggggagttgttctccagccattctacaagattaccttgcaagtattgaccaaaggatcagctcgtttatcacatgttgtggttttcattgactagattactgaacatctgtcaacaatcatctctgaaaagaagtacccggccccattgaggaatgcctgttgggcgggtcttcagatccacgctaactgactgctctcctttgtaccaagttgcaatgagtaagccgctggttcctttatgtcttttctgaggctgcaatctgattttatttgttttttgcagtactccacccctcgttcaaagacgagtactttgaaattgccagatggagtccagagtggatcaaagcggccattgatctcacccaagagatgtggatctcacattacaagccccaagtcaaggaaacagtttccgaagacactacttcaaaatcaaaagtaagtgattggctttcttcgatcttttatttgttctcaaattaacgattcttaatgttctttcagtccctaaccggtttcgtatctcaactcggtgcagcttcagcagcacggtcaggtaattcatcaactgaaccaattgacatctggctctcaggaggcctcatcttgtaaggatcagcgccagtcaatgccctcaaatggtggctgcaacagaagtggggaggaaacacttacgttgggctttcaaacatggctctcaatgtcttgagttgcccaggtttgttttgattctttatcatatccattcactcagagattgtcaactgttacagcaacatccgtggtcgtcgagcgcacattcagctttggccgtgactatgtcacaaccaaaaggcaccgcttgagtgcagctttggtgagcaggggaatgacggtagcattctatttgaaaaataaaaagatcaaaagcggggaactcaacaggtttgaagagaagctcaaaacagaaaaaaaaaaaagatgaaggcaacaggaaaaggaaaaggaaaagaacgtgtagagattgttataaattaagagaaaattgtgtgaagtgaatctatgtgtctgaacaagataaaagaaattgttgtgtctgaatgaaactaaatgaatccatgtgtccaaacaaaataaaatgattattgcctgcaagtaccgacggtaccggccaaaatttcccggatacccgcccagcgggtcccgagtacgtgtctgtgtcttgagtttgagctaaaaacatgagaggtacccggacccgttgcgggtacctgggtccagtctgccatctttagttttgcctttagaattgttacttccatctccttgaagtggtgaagaagataaacaaaaactaatatggacttggtcaggtctgaaagcccaaaagcagcaaccaacaaaaggtgatggcaagcaacagtcttgtgtgtctaccaatgtagttggtttgaaagaaggattgattatctcagtttgtctatctgcgtagtccgtacaaaaacaagattggtcaactaatatcttatgagaatccaatagtgtgatcaagaatctctttgggtgatcaagtctctttaatgtttatcattctgcgtccattcagttaccaacccaaacaatccaaatacactattacatataactagagaaaggagtgaaaagtatgatttttgttgaagtacattgtttgtgggctgaggtgttgatactggtgggagtccgtgatcaattggtcttgacatgcacaagtggagacgagtcatgctggttgatattgggtgggtatgtcaaaggggatgggtgatgatgattgagatgagtgaagatgatctgatgattactgtgagtgattctggatgatgttgggtatgttgaggcagttggggtgttgctatgcttccctaagttgaggttaaggaggacccactacaaaatcaattgcatcacattccgaagatgcgcggtaacattgcatgtgacatgcaatgccactttgcattttcaaaatgcaattgaatttttggccccaaaaattcaatcacattttggaaatgcgaggtgacatcgcatgtcacctgcgatgttaccgcgcattttcggaatgcaatgtaacaccttctgtagtgacttgaggagctccgtaagatttggtaagtctaccggtccttaaagagttacggaggaatcccatagctactgagctctaaagagcaaaggggggtgggattttccgctaaagtcgtgtaagttgaggttacagagcgggcttaccaaaacaagggtggatgctcttagactgcacatgccatagggccatgaatttcctccctttgtatttcttttggcacttgacttgatttttattgcttctattatatcatactagagaacacccaagtgttagccaaagaccgaccttgaaggatggtacagagccgtgcgtaaaggggcctcaaagggggtatttgcgtgtgttttacaacatgccaaatttgccatatgtacaacagattggccacttctaaaaccacaaaacacatcactcaacctactacaattgttgttttgagaaaaaacagccctgatacctaaagcctaccctaacacctacaccacgactcaattttttttgaaatcacacggcgggcccacagcgtggttggagttgggttggcgcgggtcatggaggacctgtctgccatggatcccacgtcacaggcgggctgacagcaaattaaagtcagcctgacttgaacacacctgggtacgacttggatgtcatgccaaccctgccgatgagcctgcgtgggcagatgtgcttgacatctggtcattcaagttggccacaccaccgtgtccaaccagaatctgcccttcccattgagcggacagaaaccatagggggggccgccgtggattttaatttcatggcatcaagcctgcgtgggcagacgtgcttgacatctggtcattcaagtggggcacaccaccttgtccgactagagtcttccctgggcaccgggttgacgagagctgttggcagtgaggcaccgtgaatctcaaggcaacgaatgaccttctaatcaacgttgttgccatggagccacctcacagtcaagatcaatggcatacataaatagtccattatgtacatctatcatagttaattacatgtattatacatagtttgaaagctatttgatgtacaattacagccctatgtcattaaatctggatccgttgttgttatcaccaaagtcaatgccctttgtcttgcacgtgttactttcttcacaacatttgatgcccactccttaaacccattgtgaagtgcatccagtcactgaagtgggctaggtggatcagctgggatatctgagaacttttggtgataatcaattgaggagagtgaagctaagttgacaatgtattgctcgttaattggtgtgtgtcaactcaagtgtcttccttgtactcctctgccgctccacaatcacaatctttgttgcagtcaacttacattcaccgtgttgatagttgtgctgggcattcaatccagctttgacactctgtatagtgagtgtgaaaggaggttaatttctatcaaataactttgaatgattgattggttttacttacatgtgaattgacaaaagtagagtgagaagtcctttggatctctctcatcttataaaagtcattttttcccatcctttgaaacattgtcgtattgataaagaactggctctgatgagaaagtttctcaaccttccagattgaattgactgatccaatatgttgagtttcttgagtttgtgtaacattaaactacataaagaccagcaatttgagtaaacacaaggaggagagacctgaatggcaaaatcaaaagagaacgaagaaaagtaccaagatgaaagagtttttcttgagaacttgctttccattcaattttagttcagatatctgtttgattttgtgatcaggataagaattttggaggtcctaggagttgcaatccaatcaacatctggtactttgaggttcttaacaaaagggtagttaacattttgaagatatgatgactgattgtagcccaacatctgctggattaaagcattttgtttgaatatactcgtgattctgttgaaagcttgtatgtatttcttttgttttttttcaaagaagaaaccactggagataatctgacggaaggtgtggtaactagtgactgaacgtaatggctatatctctgagaatgcccttaaaaatttcaaatttcccagtcgcaaaaagagaggctggaccatatcgaagaattgattctggtagatgaagtaacatatggaacttagctttactaacccattgggctgaatcttgaattatgtgcttcaagaatatattgatagtactgatacccattactaatccccatgggttaaaaaactgagactgggagcaatttgttttcagtatcgggacaacttctggaccaccacagattctgtgaggcctatgatttcttcattgggtaaattactcaacttggaccttcgtacagtgatttgggctggagtaagtgaagtcctcaaaagtatcaggtacatagatccgatggctgatgagcaggcgttttgaatccgttaggacaaagactttatttgcaatgtgtttgtataatcatctaacaggctgagctgacttaaaagttgacctcaacaacattccaccaaattaattttgatttacgaatcaccttatggattgggagtccattggtctctcttagcaatgaaatggaaatattcccaatagtttgccaaggctccctagaagaacctcaccctctaggttagagtagggggagtttatagggttgcaggtataattccttgttctagttttacagtcctgctccgagtccaaaagagtgaccacaaagacactaaaaaattggatttctttatatcaggtcccttgacgtatataaacgtctacagtgcaggccacgaagttccagccttccagtcagtacttttcctatcccgctaaccccctcttgctgtgaaatgagacatttagaattgcctttcttgttcttcagacccgctttatcattggtgatatacaaacaaactatctcacatcaaaacattcatagcacgagttatctcacatcaaaaattcatagcacgagttaataaatgggacccggtccttgtcgaattccatacgagttccactttccctaccagggttcaggacttgtgtgacatctgacaaggaaactactaatttcaaatttcaaaaaaaaattaaaatcctgaattaagaagattctagatcagtcgggtagctcagaatctgagtaagcaaaattctagaaacttcttttcctttttctgctaaaatttagaatcttccagaaaagctttccttgtatttccctttttccctcttagaatatttaagctcaacaagtttgtactcgcgaagggtttctttccttcgtggcaaaaattttgtttcatctttttcatcaccctttctctctcagaaaatcaaatccaagaaattcataaacaaatctgattctctaaataaagaactttaagtgttgcacccaaccacaaaattaagaaaccttaaaccaatccccaaatccctacccaatcaaccttgtagtgtgtcttcagtgaggtttggaattctttagcttgtctacgaattcccggaattccccgttgcttacaacccgccagtcttcaagacaaaaaatttgaaaaaaaagtgttttctttgtgttgtcaattgtagccgtccatcacatcctagtaatttacaatcttatccagccctatatgctcaaaccacctgaatcttgtaatagatcatgaatactattccgcatcctgagtcacgcgatccacgctggtcatgactgggtaaaaaacaagacaattcatcaatccagaaaaaattcatttaaaaaacttcatcatgtaacttacatgttgaccctcttggaagtatttatctttcatttgagtattgatcaaacgcaggaaattcttccaaagcgtaaatgtggcatcatgtttcagcatctcaactttagcgctggtgggtacatggaattaaagatctattgaacaacagccttcatcaccgatcacttgtgttggtttctcttgaagagatgtaaccctcccttcaagtttagtaatttagacaacagaatattgacaatttgtgctttgatccatcactcctttggctgtccagtccaaagttatcagctctgagatatcaaagatagctggattttcacttgcgtttttttttgcgaccaacaattcaggttatcctttttattctatttactttgcaaagctccccagtaattcatttcaagcggttcgattccatctaacactgtgaacaaaactcaaacaattctcaactgctgacatccctcttgagttgaacaggatgttctcactgtgcaactttcaacaccgttcgtgtaagaaggttctctccaattgtacgtccttggagggtttttaattggtagagacaggggatgctcttagaaaattgatagatgcatgatacatcaagacctggaaactacttccttttgttggaccgcctcagttccaactgcaaagcctgaaatttggctacaaggctggttcttgacgatgatcccaacagcgaagtttatcagaaaattgaccccgtgccaacatcgttgcccatgacaatagatggcaatcgtgcgcctcatcgaatcaaggaacgctctacacaacttctcctctcgaaggtgagtatgctcatgtaaggggtaagcatttggattatcaaggagccgggcttatctggcgccgggagttcgtcacgagagggacaatcatgaacgtcaagtcgcgtaccgcgaggcaccctctcggctcgatcaccacgtcgaacaaatactgaaacctctcaaaatagagaatctgagtcaacatgcaccccttcacatggtatgtcagctcggggatccttcacagtcctcaatcatctacgcccgccgagcgatggggtggcaatagtgagaaaagttgggacaagtagggggtagcttaccgagcgggtttatcggcacgagggtggatgctcttattagagttgtaaggatcggatgaaatcggactgactgtgtggcccgacttcttccgccgcttatatgtattaacccctgcggaatagactctatatgcacccctttatttccgctcttgtacactcttttccacctctttgctcccggagtgaaggggggtgatctgctgcaggtgaagtcgatccgaccgccttccgtcgcactacctcagtcccctctcacaaattaattttttttatcctcttatctcgaagtcaggtgaaatggacgatcctgtggctgaggtacgtgaagtgtgatcccaaatgctttggtttttctccttatctttcttgcaagaaggggcccgaatcttaggtgaattacagagctaactgatgtcaggatttttgatttgaaattttcatgcgtaaatcagattagggacgttgtacgatcacttgttgaaccgtatgaagcatcagtgcttgcttcgaatgtggaaaagttagacttgaatatctgttgttgtgttgaactctgaagtcaaaggatgtaacaaaatctccgaattttttttcatttgtgctcacttccagatacttcactgaggacgcgttcatcttgcatccgcttttgaaccagactccttccaaaggtagccgagaacatctgagaggcatttacaaaattctgtgagtttttttttctctctggatcgtgcatcctaggacgtcttggatgtctaatcgtgaacgaatttcctgcgcagtcgagtttttactatcaacaataagatcgagtttcacgctgtgatgtttaacgaggataaaactcaaggttcaattggtaagtcttgaaaccttaacctagtgtaccagaacctaaccactgatcaacaacaaactttttcttatggttccctccaaccagaattgactgagcatctctacccacgactatttccatgcgaaagtttgaagatgtcacttccattatggatcagaatcgacttgattaaagataccgatgggaaatatcgaatatgcaggttagccaagtctggctagatattcccagtcacctgttaccaccatgctgaatttactttttatttatcctcagacaacacgacatgattccagctgatccaggaatcgttgcacttccgttcctttcgatctttacccacgggtttaacatcatcaaagcgtttaatggtttggctatgggaacaatcggaaagtttcttcttgatcggaaatattttggagcttgaaaatcgaaatctagtgtgaatgataatattgttggtgacaaatcatgttgtgatgacacaaagaaaaccgaaaaacaaaaatgtagcttttcctaaataatctgaattgaatcatcaaccactttcagtttggtatactatcacccgatgtagcctccttccttgaattgtttgcgttccgaataggcaagaccttgtggcaagggtcacagccagccagtccaagataatgattagaggaacgtatcgtccttgtttagctcgaccatgtgcaaagagagaatgcacaaaaattacaagtgatgaatgtgtgaagactatgattgcttgggttactcagatctaacctcaagagatcgatgtcgtgtgtgaagtggttgcatgaaatcttgttgatggagttgcagatccgccagtcatatgacgtgatccgacagtatccgaggctcgagggaagtagggtagttggcaacttgcctgttccacctgccaacgcatggtggactttcttcgagccagcaccacccaagaacatcttcactactaccaaaacgcaacagccatccagttcaactacagcccttagtaatccaatcaaccaaacgatgtctacctgcaccggctatctcgatccgatcaagcgctcctttgcggatgcaccagttgctgacgagggcgtggacacagtaccattcttggaagcctgcgaagacctcgtcaagctattcggtgagtgaatcgtctcattattatcttttctccgattcatagatcacgaattataacgtacgctttcatgtatatcttcagatctttttcggaagtaaagcgttcgccgtcgtgcagaatgatttgaccggcaatattactgtgagtacgcttcacgcccgagaccccaccttatgcgcttacagagactgacgtgtgtaactctttttttttcattggatcccacagaaaaatcgtactcgttataacgctttcccagagaaatcaaagactctcgagtcactcgtagagaacgatattcgtgaagagaagaaagatgcaacccacgcactactctggttaactcggtaaaatcacatttgatttcttgaatataaaaaaagattgagttataagctggaaggtgacttacatatcaagaactcttttttcttgtaggggtttacacttcacctctgaagggcttcgattatcccagaacaatccaggagaagagttatctatatcgtttacgaaaggttatgaagctacattaaaacagtatcattcctttgtaatgaaaccattactcggagtaagttcatatatctgattcctcgccatttccatcacaaagatgtggacatgtattctgactctgattgaaatcaccacagctcgccatgaaagcgtgcccttatccagcagatttatatcaaaaattgggaactaaggagaaagtggaagtcaaattagaaagatggctttcagctctagaaatgatcgttgtccgaatccaaaaattctatgaaaagggcaactatggcaacggtctttgagaaggcgtgattcaccacacccgcccaacaaatcttgaccatgttggaccagtaattgagcatgttcttctcttgctccggatcgtcaatcaatttggaggcctaggcaaggagattcttctggatatgccacacacagagcatttgtttggtgtcagggaaggtggtggctagagagttaattaatgcttgtttgcggtcagtgatgacaacagctgggaaaggtatcttgtgggatttgaagcccgtgaccaacgcttgcagcgcccagtcgcagaaagatttggtttgtttgctcatgaaacagaaggcaatactgaaagtcttgttggcaccagtgattcctgagatgtgaagcaagggcatgttgtatttatttgtcttgtacgtacagtcaagtagaatgatgtgagggtaagccgtgagcaattcaactgatctagcgtgacataaaaatagggctttgagaactccttcatcattgactttggttgttgtggtgaaatcggtgttgaggagagttttgttgagatgggcgatcgggctgagtccttgaagggattggagtcttgatttcttccttgccgtatatatggtgcttatggtcgctagaatcttctcgttggggtgagttttcttcattgcggtgaggattccctgtggtttcaagccagtgtcgccaagatccttcattttgataatgagtgcaggtgccagcttttgattagctgtatgtgcagctgcgtatgcagatggtgggtggttgtgtctaggttctttacaagtgaagtaccaagcttgctttttcttgtggaaataaccagtggcggtgaaaggacagtcaatcaattttgtcgaagctgtcgaggccttggtctctcctgggcgcctgttctggttgggattgccgccactggagaatgcacaagggaaaaaaaaacaggtgggtcagcatcaggaaggtgcaaaacatggcagagaaatgggggttggcaagtggattttgggagtcggcactcggaaaaagtgagtcggtgatagaatcttgggagttgggagtcaggaaaacaattcctgagccccttgtgtacaaaggagtggatttgggagtcagaaatgggagaatgagagctggaagtccaagtttggcagtcacagattgaaaactggaagtcggaatgacaaataaaagagaaagataaaaatcaaactcaccagtcacatttcattgtcttgctcttcccggctactcctcgtctacacactactgcaaagccattctcaaccctgaagcccttagcagtagagagcattttgtccacatcttctgaataagcgtccggagggcaaggaaaagcatatagacaatccccagtttttggatcaatttcgtcgtagtcaagactaaaaacaaagctagataatgagatgttatcgtccatttcactattgccgtcatcaggttccgctacaatatttttctttggcacatttttttttgagaattccagttttttctccaggtttttcatttttttgtatgattttttgattttttcttcgaatcttggtgcatttatttcttttgagttctcagtggcttcatcaatttcaatggaccgaaatgatgtccggttgaccgcacggcgacgtcgactcaaccgtcacccggacgtcgagtgcatttgggagtcagaactccaatttttgggagttgatcaaccaagccccaaaataaataacattgattatgaaaagaagtgaaagcggtatgaattcctggaatgatacacctgcgatcaggtagctgatcacaatcatcaagccactatcctcagtcatggaagatgagaacgggttccaatattgagtatccaatgaacttttgattcacaaagatatacaagaacgtatttgttgacaatcaaatagggtgtcaaatgtggtaagatttttgcccaaacgcgtcaggtgagcttcttttttttagtgcttattgatctgacattgcgcacttaagtggatactagttaatgtagacatgcggtgatgtttgatagactacacatgattgaatatgggaaaatattttcaaccttgagaacttataagatctgagtttgtacatgactgaaaaggaaaagaaaaaggacaaaagaacaacaataaaaaataaaatgaaatccatctcttttgaccgggtctgaaaatagcaaaaactggctccaaccgacttttggcaccctgcgacccagacaggacgcttcatgggtgctcaagccatgaaccctaaattgaggagcgggcagaaagttgattgaaaccaatagccacttgtatccagctcgacaaccctactgatatctatcctaaacaataaattcaaaattaacaatagggggtgtcaatgatgcaaaatccaccattagaaaccagttaatt
@@ -0,0 +1 @@
1
+ PST130_7067 26091 13 26091 26092
@@ -0,0 +1 @@
1
+ PST130_7067,T,3334,G,7067
@@ -1 +1,2 @@
1
- BS00183592,3A,TTGATCTCATAGAAGATGTAACAGCTCAGTTGCCTCCCAGCAAGGTGCCCCGTCTTCACTGTTTGGTGTGGCGAAAGTTATCATCTGTTGATTTTCTAGC[A/C]AAGTGTCCTGCTGTTGAGCCTTCACCAAGTCTCCTAAAAGGCATCCGGCAATCTTTGGTCTCACATCTCACTCTGGTATTAGGGAAAGATGACCTGGCAG
1
+ BS00183592,3A,TTGATCTCATAGAAGATGTAACAGCTCAGTTGCCTCCCAGCAAGGTGCCCCGTCTTCACTGTTTGGTGTGGCGAAAGTTATCATCTGTTGATTTTCTAGC[A/C]AAGTGTCCTGCTGTTGAGCCTTCACCAAGTCTCCTAAAAGGCATCCGGCAATCTTTGGTCTCACATCTCACTCTGGTATTAGGGAAAGATGACCTGGCAG
2
+ BS00183591,3A,TTGATCTCATAGAAGATGTAACAGCTCAGTTGCCTCCCAGCAAGGTGCCCCGTCTTCACTGTTTGGTGTGGCGAAAGTTATCATCTGTTGATTTTCTAGCgAAGTGTCCTGCTGTTGAGCCTTCACCAAGTCTCCTAAAAGGCATCCGGCAATCTTTGGTCTCACATCTCACTCTGGTATTAGGGAAAGATGACCTGGCAG
@@ -0,0 +1,5 @@
1
+ PRIMER_PRODUCT_SIZE_RANGE=50-200
2
+ PRIMER_MAX_SIZE=25
3
+ PRIMER_LIB_AMBIGUITY_CODES_CONSENSUS=1
4
+ PRIMER_LIBERAL_BASE=1
5
+ PRIMER_NUM_RETURN=5
@@ -33,6 +33,7 @@ class TestPolyploidTools < Test::Unit::TestCase
33
33
  assert_equal(snp.position , 51, "Position isnt parsed #{snp.position}")
34
34
  assert_equal(snp.original , "T", "ORiginal base not parsed, is #{snp.original}")
35
35
  assert_equal(snp.snp , "C")
36
+
36
37
  assert(snp.template_sequence == "CGAAGCGATCCTACTACATTGCGTTCCTTTCCCACTCCCAGGTCCCCCTAYATGCAGGATCTTGATTAGTCGTGTGAACAACTGAAATTTGAGCGCCACAA", "#{snp.template_sequence}!=CGAAGCGATCCTACTACATTGCGTTCCTTTCCCACTCCCAGGTCCCCCTAYATGCAGGATCTTGATTAGTCGTGTGAACAACTGAAATTTGAGCGCCACAA")
37
38
  #true
38
39
  end
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
3
+ test_out=$DIR/test_out
4
+ rm -rf $test_out
5
+ $DIR/../bin/polymarker.rb -c $DIR/data/PST130_7067.fa -s $DIR/data/PST130_7067.csv -r $DIR/data/PST130_7067.fa -o $test_out -e affine:local -a arm_selection_morex
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bio-polyploid-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ricardo H. Ramirez-Gonzalez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-30 00:00:00.000000000 Z
11
+ date: 2014-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bio
@@ -94,6 +94,7 @@ executables:
94
94
  - map_markers_to_contigs.rb
95
95
  - markers_in_region.rb
96
96
  - polymarker.rb
97
+ - snp_position_to_polymarker.rb
97
98
  - snps_between_bams.rb
98
99
  extensions: []
99
100
  extra_rdoc_files:
@@ -116,6 +117,7 @@ files:
116
117
  - bin/map_markers_to_contigs.rb
117
118
  - bin/markers_in_region.rb
118
119
  - bin/polymarker.rb
120
+ - bin/snp_position_to_polymarker.rb
119
121
  - bin/snps_between_bams.rb
120
122
  - bio-polyploid-tools.gemspec
121
123
  - conf/defaults.rb
@@ -178,12 +180,17 @@ files:
178
180
  - test/data/LIB1721.bam.bai
179
181
  - test/data/LIB1722.bam
180
182
  - test/data/LIB1722.bam.bai
183
+ - test/data/PST130_7067.csv
184
+ - test/data/PST130_7067.fa
185
+ - test/data/PST130_7067.fa.fai
186
+ - test/data/PST130_reverse_primer.csv
181
187
  - test/data/S22380157.fa
182
188
  - test/data/S22380157.fa.fai
183
189
  - test/data/Test3Aspecific.csv
184
190
  - test/data/Test3Aspecific_contigs.fa
185
191
  - test/data/bfr_out_test.csv
186
192
  - test/data/patological_cases5D.csv
193
+ - test/data/primer_3_input_header_test
187
194
  - test/data/short_primer_design_test.csv
188
195
  - test/data/test_primer3_error.csv
189
196
  - test/data/test_primer3_error_contigs.fa
@@ -191,6 +198,7 @@ files:
191
198
  - test/test_exon_container.rb
192
199
  - test/test_exonearate.rb
193
200
  - test/test_snp_parsing.rb
201
+ - test/test_wrong_selection.sh
194
202
  homepage: http://github.com/tgac/bioruby-polyploid-tools
195
203
  licenses:
196
204
  - MIT