mspire 0.2.4 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (233) hide show
  1. data/INSTALL +1 -0
  2. data/README +25 -0
  3. data/Rakefile +129 -40
  4. data/bin/{find_aa_freq.rb → aafreqs.rb} +2 -2
  5. data/bin/bioworks_to_pepxml.rb +1 -0
  6. data/bin/fasta_shaker.rb +1 -96
  7. data/bin/filter_and_validate.rb +5 -0
  8. data/bin/{mzxml_to_lmat.rb → ms_to_lmat.rb} +8 -7
  9. data/bin/prob_validate.rb +6 -0
  10. data/bin/raw_to_mzXML.rb +2 -2
  11. data/bin/srf_group.rb +1 -0
  12. data/bin/srf_to_sqt.rb +40 -0
  13. data/changelog.txt +68 -0
  14. data/lib/align/chams.rb +6 -6
  15. data/lib/align.rb +4 -3
  16. data/lib/bsearch.rb +120 -0
  17. data/lib/fasta.rb +318 -86
  18. data/lib/group_by.rb +10 -0
  19. data/lib/index_by.rb +11 -0
  20. data/lib/merge_deep.rb +21 -0
  21. data/lib/{spec → ms/converter}/mzxml.rb +77 -109
  22. data/lib/ms/gradient_program.rb +171 -0
  23. data/lib/ms/msrun.rb +209 -0
  24. data/lib/{spec/msrun.rb → ms/msrun_index.rb} +7 -40
  25. data/lib/ms/parser/mzdata/axml.rb +12 -0
  26. data/lib/ms/parser/mzdata/dom.rb +160 -0
  27. data/lib/ms/parser/mzdata/libxml.rb +7 -0
  28. data/lib/ms/parser/mzdata.rb +25 -0
  29. data/lib/ms/parser/mzxml/axml.rb +11 -0
  30. data/lib/ms/parser/mzxml/dom.rb +159 -0
  31. data/lib/ms/parser/mzxml/hpricot.rb +253 -0
  32. data/lib/ms/parser/mzxml/libxml.rb +15 -0
  33. data/lib/ms/parser/mzxml/regexp.rb +122 -0
  34. data/lib/ms/parser/mzxml/rexml.rb +72 -0
  35. data/lib/ms/parser/mzxml/xmlparser.rb +248 -0
  36. data/lib/ms/parser/mzxml.rb +175 -0
  37. data/lib/ms/parser.rb +108 -0
  38. data/lib/ms/precursor.rb +10 -0
  39. data/lib/ms/scan.rb +81 -0
  40. data/lib/ms/spectrum.rb +193 -0
  41. data/lib/ms.rb +10 -0
  42. data/lib/mspire.rb +4 -0
  43. data/lib/roc.rb +61 -1
  44. data/lib/sample_enzyme.rb +31 -8
  45. data/lib/scan_i.rb +21 -0
  46. data/lib/spec_id/aa_freqs.rb +7 -3
  47. data/lib/spec_id/bioworks.rb +20 -14
  48. data/lib/spec_id/digestor.rb +139 -0
  49. data/lib/spec_id/mass.rb +116 -0
  50. data/lib/spec_id/parser/proph.rb +236 -0
  51. data/lib/spec_id/precision/filter/cmdline.rb +209 -0
  52. data/lib/spec_id/precision/filter/interactive.rb +134 -0
  53. data/lib/spec_id/precision/filter/output.rb +147 -0
  54. data/lib/spec_id/precision/filter.rb +623 -0
  55. data/lib/spec_id/precision/output.rb +60 -0
  56. data/lib/spec_id/precision/prob/cmdline.rb +139 -0
  57. data/lib/spec_id/precision/prob/output.rb +88 -0
  58. data/lib/spec_id/precision/prob.rb +171 -0
  59. data/lib/spec_id/proph/pep_summary.rb +92 -0
  60. data/lib/spec_id/proph/prot_summary.rb +484 -0
  61. data/lib/spec_id/proph.rb +2 -466
  62. data/lib/spec_id/protein_summary.rb +2 -2
  63. data/lib/spec_id/sequest/params.rb +316 -0
  64. data/lib/spec_id/sequest/pepxml.rb +1513 -0
  65. data/lib/spec_id/sequest.rb +2 -1672
  66. data/lib/spec_id/srf.rb +445 -177
  67. data/lib/spec_id.rb +183 -95
  68. data/lib/spec_id_xml.rb +8 -10
  69. data/lib/transmem/phobius.rb +147 -0
  70. data/lib/transmem/toppred.rb +368 -0
  71. data/lib/transmem.rb +157 -0
  72. data/lib/validator/aa.rb +135 -0
  73. data/lib/validator/background.rb +73 -0
  74. data/lib/validator/bias.rb +95 -0
  75. data/lib/validator/cmdline.rb +260 -0
  76. data/lib/validator/decoy.rb +94 -0
  77. data/lib/validator/digestion_based.rb +69 -0
  78. data/lib/validator/probability.rb +48 -0
  79. data/lib/validator/prot_from_pep.rb +234 -0
  80. data/lib/validator/transmem.rb +272 -0
  81. data/lib/validator/true_pos.rb +46 -0
  82. data/lib/validator.rb +214 -0
  83. data/lib/xml.rb +38 -0
  84. data/lib/xml_style_parser.rb +105 -0
  85. data/lib/xmlparser_wrapper.rb +19 -0
  86. data/script/compile_and_plot_smriti_final.rb +97 -0
  87. data/script/extract_gradient_programs.rb +56 -0
  88. data/script/get_apex_values_rexml.rb +44 -0
  89. data/script/mzXML2timeIndex.rb +1 -1
  90. data/script/smriti_final_analysis.rb +103 -0
  91. data/script/toppred_to_yaml.rb +47 -0
  92. data/script/tpp_installer.rb +1 -1
  93. data/{test/tc_align.rb → specs/align_spec.rb} +21 -27
  94. data/{test/tc_bioworks_to_pepxml.rb → specs/bin/bioworks_to_pepxml_spec.rb} +25 -41
  95. data/specs/bin/fasta_shaker_spec.rb +259 -0
  96. data/specs/bin/filter_and_validate__multiple_vals_helper.yaml +202 -0
  97. data/specs/bin/filter_and_validate_spec.rb +124 -0
  98. data/specs/bin/ms_to_lmat_spec.rb +34 -0
  99. data/specs/bin/prob_validate_spec.rb +62 -0
  100. data/specs/bin/protein_summary_spec.rb +10 -0
  101. data/{test/tc_fasta.rb → specs/fasta_spec.rb} +354 -310
  102. data/specs/gi_spec.rb +22 -0
  103. data/specs/load_bin_path.rb +7 -0
  104. data/specs/merge_deep_spec.rb +13 -0
  105. data/specs/ms/gradient_program_spec.rb +77 -0
  106. data/specs/ms/msrun_spec.rb +455 -0
  107. data/specs/ms/parser_spec.rb +92 -0
  108. data/specs/ms/spectrum_spec.rb +89 -0
  109. data/specs/roc_spec.rb +251 -0
  110. data/specs/rspec_autotest.rb +149 -0
  111. data/specs/sample_enzyme_spec.rb +41 -0
  112. data/specs/spec_helper.rb +133 -0
  113. data/specs/spec_id/aa_freqs_spec.rb +52 -0
  114. data/{test/tc_bioworks.rb → specs/spec_id/bioworks_spec.rb} +56 -71
  115. data/specs/spec_id/digestor_spec.rb +75 -0
  116. data/specs/spec_id/precision/filter/cmdline_spec.rb +20 -0
  117. data/specs/spec_id/precision/filter/output_spec.rb +31 -0
  118. data/specs/spec_id/precision/filter_spec.rb +243 -0
  119. data/specs/spec_id/precision/prob_spec.rb +111 -0
  120. data/specs/spec_id/precision/prob_spec_helper.rb +0 -0
  121. data/specs/spec_id/proph/pep_summary_spec.rb +143 -0
  122. data/{test/tc_proph.rb → specs/spec_id/proph/prot_summary_spec.rb} +52 -32
  123. data/{test/tc_protein_summary.rb → specs/spec_id/protein_summary_spec.rb} +85 -0
  124. data/specs/spec_id/sequest/params_spec.rb +68 -0
  125. data/specs/spec_id/sequest/pepxml_spec.rb +452 -0
  126. data/specs/spec_id/sqt_spec.rb +138 -0
  127. data/specs/spec_id/srf_spec.rb +209 -0
  128. data/specs/spec_id/srf_spec_helper.rb +302 -0
  129. data/specs/spec_id_helper.rb +33 -0
  130. data/specs/spec_id_spec.rb +361 -0
  131. data/specs/spec_id_xml_spec.rb +33 -0
  132. data/specs/transmem/phobius_spec.rb +423 -0
  133. data/specs/transmem/toppred_spec.rb +297 -0
  134. data/specs/transmem_spec.rb +60 -0
  135. data/specs/transmem_spec_shared.rb +64 -0
  136. data/specs/validator/aa_spec.rb +107 -0
  137. data/specs/validator/background_spec.rb +51 -0
  138. data/specs/validator/bias_spec.rb +146 -0
  139. data/specs/validator/decoy_spec.rb +51 -0
  140. data/specs/validator/fasta_helper.rb +26 -0
  141. data/specs/validator/prot_from_pep_spec.rb +141 -0
  142. data/specs/validator/transmem_spec.rb +145 -0
  143. data/specs/validator/true_pos_spec.rb +58 -0
  144. data/specs/validator_helper.rb +33 -0
  145. data/specs/xml_spec.rb +12 -0
  146. data/test_files/000_pepxml18_small.xml +206 -0
  147. data/test_files/020a.mzXML.timeIndex +4710 -0
  148. data/test_files/4-03-03_mzXML/000.mzXML.timeIndex +3973 -0
  149. data/test_files/4-03-03_mzXML/020.mzXML.timeIndex +3872 -0
  150. data/test_files/4-03-03_small-prot.xml +321 -0
  151. data/test_files/4-03-03_small.xml +3876 -0
  152. data/test_files/7MIX_STD_110802_1.sequest_params_fragment.srf +0 -0
  153. data/test_files/bioworks-3.3_10prots.xml +5999 -0
  154. data/test_files/bioworks31.params +77 -0
  155. data/test_files/bioworks32.params +62 -0
  156. data/test_files/bioworks33.params +63 -0
  157. data/test_files/bioworks_single_run_small.xml +7237 -0
  158. data/test_files/bioworks_small.fasta +212 -0
  159. data/test_files/bioworks_small.params +63 -0
  160. data/test_files/bioworks_small.phobius +109 -0
  161. data/test_files/bioworks_small.toppred.out +2847 -0
  162. data/test_files/bioworks_small.xml +5610 -0
  163. data/test_files/bioworks_with_INV_small.xml +3753 -0
  164. data/test_files/bioworks_with_SHUFF_small.xml +2503 -0
  165. data/test_files/corrupted_900.srf +0 -0
  166. data/test_files/head_of_7MIX.srf +0 -0
  167. data/test_files/interact-opd1_mods_small-prot.xml +304 -0
  168. data/test_files/messups.fasta +297 -0
  169. data/test_files/opd1/000.my_answer.100lines.xml +101 -0
  170. data/test_files/opd1/000.tpp_1.2.3.first10.xml +115 -0
  171. data/test_files/opd1/000.tpp_2.9.2.first10.xml +126 -0
  172. data/test_files/opd1/000.v2.1.mzXML.timeIndex +3748 -0
  173. data/test_files/opd1/000_020-prot.png +0 -0
  174. data/test_files/opd1/000_020_3prots-prot.mod_initprob.xml +62 -0
  175. data/test_files/opd1/000_020_3prots-prot.xml +62 -0
  176. data/test_files/opd1/opd1_cat_inv_small-prot.xml +139 -0
  177. data/test_files/opd1/sequest.3.1.params +77 -0
  178. data/test_files/opd1/sequest.3.2.params +62 -0
  179. data/test_files/opd1/twenty_scans.mzXML +418 -0
  180. data/test_files/opd1/twenty_scans.v2.1.mzXML +382 -0
  181. data/test_files/opd1/twenty_scans_answ.lmat +0 -0
  182. data/test_files/opd1/twenty_scans_answ.lmata +9 -0
  183. data/test_files/opd1_020_beginning.RAW +0 -0
  184. data/test_files/opd1_2runs_2mods/interact-opd1_mods__small.xml +753 -0
  185. data/test_files/orbitrap_mzData/000_cut.xml +1920 -0
  186. data/test_files/pepproph_small.xml +4691 -0
  187. data/test_files/phobius.small.noheader.txt +50 -0
  188. data/test_files/phobius.small.small.txt +53 -0
  189. data/test_files/s01_anC1_ld020mM.key.txt +25 -0
  190. data/test_files/s01_anC1_ld020mM.meth +0 -0
  191. data/test_files/small.fasta +297 -0
  192. data/test_files/smallraw.RAW +0 -0
  193. data/test_files/tf_bioworks2excel.bioXML +14340 -0
  194. data/test_files/tf_bioworks2excel.txt.actual +1035 -0
  195. data/test_files/toppred.small.out +416 -0
  196. data/test_files/toppred.xml.out +318 -0
  197. data/test_files/validator_hits_separate/bias_bioworks_small_HS.fasta +7 -0
  198. data/test_files/validator_hits_separate/bioworks_small_HS.xml +5651 -0
  199. data/test_files/yeast_gly_small-prot.xml +265 -0
  200. data/test_files/yeast_gly_small.1.0_1.0_1.0.parentTimes +6 -0
  201. data/test_files/yeast_gly_small.xml +3807 -0
  202. data/test_files/yeast_gly_small2.parentTimes +6 -0
  203. metadata +273 -57
  204. data/bin/filter.rb +0 -6
  205. data/bin/precision.rb +0 -5
  206. data/lib/spec/mzdata/parser.rb +0 -108
  207. data/lib/spec/mzdata.rb +0 -48
  208. data/lib/spec/mzxml/parser.rb +0 -449
  209. data/lib/spec/scan.rb +0 -55
  210. data/lib/spec_id/filter.rb +0 -797
  211. data/lib/spec_id/precision.rb +0 -421
  212. data/lib/toppred.rb +0 -18
  213. data/script/filter-peps.rb +0 -164
  214. data/test/tc_aa_freqs.rb +0 -59
  215. data/test/tc_fasta_shaker.rb +0 -149
  216. data/test/tc_filter.rb +0 -203
  217. data/test/tc_filter_peps.rb +0 -46
  218. data/test/tc_gi.rb +0 -17
  219. data/test/tc_id_class_anal.rb +0 -70
  220. data/test/tc_id_precision.rb +0 -89
  221. data/test/tc_msrun.rb +0 -88
  222. data/test/tc_mzxml.rb +0 -88
  223. data/test/tc_mzxml_to_lmat.rb +0 -36
  224. data/test/tc_peptide_parent_times.rb +0 -27
  225. data/test/tc_precision.rb +0 -60
  226. data/test/tc_roc.rb +0 -166
  227. data/test/tc_sample_enzyme.rb +0 -32
  228. data/test/tc_scan.rb +0 -26
  229. data/test/tc_sequest.rb +0 -336
  230. data/test/tc_spec.rb +0 -78
  231. data/test/tc_spec_id.rb +0 -201
  232. data/test/tc_spec_id_xml.rb +0 -36
  233. data/test/tc_srf.rb +0 -262
