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
@@ -3,7 +3,7 @@ pvalues:
3
3
  - 0.0005
4
4
  - 0.0001
5
5
  - 5.0e-05
6
- background:
6
+ background: &17959680
7
7
  - 1
8
8
  - 1
9
9
  - 1
@@ -12,26 +12,6 @@ precise_discretization: 10
12
12
  rough_discretization: 1
13
13
  pwms:
14
14
  GABPA_f1: !ruby/object:Bioinform::PWM
15
- background:
16
- - 1
17
- - 1
18
- - 1
19
- - 1
20
- input: ! "GABPA_f1\n-0.1106670158341858 0.013801606113892391 0.6054596108973699
21
- -1.3518085041421573 \n0.37030668921643345 0.15761121480429963 0.009069314183831202
22
- -0.9888619717703562 \n0.47526546359546684 -0.3011678534572083 0.4031522994412777
23
- -1.8638752827041059 \n-1.5544255540164373 1.1082369687811506 -0.2814091552834454
24
- -5.30708531823271 \n-0.6362037835776368 1.235338189985594 -3.5801322928552253
25
- -5.717323067092849 \n-5.852906870733575 -5.852906870733575 1.3841383838057746
26
- -5.852906870733575 \n-5.852906870733575 -5.852906870733575 1.3841383838057746
27
- -5.852906870733575 \n1.3835219739184708 -5.2341956006430985 -5.852906870733575
28
- -5.852906870733575 \n1.3756340514956562 -5.394962755562375 -5.394962755562375
29
- -3.401117964959733 \n-1.2176198315414444 -3.109079898175411 1.2964067931472216
30
- -5.717323067092849 \n-1.3716559438167257 -0.2761401935045069 -1.8504445165866068
31
- 1.0404320473626856 \n-0.5440863133031895 -0.48103682561971345 0.907381908447086
32
- -1.1280642594012078 \n0.10557340209290218 -0.01814819455289191 0.4381106695354074
33
- -1.0304105539540915 \n"
34
- parser: !ruby/class 'Bioinform::StringParser'
35
15
  matrix:
36
16
  - - -0.1106670158341858
37
17
  - 0.013801606113892391
@@ -86,24 +66,9 @@ pwms:
86
66
  - 0.4381106695354074
87
67
  - -1.0304105539540915
88
68
  name: GABPA_f1
69
+ background: *17959680
70
+ max_hash_size: 1000000
89
71
  KLF4_f2: !ruby/object:Bioinform::PWM
90
- background:
91
- - 1
92
- - 1
93
- - 1
94
- - 1
95
- input: ! "KLF4_f2\n0.30861857265872605 -2.254321000121579 0.13505703522674192
96
- 0.3285194224375633 \n-1.227018967707036 -4.814127713368663 1.3059890687390967
97
- -4.908681463544344 \n-2.443469374521196 -4.648238485031404 1.3588686548279805
98
- -4.441801801188402 \n-2.7177827948276123 -3.8073538975356565 1.356272809724262
99
- -3.504104725510225 \n-0.5563232977367343 0.5340697765121405 -3.61417723090579
100
- 0.5270259776377405 \n-1.8687622060887386 -4.381483976582316 1.337932245336098
101
- -3.815629658877517 \n-2.045671123823928 -2.384975142213679 0.7198551207724355
102
- 0.5449254135616948 \n-1.373157530374372 -3.0063112097748217 1.285188335493552
103
- -2.5026044231773543 \n-2.1030513122772208 -1.8941348100402244 1.249265758393991
104
- -1.4284210948906104 \n-1.3277128628152939 0.8982415633049462 -0.8080773665408135
105
- -0.18161647647456935 \n"
106
- parser: !ruby/class 'Bioinform::StringParser'
107
72
  matrix:
108
73
  - - 0.30861857265872605
109
74
  - -2.254321000121579
@@ -146,82 +111,57 @@ pwms:
146
111
  - -0.8080773665408135
147
112
  - -0.18161647647456935
148
113
  name: KLF4_f2
114
+ background: *17959680
115
+ max_hash_size: 1000000
149
116
  SP1_f1: !ruby/object:Bioinform::PWM
