bioinform 0.1.17 → 0.2.0

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.
Files changed (145) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -3
  3. data/LICENSE +0 -1
  4. data/README.md +1 -1
  5. data/TODO.txt +23 -30
  6. data/bin/convert_motif +4 -0
  7. data/bin/pcm2pwm +1 -1
  8. data/bin/split_motifs +1 -1
  9. data/bioinform.gemspec +0 -2
  10. data/lib/bioinform.rb +54 -16
  11. data/lib/bioinform/alphabet.rb +85 -0
  12. data/lib/bioinform/background.rb +90 -0
  13. data/lib/bioinform/cli.rb +1 -2
  14. data/lib/bioinform/cli/convert_motif.rb +52 -17
  15. data/lib/bioinform/cli/pcm2pwm.rb +32 -26
  16. data/lib/bioinform/cli/split_motifs.rb +31 -30
  17. data/lib/bioinform/conversion_algorithms.rb +6 -0
  18. data/lib/bioinform/conversion_algorithms/pcm2ppm_converter.rb +13 -11
  19. data/lib/bioinform/conversion_algorithms/pcm2pwm_converter.rb +39 -11
  20. data/lib/bioinform/conversion_algorithms/pcm2pwm_mara_converter.rb +26 -0
  21. data/lib/bioinform/conversion_algorithms/ppm2pcm_converter.rb +30 -0
  22. data/lib/bioinform/conversion_algorithms/pwm2iupac_pwm_converter.rb +23 -0
  23. data/lib/bioinform/conversion_algorithms/pwm2pcm_converter.rb +85 -0
  24. data/lib/bioinform/data_models.rb +1 -7
  25. data/lib/bioinform/data_models/named_model.rb +38 -0
  26. data/lib/bioinform/data_models/pcm.rb +18 -28
  27. data/lib/bioinform/data_models/pm.rb +73 -170
  28. data/lib/bioinform/data_models/ppm.rb +11 -24
  29. data/lib/bioinform/data_models/pwm.rb +30 -56
  30. data/lib/bioinform/errors.rb +17 -0
  31. data/lib/bioinform/formatters.rb +4 -2
  32. data/lib/bioinform/formatters/consensus_formatter.rb +35 -0
  33. data/lib/bioinform/formatters/motif_formatter.rb +69 -0
  34. data/lib/bioinform/formatters/pretty_matrix_formatter.rb +36 -0
  35. data/lib/bioinform/formatters/transfac_formatter.rb +29 -37
  36. data/lib/bioinform/parsers.rb +1 -8
  37. data/lib/bioinform/parsers/matrix_parser.rb +44 -36
  38. data/lib/bioinform/parsers/motif_splitter.rb +45 -0
  39. data/lib/bioinform/support.rb +46 -14
  40. data/lib/bioinform/support/strip_doc.rb +1 -1
  41. data/lib/bioinform/version.rb +1 -1
  42. data/spec/alphabet_spec.rb +79 -0
  43. data/spec/background_spec.rb +57 -0
  44. data/spec/cli/cli_spec.rb +6 -6
  45. data/spec/cli/convert_motif_spec.rb +88 -88
  46. data/spec/cli/data/pcm2pwm/KLF4_f2.pwm.result +9 -9
  47. data/spec/cli/data/pcm2pwm/SP1_f1.pwm.result +11 -11
  48. data/spec/cli/pcm2pwm_spec.rb +22 -23
  49. data/spec/cli/shared_examples/convert_motif/motif_list_empty.rb +1 -1
  50. data/spec/cli/shared_examples/convert_motif/several_motifs_specified.rb +1 -1
  51. data/spec/cli/shared_examples/convert_motif/single_motif_specified.rb +5 -5
  52. data/spec/cli/shared_examples/convert_motif/yield_help_string.rb +2 -2
  53. data/spec/cli/shared_examples/convert_motif/yield_motif_conversion_error.rb +3 -3
  54. data/spec/cli/split_motifs_spec.rb +6 -21
  55. data/spec/converters/pcm2ppm_converter_spec.rb +32 -0
  56. data/spec/converters/pcm2pwm_converter_spec.rb +71 -0
  57. data/spec/converters/ppm2pcm_converter_spec.rb +32 -0
  58. data/spec/converters/pwm2iupac_pwm_converter_spec.rb +65 -0
  59. data/spec/converters/pwm2pcm_converter_spec.rb +57 -0
  60. data/spec/data_models/named_model_spec.rb +41 -0
  61. data/spec/data_models/pcm_spec.rb +114 -45
  62. data/spec/data_models/pm_spec.rb +132 -333
  63. data/spec/data_models/ppm_spec.rb +47 -44
  64. data/spec/data_models/pwm_spec.rb +85 -77
  65. data/spec/fabricators/motif_formats_fabricator.rb +116 -116
  66. data/spec/formatters/consensus_formatter_spec.rb +26 -0
  67. data/spec/formatters/raw_formatter_spec.rb +169 -0
  68. data/spec/parsers/matrix_parser_spec.rb +216 -0
  69. data/spec/parsers/motif_splitter_spec.rb +87 -0
  70. data/spec/spec_helper.rb +2 -2
  71. data/spec/spec_helper_source.rb +25 -5
  72. data/spec/support_spec.rb +31 -0
  73. metadata +43 -124
  74. data/bin/merge_into_collection +0 -4
  75. data/lib/bioinform/cli/merge_into_collection.rb +0 -80
  76. data/lib/bioinform/conversion_algorithms/ppm2pwm_converter.rb +0 -0
  77. data/lib/bioinform/data_models/collection.rb +0 -75
  78. data/lib/bioinform/data_models/motif.rb +0 -56
  79. data/lib/bioinform/formatters/raw_formatter.rb +0 -41
  80. data/lib/bioinform/parsers/jaspar_parser.rb +0 -35
  81. data/lib/bioinform/parsers/parser.rb +0 -92
  82. data/lib/bioinform/parsers/splittable_parser.rb +0 -57
  83. data/lib/bioinform/parsers/string_fantom_parser.rb +0 -35
  84. data/lib/bioinform/parsers/string_parser.rb +0 -72
  85. data/lib/bioinform/parsers/trivial_parser.rb +0 -34
  86. data/lib/bioinform/parsers/yaml_parser.rb +0 -35
  87. data/lib/bioinform/support/advanced_scan.rb +0 -8
  88. data/lib/bioinform/support/array_product.rb +0 -6
  89. data/lib/bioinform/support/array_zip.rb +0 -6
  90. data/lib/bioinform/support/collect_hash.rb +0 -7
  91. data/lib/bioinform/support/deep_dup.rb +0 -5
  92. data/lib/bioinform/support/delete_many.rb +0 -14
  93. data/lib/bioinform/support/inverf.rb +0 -13
  94. data/lib/bioinform/support/multiline_squish.rb +0 -6
  95. data/lib/bioinform/support/parameters.rb +0 -28
  96. data/lib/bioinform/support/partial_sums.rb +0 -16
  97. data/lib/bioinform/support/same_by.rb +0 -12
  98. data/lib/bioinform/support/third_part/active_support/core_ext/array/extract_options.rb +0 -29
  99. data/lib/bioinform/support/third_part/active_support/core_ext/hash/indifferent_access.rb +0 -23
  100. data/lib/bioinform/support/third_part/active_support/core_ext/hash/keys.rb +0 -54
  101. data/lib/bioinform/support/third_part/active_support/core_ext/module/attribute_accessors.rb +0 -64
  102. data/lib/bioinform/support/third_part/active_support/core_ext/object/try.rb +0 -57
  103. data/lib/bioinform/support/third_part/active_support/core_ext/string/access.rb +0 -99
  104. data/lib/bioinform/support/third_part/active_support/core_ext/string/behavior.rb +0 -6
  105. data/lib/bioinform/support/third_part/active_support/core_ext/string/filters.rb +0 -49
  106. data/lib/bioinform/support/third_part/active_support/core_ext/string/multibyte.rb +0 -72
  107. data/lib/bioinform/support/third_part/active_support/hash_with_indifferent_access.rb +0 -181
  108. data/lib/bioinform/support/third_part/active_support/multibyte.rb +0 -44
  109. data/lib/bioinform/support/third_part/active_support/multibyte/chars.rb +0 -476
  110. data/lib/bioinform/support/third_part/active_support/multibyte/exceptions.rb +0 -8
  111. data/lib/bioinform/support/third_part/active_support/multibyte/unicode.rb +0 -393
  112. data/lib/bioinform/support/third_part/active_support/multibyte/utils.rb +0 -60
  113. data/spec/cli/data/merge_into_collection/GABPA_f1.pwm +0 -14
  114. data/spec/cli/data/merge_into_collection/KLF4_f2.pwm +0 -11
  115. data/spec/cli/data/merge_into_collection/SP1_f1.pwm +0 -12
  116. data/spec/cli/data/merge_into_collection/collection.txt.result +0 -40
  117. data/spec/cli/data/merge_into_collection/collection.yaml.result +0 -188
  118. data/spec/cli/data/merge_into_collection/collection_pwm.yaml.result +0 -188
  119. data/spec/cli/data/merge_into_collection/pwm_folder/GABPA_f1.pwm +0 -14
  120. data/spec/cli/data/merge_into_collection/pwm_folder/KLF4_f2.pwm +0 -11
  121. data/spec/cli/data/merge_into_collection/pwm_folder/SP1_f1.pwm +0 -12
  122. data/spec/cli/data/split_motifs/collection.yaml +0 -188
  123. data/spec/cli/merge_into_collection_spec.rb +0 -100
  124. data/spec/data_models/collection_spec.rb +0 -98
  125. data/spec/data_models/motif_spec.rb +0 -224
  126. data/spec/fabricators/collection_fabricator.rb +0 -8
  127. data/spec/fabricators/motif_fabricator.rb +0 -33
  128. data/spec/fabricators/pcm_fabricator.rb +0 -25
  129. data/spec/fabricators/pm_fabricator.rb +0 -52
  130. data/spec/fabricators/ppm_fabricator.rb +0 -14
  131. data/spec/fabricators/pwm_fabricator.rb +0 -16
  132. data/spec/parsers/parser_spec.rb +0 -152
  133. data/spec/parsers/string_fantom_parser_spec.rb +0 -70
  134. data/spec/parsers/string_parser_spec.rb +0 -77
  135. data/spec/parsers/trivial_parser_spec.rb +0 -64
  136. data/spec/parsers/yaml_parser_spec.rb +0 -50
  137. data/spec/support/advanced_scan_spec.rb +0 -32
  138. data/spec/support/array_product_spec.rb +0 -15
  139. data/spec/support/array_zip_spec.rb +0 -15
  140. data/spec/support/collect_hash_spec.rb +0 -15
  141. data/spec/support/delete_many_spec.rb +0 -44
  142. data/spec/support/inverf_spec.rb +0 -19
  143. data/spec/support/multiline_squish_spec.rb +0 -25
  144. data/spec/support/partial_sums_spec.rb +0 -30
  145. data/spec/support/same_by_spec.rb +0 -36