@@ -0,0 +1,297 @@
1
+ require File.expand_path( File.dirname(__FILE__) + '/../spec_helper' )
2
+
3
+ # contains shared behavior that we need.
4
+ require File.expand_path( File.dirname(__FILE__) + '/../transmem_spec_shared' )
5
+
6
+ require 'transmem/toppred'
7
+
8
+ describe TopPred::Index do
9
+ before(:all) do
10
+ @toppred_file = Tfiles + '/toppred.small.out'
11
+ @obj = TopPred::Index.new(@toppred_file)
12
+ @test_hash = {"YAL001C"=>0, "YAL011W"=>0, "YAL009W"=>2, "YAL010C"=>1, "YAL008W"=>3, "YAL007C"=>2, "YAL004W"=>0, "YAL005C"=>1, "YAL003W"=>0, "YAL002W"=>3, "YAL013W"=>0, "YAL014C"=>1, "YAL012W"=>1}
13
+ @ref_to_key= { 'gi|16127905|ref|NP_414542.1| thr operon leader peptide [Escherichia coli K12]' => 'gi_16127905_ref_NP_414542_1_',
14
+ 'SWN:PWP1_HUMAN PERIODIC TRYPTOPHAN PROTEIN 1 HOMOLOG' => 'SWN_PWP1_HUMAN',
15
+ 'MY:B|/-"[super]"duper!@#$%^&*(wil) and other stuff' => 'MY_B_____super__duper_________wil_' }
16
+ end
17
+ it_should_behave_like 'a transmem index'
18
+ end
19
+
20
+ describe "a toppred parser", :shared => true do
21
+ it 'parses a toppred file into a hash structure' do
22
+ @file_to_hash.should exist
23
+ hash = @class.default_index(@file_to_hash)
24
+ hash.should == @structure_to_create
25
+ end
26
+ end
27
+
28
+ describe "TopPred parsing a text file" do
29
+ before(:all) do
30
+ @class = TopPred
31
+ @file_to_hash = Tfiles + '/toppred.small.out'
32
+ @structure_to_create = YAML.load(TopPredSupportingFile::MY_YAML1)
33
+ @structure_to_create.each {|id,hash| string_to_symbol(hash) }
34
+ end
35
+ it_should_behave_like 'a toppred parser'
36
+ end
37
+
38
+ describe "TopPred parsing an xml file" do
39
+ before(:all) do
40
+ @class = TopPred
41
+ @file_to_hash = Tfiles + '/toppred.xml.out'
42
+ @structure_to_create = YAML.load(TopPredSupportingFile::MY_YAML2)
43
+ @structure_to_create.each {|id,hash| string_to_symbol(hash) }
44
+ end
45
+ it_should_behave_like 'a toppred parser'
46
+ end
47
+
48
+ describe TopPred::Index do
49
+ before(:all) do
50
+ toppred_file = Tfiles + '/toppred.xml.out'
51
+ @obj = TopPred::Index.new(toppred_file)
52
+ @tm_test = {
53
+ :mykey => 'SWN_K1CL_HUMAN',
54
+ :seqs => %w(GFG VGSGYGGSAFGFG GGGSL),
55
+ :exps =>
56
+ {
57
+ :number => [2.0, 7.0, 3.0],
58
+ :fraction => [2.0/3, 7.0/13, 3.0/5 ],
59
+ }
60
+ }
61
+ end
62
+ it_should_behave_like "a calculator of transmembrane overlap"
63
+ end
64
+
65
+
66
+ module TopPredSupportingFile
67
+ MY_YAML1 = <<END
68
+ ---
69
+ YAL011W:
70
+ aaseq: MPAVLRTRSKESSIEQKPASRTRTRSRRGKRGRDDDDDDDDEESDDAYDEVGNDYDEYASRAKLATNRPFEIVAGLPASVELPNYNSSLTHPQSIKNSGVLYDSLVSSRRTWVQGEMFELYWRRPKKIVSESTPAATESPTSGTIPLIRDKMQKMCDCVMSGGPHTFKVRLFILKNDKIEQKWQDEQELKKKEKELKRKNDAEAKRLRMEERKRQQMQKKIAKEQKLQLQKENKAKQKLEQEALKLKRKEEMKKLKEQNKNKQGSPSSSMHDPRMIMNLNLMAQEDPKLNTLMETVAKGLANNSQLEEFKKFIEIAKKRSLEENPVNKRPSVTTTRPAPPSKAKDVAEDHRLNSITLVKSSKTAATEPEPKKADDENAEKQQSKEAKTTAESTQVDVKKEEEDVKEKGVKSEDTQKKEDNQVVPKRKRRKNAIKEDKDMQLTAFQQKYVQGAEIILEYLEFTHSRYYLPKKSVVEFLEDTDEIIISWIVIHNSKEIEKFKTKKIKAKLKADQKLNKEDAKPGSDVEKEVSFNPLFEADCPTPLYTPMTMKLSGIHKRFNQIIRNSVSPMEEVVKEMEKILQIGTRLSGYNLWYQLDGYDDEALSESLRFELNEWEHAMRSRRHKR
71
+ num_found: 0
72
+ YAL001C:
73
+ aaseq: MVLTIYPDELVQIVSDKIASNKGKITLNQLWDISGKYFDLSDKKVKQFVLSCVILKKDIEVYCDGAITTKNVTDIIGDANHSYSVGITEDSLWTLLTGYTKKESTIGNSAFELLLEVAKSGEKGINTMDLAQVTGQDPRSVTGRIKKINHLLTSSQLIYKGHVVKQLKLKKFSHDGVDSNPYINIRDHLATIVEVVKRSKNGIRQIIDLKRELKFDKEKRLSKAFIAAIAWLDEKEYLKKVLVVSPKNPAIKIRCVKYVKDIPDSKGSPSFEYDSNSADEDSVSDSKAAFEDEDLVEGLDNFNATDLLQNQGLVMEEKEDAVKNEVLLNRFYPLQNQTYDIADKSGLKGISTMDVVNRITGKEFQRAFTKSSEYYLESVDKQKENTGGYRLFRIYDFEGKKKFFRLFTAQNFQKLTNAEDEISVPKGFDELGKSRTDLKTLNEDNFVALNNTVRFTTDSDGQDIFFWHGELKIPPNSKKTPNKNKRKRQVKNSTNASVAGNISNPKRIKLEQHVSTAQEPKSAEDSPSSNGGTVVKGKVVNFGGFSARSLRSLQRQRAILKVMNTIGGVAYLREQFYESVSKYMGSTTTLDKKTVRGDVDLMVESEKLGARTEPVSGRKIIFLPTVGEDAIQRYILKEKDSKKATFTDVIHDTEIYFFDQTEKNRFHRGKKSVERIRKFQNRQKNAKIKASDDAISKKSTSVNVSDGKIKRRDKKVSAGRTTVVVENTKEDKTVYHAGTKDGVQALIRAVVVTKSIKNEIMWDKITKLFPNNSLDNLKKKWTARRVRMGHSGWRAYVDKWKKMLVLAIKSEKISLRDVEELDLIKLLDIWTSFDEKEIKRPLFLYKNYEENRKKFTLVRDDTLTHSGNDLAMSSMIQREISSLKKTYTRKISASTKDLSKSQSDDYIRTVIRSILIESPSTTRNEIEALKNVGNESIDNVIMDMAKEKQIYLHGSKLECTDTLPDILENRGNYKDFGVAFQYRCKVNELLEAGNAIVINQEPSDISSWVLIDLISGELLNMDVIPMVRNVRPLTYTSRRFEIRTLTPPLIIYANSQTKLNTARKSAVKVPLGKPFSRLWVNGSGSIRPNIWKQVVTMVVNEIIFHPGITLSRLQSRCREVLSLHEISEICKWLLERQVLITTDFDGYWVNHNWYSIYEST
74
+ num_found: 0
75
+ YAL010C:
76
+ num_putative_transmembrane_segments: 1
77
+ aaseq: MLPYMDQVLRAFYQSTHWSTQNSYEDITATSRTLLDFRIPSAIHLQISNKSTPNTFNSLDFSTRSRINGSLSYLYSDAQQLEKFMRNSTDIPLQDATETYRQLQPNLNFSVSSANTLSSDNTTVDNDKKLLHDSKFVKKSLYYGRMYYPSSDLEAMIIKRLSPQTQFMLKGVSSFKESLNVLTCYFQRDSHRNLQEWIFSTSDLLCGYRVLHNFLTTPSKFNTSLYNNSSLSLGAEFWLGLVSLSPGCSTTLRYYTHSTNTGRPLTLTLSWQPLFGHISSTYSAKTGTNSTFCAKYDFNLYSIESNLSFGCEFWQKKHHLLETNKNNNDKLEPISDELVDINPNSRATKLLHENVPDLNSAVNDIPSTLDIPVHKQKLLNDLTYAFSSSLRKIDEERSTIEKFDNKINSSIFTSVWKLSTSLRDKTLKLLWEGKWRGFLISAGTELVFTRGFQESLSDDEKNDNAISISATDTENGNIPVFPAKFGIQFQYST
78
+ best_structure_probability: 1.0
79
+ transmembrane_segments:
80
+ - aaseq: SLGAEFWLGLVSLSPGCSTTL
81
+ stop: 252
82
+ start: 232
83
+ probability: 1.0
84
+ num_certain_transmembrane_segments: 1
85
+ num_found: 2
86
+ YAL009W:
87
+ num_putative_transmembrane_segments: 0
88
+ aaseq: MEPESIGDVGNHAQDDSASIVSGPRRRSTSKTSSAKNIRNSSNISPASMIFRNLLILEDDLRRQAHEQKILKWQFTLFLASMAGVGAFTFYELYFTSDYVKGLHRVILQFTLSFISITVVLFHISGQYRRTIVIPRRFFTSTNKGIRQFNVKLVKVQSTWDEKYTDSVRFVSRTIAYCNIYCLKKFLWLKDDNAIVKFWKSVTIQSQPRIGAVDVKLVLNPRAFSAEIREGWEIYRDEFWAREGARRRKQAHELRPKSE
89
+ best_structure_probability: 1.0
90
+ transmembrane_segments:
91
+ - aaseq: WQFTLFLASMAGVGAFTFYEL
92
+ stop: 93
93
+ start: 73
94
+ probability: 1.0
95
+ - aaseq: VILQFTLSFISITVVLFHISG
96
+ stop: 126
97
+ start: 106
98
+ probability: 1.0
99
+ num_certain_transmembrane_segments: 2
100
+ num_found: 2
101
+ YAL008W:
102
+ num_putative_transmembrane_segments: 0
103
+ aaseq: MTLAFNMQRLVFRNLNVGKRMFKNVPLWRFNVANKLGKPLTRSVGLGGAGIVAGGFYLMNRQPSKLIFNDSLGAAVKQQGPLEPTVGNSTAITEERRNKISSHKQMFLGSLFGVVLGVTVAKISILFMYVGITSMLLCEWLRYKGWIRINLKNIKSVIVLKDVDLKKLLIDGLLGTEYMGFKVFFTLSFVLASLNANK
104
+ best_structure_probability: 1.0
105
+ transmembrane_segments:
106
+ - aaseq: LTRSVGLGGAGIVAGGFYLMN
107
+ stop: 60
108
+ start: 40
109
+ probability: 1.0
110
+ - aaseq: AKISILFMYVGITSMLLCEWL
111
+ stop: 141
112
+ start: 121
113
+ probability: 1.0
114
+ - aaseq: TEYMGFKVFFTLSFVLASLNA
115
+ stop: 196
116
+ start: 176
117
+ probability: 1.0
118
+ num_certain_transmembrane_segments: 3
119
+ num_found: 3
120
+ YAL007C:
121
+ num_putative_transmembrane_segments: 0
122
+ aaseq: MIKSTIALPSFFIVLILALVNSVAASSSYAPVAISLPAFSKECLYYDMVTEDDSLAVGYQVLTGGNFEIDFDITAPDGSVITSEKQKKYSDFLLKSFGVGKYTFCFSNNYGTALKKVEITLEKEKTLTDEHEADVNNDDIIANNAVEEIDRNLNKITKTLNYLRAREWRNMSTVNSTESRLTWLSILIIIIIAVISIAQVLLIQFLFTGRQKNYV
123
+ best_structure_probability: 1.0
124
+ transmembrane_segments:
125
+ - aaseq: STIALPSFFIVLILALVNSVA
126
+ stop: 24
127
+ start: 4
128
+ probability: 1.0
129
+ - aaseq: LTWLSILIIIIIAVISIAQVL
130
+ stop: 201
131
+ start: 181
132
+ probability: 1.0
133
+ num_certain_transmembrane_segments: 2
134
+ num_found: 2
135
+ YAL005C:
136
+ num_putative_transmembrane_segments: 1
137
+ aaseq: MSKAVGIDLGTTYSCVAHFANDRVDIIANDQGNRTTPSFVAFTDTERLIGDAAKNQAAMNPSNTVFDAKRLIGRNFNDPEVQADMKHFPFKLIDVDGKPQIQVEFKGETKNFTPEQISSMVLGKMKETAESYLGAKVNDAVVTVPAYFNDSQRQATKDAGTIAGLNVLRIINEPTAAAIAYGLDKKGKEEHVLIFDLGGGTFDVSLLFIEDGIFEVKATAGDTHLGGEDFDNRLVNHFIQEFKRKNKKDLSTNQRALRRLRTACERAKRTLSSSAQTSVEIDSLFEGIDFYTSITRARFEELCADLFRSTLDPVEKVLRDAKLDKSQVDEIVLVGGSTRIPKVQKLVTDYFNGKEPNRSINPDEAVAYGAAVQAAILTGDESSKTQDLLLLDVAPLSLGIETAGGVMTKLIPRNSTISTKKFEIFSTYADNQPGVLIQVFEGERAKTKDNNLLGKFELSGIPPAPRGVPQIEVTFDVDSNGILNVSAVEKGTGKSNKITITNDKGRLSKEDIEKMVAEAEKFKEEDEKESQRIASKNQLESIAYSLKNTISEAGDKLEQADKDTVTKKAEETISWLDSNTTASKEEFDDKLKELQDIANPIMSKLYQAGGAPGGAAGGAPGGFPGGAPPAPEAEGPTVEEVD
138
+ best_structure_probability: 1.0
139
+ transmembrane_segments:
140
+ - aaseq: AGGAPGGAAGGAPGGFPGGAP
141
+ stop: 628
142
+ start: 608
143
+ probability: 1.0
144
+ num_certain_transmembrane_segments: 1
145
+ num_found: 2
146
+ YAL004W:
147
+ num_putative_transmembrane_segments: 1
148
+ aaseq: MGVTSGGLNFKDTVFNEQQRDIESTTTQVENQDVFFLTLLVQTVSNGSGGRFVNNTQDIQTSNGTSILGSLSLRIVEVSWDSDDSVIDLGSQVRFGSFLHLTQDHGGDLFWGKVLGFTLKFNLNLRLTVNIDQLEWEVLHVSLHFWVVEVSTDQTLSVENGIRRIHSSLILSSITNQSFSVSESDKRWSGSVTLIVGNNVHTIISKVSNTRVCCT
149
+ best_structure_probability: 0.06
150
+ transmembrane_segments:
151
+ - aaseq: QDVFFLTLLVQTVSNGSGGRF
152
+ stop: 52
153
+ start: 32
154
+ probability: 0.06
155
+ num_certain_transmembrane_segments: 0
156
+ num_found: 1
157
+ YAL003W:
158
+ aaseq: MASTDFSKIETLKQLNASLADKSYIEGTAVSQADVTVFKAFQSAYPEFSRWFNHIASKADEFDSFPAASAAAAEEEEDDDVDLFGSDDEEADAEAEKLKAERIAAYNAKKAAKPAKPAAKSIVTLDVKPWDDETNLEEMVANVKAIEMEGLTWGAHQFIPIGFGIKKLQINCVVEDDKVSLDDLQQSIEEDEDHVQSTDIAAMQKL
159
+ num_found: 0
160
+ YAL014C:
161
+ num_putative_transmembrane_segments: 0
162
+ aaseq: MDVLKLGYELDQLSDLVEERTRLVSVLKLAPTSNDNVTLKRQLGSILELLQKCAPNDELISRYNTILDKIPDTAVDKELYRFQQQVARNTDEVSKESLKKVRFKNDDELTVMYKDDDEQDEESPLPSTHTPYKDEPLQSQLQSQSQPQPPQPMVSNQELFINQQQQLLEQDSHLGALSQSIGRTHDISLDLNNEIVSQNDSLLVDLENLIDNNGRNLNRASRSMHGFNNSRFKDNGNCVIILVLIVVLLLLLLVL
163
+ best_structure_probability: 1.0
164
+ transmembrane_segments:
165
+ - aaseq: NGNCVIILVLIVVLLLLLLVL
166
+ stop: 255
167
+ start: 235
168
+ probability: 1.0
169
+ num_certain_transmembrane_segments: 1
170
+ num_found: 1
171
+ YAL013W:
172
+ num_putative_transmembrane_segments: 1
173
+ aaseq: MSQQTPQESEQTTAKEQDLDQESVLSNIDFNTDLNHNLNLSEYCISSDAGTEKMDSDEEKSLANLPELKYAPKLSSLVKQETLTESLKRPHEDEKEAIDEAKKMKVPGENEDESKEEEKSQELEEAIDSKEKSTDARDEQGDEGDNEEENNEEDNENENEHTAPPALVMPSPIEMEEQRMTALKEITDIEYKFAQLRQKLYDNQLVRLQTELQMCLEGSHPELQVYYSKIAAIRDYKLHRAYQRQKYELSCINTETIATRTFIHQDFHKKVTDLRARLLNRTTQTWYDINKERRDMDIVIPDVNYHVPIKLDNKTLSCITGYASAAQLCYPGEPVAEDLACESIEYRYRANPVDKLEVIVDRMRLNNEISDLEGLRKYFHSFPGAPELNPLRDSEINDDFHQWAQCDRHTGPHTTSFCYS
174
+ best_structure_probability: 0.08
175
+ transmembrane_segments:
176
+ - aaseq: KTLSCITGYASAAQLCYPGEP
177
+ stop: 334
178
+ start: 314
179
+ probability: 0.08
180
+ num_certain_transmembrane_segments: 0
181
+ num_found: 1
182
+ YAL002W:
183
+ num_putative_transmembrane_segments: 2
184
+ aaseq: MEQNGLDHDSRSSIDTTINDTQKTFLEFRSYTQLSEKLASSSSYTAPPLNEDGPKGVASAVSQGSESVVSWTTLTHVYSILGAYGGPTCLYPTATYFLMGTSKGCVLIFNYNEHLQTILVPTLSEDPSIHSIRSPVKSIVICSDGTHVAASYETGNICIWNLNVGYRVKPTSEPTNGMTPTPALPAVLHIDDHVNKEITGLDFFGARHTALIVSDRTGKVSLYNGYRRGFWQLVYNSKKILDVNSSKEKLIRSKLSPLISREKISTNLLSVLTTTHFALILLSPHVSLMFQETVEPSVQNSLVVNSSISWTQNCSRVAYSVNNKISVISISSSDFNVQSASHSPEFAESILSIQWIDQLLLGVLTISHQFLVLHPQHDFKILLRLDFLIHDLMIPPNKYFVISRRSFYLLTNYSFKIGKFVSWSDITLRHILKGDYLGALEFIESLLQPYCPLANLLKLDNNTEERTKQLMEPFYNLSLAALRFLIKKDNADYNRVYQLLMVVVRVLQQSSKKLDSIPSLDVFLEQGLEFFELKDNAVYFEVVANIVAQGSVTSISPVLFRSIIDYYAKEENLKVIEDLIIMLNPTTLDVDLAVKLCQKYNLFDLLIYIWNKIFDDYQTPVVDLIYRISNQSEKCVIFNGPQVPPETTIFDYVTYILTGRQYPQNLSISPSDKCSKIQRELSAFIFSGFSIKWPSNSNHKLYICENPEEEPAFPYFHLLLKSNPSRFLAMLNEVFEASLFNDDNDMVASVGEAELVSRQYVIDLLLDAMKDTGNSDNIRVLVAIFIATSISKYPQFIKVSNQALDCVVNTICSSRVQGIYEISQIALESLLPYYHSRTTENFILELKEKNFNKVLFHIYKSENKYASALSLILETKDIEKEYNTDIVSITDYILKKCPPGSLECGKVTEVIETNFDLLLSRIGIEKCVTIFSDFDYNLHQEILEVKNEETQQKYLDKLFSTPNINNKVDKRLRNLHIELNCKYKSKREMILWLNGTVLSNAESLQILDLLNQDSNFEAAAIIHERLESFNLAVRDLLSFIEQCLNEGKTNISTLLESLRRAFDDCNSAGTEKKSCWILLITFLITLYGKYPSHDERKDLCNKLLQEAFLGLVRSKSSSQKDSGGEFWEIMSSVLEHQDVILMKVQDLKQLLLNVFNTYKLERSLSELIQKIIEDSSQDLVQQYRKFLSEGWSIHTDDCEICGKKIWGAGLDPLLFLAWENVQRHQDMISVDLKTPLVIFKCHHGFHQTCLENLAQKPDEYSCLICQTESNPKIV
185
+ best_structure_probability: 1.0
186
+ transmembrane_segments:
187
+ - aaseq: GAYGGPTCLYPTATYFLMGTS
188
+ stop: 102
189
+ start: 82
190
+ probability: 1.0
191
+ - aaseq: TNLLSVLTTTHFALILLSPHV
192
+ stop: 286
193
+ start: 266
194
+ probability: 1.0
195
+ - aaseq: KKSCWILLITFLITLYGKYPS
196
+ stop: 1092
197
+ start: 1072
198
+ probability: 1.0
199
+ num_certain_transmembrane_segments: 3
200
+ num_found: 5
201
+ YAL012W:
202
+ num_putative_transmembrane_segments: 0
203
+ aaseq: MTLQESDKFATKAIHAGEHVDVHGSVIEPISLSTTFKQSSPANPIGTYEYSRSQNPNRENLERAVAALENAQYGLAFSSGSATTATILQSLPQGSHAVSIGDVYGGTHRYFTKVANAHGVETSFTNDLLNDLPQLIKENTKLVWIETPTNPTLKVTDIQKVADLIKKHAAGQDVILVVDNTFLSPYISNPLNFGADIVVHSATKYINGHSDVVLGVLATNNKPLYERLQFLQNAIGAIPSPFDAWLTHRGLKTLHLRVRQAALSANKIAEFLAADKENVVAVNYPGLKTHPNYDVVLKQHRDALGGGMISFRIKGGAEAASKFASSTRLFTLAESLGGIESLLEVPAVMTHGGIPKEAREASGVFDDLVRISVGIEDTDDLLEDIKQALKQATN
204
+ best_structure_probability: 1.0
205
+ transmembrane_segments:
206
+ - aaseq: QYGLAFSSGSATTATILQSLP
207
+ stop: 92
208
+ start: 72
209
+ probability: 1.0
210
+ num_certain_transmembrane_segments: 1
211
+ num_found: 1
212
+ END
213
+
214
+ MY_YAML2 = <<END_YAML2
215
+ ---
216
+ SWN_SM33_HUMAN:
217
+ aaseq: MSDQEAKPSTEDLGDKKEGEYIKLKVIGQDSSEIHFKVKMTTHLKKLKESYCQRQGVPMNSLRFLFEGQRIADNHTPKELGMEEEDVIEVYQEQTGGHSTV
218
+ num_found: 0
219
+ SWN_UBP3_HUMAN:
220
+ num_putative_transmembrane_segments: 1
221
+ transmembrane_segments:
222
+ - aaseq: TMPGYGGAASAGASVFGASGL
223
+ stop: 724
224
+ start: 704
225
+ probability: 21.0
226
+ - aaseq: YELFAFISHMGTSTMSGHYIC
227
+ stop: 826
228
+ start: 806
229
+ probability: 21.0
230
+ aaseq: MQRRGALFGMPGGSGGRKMAAGDIGELLVPHMPTIRVPRSGDRVYKNECAFSYDSPNSEGGLYVCMNTFLAFGREHVERHFRKTGQSVYMHLKRHAREKVRGASGGALPKRRNSKIFLDLDTDDDLNSDDYEYEDEAKLVIFPDHYEIALPNIEELPALVTIACDAVLSSKSPYRKQDPDTWENELPVSKYANNLTQLDNGVRIPPSGWKCARCDLRENLWLNLTDGSVLCGKWFFDSSGGNGHALEHYRDMGYPLAVKLGTITPDGADVYSFQEEEPVLDPHLAKHLAHFGIDMLHMHGTENGLQDNDIKLRVSEWEVIQESGTKLKPMYGPGYTGLKNLGNSCYLSSVMQAIFSIPEFQRAYVGNLPRIFDYSPLDPTQDFNTQMTKLGHGLLSGQYSKPPVKSELIEQVMKEEHKPQQNGISPRMFKAFVSKSHPEFSSNRQQDAQEFFLHLVNLVERNRIGSENPSDVFRFLVEERIQCCQTRKVRYTERVDYLMQLPVAMEAATNKDELIAYELTRREAEANRRPLPELVRAKIPFSACLQAFSEPENVDDFWSSALQAKSAGVKTSRFASFPEYLVVQIKKFTFGLDWVPKKFDVSIDMPDLLDINHLRARGLQPGEEELPDISPPIVIPDDSKDRLMNQLIDPSDIDESSVMQLAEMGFPLEACRKAVYFTGNMGAEVAFNWIIVHMEEPDFAEPLTMPGYGGAASAGASVFGASGLDNQPPEEIVAIITSMGFQRNQAIQALRATNNNLERALDWIFSHPEFEEDSDFVIEMENNANANIISEAKPEGPRVKDGSGTYELFAFISHMGTSTMSGHYICHIKKEGRWVIYNDHKVCASERPPKDLGYMYFYRRIPS
231
+ num_certain_transmembrane_segments: 2
232
+ num_found: 3
233
+ SWN_UBPN_HUMAN:
234
+ num_putative_transmembrane_segments: 3
235
+ transmembrane_segments:
236
+ - aaseq: PSSTSSASALYGQPLLLSVPK
237
+ stop: 556
238
+ start: 536
239
+ probability: 21.0
240
+ aaseq: MYNVGEHNLFPGPIDNSGLFSDPESQTLKEHLIDELDYVLVPTEAWNKLLNWYGCVEGQQPIVRKVVEHGLFVKHCKVEVYLLELKLCENSDPTNVLSCHFSKADTIATIEKEMRKLFNIPAERETRLWNKYMSNTYEQLSKLDNTVQDAGLYQGQVLVIEPQNEDGTWPRQTLQSKSSTAPSRNFTTSPKSSASPYSSVSASLIANGDSTSTCGMHSSGVSRGGSGFSASYNCQEPPSSHIQPGLCGLGNLGNTCFMNSALQCLSNTHPLTDYFLKDEYEAEINRDNPLGMKGEIAEAYAELIKQMWSGRDAHVAPWMFKTQVGRFAPQFSGYQQQDSQELLAFPSRWIHEDLNRVKKKPYLELKDANGRPDAVVAKEAWENHRLRNDSVIVDTFHGLFKSTLVCPECAKVSVTFDPFCYLTLPLPLKKDRVMEVFLVPADPHCRPTQYRVTVPLMGAVSDLCEALSRLSGIAAENMVVADVYNHRFHKIFQMDEGLNHIMPRDDIFVYEVCSTSVDGSECVTLPVYFRERKSRPSSTSSASALYGQPLLLSVPKHKLTLESLYQAVCDRISRYVKQPLPDEFGSSPLEPGACNGSRNSCEGEDEEEMEHQEEGKEQLSETEGSGEDEPGNDPSETTQKKIKGQPCPKRLFTFSLVNSYGTADINSLAADGKLLKLNSRSTLAMDWDRETRRLYYDEQESEAYEKHVSMLQPQKKKKTTVALRDCIELFTTMETLGEHDPWYCPNCKKHQQATKKFDLWSLPKILVVHLKRFSYNRYWRDKLDTVVEFPIRGLNMSEFVCNLSARPYVYDLIAVSNHYGAMGVGHYTAYAKNKLNGKWYYFDDSNVSWPLRIR
241
+ num_certain_transmembrane_segments: 0
242
+ num_found: 3
243
+ SWN_PWP1_HUMAN:
244
+ num_putative_transmembrane_segments: 0
245
+ transmembrane_segments:
246
+ - aaseq: MGVLFCSSCCPDLPFIYAFGG
247
+ stop: 450
248
+ start: 430
249
+ probability: 21.0
250
+ aaseq: MNRSRQVTCVAWVRCGVAKETPDKVELSKEEVKRLIAEAKEKLQEEGGGSDEEETGSPSEDGMQSARTQARPREPLEDGDPEDDRTLDDDELAEYDLDKYDEEGDPDAETLGESLLGLTVYGSNDQDPYVTLKDTEQYEREDFLIKPSDNLIVCGRAEQDQCNLEVHVYNQEEDSFYVHHDILLSAYPLSVEWLNFDPSPDDSTGNYIAVGNMTPVIEVWDLDIVDSLEPVFTLGSKLSKKKKKKGKKSSSAEGHTDAVLDLSWNKLIRNVLASASADNTVILWDMSLGKPAASLAVHTDKVQTLQFHPFEAQTLISGSYDKSVALYDCRSPDESHRMWRFSGQIERVTWNHFSPCHFLASTDDGFVYNLDARSDKPIFTLNAHNDEISGLDLSSQIKGCLVTASADKYVKIWDILGDRPSLVHSRDMKMGVLFCSSCCPDLPFIYAFGGQKEGLRVWDISTVSSVNEAFGRRERLVLGSARNSSISGPFGSRSSDTPMES
251
+ num_certain_transmembrane_segments: 1
252
+ num_found: 1
253
+ SW_FGF7_HUMAN:
254
+ num_putative_transmembrane_segments: 0
255
+ transmembrane_segments:
256
+ - aaseq: RSCFHIICLVGTISLACNDMT
257
+ stop: 36
258
+ start: 16
259
+ probability: 21.0
260
+ aaseq: MHKWILTWILPTLLYRSCFHIICLVGTISLACNDMTPEQMATNVNCSSPERHTRSYDYMEGGDIRVRRLFCRTQWYLRIDKRGKVKGTQEMKNNYNIMEIRTVAVGIVAIKGVESEFYLAMNKEGKLYAKKECNEDCNFKELILENHYNTYASAKWTHNGGEMFVALNQKGIPVRGKKTKKEQKTAHFLPMAIT
261
+ num_certain_transmembrane_segments: 1
262
+ num_found: 1
263
+ SWN_SM31_HUMAN:
264
+ aaseq: MSEEKPKEGVKTENDHINLKVAGQDGSVVQFKIKRHTSLSKLMKAYCERQGLSMRQIRFRFDGQPINETDTPAQLRMEDEDTIDVFQQQTGGVPESSLAGHSF
265
+ num_found: 0
266
+ SWN_UFD1_HUMAN:
267
+ aaseq: MFSFNMFDHPIPRVFQNRFSTQYRCFSVSMLAWPNDRSDVEKGGKIIMPPSALDQLSRLNITYPMLFKLTNKNSDRMTHCGVLEFVADEGICYLPHWMMQNLLLEEDGLVQLETVNLQVATYSKSKFCYLPHWMMQNLLLEEGGLVQVESVNLQVATYSKFQPQSADFLDITNPKAVLENALRNFACLTTGDVIAINYNEKIYELRVMETKPDKAVSIHECDMNVDFDAPLGYKEPERQVQHEESTEGEADHSGYAGELGFRAFSGSGNRLDGKKKGVEPSPSPIKPGDIKRGIPNYEFKLGKITFIRNSRPLVKKVEEDEAGGRFVAFSGEGQSLRKKGRKP
268
+ num_found: 0
269
+ SWN_UBCE_HUMAN:
270
+ aaseq: MNSNVENLPPHIIRLVYKEVTTLTADPPDGIKVFPNEEDLTDLQVTIEGPEGTPYAGGLFRMKLLLGKDFPASPPKGYFLTKIFHPNVGANGEICVNVLKRDWTAELGIRHVLLTIKCLLIHPNPESALNEEAGRLLLENYEEYAARARLLTEIHGGAGGPSGRAEAGRALASGTEASSTDPGAPGGPGGAEGPMAKKHAGERDKKLAAKKKTDKKRALRALRRL
271
+ num_found: 0
272
+ SWN_K1CL_HUMAN:
273
+ num_putative_transmembrane_segments: 0
274
+ transmembrane_segments:
275
+ - aaseq: GSAFGFGASCGGGFSAASMFG
276
+ stop: 64
277
+ start: 44
278
+ probability: 21.0
279
+ - aaseq: ALGGGSFGGLGMGFGGSPGGG
280
+ stop: 108
281
+ start: 88
282
+ probability: 21.0
283
+ aaseq: MDLSNNTMSLSVRTPGLSRRLSSQSVIGRPRGMSASSVGSGYGGSAFGFGASCGGGFSAASMFGSSSGFGGGSGSSMAGGLGAGYGRALGGGSFGGLGMGFGGSPGGGSLGILSGNDGGLLSGSEKETMQNLNDRLASYLDKVRALEEANTELENKIREWYETRGTGTADASQSDYSKYYPLIEDLRNKIISASIGNAQLLLQIDNARLAAEDFRMKYENELALRQGVEADINGLRRVLDELTLTRTDLEMQIESLNEELAYMKKNHEDELQSFRVGGPGEVSVEMDAAPGVDLTRLLNDMRAQYETIAEQNRKDAEAWFIEKSGELRKEISTNTEQLQSSKSEVTDLRRAFQNLEIELQSQLAMKKSLEDSLAEAEGDYCAQLSQVQQLISNLEAQLLQVRADAERQNVDHQRLLNVKARLELEIETYRRLLDGEAQGDGLEESLFVTDSKSQAQSTDSSKDPTKTRKIKTVVQEMVNGEVVSSQVQEIEELM
284
+ num_certain_transmembrane_segments: 2
285
+ num_found: 2
286
+ SWN_UBCC_HUMAN:
287
+ aaseq: MAGLPRRIIKETQRLLAEPVPGIKAEPDESNARYFHVVIAGPQDSPFEGGTFKLELFLPEEYPMAAPKVRFMTKIYHPNVDKLGRICLDILKDKWSPALQIRTVLLSIQALLSAPNPDDPLANDVAEQWKTNEAQAIETARAWTRLYAMNNI
288
+ num_found: 0
289
+ SWN_SM32_HUMAN:
290
+ aaseq: MADEKPKEGVKTENNDHINLKVAGQDGSVVQFKIKRHTPLSKLMKAYCERQGLSMRQIRFRFDGQPINETDTPAQLEMEDEDTIDVFQQQTGGVY
291
+ num_found: 0
292
+ END_YAML2
293
+
294
+ end
295
+
296
+
297
+
@@ -0,0 +1,60 @@
1
+ require File.expand_path( File.dirname(__FILE__) + '/spec_helper' )
2
+ require File.expand_path( File.dirname(__FILE__) + '/transmem_spec_shared' )
3
+ require 'transmem'
4
+
5
+ # turns all string keys into symbol keys
6
+ def string_to_symbol(hash)
7
+ if hash.is_a? Hash
8
+ hash.each do |k,v|
9
+ hash[k.to_sym] = hash.delete(k)
10
+ if v.is_a? Hash
11
+ string_to_symbol(v)
12
+ elsif v.is_a? Array
13
+ v.each do |armemb|
14
+ string_to_symbol(armemb)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ describe TransmemIndex, "determining filetypes" do
22
+ before(:each) do
23
+ @files = %w(toppred.small.out toppred.xml.out phobius.small.small.txt phobius.small.noheader.txt).map {|f| Tfiles + '/' + f }
24
+ @types = %w(toppred toppred phobius phobius).map {|v| v.to_sym }
25
+ @classes = %w(TopPred TopPred Phobius Phobius).map {|v| v.to_sym }
26
+ end
27
+ it 'figures out the filetype' do
28
+ @files.zip(@types) do |file,tp|
29
+ TransmemIndex.filetype(file).should == tp
30
+ end
31
+ end
32
+ it 'given a file to initalize, returns the right object' do
33
+ objects = @files.zip(@classes) do |file,base_klass|
34
+ obj = TransmemIndex.new(file)
35
+ base = Kernel.const_get(base_klass)
36
+ klass = base.const_get(:Index)
37
+ obj.class.should == klass
38
+ end
39
+ end
40
+ end
41
+
42
+
43
+
44
+ describe TransmemIndex, "methods" do
45
+ it 'calculates the num of overlapping chars in start/stop seqs' do
46
+ ##########0 1 2 3 4 5 6
47
+ ##########01234567890123456789012345678901234567890123456789012345678901
48
+ ########## **** **** ** ***
49
+ string = 'ABCDEFG ABCDEFG ABCDEFG CATTITY ABCD EFG CD BCDEFGTTITY BCDEFG'
50
+ ########## ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^
51
+ #
52
+ substring = 'BCDEFG'
53
+ ranges = [(3..6), (16..19), (43..44), (48..50)]
54
+ expected = [4, 0, 3, 3, 0]
55
+ class TMshell ; include TransmemIndex ; end
56
+ TMshell.new.num_overlapping_chars(string, ranges, substring).should == expected
57
+ end
58
+ end
59
+
60
+
@@ -0,0 +1,64 @@
1
+
2
+ # turns all string keys into symbol keys
3
+ def string_to_symbol(hash)
4
+ if hash.is_a? Hash
5
+ hash.each do |k,v|
6
+ hash[k.to_sym] = hash.delete(k)
7
+ if v.is_a? Hash
8
+ string_to_symbol(v)
9
+ elsif v.is_a? Array
10
+ v.each do |armemb|
11
+ string_to_symbol(armemb)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+
19
+
20
+ describe "a transmem index", :shared => true do
21
+ before(:all) do
22
+ # expects an transmem object, @obj
23
+ end
24
+
25
+ it 'is a hash' do
26
+ @obj.is_a?(Hash).should be_true
27
+ end
28
+
29
+ it 'responds to reference_to_key' do
30
+ @obj.respond_to?(:reference_to_key).should be_true
31
+ end
32
+
33
+ it "correctly transforms headers or refs into id's" do
34
+ @ref_to_key.each do |k,v|
35
+ @obj.reference_to_key(k).should == v
36
+ end
37
+ end
38
+
39
+ it "creates a num_certain_index that gives correct values given keys" do
40
+ ind = @obj.num_certain_index
41
+ @test_hash.each do |k,v|
42
+ ind[@obj.reference_to_key(k)].should == v
43
+ end
44
+ end
45
+ end
46
+
47
+
48
+ describe "a calculator of transmembrane overlap", :shared => true do
49
+ # require definition of @tm_test and @obj
50
+
51
+ it "can give average overlap given a sequence (fraction)" do
52
+ [:number, :fraction].each do |tp|
53
+ #[:fraction, :number].each do |tp|
54
+ hash = @tm_test
55
+ key = hash[:mykey]
56
+ hash[:seqs].zip(hash[:exps][tp]) do |seq,exp|
57
+ @obj.avg_overlap(key, seq, tp).should == exp
58
+ end
59
+ end
60
+ end
61
+
62
+ end
63
+
64
+
@@ -0,0 +1,107 @@
1
+ require File.expand_path( File.dirname(__FILE__) + '/../spec_helper' )
2
+ require File.expand_path( File.dirname(__FILE__) + '/../validator_helper' )
3
+
4
+
5
+ require 'validator/aa'
6
+ require 'spec_id'
7
+ require 'spec_id/digestor'
8
+
9
+ klass = Validator::AA
10
+
11
+ class MyAA < Validator::AA ; def initialize ; end ; end
12
+
13
+ describe klass, "using frequency estimates" do
14
+ before(:each) do
15
+ @small_fasta = Tfiles + '/small.fasta'
16
+ @sequest_params = Tfiles + '/bioworks32.params'
17
+ # C/D C/D J (7)
18
+ @seqs = %w(ABCDEFGC CCDCCC JJJJJ XYZ WXXXYZ TXXXXXYZ ZZXIIPTYZ ZZXTYZZ ZZZZ YYYYYTL)
19
+ @peps = @seqs.map {|n| v = SpecID::GenericPep.new; v.aaseq = n ; v }
20
+ val = klass.new('C')
21
+ val.frequency = 0.11
22
+ @validator = val
23
+ end
24
+ #C: 0.0157714433456144
25
+ #D: 0.0526145691939758
26
+
27
+ it_should_behave_like 'a validator'
28
+
29
+ it 'calculates precision from actual and expected correctly' do
30
+ MyAA.new.pephit_precision_from_actual_and_expected(5, 10, 100).should == 0.5
31
+ (0..10).each do |actual|
32
+ precision = MyAA.new.pephit_precision_from_actual_and_expected(actual, 10, 100)
33
+ answer = 1.0 - (actual.to_f/10.0)
34
+ precision.should be_close(answer, 0.00000001)
35
+ #0 -> 1
36
+ #1 -> 0.9
37
+ #2 -> 0.8
38
+ end
39
+ end
40
+
41
+ it 'calculates precision (with background) reasonably and consistently' do
42
+ (0..10).each do |bkg|
43
+ precision = MyAA.new.pephit_precision_from_actual_and_expected(5, 10, 100, bkg.to_f/100)
44
+ answer = 0.5 + bkg.to_f/10
45
+ answer = 1.0 if answer > 1.0
46
+ precision.should == answer
47
+ end
48
+ end
49
+
50
+ it 'calculates at_least_one correctly' do
51
+ aa = 'C'
52
+ freq = 0.0157714433456144 ## from @small_fasta
53
+ (actual, expected) = MyAA.new.at_least_one(aa, freq, @seqs)
54
+ actual.should == 2
55
+ expected.should be_close(0.949318337979434, 0.0001) # freeze for consistency
56
+ end
57
+
58
+ it 'gives consistent precision of peptides given fastafile and aa (even negative)' do
59
+ aa = 'C'
60
+ val = klass.new(aa).set_frequency(Fasta.new(@small_fasta))
61
+ # I checked this answer out by hand and it is correct
62
+ val.pephit_precision(@peps).should be_close(-1.10677, 0.001)
63
+ end
64
+ end
65
+
66
+ describe klass, "using empirical digestion data" do
67
+
68
+ before(:each) do
69
+ @small_fasta = Tfiles + '/small.fasta'
70
+ @sequest_params = Tfiles + '/bioworks32.params'
71
+ # C/D C/D J (7)
72
+ @seqs = %w(ABCDEFGC CCDCCC JJJJJ XYZ WXXXYZ TXXXXXYZ ZZXIIPTYZ ZZXTYZZ ZZZZ YYYYYTL)
73
+ @peps = @seqs.map {|n| v = SpecID::GenericPep.new; v.aaseq = n ; v }
74
+
75
+ val = klass.new('C')
76
+ val.false_to_total_ratio = 0.22 # arbitrary
77
+ @validator = val
78
+ end
79
+
80
+ it_should_behave_like 'a validator'
81
+
82
+ it 'gives correct false to total ratio' do
83
+ aa = 'C'
84
+ val = klass.new(aa)
85
+ peptides = Digestor.digest( Fasta.new(@small_fasta), Sequest::Params.new(@sequest_params))
86
+ val.set_false_to_total_ratio( peptides )
87
+ # frozen (but I checked the peptides by hand to make sure they were
88
+ # correct)
89
+ val.false_to_total_ratio.should be_close(0.177629264861062, 0.0000000000001)
90
+ end
91
+
92
+ it 'can validate with theoretical digestion or frequency estimate' do
93
+ aa = 'C'
94
+ val = klass.new(aa)
95
+ val.false_to_total_ratio = 0.177629264861062
96
+ answ = val.pephit_precision(@peps)
97
+ # frozen
98
+ answ.should be_close(-0.125940594059407, 0.0000000001)
99
+
100
+ val.frequency = 0.0157714433456144 ## from @small_fasta
101
+ val.false_to_total_ratio = nil
102
+ answ = val.pephit_precision(@peps)
103
+ answ.should be_close(-1.10677485094924, 0.0000000001)
104
+ end
105
+ end
106
+
107
+
@@ -0,0 +1,51 @@
1
+ require File.expand_path( File.dirname(__FILE__) + '/../spec_helper' )
2
+
3
+ require 'validator/background'
4
+
5
+ describe Validator::Background do
6
+
7
+ before(:all) do
8
+ @expected = YAML.load("badAA: 45
9
+ tpred-1: 36
10
+ tpred-1-0.8: 36
11
+ tpred-2: 36
12
+ tpred-2-0.8: 36
13
+ phob-1: 38
14
+ phob-2: 37
15
+ phob-1-0.8: 38
16
+ phob-2-0.8: 37
17
+ bias-mrna: 29
18
+ bias-prot: 37
19
+ ")
20
+ @data =
21
+ {
22
+ 'badAA' => [0.158873276514528, 0.15968405463222, 0.159870678279229, 0.159635650410558, 0.156543159883917, 0.152783096042051, 0.150294985250737, 0.145335608646189, 0.134808758575322, 0.125552050473186, 0.112790697674419, 0.0960860693748841, 0.076310861423221, 0.0560216123986919, 0.0388044914134742, 0.0250922509225092, 0.0187774670395525, 0.0111182381868719, 0.00934787447139996, 0.00583022388059702, 0.00460382844681367, 0.00348518795120737, 0.00284164298630845, 0.0021488047273704, 0.00167177486765116, 0.00175080245112343, 0.00182926829268293, 0.00191570881226054, 0.0016767270288397, 0.00177116542685087, 0.00186219739292365, 0.00198491464867011, 0.00211864406779661, 0.00136986301369863, 0.00146412884333821, 0.00107642626480086, 0.00120336943441637, 0.000672494956287828, 0.000764525993883792, 0.000887311446317658, 0.00103734439834025, 0.00123609394313968, 0.00151975683890578, 0.00179856115107914, 0.00215982721382289, 0.00266666666666667, 0.0, 0.0, 0.0, 0.0, 0.0/0.0],
23
+ 'tpred-1-0.8' => [0.432087342709104, 0.430464886251236, 0.432952622673435, 0.430709911544568, 0.431700713758307, 0.426344086021505, 0.42326139088729, 0.412998624484182, 0.405773857257418, 0.395963479096588, 0.379389752446747, 0.375838926174497, 0.371165644171779, 0.366496598639456, 0.351903435468895, 0.337611056268509, 0.334031413612565, 0.332236842105263, 0.335585585585586, 0.334894613583138, 0.33133971291866, 0.334558823529412, 0.331658291457286, 0.328998699609883, 0.330175913396482, 0.334745762711864, 0.332844574780059, 0.327188940092166, 0.317152103559871, 0.320689655172414, 0.323583180987203, 0.324271844660194, 0.322245322245322, 0.317180616740088, 0.324644549763033, 0.323834196891192, 0.32183908045977, 0.327044025157233, 0.316363636363636, 0.311203319502075, 0.314553990610329, 0.318918918918919, 0.306122448979592, 0.307086614173228, 0.295238095238095, 0.255555555555556, 0.246753246753247, 0.254237288135593, 0.290322580645161, 0.3, 0.0/0.0],
24
+ 'tpred-2-0.8' => [0.193930421909697, 0.194460929772502, 0.193104906937394, 0.188931730551145, 0.187792271720404, 0.181989247311828, 0.176558752997602, 0.172627235213205, 0.168003207698476, 0.157135992311389, 0.145653425446172, 0.136241610738255, 0.125766871165644, 0.122448979591837, 0.115134633240483, 0.107601184600197, 0.103664921465969, 0.103070175438596, 0.102477477477477, 0.101873536299766, 0.101674641148325, 0.10171568627451, 0.101758793969849, 0.0988296488946684, 0.0987821380243572, 0.100282485875706, 0.095307917888563, 0.0921658986175115, 0.0809061488673139, 0.0793103448275862, 0.0822669104204753, 0.0757281553398058, 0.079002079002079, 0.0814977973568282, 0.0853080568720379, 0.0803108808290155, 0.0718390804597701, 0.0786163522012579, 0.0836363636363636, 0.0746887966804979, 0.07981220657277, 0.0756756756756757, 0.0748299319727891, 0.062992125984252, 0.0666666666666667, 0.0555555555555556, 0.025974025974026, 0.0338983050847458, 0.032258064516129, 0.0, 0.0/0.0],
25
+ 'tpred-1' => [0.43492586490939, 0.434656516222585, 0.437751004016064, 0.439366015481017, 0.435423665546846, 0.432272813869308, 0.432531593966572, 0.422057502246181, 0.419948186528497, 0.413091136861885, 0.395751376868607, 0.39067055393586, 0.379793061472915, 0.378066378066378, 0.366721854304636, 0.348222424794895, 0.34251968503937, 0.339958158995816, 0.343073593073593, 0.343502824858757, 0.337587006960557, 0.33969010727056, 0.336196319018405, 0.332909783989835, 0.334656084656085, 0.339779005524862, 0.339055793991416, 0.331831831831832, 0.323343848580442, 0.326050420168067, 0.329181494661922, 0.330170777988615, 0.325865580448065, 0.321814254859611, 0.326340326340326, 0.322250639386189, 0.320113314447592, 0.325077399380805, 0.314285714285714, 0.308943089430894, 0.311926605504587, 0.317460317460317, 0.304635761589404, 0.305343511450382, 0.293577981651376, 0.258064516129032, 0.253164556962025, 0.262295081967213, 0.303030303030303, 0.333333333333333, 0.0/0.0],
26
+ 'tpred-2' => [0.197144426139484, 0.197571143737539, 0.197699890470975, 0.195355694802801, 0.192422545726017, 0.191465040960183, 0.188544639217285, 0.185085354896676, 0.184974093264249, 0.176636392107736, 0.164044059795437, 0.154518950437318, 0.143639683505782, 0.137085137085137, 0.129966887417219, 0.113035551504102, 0.108267716535433, 0.105648535564854, 0.103896103896104, 0.105084745762712, 0.103248259860789, 0.103694874851013, 0.101840490797546, 0.0991105463786531, 0.0992063492063492, 0.100828729281768, 0.0958512160228898, 0.0930930930930931, 0.082018927444795, 0.0789915966386555, 0.0818505338078292, 0.0759013282732448, 0.0794297352342159, 0.08207343412527, 0.0839160839160839, 0.0792838874680307, 0.0708215297450425, 0.0773993808049536, 0.0821428571428571, 0.0731707317073171, 0.0779816513761468, 0.0740740740740741, 0.0728476821192053, 0.0610687022900763, 0.0642201834862385, 0.0537634408602151, 0.0253164556962025, 0.0327868852459016, 0.0303030303030303, 0.0, 0.0/0.0],
27
+ 'phob-1-0.8' => [0.185672175669857, 0.18433572392246, 0.181897765767137, 0.178760843645932, 0.176211849192101, 0.17261698440208, 0.168649249583102, 0.164665082525207, 0.158626390141268, 0.149688712442479, 0.140255798829395, 0.127386902473408, 0.116115516983391, 0.106017191977077, 0.0974025974025974, 0.0923076923076923, 0.0875342754693103, 0.0849369608493696, 0.0839240795792362, 0.0830359267190102, 0.0802955665024631, 0.0777188998233661, 0.0760188087774295, 0.0748373101952278, 0.0739595050618673, 0.0732568402471315, 0.0716041794714198, 0.070096463022508, 0.0682432432432432, 0.0678329168154231, 0.0672174239579422, 0.0656262505002001, 0.0652173913043478, 0.0629306384933395, 0.0637567435017165, 0.0637837837837838, 0.0609903381642512, 0.0594193112761648, 0.0598618572524942, 0.0587711487088157, 0.059375, 0.0619578686493185, 0.0609756097560976, 0.0576576576576577, 0.0497835497835498, 0.0427807486631016, 0.043010752688172, 0.0396039603960396, 0.0504201680672269, 0.075, 0.0/0.0],
28
+ 'phob-2-0.8' => [0.10336833040771, 0.10306752822552, 0.102234232862635, 0.099946552645644, 0.0978007181328546, 0.0957662787818767, 0.0927181767648694, 0.0913878363624687, 0.0879921851517884, 0.0834611567265181, 0.0773899848254932, 0.0688196847366398, 0.0604518928624869, 0.0551154559244901, 0.050834879406308, 0.0477522477522478, 0.0438726007171483, 0.0433532404335324, 0.042305053738852, 0.0418748512966928, 0.0399014778325123, 0.0386071158213475, 0.0378787878787879, 0.0366052060737527, 0.0357142857142857, 0.0344218887908208, 0.0331899200983405, 0.0327974276527331, 0.0307432432432432, 0.0307033202427704, 0.0311678558017274, 0.0300120048019208, 0.0294117647058824, 0.0257234726688103, 0.0264835703776361, 0.0264864864864865, 0.0241545893719807, 0.0229574611748818, 0.0230237912509593, 0.0231522707034728, 0.025, 0.0285006195786865, 0.0274390243902439, 0.0234234234234234, 0.0238095238095238, 0.018716577540107, 0.021505376344086, 0.0247524752475248, 0.0336134453781513, 0.05, 0.0/0.0],
29
+ 'phob-1' => [0.189416875082269, 0.188798733425688, 0.187119003445534, 0.186618069952518, 0.184998809969059, 0.183175272216368, 0.18173689504862, 0.178471651602301, 0.173068705189687, 0.166212849776954, 0.156364435330306, 0.146373298526944, 0.134995296331138, 0.119743406985032, 0.107213765718068, 0.0987060998151571, 0.0901459124525285, 0.0851336898395722, 0.0844097995545657, 0.083527764815679, 0.0809500727096461, 0.077191235059761, 0.0762076982691811, 0.075208165457964, 0.0743939816104765, 0.0735337029471841, 0.0719512195121951, 0.070242656449553, 0.06841046277666, 0.0680127523910733, 0.0674115456238361, 0.0658991663358476, 0.0656779661016949, 0.0634703196347032, 0.063933626159102, 0.0640473627556512, 0.0613718411552347, 0.0598520511096167, 0.0603975535168196, 0.059449866903283, 0.0601659751037344, 0.0618046971569839, 0.060790273556231, 0.0575539568345324, 0.0496760259179266, 0.0426666666666667, 0.0428571428571429, 0.0396039603960396, 0.0504201680672269, 0.075, 0.0/0.0],
30
+ 'phob-2' => [0.106884296432802, 0.106174549772412, 0.105618870924993, 0.10492877683408, 0.103770698038149, 0.102774850720056, 0.101225736746023, 0.0991783073130649, 0.0961967617871896, 0.0911882277967673, 0.0851765050534642, 0.0778482192802536, 0.0702022577610536, 0.06143977191732, 0.0559232296492389, 0.0495378927911275, 0.0439736158305017, 0.0434224598930481, 0.0427616926503341, 0.042230517965469, 0.0399903053805138, 0.0383466135458167, 0.0379746835443038, 0.0367982809562181, 0.0359431596544999, 0.0347242486139481, 0.0335365853658537, 0.0328863346104725, 0.0308517773306506, 0.0308182784272051, 0.0312849162011173, 0.0301707026597856, 0.0296610169491525, 0.026027397260274, 0.0263543191800878, 0.0263724434876211, 0.0240673886883273, 0.0228648285137861, 0.0229357798165138, 0.0230700976042591, 0.024896265560166, 0.0284301606922126, 0.027355623100304, 0.0233812949640288, 0.0237580993520518, 0.0186666666666667, 0.0214285714285714, 0.0247524752475248, 0.0336134453781513, 0.05, 0.0/0.0],
31
+ 'bias-mrna' => [0.433808285892922, 0.433569195326641, 0.433953549749274, 0.43349622685416, 0.433556050482554, 0.434016778640304, 0.42787610619469, 0.416422883146433, 0.400291326003195, 0.376082592486378, 0.340843023255814, 0.300129846039696, 0.250117041198502, 0.202474050902886, 0.159676354029062, 0.122878228782288, 0.0966839792249301, 0.077613855035279, 0.069441353216114, 0.0608675373134328, 0.0576690089653501, 0.0560119492158327, 0.0539912167398605, 0.0523771152296535, 0.0512677626079688, 0.0507732710825795, 0.0509146341463415, 0.0507662835249042, 0.0489604292421194, 0.0474672334396033, 0.0491620111731844, 0.0504168320762207, 0.0508474576271186, 0.0506849315068493, 0.0502684236212787, 0.0522066738428418, 0.0523465703971119, 0.0537995965030262, 0.0512232415902141, 0.0488021295474712, 0.0508298755186722, 0.0531520395550062, 0.0547112462006079, 0.0593525179856115, 0.060475161987041, 0.064, 0.0678571428571429, 0.0693069306930693, 0.0756302521008403, 0.05, 0.0/0.0],
32
+ 'bias-prot' => [0.689591628549804, 0.689122922494652, 0.688836104513064, 0.68950500315814, 0.688229736113923, 0.685348278622898, 0.680862831858407, 0.669226393629124, 0.652805187482379, 0.628563234872383, 0.591351744186047, 0.547857540345019, 0.497542134831461, 0.441916678515569, 0.394319682959049, 0.359409594095941, 0.333799440671195, 0.316655976053025, 0.308479857556199, 0.297574626865672, 0.290041192149261, 0.284789644012945, 0.282097649186257, 0.279881815739995, 0.277514628030092, 0.278085789320105, 0.277743902439024, 0.278416347381865, 0.276659959758551, 0.275593340417995, 0.274115456238361, 0.268757443429933, 0.26864406779661, 0.265753424657534, 0.267935578330893, 0.263724434876211, 0.260529482551143, 0.255548083389375, 0.258409785932722, 0.266193433895297, 0.266597510373444, 0.279357231149567, 0.276595744680851, 0.26978417266187, 0.285097192224622, 0.272, 0.271428571428571, 0.262376237623762, 0.252100840336134, 0.3, 0.0/0.0],
33
+ }
34
+ end
35
+
36
+
37
+
38
+ it 'finds the minimum of the plateu region of a stringency plot' do
39
+ #data = [10,11,12,10,9,8,7,6,5,4.5,4,3.4, 3.2, 3.3, 3.1, 3.0,2.9,2.8,2.8, 2.8, 2.9, 3.4, 2.2, 1.1,0.0,0.0/0.0]
40
+ #data = [10,11,12,10,9,8,7,6,5,4.5,4,3.4, 3.2, 3.3, 3.1, 3.0,2.9,2.8,2.8, 2.8, 2.9, 3.4, 2.2, 1.1,0.0]
41
+ @data.each do |k,v|
42
+ exp = @expected[k]
43
+ bkg = Validator::Background.new(v)
44
+ start_i = 25
45
+ stop_i = 38
46
+ ans = bkg.min_mesa(start_i, stop_i)
47
+ ans.should be_close(v[exp], 0.01)
48
+ # expecting were my best judgement (erring on the min side)
49
+ end
50
+ end
51
+ end