150
- background:
151
- - 1
152
- - 1
153
- - 1
154
- - 1
155
- input: ! '> SP1_f1
156
-
157
- -0.24435707885585334 -0.6748234046937317 0.8657012535789861 -1.1060188862599292
158
-
159
- -1.0631255752097801 -2.1119259694238686 1.0960627561110399 -0.6138563775211981
160
-
161
- -0.387227623476054 -2.973985191321805 1.1807800242010371 -4.338927525031567
162
-
163
- -4.563896055436894 -2.916163300253228 1.3684371349982631 -5.077972423609655
164
-
165
- -2.2369752892820087 -3.719643631330185 1.3510439136452728 -4.8899306705082335
166
-
167
- -0.07473964149330914 0.9449196547620103 -2.624685764808605 -0.851098348782244
168
-
169
- -1.9643526491643326 -2.9784027708801153 1.3113096718240569 -2.3243342594990253
170
-
171
- -4.015548413965584 -3.138426807809667 1.338748858978805 -2.0846739035376483
172
-
173
- -0.4450938582835542 -2.2510053061629707 1.126543157436868 -1.7780413702431377
174
-
175
- -1.1896356092245055 -1.2251832285630033 1.163676006374752 -1.6080243648157357
176
-
177
- -0.5166047365590577 0.7641033353626651 -0.28626775700282125 -0.6825482097865606'
178
- parser: !ruby/class 'Bioinform::StringParser'
179
117
  matrix:
180
- - - -0.24435707885585334
181
- - -0.6748234046937317
182
- - 0.8657012535789861
183
- - -1.1060188862599292
184
- - - -1.0631255752097801
185
- - -2.1119259694238686
186
- - 1.0960627561110399
187
- - -0.6138563775211981
188
- - - -0.387227623476054
189
- - -2.973985191321805
190
- - 1.1807800242010371
191
- - -4.338927525031567
118
+ - - -0.24435707885585292
119
+ - -0.674823404693731
120
+ - 0.8657012535789866
121
+ - -1.1060188862599287
122
+ - - -1.0631255752097797
123
+ - -2.111925969423868
124
+ - 1.0960627561110403
125
+ - -0.6138563775211977
126
+ - - -0.3872276234760535
127
+ - -2.9739851913218045
128
+ - 1.1807800242010378
129
+ - -4.338927525031566
192
130
  - - -4.563896055436894
193
- - -2.916163300253228
194
- - 1.3684371349982631
131
+ - -2.9161633002532277
132
+ - 1.3684371349982638
195
133
  - -5.077972423609655
196
- - - -2.2369752892820087
197
- - -3.719643631330185
198
- - 1.3510439136452728
199
- - -4.8899306705082335
200
- - - -0.07473964149330914
201
- - 0.9449196547620103
202
- - -2.624685764808605
203
- - -0.851098348782244
204
- - - -1.9643526491643326
205
- - -2.9784027708801153
206
- - 1.3113096718240569
207
- - -2.3243342594990253
208
- - - -4.015548413965584
209
- - -3.138426807809667
210
- - 1.338748858978805
211
- - -2.0846739035376483
212
- - - -0.4450938582835542
213
- - -2.2510053061629707
214
- - 1.126543157436868
215
- - -1.7780413702431377
216
- - - -1.1896356092245055
217
- - -1.2251832285630033
218
- - 1.163676006374752
219
- - -1.6080243648157357
220
- - - -0.5166047365590577
221
- - 0.7641033353626651
222
- - -0.28626775700282125
223
- - -0.6825482097865606
134
+ - - -2.2369752892820083
135
+ - -3.7196436313301846
136
+ - 1.3510439136452734
137
+ - -4.889930670508233
138
+ - - -0.07473964149330865
139
+ - 0.944919654762011
140
+ - -2.6246857648086044
141
+ - -0.8510983487822436
142
+ - - -1.9643526491643322
143
+ - -2.978402770880115
144
+ - 1.3113096718240573
145
+ - -2.324334259499025
146
+ - - -4.0155484139655835
147
+ - -3.1384268078096667
148
+ - 1.3387488589788057
149
+ - -2.084673903537648
150
+ - - -0.44509385828355363
151
+ - -2.2510053061629702
152
+ - 1.1265431574368685
153
+ - -1.7780413702431372
154
+ - - -1.1896356092245048
155
+ - -1.2251832285630027
156
+ - 1.1636760063747527
157
+ - -1.6080243648157353
158
+ - - -0.5166047365590571
159
+ - 0.7641033353626657
160
+ - -0.2862677570028208
161
+ - -0.68254820978656
224
162
  name: SP1_f1
163
+ background: *17959680
164
+ max_hash_size: 1000000
225
165
  infos:
226
166
  GABPA_f1:
227
167
  :rough:
