macroape 3.3.3 → 3.3.4

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 (54) hide show
  1. data/.gitignore +1 -0
  2. data/Rakefile.rb +7 -22
  3. data/TODO.txt +7 -6
  4. data/bin/align_motifs +4 -0
  5. data/bin/eval_alignment +2 -1
  6. data/bin/eval_similarity +2 -1
  7. data/bin/find_pvalue +2 -1
  8. data/bin/find_threshold +2 -1
  9. data/bin/preprocess_collection +2 -1
  10. data/bin/scan_collection +2 -1
  11. data/lib/macroape/aligned_pair_intersection.rb +2 -3
  12. data/lib/macroape/cli/align_motifs.rb +49 -0
  13. data/lib/macroape/cli/eval_alignment.rb +124 -0
  14. data/lib/macroape/cli/eval_similarity.rb +107 -0
  15. data/lib/macroape/cli/find_pvalue.rb +89 -0
  16. data/lib/macroape/cli/find_threshold.rb +84 -0
  17. data/lib/macroape/cli/preprocess_collection.rb +123 -0
  18. data/lib/macroape/cli/scan_collection.rb +141 -0
  19. data/lib/macroape/cli.rb +5 -0
  20. data/lib/macroape/counting.rb +15 -1
  21. data/lib/macroape/pwm_compare.rb +21 -1
  22. data/lib/macroape/pwm_compare_aligned.rb +21 -0
  23. data/lib/macroape/version.rb +1 -1
  24. data/macroape.gemspec +1 -1
  25. data/test/align_motifs_test.rb +12 -0
  26. data/test/data/KLF3_f1.pat +16 -0
  27. data/test/data/KLF3_f1.pcm +16 -0
  28. data/test/data/KLF4_f2.pcm +11 -0
  29. data/test/data/SP1_f1.pat +11 -11
  30. data/test/data/SP1_f1.pcm +12 -0
  31. data/test/data/SP1_f1_revcomp.pat +11 -11
  32. data/test/data/SP1_f1_revcomp.pcm +12 -0
  33. data/test/data/test_collection/SP1_f1.pat +11 -11
  34. data/test/data/test_collection.yaml +49 -109
  35. data/test/data/test_collection_pcm/GABPA_f1.pcm +14 -0
  36. data/test/data/test_collection_pcm/KLF4_f2.pcm +11 -0
  37. data/test/data/test_collection_pcm/SP1_f1.pcm +12 -0
  38. data/test/data/test_collection_single_file.txt +38 -0
  39. data/test/data/test_collection_single_file_pcm.txt +38 -0
  40. data/test/eval_alignment_test.rb +31 -0
  41. data/test/eval_similarity_test.rb +28 -13
  42. data/test/find_pvalue_test.rb +10 -13
  43. data/test/find_threshold_test.rb +10 -5
  44. data/test/preprocess_collection_test.rb +36 -2
  45. data/test/scan_collection_test.rb +9 -4
  46. data/test/test_helper.rb +61 -2
  47. metadata +38 -12
  48. data/lib/macroape/exec/eval_alignment.rb +0 -125
  49. data/lib/macroape/exec/eval_similarity.rb +0 -108
  50. data/lib/macroape/exec/find_pvalue.rb +0 -81
  51. data/lib/macroape/exec/find_threshold.rb +0 -77
  52. data/lib/macroape/exec/preprocess_collection.rb +0 -101
  53. data/lib/macroape/exec/scan_collection.rb +0 -124
  54. data/test/eval_alignment_similarity_test.rb +0 -20
