protk 1.3.1.pre3 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +21 -19
  3. data/bin/add_retention_times.rb +1 -1
  4. data/bin/interprophet.rb +16 -5
  5. data/bin/make_decoy.rb +1 -1
  6. data/bin/manage_db.rb +1 -1
  7. data/bin/mascot_search.rb +2 -2
  8. data/bin/mascot_to_pepxml.rb +1 -1
  9. data/bin/msgfplus_search.rb +26 -9
  10. data/bin/omssa_search.rb +1 -1
  11. data/bin/peptide_prophet.rb +57 -20
  12. data/bin/pepxml_to_table.rb +15 -2
  13. data/bin/protein_prophet.rb +41 -1
  14. data/bin/protk_setup.rb +2 -2
  15. data/bin/protxml_to_gff.rb +50 -42
  16. data/bin/protxml_to_psql.rb +1 -1
  17. data/bin/protxml_to_table.rb +16 -3
  18. data/bin/repair_run_summary.rb +1 -1
  19. data/bin/sixframe.rb +2 -2
  20. data/bin/swissprot_to_table.rb +1 -1
  21. data/bin/tandem_search.rb +1 -1
  22. data/bin/tandem_to_pepxml.rb +1 -1
  23. data/lib/protk/constants.rb +2 -1
  24. data/lib/protk/convert_util.rb +1 -1
  25. data/lib/protk/data/tandem-style.css +349 -0
  26. data/lib/protk/data/tandem-style.xsl +264 -0
  27. data/lib/protk/data/tandem_gpm_defaults.xml +3 -3
  28. data/lib/protk/data/tandem_isb_kscore_defaults.xml +2 -0
  29. data/lib/protk/data/tandem_isb_native_defaults.xml +3 -0
  30. data/lib/protk/data/tandem_params.xml +0 -8
  31. data/lib/protk/fastadb.rb +1 -1
  32. data/lib/protk/galaxy_stager.rb +14 -3
  33. data/lib/protk/galaxy_util.rb +39 -31
  34. data/lib/protk/gffdb.rb +6 -1
  35. data/lib/protk/manage_db_rakefile.rake +1 -1
  36. data/lib/protk/manage_db_tool.rb +1 -1
  37. data/lib/protk/pepxml.rb +159 -7
  38. data/lib/protk/plasmodb.rb +1 -1
  39. data/lib/protk/prophet_tool.rb +20 -52
  40. data/lib/protk/setup_rakefile.rake +18 -11
  41. data/lib/protk/tandem_search_tool.rb +20 -7
  42. data/lib/protk/tool.rb +1 -1
  43. data/lib/protk/uniprot_mapper.rb +1 -1
  44. metadata +10 -14
@@ -19,6 +19,8 @@ include LibXML
19
19
  tool=Tool.new([:explicit_output])
20
20
  tool.option_parser.banner = "Convert a pepXML file to a tab delimited table.\n\nUsage: pepxml_to_table.rb [options] file1.pep.xml"
21
21
 
22
+ tool.add_boolean_option(:invert_probabilities,false,["--invert-probabilities","Output 1-p instead of p for all probability values"])
23
+
22
24
  exit unless tool.check_options(true)
23
25
 
24
26
  input_file=ARGV[0]
@@ -29,7 +31,7 @@ else
29
31
  output_fh=$stdout
30
32
  end
31
33
 
32
- output_fh.write "protein\tpeptide\tassumed_charge\tcalc_neutral_pep_mass\tneutral_mass\tretention_time\tstart_scan\tend_scan\tsearch_engine\traw_score\tpeptideprophet_prob\tinterprophet_prob\n"
34
+ output_fh.write "protein\tpeptide\tassumed_charge\tcalc_neutral_pep_mass\tneutral_mass\tretention_time\tstart_scan\tend_scan\tsearch_engine\traw_score\tpeptideprophet_prob\tinterprophet_prob\texperiment_label\n"
33
35
 
34
36
  XML::Error.set_handler(&XML::Error::QUIET_HANDLER)
35
37
 