@@ -0,0 +1,14 @@
1
+ GABPA_f1
2
+ 615.2572649050138 697.0698715160123 1261.1903440712872 176.43506582414153
3
+ 996.4929869323321 805.1878697364007 693.7695793644275 254.5021102832924
4
+ 1106.9888035794224 508.19444415177276 1029.8329748714536 104.93632371380718
5
+ 143.7121486195701 2086.4279160661263 518.37507049306 1.4374111377025893
6
+ 362.9541452731307 2369.473894845734 17.23702397004065 0.2874822275405179
7
+ 0.0 0.0 2749.952546316428 0.0
8
+ 0.0 0.0 2749.952546316428 0.0
9
+ 2748.2567506938462 1.695795622582083 0.0 0.0
10
+ 2726.6484322711017 1.1499289101620715 1.1499289101620715 21.00425622500253
11
+ 202.05697400573305 28.799402471063658 2518.808687612104 0.2874822275405179
12
+ 172.92889618879767 521.1240363384483 106.38197600987633 1949.517637779338
13
+ 398.1679460365911 424.20938204069563 1706.4024212088275 221.17279703034018
14
+ 764.2587933951809 675.0883944902433 1066.5413633225007 244.06399510852864
@@ -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
@@ -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
@@ -0,0 +1,38 @@
1
+ > SP1_f1
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
13
+ KLF4_f2
14
+ 0.30861857265872605 -2.254321000121579 0.13505703522674192 0.3285194224375633
15
+ -1.227018967707036 -4.814127713368663 1.3059890687390967 -4.908681463544344
16
+ -2.443469374521196 -4.648238485031404 1.3588686548279805 -4.441801801188402
17
+ -2.7177827948276123 -3.8073538975356565 1.356272809724262 -3.504104725510225
18
+ -0.5563232977367343 0.5340697765121405 -3.61417723090579 0.5270259776377405
19
+ -1.8687622060887386 -4.381483976582316 1.337932245336098 -3.815629658877517
20
+ -2.045671123823928 -2.384975142213679 0.7198551207724355 0.5449254135616948
21
+ -1.373157530374372 -3.0063112097748217 1.285188335493552 -2.5026044231773543
22
+ -2.1030513122772208 -1.8941348100402244 1.249265758393991 -1.4284210948906104
23
+ -1.3277128628152939 0.8982415633049462 -0.8080773665408135 -0.18161647647456935
24
+
25
+ GABPA_f1
26
+ -0.1106670158341858 0.013801606113892391 0.6054596108973699 -1.3518085041421573
27
+ 0.37030668921643345 0.15761121480429963 0.009069314183831202 -0.9888619717703562
28
+ 0.47526546359546684 -0.3011678534572083 0.4031522994412777 -1.8638752827041059
29
+ -1.5544255540164373 1.1082369687811506 -0.2814091552834454 -5.30708531823271
30
+ -0.6362037835776368 1.235338189985594 -3.5801322928552253 -5.717323067092849
31
+ -5.852906870733575 -5.852906870733575 1.3841383838057746 -5.852906870733575
32
+ -5.852906870733575 -5.852906870733575 1.3841383838057746 -5.852906870733575
33
+ 1.3835219739184708 -5.2341956006430985 -5.852906870733575 -5.852906870733575
34
+ 1.3756340514956562 -5.394962755562375 -5.394962755562375 -3.401117964959733
35
+ -1.2176198315414444 -3.109079898175411 1.2964067931472216 -5.717323067092849
36
+ -1.3716559438167257 -0.2761401935045069 -1.8504445165866068 1.0404320473626856
37
+ -0.5440863133031895 -0.48103682561971345 0.907381908447086 -1.1280642594012078
38
+ 0.10557340209290218 -0.01814819455289191 0.4381106695354074 -1.0304105539540915
@@ -0,0 +1,38 @@
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
13
+ KLF4_f2
14
+ 1233.46088405354 93.18173277811673 1036.6014857092885 1258.2948629970272
15
+ 263.979242343185 5.314520555872139 3347.5949971525274 4.650205486388122
16
+ 76.7700780003465 6.643150694840173 3529.4896409394937 8.636095903292224
17
+ 57.86097393406657 18.102585643439472 3520.3342027139347 25.24120324653207
18
+ 518.1947904009378 1545.9062946905135 22.396758181071043 1535.0411222654507
19
+ 137.98151691820345 9.300410972776241 3456.320530770924 17.936506876068467
20
+ 115.27647661640499 81.51802997128804 1861.9425868567278 1562.801872093553
21
+ 227.8095486111286 42.84555258785854 3278.6396005325996 72.244263806387
22
+ 108.73384179997886 134.47328134862394 3162.880454846513 215.45138754285665
23
+ 238.49636899561344 2225.9561104691043 402.40727964384774 754.6792064294074
24
+
25
+ GABPA_f1
26
+ 615.2572649050138 697.0698715160123 1261.1903440712872 176.43506582414153
27
+ 996.4929869323321 805.1878697364007 693.7695793644275 254.5021102832924
28
+ 1106.9888035794224 508.19444415177276 1029.8329748714536 104.93632371380718
29
+ 143.7121486195701 2086.4279160661263 518.37507049306 1.4374111377025893
30
+ 362.9541452731307 2369.473894845734 17.23702397004065 0.2874822275405179
31
+ 0.0 0.0 2749.952546316428 0.0
32
+ 0.0 0.0 2749.952546316428 0.0
33
+ 2748.2567506938462 1.695795622582083 0.0 0.0
34
+ 2726.6484322711017 1.1499289101620715 1.1499289101620715 21.00425622500253
35
+ 202.05697400573305 28.799402471063658 2518.808687612104 0.2874822275405179
36
+ 172.92889618879767 521.1240363384483 106.38197600987633 1949.517637779338
37
+ 398.1679460365911 424.20938204069563 1706.4024212088275 221.17279703034018
38
+ 764.2587933951809 675.0883944902433 1066.5413633225007 244.06399510852864
@@ -0,0 +1,31 @@
1
+ require 'test_helper'
2
+
3
+ class TestEvalAlignment < Test::Unit::TestCase
4
+ def test_process_at_optimal_alignment
5
+ assert_equal "0.2420758234928527\n779.0\t11\n.>>>>>>>>>>\n>>>>>>>>>>>\n-1\tdirect\n", Helpers.eval_alignment_output('test/data/KLF4_f2.pat test/data/SP1_f1.pat -1 direct')
6
+ end
7
+ def test_process_not_optimal_alignment
8
+ assert_equal "0.0017543859649122807\n7.0\t11\n>>>>>>>>>>.\n>>>>>>>>>>>\n0\tdirect\n", Helpers.eval_alignment_output('test/data/KLF4_f2.pat test/data/SP1_f1.pat 0 direct')
9
+ end
10
+ def test_process_alignment_first_motif_from_stdin
11
+ assert_equal "0.0017543859649122807\n7.0\t11\n>>>>>>>>>>.\n>>>>>>>>>>>\n0\tdirect\n",
12
+ Helpers.provide_stdin(File.read('test/data/KLF4_f2.pat')) {
13
+ Helpers.eval_alignment_output('.stdin test/data/SP1_f1.pat 0 direct')
14
+ }
15
+ end
16
+ def test_process_alignment_second_motif_from_stdin
17
+ assert_equal "0.0017543859649122807\n7.0\t11\n>>>>>>>>>>.\n>>>>>>>>>>>\n0\tdirect\n",
18
+ Helpers.provide_stdin(File.read('test/data/SP1_f1.pat')) {
19
+ Helpers.eval_alignment_output('test/data/KLF4_f2.pat .stdin 0 direct')
20
+ }
21
+ end
22
+ def test_process_alignment_both_motifs_from_stdin
23
+ assert_equal "0.0017543859649122807\n7.0\t11\n>>>>>>>>>>.\n>>>>>>>>>>>\n0\tdirect\n",
24
+ Helpers.provide_stdin(File.read('test/data/KLF4_f2.pat') + File.read('test/data/SP1_f1.pat')) {
25
+ Helpers.eval_alignment_output('.stdin .stdin 0 direct')
26
+ }
27
+ end
28
+ def test_process_at_optimal_alignment_reversed
29
+ assert_equal "0.0\n0.0\t11\n.>>>>>>>>>>\n<<<<<<<<<<<\n-1\trevcomp\n", Helpers.eval_alignment_output('test/data/KLF4_f2.pat test/data/SP1_f1.pat -1 revcomp')
30
+ end
31
+ end
@@ -1,27 +1,42 @@
1
1
  require 'test_helper'