@@ -0,0 +1,123 @@
1
+ require 'macroape'
2
+ require 'yaml'
3
+
4
+ module Macroape
5
+ module CLI
6
+ module PreprocessCollection
7
+
8
+ def self.main(argv)
9
+ help_string = %q{
10
+ Command-line format:
11
+ ruby preprocess_collection.rb <file or folder with PWMs or .stdin with PWMs> [options]
12
+
13
+ Options:
14
+ [-p <list of P-values>]
15
+ [-d <rough discretization> <precise discretization>]
16
+ [-b <background probabilities, ACGT - 4 numbers, space-delimited, sum should be equal to 1>]
17
+ [-o <output file>]
18
+ [--silent] - don't show current progress information during scan (by default this information's written into stderr)
19
+ [--pcm] - treats your input motifs as PCM-s. Motifs are converted to PWMs internally so output is the same as for according PWMs
20
+
21
+ The tool stores preprocessed Macroape collection to the specified YAML-file.
22
+
23
+ Example:
24
+ ruby preprocess_collection.rb ./motifs -p 0.001 0.0005 0.0001 -d 1 10 -b 0.2 0.3 0.2 0.3 -o collection.yaml
25
+ }
26
+
27
+ if argv.empty? || ['-h', '--h', '-help', '--help'].any?{|help_option| argv.include?(help_option)}
28
+ STDERR.puts help_string
29
+ exit
30
+ end
31
+
32
+ data_model = argv.delete('--pcm') ? Bioinform::PCM : Bioinform::PWM
33
+
34
+ default_pvalues = [0.0005]
35
+ background = [1,1,1,1]
36
+ rough_discretization = 1
37
+ precise_discretization = 10
38
+ output_file = 'collection.yaml'
39
+ max_hash_size = 1000000
40
+
41
+ data_source = argv.shift
42
+
43
+ raise "No input. You'd specify file or folder with pwms" unless data_source
44
+ raise "Error! File or folder #{data_source} doesn't exist" unless Dir.exist?(data_source) || File.exist?(data_source) || data_source == '.stdin'
45
+
46
+ pvalues = []
47
+ silent = false
48
+ until argv.empty?
49
+ case argv.shift
50
+ when '-b'
51
+ background = argv.shift(4).map(&:to_f)
52
+ raise 'background should be symmetric: p(A)=p(T) and p(G) = p(C)' unless background == background.reverse
53
+ when '-p'
54
+ loop do
55
+ begin
56
+ Float(argv.first)
57
+ pvalues << argv.shift.to_f
58
+ rescue
59
+ raise StopIteration
60
+ end
61
+ end
62
+ when '-d'
63
+ rough_discretization, precise_discretization = argv.shift(2).map(&:to_f).sort
64
+ when '-o'
65
+ output_file = argv.shift
66
+ when '-m'
67
+ max_hash_size = argv.shift.to_i
68
+ when '--silent'
69
+ silent = true
70
+ end
71
+ end
72
+ pvalues = default_pvalues if pvalues.empty?
73
+
74
+ collection = Macroape::Collection.new(rough_discretization, precise_discretization, background, pvalues)
75
+
76
+ if File.directory?(data_source)
77
+ motifs = Dir.glob(File.join(data_source,'*')).map do |filename|
78
+ pwm = data_model.new(File.read(filename))
79
+ pwm.name ||= File.basename(filename, File.extname(filename))
80
+ pwm
81
+ end
82
+ elsif File.file?(data_source)
83
+ input = File.read(data_source)
84
+ motifs = data_model.choose_parser(input).split_on_motifs(input, data_model)
85
+ elsif data_source == '.stdin'
86
+ input = $stdin.read
87
+ motifs = data_model.choose_parser(input).split_on_motifs(input, data_model)
88
+ else
89
+ raise "Specified data source `#{data_source}` is neither directory nor file nor even .stdin"
90
+ end
91
+
92
+ pwms = motifs.map(&:to_pwm)
93
+
94
+ pwms.each_with_index do |pwm,index|
95
+ STDERR.puts "#{index + 1} -- Name: #{pwm.name}, Length: #{pwm.length}" unless silent
96
+
97
+ # When support of onefile collections is introduced - then here should be check if name exists.
98
+ # Otherwise it should skip motif and tell you about this
99
+ # Also two command line options to fail on skipping or to skip silently should be included
100
+
101
+ info = {rough: {}, precise: {}}
102
+ pwm.background!(background).max_hash_size!(max_hash_size)
103
+
104
+ pwm.discrete(rough_discretization).thresholds(*pvalues) do |pvalue, threshold, real_pvalue|
105
+ info[:rough][pvalue] = threshold / rough_discretization
106
+ end
107
+
108
+ pwm.discrete(precise_discretization).thresholds(*pvalues) do |pvalue, threshold, real_pvalue|
109
+ info[:precise][pvalue] = threshold / precise_discretization
110
+ end
111
+
112
+ collection.add_pwm(pwm, info)
113
+ end
114
+ File.open(output_file,'w') do |f|
115
+ f.puts(collection.to_yaml)
116
+ end
117
+ rescue => err
118
+ STDERR.puts "\n#{err}\n#{err.backtrace.first(5).join("\n")}\n\nUse -help option for help\n"
119
+ end
120
+
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,141 @@
1
+ require 'macroape'
2
+ require 'yaml'
3
+
4
+ module Macroape
5
+ module CLI
6
+ module ScanCollection
7
+
8
+ def self.main(argv)
9
+ help_string = %q{
10
+ Command-line format:
11
+ ruby scan_collection.rb <pat-file> <collection> [options]
12
+ or in linux
13
+ cat <pat-file> | ruby scan_collection.rb .stdin <collection> [options]
14
+ or on windows
15
+ type <pat-file> | ruby scan_collection.rb .stdin <collection> [options]
16
+
17
+ Options:
18
+ [-p <P-value>]
19
+ [-c <similarity cutoff (minimal similarity to be included in output)> ] or [--all], '-c 0.05' by default
20
+ [--precise [<level, minimal similarity to check on a more precise discretization level on the second pass>]], off by default, '--precise 0.01' if level is not set
21
+ [--silent] - don't show current progress information during scan (by default this information's written into stderr)
22
+
23
+ Output format:
24
+ <name> <similarity jaccard index> <shift> <overlap> <orientation> * [in case that result calculated on the second pass(in precise mode)]
25
+ Attention! Name can contain whitespace characters.
26
+ Attention! The shift and orientation are reported for the collection matrix relative to the query matrix.
27
+
28
+ Example:
29
+ ruby scan_collection.rb motifs/KLF4.pat collection.yaml -p 0.005
30
+ or in linux
31
+ cat motifs/KLF4.pat | ruby scan_collection.rb .stdin collection.yaml -p 0.005 --precise 0.03
32
+ }
33
+
34
+ if argv.empty? || ['-h', '--h', '-help', '--help'].any?{|help_option| argv.include?(help_option)}
35
+ STDERR.puts help_string
36
+ exit
37
+ end
38
+
39
+ filename = argv.shift
40
+ collection_file = argv.shift
41
+ raise "No input. You'd specify input source for pat: filename or .stdin" unless filename
42
+ raise "No input. You'd specify input file with collection" unless collection_file
43
+ raise "Collection file #{collection_file} doesn't exist" unless File.exist?(collection_file)
44
+
45
+ pvalue = 0.0005
46
+ cutoff = 0.05 # minimal similarity to output
47
+ collection = YAML.load_file(collection_file)
48
+ background_query = collection.background
49
+ max_hash_size = 1000000
50
+ max_pair_hash_size = 1000
51
+
52
+ silent = false
53
+ precision_mode = :rough
54
+ until argv.empty?
55
+ case argv.shift
56
+ when '-bq'
57
+ background_query = argv.shift(4).map(&:to_f)
58
+ raise 'background should be symmetric: p(A)=p(T) and p(G) = p(C)' unless background_query == background_query.reverse
59
+ when '-p'
60
+ pvalue = argv.shift.to_f
61
+ when '-m'
62
+ max_hash_size = argv.shift.to_i
63
+ when '-md'
64
+ max_pair_hash_size = argv.shift.to_i
65
+ when '-c'
66
+ cutoff = argv.shift.to_f
67
+ when '--all'
68
+ cutoff = 0.0
69
+ when '--silent'
70
+ silent = true
71
+ when '--precise'
72
+ precision_mode = :precise
73
+ begin
74
+ Float(argv.first)
75
+ minimal_similarity = argv.shift.to_f
76
+ rescue
77
+ minimal_similarity = 0.05
78
+ end
79
+ end
80
+ end
81
+
82
+ raise "Thresholds for pvalue #{pvalue} aren't presented in collection (#{collection.pvalues.join(', ')}). Use one of listed pvalues or recalculate the collection with needed pvalue" unless collection.pvalues.include? pvalue
83
+
84
+ if filename == '.stdin'
85
+ query_pwm = Bioinform::PWM.new( $stdin.read )
86
+ else
87
+ raise "Error! File #{filename} doesn't exist" unless File.exist?(filename)
88
+ query_pwm = Bioinform::PWM.new(File.read(filename))
89
+ end
90
+
91
+ query_pwm.background(background_query).max_hash_size(max_hash_size)
92
+
93
+ query_pwm_rough = query_pwm.discrete(collection.rough_discretization)
94
+ query_pwm_precise = query_pwm.discrete(collection.precise_discretization)
95
+
96
+ query_threshold_rough = query_pwm_rough.threshold(pvalue)
97
+ query_threshold_precise = query_pwm_precise.threshold(pvalue)
98
+
99
+ similarities = {}
100
+ precision_file_mode = {}
101
+
102
+ collection.pwms.each_key do |name|
103
+ pwm = collection.pwms[name]
104
+ pwm.background(collection.background).max_hash_size(max_hash_size)
105
+ pwm_rough = pwm.discrete(collection.rough_discretization)
106
+ pwm_precise = pwm.discrete(collection.precise_discretization)
107
+
108
+ pwm_info = collection.infos[name]
109
+
110
+ pwm_threshold_rough = pwm_info[:rough][pvalue] * collection.rough_discretization
111
+ pwm_threshold_precise = pwm_info[:precise][pvalue] * collection.precise_discretization
112
+
113
+
114
+ STDERR.puts pwm.name unless silent
115
+ cmp = Macroape::PWMCompare.new(query_pwm_rough, pwm_rough).max_hash_size(max_pair_hash_size)
116
+ info = cmp.jaccard(query_threshold_rough, pwm_threshold_rough)
117
+ precision_file_mode[name] = :rough
118
+
119
+ if precision_mode == :precise and info[:similarity] >= minimal_similarity
120
+ cmp = Macroape::PWMCompare.new(query_pwm_precise, pwm_precise).max_hash_size(max_pair_hash_size)
121
+ info = cmp.jaccard(query_threshold_precise, pwm_threshold_precise)
122
+ precision_file_mode[name] = :precise
123
+ end
124
+ similarities[name] = info
125
+ end
126
+
127
+ puts "#pwm\tsimilarity\tshift\toverlap\torientation"
128
+ similarities.sort_by do |name, info|
129
+ info[:similarity]
130
+ end.reverse.each do |name, info|
131
+ precision_text = (precision_file_mode[name] == :precise) ? "\t*" : ""
132
+ puts "#{name}\t#{info[:similarity]}\t#{info[:shift]}\t#{info[:overlap]}\t#{info[:orientation]}#{precision_text}" if info[:similarity] >= cutoff
133
+ end
134
+
135
+ rescue => err
136
+ STDERR.puts "\n#{err}\n#{err.backtrace.first(5).join("\n")}\n\nUse -help option for help\n"
137
+ end
138
+
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,5 @@
1
+ module Macroape
2
+ module CLI
3
+
4
+ end
5
+ end
@@ -1,5 +1,19 @@
1
1
  module Bioinform
