macroape 3.3.3 → 3.3.4

Sign up to get free protection for your applications and to get access to all the features.
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