@@ -15,4 +15,4 @@ shared_examples 'motif list is empty' do
15
15
  include_examples 'yield help string'
16
16
  end
17
17
  end
18
- end
18
+ end
@@ -9,6 +9,6 @@ shared_examples 'several motifs specified' do
9
9
  Given(:motif_list) { [sp1_f1, klf4_f2] }
10
10
  Given(:model_from) { 'pcm' }
11
11
  Given(:model_to) { 'pwm' }
12
- Then { resulting_stdout.should == [sp1_f1.pwm, klf4_f2.pwm].join("\n") }
12
+ Then { expect(resulting_stdout).to eq [sp1_f1.pwm, klf4_f2.pwm].join("\n") }
13
13
  end
14
14
  end
@@ -12,12 +12,12 @@ shared_examples 'single motif specified' do
12
12
 
13
13
  context 'pwm conversion invoked' do
14
14
  Given(:model_to) { 'pwm' }
15
- Then { resulting_stdout.should == sp1_f1.pwm }
15
+ Then { expect(resulting_stdout).to eq sp1_f1.pwm }
16
16
  end
17
17
 
18
18
  context 'ppm conversion invoked' do
19
19
  Given(:model_to) { 'ppm' }
20
- Then { resulting_stdout.should == sp1_f1.ppm }
20
+ Then { expect(resulting_stdout).to eq sp1_f1.ppm }
21
21
  end
22
22
  end
23
23
 
@@ -42,9 +42,9 @@ shared_examples 'single motif specified' do
42
42
  }
43
43
  Given(:model_from) { 'pcm' }
44
44
  Given(:model_to) { 'pwm' }