@@ -52,6 +54,9 @@ spectrum_queries.each do |query|
52
54
  neutral_mass=query.attributes['precursor_neutral_mass']
53
55
  assumed_charge=query.attributes['assumed_charge']
54
56
 
57
+ experiment_label=""
58
+ experiment_label=query.attributes['experiment_label'] unless query.attributes['experiment_label'].nil?
59
+
55
60
  top_search_hit=query.find("./#{pepxml_ns_prefix}search_result/#{pepxml_ns_prefix}search_hit",pepxml_ns)[0]
56
61
  peptide=top_search_hit.attributes['peptide']
57
62
  protein=top_search_hit.attributes['protein']
@@ -76,6 +81,9 @@ spectrum_queries.each do |query|
76
81
  when /MS\-GF/
77
82
  search_score_nodes=top_search_hit.find("./#{pepxml_ns_prefix}search_score[@name=\"EValue\"]",[pepxml_ns])
78
83
  raw_score=search_score_nodes[0].attributes['value']
84
+ when /MASCOT/
85
+ search_score_nodes=top_search_hit.find("./#{pepxml_ns_prefix}search_score[@name=\"ionscore\"]",[pepxml_ns])
86
+ raw_score=search_score_nodes[0].attributes['value']
79
87
  end
80
88
 
81
89
 
@@ -87,7 +95,12 @@ spectrum_queries.each do |query|
87
95
  peptide_prophet_prob=pp_result[0].value if ( pp_result.length>0 )
88
96
  interprophet_prob=ip_result[0].value if ( ip_result.length>0)
89
97
 
90
- output_fh.write "#{protein}\t#{peptide}\t#{assumed_charge}\t#{calc_neutral_pep_mass}\t#{neutral_mass}\t#{retention_time}\t#{start_scan}\t#{end_scan}\t#{search_engine}\t#{raw_score}\t#{peptide_prophet_prob}\t#{interprophet_prob}\n"
98
+ if tool.invert_probabilities
99
+ peptide_prophet_prob = (1.0-peptide_prophet_prob.to_f).round(3) if peptide_prophet_prob!=""
100
+ interprophet_prob = (1.0 - interprophet_prob.to_f).round(3) if interprophet_prob!=""
101
+ end
102
+
103
+ output_fh.write "#{protein}\t#{peptide}\t#{assumed_charge}\t#{calc_neutral_pep_mass}\t#{neutral_mass}\t#{retention_time}\t#{start_scan}\t#{end_scan}\t#{search_engine}\t#{raw_score}\t#{peptide_prophet_prob}\t#{interprophet_prob}\t#{experiment_label}\n"
91
104
 
92
105
  end
93
106
 
