bio-samtools 2.0.4 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,433 +0,0 @@
1
- $: << File.expand_path(File.dirname(__FILE__) + '/../lib')
2
- $: << File.expand_path('.')
3
- require 'rubygems'
4
- require 'ffi'
5
- require "test/unit"
6
- require "bio/db/sam"
7
- require "bio/db/sam/sam"
8
- require "bio/db/pileup"
9
- require "bio/db/vcf"
10
-
11
- class TestBioDbSam < Test::Unit::TestCase
12
-
13
- #Set up the paths
14
- def setup
15
- @test_folder = "test/samples/small"
16
- @testTAMFile = @test_folder + "/test.tam"
17
- @testBAMFile = @test_folder + "/testu.bam"
18
- @testReference = @test_folder + "/test_chr.fasta"
19
-
20
- end
21
-
22
- #Removing the index files
23
- def teardown
24
- begin
25
- File.delete(@testReference + ".fai")
26
- #p "deleted: " + @testReference + ".fai "
27
- rescue
28
- end
29
- begin
30
- File.delete(@testBAMFile + ".fai")
31
- #p "deleted: " + @testBAMFile + ".bai "
32
- rescue
33
- end
34
- end
35
-
36
- def default_test
37
- #puts $LOAD_PATH
38
- assert(true, "Unit test test")
39
- end
40
-
41
- def test_openSAMFile
42
- bamfile = Bio::DB::SAM::Tools.samopen(@testTAMFile,"r",nil)
43
- Bio::DB::SAM::Tools.samclose(bamfile)
44
- assert(true, "file open and closed")
45
- end
46
-
47
- def test_new_class_empty
48
- begin
49
- bam = Bio::DB::Sam.new({})
50
- assert(false, "Should fail while opening without parameters")
51
- rescue Bio::DB::SAMException => e
52
- #puts e.message
53
- assert(true, e.message)
54
- end
55
- end
56
-
57
- def test_new_class_empty_invalid_path
58
- begin
59
- sam = Bio::DB::Sam.new({:bam=>"INVALID"})
60
- sam.open
61
- sam.close
62
- assert(false, "Should fail with an invalid path")
63
- rescue Bio::DB::SAMException => e
64
- #puts e.message
65
- assert(true, e.message)
66
- end
67
- end
68
-
69
- def test_class_text_read_no_faidx
70
- sam = Bio::DB::Sam.new({:tam=>@testTAMFile})
71
- sam.open
72
- sam.close
73
- assert(true, "file open and closed with the class")
74
- end
75
-
76
- def test_class_text_read_no_close
77
-
78
- fam = Bio::DB::Sam.new({:tam=>@testTAMFile})
79
- fam.open
80
- fam = nil
81
- ObjectSpace.garbage_collect
82
-
83
- assert(true, "file openend but not closed")
84
- end
85
-
86
- def test_class_binary_read_no_close
87
-
88
- Bio::DB::Sam.new({:bam=>@testBAMFile}).open
89
- ObjectSpace.garbage_collect
90
- assert(true, "BINARY file openend but not closed")
91
- end
92
-
93
- def test_read_coverage
94
- sam = Bio::DB::Sam.new({:bam=>@testBAMFile, :fasta=>@testReference})
95
- sam.open
96
- File.open( @test_folder +"/ids2.txt", "r") do |file|
97
- #puts "file opened"
98
- file.each_line{|line|
99
- fetching = line.split(' ')[0]
100
- #puts "fetching: " + fetching
101
- sam.load_reference
102
- seq = sam.fetch_reference(fetching, 0, 16000)
103
- # puts seq
104
- # puts seq.length
105
- als = sam.fetch(fetching, 0, seq.length)
106
- # p als
107
- if als.length() > 0 then
108
- # p fetching
109
- # p als
110
- end
111
- }
112
-
113
- end
114
- sam.close
115
- assert(true, "Finish")
116
- end
117
- # def test_read_TAM_as_BAM
118
- # begin
119
- # sam = Bio::DB::Sam.new({:bam=>@testTAMFile})
120
- # sam.open
121
- # sam.close
122
- # assert(false, "Should raise an exception for reading a BAM as TAM")
123
- # rescue Bio::DB::SAMException => e
124
- # assert(true, "Properly handled")
125
- # end
126
- # end
127
-
128
- # def test_read_BAM_as_TAM
129
- # begin
130
- # sam = Bio::DB::Sam.new({:tam=>@testBAMFile})
131
- # sam.open
132
- # sam.close
133
- # assert(false, "Should raise an exception for reading a BAM as TAM")
134
- # rescue Bio::DB::SAMException => e
135
- # assert(true, "Properly handled")
136
- # end
137
- # end
138
-
139
- def test_bam_load_index
140
- sam = Bio::DB::Sam.new({:bam=>@testBAMFile})
141
- sam.open
142
- index = sam.load_index
143
- sam.close
144
- assert(true, "BAM index loaded")
145
- # attach_function :bam_index_build, [ :string ], :int
146
- # attach_function :bam_index_load, [ :string ], :pointer
147
- # attach_function :bam_index_destroy, [ :pointer ], :void
148
- end
149
-
150
- def test_tam_load_index
151
- begin
152
- sam = Bio::DB::Sam.new({:tam=>@testTAMFile})
153
- sam.open
154
- sam.load_index
155
- sam.close
156
- assert(false, "TAM index loaded")
157
- rescue Bio::DB::SAMException => e
158
- assert(true, "Unable to load an index for a TAM file")
159
- end
160
- end
161
-
162
- def test_read_segment
163
- sam = Bio::DB::Sam.new({:bam=>@testBAMFile})
164
- sam.open
165
- als = sam.fetch("chr_1", 0, 500)
166
- #p als
167
- sam.close
168
- assert(true, "Seems it ran the query")
169
- #node_7263 238 60 has 550+, query from 0 to 500, something shall come....
170
- end
171
-
172
- =begin ##these tests are correct-ish but the functionality isnt implemented yet ...
173
- def test_read_invalid_reference
174
- sam = Bio::DB::Sam.new({:bam=>@testBAMFile})
175
- sam.open
176
- begin
177
- als = sam.fetch("Chr1", 0, 500)
178
- #p als
179
- sam.close
180
- assert(false, "Seems it ran the query")
181
- rescue Bio::DB::SAMException => e
182
- #p e
183
- assert(true, "Exception generated and catched")
184
- end
185
- end
186
-
187
- def test_read_invalid_reference_start_coordinate
188
- sam = Bio::DB::Sam.new({:bam=>@testBAMFile})
189
- sam.open
190
- begin
191
- als = sam.fetch("chr", -1, 500)
192
- #p als
193
- sam.close
194
- assert(false, "Seems it ran the query")
195
- rescue Bio::DB::SAMException => e
196
- #p e
197
- assert(true, "Exception generated and catched")
198
- end
199
- end
200
-
201
- def test_read_invalid_reference_end_coordinate
202
- sam = Bio::DB::Sam.new({:bam=>@testBAMFile})
203
- sam.open
204
- begin
205
- als = sam.fetch("chr", 0, 50000)
206
- #p als
207
- sam.close
208
- assert(false, "Seems it ran the query")
209
- rescue Bio::DB::SAMException => e
210
- #p e
211
- assert(true, "Exception generated and catched")
212
- end
213
- end
214
-
215
- def test_read_invalid_reference_swaped_coordinates
216
- sam = Bio::DB::Sam.new({:bam=>@testBAMFile})
217
- sam.open
218
- begin
219
- als = sam.fetch("chr", 500, 0)
220
- #p als
221
- sam.close
222
- assert(false, "Seems it ran the query")
223
- rescue Bio::DB::SAMException => e
224
- #p e
225
- assert(true, "Exception generated and catched")
226
- end
227
- end
228
- =end
229
- def test_fasta_load_index
230
- sam = Bio::DB::Sam.new({:fasta=>@testReference})
231
- sam.load_reference
232
- seq = sam.fetch_reference("chr_1", 0, 500)
233
- #p seq
234
- sam.close
235
- assert(true, "The reference was loaded")
236
- end
237
-
238
- def test_fasta_load_index
239
- sam = Bio::DB::Sam.new({:fasta=>@testReference})
240
- sam.load_reference
241
- begin
242
- seq = sam.fetch_reference("chr1", 0, 500)
243
- #p "Error seq:"+ seq
244
- sam.close
245
- assert(false, "The reference was loaded")
246
- rescue Bio::DB::SAMException => e
247
- #p e
248
- assert(true, "The references was not loaded")
249
- end
250
- end
251
-
252
- def test_load_feature
253
-
254
- fs = Feature.find_by_bam("chr_1", 0, 500,@testBAMFile)
255
-
256
- #p fs
257
- assert(true, "Loaded as features")
258
- end
259
-
260
- def test_avg_coverage
261
- sam = Bio::DB::Sam.new(:fasta=>@testReference, :bam=>@testBAMFile )
262
- sam.open
263
- cov = sam.average_coverage("chr_1", 60, 30)
264
- #p "Coverage: " + cov.to_s
265
- sam.close
266
- assert(true, "Average coverage ran")
267
- assert(3 == cov, "The coverage is 3")
268
- end
269
-
270
-
271
- def test_chromosome_coverage
272
- sam = Bio::DB::Sam.new({:fasta=>@testReference, :bam=>@testBAMFile })
273
- sam.open
274
- covs = sam.chromosome_coverage("chr_1", 0, 60)
275
- #p "Coverage: "
276
- #p covs
277
- #puts "POS\tCOV"
278
- covs.each_with_index{ |cov, i| puts "#{i}\t#{cov}" }
279
- sam.close
280
- assert(true, "Average coverage ran")
281
- #assert(3 == cov, "The coverage is 3")
282
- end
283
-
284
- #test whether the call to mpileup works and returns 10 objects of class pileup
285
- def test_mpileup
286
- sam = Bio::DB::Sam.new(:fasta=>@testReference, :bam=>@testBAMFile )
287
- pileup_list = []
288
- sam.mpileup(:region => "chr_1:100-109") do |pile|
289
- #next unless pile.ref_name == 'chr_1' ##required because in the test environment stdout gets mixed in with the captured stdout in the function and non pileup lines are passed...
290
- pileup_list << pile
291
- end
292
- assert_equal(10,pileup_list.length)
293
- pileup_list.each do |p|
294
- assert_kind_of(Bio::DB::Pileup, p)
295
- end
296
- end
297
-
298
- #test whether the call to experimental mpileup_plus returns vcf or pileup objects appropriately
299
- #return ten objects of each class according to set of :g option
300
- def test_mpileup_plus
301
- sam = Bio::DB::Sam.new(:fasta=>@testReference, :bam=>@testBAMFile)
302
- list = []
303
- sam.mpileup_plus(:region => "chr_1:100-109") do |pile|
304
- list << pile
305
- end
306
- assert_equal(10,list.length)
307
- list.each {|p| assert_kind_of(Bio::DB::Pileup, p)}
308
- vcf_list = []
309
- sam.mpileup_plus(:region => "chr_1:100-109", :g => true) do |vcf|
310
- vcf_list << vcf
311
- end
312
- assert_equal(10,vcf_list.length)
313
- vcf_list.each {|p| assert_kind_of(Bio::DB::Vcf, p)}
314
- end
315
-
316
- # test whether command line calls to mpileup are correctly escaped
317
- def test_mpileup_escaping
318
- test_dir = File.join('test','samples','pipe_char')
319
- sam = Bio::DB::Sam.new(
320
- :fasta => File.join(test_dir,'test_chr.fasta'),
321
- :bam => File.join(test_dir, 'test.bam')
322
- )
323
- pileup_list = []
324
- sam.mpileup(:region => "gi|123|chr_1:100-109") do |pile|
325
- pileup_list << pile
326
- end
327
- assert_equal(10,pileup_list.length)
328
- pileup_list.each do |p|
329
- assert_kind_of(Bio::DB::Pileup, p)
330
- end
331
- end
332
-
333
- # test whether command line calls to mpileup are correctly escaped
334
- def test_mpileup_error_reporting
335
- test_dir = File.join('test','samples','pipe_char')
336
- sam = Bio::DB::Sam.new(
337
- :fasta => File.join(test_dir,'does_not_exist.fasta'),
338
- :bam => File.join(test_dir, 'test.bam')
339
- )
340
- assert_raise Bio::DB::SAMException do
341
- pileup_list = []
342
- sam.mpileup(:region => "gi|123|chr_1:100-109") do |pile|
343
- pileup_list << pile
344
- end
345
- end
346
- end
347
-
348
- #test whether the call to mpileup returns a vcf object if :g => true is used on the command-line
349
- # def test_vcf
350
-
351
- # sam = Bio::DB::Sam.new(:fasta=>@testReference, :bam=>@testBAMFile )
352
- # sam.mpileup(:region => "chr_1:100-109", :u => true ) do |p|
353
- # $stderr.puts "p is #{p}"
354
- # assert_kind_of(String,p)
355
- # end
356
- # end
357
- def test_indexstats
358
-
359
- sam = Bio::DB::Sam.new(:bam => @testBAMFile, :fasta => @testReference)
360
- assert_equal({"chr_1"=>{:length=>69930, :mapped_reads=>0, :unmapped_reads=>0},
361
- "*"=>{:length=>0, :mapped_reads=>0, :unmapped_reads=>0}
362
- }, sam.index_stats)
363
- end
364
-
365
- def test_each_reference
366
- sam = Bio::DB::Sam.new(:bam => @testBAMFile, :fasta => @testReference)
367
- sam.each_reference do |name, length|
368
- next if name == '*'
369
- assert_equal name, "chr_1"
370
- assert_equal length, 69930
371
- end
372
- end
373
-
374
- def test_view
375
- sam = Bio::DB::Sam.new(:bam => @testBAMFile, :fasta => @testReference)
376
- sam.open
377
- count = 0
378
- sam.view() do |aln|
379
- count = count +1
380
- end
381
- assert_equal count, 9
382
- end
383
-
384
- def test_view_b
385
- sam = Bio::DB::Sam.new(:bam =>"/Users/macleand/Desktop/AT1/realigned.bam", :fasta => "/Users/macleand/src/data/ash_dieback/chalara_fraxinea/Kenninghall_wood_KW1/assemblies/gDNA/KW1_assembly_version1/Chalara_fraxinea_TGAC_s1v1_scaffolds.fa")
386
- sam.open
387
- count = 0
388
- sam.view_b do |aln|
389
-
390
- count = count +1
391
- end
392
- puts "count is: #{count}"
393
- assert_equal count, 9
394
- end
395
-
396
- # def test_view_big
397
- # puts "...woot"
398
- # sam = Bio::DB::Sam.new(:bam => "/Users/macleand/Desktop/AT1/realigned.bam", :fasta => "/Users/macleand/src/data/ash_dieback/chalara_fraxinea/Kenninghall_wood_KW1/assemblies/gDNA/KW1_assembly_version1/Chalara_fraxinea_TGAC_s1v1_scaffolds.fa")
399
- # sam.open
400
- # sam.view do |aln|
401
- # puts aln
402
- # end
403
- # end
404
-
405
- end
406
-
407
- class Feature
408
- attr_reader :start, :end, :strand, :sequence, :quality
409
-
410
- def initialize(a={})
411
- #p a
412
- @start = a[:start]
413
- @end = a[:enf]
414
- @strand = a[:strand]
415
- @sequence = a[:sequence]
416
- @quality = a[:quality]
417
- end
418
-
419
- def self.find_by_bam(reference,start,stop,bam_file_path)
420
-
421
- sam = Bio::DB::Sam.new({:bam=>bam_file_path})
422
- features = []
423
- sam.open
424
-
425
- fetchAlignment = Proc.new do |a|
426
- a.query_strand ? strand = '+' : strand = '-'
427
- features << Feature.new({:start=>a.pos,:end=>a.calend,:strand=>strand,:sequence=>a.seq,:quality=>a.qual})
428
- end
429
- sam.fetch_with_function(reference, start, stop, fetchAlignment)
430
- sam.close
431
- features
432
- end
433
- end
data/test/svg DELETED
@@ -1,133 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="1000" height="330" style="" xmlns:xlink="http://www.w3.org/1999/xlink"><line x1="1" y1="20" x2="1000" y2="20" stroke="black" stroke-width="1" style=""/>
2
- <rect x="0.0" y="20" width="1" height="5" fill="" rx="" ry="" stroke="black" stroke-width="1" style=""/>
3
- <text x="0.0" y="40" fill="black" transform="" style="font-family:Arial;font-style:italic">1</text>
4
- <rect x="111.00917431192661" y="20" width="1" height="5" fill="" rx="" ry="" stroke="black" stroke-width="1" style=""/>
5
- <text x="111.00917431192661" y="40" fill="black" transform="" style="font-family:Arial;font-style:italic">606</text>
6
- <rect x="222.01834862385323" y="20" width="1" height="5" fill="" rx="" ry="" stroke="black" stroke-width="1" style=""/>
7
- <text x="222.01834862385323" y="40" fill="black" transform="" style="font-family:Arial;font-style:italic">1211</text>
8
- <rect x="333.0275229357798" y="20" width="1" height="5" fill="" rx="" ry="" stroke="black" stroke-width="1" style=""/>
9
- <text x="333.0275229357798" y="40" fill="black" transform="" style="font-family:Arial;font-style:italic">1816</text>
10
- <rect x="444.03669724770646" y="20" width="1" height="5" fill="" rx="" ry="" stroke="black" stroke-width="1" style=""/>
11
- <text x="444.03669724770646" y="40" fill="black" transform="" style="font-family:Arial;font-style:italic">2421</text>
12
- <rect x="555.045871559633" y="20" width="1" height="5" fill="" rx="" ry="" stroke="black" stroke-width="1" style=""/>
13
- <text x="555.045871559633" y="40" fill="black" transform="" style="font-family:Arial;font-style:italic">3026</text>
14
- <rect x="666.0550458715596" y="20" width="1" height="5" fill="" rx="" ry="" stroke="black" stroke-width="1" style=""/>
15
- <text x="666.0550458715596" y="40" fill="black" transform="" style="font-family:Arial;font-style:italic">3631</text>
16
- <rect x="777.0642201834863" y="20" width="1" height="5" fill="" rx="" ry="" stroke="black" stroke-width="1" style=""/>
17
- <text x="777.0642201834863" y="40" fill="black" transform="" style="font-family:Arial;font-style:italic">4236</text>
18
- <rect x="888.0733944954129" y="20" width="1" height="5" fill="" rx="" ry="" stroke="black" stroke-width="1" style=""/>
19
- <text x="888.0733944954129" y="40" fill="black" transform="" style="font-family:Arial;font-style:italic">4841</text>
20
- <rect x="999.0825688073395" y="20" width="1" height="5" fill="" rx="" ry="" stroke="black" stroke-width="1" style=""/>
21
- <text x="999.0825688073395" y="40" fill="black" transform="" style="font-family:Arial;font-style:italic">5446</text>
22
- <text x="3" y="60" fill="black" transform="" style="font-family:monospace;">data track</text>
23
- <text x="1005.0" y="65" fill="black" transform="" style="font-family:monospace;">1046.16</text>
24
- <text x="1005.0" y="215" fill="black" transform="" style="font-family:monospace;">0</text>
25
- <rect x="0.0" y="213.42567102546457" width="9.174311926605505" height="1.5743289745354438" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
26
- <rect x="9.174311926605505" y="211.86568020188116" width="9.174311926605505" height="3.134319798118834" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
27
- <rect x="18.34862385321101" y="208.90628584537737" width="9.174311926605505" height="6.093714154622619" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
28
- <rect x="27.522935779816514" y="201.02030282174812" width="9.174311926605505" height="13.979697178251891" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
29
- <rect x="36.69724770642202" y="197.93760036705666" width="9.174311926605505" height="17.062399632943333" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
30
- <rect x="45.87155963302752" y="176.8834595090617" width="9.174311926605505" height="38.116540490938284" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
31
- <rect x="55.04587155963303" y="193.75946317962837" width="9.174311926605505" height="21.24053682037164" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
32
- <rect x="64.22018348623853" y="191.66035788024777" width="9.174311926605505" height="23.339642119752234" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
33
- <rect x="73.39449541284404" y="171.3833448038541" width="9.174311926605505" height="43.6166551961459" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
34
- <rect x="82.56880733944953" y="168.27196604725856" width="9.174311926605505" height="46.72803395274145" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
35
- <rect x="91.74311926605505" y="166.53991741225053" width="9.174311926605505" height="48.46008258774948" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
36
- <rect x="100.91743119266054" y="160.94230328056895" width="9.174311926605505" height="54.05769671943106" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
37
- <rect x="110.09174311926606" y="136.53303509979355" width="9.174311926605505" height="78.46696490020646" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
38
- <rect x="119.26605504587155" y="130.29307180546" width="9.174311926605505" height="84.70692819454003" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
39
- <rect x="128.44036697247705" y="157.31475108969948" width="9.174311926605505" height="57.68524891030052" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
40
- <rect x="137.61467889908258" y="159.86407432897454" width="9.174311926605505" height="55.13592567102546" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
41
- <rect x="146.78899082568807" y="140.75992200045883" width="9.174311926605505" height="74.24007799954117" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
42
- <rect x="155.96330275229357" y="119.67997247075019" width="9.174311926605505" height="95.32002752924981" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
43
- <rect x="165.13761467889907" y="120.91878871300759" width="9.174311926605505" height="94.08121128699241" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
44
- <rect x="174.3119266055046" y="149.11619637531544" width="9.174311926605505" height="65.88380362468456" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
45
- <rect x="183.4862385321101" y="159.41385638908008" width="9.174311926605505" height="55.58614361091993" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
46
- <rect x="192.6605504587156" y="140.36992429456296" width="9.174311926605505" height="74.63007570543702" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
47
- <rect x="201.8348623853211" y="143.40100940582704" width="9.174311926605505" height="71.59899059417297" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
48
- <rect x="211.00917431192659" y="155.89814177563662" width="9.174311926605505" height="59.101858224363376" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
49
- <rect x="220.1834862385321" y="149.36568020188116" width="9.174311926605505" height="65.63431979811882" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
50
- <rect x="229.3577981651376" y="126.55941729754531" width="9.174311926605505" height="88.44058270245469" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
51
- <rect x="238.5321100917431" y="94.89791236522139" width="9.174311926605505" height="120.10208763477861" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
52
- <rect x="247.7064220183486" y="127.64911676990135" width="9.174311926605505" height="87.35088323009865" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
53
- <rect x="256.8807339449541" y="132.86820371644873" width="9.174311926605505" height="82.13179628355127" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
54
- <rect x="266.0550458715596" y="133.76577196604728" width="9.174311926605505" height="81.23422803395273" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
55
- <rect x="275.22935779816515" y="136.40112411103468" width="9.174311926605505" height="78.59887588896534" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
56
- <rect x="284.4036697247706" y="90.31257169075477" width="9.174311926605505" height="124.68742830924523" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
57
- <rect x="293.57798165137615" y="65.0" width="9.174311926605505" height="150.0" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
58
- <rect x="302.7522935779816" y="114.23147510896996" width="9.174311926605505" height="100.76852489103004" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
59
- <rect x="311.92660550458714" y="125.91993576508375" width="9.174311926605505" height="89.08006423491625" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
60
- <rect x="321.10091743119267" y="132.72768983711862" width="9.174311926605505" height="82.27231016288138" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
61
- <rect x="330.27522935779814" y="126.3902271163111" width="9.174311926605505" height="88.6097728836889" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
62
- <rect x="339.44954128440367" y="111.66207845836202" width="9.174311926605505" height="103.33792154163798" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
63
- <rect x="348.6238532110092" y="114.60426703372333" width="9.174311926605505" height="100.39573296627667" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
64
- <rect x="357.79816513761466" y="122.20348703831154" width="9.174311926605505" height="92.79651296168846" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
65
- <rect x="366.9724770642202" y="100.16288139481534" width="9.174311926605505" height="114.83711860518466" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
66
- <rect x="376.14678899082566" y="103.15668731360405" width="9.174311926605505" height="111.84331268639595" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
67
- <rect x="385.3211009174312" y="136.17744895618262" width="9.174311926605505" height="78.82255104381738" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
68
- <rect x="394.4954128440367" y="148.39068593714154" width="9.174311926605505" height="66.60931406285845" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
69
- <rect x="403.6697247706422" y="132.234457444368" width="9.174311926605505" height="82.76554255563202" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
70
- <rect x="412.8440366972477" y="82.38357421426934" width="9.174311926605505" height="132.61642578573066" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
71
- <rect x="422.01834862385317" y="84.2303280568938" width="9.174311926605505" height="130.7696719431062" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
72
- <rect x="431.1926605504587" y="122.65370497820602" width="9.174311926605505" height="92.34629502179398" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
73
- <rect x="440.3669724770642" y="173.25017205781143" width="9.174311926605505" height="41.749827942188574" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
74
- <rect x="449.5412844036697" y="191.19293415921084" width="9.174311926605505" height="23.807065840789168" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
75
- <rect x="458.7155963302752" y="194.00607937600367" width="9.174311926605505" height="20.993920623996324" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
76
- <rect x="467.88990825688074" y="169.21828401009407" width="9.174311926605505" height="45.78171598990594" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
77
- <rect x="477.0642201834862" y="160.796054140858" width="9.174311926605505" height="54.203945859142" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
78
- <rect x="486.23853211009174" y="156.4601972929571" width="9.174311926605505" height="58.53980270704289" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
79
- <rect x="495.4128440366972" y="178.83631566873137" width="9.174311926605505" height="36.163684331268634" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
80
- <rect x="504.58715596330273" y="206.30534526267493" width="9.174311926605505" height="8.694654737325074" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
81
- <rect x="513.7614678899082" y="207.185707731131" width="9.174311926605505" height="7.814292268869006" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
82
- <rect x="522.9357798165138" y="205.12674925441615" width="9.174311926605505" height="9.873250745583848" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
83
- <rect x="532.1100917431193" y="202.41110346409727" width="9.174311926605505" height="12.588896535902729" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
84
- <rect x="541.2844036697247" y="197.04576737783896" width="9.174311926605505" height="17.954232622161044" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
85
- <rect x="550.4587155963303" y="195.53165863730214" width="9.174311926605505" height="19.468341362697863" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
86
- <rect x="559.6330275229358" y="203.96535902729985" width="9.174311926605505" height="11.034640972700158" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
87
- <rect x="568.8073394495412" y="202.14154622619867" width="9.174311926605505" height="12.85845377380133" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
88
- <rect x="577.9816513761467" y="203.15095205322322" width="9.174311926605505" height="11.849047946776782" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
89
- <rect x="587.1559633027523" y="192.2338839183299" width="9.174311926605505" height="22.766116081670106" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
90
- <rect x="596.3302752293578" y="192.6124111034641" width="9.174311926605505" height="22.3875888965359" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
91
- <rect x="605.5045871559632" y="191.55712319339298" width="9.174311926605505" height="23.442876806607018" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
92
- <rect x="614.6788990825688" y="183.82312456985548" width="9.174311926605505" height="31.176875430144527" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
93
- <rect x="623.8532110091743" y="188.1130993347098" width="9.174311926605505" height="26.886900665290202" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
94
- <rect x="633.0275229357798" y="191.81234228033952" width="9.174311926605505" height="23.18765771966047" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
95
- <rect x="642.2018348623853" y="192.41454462032576" width="9.174311926605505" height="22.585455379674237" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
96
- <rect x="651.3761467889908" y="193.76233080981876" width="9.174311926605505" height="21.237669190181233" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
97
- <rect x="660.5504587155963" y="190.58786418903418" width="9.174311926605505" height="24.412135810965815" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
98
- <rect x="669.7247706422019" y="190.74271621931635" width="9.174311926605505" height="24.257283780683643" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
99
- <rect x="678.8990825688073" y="190.8058040835054" width="9.174311926605505" height="24.194195916494607" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
100
- <rect x="688.0733944954128" y="192.05895847671485" width="9.174311926605505" height="22.941041523285154" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
101
- <rect x="697.2477064220184" y="189.20853406744666" width="9.174311926605505" height="25.791465932553336" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
102
- <rect x="706.4220183486239" y="193.16012846983253" width="9.174311926605505" height="21.839871530167468" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
103
- <rect x="715.5963302752293" y="197.20922229869237" width="9.174311926605505" height="17.790777701307636" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
104
- <rect x="724.7706422018348" y="204.37256251433814" width="9.174311926605505" height="10.627437485661849" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
105
- <rect x="733.9449541284404" y="203.07065840789173" width="9.174311926605505" height="11.929341592108281" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
106
- <rect x="743.1192660550458" y="202.5" width="9.174311926605505" height="12.5" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
107
- <rect x="752.2935779816513" y="208.29548061481992" width="9.174311926605505" height="6.704519385180086" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
108
- <rect x="761.4678899082569" y="212.2212663454921" width="9.174311926605505" height="2.7787336545079144" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
109
- <rect x="770.6422018348624" y="212.33597155310852" width="9.174311926605505" height="2.6640284468914883" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
110
- <rect x="779.8165137614678" y="214.06228492773573" width="9.174311926605505" height="0.9377150722642807" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
111
- <rect x="788.9908256880734" y="214.75051617343428" width="9.174311926605505" height="0.24948382656572607" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
112
- <rect x="798.1651376146789" y="214.79639825648084" width="9.174311926605505" height="0.20360174351915575" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
113
- <rect x="807.3394495412844" y="214.77058958476715" width="9.174311926605505" height="0.22941041523285155" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
114
- <rect x="816.5137614678899" y="214.73617802248222" width="9.174311926605505" height="0.2638219775177793" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
115
- <rect x="825.6880733944954" y="211.73663684331268" width="9.174311926605505" height="3.2633631566873134" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
116
- <rect x="834.8623853211009" y="203.46639137416838" width="9.174311926605505" height="11.533608625831612" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
117
- <rect x="844.0366972477063" y="208.36430373938975" width="9.174311926605505" height="6.635696260610231" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
118
- <rect x="853.2110091743119" y="213.48875888965358" width="9.174311926605505" height="1.5112411103464094" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
119
- <rect x="862.3853211009174" y="213.9504473503097" width="9.174311926605505" height="1.0495526496902958" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
120
- <rect x="871.5596330275229" y="212.72023399862354" width="9.174311926605505" height="2.2797660013764625" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
121
- <rect x="880.7339449541284" y="213.32530396880017" width="9.174311926605505" height="1.6746960311998162" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
122
- <rect x="889.9082568807339" y="209.72356044964442" width="9.174311926605505" height="5.276439550355585" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
123
- <rect x="899.0825688073394" y="198.80075705437028" width="9.174311926605505" height="16.19924294562973" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
124
- <rect x="908.256880733945" y="209.4826795136499" width="9.174311926605505" height="5.517320486350079" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
125
- <rect x="917.4311926605504" y="208.4532002752925" width="9.174311926605505" height="6.5467997247075" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
126
- <rect x="926.6055045871559" y="213.8701537049782" width="9.174311926605505" height="1.1298462950217938" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
127
- <rect x="935.7798165137615" y="212.96685019499884" width="9.174311926605505" height="2.033149805001147" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
128
- <rect x="944.954128440367" y="212.50229410415233" width="9.174311926605505" height="2.4977058958476714" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
129
- <rect x="954.1284403669724" y="211.81406285845378" width="9.174311926605505" height="3.185937141546226" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
130
- <rect x="963.3027522935779" y="209.51422344574445" width="9.174311926605505" height="5.485776554255563" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
131
- <rect x="972.4770642201835" y="210.43186510667584" width="9.174311926605505" height="4.568134893324157" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
132
- <rect x="981.651376146789" y="212.32736866253728" width="9.174311926605505" height="2.672631337462721" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/>
133
- <rect x="990.8256880733944" y="214.06802018811655" width="9.174311926605505" height="0.9319798118834595" fill="gold" rx="1" ry="1" stroke="black" stroke-width="1" style="fill-opacity:0.4;"/></svg>