2
2
  class PWM
3
+ # sets or gets limit size of calculation hash. It's a defence against overuse CPU resources by non-appropriate data
4
+ def max_hash_size!(new_max_hash_size)
5
+ @max_hash_size = new_max_hash_size
6
+ self
7
+ end
8
+
9
+ def max_hash_size(*args)
10
+ case args.size
11
+ when 0 then @max_hash_size
12
+ when 1 then max_hash_size!(args.first)
13
+ else raise ArgumentError, '#max_hash_size method can get 0 or 1 argument'
14
+ end
15
+ end
16
+
3
17
  def threshold(pvalue)
4
18
  thresholds(pvalue){|_, thresh, _| return thresh }
5
19
  end
@@ -51,7 +65,7 @@ module Bioinform
51
65
  scores = { 0 => 1 }
52
66
  length.times do |column|
53
67
  scores.replace recalc_score_hash(scores, @matrix[column], threshold - best_suffix(column + 1))
54
- raise 'Hash overflow in PWM::ThresholdByPvalue#count_distribution_after_threshold' if defined? MaxHashSizeSingle and scores.size > MaxHashSizeSingle
68
+ raise 'Hash overflow in PWM::ThresholdByPvalue#count_distribution_after_threshold' if max_hash_size && scores.size > max_hash_size
55
69
  end
