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.
- 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
|