45
- Then { resulting_stdout.should == sp1_f1.pwm }
46
- Then { resulting_stdout.should_not match(klf4_f2.pwm) }
45
+ Then { expect(resulting_stdout).to eq sp1_f1.pwm }
46
+ Then { expect(resulting_stdout).not_to match(klf4_f2.pwm) }
47
47
  end
48
48
 
49
49
  end
50
- end
50
+ end
@@ -1,5 +1,5 @@
1
1
  require_relative '../../../spec_helper'
2
2
 
3
3
  shared_examples 'yield help string' do
4
- Then { resulting_stdout.should match(/Usage:.*Options:/m) }
5
- end
4
+ Then { expect(resulting_stdout).to match(/Usage:.*Options:/m) }
5
+ end
@@ -1,4 +1,4 @@
1
1
  shared_examples 'yields motif conversion error' do
2
- Then { resulting_stderr.should match "One can't convert from #{model_from} data-model to #{model_to} data-model" }
3
- Then { resulting_stderr.should match "Error! Conversion wasn't performed" }
4
- end
2
+ Then { expect(resulting_stderr).to match "One can't convert from #{model_from} data-model to #{model_to} data-model" }
3
+ Then { expect(resulting_stderr).to match "Error! Conversion wasn't performed" }
4
+ end
@@ -1,5 +1,5 @@
1
1
  require_relative '../spec_helper'
2
- require_relative '../../lib/bioinform/cli/split_motifs'
2
+ require 'bioinform/cli/split_motifs'
3
3
 
4
4
  def run_split_motifs(cmd)
5
5
  Bioinform::CLI::SplitMotifs.main(cmd.shellsplit)
@@ -23,14 +23,14 @@ describe Bioinform::CLI::SplitMotifs do
23
23
  it 'splits plain text into separate files' do
24
24
  run_split_motifs('plain_collection.txt')
25
25
  @motifs_in_collection.each do |motif_name|
26
- File.exist?("#{motif_name}.mat").should be_true
26
+ expect(File.exist?("#{motif_name}.mat")).to be_truthy
27
27
  File.read("#{motif_name}.mat") == File.read("#{motif_name}.mat.result")
28
28
  end
29
29
  end
30
30
  it 'create files with specified extension' do
31
31
  run_split_motifs('plain_collection.txt -e pwm')
32
32
  @motifs_in_collection.each do |motif_name|
33
- File.exist?("#{motif_name}.pwm").should be_true
33
+ expect(File.exist?("#{motif_name}.pwm")).to be_truthy
34
34
  File.read("#{motif_name}.pwm") == File.read("#{motif_name}.mat.result")
35
35
  end
36
36
  end
@@ -42,7 +42,7 @@ describe Bioinform::CLI::SplitMotifs do
42
42
  it 'create files in specified folder' do
43
43
  run_split_motifs('plain_collection.txt -f result_folder')
44
44
  @motifs_in_collection.each do |motif_name|
45
- File.exist?(File.join('result_folder', "#{motif_name}.mat")).should be_true
45
+ expect(File.exist?(File.join('result_folder', "#{motif_name}.mat"))).to be_truthy
46
46
  File.read(File.join('result_folder', "#{motif_name}.mat")) == File.read("#{motif_name}.mat.result")
47
47
  end
48
48
  end
@@ -54,24 +54,9 @@ describe Bioinform::CLI::SplitMotifs do
54
54
  it 'create files in specified folder' do
55
55
  run_split_motifs('plain_collection.txt -f result_folder')
56
56
  @motifs_in_collection.each do |motif_name|
57
- File.exist?(File.join('result_folder', "#{motif_name}.mat")).should be_true
57
+ expect(File.exist?(File.join('result_folder', "#{motif_name}.mat"))).to be_truthy
58
58
  File.read(File.join('result_folder', "#{motif_name}.mat")) == File.read("#{motif_name}.mat.result")
59
59
  end
60
60
  end
61
61
  end