56
70
  scores
57
71
  end
@@ -1,5 +1,19 @@
1
1
  module Macroape
2
2
  class PWMCompare
3
+ # sets or gets limit of summary size of calculation hash. It's a defence against overuse CPU resources by non-appropriate data
4
+ def max_hash_size!(new_max_hash_size)
5
+ @max_hash_size = new_max_hash_size
6
+ self
7
+ end
8
+
9
+ def max_hash_size(*args)
10
+ case args.size
11
+ when 0 then @max_hash_size
12
+ when 1 then max_hash_size!(args.first)
13
+ else raise ArgumentError, '#max_hash_size method can get 0 or 1 argument'
14
+ end
15
+ end
16
+
3
17
  attr_reader :first, :second
4
18
  def initialize(first, second)
5
19
  @first = first
@@ -11,10 +25,16 @@ module Macroape
11
25
  alignment.alignment_infos.merge( alignment.jaccard(threshold_first, threshold_second) )
12
26
  end.max_by {|alignment_infos| alignment_infos[:similarity] }
13
27
  end
28
+
29
+ def jaccard_by_pvalue(pvalue)
30
+ threshold_first = first.threshold(pvalue)
31
+ threshold_second = second.threshold(pvalue)
32
+ jaccard(threshold_first, threshold_second)
33
+ end
14
34
 
