protk 1.3.1.pre3 → 1.4.0

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