62
-
63
- it 'splits motifs from Collections (yamled Bioinform::Collection instances) with appropriate extension' do
64
- run_split_motifs('collection.yaml')
65
- @motifs_in_collection.each do |motif_name|
66
- File.exist?("#{motif_name}.pwm").should be_true
67
- File.read("#{motif_name}.pwm") == File.read("#{motif_name}.mat.result")
68
- end
69
- end
70
- it 'splits motifs from Collections with specified extension' do
71
- run_split_motifs('collection.yaml -e pat')
72
- @motifs_in_collection.each do |motif_name|
73
- File.exist?("#{motif_name}.pat").should be_true
74
- File.read("#{motif_name}.pat") == File.read("#{motif_name}.mat.result")
75
- end
76
- end
77
- end
62
+ end
@@ -0,0 +1,32 @@
1
+ require 'bioinform/conversion_algorithms/pcm2ppm_converter'
2
+
3
+ describe Bioinform::ConversionAlgorithms::PCM2PPMConverter do
4
+ let(:pcm) { Bioinform::MotifModel::PCM.new([[1,2,3,4],[2,2,2,4]]) }
5
+ let(:pwm) { Bioinform::MotifModel::PWM.new([[1,2,3,4],[2,2,2,4]]) }
6
+ let(:ppm) { Bioinform::MotifModel::PPM.new([[0.1,0.2,0.3,0.4],[0.2,0.2,0.2,0.4]]) }
7
+ let(:pcm_different_counts) { Bioinform::MotifModel::PCM.new([[1,2,3,4],[2,2,2,4],[3,3,3,4]]) }
8
+
9
+ let(:named_pcm) { Bioinform::MotifModel::NamedModel.new(pcm, 'motif name') }
10
+ let(:named_pwm) { Bioinform::MotifModel::NamedModel.new(pwm, 'motif name') }
11
+
12
+ let(:converter) { Bioinform::ConversionAlgorithms::PCM2PPMConverter.new }
13
+
14
+ specify { expect(converter.convert(pcm)).to be_kind_of Bioinform::MotifModel::PPM }
15
+
16
+ specify do
17
+ expect(converter.convert(pcm).matrix).to eq [ [0.1,0.2,0.3,0.4],
18
+ [0.2,0.2,0.2,0.4] ]
19
+ end
20
+ specify do
21
+ expect(converter.convert(pcm_different_counts).matrix).to eq [ [0.1,0.2,0.3,0.4],
22
+ [0.2,0.2,0.2,0.4],
23
+ [3.0/13, 3.0/13, 3.0/13, 4.0/13] ]
24
+ end
25
+
26
+ specify { expect(converter.convert(named_pcm)).to be_kind_of Bioinform::MotifModel::NamedModel }
27
+ specify { expect(converter.convert(named_pcm).model).to be_kind_of Bioinform::MotifModel::PPM }
28
+ specify { expect(converter.convert(named_pcm).name).to eq 'motif name' }
29
+ specify { expect{ converter.convert(pwm) }.to raise_error Bioinform::Error }
30
+ specify { expect{ converter.convert(named_pwm) }.to raise_error Bioinform::Error }
31
+ specify { expect{ converter.convert(ppm) }.to raise_error Bioinform::Error }
32
+ end
@@ -0,0 +1,71 @@
1
+ require 'bioinform/conversion_algorithms/pcm2pwm_converter'
2
+
3
+ describe Bioinform::ConversionAlgorithms::PCM2PWMConverter do
4
+ let(:pcm) { Bioinform::MotifModel::PCM.new([[1,2,3,4],[2,2,2,4]]) }
5
+ let(:pwm) { Bioinform::MotifModel::PWM.new([[1,2,3,4],[2,2,2,4]]) }
6
+ let(:ppm) { Bioinform::MotifModel::PPM.new([[0.1,0.2,0.3,0.4],[0.2,0.2,0.2,0.4]]) }
7
+ let(:pcm_different_counts) { Bioinform::MotifModel::PCM.new([[1,2,3,4],[2,2,2,4],[3,3,3,4]]) }
8
+
9
+ let(:named_pcm) { Bioinform::MotifModel::NamedModel.new(pcm, 'motif name') }
10
+ let(:named_pwm) { Bioinform::MotifModel::NamedModel.new(pwm, 'motif name') }
11
+
12
+ context 'with default converter' do
13
+ let(:converter) { Bioinform::ConversionAlgorithms::PCM2PWMConverter.new }
14
+
15
+ specify { expect(converter.pseudocount).to eq :log }
16
+ specify { expect(converter.background).to eq Bioinform::Background::Uniform }
17
+
18
+ specify { expect(converter.convert(pcm)).to be_kind_of Bioinform::MotifModel::PWM }
19
+ specify { expect(converter.calculate_pseudocount(pcm)).to eq Math.log(10) }
20
+
21
+ specify do
22
+ cnt = 10
23
+ k = Math.log(cnt)
24
+ den = 0.25 * (cnt + k)
25
+ expect(converter.convert(pcm).matrix).to eq [
26
+ [Math.log((1+k*0.25)/den), Math.log((2+k*0.25)/den), Math.log((3+k*0.25)/den), Math.log((4+k*0.25)/den)],
27
+ [Math.log((2+k*0.25)/den), Math.log((2+k*0.25)/den), Math.log((2+k*0.25)/den), Math.log((4+k*0.25)/den)] ]
28
+ end
29
+
30
+ specify { expect{ converter.convert(pcm_different_counts) }.to raise_error Bioinform::Error }
31
+
32
+ specify { expect(converter.convert(named_pcm)).to be_kind_of Bioinform::MotifModel::NamedModel }
33
+ specify { expect(converter.convert(named_pcm).model).to be_kind_of Bioinform::MotifModel::PWM }
34
+ specify { expect(converter.convert(named_pcm).name).to eq 'motif name' }
35
+ specify { expect{ converter.convert(pwm) }.to raise_error Bioinform::Error }
36
+ specify { expect{ converter.convert(named_pwm) }.to raise_error Bioinform::Error }
37
+ specify { expect{ converter.convert(ppm) }.to raise_error Bioinform::Error }
38
+ end
39
+
40
+ context 'with specified explicitly pseudocount' do
41
+ let(:specified_pseudocount) { 5 }
42
+ let(:converter) { Bioinform::ConversionAlgorithms::PCM2PWMConverter.new(pseudocount: specified_pseudocount) }
43
+
44
+ specify { expect(converter.pseudocount).to eq 5 }
45
+
46
+ specify 'allows PCM-s with different column counts (because pseudocount specified, pcm\'s count not used for pseudocount calculation)' do
47
+ k = specified_pseudocount
48
+ den_1_2 = 0.25 * (10 + k)
49
+ den_3 = 0.25 * (13 + k)
50
+ expect(converter.convert(pcm_different_counts).matrix).to eq [
51
+ [Math.log((1+k*0.25)/den_1_2), Math.log((2+k*0.25)/den_1_2), Math.log((3+k*0.25)/den_1_2), Math.log((4+k*0.25)/den_1_2)],
52
+ [Math.log((2+k*0.25)/den_1_2), Math.log((2+k*0.25)/den_1_2), Math.log((2+k*0.25)/den_1_2), Math.log((4+k*0.25)/den_1_2)],
53
+ [Math.log((3+k*0.25)/den_3), Math.log((3+k*0.25)/den_3), Math.log((3+k*0.25)/den_3), Math.log((4+k*0.25)/den_3)] ]
54
+ end
55
+ end
56
+
57
+ context 'with specified explicitly background' do
58
+ let(:background_to_set) { Bioinform::Frequencies.new([0.1, 0.4, 0.4, 0.1]) }
59
+ let(:converter) { Bioinform::ConversionAlgorithms::PCM2PWMConverter.new(background: background_to_set) }
60
+
61
+ specify { expect(converter.background).to eq background_to_set }
62
+ specify 'allows PCM-s with different column counts (because pseudocount specified, pcm\'s count not used for pseudocount calculation)' do
63
+ k = Math.log(10)
64
+ den_at = 0.1 * (10 + k)
65
+ den_cg = 0.4 * (10 + k)
66
+ expect(converter.convert(pcm).matrix).to eq [
67
+ [Math.log((1+k*0.1)/den_at), Math.log((2+k*0.4)/den_cg), Math.log((3+k*0.4)/den_cg), Math.log((4+k*0.1)/den_at)],
68
+ [Math.log((2+k*0.1)/den_at), Math.log((2+k*0.4)/den_cg), Math.log((2+k*0.4)/den_cg), Math.log((4+k*0.1)/den_at)] ]
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,32 @@
1
+ require 'bioinform/conversion_algorithms/ppm2pcm_converter'
2
+
3
+ describe Bioinform::ConversionAlgorithms::PPM2PCMConverter do
4
+ let(:pcm) { Bioinform::MotifModel::PCM.new([[1,2,3,4],[2,2,2,4]]) }
5
+ let(:pwm) { Bioinform::MotifModel::PWM.new([[1,2,3,4],[2,2,2,4]]) }
6
+ let(:ppm) { Bioinform::MotifModel::PPM.new([[0.1,0.2,0.3,0.4],[0.2,0.2,0.2,0.4]]) }
7
+
8
+ let(:named_ppm) { Bioinform::MotifModel::NamedModel.new(ppm, 'motif name') }
9
+ let(:named_pcm) { Bioinform::MotifModel::NamedModel.new(pcm, 'motif name') }
10
+ let(:named_pwm) { Bioinform::MotifModel::NamedModel.new(pwm, 'motif name') }
11
+
12
+ let(:converter) { Bioinform::ConversionAlgorithms::PPM2PCMConverter.new }
13
+ let(:converter_explicit_count) { Bioinform::ConversionAlgorithms::PPM2PCMConverter.new(count: 10) }
14
+
15
+ specify { expect(converter.count).to eq 100 }
16
+ specify { expect(converter_explicit_count.count).to eq 10 }
17
+
18
+ specify { expect(converter.convert(ppm)).to be_kind_of Bioinform::MotifModel::PCM }
19
+
20
+ specify { expect(converter.convert(ppm).matrix).to eq [[10,20,30,40],[20,20,20,40]] }
21
+
22
+ specify { expect(converter_explicit_count.convert(ppm).matrix).to eq [[1,2,3,4],[2,2,2,4]] }
23
+
24
+ specify { expect(converter.convert(named_ppm)).to be_kind_of Bioinform::MotifModel::NamedModel }
25
+ specify { expect(converter.convert(named_ppm).model).to be_kind_of Bioinform::MotifModel::PCM }
26
+ specify { expect(converter.convert(named_ppm).name).to eq 'motif name' }
27
+
28
+ specify { expect{ converter.convert(pcm) }.to raise_error Bioinform::Error }
29
+ specify { expect{ converter.convert(pwm) }.to raise_error Bioinform::Error }
30
+ specify { expect{ converter.convert(named_pcm) }.to raise_error Bioinform::Error }
31
+ specify { expect{ converter.convert(named_pwm) }.to raise_error Bioinform::Error }
32
+ end
@@ -0,0 +1,65 @@
1
+ require 'bioinform/conversion_algorithms/pwm2iupac_pwm_converter'
2
+
3
+ describe Bioinform::ConversionAlgorithms::PWM2IupacPWMConverter do
4
+ let(:matrix) { [[1,2,3,1.567],[12,-11,12,0],[-1.1, 0.6, 0.4, 0.321]] }
5
+ let(:pwm) { Bioinform::MotifModel::PWM.new(matrix) }
6
+ context 'with default parameters' do
7
+ let(:converter) { Bioinform::ConversionAlgorithms::PWM2IupacPWMConverter.new }
8
+ specify{ expect(converter.iupac_alphabet).to eq Bioinform::NucleotideAlphabetWithN }
9
+ specify 'can convert only PWMs' do
10
+ pcm = Bioinform::MotifModel::PCM.new([[1,2,3,4],[2,2,2,4]])
11
+ expect { converter.convert(pcm) }.to raise_error Bioinform::Error
12
+ end
13
+ end
14
+
15
+ context 'with A,C,G,T,N-alphabet' do
16
+ let(:converter) { Bioinform::ConversionAlgorithms::PWM2IupacPWMConverter.new(alphabet: Bioinform::NucleotideAlphabetWithN) }
17
+ specify { expect( converter.convert(pwm) ).to be_kind_of Bioinform::MotifModel::PWM }
18
+ specify { expect( converter.convert(pwm).alphabet ).to eq Bioinform::NucleotideAlphabetWithN }
19
+
20
+ specify do
21
+ expect( converter.convert(pwm).matrix ).to eq [
22
+ [1,2,3,1.567, (1+2+3+1.567)/4.0],
23
+ [12,-11,12,0, (12-11+12+0)/4.0],
24
+ [-1.1, 0.6, 0.4, 0.321, (-1.1+0.6+0.4+0.321)/4.0]]
25
+ end
26
+
27
+ specify do
28
+ custom_alphabet = Bioinform::ComplementableAlphabet.new([:A,:C,:G,:T,:N], [:T,:G,:C,:A,:N])
29
+ custom_matrix = [[1,2,3,1.567, 0.1],[12,-11,12,0, 0.1],[-1.1, 0.6, 0.4, 0.321, 0.1]]
30
+ pwm_w_custom_alphabet = Bioinform::MotifModel::PWM.new(custom_matrix, alphabet: custom_alphabet)
31
+ expect { converter.convert(pwm_w_custom_alphabet) }.to raise_error Bioinform::Error
32
+ end
33
+ specify do
34
+ custom_alphabet = Bioinform::ComplementableAlphabet.new([:A,:X,:Y,:T], [:T,:Y,:X,:A])
35
+ pwm_w_custom_alphabet = Bioinform::MotifModel::PWM.new(matrix, alphabet: custom_alphabet)
36
+ expect { converter.convert(pwm_w_custom_alphabet) }.to raise_error Bioinform::Error
37
+ end
38
+
39
+ end
40
+
41
+ context 'with full-iupac alphabet' do
42
+ let(:converter) { Bioinform::ConversionAlgorithms::PWM2IupacPWMConverter.new(alphabet: Bioinform::IUPACAlphabet) }
43
+ specify { expect( converter.convert(pwm) ).to be_kind_of Bioinform::MotifModel::PWM }
44
+ specify { expect( converter.convert(pwm).alphabet ).to eq Bioinform::IUPACAlphabet }
45
+
46
+ specify do
47
+ expect( converter.convert(pwm).matrix ).to eq [
48
+ [1,2,3,1.567, (1+2)/2.0, (1+3)/2.0, (1+1.567)/2.0, (2+3)/2.0, (2+1.567)/2.0, (3+1.567)/2.0, (1+2+3)/3.0, (1+2+1.567)/3.0, (1+3+1.567)/3.0, (2+3+1.567)/3.0, (1+2+3+1.567)/4.0],
49
+ [12,-11,12,0, (12-11)/2.0, (12+12)/2.0, (12+0)/2.0, (-11+12)/2.0, (-11+0)/2.0, (12+0)/2.0, (12-11+12)/3.0, (12-11+0)/3.0, (12+12+0)/3.0, (-11+12+0)/3.0, (12-11+12+0)/4.0],
50
+ [-1.1, 0.6, 0.4, 0.321, (-1.1+0.6)/2.0, (-1.1+0.4)/2.0, (-1.1+0.321)/2.0, (0.6+0.4)/2.0, (0.6+0.321)/2.0, (0.4+0.321)/2.0, (-1.1+0.6+0.4)/3.0, (-1.1+0.6+0.321)/3.0, (-1.1+0.4+0.321)/3.0, (0.6+0.4+0.321)/3.0, (-1.1+0.6+0.4+0.321)/4.0]]
51
+ end
52
+
53
+ specify do
54
+ custom_alphabet = Bioinform::ComplementableAlphabet.new([:A,:C,:G,:T,:N], [:T,:G,:C,:A,:N])
55
+ custom_matrix = [[1,2,3,1.567, 0.1],[12,-11,12,0, 0.1],[-1.1, 0.6, 0.4, 0.321, 0.1]]
56
+ pwm_w_custom_alphabet = Bioinform::MotifModel::PWM.new(custom_matrix, alphabet: custom_alphabet)
57
+ expect { converter.convert(pwm_w_custom_alphabet) }.to raise_error Bioinform::Error
58
+ end
59
+ specify do
60
+ custom_alphabet = Bioinform::ComplementableAlphabet.new([:A,:X,:Y,:T], [:T,:Y,:X,:A])
61
+ pwm_w_custom_alphabet = Bioinform::MotifModel::PWM.new(matrix, alphabet: custom_alphabet)
62
+ expect { converter.convert(pwm_w_custom_alphabet) }.to raise_error Bioinform::Error
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,57 @@
1
+ require 'bioinform/conversion_algorithms/pwm2pcm_converter'
2
+
3
+ describe Bioinform::ConversionAlgorithms::PWM2PCMConverter do
4
+ specify { expect(Bioinform::ConversionAlgorithms::PWM2PCMConverter.new(count: 137).count).to eq 137 }
5
+ specify { expect(Bioinform::ConversionAlgorithms::PWM2PCMConverter.new(pseudocount: 5).pseudocount).to eq 5 }
6
+ specify {
7
+ bckgr = Bioinform::Frequencies.new([0.1,0.4,0.4,0.1])
8
+ expect(Bioinform::ConversionAlgorithms::PWM2PCMConverter.new(background: bckgr).background).to eq bckgr
9
+ }
10
+
11
+ context 'from PWM converted by PCM2PWMConverter' do
12
+ let(:specified_pseudocount) { 5 }
13
+ let(:pcm) { Bioinform::MotifModel::PCM.new([[1,2,3,4],[2,2,2,4]]) }
14
+
15
+
16
+ specify do
17
+ pwm = Bioinform::ConversionAlgorithms::PCM2PWMConverter.new(pseudocount: specified_pseudocount).convert(pcm)
18
+ expect(Bioinform::ConversionAlgorithms::PWM2PCMConverter.new(count: 10, pseudocount: specified_pseudocount).convert(pwm)).to be_within_range_from_matrix(pcm, 1e-10)
19
+ end
20
+ specify do
21
+ pwm = Bioinform::ConversionAlgorithms::PCM2PWMConverter.new.convert(pcm)
22
+ expect(Bioinform::ConversionAlgorithms::PWM2PCMConverter.new(count: 10).convert(pwm)).to be_within_range_from_matrix(pcm, 1e-10)
23
+ end
24
+ end
25
+
26
+ specify do
27
+ pwm = Bioinform::MotifModel::PWM.new([[1,2,3,4],[2,2,2,4]])
28
+ pcm = Bioinform::ConversionAlgorithms::PWM2PCMConverter.new(count: 137).convert(pwm)
29
+ expect(pcm.count).to be_within(1e-10).of(137)
30
+ end
31
+
32
+ context 'with default converter' do
33
+ let(:converter) { Bioinform::ConversionAlgorithms::PWM2PCMConverter.new }
34
+
35
+ let(:pwm) { Bioinform::MotifModel::PWM.new([[1,2,3,4],[2,2,2,4]]) }
36
+ let(:pcm) { Bioinform::MotifModel::PCM.new([[1,2,3,4],[2,2,2,4]]) }
37
+ let(:ppm) { Bioinform::MotifModel::PPM.new([[0.1,0.2,0.3,0.4],[0.2,0.2,0.2,0.4]]) }
38
+
39
+ let(:named_pcm) { Bioinform::MotifModel::NamedModel.new(pcm, 'motif name') }
40
+ let(:named_pwm) { Bioinform::MotifModel::NamedModel.new(pwm, 'motif name') }
41
+
42
+
43
+ specify { expect(converter.count).to eq 100 }
44
+ specify { expect(converter.pseudocount).to eq :default }
45
+ specify { expect(converter.background).to eq Bioinform::Background::Uniform }
46
+
47
+ specify { expect(converter.convert(pwm)).to be_kind_of Bioinform::MotifModel::PCM }
48
+
49
+ specify { expect(converter.convert(named_pwm)).to be_kind_of Bioinform::MotifModel::NamedModel }
50
+ specify { expect(converter.convert(named_pwm).model).to be_kind_of Bioinform::MotifModel::PCM }
51
+ specify { expect(converter.convert(named_pwm).name).to eq 'motif name' }
52
+
53
+ specify { expect{ converter.convert(pcm) }.to raise_error Bioinform::Error }
54
+ specify { expect{ converter.convert(ppm) }.to raise_error Bioinform::Error }
55
+ specify { expect{ converter.convert(named_pcm) }.to raise_error Bioinform::Error }
56
+ end
57
+ end
@@ -0,0 +1,41 @@
1
+ require 'bioinform/data_models/pwm'
2
+ require 'bioinform/data_models/named_model'
3
+
4
+ describe Bioinform::MotifModel::NamedModel do
5
+ context 'with PWM-model' do
6
+ let(:pwm) { Bioinform::MotifModel::PWM.new([[1,2,3,4],[10,20,30,40]]) }
7
+ let(:name) { 'pwm name' }
8
+ let(:named_pwm) { Bioinform::MotifModel::NamedModel.new(pwm, name) }
9
+ specify { expect(named_pwm.model).to eq pwm }
10
+ specify { expect(named_pwm.name).to eq name }
11
+
12
+ context 'being sent a method returning a result of model type (class is Bioinform::MotifModel::*)' do
13
+ subject { named_pwm.reversed }
14
+ specify 'should return a named model' do
15
+ expect(subject).to be_kind_of Bioinform::MotifModel::NamedModel
16
+ end
17
+ specify 'resulting named model should wrap actual result' do
18
+ expect(subject.model).to eq pwm.reversed
19
+ end
20
+ specify 'resulting named model should have the same name as callee' do
21
+ expect(subject.name).to eq name
22
+ end
23
+ end
24
+
25
+ context 'being sent a method returning a result of common, non-model type (class is not Bioinform::MotifModel::*)' do
26
+ specify 'should return original result' do
27
+ expect(named_pwm.length).to eq pwm.length
28
+ end
29
+ end
30
+
31
+ describe '#==' do
32
+ let(:another_pwm) { Bioinform::MotifModel::PWM.new([[4,3,2,1],[-100,-500,-500,-100]]) }
33
+ specify { expect(named_pwm).to eq Bioinform::MotifModel::NamedModel.new(pwm, name) }
34
+ specify { expect(named_pwm).not_to eq Bioinform::MotifModel::NamedModel.new(pwm, 'Another name') }
35
+ specify { expect(named_pwm).not_to eq Bioinform::MotifModel::NamedModel.new(another_pwm, name) }
36
+ specify { expect(named_pwm).not_to eq Bioinform::MotifModel::NamedModel.new(another_pwm, 'Another name') }
37
+ end
38
+
39
+ specify { expect(named_pwm.to_s).to eq ">pwm name\n" + "1\t2\t3\t4\n" + "10\t20\t30\t40" }
40
+ end
41
+ end
@@ -1,56 +1,125 @@
1
- require_relative '../spec_helper'
2
- require_relative '../../lib/bioinform/data_models/pcm'
3
-
4
- module Bioinform
5
- describe PCM do
6
- describe '#count' do
7
- it 'should be equal to sum of elements at position' do
8
- Fabricate(:pcm).count.should == 7
9
- Fabricate(:pcm_with_floats).count.should == 7.5
10
- end
11
- end
1
+ require 'bioinform/data_models/pcm'
12
2
 
