macroape 3.3.3 → 3.3.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/Rakefile.rb +7 -22
- data/TODO.txt +7 -6
- data/bin/align_motifs +4 -0
- data/bin/eval_alignment +2 -1
- data/bin/eval_similarity +2 -1
- data/bin/find_pvalue +2 -1
- data/bin/find_threshold +2 -1
- data/bin/preprocess_collection +2 -1
- data/bin/scan_collection +2 -1
- data/lib/macroape/aligned_pair_intersection.rb +2 -3
- data/lib/macroape/cli/align_motifs.rb +49 -0
- data/lib/macroape/cli/eval_alignment.rb +124 -0
- data/lib/macroape/cli/eval_similarity.rb +107 -0
- data/lib/macroape/cli/find_pvalue.rb +89 -0
- data/lib/macroape/cli/find_threshold.rb +84 -0
- data/lib/macroape/cli/preprocess_collection.rb +123 -0
- data/lib/macroape/cli/scan_collection.rb +141 -0
- data/lib/macroape/cli.rb +5 -0
- data/lib/macroape/counting.rb +15 -1
- data/lib/macroape/pwm_compare.rb +21 -1
- data/lib/macroape/pwm_compare_aligned.rb +21 -0
- data/lib/macroape/version.rb +1 -1
- data/macroape.gemspec +1 -1
- data/test/align_motifs_test.rb +12 -0
- data/test/data/KLF3_f1.pat +16 -0
- data/test/data/KLF3_f1.pcm +16 -0
- data/test/data/KLF4_f2.pcm +11 -0
- data/test/data/SP1_f1.pat +11 -11
- data/test/data/SP1_f1.pcm +12 -0
- data/test/data/SP1_f1_revcomp.pat +11 -11
- data/test/data/SP1_f1_revcomp.pcm +12 -0
- data/test/data/test_collection/SP1_f1.pat +11 -11
- data/test/data/test_collection.yaml +49 -109
- data/test/data/test_collection_pcm/GABPA_f1.pcm +14 -0
- data/test/data/test_collection_pcm/KLF4_f2.pcm +11 -0
- data/test/data/test_collection_pcm/SP1_f1.pcm +12 -0
- data/test/data/test_collection_single_file.txt +38 -0
- data/test/data/test_collection_single_file_pcm.txt +38 -0
- data/test/eval_alignment_test.rb +31 -0
- data/test/eval_similarity_test.rb +28 -13
- data/test/find_pvalue_test.rb +10 -13
- data/test/find_threshold_test.rb +10 -5
- data/test/preprocess_collection_test.rb +36 -2
- data/test/scan_collection_test.rb +9 -4
- data/test/test_helper.rb +61 -2
- metadata +38 -12
- data/lib/macroape/exec/eval_alignment.rb +0 -125
- data/lib/macroape/exec/eval_similarity.rb +0 -108
- data/lib/macroape/exec/find_pvalue.rb +0 -81
- data/lib/macroape/exec/find_threshold.rb +0 -77
- data/lib/macroape/exec/preprocess_collection.rb +0 -101
- data/lib/macroape/exec/scan_collection.rb +0 -124
- 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
|
data/lib/macroape/cli.rb
ADDED
data/lib/macroape/counting.rb
CHANGED
@@ -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'
|
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
|
data/lib/macroape/pwm_compare.rb
CHANGED
@@ -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
|
|
data/lib/macroape/version.rb
CHANGED
data/macroape.gemspec
CHANGED
@@ -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.
|
3
|
-
-1.
|
4
|
-
-0.
|
5
|
-
-4.563896055436894
|
6
|
-
-2.
|
7
|
-
-0.
|
8
|
-
-1.
|
9
|
-
-4.
|
10
|
-
-0.
|
11
|
-
-1.
|
12
|
-
-0.
|
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.
|
3
|
-
-1.
|
4
|
-
-1.
|
5
|
-
-2.
|
6
|
-
-2.
|
7
|
-
-0.
|
8
|
-
-4.
|
9
|
-
-5.077972423609655
|
10
|
-
-4.
|
11
|
-
-0.
|
12
|
-
-1.
|
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.
|
3
|
-
-1.
|
4
|
-
-0.
|
5
|
-
-4.563896055436894
|
6
|
-
-2.
|
7
|
-
-0.
|
8
|
-
-1.
|
9
|
-
-4.
|
10
|
-
-0.
|
11
|
-
-1.
|
12
|
-
-0.
|
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
|