15
35
  def each_alignment
16
36
  (-second.length..first.length).to_a.product([:direct,:revcomp]) do |shift, orientation|
17
- yield PWMCompareAligned.new(first, second, shift, orientation)
37
+ yield PWMCompareAligned.new(first, second, shift, orientation).max_hash_size(max_hash_size)
18
38
  end
19
39
  end
20
40
 
@@ -117,6 +117,12 @@ module Macroape
117
117
  { similarity: similarity, tanimoto: 1.0 - similarity, recognized_by_both: intersect,
118
118
  recognized_by_first: f, recognized_by_second: s }
119
119
  end
120
+
121
+ def jaccard_by_pvalue(pvalue)
122
+ threshold_first = first.threshold(pvalue)
123
+ threshold_second = second.threshold(pvalue)
124
+ jaccard(threshold_first, threshold_second)
125
+ end
120
126
 
121
127
  def self.calculate_alignment_length(first_len, second_len, shift)
122
128
  if shift > 0
@@ -125,6 +131,21 @@ module Macroape
125
131
  [first_len - shift, second_len].max
126
132
  end
127
133
  end
134
+
135
+ # sets or gets limit of summary size of calculation hash. It's a defence against overuse CPU resources by non-appropriate data
136
+ def max_hash_size!(new_max_hash_size)
137
+ @max_hash_size = new_max_hash_size
138
+ self
139
+ end
140
+
141
+ def max_hash_size(*args)
142
+ case args.size
143
+ when 0 then @max_hash_size
144
+ when 1 then max_hash_size!(args.first)
145
+ else raise ArgumentError, '#max_hash_size method can get 0 or 1 argument'
146
+ end
147
+ end
148
+
128
149
 
129
150
  end
130
151
 
@@ -1,3 +1,3 @@
1
1
  module Macroape
2
- VERSION = "3.3.3"
2
+ VERSION = "3.3.4"
3
3
  end
data/macroape.gemspec CHANGED
@@ -15,5 +15,5 @@ Gem::Specification.new do |gem|
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = Macroape::VERSION
17
17
 
18
- gem.add_dependency('bioinform', '>= 0.1.2')
18
+ gem.add_dependency('bioinform', '>= 0.1.5')
19
19
  end