13
- describe '#to_pwm' do
14
- subject{ Fabricate(:pcm) }
15
- it 'should return PWM' do
16
- Fabricate(:pcm).to_pwm.should be_kind_of(PWM)
17
- end
18
- it 'should make transformation: el --> log( (el + p_i*pseudocount) / (p_i*(count + pseudocount)) )' do
19
- subject.to_pwm(1).matrix.map{|line|line.map{|el| el.round(3)}}.should == Fabricate(:rounded_upto_3_digits_pwm_by_pcm_with_pseudocount_1).matrix
20
- subject.to_pwm(10).matrix.map{|line|line.map{|el| el.round(3)}}.should == Fabricate(:rounded_upto_3_digits_pwm_by_pcm_with_pseudocount_10).matrix
21
- end
22
- it 'should use default pseudocount equal to log(count)' do
23
- Fabricate(:pcm).to_pwm.should == Fabricate(:pcm).to_pwm(Math.log(7))
24
- end
25
- it 'should preserve name' do
26
- Fabricate(:pcm, name: nil).to_pwm.name.should be_nil
27
- Fabricate(:pcm, name: 'Stub name').to_pwm.name.should == 'Stub name'
28
- end
3
+ describe Bioinform::MotifModel::PCM do
4
+
5
+ describe '.new' do
6
+ specify 'fails on matrix having negative elements' do
7
+ expect { Bioinform::MotifModel::PCM.new([[1,2,1,3],[3,3,0,1], [-2, 3, 3, 3]]) }.to raise_error (Bioinform::Error)
29
8
  end