2
2
 
3
- puts "\n\neval_similarity test:"
4
3
  class TestEvalSimilarity < Test::Unit::TestCase
5
4
  def test_process_pair_of_pwms
6
- IO.popen(Helpers.exec_cmd('eval_similarity','test/data/KLF4_f2.pat test/data/SP1_f1.pat')){|f|
7
- assert_equal "0.2420758234928527\n779.0\t11\n.>>>>>>>>>>\n>>>>>>>>>>>\n-1\tdirect\n", f.read
8
- }
5
+ assert_equal "0.2420758234928527\n779.0\t11\n.>>>>>>>>>>\n>>>>>>>>>>>\n-1\tdirect\n", Helpers.eval_similarity_output('test/data/KLF4_f2.pat test/data/SP1_f1.pat')
9
6
  end
10
7
  def test_process_another_pair_of_pwms
11
- IO.popen(Helpers.exec_cmd('eval_similarity','test/data/SP1_f1.pat test/data/AHR_si.pat')){|f|
12
- assert_equal "0.0037332005973120955\n15.0\t11\n>>>>>>>>>>>\n.>>>>>>>>>.\n1\tdirect\n", f.read
13
- }
8
+ assert_equal "0.0037332005973120955\n15.0\t11\n>>>>>>>>>>>\n.>>>>>>>>>.\n1\tdirect\n", Helpers.eval_similarity_output('test/data/SP1_f1.pat test/data/AHR_si.pat')
14
9
  end
