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 +4 -4
- data/VERSION +1 -1
- data/bin/polymarker.rb +51 -11
- data/bin/snp_position_to_polymarker.rb +68 -0
- data/bio-polyploid-tools.gemspec +12 -5
- data/lib/bio/PolyploidTools/SNP.rb +9 -0
- data/lib/bio/db/primer3.rb +38 -0
- data/test/data/PST130_7067.csv +1 -0
- data/test/data/PST130_7067.fa +2 -0
- data/test/data/PST130_7067.fa.fai +1 -0
- data/test/data/PST130_reverse_primer.csv +1 -0
- data/test/data/Test3Aspecific.csv +2 -1
- data/test/data/primer_3_input_header_test +5 -0
- data/test/test_snp_parsing.rb +1 -0
- data/test/test_wrong_selection.sh +5 -0
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 612c7e5e39e8908003387efe2e6ba739b7fb981d
|
4
|
+
data.tar.gz: eac406e26c6985115884ba53f0c3dadf22bf3e81
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9408f36825e70458901b867b3733d878291240b937d120be658c71e5b7d53f22ae2c7023408a9cfb2be385a630ed1fae4e0e321160d6556820baa36a657bc7a
|
7
|
+
data.tar.gz: 84bf294ab30e62fe758b54274adcca0c1f0f5331a0bc56a2932b2af9d112518c45535b59496f7f33365ef70d10a578946d398b095da473fd5d0af857383f1c10
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
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
|
-
|
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=
|
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
|
+
|
data/bio-polyploid-tools.gemspec
CHANGED
@@ -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.
|
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.
|
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-
|
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.
|
data/lib/bio/db/primer3.rb
CHANGED
@@ -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
|
data/test/test_snp_parsing.rb
CHANGED
@@ -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.
|
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-
|
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
|