30
9
 
31
- describe '#to_ppm' do
32
- let(:pcm_motif) { Fabricate(:pcm) }
33
- context 'returned object' do
34
- subject{ pcm_motif.to_ppm }
35
- it { should be_kind_of(PPM)}
36
- it 'should have matrix transformed with el --> el / count' do
37
- subject.matrix.should == Fabricate(:ppm_pcm_divided_by_count).matrix
10
+ context 'with valid matrix' do
11
+ context 'with equal counts in different positions' do
12
+ let(:matrix) { [[1,2,1,3],[3,3,0,1], [1, 0, 3, 3]] }
13
+ specify do
14
+ expect { Bioinform::MotifModel::PCM.new(matrix) }.not_to raise_error
38
15
  end
39
- context 'when source PCM name is absent' do
40
- let(:pcm_motif) { Fabricate(:pcm, name: nil) }
41
- it 'should have no name' do
42
- subject.name.should be_nil
43
- end
16
+ specify do
17
+ expect( Bioinform::MotifModel::PCM.new(matrix).matrix ).to eq matrix
44
18
  end
45
- context 'when source PCM has name' do
46
- let(:pcm_motif) { Fabricate(:pcm, name: 'Stub-name') }
47
- it 'should has the same name' do
48
- subject.name.should == 'Stub-name'
49
- end
19
+ end
20
+
21
+ context 'with different counts in different positions' do
22
+ let(:matrix) { [[1,2,1,3],[30,10,100,11000], [1, 0, 3, 3]] }
23
+ specify do
24
+ expect { Bioinform::MotifModel::PCM.new(matrix) }.not_to raise_error
25
+ end
26
+ specify do
27
+ expect( Bioinform::MotifModel::PCM.new(matrix).matrix ).to eq matrix
50
28
  end