15
10
 
16
11
  def test_recognize_orientation_of_alignment
17
- IO.popen(Helpers.exec_cmd('eval_similarity','test/data/SP1_f1_revcomp.pat test/data/SP1_f1.pat')){|f|
18
- assert_equal "1.0\n2033.0\t11\n>>>>>>>>>>>\n<<<<<<<<<<<\n0\trevcomp\n", f.read
19
- }
12
+ assert_equal "1.0\n2033.0\t11\n>>>>>>>>>>>\n<<<<<<<<<<<\n0\trevcomp\n", Helpers.eval_similarity_output('test/data/SP1_f1_revcomp.pat test/data/SP1_f1.pat')
20
13
  end
21
14
 
22
15
  def test_process_custom_discretization
23
- IO.popen(Helpers.exec_cmd('eval_similarity','test/data/SP1_f1.pat test/data/KLF4_f2.pat -d 1')){|f|
24
- assert_equal "0.22754919499105544\n636.0\t11\n>>>>>>>>>>>\n.>>>>>>>>>>\n1\tdirect\n", f.read
25
- }
16
+ assert_equal "0.22754919499105544\n636.0\t11\n>>>>>>>>>>>\n.>>>>>>>>>>\n1\tdirect\n", Helpers.eval_similarity_output('test/data/SP1_f1.pat test/data/KLF4_f2.pat -d 1')
26
17
  end
18
+
19
+ def test_process_first_motif_from_stdin
20
+ assert_equal "0.22754919499105544\n636.0\t11\n>>>>>>>>>>>\n.>>>>>>>>>>\n1\tdirect\n",
21
+ Helpers.provide_stdin(File.read('test/data/SP1_f1.pat')){
22
+ Helpers.eval_similarity_output('.stdin test/data/KLF4_f2.pat -d 1')
23
+ }
24
+ end
25
+
26
+ def test_process_second_motif_from_stdin
27
+ assert_equal "0.22754919499105544\n636.0\t11\n>>>>>>>>>>>\n.>>>>>>>>>>\n1\tdirect\n",
28
+ Helpers.provide_stdin(File.read('test/data/KLF4_f2.pat')){
29
+ Helpers.eval_similarity_output('test/data/SP1_f1.pat .stdin -d 1')
30
+ }
31
+ end
32
+
33
+ def test_process_both_motifs_from_stdin
34
+ assert_equal "0.22754919499105544\n636.0\t11\n>>>>>>>>>>>\n.>>>>>>>>>>\n1\tdirect\n",
35
+ Helpers.provide_stdin(File.read('test/data/SP1_f1.pat') + File.read('test/data/KLF4_f2.pat')){
36
+ Helpers.eval_similarity_output('.stdin .stdin -d 1')
37
+ }
38
+ end
39
+
40
+
41
+
27
42
  end
@@ -1,26 +1,23 @@
1
1
  require 'test_helper'
2
2
 
3
- puts "\n\nfind_pvalue test:"
4
3
  class FindPvalueTest < Test::Unit::TestCase
5
4
  def test_process_one_threshold
6
- IO.popen(Helpers.exec_cmd('find_pvalue', 'test/data/KLF4_f2.pat 4.1719')){|f|
7
- assert_equal "4.1719\t1048.0\t0.00099945068359375\n", f.read
8
- }
5
+ assert_equal "4.1719\t1048.0\t0.00099945068359375\n", Helpers.find_pvalue_output('test/data/KLF4_f2.pat 4.1719')
9
6
  end
10
7
  def test_process_several_thresholds
11
- IO.popen(Helpers.exec_cmd('find_pvalue','test/data/KLF4_f2.pat 4.1719 5.2403')){|f|
12
- assert_equal "4.1719\t1048.0\t0.00099945068359375\n5.2403\t524.0\t0.000499725341796875\n", f.read
13
- }
8
+ assert_equal "4.1719\t1048.0\t0.00099945068359375\n5.2403\t524.0\t0.000499725341796875\n", Helpers.find_pvalue_output('test/data/KLF4_f2.pat 4.1719 5.2403')
14
9
  end
15
10
  def test_process_several_thresholds_result_is_ordered