@@ -38,7 +38,7 @@ prophet_tool.add_value_option(:minindep,0,['--minindep mp',"Minimum percentage o
38
38
  exit unless prophet_tool.check_options(true)
39
39
 
40
40
  # Obtain a global environment object
41
- genv=Constants.new
41
+ genv=Constants.instance
42
42
 
43
43
  input_stagers=[]
44
44
  inputs=ARGV.collect { |file_name| file_name.chomp}
@@ -60,10 +60,50 @@ if ( !Pathname.new(output_file).exist? || prophet_tool.over_write )
60
60
 
61
61
  cmd << " #{inputs.join(" ")} #{output_file}"
62
62
 
63
+ if ( prophet_tool.iproph )
64
+ cmd << " IPROPHET "
65
+ end
66
+
67
+ if ( prophet_tool.nooccam )
68
+ cmd << " NOOCCAM "
69
+ end
70
+
71
+ if ( prophet_tool.groupwts )
72
+ cmd << " GROUPWTS "
73
+ end
74
+
75
+ if ( prophet_tool.normprotlen )
76
+ cmd << " NORMPROTLEN "
77
+ end
78
+
79
+ if ( prophet_tool.logprobs )
80
+ cmd << " LOGPROBS "
81
+ end
82
+
83
+ if ( prophet_tool.allpeps )
84
+ cmd << " ALLPEPS "
85
+ end
86
+
87
+ if ( prophet_tool.unmapped )
88
+ cmd << " UNMAPPED "
89
+ end
90
+
63
91
  if ( prophet_tool.glyco )
64
92
  cmd << " GLYC "
65
93
  end
66
94
 
95
+ if ( prophet_tool.delude )
96
+ cmd << " DELUDE "
97
+ end
98
+
99
+ if ( prophet_tool.instances )
100
+ cmd << " INSTANCES "
101
+ end
102
+
103
+ cmd << " MINPROB=#{prophet_tool.minprob} "
104
+
105
+ cmd << " MININDEP=#{prophet_tool.minindep} "
106
+
67
107
  # Run the analysis
68
108
  #
69
109
  code = prophet_tool.run(cmd,genv)
@@ -13,7 +13,7 @@ toolname=ARGV[0]
13
13
  if ARGV[1]=='--change-location'
14
14
  location=ARGV[2]
15
15
  p "Changing default location for #{toolname} to #{location}"
16
- env=Constants.new
16
+ env=Constants.instance
17
17
  env.update_user_config({"#{toolname}_root"=>location})
18
18
  exit
19
19
  end
@@ -37,7 +37,7 @@ if ( ARGV.length < 1)
37
37
  exit
38
38
  end
39
39
 
40
- env=Constants.new
40
+ env=Constants.instance
41
41
 
42
42
  toolname=ARGV.shift
43
43
 
@@ -54,7 +54,7 @@ def prepare_fasta(database_path,type)
54
54
  when Pathname.new(database_path).exist? # It's an explicitly named db
55
55
  db_filename = Pathname.new(database_path).expand_path.to_s
56
56
  else
57
- db_filename=Constants.new.current_database_for_name(database_path)
57
+ db_filename=Constants.instance.current_database_for_name(database_path)
58
58
  end
59
59
 
60
60
 
@@ -84,11 +84,10 @@ tool.add_value_option(:genome_idregex,nil,['--genome-idregex pre','Regex with ca
84
84
 
85
85
  exit unless tool.check_options(true,[:database,:coords_file])
86
86
 
87
- $protk = Constants.new
87
+ $protk = Constants.instance
88
88
  log_level = tool.debug ? "info" : "warn"
89
89
  $protk.info_level= log_level
90
90
 
91
-
92
91
  input_file=ARGV[0]
93
92
 
94
93
  if tool.explicit_output
@@ -101,58 +100,67 @@ should_ = tool.debug || (output_fh!=$stdout)
101
100
 
102
101
  input_protxml=ARGV[0]
103
102
 
103
+ $protk.log "Creating GFFDB", :info
104
104
  gffdb = GFFDB.create(tool.coords_file) if tool.coords_file
105
105
 
106
106
  # genome_db = prepare_fasta(tool.genome,'nucl')
107
+ $protk.log "Preparing FASTA index", :info
107
108
  prot_db = prepare_fasta(tool.database,'prot')
108
109
 
110
+ $protk.log "Parsing protxml", :info
109
111
  proteins = parse_proteins(input_protxml)
110
112
 
111
113
  num_missing_gff_entries = 0
112
114
 
113
115
  proteins.each do |protein|
114
116
 
115
- begin
116
- # Get the full protein sequence
117
- #
118
- parsed_name_for_protdb = protein_id_to_protdbid(protein.protein_name)
119
- protein_entry = prot_db.get_by_id parsed_name_for_protdb
120
- raise ProteinNotInDBError if ( protein_entry == nil)
121
-
122
- protein.sequence = protein_entry.aaseq
123
-
124
- # Get the CDS and parent entries from the gff file
125
- #
126
- parsed_name_for_gffid = protein_id_to_gffid(protein.protein_name,tool.gff_idregex)
127
- gff_parent_entries = gffdb.get_by_id(parsed_name_for_gffid)
128
- raise NoGFFEntryFoundError if gff_parent_entries.nil? || gff_parent_entries.length==0
129
- raise MultipleGFFEntriesForProteinError if gff_parent_entries.length > 1
130
-
131
- gff_parent_entry = gff_parent_entries.first
132
- gff_cds_entries = gffdb.get_cds_by_parent_id(parsed_name_for_gffid)
133
-
134
- # Account for sixframe case. Parent is CDS and there are no children
135
- #
136
- gff_cds_entries=[gff_parent_entry] if gff_cds_entries.nil? && gff_parent_entry.feature=="CDS"
137
-
138
- peptides = tool.stack_charge_states ? protein.peptides : protein.representative_peptides
139
-
140
- peptides.each do |peptide|
141
- peptide_entries = peptide.to_gff3_records(protein_entry.aaseq,gff_parent_entry,gff_cds_entries)
142
- peptide_entries.each do |peptide_entry|
143
- output_fh.write peptide_entry.to_s
117
+ if protein.probability >= tool.protein_probability_threshold
118
+
119
+ begin
120
+ $protk.log "Mapping #{protein.protein_name}", :info
121
+ # Get the full protein sequence
122
+ #
123
+ parsed_name_for_protdb = protein_id_to_protdbid(protein.protein_name)
124
+ protein_entry = prot_db.get_by_id parsed_name_for_protdb
125
+ raise ProteinNotInDBError if ( protein_entry == nil)
126
+
127
+ protein.sequence = protein_entry.aaseq
128
+
129
+ # Get the CDS and parent entries from the gff file
130
+ #
131
+ parsed_name_for_gffid = protein_id_to_gffid(protein.protein_name,tool.gff_idregex)
132
+ gff_parent_entries = gffdb.get_by_id(parsed_name_for_gffid)
133
+ raise NoGFFEntryFoundError if gff_parent_entries.nil? || gff_parent_entries.length==0
134
+ raise MultipleGFFEntriesForProteinError if gff_parent_entries.length > 1
135
+
136
+ gff_parent_entry = gff_parent_entries.first
137
+ gff_cds_entries = gffdb.get_cds_by_parent_id(parsed_name_for_gffid)
138
+
139
+ # Account for sixframe case. Parent is CDS and there are no children
140
+ #
141
+ gff_cds_entries=[gff_parent_entry] if gff_cds_entries.nil? && gff_parent_entry.feature=="CDS"
142
+
143
+ peptides = tool.stack_charge_states ? protein.peptides : protein.representative_peptides
144
+
145
+ peptides.each do |peptide|
146
+ if peptide.nsp_adjusted_probability >= tool.peptide_probability_threshold
147
+ peptide_entries = peptide.to_gff3_records(protein_entry.aaseq,gff_parent_entry,gff_cds_entries)
148
+ peptide_entries.each do |peptide_entry|
149
+ output_fh.write peptide_entry.to_s
150
+ end
151
+ end
144
152
  end
145
- end
146
153
 
147
- rescue NoGFFEntryFoundError
148
- $protk.log "No gff entry for #{parsed_name_for_gffid}", :info
149
- num_missing_gff_entries+=1
150
- rescue ProteinNotInDBError
151
- $protk.log "No entry for #{parsed_name_for_protdb}", :info
152
- rescue MultipleGFFEntriesForProteinError
153
- $protk.log "Multiple entries in gff file for #{parsed_name_for_gffid}", :info
154
- rescue PeptideNotInProteinError
155
- $protk.log "A peptide was not found in its parent protein #{protein.protein_name}" , :warn
154
+ rescue NoGFFEntryFoundError
155
+ $protk.log "No gff entry for #{parsed_name_for_gffid}", :info
156
+ num_missing_gff_entries+=1
157
+ rescue ProteinNotInDBError
158
+ $protk.log "No entry for #{parsed_name_for_protdb}", :info
159
+ rescue MultipleGFFEntriesForProteinError
160
+ $protk.log "Multiple entries in gff file for #{parsed_name_for_gffid}", :info
161
+ rescue PeptideNotInProteinError
162
+ $protk.log "A peptide was not found in its parent protein #{protein.protein_name}" , :warn
163
+ end
156
164
  end
157
165
  end
158
166
 
@@ -24,7 +24,7 @@ def prepare_fasta(database_path,type)
24
24
  when Pathname.new(database_path).exist? # It's an explicitly named db
25
25
  db_filename = Pathname.new(database_path).expand_path.to_s
26
26
  else
27
- db_filename=Constants.new.current_database_for_name(database_path)
27
+ db_filename=Constants.instance.current_database_for_name(database_path)
28
28
  end
29
29
 
30
30
  db_indexfilename = "#{db_filename}.pin"
@@ -20,6 +20,7 @@ tool=Tool.new([:explicit_output])
20
20
  tool.option_parser.banner = "Convert a protXML file to a tab delimited table.\n\nUsage: protxml_to_table.rb [options] file1.protXML"
21
21
 
22
22
  tool.add_boolean_option(:groups,false,["--groups","Print output by groups rather than for each protein"])
23
+ tool.add_boolean_option(:invert_probabilities,false,["--invert-probabilities","Output 1-p instead of p for all probability values"])
23
24
 
24
25
  exit unless tool.check_options(true)
25
26
 
@@ -78,12 +79,20 @@ protein_groups.each do |protein_group|
78
79
  column_values=[]
79
80
 
80
81
  column_values << protein_group.attributes['group_number']
81
- column_values << protein_group.attributes['probability']
82
+
83
+ grp_prob = protein_group.attributes['probability']
84
+ grp_prob = (1.0-grp_prob.to_f).round(3) if tool.invert_probabilities
85
+ column_values << grp_prob
82
86
 
83
87
  column_values << protein.attributes['protein_name']
84
88
  column_values << protein_id
85
89
  column_values << indis_proteins_summary
86
- column_values << protein.attributes['probability']
90
+
91
+ prt_prob = protein.attributes['probability']
92
+ prt_prob = (1.0-prt_prob.to_f).round(3) if tool.invert_probabilities
93
+ column_values << prt_prob
94
+
95
+
87
96
  column_values << protein.attributes['percent_coverage']
88
97
  column_values << protein.attributes['unique_stripped_peptides']
89
98
  column_values << protein.attributes['total_number_peptides']
@@ -96,7 +105,11 @@ protein_groups.each do |protein_group|
96
105
  end
97
106
 
98
107
  group_column_values=[protein_group.attributes['group_number']]
99
- group_column_values<<protein_group.attributes['probability']
108
+
109
+ grp_prob = protein_group.attributes['probability']
110
+ grp_prob = (1.0-grp_prob.to_f).round(3) if tool.invert_probabilities
111
+ group_column_values<<grp_prob
112
+
100
113
  group_column_values<<group_members.join(" ")
101
114
 
102
115
  if tool.groups
@@ -17,7 +17,7 @@ include LibXML
17
17
 
18
18
  # Environment with global constants
19
19
  #
20
- genv=Constants.new
20
+ genv=Constants.instance
21
21
 
22
22
 
23
23
  # Setup specific command-line options for this tool. Other options are inherited from Tool
@@ -28,7 +28,7 @@ tool.option_parser.banner = "Create a sixframe translation of a genome.\n\nUsage
28
28
 
29
29
  tool.add_boolean_option(:print_coords,false,['--coords', 'Write genomic coordinates in the fasta header'])
30
30
  tool.add_boolean_option(:keep_header,true,['--strip-header', 'Dont write sequence definition'])
31
- tool.add_value_option(:min_len,20,['--min-len','Minimum ORF length to keep'])
31
+ tool.add_value_option(:min_len,20,['--min-len l','Minimum ORF length to keep'])
32
32
  tool.add_boolean_option(:write_gff,false,['--gff3','Output gff3 instead of fasta'])
33
33
 
34
34
  exit unless tool.check_options(true)
@@ -58,7 +58,7 @@ file.each do |entry|
58
58
  oi=0
59
59
  orfs.each do |orf|
60
60
  oi+=1
61
- if ( orf.length > tool.min_len )
61
+ if ( orf.length > tool.min_len.to_i )
62
62
 
63
63
  position_start = position
64
64
  position_end = position_start + orf.length*3 -1
@@ -61,7 +61,7 @@ end
61
61
  exit unless tool.check_options(true,[:database])
62
62
 
63
63
 
64
- $protk = Constants.new
64
+ $protk = Constants.instance
65
65
  log_level = tool.debug ? :debug : :fatal
66
66
  $protk.info_level= log_level
67
67
 
@@ -15,7 +15,7 @@ include LibXML
15
15
 
16
16
  # Environment with global constants
17
17
  #
18
- genv=Constants.new
18
+ genv=Constants.instance
19
19
  search_tool=TandemSearchTool.new()
20
20
 
21
21
  exit unless search_tool.check_options(true)
@@ -12,7 +12,7 @@ require 'protk/search_tool'
12
12
 
13
13
  # Environment with global constants
14
14
  #
15
- genv=Constants.new
15
+ genv=Constants.instance
16
16
 
17
17
  tool=SearchTool.new([:explicit_output,:over_write,:prefix])
18
18
  tool.option_parser.banner = "Convert tandem files to pep.xml files.\n\nUsage: tandem_to_pepxml.rb [options] file1.dat file2.dat ... "
@@ -7,9 +7,10 @@
7
7
  require 'yaml'
8
8
  require 'logger'
9
9
  require 'pathname'
10
+ require 'singleton'
10
11
 
11
12
  class Constants
12
-
13
+ include Singleton
13
14
  # A Hash holding all the constants
14
15
  #
15
16
  @env
@@ -11,7 +11,7 @@ class ConvertUtil
11
11
 
12
12
  def self.index_mzml(mzml_file)
13
13
  Dir.mktmpdir do |tmpdir|
14
- genv=Constants.new
14
+ genv=Constants.instance
15
15
  %x["#{genv.msconvert} -o #{tmpdir} #{mzml_file}"]
16
16
  indexed_file = Dir["#{tmpdir}/*"][0]
17
17
  FileUtils.mv(indexed_file, mzml_file)
@@ -0,0 +1,349 @@
1
+ .c {
2
+ cursor:pointer
3
+ }
4
+
5
+ .b {
6
+ color:red;
7
+ font-family: Verdana,Arial,Helvetica,sans-serif;
8
+ font-weight:bold;
9
+ Font-size: 8pt;
10
+ text-decoration:none
11
+ }
12
+
13
+ .e{
14
+ margin-left:1em;
15
+ text-indent:-1em;
16
+ margin-right:1em;
17
+ margin-bottom:3pt
18
+ }
19
+
20
+ .k{
21
+ margin-left:+3em;
22
+ text-indent:0em;
23
+ margin-right:1em;
24
+ }
25
+
26
+ .fm{
27
+ font-family:Courier New,Courier,monospace;
28
+ font-size:11pt;
29
+ font-style:normal;
30
+ color:white;
31
+ font-variant:normal;
32
+ text-decoration:underline;
33
+ font-weight:bold;
34
+ cursor:pointer;
35
+ background-color:red;
36
+ }
37
+
38
+ .f{
39
+ font-family:Courier New,Courier,monospace;
40
+ font-size:11pt;
41
+ font-style:normal;
42
+ color:red;
43
+ font-variant:normal;
44
+ text-decoration:none;
45
+ font-weight:bold;
46
+ cursor:pointer;
47
+ background-color:white;
48
+ }
49
+
50
+ .f1{
51
+ font-family:Courier New,Courier,monospace;
52
+ font-size:11pt;
53
+ font-style:normal;
54
+ color:red;
55
+ }
56
+
57
+ .f2{
58
+ font-family:Courier New,Courier,monospace;
59
+ font-size:11pt;
60
+ font-style:normal;
61
+ color:black;
62
+ }
63
+
64
+ .db{
65
+ text-indent:0px;
66
+ margin-left:1em;
67
+ margin-top:0px;
68
+ margin-bottom:0px;
69
+ padding-left:.3em;
70
+ border-left:1px solid #CCCCCC;
71
+ font-family:Courier New,Courier,monospace;
72
+ }
73
+
74
+ .di{
75
+ font-family:Courier New,Courier,monospace;
76
+ }
77
+
78
+ .cb{
79
+ text-indent:0px;
80
+ margin-left:1em;
81
+ margin-top:0px;
82
+ margin-bottom:0px;
83
+ padding-left:.3em;
84
+ font-family:Courier New,Courier,monospace;
85
+ color:#888888
86
+ }
87
+
88
+ .ci{
89
+ font-family:Courier New,Courier,monospace;
90
+ color:#888888
91
+ }
92
+
93
+ PRE {
94
+ margin:0px;
95
+ display:inline
96
+ }
97
+
98
+ .aa_h {
99
+ color:black;
100
+ font-weight: normal;
101
+ font-family: Courier New,Courier,monospace;
102
+ font-size: 10pt;
103
+ background-color:#99AAFF;
104
+ }
105
+
106
+ .aa_s {
107
+ color:black;
108
+ font-weight: normal;
109
+ font-family: Courier New,Courier,monospace;
110
+ font-size: 8pt;
111
+ }
112
+
113
+ .residues {
114
+ color: black;
115
+ text-decoration: none;
116
+ font-family: Courier New,Courier,monospace;
117
+ font-size: 10pt;
118
+ }
119
+
120
+ .top_note {
121
+ color: black;
122
+ text-decoration: none;
123
+ font-family: Verdana, Arial, Helvetica,sans-serif;
124
+ font-size: 10pt;
125
+ }
126
+
127
+ .top_highlight {
128
+ color: black;
129
+ font-weight: bold;
130
+ font-family: Verdana, Arial, Helvetica,sans-serif;
131
+ font-size: 10pt;}
132
+
133
+ .greek {
134
+ color: black;
135
+ text-decoration: none;
136
+ font-family: Symbol,sans-serif;
137
+ font-size: 10pt;
138
+ }
139
+
140
+ .greek_b {
141
+ color: red;
142
+ font-weight: bold;
143
+ text-decoration: none;
144
+ font-family: Symbol,sans-serif;
145
+ font-size: 12pt;
146
+ }
147
+
148
+ .top_label {
149
+ color: blue;
150
+ font-weight: normal;
151
+ font-family: Verdana, Arial, Helvetica,sans-serif;
152
+ font-size: 10pt;
153
+ }
154
+
155
+ .peptide_label {
156
+ color: black;
157
+ font-weight: normal;
158
+ font-family: Verdana, Arial, Helvetica,sans-serif;
159
+ font-size: 10pt;
160
+ }
161
+ td {
162
+ color: black;
163
+ font-weight: normal;
164
+ font-family: Verdana, Arial, Helvetica,sans-serif;
165
+ font-size: 8pt;
166
+ }
167
+
168
+ p {
169
+ color: black;
170
+ font-weight: normal;
171
+ font-family: Verdana, Arial, Helvetica,sans-serif;
172
+ font-size: 8pt;
173
+ }
174
+
175
+ th {
176
+ color: black;
177
+ font-weight: bold;
178
+ font-family: Verdana, Arial, Helvetica,sans-serif;
179
+ font-size: 8pt;
180
+ }
181
+
182
+ big {
183
+ color: black;
184
+ font-weight: bold;
185
+ font-family: Verdana, Arial, Helvetica,sans-serif;
186
+ font-size: 8pt;
187
+ }
188
+
189
+ h3 {
190
+ color: black;
191
+ font-weight: bold;
192
+ font-family: Verdana, Arial, Helvetica,sans-serif;
193
+ font-size: 10pt;
194
+ }
195
+
196
+ .mod {
197
+ color: white;
198
+ background-color: blue;
199
+ font-weight: normal;
200
+ font-family: Verdana, Arial, Helvetica,sans-serif;
201
+ font-size: 8pt;
202
+ }
203
+
204
+ .mut {
205
+ color: white;
206
+ background-color: red;
207
+ font-weight: normal;
208
+ font-family: Verdana, Arial, Helvetica,sans-serif;
209
+ font-size: 8pt;
210
+ }
211
+
212
+ .y0 {
213
+ color: red;
214
+ font-weight: bold;
215
+ font-family: Verdana, Arial, Helvetica,sans-serif;
216
+ font-size: 8pt;
217
+ }
218
+
219
+ .y17 {
220
+ color: #FF9933;
221
+ font-weight: bold;
222
+ font-family: Verdana, Arial, Helvetica,sans-serif;
223
+ font-size: 8pt;
224
+ }
225
+
226
+ .b0 {
227
+ color: blue;
228
+ font-weight: bold;
229
+ font-family: Verdana, Arial, Helvetica,sans-serif;
230
+ font-size: 8pt;
231
+ }
232
+
233
+ .b17 {
234
+ color: green;
235
+ font-weight: bold;
236
+ font-family: Verdana, Arial, Helvetica,sans-serif;
237
+ font-size: 8pt;
238
+ }
239
+
240
+ .small_label {
241
+ color: black;
242
+ font-weight: normal;
243
+ font-family: Verdana, Arial, Helvetica,sans-serif;
244
+ font-size: 8pt;
245
+ }
246
+
247
+ .small_link {
248
+ color: blue;
249
+ cursor: pointer;
250
+ font-weight: normal;
251
+ font-family: Verdana, Arial, Helvetica,sans-serif;
252
+ font-size: 8pt;
253
+ }
254
+
255
+ .small_value {
256
+ color: blue;
257
+ font-weight: normal;
258
+ font-family: Verdana, Arial, Helvetica,sans-serif;
259
+ font-size: 8pt;
260
+ }
261
+
262
+ .go_button {
263
+ color: white;
264
+ cursor: pointer;
265
+ font-weight: normal;
266
+ font-style: normal;
267
+ font-family: Trebuchet MS, Verdana, Arial, Helvetica,sans-serif;
268
+ font-size: 12pt;
269
+ width: 120px;
270
+ background-color:#ff9933;
271
+ border-color: #ffaa44;
272
+ border-width: 2px;
273
+ border-style: ridge;
274
+ height: 30px;
275
+ }
276
+
277
+ a {
278
+ color: blue;
279
+ cursor: pointer;
280
+ font-weight: normal;
281
+ font-family: Verdana, Arial, Helvetica,sans-serif;
282
+ text-decoration: none;
283
+ font-size: 8pt;
284
+ }
285
+
286
+ a:hover {
287
+ color: blue;
288
+ cursor: pointer;
289
+ font-weight: normal;
290
+ font-style: normal;
291
+ text-decoration: underline;
292
+ font-family: Verdana, Arial, Helvetica,sans-serif;
293
+ font-size: 8pt;
294
+ }
295
+
296
+ a:visited {
297
+ color: blue;
298
+ cursor: pointer;
299
+ font-weight: normal;
300
+ font-style: italic;
301
+ font-variant: small-caps;
302
+ text-decoration: underline;
303
+ font-family: Verdana, Arial, Helvetica,sans-serif;
304
+ font-size: 8pt;
305
+ }
306
+
307
+ .button {
308
+ cursor: pointer;
309
+ border: #FFFFFF thin solid;
310
+ border-width: 1px;
311
+ font-weight: bold;
312
+ font-size: 10px;
313
+ color: white;
314
+ line-height: 16px;
315
+ padding-top: 2px;
316
+ padding-right: 2px;
317
+ padding-left: 2px;
318
+ padding-bottom: 2px;
319
+ font-family: Verdana,Arial,Helvetica,sans-serif;
320
+ text-decoration: none;
321
+ background-color: black;
322
+ }
323
+
324
+ .button:hover {
325
+ cursor: pointer;
326
+ border: black thin solid;
327
+ border-width: 1px;
328
+ font-weight: bold;
329
+ font-size: 10px;
330
+ color: Blue;
331
+ line-height: 16px;
332
+ padding-top: 2px;
333
+ padding-right: 2px;
334
+ padding-left: 2px;
335
+ padding-bottom: 2px;
336
+ font-family: Verdana,Arial,Helvetica,sans-serif;
337
+ text-decoration: none;
338
+ background-color: silver;
339
+ }
340
+
341
+ .ensembl {
342
+ color:#5A85D6;
343
+ font-weight: bold;
344
+ text-decoration:none;
345
+ font-family: Verdana,Arial,Helvetica,sans-serif;
346
+ font-size: 10pt;
347
+ background-color:#ffdf27;
348
+ }
349
+