51
29
  end
52
30
  end
31
+ end
53
32
 
33
+ describe '.from_string' do
34
+ specify {
35
+ expect( Bioinform::MotifModel::PCM.from_string("1 2 3 4\n4 2 2 2").model.class ).to eq Bioinform::MotifModel::PCM
36
+ }
37
+ end
38
+
39
+ context 'valid PCM' do
40
+ let(:pcm) { Bioinform::MotifModel::PCM.new(matrix) }
41
+ context 'with equal counts in different positions' do
42
+ let(:matrix) { [[1,2,1,3],[3,3,0,1], [1, 0, 3, 3]] }
43
+ specify{ expect(pcm.count).to eq 7 }
44
+ end
45
+
46
+ context 'with different counts in different positions' do
47
+ let(:matrix) { [[1,2,1,3],[30,10,100,11000], [1, 0, 3, 3]] }
48
+ specify{ expect{ pcm.count }.to raise_error Bioinform::Error }
49
+ end
50
+ end
51
+
52
+ context 'valid PCM' do
53
+ let(:pcm) { Bioinform::MotifModel::PCM.new(matrix) }
54
+ let(:matrix) { [[1,2,1,3],[3,3,0,1], [1, 0, 3, 3]] }
55
+
56
+ specify { expect(pcm).to eq Bioinform::MotifModel::PCM.new(matrix) }
57
+ specify { expect(pcm).not_to eq matrix }
58
+ specify { expect(pcm).not_to eq Bioinform::MotifModel::PM.new(matrix) }
59
+ specify { expect(pcm).not_to eq Bioinform::MotifModel::PWM.new(matrix) }
60
+ # specify { expect(pcm).not_to eq Bioinform::MotifModel::PPM.new(matrix) }
61
+ specify { expect(matrix).not_to eq pcm }
62
+ specify { expect(Bioinform::MotifModel::PM.new(matrix)).not_to eq pcm }
63
+ specify { expect(Bioinform::MotifModel::PWM.new(matrix)).not_to eq pcm }
64
+ # specify { expect(Bioinform::MotifModel::PPM.new(matrix)).not_to eq pcm }
65
+
66
+ specify { expect(pcm.named('motif name')).to be_kind_of Bioinform::MotifModel::NamedModel }
67
+ specify { expect(pcm.named('motif name').model).to eq pcm }
68
+ specify { expect(pcm.named('motif name').name).to eq 'motif name' }
69
+
70
+ describe '#reversed, #complemented, #reverse_complemented' do
71
+ specify { expect(pcm.reversed).to be_kind_of Bioinform::MotifModel::PCM }
72
+ specify { expect(pcm.complemented).to be_kind_of Bioinform::MotifModel::PCM }
73
+ specify { expect(pcm.reverse_complemented).to be_kind_of Bioinform::MotifModel::PCM }
74
+ specify { expect(pcm.revcomp).to be_kind_of Bioinform::MotifModel::PCM }
75
+ end
76
+ end
77
+
78
+ describe '.acts_as_pcm?' do
79
+ let(:matrix) { [[0.1,0.2,0.3,0.4],[0.3,0.3,0.3,0.1], [0.3,0,0.3,0.4]] }
80
+ let(:pcm) { Bioinform::MotifModel::PCM.new(matrix) }
81
+ let(:pwm) { Bioinform::MotifModel::PWM.new(matrix) }
82
+ let(:ppm) { Bioinform::MotifModel::PPM.new(matrix) }
83
+ let(:named_pcm) { Bioinform::MotifModel::NamedModel.new(pcm, 'motif name') }
84
+ let(:named_pwm) { Bioinform::MotifModel::NamedModel.new(pwm, 'motif name') }
85
+ let(:named_ppm) { Bioinform::MotifModel::NamedModel.new(ppm, 'motif name') }
86
+ specify{ expect(Bioinform::MotifModel.acts_as_pcm?(pcm)).to be_truthy }
87
+ specify{ expect(Bioinform::MotifModel.acts_as_pcm?(named_pcm)).to be_truthy }
88
+ specify{ expect(Bioinform::MotifModel.acts_as_pcm?(pwm)).to be_falsy }
89
+ specify{ expect(Bioinform::MotifModel.acts_as_pcm?(named_pwm)).to be_falsy }
90
+ specify{ expect(Bioinform::MotifModel.acts_as_pcm?(ppm)).to be_falsy }
91
+ specify{ expect(Bioinform::MotifModel.acts_as_pcm?(named_ppm)).to be_falsy }
92
+ end
93
+
94
+ describe '.acts_as_pwm?' do
95
+ let(:matrix) { [[0.1,0.2,0.3,0.4],[0.3,0.3,0.3,0.1], [0.3,0,0.3,0.4]] }
96
+ let(:pcm) { Bioinform::MotifModel::PCM.new(matrix) }
97
+ let(:pwm) { Bioinform::MotifModel::PWM.new(matrix) }
98
+ let(:ppm) { Bioinform::MotifModel::PPM.new(matrix) }
99
+ let(:named_pcm) { Bioinform::MotifModel::NamedModel.new(pcm, 'motif name') }
100
+ let(:named_pwm) { Bioinform::MotifModel::NamedModel.new(pwm, 'motif name') }
101
+ let(:named_ppm) { Bioinform::MotifModel::NamedModel.new(ppm, 'motif name') }
102
+ specify{ expect(Bioinform::MotifModel.acts_as_pwm?(pcm)).to be_falsy }
103
+ specify{ expect(Bioinform::MotifModel.acts_as_pwm?(named_pcm)).to be_falsy }
104
+ specify{ expect(Bioinform::MotifModel.acts_as_pwm?(pwm)).to be_truthy }
105
+ specify{ expect(Bioinform::MotifModel.acts_as_pwm?(named_pwm)).to be_truthy }
106
+ specify{ expect(Bioinform::MotifModel.acts_as_pwm?(ppm)).to be_falsy }
107
+ specify{ expect(Bioinform::MotifModel.acts_as_pwm?(named_ppm)).to be_falsy }
108
+ end
54
109
 