@@ -0,0 +1,12 @@
1
+ require 'test_helper'
2
+
3
+ class TestAlignmotifs < Test::Unit::TestCase
4
+ def test_align_motifs
5
+ assert_equal "test/data/KLF4_f2.pat\t0\tdirect\ntest/data/KLF3_f1.pat\t-4\tdirect\ntest/data/SP1_f1_revcomp.pat\t-1\trevcomp\n",
6
+ Helpers.align_motifs_output('test/data/KLF4_f2.pat test/data/KLF3_f1.pat test/data/SP1_f1_revcomp.pat')
7
+ end
8
+ def test_align_pcm_motifs
9
+ assert_equal "test/data/KLF4_f2.pcm\t0\tdirect\ntest/data/KLF3_f1.pcm\t-4\tdirect\ntest/data/SP1_f1_revcomp.pcm\t-1\trevcomp\n",
10
+ Helpers.align_motifs_output('--pcm test/data/KLF4_f2.pcm test/data/KLF3_f1.pcm test/data/SP1_f1_revcomp.pcm')
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ KLF3_f1
2
+ 0.22156599923632986 0.0484147821994171 -1.5783984904108685 0.4028344703516524
3
+ 0.3691145643098263 -0.42654798884705847 0.5273776327056031 -1.5783984904108685
4
+ -1.5783984904108685 1.006572764992778 -0.5055850184352592 -0.7889208019368309
5
+ -0.42654798884705847 0.3691145643098263 -0.5055850184352592 0.26054379103002956
6
+ 0.26054379103002956 -1.5783984904108685 -0.5055850184352592 0.6381135377904803
7
+ -0.42654798884705847 -1.5783984904108685 1.0765817190154965 -1.5783984904108685
8
+ -1.5783984904108685 -1.5783984904108685 1.0765817190154965 -0.42654798884705847
9
+ -1.5783984904108685 -1.5783984904108685 1.2181964566417396 -1.5783984904108685
10
+ -1.5783984904108685 -1.5783984904108685 -1.5783984904108685 1.2181964566417396
11
+ -0.42654798884705847 -1.5783984904108685 1.0765817190154965 -1.5783984904108685
12
+ -1.5783984904108685 -1.5783984904108685 0.3691145643098263 0.7612432224843741
13
+ -0.42654798884705847 0.0484147821994171 0.7378003724947412 -1.5783984904108685
14
+ -1.5783984904108685 -0.5055850184352592 0.9312911055808129 -0.42654798884705847
15
+ -0.1611290354980871 0.611557817476478 -0.42654798884705847 -0.42654798884705847
16
+ -0.03791418689319392 -1.1459600292730023 -1.1459600292730023 0.8760382926050381
@@ -0,0 +1,16 @@
1
+ KLF3_f1
2
+ 2.625 2.125 0.0 3.25
3
+ 3.125 1.125 3.75 0.0
4
+ 0.0 6.375 1.0 0.625
5
+ 1.125 3.125 1.0 2.75
6
+ 2.75 0.0 1.0 4.25
7
+ 1.125 0.0 6.875 0.0
8
+ 0.0 0.0 6.875 1.125
9
+ 0.0 0.0 8.0 0.0
10
+ 0.0 0.0 0.0 8.0
11
+ 1.125 0.0 6.875 0.0
12
+ 0.0 0.0 3.125 4.875
13
+ 1.125 2.125 4.75 0.0
14
+ 0.0 1.0 5.875 1.125
15
+ 1.625 4.125 1.125 1.125
16
+ 1.90625 0.28125 0.28125 5.53125
@@ -0,0 +1,11 @@
1
+ KLF4_f2
2
+ 1233.46088405354 93.18173277811673 1036.6014857092885 1258.2948629970272
3
+ 263.979242343185 5.314520555872139 3347.5949971525274 4.650205486388122
4
+ 76.7700780003465 6.643150694840173 3529.4896409394937 8.636095903292224
5
+ 57.86097393406657 18.102585643439472 3520.3342027139347 25.24120324653207
6
+ 518.1947904009378 1545.9062946905135 22.396758181071043 1535.0411222654507
7
+ 137.98151691820345 9.300410972776241 3456.320530770924 17.936506876068467
8
+ 115.27647661640499 81.51802997128804 1861.9425868567278 1562.801872093553
9
+ 227.8095486111286 42.84555258785854 3278.6396005325996 72.244263806387
10
+ 108.73384179997886 134.47328134862394 3162.880454846513 215.45138754285665
11
+ 238.49636899561344 2225.9561104691043 402.40727964384774 754.6792064294074
data/test/data/SP1_f1.pat CHANGED
@@ -1,12 +1,12 @@
1
1
  > SP1_f1
