test/test_bfr.rb in bio-polyploid-tools-0.1.0 vs test/test_bfr.rb in bio-polyploid-tools-0.2.3

- old
+ new

@@ -2,10 +2,11 @@ $: << File.expand_path('.') path= File.expand_path(File.dirname(__FILE__) + '/../lib/bioruby-polyploid-tools.rb') #puts path require path +require 'bio-samtools' require "test/unit" class TestPolyploidTools < Test::Unit::TestCase @@ -16,36 +17,127 @@ @ref=data_path + '/S22380157.fa' @a=data_path + "/LIB1721.bam" @b=data_path + "/LIB1722.bam" @f2_a=data_path + "/LIB1716.bam" @f2_b=data_path + "/LIB1719.bam" - @fasta_db = Bio::DB::Fasta::FastaFile.new(@ref) + + @bfr_path=data_path + "/bfr_out_test.csv" + @fasta_db = Bio::DB::Fasta::FastaFile.new({:fasta=>@ref}) @fasta_db.load_fai_entries @bam_a = Bio::DB::Sam.new({:fasta=>@ref, :bam=>@a}) @bam_b = Bio::DB::Sam.new({:fasta=>@ref, :bam=>@b}) @bam_f2_a = Bio::DB::Sam.new({:fasta=>@ref, :bam=>@f2_a}) @bam_f2_b = Bio::DB::Sam.new({:fasta=>@ref, :bam=>@f2_b}) - puts "SETUP" + # puts "SETUP" end def teardown end def test_snp_between_consensus setupre reg="gnl|UG|Ta#S22380157" - region = @fasta_db.index.region_for_entry(reg).to_region.to_s - min_cov=2 - + region = @fasta_db.index.region_for_entry(reg).to_region + min_cov=20 puts region.to_s - cons_1 = @bam_a.consensus_with_ambiguities({:region=>region, :case=>true, :min_cov=>min_cov}) - cons_2 = @bam_b.consensus_with_ambiguities({:region=>region, :case=>true, :min_cov=>min_cov}) + #puts @bam_a.methods + ref_seq=@fasta_db.fetch_sequence(region) + reg_a = @bam_a.fetch_region({:region=>region, :min_cov=>min_cov, :A=>1}) + reg_b = @bam_b.fetch_region({:region=>region, :min_cov=>min_cov, :A=>1}) + cons_1 = reg_a.consensus + cons_2 = reg_b.consensus - puts cons_2 - puts cons_1 + snps_1 = cons_1.count_ambiguities + snps_2 = cons_2.count_ambiguities + + called_1 = reg_a.called + called_2 = reg_b.called + + snps_tot = Bio::Sequence.snps_between(cons_1, cons_2) + block_size = 1000 + snps_per_1k_1 = (block_size * snps_1.to_f ) / region.size + snps_per_1k_2 = (block_size * snps_2.to_f ) / region.size + snps_per_1k_tot = (block_size * snps_tot.to_f ) / region.size + + + + #puts "#{region.entry}\t#{region.size}\t" + #puts "#{snps_1}\t#{called_1}\t#{snps_per_1k_1}\t" + #puts "#{snps_2}\t#{called_2}\t#{snps_per_1k_2}\t" + #puts "#{snps_tot}\t#{snps_per_1k_tot}\n" + + + snps_tot = Bio::Sequence.snps_between(cons_1, cons_2) + snps_to_ref = Bio::Sequence.snps_between(cons_1, ref_seq) + #puts ">ref\n#{ref_seq}" + #puts ">a\n#{cons_1}" + #puts ">b\n#{cons_2}" + #puts "SNPS between: #{snps_tot}" + #puts "SNPS ref: #{snps_to_ref}" + #puts "SNPS call: #{snps_to_ref}" + assert_equal(ref_seq.to_s, "acgcttgaccttaggcctatttaggtgacactatagaacaagtttgtacaaaaaagcaggctggtaccggtccggaattcccgggatatcgtcgacccacgcgtccgcgtccgaccagcacaaacaagactgtactctgggctcctctgactccgtgtcttgctaaaatatctttggtcgactcgttgcgaggttgatcagatggcggaggaagcgaagcaggatgtggcgccacccgcgccggagccgaccgaggacgtcgcggacgagaaggtggcggttccgtcgccggaggagtctaaggccctcgttgtcgccgagaatgacgctgagaagcctgcagctacagggggctcacacgaacgagatgctctgctcacgagggtcgcgaccgagaagaggatttcgctgatcaaggcatgggaggagaacgagaaggccaaagccgagaacaaggccgtgaagttgctggcggacatcacctcgtgggagaactccaaggccgcggaactggaagccgagctcaagaagatgcaagagcagctggagaagaagaaggcgcgctgcgtggagaagctcaagaacagcgccgcgacggtgcacaaagaggcggaangagaagcgtgccgcggcggaagcgcggcacggcgaggagatcgtcgcggcggaggagaccgccgccaagtaccgcgccaagggtgaagcgccgaagaagctgctcttcggcagaagatagatatcgcttcatcttcagcttctctctgtttgaccgnttgcatgtctcctgcccatggcatcacttgtgtatttatctttgggggngatcttagtttgtatggtatcatcaaatgcgtcgtga") + assert_equal(cons_1.to_s , "acgcttgaccttaggcctatttaggtgacactatagaacaagtttgtacaaaaaagcaggctggtaccggtccggaattcccgggatatcgtcgacccacgcgtccgcgtccgaccagcacaaacaagactgtactctgggctcctctgactccgtgtcttgctaaaatatytttggtcgactcgttgcgaggttgatcagatggcggaggaagcgaagcaggatgtggcgccacccgcgccggagccgaccgaggacgtcgcggacgagaaggcggcggttccgtcgccggaggagtctaaggccctsgttgtcgccgagaatgacgcygagaagcctgcagctacagggggctcacacgaacgagatgctctgctcacgagggtygcgaccgagaagaggatttcgctgatcaaggcatgggaggagaaygagaaggccaaagccgagaacaaggccgtgaagttgctggcggacatcacctcgtgggagaactccaaggccgcggaactggaagccgagctcaagaagatgcaagagcagctggagaagaagaaggcgcgctgcgtggagaagctcaagaacagcgccgcgacggtgcacaaagaggcgraaggagaagcgtgccgcggcggaagygcggcrcggcgaggagatcgtcgcggcggaggagaccgccgccaagtaccgcgccaagggtgaggcgccgaagaagctgctcttcggcagaggatagatatcgcttcatcttcagcttctctctgtttgaccgnttgcatgtctcctgcccatggcatcacttgtgtatttatctttgggggngatcttagtttgtatggtatcatcaaatgcgtcgtga") + assert_equal(cons_2.to_s , "acgcttgaccttaggcctatttaggtgacactatagaacaagtttgtacaaaaaagcaggctggtaccggtccggaattcccgggatatcgtcgacccacgcgtccgcgtccgaccagcacaaacaagactgtactctgggctcctctgactccgtgtcttgctaaaatatytttggtcgactcgttgcgaggttgatcagatggcggasgaagcgaagcaggatgtggcgccacccgcgccggagccgaccgaggacgtcgcggacgagaaggcggcggttccgtcgccggaggartcyaaggccctsgttgtcgccgagaatgacgcygagaagcctgcagctacagggggctcacacgaacgagatgctctgctcacgagggtygcgaccgagaagaggatttcgctgatcaaggcatgggaggagaaygagaaggccaaagccgagaacaaggccgtgaagttgctggcggacatcacctcgtgggagaactccaaggccgcggaactggaagccgagctcaagaagatgcaagagcagctggagaagaagaaggcgcgctgcgtggagaagctcaagaacagcgccgcgacggtgcacaaagaggcgraaggagaagcgtgccgcggcggaagygcggcgcggcgaggagatcgtcgcggcggaggagrccgccgccaagtaccgcgccaagggtgaggcgccgaagaagctgctcttcggcagaagatagatatcgcttcatcttcagcttctctctgtttgaccgnttgcatgtctcctgcccatggcatcacttgtgtatttatctttgggggngatcttagtttgtatggtatcatcaaatgcgtcgtga") + assert_equal(snps_tot , 6) + assert_equal(snps_to_ref , 12) + assert_equal(snps_1,10) + assert_equal(snps_2,13) + assert_equal(called_1,617) + assert_equal(called_2,612) + end + + def test_bfr + setupre + container = Bio::BFRTools::BFRContainer.new + + container.reference @ref + container.parental_1 ( {:path => @a } ) + container.parental_2 ( {:path => @b } ) + container.bulk_1 ( {:path => @f2_a }) + container.bulk_2 ( {:path => @f2_b }) + + i = -1 + + container.init_counters + output_file = File.open(@bfr_path, "w") + # puts "Range: #{min}:#{max}" + assert_equal(@fasta_db.index.entries.size,1) + reg = nil + @fasta_db.index.entries.each do | r | + i = i + 1 + + reg = container.process_region({:region => r.get_full_region.to_s,:output_file => output_file , :min_cov => 5} ) + #puts reg.inspect + end + + with_bfr = [210, 297, 300, 645, 674] + + bases_1 = Array.new + bases_2 = Array.new + bases_1 << {:A=>0, :C=>24, :G=>120, :T=>0} + bases_2 << {:A=>0, :C=>24, :G=>112, :T=>0} + bases_1 << {:A=>34, :C=>0, :G=>138, :T=>0} + bases_2 << {:A=>26, :C=>0, :G=>138, :T=>0} + bases_1 << {:A=>0, :C=>32, :G=>0, :T=>141} + bases_2 << {:A=>0, :C=>26, :G=>0, :T=>142} + bases_1 << {:A=>22, :C=>0, :G=>56, :T=>0} + bases_2 << {:A=>62, :C=>0, :G=>25, :T=>0} + bases_1 << {:A=>27, :C=>0, :G=>22, :T=>0} + bases_2 << {:A=>46, :C=>0, :G=>9, :T=>0} + i = 0 + with_bfr.each do | pos | + puts pos + assert_equal(reg.bases_bulk_1[pos - 1 ] , bases_1[i] ) + assert_equal(reg.bases_bulk_2[pos - 1 ] , bases_2[i] ) + i += 1 + end + + + + output_file.close end end \ No newline at end of file