110
+ describe '.acts_as_ppm?' do
111
+ let(:matrix) { [[0.1,0.2,0.3,0.4],[0.3,0.3,0.3,0.1], [0.3,0,0.3,0.4]] }
112
+ let(:pcm) { Bioinform::MotifModel::PCM.new(matrix) }
113
+ let(:pwm) { Bioinform::MotifModel::PWM.new(matrix) }
114
+ let(:ppm) { Bioinform::MotifModel::PPM.new(matrix) }
115
+ let(:named_pcm) { Bioinform::MotifModel::NamedModel.new(pcm, 'motif name') }
116
+ let(:named_pwm) { Bioinform::MotifModel::NamedModel.new(pwm, 'motif name') }
117
+ let(:named_ppm) { Bioinform::MotifModel::NamedModel.new(ppm, 'motif name') }
118
+ specify{ expect(Bioinform::MotifModel.acts_as_ppm?(pcm)).to be_falsy }
119
+ specify{ expect(Bioinform::MotifModel.acts_as_ppm?(named_pcm)).to be_falsy }
120
+ specify{ expect(Bioinform::MotifModel.acts_as_ppm?(pwm)).to be_falsy }
121
+ specify{ expect(Bioinform::MotifModel.acts_as_ppm?(named_pwm)).to be_falsy }
122
+ specify{ expect(Bioinform::MotifModel.acts_as_ppm?(ppm)).to be_truthy }
123
+ specify{ expect(Bioinform::MotifModel.acts_as_ppm?(named_ppm)).to be_truthy }
55
124
  end
56
- end
125
+ end