16
- IO.popen(Helpers.exec_cmd('find_pvalue','test/data/KLF4_f2.pat 5.2403 4.1719')){|f|
17
- assert_equal "5.2403\t524.0\t0.000499725341796875\n4.1719\t1048.0\t0.00099945068359375\n", f.read
18
- }
11
+ assert_equal "5.2403\t524.0\t0.000499725341796875\n4.1719\t1048.0\t0.00099945068359375\n", Helpers.find_pvalue_output('test/data/KLF4_f2.pat 5.2403 4.1719')
19
12
  end
20
13
  def test_custom_discretization
21
- IO.popen(Helpers.exec_cmd('find_pvalue','test/data/KLF4_f2.pat 5.2403 -d 100')){|f|
22
- assert_equal "5.2403\t527.0\t0.0005025863647460938\n", f.read
23
- }
14
+ assert_equal "5.2403\t527.0\t0.0005025863647460938\n", Helpers.find_pvalue_output('test/data/KLF4_f2.pat 5.2403 -d 100')
15
+ end
16
+ def test_process_pwm_from_stdin
17
+ assert_equal Helpers.find_pvalue_output('test/data/KLF4_f2.pat 1'),
18
+ Helpers.provide_stdin(File.read('test/data/KLF4_f2.pat')) {
19
+ Helpers.find_pvalue_output('.stdin 1')
20
+ }
24
21
  end
25
22
  end
26
23
 
@@ -1,10 +1,9 @@
1
1
  require 'test_helper'
2
2
 
3
- puts "\n\nfind_threshold test:"
4
3
  class FindThresholdTest < Test::Unit::TestCase
5
4
  def test_process_several_pvalues
6
5
  pvalues = []