2
- -0.24435707885585334 -0.6748234046937317 0.8657012535789861 -1.1060188862599292
3
- -1.0631255752097801 -2.1119259694238686 1.0960627561110399 -0.6138563775211981
4
- -0.387227623476054 -2.973985191321805 1.1807800242010371 -4.338927525031567
5
- -4.563896055436894 -2.916163300253228 1.3684371349982631 -5.077972423609655
6
- -2.2369752892820087 -3.719643631330185 1.3510439136452728 -4.8899306705082335
7
- -0.07473964149330914 0.9449196547620103 -2.624685764808605 -0.851098348782244
8
- -1.9643526491643326 -2.9784027708801153 1.3113096718240569 -2.3243342594990253
9
- -4.015548413965584 -3.138426807809667 1.338748858978805 -2.0846739035376483
10
- -0.4450938582835542 -2.2510053061629707 1.126543157436868 -1.7780413702431377
11
- -1.1896356092245055 -1.2251832285630033 1.163676006374752 -1.6080243648157357
12
- -0.5166047365590577 0.7641033353626651 -0.28626775700282125 -0.6825482097865606
2
+ -0.24435707885585292 -0.674823404693731 0.8657012535789866 -1.1060188862599287
3
+ -1.0631255752097797 -2.111925969423868 1.0960627561110403 -0.6138563775211977
4
+ -0.3872276234760535 -2.9739851913218045 1.1807800242010378 -4.338927525031566
5
+ -4.563896055436894 -2.9161633002532277 1.3684371349982638 -5.077972423609655
6
+ -2.2369752892820083 -3.7196436313301846 1.3510439136452734 -4.889930670508233
7
+ -0.07473964149330865 0.944919654762011 -2.6246857648086044 -0.8510983487822436
8
+ -1.9643526491643322 -2.978402770880115 1.3113096718240573 -2.324334259499025
9
+ -4.0155484139655835 -3.1384268078096667 1.3387488589788057 -2.084673903537648
10
+ -0.44509385828355363 -2.2510053061629702 1.1265431574368685 -1.7780413702431372
11
+ -1.1896356092245048 -1.2251832285630027 1.1636760063747527 -1.6080243648157353
12
+ -0.5166047365590571 0.7641033353626657 -0.2862677570028208 -0.68254820978656
@@ -0,0 +1,12 @@
1
+ SP1_f1
2
+ 682.6436366358055 443.1455214015781 2075.655346294993 287.211468117951
3
+ 299.8883246804867 103.74338315843572 2613.8927022405364 471.1315623708902
4
+ 591.4892493324709 42.631827541794564 2845.1654083148564 9.36948726124641
5
+ 7.071084742361592 45.29093411231232 3432.8847704374107 3.409183158303573
6
+ 91.308984085713 19.1536481364332 3373.656949880137 4.5363903481026
7
+ 809.2082973387932 2246.941954176211 61.30766021687515 371.19806071846244
8
+ 120.56476435866055 42.4349244403591 3242.1560628684038 83.50022078295852
9
+ 13.72524477409959 35.858220519297525 3332.4066864946167 106.66582066236779
10
+ 558.1188080161639 90.0084504200356 2694.854973210736 145.67374080342415
11
+ 264.0088462230318 254.7175868081866 2796.88087480315 173.0486646159857
12
+ 519.46013914282 1874.9349086474765 654.5411208373813 439.7198038226514
@@ -1,12 +1,12 @@
1
1
  SP1_f1_revcomp
