mspire 0.3.1 → 0.3.9
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/Rakefile +2 -2
- data/bin/bioworks_to_pepxml.rb +15 -3
- data/bin/ms_to_lmat.rb +2 -1
- data/bin/sqt_group.rb +26 -0
- data/changelog.txt +36 -0
- data/lib/ms/msrun.rb +3 -1
- data/lib/ms/parser/mzdata/dom.rb +14 -14
- data/lib/ms/scan.rb +3 -3
- data/lib/mspire.rb +1 -1
- data/lib/sample_enzyme.rb +39 -0
- data/lib/spec_id.rb +18 -0
- data/lib/spec_id/aa_freqs.rb +6 -9
- data/lib/spec_id/digestor.rb +16 -17
- data/lib/spec_id/mass.rb +63 -1
- data/lib/spec_id/parser/proph.rb +101 -2
- data/lib/spec_id/precision/filter.rb +3 -2
- data/lib/spec_id/precision/filter/cmdline.rb +3 -1
- data/lib/spec_id/precision/filter/output.rb +1 -0
- data/lib/spec_id/precision/prob.rb +88 -21
- data/lib/spec_id/precision/prob/cmdline.rb +28 -16
- data/lib/spec_id/precision/prob/output.rb +8 -2
- data/lib/spec_id/proph/pep_summary.rb +25 -12
- data/lib/spec_id/sequest.rb +28 -0
- data/lib/spec_id/sequest/pepxml.rb +142 -197
- data/lib/spec_id/sqt.rb +349 -0
- data/lib/spec_id/srf.rb +33 -23
- data/lib/validator.rb +40 -57
- data/lib/validator/aa.rb +3 -90
- data/lib/validator/aa_est.rb +112 -0
- data/lib/validator/cmdline.rb +163 -31
- data/lib/validator/decoy.rb +15 -7
- data/lib/validator/digestion_based.rb +5 -4
- data/lib/validator/q_value.rb +32 -0
- data/script/peps_per_bin.rb +67 -0
- data/script/sqt_to_meta.rb +24 -0
- data/specs/bin/bioworks_to_pepxml_spec.rb +3 -3
- data/specs/bin/fasta_shaker_spec.rb +2 -2
- data/specs/bin/filter_and_validate__multiple_vals_helper.yaml +7 -10
- data/specs/bin/filter_and_validate_spec.rb +25 -6
- data/specs/bin/ms_to_lmat_spec.rb +2 -2
- data/specs/bin/prob_validate_spec.rb +5 -3
- data/specs/sample_enzyme_spec.rb +86 -1
- data/specs/spec_helper.rb +11 -9
- data/specs/spec_id/bioworks_spec.rb +2 -1
- data/specs/spec_id/precision/filter_spec.rb +5 -5
- data/specs/spec_id/precision/prob_spec.rb +0 -67
- data/specs/spec_id/proph/pep_summary_spec.rb +42 -87
- data/specs/spec_id/protein_summary_spec.rb +4 -4
- data/specs/spec_id/sequest/pepxml_spec.rb +1 -79
- data/specs/spec_id/sequest_spec.rb +38 -0
- data/specs/spec_id/sqt_spec.rb +111 -3
- data/specs/spec_id_spec.rb +2 -0
- data/specs/transmem/phobius_spec.rb +3 -1
- data/specs/transmem/toppred_spec.rb +1 -1
- data/specs/validator/aa_est_spec.rb +66 -0
- data/specs/validator/aa_spec.rb +1 -68
- data/specs/validator/background_spec.rb +2 -0
- data/specs/validator/bias_spec.rb +3 -27
- data/specs/validator/decoy_spec.rb +2 -2
- data/specs/validator/transmem_spec.rb +2 -1
- data/test_files/small.sqt +87 -0
- metadata +312 -293
data/lib/spec_id/parser/proph.rb
CHANGED
@@ -8,6 +8,20 @@ module SpecID::Parser ; end
|
|
8
8
|
|
9
9
|
class SpecID::Parser::PepProph
|
10
10
|
include XMLStyleParser
|
11
|
+
|
12
|
+
# gets the protein (and adds the pephit to the protein)
|
13
|
+
def get_protein(search_hit, name, description, global_prot_hash)
|
14
|
+
prot =
|
15
|
+
if global_prot_hash.key?(name)
|
16
|
+
global_prot_hash[name]
|
17
|
+
else
|
18
|
+
prt = Proph::PepSummary::Prot.new([name, description, []])
|
19
|
+
global_prot_hash[name] = prt
|
20
|
+
end
|
21
|
+
prot.peps << search_hit
|
22
|
+
prot
|
23
|
+
end
|
24
|
+
|
11
25
|
def initialize(parse_type=:spec_id, version='3.0')
|
12
26
|
@method = parse_type
|
13
27
|
@version = version
|
@@ -29,7 +43,10 @@ class SpecID::Parser::PepProph
|
|
29
43
|
end
|
30
44
|
|
31
45
|
# returns the spec_id object
|
46
|
+
# :global_prot_hash is a hash if you have multiple of these files to be
|
47
|
+
# combined
|
32
48
|
def spec_id(file, opts={})
|
49
|
+
|
33
50
|
raise NotImplementedError, "cannot do #{@version} yet" if @version.nil? or @version < '3.0'
|
34
51
|
spec_id_obj =
|
35
52
|
if x = opts[:spec_id]
|
@@ -37,11 +54,93 @@ class SpecID::Parser::PepProph
|
|
37
54
|
else
|
38
55
|
Proph::PepSummary.new
|
39
56
|
end
|
57
|
+
global_prot_hash =
|
58
|
+
if y = opts[:global_prot_hash]
|
59
|
+
y
|
60
|
+
else
|
61
|
+
{}
|
62
|
+
end
|
40
63
|
msms_pipeline_analysis_n = @get_root_node_from_file.call(file)
|
41
64
|
spec_id_obj.peptideprophet_summary = msms_pipeline_analysis_n.find_first("descendant::peptideprophet_summary")
|
42
65
|
|
43
|
-
|
44
|
-
spec_id_obj.
|
66
|
+
|
67
|
+
spec_id_obj.msms_run_summaries = msms_pipeline_analysis_n.find('child::msms_run_summary').map do |msms_run_summary_n|
|
68
|
+
parse_msms_run_summary(msms_run_summary_n, global_prot_hash)
|
69
|
+
end
|
70
|
+
|
71
|
+
peps = []
|
72
|
+
spec_id_obj.msms_run_summaries.each do |mrs|
|
73
|
+
mrs.spectrum_queries.each do |sq|
|
74
|
+
sq.search_results.each do |sr|
|
75
|
+
peps.push( *(sr.search_hits) )
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
spec_id_obj.peps = peps
|
80
|
+
spec_id_obj.prots = global_prot_hash.values
|
81
|
+
spec_id_obj
|
82
|
+
end
|
83
|
+
|
84
|
+
# returns an msms_run_summary object
|
85
|
+
def parse_msms_run_summary(msms_run_summary_n, global_prot_hash)
|
86
|
+
msms_run_summary_obj = Sequest::PepXML::MSMSRunSummary.new
|
87
|
+
|
88
|
+
msms_run_summary_obj.from_pepxml_node(msms_run_summary_n)
|
89
|
+
sample_enzyme_n = msms_run_summary_n.find_first("child::sample_enzyme")
|
90
|
+
msms_run_summary_obj.sample_enzyme = SampleEnzyme.from_pepxml_node( sample_enzyme_n )
|
91
|
+
|
92
|
+
search_summary_n = sample_enzyme_n.find_first("following-sibling::search_summary")
|
93
|
+
spectrum_queries_nds = search_summary_n.find("following-sibling::spectrum_query")
|
94
|
+
|
95
|
+
msms_run_summary_obj.spectrum_queries = spectrum_queries_nds.map do |sq_n|
|
96
|
+
|
97
|
+
sq = Sequest::PepXML::SpectrumQuery.from_pepxml_node(sq_n)
|
98
|
+
sq.search_results = sq_n.children.map do |sr_n|
|
99
|
+
sr = Sequest::PepXML::SearchResult.new
|
100
|
+
sr.search_hits = sr_n.children.map do |sh_n|
|
101
|
+
sh = Proph::PepSummary::Pep.new # descended from SearchHit
|
102
|
+
sh.from_pepxml_node(sh_n)
|
103
|
+
sh.spectrum_query = sq
|
104
|
+
prots = [ get_protein(sh, sh_n['protein'], sh_n['protein_descr'], global_prot_hash) ]
|
105
|
+
## alternative proteins:
|
106
|
+
if sh.num_tot_proteins > 1
|
107
|
+
sh_n.find('child::alternative_protein').each do |alt_prot_n|
|
108
|
+
prots << get_protein(sh, alt_prot_n['protein'], alt_prot_n['protein_descr'], global_prot_hash)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
sh.prots = prots
|
112
|
+
|
113
|
+
if modinfo_node = sh_n.find_first("child::modification_info")
|
114
|
+
sh.modification_info = Sequest::PepXML::SearchHit::ModificationInfo.from_pepxml_node(modinfo_node)
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
## search scores:
|
119
|
+
sh_n.find("child::search_score").each do |ss_n|
|
120
|
+
case ss_n['name']
|
121
|
+
when 'deltacnstar'
|
122
|
+
sh.deltacnstar = ss_n['value'].to_i
|
123
|
+
when 'xcorr'
|
124
|
+
sh.xcorr = ss_n['value'].to_f
|
125
|
+
when 'deltacn'
|
126
|
+
sh.deltacn = ss_n['value'].to_f
|
127
|
+
when 'spscore'
|
128
|
+
sh.spscore = ss_n['value'].to_f
|
129
|
+
when 'sprank'
|
130
|
+
sh.sprank = ss_n['value'].to_i
|
131
|
+
end
|
132
|
+
end
|
133
|
+
sh
|
134
|
+
end
|
135
|
+
sr
|
136
|
+
end
|
137
|
+
sq
|
138
|
+
end
|
139
|
+
|
140
|
+
## NOTE: this is currently just the xml node!!!! TODO: wrap everything up
|
141
|
+
#into a better search summary object (to eventually depracate the params object)
|
142
|
+
msms_run_summary_obj.search_summary = msms_run_summary_n
|
143
|
+
msms_run_summary_obj
|
45
144
|
end
|
46
145
|
|
47
146
|
end
|
@@ -295,7 +295,7 @@ class SpecID::Precision::Filter
|
|
295
295
|
|
296
296
|
if opts[:hits_together]
|
297
297
|
# we fake that the protein sets are together
|
298
|
-
decoy_validator_to_split_with = Validator::Decoy.new(unmerge_regexp)
|
298
|
+
decoy_validator_to_split_with = Validator::Decoy.new(:constraint => unmerge_regexp)
|
299
299
|
decoy_peps.each do |pep|
|
300
300
|
pep.prots.each {|prt| prt.reference = merge_prefix + prt.reference }
|
301
301
|
end
|
@@ -599,13 +599,14 @@ class SpecID::Precision::Filter::Peps < Filter
|
|
599
599
|
end
|
600
600
|
|
601
601
|
# returns self for chaining
|
602
|
+
# ( >= +3 charge for the x3)
|
602
603
|
def standard_sequest_filter(peps, x1,x2,x3,deltacn,ppm,include_deltacnstar=true)
|
603
604
|
peps.select do |pep|
|
604
605
|
pep_deltacn = pep.deltacn
|
605
606
|
pep_charge = pep.charge
|
606
607
|
|
607
608
|
## The outer parentheses are critical to getting the correct answer!
|
608
|
-
_passing = ( (pep_deltacn >= deltacn) and ((pep_charge == 1 && pep.xcorr >= x1) or (pep_charge == 2 && pep.xcorr >= x2) or (pep_charge
|
609
|
+
_passing = ( (pep_deltacn >= deltacn) and ((pep_charge == 1 && pep.xcorr >= x1) or (pep_charge == 2 && pep.xcorr >= x2) or (pep_charge >= 3 && pep.xcorr >= x3)) and ( pep.ppm <= ppm ))
|
609
610
|
|
610
611
|
if _passing
|
611
612
|
if ((!include_deltacnstar) && (pep_deltacn > 1.0))
|
@@ -131,8 +131,10 @@ module SpecID
|
|
131
131
|
op.val_opt(:digestion, opts)
|
132
132
|
op.val_opt(:bias, opts)
|
133
133
|
op.val_opt(:bad_aa, opts)
|
134
|
+
op.val_opt(:bad_aa_est, opts)
|
134
135
|
|
135
136
|
op.val_opt(:tmm, opts)
|
137
|
+
op.val_opt(:fasta, opts)
|
136
138
|
op.val_opt(:tps, opts)
|
137
139
|
|
138
140
|
op.separator ""
|
@@ -187,7 +189,7 @@ module SpecID
|
|
187
189
|
if opts[:ties] == nil # will be nil or false
|
188
190
|
opts[:ties] = Validator::Cmdline::DEFAULTS[:ties]
|
189
191
|
end
|
190
|
-
opts[:validators] = Validator::Cmdline.prepare_validators(opts, !opts[:ties], opts[:interactive], spec_id_obj)
|
192
|
+
opts[:validators] = Validator::Cmdline.prepare_validators(opts, !opts[:ties], opts[:interactive], opts[:postfilter], spec_id_obj)
|
191
193
|
|
192
194
|
if opts[:output].size == 0
|
193
195
|
opts[:output] = DEFAULTS[:output]
|
@@ -34,11 +34,11 @@ class SpecID::Precision::Prob
|
|
34
34
|
# opts may include:
|
35
35
|
# :proteins => true|*false
|
36
36
|
# :validators => array of Validator objects
|
37
|
+
# adjusts the precision in the *probability* validators ajdusted =
|
38
|
+
# (1+R)*prec / (R*precision +1) where R is the decoy_to_target ratio
|
39
|
+
# used in the decoy validator (R = 0.0 if no decoy validator)
|
37
40
|
# NOTE: if you have decoy data, you MUST pass in a decoy validator for the
|
38
|
-
# decoy pephits to be removed from other validator analyses!
|
39
|
-
# (precision based on peptide probabilities are adjusted to account for
|
40
|
-
# the decoy peptides being present: Precision(no_decoy) = (2*Prec)/(Prec+1)
|
41
|
-
# which is derived from the 50/50 rule for decoy vs. embedded false hits
|
41
|
+
# decoy pephits to be removed from other validator analyses!
|
42
42
|
#
|
43
43
|
# returns a hash of data
|
44
44
|
# :pephits_precision => [{validator => <name>, values => [<precision>,...]},... ]
|
@@ -49,6 +49,8 @@ class SpecID::Precision::Prob
|
|
49
49
|
# :modified_peptides => array of modified sequence (only included if
|
50
50
|
# applicable)
|
51
51
|
#
|
52
|
+
# NOTE: For protein prophet, the results are given on a peptide+charge
|
53
|
+
# basis.
|
52
54
|
#
|
53
55
|
# TODO: implement tihs guy:
|
54
56
|
# prothits_precision => {validator => <name>, values => {worst => ,
|
@@ -58,7 +60,7 @@ class SpecID::Precision::Prob
|
|
58
60
|
opt = PN_DEFAULTS.merge(opts)
|
59
61
|
|
60
62
|
out = {}
|
61
|
-
num_pephits = [] # NOTE!: these are aaseq/aaseq_mod + charge
|
63
|
+
num_pephits = [] # NOTE!: these are aaseq/aaseq_mod + charge for Prophet
|
62
64
|
val_hash = Hash.new {|hash,key| hash[key] = [] }
|
63
65
|
val_calc_bkg_hash = Hash.new {|hash,key| hash[key] = [] }
|
64
66
|
pepstrings = []
|
@@ -67,16 +69,25 @@ class SpecID::Precision::Prob
|
|
67
69
|
probabilities = []
|
68
70
|
found_modified_peptide = false
|
69
71
|
|
72
|
+
check_precisions = []
|
73
|
+
check_precisions_decoy = []
|
70
74
|
|
71
75
|
# do we need to deal with decoy peptides? (true/false)
|
72
76
|
validators = opt[:validators].map
|
73
77
|
decoy_vals = validators.select {|val| val.class == Validator::Decoy }
|
74
78
|
|
79
|
+
|
75
80
|
if decoy_vals.size > 1
|
76
81
|
raise(ArgumentError, "only one decoy validator allowed!")
|
77
82
|
else
|
78
83
|
decoy_val = decoy_vals.first
|
84
|
+
if decoy_val
|
85
|
+
decoy_to_target_ratio = decoy_val.decoy_to_target_ratio
|
86
|
+
end
|
79
87
|
end
|
88
|
+
|
89
|
+
|
90
|
+
|
80
91
|
validators.delete(decoy_val)
|
81
92
|
other_validators = validators
|
82
93
|
|
@@ -89,17 +100,48 @@ class SpecID::Precision::Prob
|
|
89
100
|
|
90
101
|
n_count = 0
|
91
102
|
d_count = 0
|
103
|
+
|
104
|
+
# this is a peptide prophet
|
105
|
+
is_peptide_prophet =
|
106
|
+
if spec_id.peps.first.respond_to?(:fval) ; true
|
107
|
+
else ;false
|
108
|
+
end
|
109
|
+
|
110
|
+
use_q_value = spec_id.peps.first.respond_to?(:q_value)
|
111
|
+
|
112
|
+
## ORDER THE PEPTIDE HITS:
|
92
113
|
ordered_peps =
|
93
|
-
if
|
94
|
-
spec_id.peps.sort_by{|v|
|
114
|
+
if use_q_value
|
115
|
+
spec_id.peps.sort_by {|v| v.q_value }
|
116
|
+
elsif is_peptide_prophet
|
117
|
+
spec_id.peps.reject {|v| v.probability == -1.0}.sort_by {|v| v.probability }.reverse
|
95
118
|
else
|
96
|
-
|
119
|
+
if opt[:sort_by_init]
|
120
|
+
spec_id.peps.sort_by{|v| [v.initial_probability, v.n_instances, ( v.is_nondegenerate_evidence ? 1 : 0 ), v.n_enzymatic_termini, ( v.is_contributing_evidence ? 1 : 0 ), v.n_sibling_peptides] }.reverse
|
121
|
+
else
|
122
|
+
spec_id.peps.sort_by{|v| [v.nsp_adjusted_probability, v.initial_probability, v.n_instances, ( v.is_nondegenerate_evidence ? 1 : 0 ), v.n_enzymatic_termini, ( v.is_contributing_evidence ? 1 : 0 ), v.n_sibling_peptides] }.reverse
|
123
|
+
end
|
97
124
|
end
|
125
|
+
|
126
|
+
# for probability based precision with decoy database (not using prophet's
|
127
|
+
# -d flag) we do this:
|
128
|
+
# foreach peptide.sorted_by_probability
|
129
|
+
# 1. update the running precision of the validator REGARDLESS of
|
130
|
+
# decoy/target status of peptide. the internal hit counts are
|
131
|
+
# incremented.
|
132
|
+
# 2. only increment reported HIT COUNTS on a non-decoy hit and record
|
133
|
+
# the precision as (1+R)*prec / (R*precision +1) where R is the ratio of
|
134
|
+
# decoy hits to target hits. If it is 1:1 (R = 1) then this becomes:
|
135
|
+
# 2*prec / (prec + 1)
|
136
|
+
|
137
|
+
## WORK THROUGH EACH PEPTIDE:
|
98
138
|
ordered_peps.each_with_index do |pep,i|
|
99
139
|
# probability validators must work on the entire set of normal and decoy
|
100
140
|
|
101
141
|
last_prob_values = probability_validators.map do |val|
|
102
|
-
val.increment_pephits_precision(pep)
|
142
|
+
reply = val.increment_pephits_precision(pep)
|
143
|
+
check_precisions << reply
|
144
|
+
reply
|
103
145
|
end
|
104
146
|
|
105
147
|
it_is_a_normal_pep =
|
@@ -113,13 +155,23 @@ class SpecID::Precision::Prob
|
|
113
155
|
true
|
114
156
|
end
|
115
157
|
|
158
|
+
if it_is_a_normal_pep
|
159
|
+
check_precisions_decoy << false
|
160
|
+
else
|
161
|
+
check_precisions_decoy << true
|
162
|
+
end
|
163
|
+
|
116
164
|
if it_is_a_normal_pep
|
117
165
|
n_count += 1
|
118
166
|
|
119
167
|
# UPDATE validators:
|
120
|
-
val_hash[decoy_val]
|
168
|
+
val_hash[decoy_val].push(decoy_precision) if decoy_val
|
121
169
|
probability_validators.zip(last_prob_values) do |val,prec|
|
122
|
-
|
170
|
+
if decoy_val
|
171
|
+
val_hash[val].push( ((decoy_to_target_ratio+1.0)*prec) / ((decoy_to_target_ratio*prec) + 1.0) )
|
172
|
+
else
|
173
|
+
val_hash[val] << prec
|
174
|
+
end
|
123
175
|
end
|
124
176
|
other_validators.each do |val|
|
125
177
|
val_hash[val] << val.increment_pephits_precision(pep)
|
@@ -129,17 +181,28 @@ class SpecID::Precision::Prob
|
|
129
181
|
end
|
130
182
|
|
131
183
|
# UPDATE other basic useful information:
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
184
|
+
if pep.respond_to?(:mod_info)
|
185
|
+
modified_pep_string =
|
186
|
+
if pep.mod_info
|
187
|
+
found_modified_peptide = true
|
188
|
+
pep.mod_info.modified_peptide
|
189
|
+
else
|
190
|
+
nil
|
191
|
+
end
|
192
|
+
modified_peptides << modified_pep_string
|
193
|
+
else
|
194
|
+
modified_pep_string =
|
195
|
+
if pep.sequence =~ /[^A-Z\-\.]/
|
196
|
+
found_modified_peptide = true
|
197
|
+
pep.sequence
|
198
|
+
else
|
199
|
+
nil
|
200
|
+
end
|
201
|
+
modified_peptides << modified_pep_string
|
202
|
+
end
|
140
203
|
pepcharges << pep.charge
|
141
204
|
pepstrings << pep.aaseq
|
142
|
-
probabilities << pep.probability
|
205
|
+
probabilities << pep.probability # this is the q_value if percolator
|
143
206
|
num_pephits << (i+1)
|
144
207
|
else
|
145
208
|
d_count += 1
|
@@ -148,7 +211,11 @@ class SpecID::Precision::Prob
|
|
148
211
|
if found_modified_peptide
|
149
212
|
out[:modified_peptides] = modified_peptides
|
150
213
|
end
|
151
|
-
|
214
|
+
if use_q_value
|
215
|
+
out[:q_values] = probabilities
|
216
|
+
else
|
217
|
+
out[:probabilities] = probabilities
|
218
|
+
end
|
152
219
|
out[:count] = num_pephits
|
153
220
|
out[:aaseqs] = pepstrings
|
154
221
|
out[:charges] = pepcharges
|
@@ -12,8 +12,13 @@ module SpecID
|
|
12
12
|
|
13
13
|
COMMAND_LINE = {
|
14
14
|
:sort_by_init => ['--sort_by_init', "sort the proteins based on init probability"],
|
15
|
+
:qval => ['--qval', "use percolator q-values to calculate precision"],
|
15
16
|
:prob => ['--prob [TYPE]', "use prophet probabilites to calculate precision",
|
16
|
-
"TYPE =
|
17
|
+
"TYPE = nsp [default] prophet nsp",
|
18
|
+
" (nsp also should be used for PeptideProphet results)",
|
19
|
+
" = init (for ProteinProphet results) use initial",
|
20
|
+
"probability instead of nsp probability",
|
21
|
+
],
|
17
22
|
# OUTPUT
|
18
23
|
:proteins => ["--proteins", "includes proteins (and validation)"],
|
19
24
|
:output => ["-o", "--output format[:FILENAME]", "format to output filtering results.",
|
@@ -29,12 +34,11 @@ module SpecID
|
|
29
34
|
],
|
30
35
|
|
31
36
|
# VALIDATION MODIFIERS:
|
32
|
-
:
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
37
|
+
:pephits => ["--pephits <file>.srg", "an srg file pointing to the srf files for",
|
38
|
+
"the given -prot.xml run",
|
39
|
+
"[this or --digestion must be used for applicable]",
|
40
|
+
"validators (validators depending on a",
|
41
|
+
"false/total ratio)]"],
|
38
42
|
}.merge( Validator::Cmdline::COMMAND_LINE )
|
39
43
|
|
40
44
|
|
@@ -60,9 +64,10 @@ module SpecID
|
|
60
64
|
on(*COMMAND_LINE[arg]) {|v| opts[arg] = v}
|
61
65
|
end
|
62
66
|
|
63
|
-
op.banner = "USAGE: #{File.basename($0)} [OPTS] <file>-prot.xml"
|
67
|
+
op.banner = "USAGE: #{File.basename($0)} [OPTS] <file>-prot.xml | <file>.sqg"
|
64
68
|
op.separator ""
|
65
|
-
op.separator " RETURNS: precision across the number of hits
|
69
|
+
op.separator " RETURNS: precision across the number of hits"
|
70
|
+
op.separator " (based on probability or q-value)"
|
66
71
|
op.separator " (optional) other validation of the results."
|
67
72
|
op.separator ""
|
68
73
|
|
@@ -90,12 +95,16 @@ module SpecID
|
|
90
95
|
op.separator ""
|
91
96
|
|
92
97
|
op.val_opt(:prob, opts)
|
98
|
+
op.val_opt(:qval, opts)
|
93
99
|
op.val_opt(:decoy, opts)
|
100
|
+
op.val_opt(:pephits, opts) # sets opts[:ties] = false
|
94
101
|
op.val_opt(:digestion, opts)
|
95
102
|
op.val_opt(:bias, opts)
|
96
103
|
op.val_opt(:bad_aa, opts)
|
104
|
+
op.val_opt(:bad_aa_est, opts)
|
97
105
|
|
98
106
|
op.val_opt(:tmm, opts)
|
107
|
+
op.val_opt(:fasta, opts)
|
99
108
|
op.val_opt(:tps, opts)
|
100
109
|
|
101
110
|
op.separator ""
|
@@ -108,16 +117,19 @@ module SpecID
|
|
108
117
|
# prepare validators
|
109
118
|
|
110
119
|
if args.size > 0
|
111
|
-
spec_id_obj =
|
112
|
-
if args[0] =~ /\.srf$/i
|
113
|
-
::SpecID.new(args)
|
114
|
-
else
|
115
|
-
::SpecID.new(args[0])
|
116
|
-
end
|
120
|
+
spec_id_obj = ::SpecID.new(args[0])
|
117
121
|
if opts[:ties] == nil # will be nil or false
|
118
122
|
opts[:ties] = Validator::Cmdline::DEFAULTS[:ties]
|
119
123
|
end
|
120
|
-
|
124
|
+
postfilter =
|
125
|
+
if spec_id_obj.class == SQTGroup or spec_id_obj.class == Proph::PepSummary
|
126
|
+
puts 'making background estimates with: top_per_scan'
|
127
|
+
:top_per_scan
|
128
|
+
else
|
129
|
+
puts 'making background estimates with: top_per_aaseq_charge'
|
130
|
+
:top_per_aaseq_charge
|
131
|
+
end
|
132
|
+
opts[:validators] = Validator::Cmdline.prepare_validators(opts, !opts[:ties], opts[:interactive], postfilter, spec_id_obj)
|
121
133
|
|
122
134
|
if opts[:output].size == 0
|
123
135
|
opts[:output] = DEFAULTS[:output]
|