7
- IO.popen(Helpers.exec_cmd('find_threshold', 'test/data/KLF4_f2.pat -p 0.001 0.0005'), &:read).lines.each{|line|
6
+ Helpers.find_threshold_output('test/data/KLF4_f2.pat -p 0.001 0.0005').lines.each{|line|
8
7
  pvalue, threshold, real_pvalue = line.strip.split("\t")
9
8
  pvalues << pvalue
10
9
  assert_equal Helpers.obtain_pvalue_by_threshold("test/data/KLF4_f2.pat #{threshold}"), real_pvalue
@@ -12,19 +11,25 @@ class FindThresholdTest < Test::Unit::TestCase
12
11
  assert_equal pvalues, ['0.0005', '0.001']
13
12
  end
14
13
  def test_process_one_pvalue
15
- pvalue, threshold, real_pvalue = IO.popen(Helpers.exec_cmd('find_threshold', 'test/data/KLF4_f2.pat -p 0.001'), &:read).strip.split("\t")
14
+ pvalue, threshold, real_pvalue = Helpers.find_threshold_output('test/data/KLF4_f2.pat -p 0.001').strip.split("\t")
16
15
  assert_equal '0.001', pvalue
17
16
  assert_equal Helpers.obtain_pvalue_by_threshold("test/data/KLF4_f2.pat #{threshold}"), real_pvalue
18
17
  end
19
18
  def test_process_default_pvalue
20
- pvalue, threshold, real_pvalue = IO.popen(Helpers.exec_cmd('find_threshold','test/data/KLF4_f2.pat'), &:read).strip.split("\t")
19
+ pvalue, threshold, real_pvalue = Helpers.find_threshold_output('test/data/KLF4_f2.pat').strip.split("\t")
21
20
  assert_equal '0.0005', pvalue
22
21
  assert_equal Helpers.obtain_pvalue_by_threshold("test/data/KLF4_f2.pat #{threshold}"), real_pvalue
23
22
  end
24
23
  def test_custom_discretization
25
- pvalue, threshold, real_pvalue = IO.popen(Helpers.exec_cmd('find_threshold','test/data/KLF4_f2.pat -d 100'), &:read).strip.split("\t")
24
+ pvalue, threshold, real_pvalue = Helpers.find_threshold_output('test/data/KLF4_f2.pat -d 100').strip.split("\t")
26
25
  assert_equal '0.0005', pvalue
27
26
  assert_equal Helpers.obtain_pvalue_by_threshold("test/data/KLF4_f2.pat #{threshold} -d 100"), real_pvalue
28
27
  end
28
+ def test_process_pwm_from_stdin
29
+ assert_equal Helpers.find_threshold_output('test/data/KLF4_f2.pat'),
30
+ Helpers.provide_stdin(File.read('test/data/KLF4_f2.pat')) {
31
+ Helpers.find_threshold_output('.stdin')
32
+ }
33
+ end
29
34
  end
30
35
 
@@ -2,13 +2,47 @@ require 'test_helper'
2
2
  require 'yaml'
3
3
  require 'macroape'
4
4
 
5
- puts "\n\npreprocess_collection test:"
6
5
  class TestPreprocessCollection < Test::Unit::TestCase
7
6
  def test_multipvalue_preproceessing
8
- system(Helpers.exec_cmd('preprocess_collection','test/data/test_collection -o test/data/test_collection.yaml.tmp -p 0.0005 0.0001 0.00005 --silent'))
7
+ Helpers.run_preprocess_collection('test/data/test_collection -o test/data/test_collection.yaml.tmp -p 0.0005 0.0001 0.00005 --silent')
9
8
  # Don't use YAML.load_file() instead of YAML.load(File.read()) because in ruby before v1.93 p194
10
9
  # it doesn't immediately release file descriptor (if I understood error right way) so File.delete fails
11
10
  assert_equal YAML.load(File.read('test/data/test_collection.yaml')), YAML.load(File.read('test/data/test_collection.yaml.tmp'))
12
11
  File.delete 'test/data/test_collection.yaml.tmp'
13
12
  end
13
+
14
+ def test_preproceessing_collection_from_a_single_file
15
+ Helpers.run_preprocess_collection('test/data/test_collection_single_file.txt -o test/data/test_collection.yaml.tmp -p 0.0005 0.0001 0.00005 --silent')
16
+ assert_equal YAML.load(File.read('test/data/test_collection.yaml')), YAML.load(File.read('test/data/test_collection.yaml.tmp'))
17
+ File.delete 'test/data/test_collection.yaml.tmp'
18
+ end
19
+
20
+ def test_preproceessing_collection_from_stdin
21
+ Helpers.provide_stdin(File.read('test/data/test_collection_single_file.txt')){
22
+ Helpers.run_preprocess_collection('.stdin -o test/data/test_collection.yaml.tmp -p 0.0005 0.0001 0.00005 --silent')
23
+ }
24
+ assert_equal YAML.load(File.read('test/data/test_collection.yaml')), YAML.load(File.read('test/data/test_collection.yaml.tmp'))
25
+ File.delete 'test/data/test_collection.yaml.tmp'
26
+ end
27
+
28
+ def test_preproceessing_folder_pcm
29
+ Helpers.run_preprocess_collection('test/data/test_collection_pcm -o test/data/test_collection.yaml.tmp -p 0.0005 0.0001 0.00005 --silent --pcm')
30
+ assert_equal YAML.load(File.read('test/data/test_collection.yaml')), YAML.load(File.read('test/data/test_collection.yaml.tmp'))
31
+ File.delete 'test/data/test_collection.yaml.tmp'
32
+ end
33
+
34
+ def test_preproceessing_collection_from_a_single_file_pcm
35
+ Helpers.run_preprocess_collection('test/data/test_collection_single_file_pcm.txt -o test/data/test_collection.yaml.tmp -p 0.0005 0.0001 0.00005 --silent --pcm')
36
+ assert_equal YAML.load(File.read('test/data/test_collection.yaml')), YAML.load(File.read('test/data/test_collection.yaml.tmp'))
37
+ File.delete 'test/data/test_collection.yaml.tmp'
38
+ end
39
+
40
+ def test_preproceessing_collection_from_stdin_pcm
41
+ Helpers.provide_stdin(File.read('test/data/test_collection_single_file_pcm.txt')){
42
+ Helpers.run_preprocess_collection('.stdin -o test/data/test_collection.yaml.tmp -p 0.0005 0.0001 0.00005 --silent --pcm')
43
+ }
44
+ assert_equal YAML.load(File.read('test/data/test_collection.yaml')), YAML.load(File.read('test/data/test_collection.yaml.tmp'))
45
+ File.delete 'test/data/test_collection.yaml.tmp'
46
+ end
47
+
14
48
  end
@@ -1,18 +1,23 @@
1
1
  require 'test_helper'
2
2
 
3
- puts "\n\nscan_collection test:"
4
3
  class TestScanCollection < Test::Unit::TestCase
5
4
  def test_scan_default_cutoff
6
5
  assert_equal File.read('test/data/KLF4_f2_scan_results_default_cutoff.txt').gsub("\r\n", "\n"),
7
- IO.popen(Helpers.exec_cmd('scan_collection','test/data/KLF4_f2.pat test/data/test_collection.yaml --silent'), &:read).gsub("\r\n","\n")
6
+ Helpers.scan_collection_output('test/data/KLF4_f2.pat test/data/test_collection.yaml --silent').gsub("\r\n","\n")
8
7
  end
9
8
  def test_scan_and_output_all_results
10
9
  assert_equal File.read('test/data/KLF4_f2_scan_results_all.txt').gsub("\r\n", "\n"),
11
- IO.popen(Helpers.exec_cmd('scan_collection','test/data/KLF4_f2.pat test/data/test_collection.yaml --all --silent'), &:read).gsub("\r\n","\n")
10
+ Helpers.scan_collection_output('test/data/KLF4_f2.pat test/data/test_collection.yaml --all --silent').gsub("\r\n","\n")
12
11
 
13
12
  end
14
13
  def test_scan_precise_mode
15
14
  assert_equal File.read('test/data/KLF4_f2_scan_results_precise_mode.txt').gsub("\r\n","\n"),
16
- IO.popen(Helpers.exec_cmd('scan_collection','test/data/KLF4_f2.pat test/data/test_collection.yaml --precise --all --silent'), &:read).gsub("\r\n", "\n")
15
+ Helpers.scan_collection_output('test/data/KLF4_f2.pat test/data/test_collection.yaml --precise --all --silent').gsub("\r\n", "\n")
16
+ end
17
+ def test_process_query_pwm_from_stdin
18
+ assert_equal Helpers.scan_collection_output('test/data/KLF4_f2.pat test/data/test_collection.yaml --silent'),
19
+ Helpers.provide_stdin(File.read('test/data/KLF4_f2.pat')) {
20
+ Helpers.scan_collection_output('.stdin test/data/test_collection.yaml --silent')
21
+ }
17
22
  end
18
23
  end
data/test/test_helper.rb CHANGED
@@ -1,12 +1,71 @@
1
1
  $lib_folder = File.dirname(__FILE__) + '/../lib'
2
2
  $LOAD_PATH.unshift $lib_folder
3
3
  require 'test/unit'
4
+ require 'stringio'
5
+
6
+ require 'macroape/cli/find_threshold'
7
+ require 'macroape/cli/find_pvalue'
8
+ require 'macroape/cli/eval_similarity'
9
+ require 'macroape/cli/eval_alignment'
10
+ require 'macroape/cli/preprocess_collection'
11
+ require 'macroape/cli/scan_collection'
12
+ require 'macroape/cli/align_motifs'
4
13
 
5
14
  module Helpers
15
+ # from minitest
16
+ def self.capture_io(&block)
17
+ orig_stdout, orig_stderr = $stdout, $stderr
18
+ captured_stdout, captured_stderr = StringIO.new, StringIO.new
19
+ $stdout, $stderr = captured_stdout, captured_stderr
20
+ yield
21
+ return {stdout: captured_stdout.string, stderr: captured_stderr.string}
22
+ ensure
23
+ $stdout = orig_stdout
24
+ $stderr = orig_stderr
25
+ end
26
+
27
+ # Method stubs $stdin not STDIN !
28
+ def self.provide_stdin(input, &block)
29
+ orig_stdin = $stdin
30
+ $stdin = StringIO.new(input)
31
+ yield
32
+ ensure
33
+ $stdin = orig_stdin
34
+ end
35
+
36
+ def self.capture_output(&block)
37
+ capture_io(&block)[:stdout]
38
+ end
39
+ def self.capture_stderr(&block)
40
+ capture_io(&block)[:stderr]
41
+ end
42
+
6
43
  def self.obtain_pvalue_by_threshold(args)
7
- IO.popen("ruby -I #{$lib_folder} #{$lib_folder}/macroape/exec/find_pvalue.rb #{args}",&:read).strip.split.last
44
+ find_pvalue_output(args).strip.split.last
8
45
  end
9
46
  def self.exec_cmd(executable, param_list)
10
- "ruby -I #{$lib_folder} #{$lib_folder}/macroape/exec/#{executable}.rb #{param_list}"
47
+ "ruby -I #{$lib_folder} #{$lib_folder}/../bin/#{executable} #{param_list}"
48
+ end
49
+ def self.find_threshold_output(param_list)
50
+ capture_output{ Macroape::CLI::FindThreshold.main(param_list.split) }
51
+ end
52
+ def self.align_motifs_output(param_list)
53
+ capture_output{ Macroape::CLI::AlignMotifs.main(param_list.split) }
54
+ end
55
+ def self.find_pvalue_output(param_list)
56
+ capture_output{ Macroape::CLI::FindPValue.main(param_list.split) }
57
+ end
58
+ def self.eval_similarity_output(param_list)
59
+ capture_output{ Macroape::CLI::EvalSimilarity.main(param_list.split) }
60
+ end
61
+ def self.eval_alignment_output(param_list)
62
+ capture_output{ Macroape::CLI::EvalAlignment.main(param_list.split) }
63
+ end
64
+ def self.scan_collection_output(param_list)
65
+ capture_output{ Macroape::CLI::ScanCollection.main(param_list.split) }
66
+ end
67
+ def self.run_preprocess_collection(param_list)
68
+ Macroape::CLI::PreprocessCollection.main(param_list.split)
11
69
  end
70
+
12
71
  end