2
- -0.6825482097865606 -0.28626775700282125 0.7641033353626651 -0.5166047365590577
3
- -1.6080243648157357 1.163676006374752 -1.2251832285630033 -1.1896356092245055
4
- -1.7780413702431377 1.126543157436868 -2.2510053061629707 -0.4450938582835542
5
- -2.0846739035376483 1.338748858978805 -3.138426807809667 -4.015548413965584
6
- -2.3243342594990253 1.3113096718240569 -2.9784027708801153 -1.9643526491643326
7
- -0.851098348782244 -2.624685764808605 0.9449196547620103 -0.07473964149330914
8
- -4.8899306705082335 1.3510439136452728 -3.719643631330185 -2.2369752892820087
9
- -5.077972423609655 1.3684371349982631 -2.916163300253228 -4.563896055436894
10
- -4.338927525031567 1.1807800242010371 -2.973985191321805 -0.387227623476054
11
- -0.6138563775211981 1.0960627561110399 -2.1119259694238686 -1.0631255752097801
12
- -1.1060188862599292 0.8657012535789861 -0.6748234046937317 -0.24435707885585334
2
+ -0.68254820978656 -0.2862677570028208 0.7641033353626657 -0.5166047365590571
3
+ -1.6080243648157353 1.1636760063747527 -1.2251832285630027 -1.1896356092245048
4
+ -1.7780413702431372 1.1265431574368685 -2.2510053061629702 -0.44509385828355363
5
+ -2.084673903537648 1.3387488589788057 -3.1384268078096667 -4.0155484139655835
6
+ -2.324334259499025 1.3113096718240573 -2.978402770880115 -1.9643526491643322
7
+ -0.8510983487822436 -2.6246857648086044 0.944919654762011 -0.07473964149330865
8
+ -4.889930670508233 1.3510439136452734 -3.7196436313301846 -2.2369752892820083
9
+ -5.077972423609655 1.3684371349982638 -2.9161633002532277 -4.563896055436894
10
+ -4.338927525031566 1.1807800242010378 -2.9739851913218045 -0.3872276234760535
11
+ -0.6138563775211977 1.0960627561110403 -2.111925969423868 -1.0631255752097797
12
+ -1.1060188862599287 0.8657012535789866 -0.674823404693731 -0.24435707885585292
@@ -0,0 +1,12 @@
1
+ SP1_f1
2
+ 439.7198038226514 654.5411208373813 1874.9349086474765 519.46013914282
3
+ 173.0486646159857 2796.88087480315 254.7175868081866 264.0088462230318
4
+ 145.67374080342415 2694.854973210736 90.0084504200356 558.1188080161639
5
+ 106.66582066236779 3332.4066864946167 35.858220519297525 13.72524477409959
6
+ 83.50022078295852 3242.1560628684038 42.4349244403591 120.56476435866055
7
+ 371.19806071846244 61.30766021687515 2246.941954176211 809.2082973387932
8
+ 4.5363903481026 3373.656949880137 19.1536481364332 91.308984085713
9
+ 3.409183158303573 3432.8847704374107 45.29093411231232 7.071084742361592
10
+ 9.36948726124641 2845.1654083148564 42.631827541794564 591.4892493324709
11
+ 471.1315623708902 2613.8927022405364 103.74338315843572 299.8883246804867
12
+ 287.211468117951 2075.655346294993 443.1455214015781 682.6436366358055
@@ -1,12 +1,12 @@
1
1
  > SP1_f1
2
- -0.24435707885585334 -0.6748234046937317 0.8657012535789861 -1.1060188862599292
3
- -1.0631255752097801 -2.1119259694238686 1.0960627561110399 -0.6138563775211981
4
- -0.387227623476054 -2.973985191321805 1.1807800242010371 -4.338927525031567
5
- -4.563896055436894 -2.916163300253228 1.3684371349982631 -5.077972423609655
6
- -2.2369752892820087 -3.719643631330185 1.3510439136452728 -4.8899306705082335
7
- -0.07473964149330914 0.9449196547620103 -2.624685764808605 -0.851098348782244
8
- -1.9643526491643326 -2.9784027708801153 1.3113096718240569 -2.3243342594990253
9
- -4.015548413965584 -3.138426807809667 1.338748858978805 -2.0846739035376483
10
- -0.4450938582835542 -2.2510053061629707 1.126543157436868 -1.7780413702431377
11
- -1.1896356092245055 -1.2251832285630033 1.163676006374752 -1.6080243648157357
12
- -0.5166047365590577 0.7641033353626651 -0.28626775700282125 -0.6825482097865606
2
+ -0.24435707885585292 -0.674823404693731 0.8657012535789866 -1.1060188862599287
3
+ -1.0631255752097797 -2.111925969423868 1.0960627561110403 -0.6138563775211977
4
+ -0.3872276234760535 -2.9739851913218045 1.1807800242010378 -4.338927525031566
5
+ -4.563896055436894 -2.9161633002532277 1.3684371349982638 -5.077972423609655
6
+ -2.2369752892820083 -3.7196436313301846 1.3510439136452734 -4.889930670508233
7
+ -0.07473964149330865 0.944919654762011 -2.6246857648086044 -0.8510983487822436
8
+ -1.9643526491643322 -2.978402770880115 1.3113096718240573 -2.324334259499025
9
+ -4.0155484139655835 -3.1384268078096667 1.3387488589788057 -2.084673903537648
10
+ -0.44509385828355363 -2.2510053061629702 1.1265431574368685 -1.7780413702431372
11
+ -1.1896356092245048 -1.2251832285630027 1.1636760063747527 -1.6080243648157353
12
+ -0.5166047365590571 0.7641033353626657 -0.2862677570028208 -0.68254820978656