diff --git a/ProteoformSuiteGUI/DisplayObjects/DisplayGoTermNumber.cs b/ProteoformSuiteGUI/DisplayObjects/DisplayGoTermNumber.cs index e270ef4f..b1bc9c75 100644 --- a/ProteoformSuiteGUI/DisplayObjects/DisplayGoTermNumber.cs +++ b/ProteoformSuiteGUI/DisplayObjects/DisplayGoTermNumber.cs @@ -10,6 +10,7 @@ namespace ProteoformSuiteGUI { public class DisplayGoTermNumber : DisplayObject { + #region Public Constructors public DisplayGoTermNumber(GoTermNumber g) @@ -48,7 +49,7 @@ public string ID public double p_value { - get { return gtn.by; } + get { return gtn.p_value; } } public double by //benjamini yekutieli calculated after all p-values are calculated @@ -138,5 +139,6 @@ private static string number_format(string property_name) } #endregion Private Methods + } } diff --git a/ProteoformSuiteGUI/DisplayUtility.cs b/ProteoformSuiteGUI/DisplayUtility.cs index 26de9c93..194b9e31 100644 --- a/ProteoformSuiteGUI/DisplayUtility.cs +++ b/ProteoformSuiteGUI/DisplayUtility.cs @@ -197,6 +197,16 @@ public static DataTable FormatTable(List display_objects, IEnumer return dt; } + public static bool CheckForProteinFastas(ComboBox cmb, IEnumerable files) + { + if (Lollipop.file_filters[cmb.SelectedIndex].Contains(".fasta") && files.Any(x => x.Contains(".fasta"))) + { + MessageBox.Show("Usage of protein fasta files is not yet enabled. Please use a protein XML file for now, e.g. from UniProt. (See this site for more information, and let us know there if this is an issue for you: https://github.com/smith-chem-wisc/ProteoformSuite/issues/477.)", "Load Files Message"); + return true; + } + return false; + } + #endregion Public Methods } diff --git a/ProteoformSuiteGUI/LoadDeconvolutionResults.cs b/ProteoformSuiteGUI/LoadDeconvolutionResults.cs index c79b54e2..e49a36e5 100644 --- a/ProteoformSuiteGUI/LoadDeconvolutionResults.cs +++ b/ProteoformSuiteGUI/LoadDeconvolutionResults.cs @@ -205,6 +205,7 @@ private void dgv_quantResults_DragEnter(object sender, DragEventArgs e) private void drag_drop(DragEventArgs e, ComboBox cmb, DataGridView dgv) { string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); + if (DisplayUtility.CheckForProteinFastas(cmb, files)) return; // todo: implement protein fasta usage Sweet.lollipop.enter_input_files(files, Lollipop.acceptable_extensions[cmb.SelectedIndex], Lollipop.file_types[cmb.SelectedIndex], Sweet.lollipop.input_files, true); match_files(); DisplayUtility.FillDataGridView(dgv, Sweet.lollipop.get_files(Sweet.lollipop.input_files, Lollipop.file_types[cmb.SelectedIndex]).Select(f => new DisplayInputFile(f))); @@ -295,6 +296,7 @@ private void add_files(ComboBox cmb, DataGridView dgv) DialogResult dr = openFileDialog.ShowDialog(); if (dr == DialogResult.OK) { + if (DisplayUtility.CheckForProteinFastas(cmb, openFileDialog.FileNames)) return; // todo: implement protein fasta usage Sweet.lollipop.enter_input_files(openFileDialog.FileNames, Lollipop.acceptable_extensions[cmb.SelectedIndex], Lollipop.file_types[cmb.SelectedIndex], Sweet.lollipop.input_files, true); match_files(); } diff --git a/ProteoformSuiteGUI/ProteoformFamilies.cs b/ProteoformSuiteGUI/ProteoformFamilies.cs index 905c7c3c..b38465d2 100644 --- a/ProteoformSuiteGUI/ProteoformFamilies.cs +++ b/ProteoformSuiteGUI/ProteoformFamilies.cs @@ -16,6 +16,23 @@ public partial class ProteoformFamilies : Form, ISweetForm public ProteoformFamilies() { InitializeComponent(); + + //Initialize display options + cmbx_colorScheme.Items.AddRange(CytoscapeScript.color_scheme_names); + cmbx_nodeLayout.Items.AddRange(Lollipop.node_positioning); + cmbx_nodeLabelPositioning.Items.AddRange(CytoscapeScript.node_label_positions); + cmbx_edgeLabel.Items.AddRange(Lollipop.edge_labels); + cmbx_nodeLabel.Items.AddRange(Lollipop.node_labels); + cmbx_geneLabel.Items.AddRange(Lollipop.gene_name_labels.ToArray()); + cmbx_tableSelector.Items.AddRange(table_names); + + cmbx_colorScheme.SelectedIndex = 1; + cmbx_nodeLayout.SelectedIndex = 1; + cmbx_nodeLabelPositioning.SelectedIndex = 0; + cmbx_edgeLabel.SelectedIndex = 1; + cmbx_nodeLabel.SelectedIndex = 1; + cmbx_geneLabel.SelectedIndex = 1; + InitializeParameterSet(); this.AutoScroll = true; this.AutoScrollMinSize = this.ClientSize; @@ -43,21 +60,6 @@ public void initialize_every_time() public void InitializeParameterSet() { - //Initialize display options - cmbx_colorScheme.Items.AddRange(CytoscapeScript.color_scheme_names); - cmbx_nodeLayout.Items.AddRange(Lollipop.node_positioning); - cmbx_nodeLabelPositioning.Items.AddRange(CytoscapeScript.node_label_positions); - cmbx_edgeLabel.Items.AddRange(Lollipop.edge_labels); - cmbx_nodeLabel.Items.AddRange(Lollipop.node_labels); - cmbx_geneLabel.Items.AddRange(Lollipop.gene_name_labels.ToArray()); - cmbx_tableSelector.Items.AddRange(table_names); - - cmbx_colorScheme.SelectedIndex = 1; - cmbx_nodeLayout.SelectedIndex = 1; - cmbx_nodeLabelPositioning.SelectedIndex = 0; - cmbx_edgeLabel.SelectedIndex = 1; - cmbx_nodeLabel.SelectedIndex = 1; - cmbx_geneLabel.SelectedIndex = 1; Lollipop.preferred_gene_label = cmbx_geneLabel.SelectedItem.ToString(); Lollipop.gene_centric_families = cb_geneCentric.Checked; @@ -123,22 +125,17 @@ public void ClearListsTablesFigures(bool clear_following) } } + /// + /// generate report and change selected table names based on # decoy communities + /// public void update_figures_of_merit() { rtb_proteoformFamilyResults.Text = ResultsSummaryGenerator.proteoform_families_report(); - - //change selected table names based on # decoy communities - int decoy_communities = Sweet.lollipop.decoy_proteoform_communities.Count; - for(int i = 0; i < decoy_communities; i++) - { - if (!cmbx_tableSelector.Items.Contains("Decoy Community " + i)) cmbx_tableSelector.Items.Add("Decoy Community " + i); - } - - //if more items than decoy databases, remove later ones //FIX - while(cmbx_tableSelector.Items.Count - 5 - decoy_communities > 0) - { - cmbx_tableSelector.Items.RemoveAt(5 + decoy_communities); - } + int selection = cmbx_tableSelector.SelectedIndex; + cmbx_tableSelector.Items.Clear(); + cmbx_tableSelector.Items.AddRange(table_names); + cmbx_tableSelector.Items.AddRange(Enumerable.Range(0, Sweet.lollipop.decoy_proteoform_communities.Count).Select(i => "Decoy Community " + i).ToArray()); + cmbx_tableSelector.SelectedIndex = selection < cmbx_tableSelector.Items.Count ? selection : 0; } #endregion Public Methods diff --git a/ProteoformSuiteGUI/ProteoformSweet.cs b/ProteoformSuiteGUI/ProteoformSweet.cs index 21287d03..da28bbf2 100644 --- a/ProteoformSuiteGUI/ProteoformSweet.cs +++ b/ProteoformSuiteGUI/ProteoformSweet.cs @@ -210,7 +210,7 @@ private bool load_method() string method_filename = methodFileOpen.FileName; DialogResult d4 = MessageBox.Show("Add files at the listed paths if they still exist?", "Full Run", MessageBoxButtons.YesNoCancel); if (d4 == DialogResult.Cancel) return false; - if (!open_method(File.ReadAllLines(method_filename), d4 == DialogResult.Yes)) + if (!open_method(method_filename, File.ReadAllLines(method_filename), d4 == DialogResult.Yes)) { MessageBox.Show("Method file was not loaded succesffully."); return false; @@ -223,9 +223,9 @@ private bool load_method() return false; } - public bool open_method(string[] lines, bool add_files) + public bool open_method(string methodFilePath, string[] lines, bool add_files) { - bool method_file_success = Sweet.open_method(String.Join(Environment.NewLine, lines), add_files, out string warning); + bool method_file_success = Sweet.open_method(methodFilePath, String.Join(Environment.NewLine, lines), add_files, out string warning); if (warning.Length > 0 && MessageBox.Show("WARNING" + Environment.NewLine + Environment.NewLine + warning, "Open Method", MessageBoxButtons.OKCancel) == DialogResult.Cancel) return false; foreach (ISweetForm form in forms) form.InitializeParameterSet(); @@ -246,7 +246,7 @@ public Stopwatch full_run() DialogResult d4 = MessageBox.Show("Add files at the listed paths if they still exist?", "Full Run", MessageBoxButtons.YesNoCancel); if (d4 == DialogResult.Cancel) return null; - if (!open_method(File.ReadAllLines(filepath), d4 == DialogResult.Yes)) + if (!open_method(filepath, File.ReadAllLines(filepath), d4 == DialogResult.Yes)) { MessageBox.Show("Error in method file. Generate a new method file."); return null; diff --git a/ProteoformSuiteGUI/Quantification.cs b/ProteoformSuiteGUI/Quantification.cs index c9fb1676..9d822b3e 100755 --- a/ProteoformSuiteGUI/Quantification.cs +++ b/ProteoformSuiteGUI/Quantification.cs @@ -20,6 +20,25 @@ public Quantification() InitializeComponent(); this.AutoScroll = true; this.AutoScrollMinSize = this.ClientSize; + + //Initialize display options + cmbx_volcanoChartSelection.Items.AddRange(volcano_selections); + cmbx_colorScheme.Items.AddRange(CytoscapeScript.color_scheme_names); + cmbx_nodeLayout.Items.AddRange(Lollipop.node_positioning); + cmbx_nodeLabelPositioning.Items.AddRange(CytoscapeScript.node_label_positions); + cmbx_edgeLabel.Items.AddRange(Lollipop.edge_labels.ToArray()); + cmbx_nodeLabel.Items.AddRange(Lollipop.node_labels.ToArray()); + cmbx_geneLabel.Items.AddRange(Lollipop.gene_name_labels.ToArray()); + cb_redBorder.Checked = true; + cb_boldLabel.Checked = true; + + cmbx_volcanoChartSelection.SelectedIndex = 0; + cmbx_colorScheme.SelectedIndex = 1; + cmbx_nodeLayout.SelectedIndex = 1; + cmbx_nodeLabelPositioning.SelectedIndex = 0; + cmbx_geneLabel.SelectedIndex = 1; + cmbx_nodeLabel.SelectedIndex = 1; + cmbx_edgeLabel.SelectedIndex = 1; } #endregion Constructor @@ -201,29 +220,10 @@ public void InitializeConditionsParameters() Sweet.lollipop.numerator_condition = cmbx_ratioNumerator.SelectedItem.ToString(); Sweet.lollipop.denominator_condition = cmbx_ratioDenominator.SelectedItem.ToString(); Sweet.lollipop.induced_condition = cmbx_inducedCondition.SelectedItem.ToString(); - cmbx_edgeLabel.Items.AddRange(Lollipop.edge_labels); } public void InitializeParameterSet() { - //Initialize display options - cmbx_volcanoChartSelection.Items.AddRange(volcano_selections); - cmbx_colorScheme.Items.AddRange(CytoscapeScript.color_scheme_names); - cmbx_nodeLayout.Items.AddRange(Lollipop.node_positioning); - cmbx_nodeLabelPositioning.Items.AddRange(CytoscapeScript.node_label_positions); - cmbx_edgeLabel.Items.AddRange(Lollipop.edge_labels.ToArray()); - cmbx_nodeLabel.Items.AddRange(Lollipop.node_labels.ToArray()); - cmbx_geneLabel.Items.AddRange(Lollipop.gene_name_labels.ToArray()); - cb_redBorder.Checked = true; - cb_boldLabel.Checked = true; - - cmbx_volcanoChartSelection.SelectedIndex = 0; - cmbx_colorScheme.SelectedIndex = 1; - cmbx_nodeLayout.SelectedIndex = 1; - cmbx_nodeLabelPositioning.SelectedIndex = 0; - cmbx_geneLabel.SelectedIndex = 1; - cmbx_nodeLabel.SelectedIndex = 1; - cmbx_edgeLabel.SelectedIndex = 1; Lollipop.preferred_gene_label = cmbx_geneLabel.SelectedItem.ToString(); Lollipop.gene_centric_families = cb_geneCentric.Checked; diff --git a/ProteoformSuiteGUI/TheoreticalDatabase.cs b/ProteoformSuiteGUI/TheoreticalDatabase.cs index 0243c808..bc3ea62a 100644 --- a/ProteoformSuiteGUI/TheoreticalDatabase.cs +++ b/ProteoformSuiteGUI/TheoreticalDatabase.cs @@ -45,11 +45,12 @@ private void TheoreticalDatabase_Load(object sender, EventArgs e) initial_load = false; } - private void set_Make_Database_Button() + private bool SetMakeDatabaseButton() { bool ready_to_run = ReadyToRunTheGamut(); btn_downloadUniProtPtmList.Enabled = !ready_to_run && Sweet.lollipop.get_files(Sweet.lollipop.input_files, Purpose.PtmList).Count() == 0; btn_Make_Databases.Enabled = ready_to_run; + return ready_to_run; } private void btn_Make_Databases_Click(object sender, EventArgs e) @@ -278,7 +279,10 @@ private void cb_limitLargePtmSets_CheckedChanged(object sender, EventArgs e) private void dgv_loadFiles_DragDrop(object sender, DragEventArgs e) { drag_drop(e, cmb_loadTable, dgv_loadFiles); - set_Make_Database_Button(); + if (!SetMakeDatabaseButton() && Sweet.lollipop.get_files(Sweet.lollipop.input_files, Purpose.ProteinDatabase).Count() > 0) + { + MessageBox.Show("You still need a PTM list. Please use the \"Donwload UniProt PTM List\" button.", "Enabling Make Database Button"); + } } private void dgv_loadFiles_DragEnter(object sender, DragEventArgs e) @@ -289,6 +293,7 @@ private void dgv_loadFiles_DragEnter(object sender, DragEventArgs e) private void drag_drop(DragEventArgs e, ComboBox cmb, DataGridView dgv) { string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); + if (DisplayUtility.CheckForProteinFastas(cmb, files)) return; // todo: implement protein fasta usage Sweet.lollipop.enter_input_files(files, Lollipop.acceptable_extensions[cmb.SelectedIndex], Lollipop.file_types[cmb.SelectedIndex], Sweet.lollipop.input_files, true); DisplayUtility.FillDataGridView(dgv, Sweet.lollipop.get_files(Sweet.lollipop.input_files, Lollipop.file_types[cmb.SelectedIndex]).Select(f => new DisplayInputFile(f))); DisplayInputFile.FormatInputFileTable(dgv, Lollipop.file_types[cmb.SelectedIndex]); @@ -302,7 +307,10 @@ public void reload_database_list() DisplayUtility.FillDataGridView(dgv_loadFiles, Sweet.lollipop.get_files(Sweet.lollipop.input_files, Lollipop.file_types[cmb_loadTable.SelectedIndex]).Select(f => new DisplayInputFile(f))); DisplayInputFile.FormatInputFileTable(dgv_loadFiles, Lollipop.file_types[cmb_loadTable.SelectedIndex]); initialize_table_bindinglist(); - set_Make_Database_Button(); + if (!SetMakeDatabaseButton() && Sweet.lollipop.get_files(Sweet.lollipop.input_files, Purpose.ProteinDatabase).Count() > 0) + { + MessageBox.Show("You still need a PTM list. Please use the \"Donwload UniProt PTM List\" button.", "Enabling Make Database Button"); + } } private void tb_tableFilter_TextChanged(object sender, EventArgs e) @@ -326,6 +334,7 @@ private void btn_downloadUniProtPtmList_Click(object sender, EventArgs e) DisplayUtility.FillDataGridView(dgv_loadFiles, Sweet.lollipop.get_files(Sweet.lollipop.input_files, Lollipop.file_types[cmb_loadTable.SelectedIndex]).Select(f => new DisplayInputFile(f))); DisplayInputFile.FormatInputFileTable(dgv_loadFiles, Lollipop.file_types[cmb_loadTable.SelectedIndex]); btn_downloadUniProtPtmList.Enabled = false; + SetMakeDatabaseButton(); } #endregion LOAD DATABASES GRID VIEW Private Methods @@ -341,11 +350,17 @@ private void btn_addFiles_Click(object sender, EventArgs e) DialogResult dr = openFileDialog.ShowDialog(); if (dr == DialogResult.OK) + { + if (DisplayUtility.CheckForProteinFastas(cmb_loadTable, openFileDialog.FileNames)) return; // todo: implement protein fasta usage Sweet.lollipop.enter_input_files(openFileDialog.FileNames, Lollipop.acceptable_extensions[cmb_loadTable.SelectedIndex], Lollipop.file_types[cmb_loadTable.SelectedIndex], Sweet.lollipop.input_files, true); + } DisplayUtility.FillDataGridView(dgv_loadFiles, Sweet.lollipop.get_files(Sweet.lollipop.input_files, Lollipop.file_types[cmb_loadTable.SelectedIndex]).Select(f => new DisplayInputFile(f))); DisplayInputFile.FormatInputFileTable(dgv_loadFiles, Lollipop.file_types[cmb_loadTable.SelectedIndex]); - set_Make_Database_Button(); + if (!SetMakeDatabaseButton() && Sweet.lollipop.get_files(Sweet.lollipop.input_files, Purpose.ProteinDatabase).Count() > 0) + { + MessageBox.Show("You still need a PTM list. Please use the \"Donwload UniProt PTM List\" button.", "Enabling Make Database Button"); + } } private void btn_clearFiles_Click(object sender, EventArgs e) @@ -355,7 +370,7 @@ private void btn_clearFiles_Click(object sender, EventArgs e) Sweet.lollipop.input_files = Sweet.lollipop.input_files.Except(files_to_remove).ToList(); DisplayUtility.FillDataGridView(dgv_loadFiles, Sweet.lollipop.get_files(Sweet.lollipop.input_files, Lollipop.file_types[cmb_loadTable.SelectedIndex]).Select(f => new DisplayInputFile(f))); DisplayInputFile.FormatInputFileTable(dgv_loadFiles, Lollipop.file_types[cmb_loadTable.SelectedIndex]); - set_Make_Database_Button(); + SetMakeDatabaseButton(); } #endregion ADD/CLEAR Private Methods diff --git a/ProteoformSuiteInternal/ComponentReader.cs b/ProteoformSuiteInternal/ComponentReader.cs index 8452fae7..e219a4b7 100644 --- a/ProteoformSuiteInternal/ComponentReader.cs +++ b/ProteoformSuiteInternal/ComponentReader.cs @@ -124,7 +124,10 @@ public List remove_monoisotopic_duplicates_harmonics_from_same_scan(L foreach (double missedMonoMass in possibleMissedMonoisotopicsList) { double massTolerance = missedMonoMass / 1000000d * Sweet.lollipop.raw_component_mass_tolerance; - List missedMonoisotopics = scanComps.Where(cp => !removeThese.Contains(cp) && cp.weighted_monoisotopic_mass >= (missedMonoMass - massTolerance) && cp.weighted_monoisotopic_mass <= (missedMonoMass + massTolerance)).ToList(); // this is a list of harmonics to hc + List missedMonoisotopics = scanComps.Where(cp => + !removeThese.Contains(cp) + && cp.weighted_monoisotopic_mass >= (missedMonoMass - massTolerance) + && cp.weighted_monoisotopic_mass <= (missedMonoMass + massTolerance)).ToList(); // this is a list of harmonics to hc foreach (Component c in missedMonoisotopics.Where(m => m.id != sc.id).ToList()) { @@ -164,7 +167,10 @@ public List remove_monoisotopic_duplicates_harmonics_from_same_scan(L foreach (double harmonicMass in possibleHarmonicList) { double massTolerance = harmonicMass / 1000000d * Sweet.lollipop.raw_component_mass_tolerance; - List harmonics = scanComps.Where(cp => !removeThese.Contains(cp) && cp.weighted_monoisotopic_mass >= (harmonicMass - massTolerance) && cp.weighted_monoisotopic_mass <= (harmonicMass + massTolerance)).ToList(); // this is a list of harmonics to hc + List harmonics = scanComps.Where(cp => + !removeThese.Contains(cp) + && cp.weighted_monoisotopic_mass >= (harmonicMass - massTolerance) + && cp.weighted_monoisotopic_mass <= (harmonicMass + massTolerance)).ToList(); // this is a list of harmonics to hc List someHarmonics = harmonics.Where(harmonicComponent => harmonicComponent.id != hc.id).ToList(); foreach (Component h in someHarmonics) // now that we have a list of harmonics to hc, we have to figure out what to do with them { diff --git a/ProteoformSuiteInternal/CytoscapeScript.cs b/ProteoformSuiteInternal/CytoscapeScript.cs index 800020b3..d08f6ac6 100644 --- a/ProteoformSuiteInternal/CytoscapeScript.cs +++ b/ProteoformSuiteInternal/CytoscapeScript.cs @@ -618,7 +618,7 @@ public static void write_styles(List all_families, string styl writer.WriteEndElement(); //NODE PROPERTIES - double max_total_intensity = quantitative != null ? + double max_total_intensity = all_families.Count == 0 ? 0 : quantitative != null ? (double)all_families.SelectMany(f => f.experimental_proteoforms).Max(p => p.quant.intensitySum) : all_families.SelectMany(f => f.experimental_proteoforms).Max(p => p.agg_intensity); writer.WriteStartElement("node"); diff --git a/ProteoformSuiteInternal/ResultsSummaryGenerator.cs b/ProteoformSuiteInternal/ResultsSummaryGenerator.cs index abdaaed5..1763b800 100644 --- a/ProteoformSuiteInternal/ResultsSummaryGenerator.cs +++ b/ProteoformSuiteInternal/ResultsSummaryGenerator.cs @@ -192,8 +192,8 @@ public static string proteoform_families_report() int raw_quant_components_in_fams = identified_families.Concat(ambiguous_families).Concat(unidentified_families).Sum(f => f.experimental_proteoforms.Sum(e => e.lt_quant_components.Count + e.hv_quant_components.Count)); report += raw_quant_components_in_fams + "\tRaw Quantitative Components in Families" + Environment.NewLine; - report += Sweet.lollipop.raw_experimental_components.Count > 0 ? - Math.Round(100 * ((double)raw_quant_components_in_fams / (double)Sweet.lollipop.raw_experimental_components.Count), 2) + "\t% of Raw Quantitative Components in Families" + Environment.NewLine : + report += Sweet.lollipop.raw_quantification_components.Count > 0 ? + Math.Round(100 * ((double)raw_quant_components_in_fams / (double)Sweet.lollipop.raw_quantification_components.Count), 2) + "\t% of Raw Quantitative Components in Families" + Environment.NewLine : "N/A\t% of Raw Quantitative Components in Families" + Environment.NewLine; report += Environment.NewLine; diff --git a/ProteoformSuiteInternal/Sweet.cs b/ProteoformSuiteInternal/Sweet.cs index db94f776..e39b378d 100644 --- a/ProteoformSuiteInternal/Sweet.cs +++ b/ProteoformSuiteInternal/Sweet.cs @@ -14,6 +14,7 @@ public class Sweet { public static Lollipop lollipop = new Lollipop(); + public static string methodFilePath = ""; public static List save_actions = new List(); public static List loaded_actions = new List(); @@ -103,8 +104,9 @@ private static void add_actions(XmlWriter writer) } } - public static bool open_method(string alltext, bool add_files, out string warning_message) + public static bool open_method(string methodFilePath, string alltext, bool add_files, out string warning_message) { + Sweet.methodFilePath = methodFilePath; warning_message = ""; loaded_actions.Clear(); FieldInfo[] lollipop_fields = typeof(Lollipop).GetFields(); @@ -143,6 +145,8 @@ public static bool open_method(string alltext, bool add_files, out string warnin field.SetValue(lollipop, Convert.ChangeType(value, type)); } + lollipop.results_folder = !lollipop.results_folder.StartsWith(".") ? lollipop.results_folder : Path.GetFullPath(Path.Combine(Path.GetDirectoryName(methodFilePath), lollipop.results_folder)); + foreach (XElement action in action_elements) { loaded_actions.Add(GetAttribute(action, "action")); @@ -151,7 +155,7 @@ public static bool open_method(string alltext, bool add_files, out string warnin if (loaded_actions.Any(a => !a.StartsWith("add file ") && !a.StartsWith("change file ") && !a.StartsWith("shift ") && !a.StartsWith("accept ") && !a.StartsWith("unaccept "))) return false; - if (add_files) add_files_from_presets(lollipop.input_files); + if (add_files) add_files_from_presets(lollipop.input_files); else update_files_from_presets(lollipop.input_files); return true; } @@ -162,12 +166,12 @@ public static bool open_method(string alltext, bool add_files, out string warnin public static void add_file_action(InputFile file) { - save_actions.Add("add file " + file.complete_path + " with purpose " + file.purpose.ToString()); + save_actions.Add("add file '" + file.complete_path + "' with purpose " + file.purpose.ToString()); } public static void change_file(InputFile file, object property, string property_name, string from, string to) { - save_actions.Add("change file " + file.complete_path + " property " + property_name + " of type " + property.GetType().FullName + " from " + from + " to " + to); + save_actions.Add("change file '" + file.complete_path + "' with purpose " + file.purpose + " property " + property_name + " of type " + property.GetType().FullName + " from " + from + " to " + to); } public static void accept_peak_action(IMassDifference peak) @@ -187,12 +191,13 @@ public static void shift_peak_action(DeltaMassPeak peak) public static void add_files_from_presets(List destination) { - Regex findaddfile = new Regex(@"add file (\S+)"); - Regex findpurpose = new Regex(@"purpose (.+)"); + Regex findaddfile = new Regex(@"(add file ')(.+)(' with purpose )"); + Regex findpurpose = new Regex(@"( purpose )(.+)"); foreach (string add_file in loaded_actions.Where(x => x.StartsWith("add file "))) { - string filepath = findaddfile.Match(add_file).Groups[1].ToString(); - Purpose? purpose = ExtensionMethods.EnumUntil.GetValues().FirstOrDefault(p => findpurpose.Match(add_file).Groups[1].ToString() == p.ToString()); + string filestring = findaddfile.Match(add_file).Groups[2].ToString(); + string filepath = !filestring.StartsWith(".") ? filestring : Path.GetFullPath(Path.Combine(Path.GetDirectoryName(methodFilePath), filestring)); + Purpose? purpose = ExtensionMethods.EnumUntil.GetValues().FirstOrDefault(p => findpurpose.Match(add_file).Groups[2].ToString() == p.ToString()); if (purpose == null || !File.Exists(filepath)) continue; string ext = Path.GetExtension(filepath); @@ -203,17 +208,20 @@ public static void add_files_from_presets(List destination) public static void update_files_from_presets(List destination) { - Regex findchangefile = new Regex(@"change file (\S+)"); - Regex findproperty = new Regex(@" property (\S+)"); - Regex findtype = new Regex(@" type (\S+)"); - Regex findto = new Regex(@" to (.+)"); // matches to end of line + Regex findchangefile = new Regex(@"(change file ')(.+)(' with purpose )"); + Regex findpurpose = new Regex(@"( purpose )(.+)( property )"); + Regex findproperty = new Regex(@"( property )(\S+)"); + Regex findtype = new Regex(@"( type )(\S+)"); + Regex findto = new Regex(@"( to )(.+)"); // matches to end of line foreach (string change_file in loaded_actions.Where(x => x.StartsWith("change file "))) { - string filename = Path.GetFileName(findchangefile.Match(change_file).Groups[1].ToString()); - string property = findproperty.Match(change_file).Groups[1].ToString(); - string typefullname = findtype.Match(change_file).Groups[1].ToString(); - string value = findto.Match(change_file).Groups[1].ToString(); - InputFile file = destination.FirstOrDefault(f => Path.GetFileName(f.complete_path) == filename); //match the filename, not the path, in case it changed folders + string filestring = findchangefile.Match(change_file).Groups[2].ToString(); + string filepath = !filestring.StartsWith(".") ? filestring : Path.GetFullPath(Path.Combine(Path.GetDirectoryName(methodFilePath), filestring)); + string property = findproperty.Match(change_file).Groups[2].ToString(); + string typefullname = findtype.Match(change_file).Groups[2].ToString(); + string value = findto.Match(change_file).Groups[2].ToString(); + Purpose? purpose = ExtensionMethods.EnumUntil.GetValues().FirstOrDefault(p => findpurpose.Match(change_file).Groups[2].ToString() == p.ToString()); + InputFile file = destination.FirstOrDefault(f => f.complete_path == filepath && f.purpose == purpose); //match the filename, not the path, in case it changed folders PropertyInfo propertyinfo = typeof(InputFile).GetProperties().FirstOrDefault(p => p.Name == property); Type type = Type.GetType(typefullname); @@ -224,19 +232,19 @@ public static void update_files_from_presets(List destination) } } - private static Regex findmass = new Regex(@"mass (\S+)"); + private static Regex findmass = new Regex(@"(mass )(\S+)"); public static void mass_shifts_from_presets() { - Regex findshift = new Regex(@" by (.+)"); - Regex findshiftrelationtype = new Regex(@"shift (\S+)"); + Regex findshift = new Regex(@"( by )(.+)"); + Regex findshiftrelationtype = new Regex(@"(shift )(\S+)"); foreach (string mass_shift in loaded_actions.Where(x => x.StartsWith("shift "))) { - string relationshiptype = findshiftrelationtype.Match(mass_shift).Groups[1].ToString(); + string relationshiptype = findshiftrelationtype.Match(mass_shift).Groups[2].ToString(); ProteoformComparison? comparison = ExtensionMethods.EnumUntil.GetValues().FirstOrDefault(x => relationshiptype == x.ToString()); - bool converted = Double.TryParse(findmass.Match(mass_shift).Groups[1].ToString(), out double mass); + bool converted = Double.TryParse(findmass.Match(mass_shift).Groups[2].ToString(), out double mass); if (comparison == null || !converted) continue; - string shift = findshift.Match(mass_shift).Groups[1].ToString(); + string shift = findshift.Match(mass_shift).Groups[2].ToString(); DeltaMassPeak peak = null; if (comparison == ProteoformComparison.ExperimentalTheoretical) peak = lollipop.et_peaks.FirstOrDefault(p => Math.Round(p.DeltaMass, 4) == Math.Round(mass, 4)); @@ -250,12 +258,12 @@ public static void mass_shifts_from_presets() public static void update_peaks_from_presets(ProteoformComparison comparison_to_update) { - Regex findacceptrelationtype = new Regex(@"accept (\S+)"); + Regex findacceptrelationtype = new Regex(@"(accept )(\S+)"); foreach (string peak_change in loaded_actions.Where(x => x.StartsWith("accept ") || x.StartsWith("unaccept "))) { - string relationshiptype = findacceptrelationtype.Match(peak_change).Groups[1].ToString(); + string relationshiptype = findacceptrelationtype.Match(peak_change).Groups[2].ToString(); ProteoformComparison? comparison = ExtensionMethods.EnumUntil.GetValues().FirstOrDefault(x => relationshiptype == x.ToString()); - bool converted = Double.TryParse(findmass.Match(peak_change).Groups[1].ToString(), out double mass); + bool converted = Double.TryParse(findmass.Match(peak_change).Groups[2].ToString(), out double mass); if (comparison == null || comparison != comparison_to_update || !converted) continue; DeltaMassPeak peak = null; diff --git a/README.md b/README.md index 9513d02a..2da85c0b 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,12 @@ Software for constructing, quantifying, and visualizing proteoform families. [![Build status](https://ci.appveyor.com/api/projects/status/qbc3xy4b35otnsxe/branch/master?svg=true)](https://ci.appveyor.com/project/stefanks/proteoform-suite/branch/master) [![Coverage Status](https://coveralls.io/repos/github/smith-chem-wisc/proteoform-suite/badge.svg?branch=master)](https://coveralls.io/github/smith-chem-wisc/proteoform-suite?branch=master) +## Papers + +* [Proteoform Suite: Software for Constructing, Quantifying, and Visualizing Proteoform Families. (2017, _J. Proteome Res._)](http://pubs.acs.org/doi/10.1021/acs.jproteome.7b00685) + +* [Elucidating _Escherichia coli_ Proteoform Families Using Intact-Mass Proteomics and a Global PTM Discovery Database. (2017, _J. Proteome Res._)](http://pubs.acs.org/doi/abs/10.1021/acs.jproteome.7b00516) + ## Latest Release and Vignette The latest release and vignette can be found [here](https://github.com/smith-chem-wisc/ProteoformSuite/releases/latest). diff --git a/Test/TestDeltaMassPeak.cs b/Test/TestDeltaMassPeak.cs index 6fd7ec5f..ecae9eca 100644 --- a/Test/TestDeltaMassPeak.cs +++ b/Test/TestDeltaMassPeak.cs @@ -294,7 +294,7 @@ public void shift_et_peak_neucode_from_actions() d2.mass_shifter = null; using (StreamWriter file = new StreamWriter(Path.Combine(TestContext.CurrentContext.TestDirectory, "method.xml"))) file.WriteLine(Sweet.save_method()); - Sweet.open_method(String.Join(Environment.NewLine, File.ReadAllLines(Path.Combine(TestContext.CurrentContext.TestDirectory, "method.xml"))), true, out string warning); + Sweet.open_method(Path.Combine(TestContext.CurrentContext.TestDirectory, "method.xml"), String.Join(Environment.NewLine, File.ReadAllLines(Path.Combine(TestContext.CurrentContext.TestDirectory, "method.xml"))), true, out string warning); Sweet.mass_shifts_from_presets(); d2.shift_experimental_masses(Convert.ToInt32(d2.mass_shifter), true); diff --git a/Test/TestInputFile.cs b/Test/TestInputFile.cs index ced992f8..ce1a7bfc 100644 --- a/Test/TestInputFile.cs +++ b/Test/TestInputFile.cs @@ -53,7 +53,7 @@ public void enter_directory_of_files_updated_with_presets() Sweet.change_file(mock, mock.biological_replicate, nameof(mock.biological_replicate), mock.biological_replicate.ToString(), "2"); using (StreamWriter file = new StreamWriter(Path.Combine(TestContext.CurrentContext.TestDirectory, "method.xml"))) file.WriteLine(Sweet.save_method()); - Sweet.open_method(String.Join(Environment.NewLine, File.ReadAllLines(Path.Combine(TestContext.CurrentContext.TestDirectory, "method.xml"))), true, out string warning); + Sweet.open_method(Path.Combine(TestContext.CurrentContext.TestDirectory, "method.xml"), String.Join(Environment.NewLine, File.ReadAllLines(Path.Combine(TestContext.CurrentContext.TestDirectory, "method.xml"))), true, out string warning); Sweet.lollipop.enter_input_files(folder, extension, purpose, destination, true); Assert.AreEqual(2, destination.Count); Assert.True(destination.All(f => f.extension == extension[0])); @@ -74,7 +74,7 @@ public void add_file_from_presets() Sweet.change_file(mock, mock.biological_replicate, nameof(mock.biological_replicate), mock.biological_replicate.ToString(), "2"); using (StreamWriter file = new StreamWriter(Path.Combine(TestContext.CurrentContext.TestDirectory, "method.xml"))) file.WriteLine(Sweet.save_method()); - Sweet.open_method(String.Join(Environment.NewLine, File.ReadAllLines(Path.Combine(TestContext.CurrentContext.TestDirectory, "method.xml"))), true, out string warning); + Sweet.open_method(Path.Combine(TestContext.CurrentContext.TestDirectory, "method.xml"), String.Join(Environment.NewLine, File.ReadAllLines(Path.Combine(TestContext.CurrentContext.TestDirectory, "method.xml"))), true, out string warning); Sweet.add_files_from_presets(destination); Assert.AreEqual(1, destination.Count); Assert.True(destination[0].lt_condition == "Normal"); diff --git a/Test/TestLoadAndRun.cs b/Test/TestLoadAndRun.cs index 305969fa..3f2fbcf2 100755 --- a/Test/TestLoadAndRun.cs +++ b/Test/TestLoadAndRun.cs @@ -1,5 +1,6 @@ using NUnit.Framework; using ProteoformSuiteInternal; +using System.IO; namespace Test { @@ -42,7 +43,7 @@ public void test_load_and_run() Sweet.lollipop.ee_max_RetentionTime_difference = 2.5; Sweet.lollipop.peak_width_base_ee = 0.015; //load method --> should switch parametetrs to saved - Sweet.open_method(saved_method, false, out string warning); + Sweet.open_method(Path.Combine(TestContext.CurrentContext.TestDirectory, "method.xml"), saved_method, false, out string warning); //tests that the method settings properly a) saved b)loaded up above Assert.AreEqual(3, Sweet.lollipop.min_lysine_ct); diff --git a/Test/TestSaveState.cs b/Test/TestSaveState.cs index a2d64920..16824c81 100644 --- a/Test/TestSaveState.cs +++ b/Test/TestSaveState.cs @@ -61,7 +61,7 @@ public void restore_lollipop_settings() else continue; } - Sweet.open_method(builder.ToString(), false, out string warning); + Sweet.open_method("", builder.ToString(), false, out string warning); foreach (PropertyInfo property in typeof(Lollipop).GetProperties()) { if (property.PropertyType == typeof(int)) @@ -120,7 +120,7 @@ public void test_accept_from_presets() Sweet.unaccept_peak_action(pr2); using (StreamWriter file = new StreamWriter(Path.Combine(TestContext.CurrentContext.TestDirectory, "method.xml"))) file.WriteLine(Sweet.save_method()); - Sweet.open_method(String.Join(Environment.NewLine, File.ReadAllLines(Path.Combine(TestContext.CurrentContext.TestDirectory, "method.xml"))), true, out string warning); + Sweet.open_method(Path.Combine(TestContext.CurrentContext.TestDirectory, "method.xml"), String.Join(Environment.NewLine, File.ReadAllLines(Path.Combine(TestContext.CurrentContext.TestDirectory, "method.xml"))), true, out string warning); Sweet.lollipop.ee_peaks = test_community.accept_deltaMass_peaks(prs2, new List()); Assert.AreEqual(1, Sweet.lollipop.ee_peaks.Count); DeltaMassPeak peak = Sweet.lollipop.ee_peaks[0]; diff --git a/Vignettes/Identification, Quantification, and Visualization of Yeast Proteoforms/protein_list_170807.txt b/Vignettes/Identification, Quantification, and Visualization of Yeast Proteoforms/protein_list_170807.txt new file mode 100644 index 00000000..37a13240 --- /dev/null +++ b/Vignettes/Identification, Quantification, and Visualization of Yeast Proteoforms/protein_list_170807.txt @@ -0,0 +1,1766 @@ +O13516 +O13527 +O13535 +O13563 +O14455 +O14467 +O42831 +O43137 +O74700 +O77727 +P00044 +P00045 +P00128 +P00175 +P00330 +P00331 +P00358 +P00359 +P00360 +P00401 +P00410 +P00424 +P00425 +P00427 +P00431 +P00445 +P00447 +P00498 +P00546 +P00549 +P00560 +P00635 +P00724 +P00729 +P00761 +P00812 +P00815 +P00817 +P00830 +P00890 +P00899 +P00924 +P00925 +P00927 +P00931 +P00937 +P00942 +P00950 +P00958 +P01097 +P01119 +P01120 +P01123 +P02293 +P02294 +P02309 +P02381 +P02400 +P02406 +P02407 +P02557 +P02662 +P02769 +P02829 +P02992 +P02994 +P03871 +P03962 +P03965 +P04037 +P04046 +P04050 +P04076 +P04147 +P04161 +P04264 +P04449 +P04456 +P04710 +P04801 +P04802 +P04806 +P04807 +P04840 +P04911 +P04912 +P05030 +P05150 +P05317 +P05319 +P05373 +P05374 +P05375 +P05453 +P05626 +P05694 +P05737 +P05738 +P05739 +P05740 +P05743 +P05744 +P05745 +P05748 +P05749 +P05750 +P05755 +P05756 +P05759 +P06100 +P06101 +P06103 +P06105 +P06106 +P06115 +P06168 +P06169 +P06197 +P06208 +P06245 +P06367 +P06634 +P06704 +P06738 +P06780 +P06781 +P06782 +P06785 +P06787 +P07143 +P07149 +P07170 +P07172 +P07213 +P07244 +P07245 +P07246 +P07251 +P07253 +P07256 +P07257 +P07258 +P07259 +P07260 +P07262 +P07263 +P07264 +P07267 +P07273 +P07274 +P07275 +P07277 +P07278 +P07280 +P07281 +P07283 +P07284 +P07285 +P07342 +P07347 +P07560 +P07702 +P07703 +P07806 +P08067 +P08417 +P08456 +P08465 +P08466 +P08518 +P08524 +P08525 +P08536 +P08566 +P08679 +P09032 +P09064 +P09232 +P09435 +P09436 +P09440 +P09457 +P09624 +P09733 +P09734 +P09938 +P09950 +P0C0T4 +P0C0V8 +P0C0W1 +P0C0W9 +P0C0X0 +P0C2H6 +P0C2H7 +P0C2H8 +P0C2H9 +P0C2I5 +P0C2I6 +P0C2I7 +P0C2J0 +P0C2J1 +P0C2J2 +P0C2J3 +P0C2J5 +P0CH08 +P0CH09 +P0CS90 +P0CT04 +P0CX23 +P0CX24 +P0CX25 +P0CX26 +P0CX27 +P0CX28 +P0CX29 +P0CX30 +P0CX31 +P0CX32 +P0CX33 +P0CX34 +P0CX35 +P0CX36 +P0CX37 +P0CX38 +P0CX39 +P0CX40 +P0CX41 +P0CX42 +P0CX43 +P0CX44 +P0CX45 +P0CX46 +P0CX47 +P0CX48 +P0CX49 +P0CX50 +P0CX51 +P0CX52 +P0CX53 +P0CX54 +P0CX55 +P0CX56 +P0CX61 +P0CX62 +P0CX82 +P0CX83 +P0CX84 +P0CX85 +P10080 +P10081 +P10507 +P10591 +P10592 +P10614 +P10659 +P10662 +P10664 +P10823 +P10869 +P10964 +P11075 +P11076 +P11154 +P11353 +P11412 +P11484 +P11491 +P11632 +P11633 +P11745 +P11792 +P11914 +P12385 +P12611 +P12612 +P12683 +P12684 +P12686 +P12688 +P12695 +P12709 +P12754 +P12904 +P12945 +P12962 +P13188 +P13298 +P13393 +P13517 +P13645 +P13663 +P13856 +P14020 +P14065 +P14120 +P14126 +P14127 +P14306 +P14540 +P14741 +P14742 +P14743 +P14772 +P14832 +P14843 +P14904 +P14906 +P14907 +P15019 +P15108 +P15180 +P15274 +P15303 +P15367 +P15424 +P15454 +P15496 +P15565 +P15624 +P15625 +P15646 +P15700 +P15703 +P15705 +P15731 +P15790 +P15807 +P15873 +P15891 +P15992 +P16120 +P16140 +P16387 +P16451 +P16467 +P16474 +P16521 +P16547 +P16550 +P16603 +P16622 +P16649 +P16861 +P16862 +P16965 +P17076 +P17106 +P17157 +P17255 +P17423 +P17442 +P17505 +P17536 +P17555 +P17558 +P17649 +P17695 +P17709 +P17891 +P17967 +P18238 +P18239 +P18408 +P18544 +P18562 +P18759 +P19073 +P19097 +P19146 +P19262 +P19358 +P19414 +P19454 +P19524 +P19657 +P19881 +P19882 +P19955 +P20049 +P20051 +P20081 +P20084 +P20424 +P20433 +P20434 +P20435 +P20436 +P20447 +P20448 +P20449 +P20459 +P20486 +P20604 +P20606 +P20967 +P21147 +P21182 +P21242 +P21243 +P21269 +P21304 +P21306 +P21375 +P21524 +P21560 +P21576 +P21672 +P21734 +P21771 +P21801 +P21825 +P21827 +P21954 +P21965 +P22135 +P22137 +P22138 +P22139 +P22141 +P22146 +P22147 +P22202 +P22203 +P22213 +P22214 +P22217 +P22276 +P22336 +P22353 +P22354 +P22515 +P22517 +P22696 +P22768 +P22803 +P22936 +P22943 +P23180 +P23202 +P23248 +P23254 +P23285 +P23291 +P23292 +P23301 +P23369 +P23542 +P23594 +P23595 +P23615 +P23638 +P23639 +P23641 +P23644 +P23724 +P23776 +P23833 +P24000 +P24280 +P24521 +P24783 +P24784 +P25039 +P25043 +P25045 +P25087 +P25293 +P25294 +P25296 +P25297 +P25340 +P25342 +P25343 +P25349 +P25367 +P25368 +P25372 +P25373 +P25374 +P25375 +P25382 +P25384 +P25385 +P25441 +P25443 +P25451 +P25491 +P25554 +P25560 +P25566 +P25567 +P25574 +P25586 +P25605 +P25617 +P25623 +P25626 +P25631 +P25635 +P25642 +P25644 +P25654 +P25655 +P25694 +P25719 +P26263 +P26321 +P26570 +P26637 +P26754 +P26755 +P26783 +P26784 +P26785 +P26786 +P26793 +P27466 +P27472 +P27476 +P27514 +P27614 +P27616 +P27692 +P27809 +P27810 +P27882 +P27999 +P28000 +P28007 +P28241 +P28272 +P28273 +P28274 +P28319 +P28321 +P28495 +P28625 +P28707 +P28777 +P28789 +P28834 +P29055 +P29295 +P29311 +P29453 +P29478 +P29509 +P29547 +P29704 +P29952 +P30624 +P30656 +P30657 +P30771 +P30822 +P30902 +P31109 +P31116 +P31373 +P31382 +P31383 +P31384 +P31412 +P31539 +P31688 +P31787 +P32074 +P32178 +P32179 +P32191 +P32263 +P32264 +P32288 +P32316 +P32319 +P32324 +P32327 +P32331 +P32332 +P32335 +P32337 +P32340 +P32341 +P32342 +P32349 +P32352 +P32356 +P32366 +P32368 +P32377 +P32379 +P32381 +P32386 +P32388 +P32419 +P32445 +P32447 +P32449 +P32453 +P32454 +P32457 +P32458 +P32463 +P32465 +P32466 +P32468 +P32469 +P32471 +P32472 +P32473 +P32476 +P32477 +P32481 +P32485 +P32486 +P32492 +P32495 +P32496 +P32497 +P32499 +P32502 +P32503 +P32521 +P32527 +P32528 +P32558 +P32561 +P32563 +P32565 +P32568 +P32582 +P32588 +P32589 +P32590 +P32598 +P32599 +P32602 +P32607 +P32608 +P32610 +P32611 +P32614 +P32621 +P32626 +P32628 +P32642 +P32643 +P32656 +P32657 +P32767 +P32769 +P32771 +P32774 +P32787 +P32790 +P32791 +P32793 +P32799 +P32802 +P32803 +P32835 +P32836 +P32860 +P32861 +P32864 +P32867 +P32874 +P32891 +P32892 +P32895 +P32897 +P32898 +P32899 +P32902 +P32904 +P32905 +P32909 +P32911 +P32914 +P32915 +P32916 +P32939 +P33201 +P33202 +P33204 +P33296 +P33297 +P33298 +P33299 +P33302 +P33307 +P33308 +P33313 +P33315 +P33317 +P33322 +P33324 +P33327 +P33328 +P33329 +P33330 +P33331 +P33333 +P33338 +P33399 +P33401 +P33416 +P33442 +P33734 +P33750 +P33754 +P33755 +P33759 +P33767 +P33775 +P33892 +P34087 +P34160 +P34162 +P34167 +P34216 +P34221 +P34227 +P34232 +P34241 +P34247 +P34253 +P34730 +P34760 +P35176 +P35178 +P35180 +P35189 +P35191 +P35194 +P35195 +P35197 +P35202 +P35207 +P35527 +P35691 +P35719 +P35723 +P35729 +P35732 +P35844 +P35908 +P35997 +P36000 +P36006 +P36007 +P36008 +P36010 +P36013 +P36015 +P36016 +P36017 +P36018 +P36036 +P36037 +P36041 +P36047 +P36049 +P36060 +P36068 +P36069 +P36081 +P36086 +P36088 +P36105 +P36112 +P36121 +P36136 +P36139 +P36148 +P36152 +P36154 +P36156 +P36160 +P36421 +P36516 +P36517 +P36519 +P36520 +P36521 +P36526 +P36527 +P36528 +P36531 +P36534 +P36775 +P37012 +P37261 +P37262 +P37263 +P37291 +P37292 +P37298 +P37299 +P37302 +P37303 +P37838 +P37898 +P38009 +P38011 +P38013 +P38061 +P38063 +P38064 +P38066 +P38068 +P38069 +P38071 +P38074 +P38075 +P38077 +P38079 +P38080 +P38081 +P38088 +P38112 +P38113 +P38115 +P38116 +P38120 +P38130 +P38137 +P38143 +P38145 +P38152 +P38174 +P38175 +P38182 +P38197 +P38203 +P38205 +P38210 +P38217 +P38219 +P38225 +P38230 +P38234 +P38235 +P38238 +P38249 +P38250 +P38251 +P38256 +P38260 +P38264 +P38281 +P38286 +P38295 +P38300 +P38314 +P38323 +P38325 +P38328 +P38331 +P38332 +P38333 +P38341 +P38353 +P38426 +P38427 +P38428 +P38431 +P38523 +P38555 +P38604 +P38616 +P38620 +P38623 +P38624 +P38625 +P38626 +P38627 +P38628 +P38629 +P38630 +P38631 +P38636 +P38687 +P38688 +P38689 +P38694 +P38697 +P38698 +P38701 +P38707 +P38708 +P38710 +P38711 +P38712 +P38715 +P38716 +P38719 +P38720 +P38732 +P38736 +P38737 +P38754 +P38755 +P38764 +P38765 +P38771 +P38773 +P38777 +P38779 +P38784 +P38786 +P38787 +P38788 +P38791 +P38792 +P38795 +P38797 +P38801 +P38804 +P38805 +P38810 +P38811 +P38816 +P38817 +P38821 +P38828 +P38829 +P38833 +P38836 +P38840 +P38841 +P38858 +P38861 +P38879 +P38885 +P38886 +P38891 +P38892 +P38902 +P38910 +P38911 +P38912 +P38922 +P38930 +P38934 +P38958 +P38962 +P38968 +P38972 +P38985 +P38986 +P38988 +P38993 +P38996 +P38998 +P38999 +P39007 +P39013 +P39015 +P39076 +P39077 +P39078 +P39079 +P39101 +P39106 +P39107 +P39109 +P39111 +P39516 +P39517 +P39522 +P39533 +P39567 +P39676 +P39683 +P39692 +P39704 +P39705 +P39708 +P39714 +P39719 +P39721 +P39726 +P39729 +P39730 +P39742 +P39743 +P39744 +P39926 +P39929 +P39931 +P39935 +P39936 +P39938 +P39939 +P39940 +P39954 +P39958 +P39960 +P39966 +P39968 +P39976 +P39979 +P39985 +P39986 +P39987 +P39990 +P40005 +P40007 +P40008 +P40010 +P40016 +P40024 +P40029 +P40032 +P40033 +P40035 +P40037 +P40040 +P40046 +P40047 +P40053 +P40054 +P40055 +P40056 +P40064 +P40069 +P40075 +P40078 +P40079 +P40081 +P40086 +P40089 +P40093 +P40106 +P40150 +P40159 +P40165 +P40185 +P40202 +P40212 +P40215 +P40217 +P40302 +P40303 +P40312 +P40319 +P40327 +P40339 +P40347 +P40348 +P40363 +P40364 +P40413 +P40414 +P40452 +P40462 +P40471 +P40477 +P40482 +P40483 +P40491 +P40495 +P40496 +P40505 +P40506 +P40509 +P40510 +P40513 +P40515 +P40516 +P40518 +P40529 +P40531 +P40540 +P40545 +P40553 +P40579 +P40580 +P40581 +P40582 +P40693 +P40825 +P40850 +P40858 +P40892 +P40893 +P40958 +P40961 +P40970 +P40989 +P40991 +P41056 +P41057 +P41058 +P41277 +P41338 +P41543 +P41734 +P41805 +P41807 +P41810 +P41811 +P41814 +P41816 +P41819 +P41911 +P41920 +P41921 +P41939 +P41940 +P42842 +P42847 +P42935 +P42938 +P42940 +P42941 +P42942 +P42943 +P42945 +P42949 +P43123 +P43321 +P43535 +P43555 +P43569 +P43577 +P43585 +P43586 +P43588 +P43590 +P43591 +P43593 +P43594 +P43603 +P43613 +P43616 +P43619 +P43621 +P43639 +P45818 +P45978 +P46367 +P46654 +P46655 +P46669 +P46672 +P46680 +P46683 +P46784 +P46948 +P46956 +P46959 +P46969 +P46971 +P46984 +P46985 +P46988 +P46989 +P46990 +P46992 +P47006 +P47008 +P47017 +P47018 +P47019 +P47031 +P47035 +P47039 +P47044 +P47047 +P47054 +P47068 +P47075 +P47076 +P47079 +P47089 +P47093 +P47096 +P47098 +P47100 +P47117 +P47119 +P47120 +P47123 +P47124 +P47127 +P47131 +P47133 +P47137 +P47141 +P47143 +P47148 +P47150 +P47154 +P47160 +P47165 +P47169 +P47176 +P47771 +P47912 +P48015 +P48164 +P48231 +P48234 +P48361 +P48362 +P48363 +P48415 +P48439 +P48567 +P48570 +P48589 +P48606 +P48836 +P49017 +P49089 +P49090 +P49166 +P49167 +P49334 +P49367 +P49435 +P49626 +P49687 +P49723 +P49954 +P50085 +P50086 +P50087 +P50094 +P50095 +P50106 +P50107 +P50108 +P50623 +P50861 +P50945 +P51401 +P51402 +P51534 +P51601 +P51996 +P51998 +P52286 +P52489 +P52553 +P52593 +P52893 +P52910 +P52917 +P53040 +P53043 +P53044 +P53045 +P53049 +P53066 +P53072 +P53073 +P53075 +P53078 +P53081 +P53090 +P53111 +P53115 +P53128 +P53131 +P53136 +P53141 +P53145 +P53152 +P53163 +P53166 +P53172 +P53178 +P53183 +P53184 +P53192 +P53193 +P53199 +P53200 +P53206 +P53210 +P53218 +P53221 +P53228 +P53235 +P53250 +P53252 +P53254 +P53256 +P53261 +P53271 +P53276 +P53281 +P53295 +P53297 +P53299 +P53303 +P53312 +P53319 +P53326 +P53330 +P53332 +P53538 +P53549 +P53550 +P53551 +P53598 +P53600 +P53615 +P53617 +P53622 +P53633 +P53691 +P53721 +P53723 +P53724 +P53730 +P53731 +P53732 +P53738 +P53741 +P53742 +P53756 +P53834 +P53839 +P53845 +P53846 +P53849 +P53852 +P53854 +P53859 +P53860 +P53868 +P53875 +P53881 +P53883 +P53889 +P53897 +P53898 +P53900 +P53903 +P53905 +P53909 +P53912 +P53914 +P53920 +P53927 +P53929 +P53941 +P53949 +P53978 +P53981 +P53982 +P54113 +P54114 +P54115 +P54780 +P54781 +P54783 +P54837 +P54838 +P54839 +P54860 +P54861 +P54885 +P56628 +P60010 +P61830 +P62979 +P80210 +P81449 +P81451 +P87108 +P87262 +P89105 +P89886 +pancy=0.00(1/3867)];#aa92[Sodium on D,info:occupancy=0.00(1/3867)];#aa90[Sodium on D,info:occupancy=0.00(1/3867)];#aa92[Sodium on D,info:occupancy=0.00(1/3867)];#aa70[Sodium on E,info:occupancy=0.00(1/2239)];#aa92[Sodium on D,info:occupancy=0.00(1/3867)];#aa67[Fe[III] on E,info:occupancy=0.00(1/2239)];#aa97[Acetyllysine,info:occupancy=0.00(1/4068)];#aa85[Methyl on N,info:occupancy=0.00(1/3867)];#aa85[Methyl on N,info:occupancy=0.00(1/3867)];#aa91[DiMethyl on N,info:occupancy=0.00(1/3867)];#aa97[Acetyllysine,info:occupancy=0.00(1/4068)];#aa88[dHex(1)Hex(3)HexNAc(2) on T,info:occupancy=0.00(1/3867)];#aa92[Sodium on D,info:occupancy=0.00(1/3867)];#aa97[DiMethyl on K,info:occupancy=0.00(1/4068)];#aa97[DiMethyl on K,info:occupancy=0.00(1/4068)];#aa87[Deamidation on N,info:occupancy=0.00(1/3867)];#aa91[DiMethyl on N,info:occupancy=0.00(1/3867)];#aa97[Acetyllysine,info:occupancy=0.00(1/4068)];#aa70[Methyl on E,info:occupancy=0.00(1/2239)];#aa74[Methyl on N,info:occupancy=0.00(1/2239)];#aa92[Calcium on D,info:occupancy=0.00(1/3867)];#aa87[Deamidation on N,info:occupancy=0.00(1/3867)];#aa97[TriMethylation,info:occupancy=0.00(1/4068)];#aa92[Fe[II] on D,info:occupancy=0.00(1/3867)];#aa67[Methyl on E,info:occupancy=0.00(1/2239)];#aa92[Oxidation on D,info:occupancy=0.00(1/3867)];#aa77[Acetyllysine,info:occupancy=0.00(1/5452)];#aa67[Calcium on E,info:occupancy=0.00(1/2239)];#aa77[Carbamidomethyl,info:occupancy=0.00(1/5452)];#aa74[DiMethyl on N,info:occupancy=0.00(1/2239)];#aa90[Sodium on D,info:occupancy=0.00(1/3867)];#aa77[TriMethylation,info:occupancy=0.00(1/5452)];#aa90[Sodium on D,info:occupancy=0.00(1/3867)];#aa77[TriMethylation,info:occupancy=0.00(1/5452)];#aa90[Sodium on D,info:occupancy=0.00(1/3867)];#aa69[Deamidation on N,info:occupancy=0.00(1/2239)];#aa77[DiMethyl on K,info:occupancy=0.00(1/5452)];#aa90[Sodium on D,info:occupancy=0.00(1/3867)];#aa77[Acetyllysine,info:occupancy=0.00(1/5452)];#aa77[Acetyllysine,info:occupancy=0.00(1/5452)];#aa90[Oxidation on D,info:occupancy=0.00(1/3867)];#aa97[Acetyllysine,info:occupancy=0.00(1/4068)];#aa77[Carbamidomethyl,info:occupancy=0.00(1/5452)];#aa92[Oxidation on D,info:occupancy=0.00(1/3867)];#aa90[Fe[III] on D,info:occupancy=0.00(1/3867)];#aa97[Hex on K,info:occupancy=0.00(1/4068)];#aa88[Hex on T,info:occupancy=0.00(1/3867)];#aa90[Fe[III] on D,info:occupancy=0.00(1/3867)];#aa80[Hex on T,info:occupancy=0.00(1/3867)];#aa90[Fe[III] on D,info:occupancy=0.00(1/3867)];#aa92[Sodium on D,info:occupancy=0.00(1/3867)];#aa77[TriMethylation,info:occupancy=0.00(1/5452)];#aa77[TriMethylation,info:occupancy=0.00(1/5452)];#aa74[Methyl on N,info:occupancy=0.00(1/2239)];#aa90[Fe[III] on D,info:occupancy=0.00(1/3867)];#aa69[Deamidation on N,info:occupancy=0.00(1/2239)];#aa90[Sodium on D,info:occupancy=0.00(1/3867)];#aa100[Acetylserine,info:occupancy=0.00(1/2682)];#aa101[Oxidation on P,info:occupancy=0.00(1/2682)];#aa97[Glucosylgalactosyl,info:occupancy=0.00(1/4068)];#aa97[Glucosylgalactosyl,info:occupancy=0.00(1/4068)];#aa97[Glucosylgalactosyl,info:occupancy=0.00(1/4068)];#aa88[dHex(1)Hex(3)HexNAc(2) on T,info:occupancy=0.00(1/3867)];#aa97[TriMethylation,info:occupancy=0.00(1/4068)];#aa80[dHex(1)Hex(3)HexNAc(2) on T,info:occupancy=0.00(1/3867)];#aa97[TriMethylation,info:occupancy=0.00(1/4068)];#aa67[Fe[III] on E,info:occupancy=0.00(1/2239)];#aa77[Acetyllysine,info:occupancy=0.00(1/5452)];#aa83[Ammonia loss,info:occupancy=0.00(1/3867)];#aa69[Deamidation on N,info:occupancy=0.00(1/2239)];#aa71[Methyl on Q,info:occupancy=0.00(1/2239)];#aa77[TriMethylation,info:occupancy=0.00(1/5452)];#aa67[Fe[III] on E,info:occupancy=0.00(1/2239)];#aa67[Fe[III] on E,info:occupancy=0.00(1/2239)];#aa67[Fe[III] on E,info:occupancy=0.00(1/2239)];#aa64[Fe[III] on D,info:occupancy=0.00(1/2239)];#aa91[DiMethyl on N,info:occupancy=0.00(1/3867)];#aa91[DiMethyl on N,info:occupancy=0.00(1/3867)];#aa91[DiMethyl on N,info:occupancy=0.00(1/3867)];#aa70[Fe[II] on E,info:occupancy=0.00(1/2239)];#aa77[Acetyllysine,info:occupancy=0.00(1/5452)];#aa70[Sodium on E,info:occupancy=0.00(1/2239)];#aa77[Carbamidomethyl,info:occupancy=0.00(1/5452)];#aa91[Deamidation on N,info:occupancy=0.00(1/3867)];#aa90[Sodium on D,info:occupancy=0.00(1/3867)];#aa105[Deamidation on N,info:occupancy=0.00(1/2682)];#aa105[Deamidation on N,info:occupancy=0.00(1/2682)];#aa92[Calcium on D,info:occupancy=0.00(1/3867)];#aa67[Fe[III] on E,info:occupancy=0.00(1/2239)];#aa69[Methyl on N,info:occupancy=0.00(1/2239)];#aa90[Sodium on D,info:occupancy=0.00(1/3867)];#aa91[Deamidation on N,info:occupancy=0.00(1/3867)];#aa90[Calcium on D,info:occupancy=0.00(1/3867)];#aa101[Oxidation on P,info:occupancy=0.00(1/2682)];#aa74[Deamidation on N,info:occupancy=0.00(1/2239)];#aa69[Deamidation on N,info:occupancy=0.00(1/2239)];#aa62[DiMethyl on N,info:occupancy=0.00(1/2239)];#aa74[Deamidation on N,info:occupancy=0.00(1/2239)];#aa83[Ammonia loss,info:occupancy=0.00(1/3867)];#aa91[Deamidation on N,info:occupancy=0.00(1/3867)];#aa83[Ammonia loss,info:occupancy=0.00(1/3867)];#aa91[Deamidation on N,info:occupancy=0.00(1/3867)];#aa83[Ammonia loss,info:occupancy=0.00(1/3867)];#aa91[Deamidation on N,info:occupancy=0.00(1/3867)];#aa83[Ammonia loss,info:occupancy=0.00(1/3867)];#aa91[Deamidation on N,info:occupancy=0.00(1/3867)];#aa83[Ammonia loss,info:occupancy=0.00(1/3867)];#aa91[Deamidation on N,info:occupancy=0.00(1/3867)];#aa69[DiMethyl on N,info:occupancy=0.00(1/2239)];#aa92[Oxidation on D,info:occupancy=0.00(1/3867)];#aa92[Oxidation on D,info:occupancy=0.00(1/3867)];#aa90[Sodium on D,info:occupancy=0.00(1/3867)];#aa92[Sodium on D,info:occupancy=0.00(1/3867)];#aa97[Hex on K,info:occupancy=0.00(1/4068)];#aa90[Sodium on D,info:occupancy=0.00(1/3867)];#aa92[Sodium on D,info:occupancy=0.00(1/3867)];#aa97[Hex on K,info:occupancy=0.00(1/4068)];#aa87[Deamidation on N,info:occupancy=0.00(1/3867)];#aa101[Dioxidation on P,info:occupancy=0.00(1/2682)];#aa69[DiMethyl on N,info:occupancy=0.00(1/2239)];#aa70[Fe[II] on E,info:occupancy=0.00(1/2239)];#aa77[Hex on K,info:occupancy=0.00(1/5452)];#aa67[Sodium on E,info:occupancy=0.00(1/2239)];#aa77[DiMethyl on K,info:occupancy=0.00(1/5452)];#aa92[Oxidation on D,info:occupancy=0.00(1/3867)];#aa90[Fe[II] on D,info:occupancy=0.00(1/3867)];#aa88[dHex(1)Hex(3)HexNAc(2) on T,info:occupancy=0.00(1/3867)];#aa92[Sodium on D,info:occupancy=0.00(1/3867)];#aa90[Fe[III] on D,info:occupancy=0.00(1/3867)];#aa105[Deamidation on N,info:occupancy=0.00(1/2682)];#aa107[DiMethyl on R,info:occupancy=0.00(1/2987)];#aa70[Sodium on E,info:occupancy=0.00(1/2239)];#aa90[Oxidation on D,info:occupancy=0.00(1/3867)];#aa88[Hex on T,info:occupancy=0.00(1/3867)];#aa97[Carbamidomethyl,info:occupancy=0.00(1/4068)];#aa80[Hex on T,info:occupancy=0.00(1/3867)];#aa97[Carbamidomethyl,info:occupancy=0.00(1/4068)];#aa101[Dioxidation on P,info:occupancy=0.00(1/2682)];#aa74[DiMethyl on N,info:occupancy=0.00(1/2239)];#aa77[TriMethylation,info:occupancy=0.00(1/5452)];#aa90[Methyl on D,info:occupancy=0.00(1/3867)];#aa85[Ammonia loss,info:occupancy=0.00(1/3867)];#aa97[Acetyllysine,info:occupancy=0.00(1/4068)];#aa87[Deamidation on N,info:occupancy=0.00(1/3867)];#aa97[Acetyllysine,info:occupancy=0.00(1/4068)];#aa77[Carbamidomethyl,info:occupancy=0.00(1/5452)];#aa85[Ammonia loss,info:occupancy=0.00(1/3867)];#aa91[Methyl on N,info:occupancy=0.00(1/3867)];#aa91[Methyl on N,info:occupancy=0.00(1/3867)];#aa90[Methyl on D,info:occupancy=0.00(1/3867)];#aa90[Oxidation on D,info:occupancy=0.00(1/3867)];#aa91[DiMethyl on N,info:occupancy=0.00(1/3867)];#aa97[Hex on K,info:occupancy=0.00(1/4068)];#aa87[Deamidation on N,info:occupancy=0.00(1/3867)];#aa90[Sodium on D,info:occupancy=0.00(1/3867)];#aa97[Hex on K,info:occupancy=0.00(1/4068)];#aa88[Hex on T,info:occupancy=0.00(1/3867)];#aa80[Hex on T,info:occupancy=0.00(1/3867)];#aa90[Fe[III] on D,info:occupancy=0.00(1/3867)];#aa70[Fe[III] on E,info:occupancy=0.00(1/2239)];#aa88[dHex(1)Hex(3)HexNAc(2) on T,info:occupancy=0.00(1/3867)];#aa70[Fe[III] on E,info:occupancy=0.00(1/2239)];#aa80[dHex(1)Hex(3)HexNAc(2) on T,info:occupancy=0.00(1/3867)];#aa74[DiMethyl on N,info:occupancy=0.00(1/2239)];#aa82[Oxidation on P,info:occupancy=0.00(1/3867)];#aa92[Sodium on D,info:occupancy=0.00(1/3867)];#aa90[Fe[III] on D,info:occupancy=0.00(1/3867)];#aa92[Oxidation on D,info:occupancy=0.00(1/3867)];#aa97[Hex on K,info:occupancy=0.00(1/4068)];#aa67[Methyl on E,info:occupancy=0.00(1/2239)];#aa91[DiMethyl on N,info:occupancy=0.00(1/3867)];#aa92[Sodium on D,info:occupancy=0.00(1/3867)];#aa77[Carbamidomethyl,info:occupancy=0.00(1/5452)];#aa87[Deamidation on N,info:occupancy=0.00(1/3867)];#aa74[Methyl on N,info:occupancy=0.00(1/2239)];#aa90[Fe[II] on D,info:occupancy=0.00(1/3867)];#aa77[Carbamidomethyl,info:occupancy=0.00(1/5452)];#aa97[DiMethyl on K,info:occupancy=0.00(1/4068)]; +Q00055 +Q00245 +Q00618 +Q00711 +Q00764 +Q00772 +Q00955 +Q01080 +Q01163 +Q01217 +Q01477 +Q01519 +Q01532 +Q01560 +Q01662 +Q01852 +Q01855 +Q01939 +Q01976 +Q02046 +Q02159 +Q02196 +Q02201 +Q02204 +Q02256 +Q02326 +Q02354 +Q02486 +Q02608 +Q02642 +Q02647 +Q02725 +Q02753 +Q02754 +Q02772 +Q02776 +Q02784 +Q02795 +Q02821 +Q02892 +Q02895 +Q02908 +Q02931 +Q03020 +Q03048 +Q03088 +Q03102 +Q03103 +Q03104 +Q03148 +Q03161 +Q03195 +Q03201 +Q03219 +Q03246 +Q03266 +Q03280 +Q03337 +Q03362 +Q03435 +Q03483 +Q03494 +Q03503 +Q03529 +Q03532 +Q03558 +Q03559 +Q03629 +Q03640 +Q03655 +Q03677 +Q03690 +Q03705 +Q03713 +Q03723 +Q03735 +Q03769 +Q03774 +Q03778 +Q03798 +Q03799 +Q03835 +Q03855 +Q03862 +Q03940 +Q03964 +Q03973 +Q03976 +Q04013 +Q04062 +Q04066 +Q04067 +Q04119 +Q04170 +Q04175 +Q04178 +Q04212 +Q04214 +Q04223 +Q04225 +Q04304 +Q04305 +Q04307 +Q04322 +Q04338 +Q04344 +Q04371 +Q04373 +Q04401 +Q04409 +Q04432 +Q04439 +Q04491 +Q04493 +Q04599 +Q04603 +Q04636 +Q04651 +Q04660 +Q04697 +Q04706 +Q04728 +Q04767 +Q04773 +Q04792 +Q04869 +Q04894 +Q04898 +Q04935 +Q04947 +Q04964 +Q04969 +Q05016 +Q05022 +Q05027 +Q05029 +Q05031 +Q05050 +Q05359 +Q05498 +Q05506 +Q05515 +Q05567 +Q05583 +Q05584 +Q05636 +Q05775 +Q05788 +Q05874 +Q05881 +Q05905 +Q05911 +Q05933 +Q05946 +Q06010 +Q06103 +Q06142 +Q06143 +Q06146 +Q06151 +Q06205 +Q06217 +Q06218 +Q06252 +Q06287 +Q06336 +Q06338 +Q06385 +Q06405 +Q06406 +Q06408 +Q06440 +Q06489 +Q06494 +Q06497 +Q06506 +Q06508 +Q06511 +Q06523 +Q06580 +Q06608 +Q06624 +Q06672 +Q06678 +Q06679 +Q06685 +Q06705 +Q06706 +Q07362 +Q07381 +Q07451 +Q07478 +Q07505 +Q07541 +Q07551 +Q07589 +Q07623 +Q07648 +Q07657 +Q07688 +Q07716 +Q07791 +Q07793 +Q07825 +Q07878 +Q07897 +Q07914 +Q07915 +Q07938 +Q07953 +Q08004 +Q08096 +Q08157 +Q08162 +Q08193 +Q08202 +Q08208 +Q08220 +Q08230 +Q08235 +Q08245 +Q08285 +Q08421 +Q08446 +Q08553 +Q08601 +Q08645 +Q08647 +Q08686 +Q08687 +Q08689 +Q08723 +Q08742 +Q08745 +Q08746 +Q08826 +Q08920 +Q08951 +Q08962 +Q08965 +Q08971 +Q08972 +Q08977 +Q08985 +Q10740 +Q12000 +Q12008 +Q12009 +Q12017 +Q12019 +Q12024 +Q12025 +Q12028 +Q12029 +Q12030 +Q12032 +Q12040 +Q12044 +Q12055 +Q12068 +Q12074 +Q12088 +Q12091 +Q12102 +Q12109 +Q12112 +Q12113 +Q12117 +Q12118 +Q12122 +Q12123 +Q12125 +Q12133 +Q12149 +Q12154 +Q12159 +Q12160 +Q12164 +Q12165 +Q12166 +Q12176 +Q12177 +Q12178 +Q12189 +Q12193 +Q12207 +Q12211 +Q12213 +Q12220 +Q12230 +Q12233 +Q12245 +Q12250 +Q12265 +Q12266 +Q12269 +Q12271 +Q12277 +Q12284 +Q12285 +Q12293 +Q12305 +Q12306 +Q12314 +Q12316 +Q12335 +Q12337 +Q12339 +Q12341 +Q12349 +Q12354 +Q12363 +Q12375 +Q12377 +Q12389 +Q12390 +Q12400 +Q12403 +Q12404 +Q12408 +Q12428 +Q12434 +Q12447 +Q12449 +Q12451 +Q12452 +Q12458 +Q12460 +Q12462 +Q12464 +Q12466 +Q12472 +Q12480 +Q12486 +Q12487 +Q12490 +Q12491 +Q12496 +Q12499 +Q12513 +Q12515 +Q12517 +Q12522 +Q12532 +Q12672 +Q12680 +Q12690 +Q12692 +Q12743 +Q12746 +Q12754 +Q3E6R5 +Q3E705 +Q3E754 +Q3E757 +Q3E764 +Q3E772 +Q3E792 +Q3E793 +Q3E7X9 +Q3E7Y3 +Q3E833 +Q3E841 +Q6Q547 +Q6Q560 +Q86ZR7 +Q92317 +Q92392 +Q96VH4 +Q96VH5 +Q99176 +Q99190 +Q99210 +Q99216 +Q99231 +Q99257 +Q99258 +Q99260 +Q99287 +Q99288 +Q99297 +Q99316 +Q99321 +Q99337 +Q99369 +Q99383 +Q9P305