From 0cfb11b736eabe49304f3f8c2cf2553300948d81 Mon Sep 17 00:00:00 2001 From: labkey-jeckels Date: Mon, 5 Oct 2026 21:12:43 -0700 Subject: [PATCH] Remove support for Mascot searches and imports --- .gitattributes | 21 - ms2/build.gradle | 3 - .../MascotPeptides/ProteinProphet.qview.xml | 29 - .../SearchEngineProtein.qview.xml | 25 - .../postgresql/ms2-26.000-26.001.sql | 10 + ms2/resources/schemas/ms2.xml | 4 - ms2/resources/views/runsOverview.html | 11 - .../ms2/BibliospecSpectrumRenderer.java | 2 +- ms2/src/org/labkey/ms2/MS2Controller.java | 265 -- ms2/src/org/labkey/ms2/MS2FolderType.java | 2 +- ms2/src/org/labkey/ms2/MS2Manager.java | 58 +- ms2/src/org/labkey/ms2/MS2Module.java | 12 +- ms2/src/org/labkey/ms2/MS2RunType.java | 9 - .../ms2/MascotDatExperimentDataHandler.java | 44 - ms2/src/org/labkey/ms2/MascotDatImporter.java | 191 -- ms2/src/org/labkey/ms2/PepXmlImporter.java | 9 +- ms2/src/org/labkey/ms2/PeptideImporter.java | 4 +- ms2/src/org/labkey/ms2/mascotConfig.jsp | 118 - .../ms2/peptideview/AbstractMS2RunView.java | 2 +- .../ResultSetSpectrumIterator.java | 2 +- .../AbstractMS2SearchPipelineProvider.java | 2 +- .../ms2/pipeline/MS2PipelineManager.java | 14 - .../ms2/pipeline/PipelineController.java | 64 +- .../mascot/MascotCPipelineProvider.java | 130 - .../ms2/pipeline/mascot/MascotClientImpl.java | 1469 ----------- .../ms2/pipeline/mascot/MascotConfig.java | 141 - .../ms2/pipeline/mascot/MascotDefaults.xml | 179 -- .../mascot/MascotImportPipelineJob.java | 130 - .../pipeline/mascot/MascotPipelineJob.java | 128 - .../labkey/ms2/pipeline/mascot/MascotRun.java | 187 -- .../pipeline/mascot/MascotSearchProtocol.java | 55 - .../mascot/MascotSearchProtocolFactory.java | 67 - .../ms2/pipeline/mascot/MascotSearchTask.java | 533 ---- .../ms2/pipeline/mascot/setMascotDefaults.jsp | 54 - ms2/src/org/labkey/ms2/query/MS2Schema.java | 15 +- .../labkey/ms2/query/PeptidesTableInfo.java | 4 +- .../labkey/ms2/reader/DatDocumentParser.java | 53 - ms2/src/org/labkey/ms2/reader/MS2Loader.java | 22 - .../labkey/ms2/reader/MascotDatLoader.java | 1105 -------- .../org/labkey/ms2/reader/PepXmlLoader.java | 15 +- ms2/src/org/labkey/ms2/runSummary.jsp | 7 - ms2/src/org/labkey/ms2/showPeptide.jsp | 10 - ms2/src/org/labkey/ms2/testMascot.jsp | 66 - .../.labkey/protocols/mascot/test1.xml | 7 - .../mascot/test1/CAexample_mini.pep.xml | 1546 ----------- .../mascot/test1/CAexample_mini.prot.xml | 37 - .../test1/CAexample_mini.search.xar.xml | 238 -- .../bov_sample/mascot/test1/mascot.xml | 10 - .../mascot/test3/CAexample_mini.dat | 2304 ----------------- .../mascot/test4/CAexample_mini_decoy.dat | 610 ----- .../test/pages/ms2/MascotConfigPage.java | 97 - .../labkey/test/pages/ms2/MascotTestPage.java | 73 - .../org/labkey/test/tests/ms2/MascotTest.java | 512 ---- ms2/webapp/WEB-INF/ms2/ms2Context.xml | 30 - 54 files changed, 33 insertions(+), 10702 deletions(-) delete mode 100644 ms2/resources/queries/ms2/MascotPeptides/ProteinProphet.qview.xml delete mode 100644 ms2/resources/queries/ms2/MascotPeptides/SearchEngineProtein.qview.xml create mode 100644 ms2/resources/schemas/dbscripts/postgresql/ms2-26.000-26.001.sql delete mode 100644 ms2/src/org/labkey/ms2/MascotDatExperimentDataHandler.java delete mode 100644 ms2/src/org/labkey/ms2/MascotDatImporter.java delete mode 100644 ms2/src/org/labkey/ms2/mascotConfig.jsp delete mode 100644 ms2/src/org/labkey/ms2/pipeline/mascot/MascotCPipelineProvider.java delete mode 100644 ms2/src/org/labkey/ms2/pipeline/mascot/MascotClientImpl.java delete mode 100644 ms2/src/org/labkey/ms2/pipeline/mascot/MascotConfig.java delete mode 100644 ms2/src/org/labkey/ms2/pipeline/mascot/MascotDefaults.xml delete mode 100644 ms2/src/org/labkey/ms2/pipeline/mascot/MascotImportPipelineJob.java delete mode 100644 ms2/src/org/labkey/ms2/pipeline/mascot/MascotPipelineJob.java delete mode 100644 ms2/src/org/labkey/ms2/pipeline/mascot/MascotRun.java delete mode 100644 ms2/src/org/labkey/ms2/pipeline/mascot/MascotSearchProtocol.java delete mode 100644 ms2/src/org/labkey/ms2/pipeline/mascot/MascotSearchProtocolFactory.java delete mode 100644 ms2/src/org/labkey/ms2/pipeline/mascot/MascotSearchTask.java delete mode 100644 ms2/src/org/labkey/ms2/pipeline/mascot/setMascotDefaults.jsp delete mode 100644 ms2/src/org/labkey/ms2/reader/DatDocumentParser.java delete mode 100644 ms2/src/org/labkey/ms2/reader/MascotDatLoader.java delete mode 100644 ms2/src/org/labkey/ms2/testMascot.jsp delete mode 100644 ms2/test/sampledata/xarfiles/ms2pipe/.labkey/protocols/mascot/test1.xml delete mode 100644 ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test1/CAexample_mini.pep.xml delete mode 100644 ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test1/CAexample_mini.prot.xml delete mode 100644 ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test1/CAexample_mini.search.xar.xml delete mode 100644 ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test1/mascot.xml delete mode 100644 ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test3/CAexample_mini.dat delete mode 100644 ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test4/CAexample_mini_decoy.dat delete mode 100644 ms2/test/src/org/labkey/test/pages/ms2/MascotConfigPage.java delete mode 100644 ms2/test/src/org/labkey/test/pages/ms2/MascotTestPage.java delete mode 100644 ms2/test/src/org/labkey/test/tests/ms2/MascotTest.java diff --git a/.gitattributes b/.gitattributes index e9e6c90660..5030d67f70 100644 --- a/.gitattributes +++ b/.gitattributes @@ -532,8 +532,6 @@ ms2/module.properties -text ms2/resources/credits/scripts.txt -text ms2/resources/queries/ms2/CometPeptides/ProteinProphet.qview.xml -text ms2/resources/queries/ms2/CometPeptides/SearchEngineProtein.qview.xml -text -ms2/resources/queries/ms2/MascotPeptides/ProteinProphet.qview.xml -text -ms2/resources/queries/ms2/MascotPeptides/SearchEngineProtein.qview.xml -text ms2/resources/queries/ms2/Peptides/ProteinProphet.qview.xml -text ms2/resources/queries/ms2/Peptides/SearchEngineProtein.qview.xml -text ms2/resources/queries/ms2/PhenyxPeptides/ProteinProphet.qview.xml -text @@ -584,8 +582,6 @@ ms2/src/org/labkey/ms2/MS2Module.java -text ms2/src/org/labkey/ms2/MS2RunType.java -text ms2/src/org/labkey/ms2/MS2SearchExperimentRunType.java -text ms2/src/org/labkey/ms2/MS2ServiceImpl.java -text -ms2/src/org/labkey/ms2/MascotDatExperimentDataHandler.java -text -ms2/src/org/labkey/ms2/MascotDatImporter.java -text ms2/src/org/labkey/ms2/PepXmlExperimentDataHandler.java -text ms2/src/org/labkey/ms2/PepXmlImporter.java -text ms2/src/org/labkey/ms2/PeptideImporter.java -text @@ -627,7 +623,6 @@ ms2/src/org/labkey/ms2/editElution.jsp -text ms2/src/org/labkey/ms2/extraExportOptions.jsp -text ms2/src/org/labkey/ms2/filterHeader.jsp -text ms2/src/org/labkey/ms2/manageViews.jsp -text -ms2/src/org/labkey/ms2/mascotConfig.jsp -text ms2/src/org/labkey/ms2/ms2Admin.jsp -text ms2/src/org/labkey/ms2/peptideChart.jsp -text ms2/src/org/labkey/ms2/peptideview/AbstractMS2RunView.java -text @@ -678,17 +673,6 @@ ms2/src/org/labkey/ms2/pipeline/comet/CometSearchProtocolFactory.java -text ms2/src/org/labkey/ms2/pipeline/comet/CometSearchTask.java -text ms2/src/org/labkey/ms2/pipeline/comet/LegacyCometRun.java -text ms2/src/org/labkey/ms2/pipeline/comet/setCometDefaults.jsp -text -ms2/src/org/labkey/ms2/pipeline/mascot/MascotCPipelineProvider.java -text -ms2/src/org/labkey/ms2/pipeline/mascot/MascotClientImpl.java -text -ms2/src/org/labkey/ms2/pipeline/mascot/MascotConfig.java -text -ms2/src/org/labkey/ms2/pipeline/mascot/MascotDefaults.xml -text -ms2/src/org/labkey/ms2/pipeline/mascot/MascotImportPipelineJob.java -text -ms2/src/org/labkey/ms2/pipeline/mascot/MascotPipelineJob.java -text -ms2/src/org/labkey/ms2/pipeline/mascot/MascotRun.java -text -ms2/src/org/labkey/ms2/pipeline/mascot/MascotSearchProtocol.java -text -ms2/src/org/labkey/ms2/pipeline/mascot/MascotSearchProtocolFactory.java -text -ms2/src/org/labkey/ms2/pipeline/mascot/MascotSearchTask.java -text -ms2/src/org/labkey/ms2/pipeline/mascot/setMascotDefaults.jsp -text ms2/src/org/labkey/ms2/pipeline/phenyx/PhenyxRun.java -text ms2/src/org/labkey/ms2/pipeline/sequest/AbstractMultipleValueParamsValidator.java -text ms2/src/org/labkey/ms2/pipeline/sequest/AbstractSequestParams.java -text @@ -782,7 +766,6 @@ ms2/src/org/labkey/ms2/reader/MGFDocumentParser.java -text ms2/src/org/labkey/ms2/reader/MS2Loader.java -text ms2/src/org/labkey/ms2/reader/MS2ModificationList.java -text ms2/src/org/labkey/ms2/reader/MS2XmlLoader.java -text -ms2/src/org/labkey/ms2/reader/MascotDatLoader.java -text ms2/src/org/labkey/ms2/reader/ModifiedAminoAcid.java -text ms2/src/org/labkey/ms2/reader/MzMLDocumentParser.java -text ms2/src/org/labkey/ms2/reader/MzXMLDocumentParser.java -text @@ -817,7 +800,6 @@ ms2/src/org/labkey/ms2/showPeptideProphetDetails.jsp -text ms2/src/org/labkey/ms2/showPeptideQuantitation.jsp -text ms2/src/org/labkey/ms2/showProteinGroup.jsp -text ms2/src/org/labkey/ms2/showSensitivityDetails.jsp -text -ms2/src/org/labkey/ms2/testMascot.jsp -text ms2/test/src/org/labkey/test/ms2/AbstractMS2SearchEngineTest.java -text ms2/test/src/org/labkey/test/ms2/AbstractXTandemTest.java -text ms2/test/src/org/labkey/test/ms2/MS2PipelineFolder.java -text @@ -825,8 +807,6 @@ ms2/test/src/org/labkey/test/ms2/MS2TestBase.java -text ms2/test/src/org/labkey/test/ms2/QuantitationTest.java -text ms2/test/src/org/labkey/test/ms2/params/MS2EmailSuccessParams.java -text ms2/test/src/org/labkey/test/ms2/params/MS2TestParams.java -text -ms2/test/src/org/labkey/test/pages/ms2/MascotConfigPage.java -text -ms2/test/src/org/labkey/test/pages/ms2/MascotTestPage.java -text ms2/test/src/org/labkey/test/tests/ms2/AbstractMS2ImportTest.java -text ms2/test/src/org/labkey/test/tests/ms2/CometTest.java -text ms2/test/src/org/labkey/test/tests/ms2/LibraTest.java -text @@ -834,7 +814,6 @@ ms2/test/src/org/labkey/test/tests/ms2/MS2ExportTest.java -text ms2/test/src/org/labkey/test/tests/ms2/MS2ExtensionsTest.java -text ms2/test/src/org/labkey/test/tests/ms2/MS2GZTest.java -text ms2/test/src/org/labkey/test/tests/ms2/MS2Test.java -text -ms2/test/src/org/labkey/test/tests/ms2/MascotTest.java -text ms2/test/src/org/labkey/test/tests/ms2/PipelineTest.java -text ms2/test/src/org/labkey/test/tests/ms2/SequestImportTest.java -text ms2/test/src/org/labkey/test/tests/ms2/XTandemShortTest.java -text diff --git a/ms2/build.gradle b/ms2/build.gradle index 7bf55b3c50..a23897753e 100644 --- a/ms2/build.gradle +++ b/ms2/build.gradle @@ -18,9 +18,6 @@ dependencies { "SQLite JDBC Driver" ) ) - implementation "net.sf.opencsv:opencsv:${opencsvVersion}" - compileOnly "org.projectlombok:lombok:${lombokVersion}" - annotationProcessor "org.projectlombok:lombok:${lombokVersion}" BuildUtils.addLabKeyDependency(project: project, config: "implementation", depProjectPath: BuildUtils.getPlatformModuleProjectPath(project.gradle, "assay"), depProjectConfig: "apiJarFile") BuildUtils.addLabKeyDependency(project: project, config: "implementation", depProjectPath: BuildUtils.getCommonAssayModuleProjectPath(project.gradle, "protein"), depProjectConfig: "apiJarFile") BuildUtils.addLabKeyDependency(project: project, config: "jspImplementation", depProjectPath: BuildUtils.getCommonAssayModuleProjectPath(project.gradle, "protein"), depProjectConfig: "apiJarFile") diff --git a/ms2/resources/queries/ms2/MascotPeptides/ProteinProphet.qview.xml b/ms2/resources/queries/ms2/MascotPeptides/ProteinProphet.qview.xml deleted file mode 100644 index 01877d63c1..0000000000 --- a/ms2/resources/queries/ms2/MascotPeptides/ProteinProphet.qview.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ms2/resources/queries/ms2/MascotPeptides/SearchEngineProtein.qview.xml b/ms2/resources/queries/ms2/MascotPeptides/SearchEngineProtein.qview.xml deleted file mode 100644 index 0a7f0a51d9..0000000000 --- a/ms2/resources/queries/ms2/MascotPeptides/SearchEngineProtein.qview.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ms2/resources/schemas/dbscripts/postgresql/ms2-26.000-26.001.sql b/ms2/resources/schemas/dbscripts/postgresql/ms2-26.000-26.001.sql new file mode 100644 index 0000000000..036a3eed17 --- /dev/null +++ b/ms2/resources/schemas/dbscripts/postgresql/ms2-26.000-26.001.sql @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2026 LabKey Corporation + * + * Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0 + */ +ALTER TABLE ms2.Runs DROP COLUMN MascotFile; +ALTER TABLE ms2.Runs DROP COLUMN DistillerRawFile; + +DELETE FROM prop.Properties WHERE Set IN (SELECT Set FROM prop.PropertySets WHERE Category = 'MascotConfig'); +DELETE FROM prop.PropertySets WHERE Category = 'MascotConfig'; diff --git a/ms2/resources/schemas/ms2.xml b/ms2/resources/schemas/ms2.xml index 403fd29904..29869d3efc 100644 --- a/ms2/resources/schemas/ms2.xml +++ b/ms2/resources/schemas/ms2.xml @@ -441,8 +441,6 @@ NegativeHits #,##0 - - MS2Runs _ts @@ -557,8 +555,6 @@ - - MS2Runs Run diff --git a/ms2/resources/views/runsOverview.html b/ms2/resources/views/runsOverview.html index cadaa32c40..222185d394 100644 --- a/ms2/resources/views/runsOverview.html +++ b/ms2/resources/views/runsOverview.html @@ -348,11 +348,6 @@ filterArray : runsFilterArray }; - if ("MASCOT" == Ext.getCmp('filter-engine').value) - { - _storeConfig.columns += ", MS2Details/MascotFile, MS2Details/DistillerRawFile"; - } - var _store = new LABKEY.ext.Store(_storeConfig); var runsGrid = new LABKEY.ext.EditorGridPanel({ @@ -426,12 +421,6 @@ }}}); colItems.push({boxLabel: 'Peptide', name: 'Peptide'}); colItems.push({boxLabel: 'Protein', name: 'Protein'}); - if ("MASCOT" == Ext.getCmp('filter-engine').value) - { - colItems.push({boxLabel: 'Query Number', name: 'QueryNumber'}); - colItems.push({boxLabel: 'Hit Rank', name: 'HitRank'}); - colItems.push({boxLabel: 'Decoy', name: 'Decoy'}); - } formItems = [{ xtype : 'checkboxgroup', columns : 3, diff --git a/ms2/src/org/labkey/ms2/BibliospecSpectrumRenderer.java b/ms2/src/org/labkey/ms2/BibliospecSpectrumRenderer.java index 3716c7dc91..2728481266 100644 --- a/ms2/src/org/labkey/ms2/BibliospecSpectrumRenderer.java +++ b/ms2/src/org/labkey/ms2/BibliospecSpectrumRenderer.java @@ -166,7 +166,7 @@ public void render(SpectrumIterator iter) throws IOException File spectraSource; if (fraction.getMzXmlURL() == null) { - // Likely a direct Mascot .dat import, with no .mzXML available. The .dat + // No .mzXML available, so point at the run instead spectraSource = new File(run.getPath()); } else diff --git a/ms2/src/org/labkey/ms2/MS2Controller.java b/ms2/src/org/labkey/ms2/MS2Controller.java index ce2f9b970f..73b3db485a 100644 --- a/ms2/src/org/labkey/ms2/MS2Controller.java +++ b/ms2/src/org/labkey/ms2/MS2Controller.java @@ -73,7 +73,6 @@ import org.labkey.api.exp.api.ExpRun; import org.labkey.api.exp.api.ExperimentService; import org.labkey.api.pipeline.PipelineService; -import org.labkey.api.pipeline.PipelineUrls; import org.labkey.api.pipeline.browse.PipelinePathForm; import org.labkey.api.portal.ProjectUrls; import org.labkey.api.protein.CoverageProtein.ModificationHandler; @@ -165,8 +164,6 @@ import org.labkey.ms2.pipeline.AbstractMS2SearchTask; import org.labkey.ms2.pipeline.ProteinProphetPipelineJob; import org.labkey.ms2.pipeline.TPPTask; -import org.labkey.ms2.pipeline.mascot.MascotClientImpl; -import org.labkey.ms2.pipeline.mascot.MascotConfig; import org.labkey.ms2.protein.Protein; import org.labkey.ms2.protein.ProteinViewBean; import org.labkey.ms2.protein.tools.GoHelpers; @@ -231,7 +228,6 @@ public MS2Controller() public static void registerAdminConsoleLinks() { AdminConsole.addLink(SettingsLinkType.Premium, "ms2", getShowMS2AdminURL(null), AdminOperationsPermission.class); - AdminConsole.addLink(SettingsLinkType.Premium, "mascot server", new ActionURL(MS2Controller.MascotConfigAction.class, ContainerManager.getRoot()), AdminOperationsPermission.class); } private void addRootNavTrail(NavTree root, String title, PageConfig page, String helpTopic) @@ -3186,131 +3182,6 @@ public void addNavTrail(NavTree root) } } - public static class MascotSettingsForm - { - private boolean _reset; - - private String _mascotServer; - private String _mascotUserAccount; - private String _mascotUserPassword; - private String _mascotHTTPProxy; - - public boolean isReset() - { - return _reset; - } - - @SuppressWarnings("unused") - public void setReset(boolean reset) - { - _reset = reset; - } - - public String getMascotServer() - { - return (null == _mascotServer) ? "" : _mascotServer; - } - - @SuppressWarnings("unused") - public void setMascotServer(String mascotServer) - { - _mascotServer = mascotServer; - } - - public String getMascotUserAccount() - { - return (null == _mascotUserAccount) ? "" : _mascotUserAccount; - } - - @SuppressWarnings("unused") - public void setMascotUserAccount(String mascotUserAccount) - { - _mascotUserAccount = mascotUserAccount; - } - - public String getMascotUserPassword() - { - return (null == _mascotUserPassword) ? "" : _mascotUserPassword; - } - - @SuppressWarnings("unused") - public void setMascotUserPassword(String mascotUserPassword) - { - _mascotUserPassword = mascotUserPassword; - } - - public String getMascotHTTPProxy() - { - return (null == _mascotHTTPProxy) ? "" : _mascotHTTPProxy; - } - - @SuppressWarnings("unused") - public void setMascotHTTPProxy(String mascotHTTPProxy) - { - _mascotHTTPProxy = mascotHTTPProxy; - } - } - - @RequiresPermission(AdminOperationsPermission.class) - public static class MascotConfigAction extends FormViewAction - { - @Override - public void validateCommand(MascotSettingsForm target, Errors errors) - { - } - - @Override - public ModelAndView getView(MascotSettingsForm mascotSettingsForm, boolean reshow, BindException errors) - { - return new JspView<>("/org/labkey/ms2/mascotConfig.jsp", mascotSettingsForm); - } - - @Override - public boolean handlePost(MascotSettingsForm form, BindException errors) - { - if (form.isReset()) - { - MascotConfig.reset(getContainer()); - } - else - { - MascotConfig config = MascotConfig.getWriteableMascotConfig(getContainer()); - config.setMascotServer(form.getMascotServer()); - config.setMascotUserAccount(form.getMascotUserAccount()); - config.setMascotUserPassword(form.getMascotUserPassword()); - config.setMascotHTTPProxy(form.getMascotHTTPProxy()); - config.save(); - - //write an audit log event - config.writeAuditLogEvent(getContainer(), getViewContext().getUser()); - } - - return true; - } - - @Override - public URLHelper getSuccessURL(MascotSettingsForm mascotSettingsForm) - { - return getContainer().isRoot() ? - urlProvider(AdminUrls.class).getAdminConsoleURL() : - urlProvider(PipelineUrls.class).urlSetup(getViewContext().getContainer()); - } - - @Override - public void addNavTrail(NavTree root) - { - if (getViewContext().getContainer().isRoot()) - { - urlProvider(AdminUrls.class).addAdminNavTrail(root, "Mascot Server Configuration", getClass(), getContainer()); - } - else - { - root.addChild("Pipeline Settings", urlProvider(PipelineUrls.class).urlSetup(getViewContext().getContainer())); - root.addChild("Mascot Server Configuration"); - } - } - } - @RequiresPermission(ReadPermission.class) public static class ShowProteinAction extends SimpleViewAction { @@ -4137,136 +4008,6 @@ public void export(DetailsForm form, HttpServletResponse response, BindException } } - @RequiresPermission(AdminOperationsPermission.class) - public static class MascotTestAction extends SimpleViewAction - { - @Override - public ModelAndView getView(TestMascotForm form, BindException errors) - { - String originalMascotServer = form.getMascotServer(); - MascotClientImpl mascotClient = new MascotClientImpl(form.getMascotServer(), null, - form.getMascotUserAccount(), form.getMascotUserPassword()); - mascotClient.setProxyURL(form.getMascotHTTPProxy()); - mascotClient.findWorkableSettings(true); - form.setStatus(mascotClient.getErrorCode()); - - String message; - if (0 == mascotClient.getErrorCode()) - { - if ("".equals(mascotClient.getErrorString())) - { - message = "Test passed."; - } - else - { - message = mascotClient.getErrorString(); - } - form.setParameters(mascotClient.getParameters()); - } - else - { - message = "Test failed. " + mascotClient.getErrorString(); - } - - form.setMessage(message); - form.setMascotServer(originalMascotServer); - form.setMascotUserPassword(("".equals(form.getMascotUserPassword())) ? "" : "***"); // do not show password in clear - - getPageConfig().setTemplate(PageConfig.Template.Dialog); - return new JspView<>("/org/labkey/ms2/testMascot.jsp", form); - } - - @Override - public void addNavTrail(NavTree root) - { - root.addChild("Admin Console", urlProvider(AdminUrls.class).getAdminConsoleURL()); - root.addChild("Test Mascot Settings"); - } - } - - public static class TestMascotForm - { - private String _mascotServer = ""; - private String _mascotUserAccount = ""; - private String _mascotUserPassword = ""; - private String _mascotHTTPProxy = ""; - private int _status; - private String _parameters = ""; - private String _message; - - public String getMascotUserAccount() - { - return _mascotUserAccount; - } - - @SuppressWarnings("unused") - public void setMascotUserAccount(String mascotUserAccount) - { - _mascotUserAccount = mascotUserAccount; - } - - public String getMascotUserPassword() - { - return _mascotUserPassword; - } - - public void setMascotUserPassword(String mascotUserPassword) - { - _mascotUserPassword = mascotUserPassword; - } - - public String getMascotServer() - { - return _mascotServer; - } - - public void setMascotServer(String mascotServer) - { - _mascotServer = mascotServer; - } - - public String getMascotHTTPProxy() - { - return _mascotHTTPProxy; - } - - @SuppressWarnings("unused") - public void setMascotHTTPProxy(String mascotHTTPProxy) - { - _mascotHTTPProxy = mascotHTTPProxy; - } - - public String getMessage() - { - return _message; - } - - public void setMessage(String message) - { - _message = message; - } - - public int getStatus() - { - return _status; - } - - public void setStatus(int status) - { - _status = status; - } - - public String getParameters() - { - return _parameters; - } - - public void setParameters(String parameters) - { - _parameters = parameters; - } - } - @SuppressWarnings({"UnusedDeclaration"}) @RequiresPermission(ReadPermission.class) public static class MS2SearchOptionsAction extends MutatingApiAction @@ -5290,12 +5031,6 @@ controller.new ToggleValidQuantitationAction(), controller.new EditElutionGraphAction() ); - // @RequiresPermission(AdminOperationsPermission.class) - assertForAdminOperationsPermission(user, - new MascotConfigAction(), - new MascotTestAction() - ); - // @RequiresSiteAdmin assertForRequiresSiteAdmin(user, controller.new PurgeRunsAction(), diff --git a/ms2/src/org/labkey/ms2/MS2FolderType.java b/ms2/src/org/labkey/ms2/MS2FolderType.java index e87c08bc26..be4987d767 100644 --- a/ms2/src/org/labkey/ms2/MS2FolderType.java +++ b/ms2/src/org/labkey/ms2/MS2FolderType.java @@ -38,7 +38,7 @@ public MS2FolderType(MS2Module module) //TODO: Get rid of these strings.. Should be part of some service super("MS2", "Manage tandem mass spectrometry analyses using a variety of popular search engines, " + - "including Mascot, Sequest, and X!Tandem. " + + "including Comet, Sequest, and X!Tandem. " + "Use existing analytic tools like PeptideProphet and ProteinProphet.", Arrays.asList( Portal.getPortalPart("Data Pipeline").createWebPart(), diff --git a/ms2/src/org/labkey/ms2/MS2Manager.java b/ms2/src/org/labkey/ms2/MS2Manager.java index 31a2b2a472..ebfbf04e98 100644 --- a/ms2/src/org/labkey/ms2/MS2Manager.java +++ b/ms2/src/org/labkey/ms2/MS2Manager.java @@ -21,7 +21,6 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.fhcrc.cpas.exp.xml.ExperimentArchiveDocument; -import org.jetbrains.annotations.NotNull; import org.labkey.api.cache.Cache; import org.labkey.api.cache.CacheLoader; import org.labkey.api.cache.CacheManager; @@ -67,7 +66,6 @@ import org.labkey.api.util.NetworkDrive; import org.labkey.api.util.PageFlowUtil; import org.labkey.api.util.Pair; -import org.labkey.api.util.PepXMLFileType; import org.labkey.api.view.HttpView; import org.labkey.api.view.UnauthorizedException; import org.labkey.api.view.ViewBackgroundInfo; @@ -76,13 +74,11 @@ import org.labkey.ms2.pipeline.AbstractMS2SearchTask; import org.labkey.ms2.pipeline.MS2ImportPipelineJob; import org.labkey.ms2.pipeline.TPPTask; -import org.labkey.ms2.pipeline.mascot.MascotImportPipelineJob; import org.labkey.api.protein.CoverageProtein; import org.labkey.ms2.protein.Protein; import org.labkey.ms2.query.MS2Schema; import org.labkey.ms2.reader.ITraqProteinQuantitation; import org.labkey.ms2.reader.LibraQuantResult; -import org.labkey.ms2.reader.MascotDatLoader; import org.labkey.ms2.reader.PeptideProphetSummary; import org.labkey.ms2.reader.RandomAccessMzxmlIterator; import org.labkey.ms2.reader.RandomAccessMzxmlIteratorFactory; @@ -529,7 +525,7 @@ private static MS2Run[] getRuns(String whereClause, Object... params) List runs = new ArrayList<>(); try (ResultSet rs = new SqlSelector(getSchema(), - "SELECT Container, Run, Description, Path, runs.FileName, Type, SearchEngine, MassSpecType, SearchEnzyme, Status, StatusId, Deleted, HasPeptideProphet, ExperimentRunLSID, PeptideCount, SpectrumCount, NegativeHitCount, MascotFile, DistillerRawFile FROM " + getTableInfoRuns() + " runs WHERE " + whereClause, + "SELECT Container, Run, Description, Path, runs.FileName, Type, SearchEngine, MassSpecType, SearchEnzyme, Status, StatusId, Deleted, HasPeptideProphet, ExperimentRunLSID, PeptideCount, SpectrumCount, NegativeHitCount FROM " + getTableInfoRuns() + " runs WHERE " + whereClause, params).getResultSet()) { while (rs.next()) @@ -558,24 +554,6 @@ private static MS2Run[] getRuns(String whereClause, Object... params) return runs.toArray(new MS2Run[0]); } - public static MS2Importer.RunInfo addMascotRunToQueue(ViewBackgroundInfo info, - FileLike file, - String description, PipeRoot root) throws IOException - { - MS2Importer importer = createImporter(file, info, description, null, new XarContext(description, info.getContainer(), info.getUser())); - MS2Importer.RunInfo runInfo = importer.prepareRun(false); - MascotImportPipelineJob job = new MascotImportPipelineJob(info, file, description, runInfo, root); - try - { - PipelineService.get().queueJob(job); - } - catch (PipelineValidationException e) - { - throw new IOException(e); - } - return runInfo; - } - public static MS2Importer.RunInfo addRunToQueue(ViewBackgroundInfo info, FileLike file, String description, PipeRoot root) throws IOException @@ -626,8 +604,6 @@ private static MS2Importer createImporter(FileLike file, ViewBackgroundInfo info String fileName = file.toNioPathForRead().toFile().getPath(); if (endsWithExtOrExtDotGZ(fileName,".xml") || fileName.endsWith(".pepXML")) return new PepXmlImporter(info.getUser(), c, description, fileName, log, context); - else if (fileName.toLowerCase().endsWith(".dat")) - return new MascotDatImporter(info.getUser(), c, description, fileName, log, context); else throw new IOException("Unable to import file type '" + file + "'."); } @@ -841,19 +817,6 @@ public static MS2Run getRunByExperimentRunLSID(String lsid) { return runs[0]; } - - // Check if we have both an dat file and pepXML file - PepXMLFileType ft = new PepXMLFileType(); - if (name1.endsWith(".dat") && ft.isType(runs[1].getFileName())) - { - // Prefer the pepXML - return runs[1]; - } - if (name2.endsWith(".dat") && ft.isType(runs[0].getFileName())) - { - // Prefer the pepXML - return runs[0]; - } } return null; } @@ -1075,10 +1038,7 @@ public static Pair getSpectrumFromFile(int fractionId, int sca MS2Fraction fraction = MS2Manager.getFraction(fractionId); if (null == fraction) throw new SpectrumException("Can't locate fraction."); - if (StringUtils.endsWithIgnoreCase(fraction.getFileName(), ".dat")) - return getSpectrumFromDat(fraction, scan); - else - return getSpectrumFromMzXML(fraction, scan); + return getSpectrumFromMzXML(fraction, scan); } public static Pair getSpectrumFromMzXML(MS2Fraction fraction, int scan) throws SpectrumException @@ -1134,20 +1094,6 @@ public static Pair getSpectrumFromMzXML(MS2Fraction fraction, } } - private static Pair getSpectrumFromDat(@NotNull MS2Fraction fraction, int scan) throws SpectrumException - { - final FileLike f = FileSystemLike.wrapFile(new File(getRun(fraction.getRun()).getPath())).resolveChild(fraction.getFileName()); - NetworkDrive.ensureDrive(f); - try (MascotDatLoader loader = new MascotDatLoader(f, LOG)) - { - return loader.loadSpectrum(scan); - } - catch (IOException | XMLStreamException e) - { - throw new SpectrumException("Can't read .dat file", e); - } - } - private static void _addRunToCache(long runId, MS2Run run) { RUN_CACHE.put(RUN_CACHE_PREFIX + runId, run); diff --git a/ms2/src/org/labkey/ms2/MS2Module.java b/ms2/src/org/labkey/ms2/MS2Module.java index e8e2455a82..de7b8d6dc7 100644 --- a/ms2/src/org/labkey/ms2/MS2Module.java +++ b/ms2/src/org/labkey/ms2/MS2Module.java @@ -65,8 +65,6 @@ import org.labkey.ms2.pipeline.comet.Comet2014ParamsBuilder; import org.labkey.ms2.pipeline.comet.Comet2015ParamsBuilder; import org.labkey.ms2.pipeline.comet.CometPipelineProvider; -import org.labkey.ms2.pipeline.mascot.MascotCPipelineProvider; -import org.labkey.ms2.pipeline.mascot.MascotClientImpl; import org.labkey.ms2.pipeline.sequest.BooleanParamsValidator; import org.labkey.ms2.pipeline.sequest.ListParamsValidator; import org.labkey.ms2.pipeline.sequest.MultipleDoubleParamsValidator; @@ -81,7 +79,6 @@ import org.labkey.ms2.pipeline.tandem.XTandemPipelineProvider; import org.labkey.ms2.protein.Protein; import org.labkey.ms2.query.MS2Schema; -import org.labkey.ms2.reader.DatDocumentParser; import org.labkey.ms2.reader.MGFDocumentParser; import org.labkey.ms2.reader.MzMLDocumentParser; import org.labkey.ms2.reader.MzXMLDocumentParser; @@ -104,7 +101,7 @@ public class MS2Module extends SpringModule implements ProteomicsModule { public static final String WEBPART_PEP_SEARCH = "Peptide Search"; - public static final MS2SearchExperimentRunType SEARCH_RUN_TYPE = new MS2SearchExperimentRunType("MS2 Searches", MS2Schema.TableType.MS2SearchRuns.toString(), Handler.Priority.MEDIUM, MS2Schema.XTANDEM_PROTOCOL_OBJECT_PREFIX, MS2Schema.SEQUEST_PROTOCOL_OBJECT_PREFIX, MS2Schema.MASCOT_PROTOCOL_OBJECT_PREFIX, MS2Schema.COMET_PROTOCOL_OBJECT_PREFIX, MS2Schema.IMPORTED_SEARCH_PROTOCOL_OBJECT_PREFIX); + public static final MS2SearchExperimentRunType SEARCH_RUN_TYPE = new MS2SearchExperimentRunType("MS2 Searches", MS2Schema.TableType.MS2SearchRuns.toString(), Handler.Priority.MEDIUM, MS2Schema.XTANDEM_PROTOCOL_OBJECT_PREFIX, MS2Schema.SEQUEST_PROTOCOL_OBJECT_PREFIX, MS2Schema.COMET_PROTOCOL_OBJECT_PREFIX, MS2Schema.IMPORTED_SEARCH_PROTOCOL_OBJECT_PREFIX); public static final String MS2_RUNS_NAME = "MS2 Runs"; public static final String MS2_MODULE_NAME = "MS2"; @@ -117,7 +114,7 @@ public String getName() @Override public @Nullable Double getSchemaVersion() { - return 26.000; + return 26.001; } @Override @@ -184,7 +181,6 @@ protected void startupAfterSpringConfig(ModuleContext moduleContext) PipelineService service = PipelineService.get(); service.registerPipelineProvider(new MS2PipelineProvider(this)); service.registerPipelineProvider(new XTandemPipelineProvider(this), "X!Tandem (Cluster)"); - service.registerPipelineProvider(new MascotCPipelineProvider(this), "Mascot (Cluster)"); service.registerPipelineProvider(new SequestPipelineProvider(this)); service.registerPipelineProvider(new CometPipelineProvider(this), "Comet"); service.registerPipelineProvider(new ProteinProphetPipelineProvider(this)); @@ -194,7 +190,6 @@ protected void startupAfterSpringConfig(ModuleContext moduleContext) runTypes.add(new MS2SearchExperimentRunType("Imported Searches", MS2Schema.TableType.ImportedSearchRuns.toString(), Handler.Priority.HIGH, MS2Schema.IMPORTED_SEARCH_PROTOCOL_OBJECT_PREFIX)); runTypes.add(new MS2SearchExperimentRunType("X!Tandem Searches", MS2Schema.TableType.XTandemSearchRuns.toString(), Handler.Priority.HIGH, MS2Schema.XTANDEM_PROTOCOL_OBJECT_PREFIX)); runTypes.add(new MS2SearchExperimentRunType("Comet Searches", MS2Schema.TableType.CometSearchRuns.toString(), Handler.Priority.HIGH, MS2Schema.COMET_PROTOCOL_OBJECT_PREFIX)); - runTypes.add(new MS2SearchExperimentRunType("Mascot Searches", MS2Schema.TableType.MascotSearchRuns.toString(), Handler.Priority.HIGH, MS2Schema.MASCOT_PROTOCOL_OBJECT_PREFIX)); runTypes.add(new MS2SearchExperimentRunType("Sequest Searches", MS2Schema.TableType.SequestSearchRuns.toString(), Handler.Priority.HIGH, MS2Schema.SEQUEST_PROTOCOL_OBJECT_PREFIX)); ExperimentService.get().registerExperimentRunTypeSource(container -> @@ -208,7 +203,6 @@ protected void startupAfterSpringConfig(ModuleContext moduleContext) ExperimentService.get().registerExperimentDataHandler(new PepXmlExperimentDataHandler()); ExperimentService.get().registerExperimentDataHandler(new ProteinProphetExperimentDataHandler()); - ExperimentService.get().registerExperimentDataHandler(new MascotDatExperimentDataHandler()); ContainerManager.addContainerListener(new MS2ContainerListener()); FolderTypeManager.get().registerFolderType(this, new MS2FolderType(this)); @@ -221,7 +215,6 @@ protected void startupAfterSpringConfig(ModuleContext moduleContext) SearchService ss = SearchService.get(); ss.addDocumentParser(new MzXMLDocumentParser()); ss.addDocumentParser(new MzMLDocumentParser()); - ss.addDocumentParser(new DatDocumentParser()); ss.addDocumentParser(new SequestLogDocumentParser()); ss.addDocumentParser(new MGFDocumentParser()); @@ -304,7 +297,6 @@ public List getSchemaNames() return Set.of( Comet2014ParamsBuilder.FullParseTestCase.class, Comet2015ParamsBuilder.FullParseTestCase.class, - MascotClientImpl.TestCase.class, MS2Controller.TestCase.class, ThermoSequestParamsBuilder.TestCase.class ); diff --git a/ms2/src/org/labkey/ms2/MS2RunType.java b/ms2/src/org/labkey/ms2/MS2RunType.java index 04b801df9c..d1cf54ad22 100644 --- a/ms2/src/org/labkey/ms2/MS2RunType.java +++ b/ms2/src/org/labkey/ms2/MS2RunType.java @@ -25,14 +25,12 @@ import org.labkey.ms2.pipeline.UnknownMS2Run; import org.labkey.ms2.pipeline.comet.CometRun; import org.labkey.ms2.pipeline.comet.LegacyCometRun; -import org.labkey.ms2.pipeline.mascot.MascotRun; import org.labkey.ms2.pipeline.peaks.PeaksRun; import org.labkey.ms2.pipeline.phenyx.PhenyxRun; import org.labkey.ms2.pipeline.sequest.SequestRun; import org.labkey.ms2.pipeline.tandem.XCometRun; import org.labkey.ms2.pipeline.tandem.XTandemRun; import org.labkey.ms2.pipeline.tandem.XTandemcometRun; -import org.labkey.ms2.query.PeptidesTableInfo; import java.util.ArrayList; import java.util.Arrays; @@ -55,13 +53,6 @@ public enum MS2RunType implements Handler new ScoreInfo("SpRank", "sprank"), new ScoreInfo("DeltaCnStar", "deltacnstar"), new ScoreInfo("Expect", "expect")), - Mascot(MascotRun.class, - new ScoreInfo("Ion", "ionscore", "MASCOT IONS SCORE"), - new ScoreInfo("Identity", "identityscore"), - new ScoreInfo("Homology", "homologyscore"), - // Dummy score column so that Expect aligns at the same index for the score4 column with some of the other run types - new ScoreInfo(PeptidesTableInfo.DUMMY_SCORE_COLUMN_NAME, "null"), - new ScoreInfo("Expect", "expect")), Phenyx(PhenyxRun.class, new ScoreInfo("OrigScore", "origScore"), new ScoreInfo("Bogus", "bogus"), diff --git a/ms2/src/org/labkey/ms2/MascotDatExperimentDataHandler.java b/ms2/src/org/labkey/ms2/MascotDatExperimentDataHandler.java deleted file mode 100644 index 7f6edce1b9..0000000000 --- a/ms2/src/org/labkey/ms2/MascotDatExperimentDataHandler.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2015-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.labkey.ms2; - -import org.apache.commons.io.FilenameUtils; -import org.labkey.api.exp.XarContext; -import org.labkey.api.exp.api.ExpData; - -/** - * Created by susanh on 10/27/15. - */ -public class MascotDatExperimentDataHandler extends PepXmlExperimentDataHandler -{ - private static final String IMPORT_DAT_RESULTS = "mascot, import dat results"; - - @Override - protected boolean shouldImport(ExpData data, XarContext context) - { - return context.getJob() == null || !"false".equalsIgnoreCase(context.getJob().getParameters().get(IMPORT_DAT_RESULTS)); - } - - @Override - public Priority getPriority(ExpData data) - { - if (data != null && data.getFile() != null && FilenameUtils.isExtension(data.getFile().getName(), "dat")) - { - return Priority.HIGH; - } - return null; - } -} diff --git a/ms2/src/org/labkey/ms2/MascotDatImporter.java b/ms2/src/org/labkey/ms2/MascotDatImporter.java deleted file mode 100644 index f699eb4144..0000000000 --- a/ms2/src/org/labkey/ms2/MascotDatImporter.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright (c) 2007-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.labkey.ms2; - -import org.apache.logging.log4j.Logger; -import org.labkey.api.collections.IntHashMap; -import org.labkey.api.data.Container; -import org.labkey.api.data.RuntimeSQLException; -import org.labkey.api.exp.XarContext; -import org.labkey.api.security.User; -import org.labkey.api.util.NetworkDrive; -import org.labkey.ms2.reader.MS2Loader; -import org.labkey.ms2.reader.MascotDatLoader; -import org.labkey.vfs.FileLike; -import org.labkey.vfs.FileSystemLike; - -import javax.xml.stream.XMLStreamException; -import java.io.File; -import java.io.IOException; -import java.sql.SQLException; -import java.util.Map; - -/** - * Drives the higher-level workflow of parsing .dat files, but defers most of the actual work of reading the lines and - * stashing the results into the DB. - * User: adam - * Date: Jul 23, 2007 - */ -public class MascotDatImporter extends PeptideImporter -{ - Map _peptides = new IntHashMap<>(); - Map _decoyPeptides = new IntHashMap<>(); - - public MascotDatImporter(User user, Container c, String description, String fullFileName, Logger log, XarContext context) - { - super(user, c, description, fullFileName, log, context); - } - - @Override - public String getType() - { - return MS2RunType.Mascot.name(); - } - - @Override - public void importRun(MS2Progress progress) throws IOException, XMLStreamException - { - - FileLike f = FileSystemLike.wrapFile(new File(_path)).resolveChild(_fileName); - NetworkDrive.ensureDrive(f); - _fractionId = createFraction(_user, _container, _runId, _path, f); - MS2Loader.PeptideFraction fraction = new MS2Loader.PeptideFraction(); - fraction.setSpectrumPath(f.toNioPathForRead().toFile().getPath()); - - try (MascotDatLoader loader = new MascotDatLoader(f, _log)) - { - progress.setMs2FileInfo(loader.getFileLength(), loader.getCharactersRead()*2); - while (loader.findSection()) - { - MascotDatLoader.Section section = loader.getCurrentSection(); - switch (section) - { - case HEADER: - { - _log.info("Loading header"); - loader.loadHeader(fraction, _container); - if (loader.isLoaded(MascotDatLoader.Section.PARAMETERS) && loader.isLoaded(MascotDatLoader.Section.MASSES)) - writeRunInfo(fraction, progress); - - break; - } - case PARAMETERS: - { - _log.info("Loading parameters"); - loader.loadParameters(fraction, _container); - if (loader.isLoaded(MascotDatLoader.Section.HEADER) && loader.isLoaded(MascotDatLoader.Section.MASSES)) - writeRunInfo(fraction, progress); - break; - } - case MASSES: - { - _log.info("Loading masses"); - loader.loadMasses(fraction); - if (loader.isLoaded(MascotDatLoader.Section.HEADER) && loader.isLoaded(MascotDatLoader.Section.PARAMETERS)) - writeRunInfo(fraction, progress); - break; - } - case PEPTIDES: - { - _log.info("Loading peptides"); - if (!loader.isLoaded(MascotDatLoader.Section.PARAMETERS) || !loader.isLoaded(MascotDatLoader.Section.HEADER)) - _log.error("Peptides section encountered before parameters and header; no run information available."); - progress.getCumulativeTimer().setCurrentTask(Tasks.ImportPeptides, " from file " + fraction.getSpectrumPath()); - progress.setPeptideMode(); - loader.loadPeptides(_peptides, fraction, false); - progress.setCurrentMs2FileOffset(loader.getCharactersRead()*2); - break; - } - case SUMMARY: - { - _log.info("Loading summary"); - loader.loadSummary(_peptides, false); - progress.setCurrentMs2FileOffset(loader.getCharactersRead()*2); - break; - } - case QUERY: - { - if (loader.getCurrentQueryNum() == 1 ) - _log.info("Loading query data"); - loader.loadQuery(_peptides, _decoyPeptides); - progress.setCurrentMs2FileOffset(loader.getCharactersRead()*2); - break; - } - case DECOY_PEPTIDES: - { - _log.info("Loading decoy peptides"); - if (!loader.isLoaded(MascotDatLoader.Section.PARAMETERS) || !loader.isLoaded(MascotDatLoader.Section.HEADER)) - _log.error("Decoy section encountered before parameters and header; no run information available."); - progress.getCumulativeTimer().setCurrentTask(Tasks.ImportDecoys, " from file " + fraction.getSpectrumPath()); - progress.setPeptideMode(); - loader.loadPeptides(_decoyPeptides, fraction, true); - progress.setCurrentMs2FileOffset(loader.getCharactersRead()*2); - break; - } - case DECOY_SUMMARY: - { - _log.info("Loading decoy summary"); - loader.loadSummary(_decoyPeptides, true); - progress.setCurrentMs2FileOffset(loader.getCharactersRead()*2); - break; - } - } - } - progress.setImportSpectra(false); - progress.setCurrentMs2FileOffset(loader.getFileLength()); - writePeptides(_peptides, false); - // Not every file will have decoys, but we built this list up in the query section - if (loader.isLoaded(MascotDatLoader.Section.DECOY_PEPTIDES)) - writePeptides(_decoyPeptides, true); - } - catch (SQLException e) - { - throw new RuntimeSQLException(e); - } - } - - private void writePeptides(Map peptides, boolean decoys) throws SQLException - { - _log.info("Writing data for {} {}peptides", peptides.size(), decoys ? "decoy " : ""); - int complete = 0; - int index = 0; - for (MascotDatLoader.DatPeptide peptide : peptides.values()) - { - // There can be some data for peptides that were not found. e.g., a scan may only have a corresponding peptide or decoy peptide, - // but not both. We skip over those. - if (peptide.getTrimmedPeptide() != null) - { - peptide.setDerivedFieldValues(); - write(peptide, null); - for (MascotDatLoader.DatPeptide higherHitRank : peptide.getOtherHitRanks()) - { - higherHitRank.mergeQueryAndSummarySections(peptide, true); - higherHitRank.setDerivedFieldValues(); - write(higherHitRank, null); - } - } - index++; - int newComplete = (int)(((float)index / (float)peptides.size()) * 100.0); - if (newComplete != complete) - { - _log.info("Writing MS/MS{} results is {}% complete", decoys ? " decoy" : "", newComplete); - complete = newComplete; - } - } - - } -} diff --git a/ms2/src/org/labkey/ms2/PepXmlImporter.java b/ms2/src/org/labkey/ms2/PepXmlImporter.java index c9e639006b..8db881975d 100644 --- a/ms2/src/org/labkey/ms2/PepXmlImporter.java +++ b/ms2/src/org/labkey/ms2/PepXmlImporter.java @@ -122,8 +122,7 @@ public void importRun(MS2Progress progress) throws XMLStreamException, IOExcepti if (null != peptide.getRetentionTime()) retentionTimesInPepXml = true; - // Mascot exported pepXML may contain unassigned spectrum - // we omit them for import + // Omit unassigned spectra if (null != peptide.getTrimmedPeptide()) { write(peptide, summary); @@ -176,7 +175,7 @@ private void writeFractionInfo(MS2Loader.PeptideFraction fraction) throws IOExce { _gzFileName = switchSuffix(_fileName, dataSuffix); } - // No spectrumPath in a sequest or Mascot pepXML file. + // No spectrumPath in a sequest pepXML file. if (fraction.getSpectrumPath() == null) { // First, check two directories up from the MS2 results. This is where searches done through the CPAS @@ -227,12 +226,10 @@ protected static String switchSuffix(String filename, String suffix) protected void processSpectrumFile(PepXmlFraction fraction, Set scans, MS2Progress progress, boolean shouldLoadSpectra, boolean shouldLoadRetentionTimes) { FileLike mzXmlFile = FileSystemLike.wrapFile(getMzXMLFile(fraction)); - if ((_run.getType().equalsIgnoreCase(MS2RunType.Mascot.name())||_run.getType().equalsIgnoreCase(MS2RunType.Sequest.name())) // TODO: Move this check (perhaps all the code) into the appropriate run classes + if (_run.getType().equalsIgnoreCase(MS2RunType.Sequest.name()) // TODO: Move this check (perhaps all the code) into the appropriate run classes && null == mzXmlFile) { // we attempt to load spectra from .mzXML rather than .pep.tgz - // (that is, the faked-up .out and .dta files from Mascot2XML) - // generation of .pep.tgz can be turned off via (Mascot2XML -notgz) String baseName = _gzFileName; baseName = baseName.replaceAll("\\.pep\\.tgz$", ""); massSpecDataFileType FT_MZXML = new massSpecDataFileType(); diff --git a/ms2/src/org/labkey/ms2/PeptideImporter.java b/ms2/src/org/labkey/ms2/PeptideImporter.java index 80d4ed2441..f5c7a4a4fb 100644 --- a/ms2/src/org/labkey/ms2/PeptideImporter.java +++ b/ms2/src/org/labkey/ms2/PeptideImporter.java @@ -65,7 +65,7 @@ public abstract class PeptideImporter extends MS2Importer /** * ProteomeDiscoverer does not write out pepXML file with full fraction information, even for fraction searches * Thus, we end up importing data as if it was all from a single fraction, which can cause errors when multiple fractions - * have IDs on the same scan numbers. Thus, as a hack, assign a "queryNumber" (ala Mascot) to make each ID unique. + * have IDs on the same scan numbers. Thus, as a hack, assign a "queryNumber" to make each ID unique. */ private int _proteomeDiscovererOffset = 0; @@ -119,8 +119,6 @@ public void writeRunInfo(MS2Loader.PeptideFraction fraction, MS2Progress progres m.put("SearchEngine", fraction.getSearchEngine()); m.put("MassSpecType", fraction.getMassSpecType()); m.put("SearchEnzyme", fraction.getSearchEnzyme()); - m.put("MascotFile", fraction.getMascotFile()); - m.put("DistillerRawFile", fraction.getDistillerRawFile()); List dbPaths = new ArrayList<>(); diff --git a/ms2/src/org/labkey/ms2/mascotConfig.jsp b/ms2/src/org/labkey/ms2/mascotConfig.jsp deleted file mode 100644 index e97d8d2110..0000000000 --- a/ms2/src/org/labkey/ms2/mascotConfig.jsp +++ /dev/null @@ -1,118 +0,0 @@ -<% -/* - * Copyright (c) 2015-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -%> -<%@ taglib prefix="labkey" uri="http://www.labkey.org/taglib" %> -<%@ page import="org.labkey.api.admin.AdminUrls"%> -<%@ page import="org.labkey.api.data.Container" %> -<%@ page import="org.labkey.api.view.ActionURL" %> -<%@ page import="org.labkey.ms2.MS2Controller.MascotConfigAction" %> -<%@ page import="org.labkey.ms2.MS2Controller.MascotTestAction" %> -<%@ page import="org.labkey.ms2.pipeline.mascot.MascotConfig" %> -<%@ page extends="org.labkey.api.jsp.JspBase" %> - -<%=formatMissedErrors("form")%> -<% - Container container = getContainer(); - MascotConfig mascotConfig = MascotConfig.findMascotConfig(container); - boolean inherited = !mascotConfig.getContainer().equals(container); -%> - - - - - - - - <% - if (inherited) { %> - - - - <% } %> - - - - - - - - - - - - - - - - - - - - - - - - -
Configure Mascot settings (<%=helpLink("configMascot", "more info...")%>)
- Configuration is currently being inherited from <%= h(mascotConfig.getContainer().isRoot() ? "the site-level" : mascotConfig.getContainer().getPath())%>. - Saving will override the inherited configuration.
- <%= link("edit inherited settings", new ActionURL(MascotConfigAction.class, mascotConfig.getContainer()))%> -
Mascot server URL<%= helpPopup("Mascot server URL", "Should start with http:// or https://")%>
User
Password
HTTP Proxy URL
<%=link("Test Mascot settings").id("testMascot")%> -
 
- - <%= button("Save").submit(true) %> - <%= button("Cancel").href(urlProvider(AdminUrls.class).getAdminConsoleURL())%> - <% if (!inherited) { %> - <%= button("Clear Settings").onClick("document.getElementById('resetInput').value = 'true'; document.forms['preferences'].submit();") %> - <% } %> -
- - - - - - - diff --git a/ms2/src/org/labkey/ms2/peptideview/AbstractMS2RunView.java b/ms2/src/org/labkey/ms2/peptideview/AbstractMS2RunView.java index 5626452250..cd7d57e2b2 100644 --- a/ms2/src/org/labkey/ms2/peptideview/AbstractMS2RunView.java +++ b/ms2/src/org/labkey/ms2/peptideview/AbstractMS2RunView.java @@ -205,7 +205,7 @@ public void setPeptideUrls(DataRegion rgn, String extraPeptideUrlParams) { ActionURL baseURL = null != extraPeptideUrlParams ? new ActionURL(_url.toString() + "&" + extraPeptideUrlParams) : _url.clone(); baseURL.setAction(MS2Controller.ShowPeptideAction.class); - // We might be displaying a peptide grid within a peptide detail (e.g. all matches in a Mascot run); don't duplicate the peptideId & rowIndex params + // We might be displaying a peptide grid within a peptide detail (e.g. all matches for a spectrum); don't duplicate the peptideId & rowIndex params // TODO: Should DetailsURL replaceParameter instead of addParameter? baseURL.deleteParameter("peptideId"); baseURL.deleteParameter("rowIndex"); diff --git a/ms2/src/org/labkey/ms2/peptideview/ResultSetSpectrumIterator.java b/ms2/src/org/labkey/ms2/peptideview/ResultSetSpectrumIterator.java index 148489ebf4..c3f67314d4 100644 --- a/ms2/src/org/labkey/ms2/peptideview/ResultSetSpectrumIterator.java +++ b/ms2/src/org/labkey/ms2/peptideview/ResultSetSpectrumIterator.java @@ -39,7 +39,7 @@ public class ResultSetSpectrumIterator implements SpectrumIterator { protected ResultSet _rs; - /** Cache the last 100 spectra loaded, especially useful for Mascot where there many be multiple hits per spectra */ + /** Cache the last 100 spectra loaded, especially useful when there are multiple hits per spectrum */ private final Map, Pair> _lruCache = new LinkedHashMap<>() { /** diff --git a/ms2/src/org/labkey/ms2/pipeline/AbstractMS2SearchPipelineProvider.java b/ms2/src/org/labkey/ms2/pipeline/AbstractMS2SearchPipelineProvider.java index d9599836f0..575d46a093 100644 --- a/ms2/src/org/labkey/ms2/pipeline/AbstractMS2SearchPipelineProvider.java +++ b/ms2/src/org/labkey/ms2/pipeline/AbstractMS2SearchPipelineProvider.java @@ -29,7 +29,7 @@ import java.io.File; /** - * Common base class for pipeline providers that map to MS2 searches (XTandem, Mascot, etc) + * Common base class for pipeline providers that map to MS2 searches (XTandem, Comet, etc) */ abstract public class AbstractMS2SearchPipelineProvider extends AbstractMS2PipelineProvider diff --git a/ms2/src/org/labkey/ms2/pipeline/MS2PipelineManager.java b/ms2/src/org/labkey/ms2/pipeline/MS2PipelineManager.java index c921ae4daa..9dc5f53029 100644 --- a/ms2/src/org/labkey/ms2/pipeline/MS2PipelineManager.java +++ b/ms2/src/org/labkey/ms2/pipeline/MS2PipelineManager.java @@ -23,7 +23,6 @@ import org.labkey.api.util.NetworkDrive; import org.labkey.api.util.Path; import org.labkey.api.view.NotFoundException; -import org.labkey.ms2.pipeline.mascot.MascotSearchTask; import org.labkey.vfs.FileLike; import org.labkey.vfs.FileSystemLike; @@ -60,9 +59,6 @@ public static class UploadFileFilter extends PipelineProvider.FileEntryFilter @Override public boolean accept(File file) { - if (MascotSearchTask.isNativeOutputFile(FileSystemLike.wrapFile(file))) - return true; - if (TPPTask.isPepXMLFile(file)) { FileLike parent = FileSystemLike.wrapFile(file.getParentFile()); @@ -154,16 +150,6 @@ private static FileLike getSequenceDatabaseRoot(PipeRoot root) return root.resolvePathToFileLike(DEFAULT_FASTA_DIR); } - public static FileLike getLocalMascotFile(FileLike sequenceRoot, String db, String release) - { - return sequenceRoot.resolveFile(Path.parse("mascot/" + db + "/" + release)); - } - - public static FileLike getLocalMascotFileHash(FileLike sequenceRoot, String db, String release) - { - return sequenceRoot.resolveFile(Path.parse("mascot/" + db + "/" + release+".hash")); - } - public static boolean exists(File file, Set knownFiles, Set checkedDirectories) { File parent = file.getParentFile(); diff --git a/ms2/src/org/labkey/ms2/pipeline/PipelineController.java b/ms2/src/org/labkey/ms2/pipeline/PipelineController.java index 8eb171ab66..877584f3ef 100644 --- a/ms2/src/org/labkey/ms2/pipeline/PipelineController.java +++ b/ms2/src/org/labkey/ms2/pipeline/PipelineController.java @@ -43,8 +43,6 @@ import org.labkey.ms2.MS2Controller; import org.labkey.ms2.MS2Manager; import org.labkey.ms2.pipeline.comet.CometPipelineProvider; -import org.labkey.ms2.pipeline.mascot.MascotCPipelineProvider; -import org.labkey.ms2.pipeline.mascot.MascotSearchTask; import org.labkey.ms2.pipeline.sequest.SequestPipelineProvider; import org.labkey.ms2.pipeline.tandem.XTandemPipelineProvider; import org.labkey.ms2.pipeline.tandem.XTandemSearchProtocolFactory; @@ -112,31 +110,15 @@ public boolean handlePost(PipelinePathForm form, BindException errors) String baseName = FileUtil.getBaseName(file, extParts); // If the data was created by our pipeline, try to get the name // to look like the normal generated name. - - String protocolName; - FileLike dirDataOriginal; - String description; - if (MascotSearchTask.isNativeOutputFile(file)) - { - //TODO: wch: use an appropriate protocol - // after all, this is what the Mascot search processing is doing - // mascot .dat result file does not follow that of pipeline - description = file.getName(); - } - else + String protocolName = file.getParent().getName(); + FileLike dirDataOriginal = file.getParent().getParent(); + if (dirDataOriginal != null && + dirDataOriginal.getName().equals(XTandemSearchProtocolFactory.get().getName())) { - // If the data was created by our pipeline, try to get the name - // to look like the normal generated name. - protocolName = file.getParent().getName(); - dirDataOriginal = file.getParent().getParent(); - if (dirDataOriginal != null && - dirDataOriginal.getName().equals(XTandemSearchProtocolFactory.get().getName())) - { - dirDataOriginal = dirDataOriginal.getParent(); - } - description = AbstractFileAnalysisJob. - getDataDescription(dirDataOriginal, baseName, AbstractFileAnalysisProtocol.LEGACY_JOINED_BASENAME, protocolName, Collections.emptyList()); + dirDataOriginal = dirDataOriginal.getParent(); } + String description = AbstractFileAnalysisJob. + getDataDescription(dirDataOriginal, baseName, AbstractFileAnalysisProtocol.LEGACY_JOINED_BASENAME, protocolName, Collections.emptyList()); ViewBackgroundInfo info = getViewBackgroundInfo(); try @@ -149,10 +131,6 @@ else if (TPPTask.isPepXMLFile(file)) { MS2Manager.addRunToQueue(info, file, description, form.getPipeRoot(getContainer())); } - else if (MascotSearchTask.isNativeOutputFile(file)) - { - MS2Manager.addMascotRunToQueue(info, file, description, form.getPipeRoot(getContainer())); - } } catch (IOException e) { @@ -282,34 +260,6 @@ public void addNavTrail(NavTree root) } } - @RequiresPermission(AdminPermission.class) - public static class SetMascotDefaultsAction extends SetDefaultsActionBase - { - @Override - public String getProviderName() - { - return MascotCPipelineProvider.name; - } - - @Override - public ModelAndView getJspView(SetDefaultsForm form, BindException errors) - { - return new JspView<>("/org/labkey/ms2/pipeline/mascot/setMascotDefaults.jsp", form, errors); - } - - @Override - public String getHelpTopic() - { - return "pipelineMascot"; - } - - @Override - public void addNavTrail(NavTree root) - { - root.addChild("Set Mascot Defaults"); - } - } - @RequiresPermission(AdminPermission.class) public static class SetSequestDefaultsAction extends SetDefaultsActionBase { diff --git a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotCPipelineProvider.java b/ms2/src/org/labkey/ms2/pipeline/mascot/MascotCPipelineProvider.java deleted file mode 100644 index 3692e40fa0..0000000000 --- a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotCPipelineProvider.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (c) 2007-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.labkey.ms2.pipeline.mascot; - -import org.jetbrains.annotations.NotNull; -import org.labkey.api.data.Container; -import org.labkey.api.module.Module; -import org.labkey.api.pipeline.PipeRoot; -import org.labkey.api.pipeline.PipelineActionConfig; -import org.labkey.api.pipeline.PipelineDirectory; -import org.labkey.api.view.ActionURL; -import org.labkey.api.view.HttpView; -import org.labkey.api.view.ViewContext; -import org.labkey.api.view.WebPartView; -import org.labkey.api.writer.HtmlWriter; -import org.labkey.ms2.MS2Controller; -import org.labkey.ms2.pipeline.AbstractMS2SearchPipelineProvider; -import org.labkey.ms2.pipeline.AbstractMS2SearchProtocolFactory; -import org.labkey.ms2.pipeline.MS2PipelineManager; -import org.labkey.ms2.pipeline.MS2PipelineProvider; -import org.labkey.ms2.pipeline.MS2PipelineProvider.Setting; -import org.labkey.ms2.pipeline.PipelineController; - -import java.io.IOException; -import java.util.Collections; -import java.util.List; - -public class MascotCPipelineProvider extends AbstractMS2SearchPipelineProvider -{ - public static String name = "Mascot"; - private static final String ACTION_LABEL = "Mascot Peptide Search"; - - public MascotCPipelineProvider(Module owningModule) - { - super(name, owningModule, MascotSearchTask.Factory.class); - } - - @Override - public boolean isStatusViewableFile(Container container, String name, String basename) - { - if ("mascot.xml".equals(name)) - return true; - - return super.isStatusViewableFile(container, name, basename); - } - - @Override - public void updateFilePropertiesEnabled(ViewContext context, PipeRoot pr, PipelineDirectory directory, boolean includeAll) - { - if (!MascotConfig.findMascotConfig(context.getContainer()).hasMascotServer()) - return; - - String actionId = getActionId(); - addAction(actionId, getTaskPipeline(MascotPipelineJob.TASK_ID).getAnalyzeURL(context.getContainer(), null, null), ACTION_LABEL, - directory, directory.listPaths(MS2PipelineManager.getAnalyzeFilter()), true, true, includeAll); - } - - @Override - protected String getActionId() - { - // Retain old GWT action class as the action ID to preserve file browser button configuration - return createActionId("org.labkey.ms2.pipeline.PipelineController$SearchMascotAction", ACTION_LABEL); - } - - @Override - public List getDefaultActionConfigSkipModuleEnabledCheck(Container container) - { - if (isEnabled() && MascotConfig.findMascotConfig(container).hasMascotServer()) - { - String actionId = getActionId(); - return Collections.singletonList(new PipelineActionConfig(actionId, PipelineActionConfig.displayState.toolbar, ACTION_LABEL, true)); - } - return super.getDefaultActionConfigSkipModuleEnabledCheck(container); - } - - @Override - @NotNull - public HttpView createSetupWebPart(Container container) - { - return new SetupWebPart(); - } - - private static class SetupWebPart extends WebPartView - { - public SetupWebPart() - { - super(FrameType.DIV); - } - - @Override - protected void renderView(Object model, HtmlWriter out) - { - ViewContext context = getViewContext(); - ActionURL setDefaultsURL = new ActionURL(PipelineController.SetMascotDefaultsAction.class, context.getContainer()); - ActionURL configMascotURL = new ActionURL(MS2Controller.MascotConfigAction.class, context.getContainer()); - MS2PipelineProvider.renderSettings(context, "Mascot", out, - new Setting(setDefaultsURL, "Mascot"), - new Setting(configMascotURL, "Configure Mascot Server", "Specify connection information for the Mascot Server.") - ); - } - } - - @Override - public AbstractMS2SearchProtocolFactory getProtocolFactory() - { - return MascotSearchProtocolFactory.get(); - } - - @NotNull - private MascotConfig ensureMascotConfig(Container container) throws IOException - { - MascotConfig config = MascotConfig.findMascotConfig(container); - if (!config.hasMascotServer()) - throw new IOException("Mascot Server has not been configured."); - return config; - } -} diff --git a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotClientImpl.java b/ms2/src/org/labkey/ms2/pipeline/mascot/MascotClientImpl.java deleted file mode 100644 index e82f4002ce..0000000000 --- a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotClientImpl.java +++ /dev/null @@ -1,1469 +0,0 @@ -/* - * Copyright (c) 2007-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.labkey.ms2.pipeline.mascot; - -import org.apache.commons.beanutils.converters.BooleanConverter; -import org.apache.commons.io.FileUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.hc.client5.http.classic.methods.HttpPost; -import org.apache.hc.client5.http.entity.mime.FileBody; -import org.apache.hc.client5.http.entity.mime.MultipartEntityBuilder; -import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; -import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse; -import org.apache.hc.client5.http.impl.classic.HttpClients; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.junit.Assert; -import org.junit.Assume; -import org.junit.Test; -import org.labkey.api.module.ModuleLoader; -import org.labkey.ms2.pipeline.SearchClient; -import org.labkey.api.pipeline.ParamParser; -import org.labkey.api.pipeline.PipelineJob; -import org.labkey.api.pipeline.PipelineJobService; -import org.labkey.api.settings.AppProps; -import org.labkey.api.util.FileUtil; -import org.labkey.api.util.HelpTopic; -import org.labkey.api.view.ActionURL; -import org.labkey.ms2.pipeline.AbstractMS2SearchProtocolFactory; -import org.labkey.ms2.pipeline.AbstractMS2SearchTask; - -import java.io.BufferedInputStream; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; -import java.net.URLEncoder; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Properties; - - -/** - * Client to make Mascot-specific request - */ - -public class MascotClientImpl implements SearchClient -{ - private static final Logger _log = LogManager.getLogger(MascotClientImpl.class); - - private final Logger _instanceLogger; - - private String _url; - private String _userAccount; - private String _userPassword; - private String _proxyURL = ""; - private int errorCode; - private String errorString; - - private static volatile int _lastWorkingSet = 0; - private static volatile String _lastWorkingUrl = ""; - private static volatile String _lastProvidedUrl = ""; - private static volatile String _lastProvidedUserAccount = ""; - private static volatile String _lastProvidedUserPassword = ""; - private static volatile String _lastProvidedProxy = ""; - - public MascotClientImpl(String url, Logger instanceLogger) - { - this(url, instanceLogger, "", ""); - } - - public MascotClientImpl(String url, Logger instanceLogger, String userAccount, String userPassword) - { - _url = (null == url) ? "" : url; - _instanceLogger = (null == instanceLogger) ? _log : instanceLogger; - _userAccount = (null == userAccount) ? "" : userAccount; - _userPassword = (null == userPassword) ? "" : userPassword; - errorCode = 0; - errorString=""; - } - - public void setUserAccount (String userAccount) - { - _userAccount = (null == userAccount) ? "" : userAccount; - } - - public void setUserPassword (String userPassword) - { - _userPassword = (null == userPassword) ? "" : userPassword; - } - - @Override - public int getErrorCode () - { - return errorCode; - } - - @Override - public String getErrorString () - { - return errorString; - } - - @Override - public boolean setProxyURL (String proxyURL) - { - // let' works on the proxy server setup - boolean succeeded = false; - if (null == proxyURL || proxyURL.isEmpty()) - { - proxyURL = ""; - Properties systemProperties = System.getProperties(); - systemProperties.setProperty("http.proxyHost",""); - systemProperties.setProperty("http.proxyPort","80"); - succeeded = true; - } - else - { - try - { - URL url = new URL(proxyURL); - Properties systemProperties = System.getProperties(); - systemProperties.setProperty("http.proxyHost",url.getHost()); - systemProperties.setProperty("http.proxyPort",Integer.toString(url.getPort())); - succeeded = true; - } - catch (MalformedURLException x) - { - getLogger().info("request(proxyURL={})", proxyURL, x); - } - } - if (succeeded) - _proxyURL = proxyURL; - return succeeded; - } - - public String testConnectivity(boolean useAuthentication) - { - // to test and report connectivity problem - errorCode = 0; - errorString = ""; - String sessionId = startSession(); - if (0 == errorCode) - { - // no error, terminate session - endSession (sessionId); - return ""; - } - else if (!useAuthentication && -3 == errorCode) - { - // Mascot security enabled, but it means Mascot responded - return ""; - } - else - { - return (("".equals(errorString)) ? "Fail to contact Mascot server at " + _url : errorString); - } - } - - @Override - public void findWorkableSettings(boolean useAuthentication) - { - errorCode = 0; - errorString = ""; - - if (_lastWorkingSet>0) - { - // TODO: check that we can re-use the workable setting - if (_lastProvidedUrl.equals(_url) - && _lastProvidedProxy.equals(_proxyURL)) - { - if (!useAuthentication) - { - _url = _lastWorkingUrl; - return; - } - else if (2 == _lastWorkingSet - && _lastProvidedUserAccount.equals(_userAccount) - && _lastProvidedUserPassword.equals(_userPassword)) - { - _url = _lastWorkingUrl; - return; - } - } - - _lastWorkingSet = 0; - } - - // we have to figure out which is the workable settings from what are given - _lastWorkingUrl = ""; - _lastProvidedUserAccount = ""; - _lastProvidedUserPassword = ""; - _lastProvidedProxy = ""; - - String originalUrl = _url; - try - { - URL url; - if (!_url.startsWith("http://")) - url = new URL("http://"+_url); - else - url = new URL(_url); - - //http://mascot.server.org/mascot/cgi-bin/login.pl - //http://mascot.server.org/cgi/login.pl - //http://mascot.server.org/ - //mascot.server.org - - List possibleURLs = new ArrayList<>(); - // user provided a http://host/path, we shall test this first - if (!"".equals(url.getPath())) - possibleURLs.add(_url); - if (!(_url.endsWith("cgi")) || _url.endsWith("cgi/")) - { - if (_url.endsWith("/")) - { - possibleURLs.add(_url + "cgi/"); - } - else - { - possibleURLs.add(_url + "/cgi"); - } - } - - StringBuffer alternativeLink; - alternativeLink = new StringBuffer("http://"); - alternativeLink.append(url.getHost()); - if (80 != url.getPort() && -1 != url.getPort()) { - alternativeLink.append(":").append(url.getPort()); - } - String alternativeLinkPrefix = alternativeLink.toString(); - String alternativeUrl = "/mascot/cgi/"; - if (!alternativeUrl.equals(url.getPath())) - possibleURLs.add(alternativeLinkPrefix + alternativeUrl); - alternativeUrl = "/cgi/"; - if (!alternativeUrl.equals(url.getPath())) - possibleURLs.add(alternativeLinkPrefix + alternativeUrl); - - for (String testUrl : possibleURLs) - { - _url = testUrl; - String sessionId = startSessionInternal(); - int attemptStatus = getErrorCode(); - String attemptMessage = getErrorString(); - if (!"".equals(sessionId)) - { - endSession(sessionId); - } - - errorCode = attemptStatus; - errorString = attemptMessage; - if (!(1 == attemptStatus || 2 == attemptStatus)) - { - if (0 == attemptStatus) - { - if (!originalUrl.equals(testUrl)) - errorString = "Test passed ONLY when mascot server is set to " + testUrl; - - _lastWorkingSet = 2; - _lastWorkingUrl = testUrl; - _lastProvidedUrl = originalUrl; - _lastProvidedUserAccount = _userAccount; - _lastProvidedUserPassword = _userPassword; - _lastProvidedProxy = _proxyURL; - - break; - } - else - { - errorString = "Mascot server responded on " + testUrl + " with \"" + attemptMessage + "\""; - - _lastWorkingSet = 1; - _lastWorkingUrl = testUrl; - _lastProvidedUrl = originalUrl; - _lastProvidedProxy = _proxyURL; - - if (!useAuthentication) break; - } - } - } - if (_lastWorkingSet>0) - _url = _lastWorkingUrl; - } - catch (MalformedURLException x) - { - getLogger().error("connect({},{},{},{})", _url, _userAccount, _userPassword, _proxyURL, x); - //Fail to parse Mascot Server URL - errorCode = 1; - errorString = "Failed to parse Mascot Server URL"; - } - } - - public Map getDBInfo(String db, String release) - { - errorCode = 0; - errorString = ""; - - findWorkableSettings (false); - - Properties results; - Properties parameters = new Properties(); - parameters.setProperty("cgi", "labkeydbmgmt.pl"); - parameters.setProperty("cmd", "dbinfo"); - parameters.setProperty("db", db); - parameters.setProperty("release", release); - - results = request (parameters, true); - Map returns=new HashMap<>(); - for(Map.Entry entry: results.entrySet()) { - returns.put((String)entry.getKey(),(String)entry.getValue()); - } - return returns; - } - - public void downloadDB(String localDB, String db, String release, String hash, long filesize, long timestamp) throws IOException - { - FileOutputStream fOut; - try - { - fOut=new FileOutputStream(localDB); - } - catch (FileNotFoundException e) - { - throw new IOException("Fail to open "+localDB, e); - } - - try (PrintWriter writer = new PrintWriter(fOut)) - { - long offset = 0; - while (offset < filesize) - { - String result = downloadDBChunk(db, release, offset, hash, filesize, timestamp); - if (result.startsWith("STATUS=OK\n")) - { - String chunkSize = ""; - int nPos2 = 0; - int nPos1 = result.indexOf("SIZE="); - if (-1 != nPos1) - { - nPos2 = result.indexOf("\n", nPos1 + 1); - if (-1 != nPos2) - { - chunkSize = result.substring(nPos1 + 5, nPos2); - } - } - - if (chunkSize.isEmpty()) - { - throw new IOException("Fail to parse chunk size when attempting to download DB " + db); - } - - int nBytes = result.length() - (nPos2 + 1); - int numChunkSize = Integer.parseInt(chunkSize); - if (numChunkSize <= nBytes) - { - // we skip the last "\n" which is added by our system - writer.write(result, nPos2 + 1, numChunkSize); - offset += numChunkSize; - - getLogger().info("Downloaded {} bytes.", offset); - - } - else - { - throw new IOException("Chunk size " + chunkSize + " greater than read size " + nBytes); - } - - } - else - { - // there was some problem, we bail out - StringBuilder sb = new StringBuilder(); - int nPos1 = result.indexOf("\n"); - if (-1 != nPos1) - { - sb.append(result, 0, nPos1 - 1); - } - int nPos2 = result.indexOf("\n", nPos1 + 1); - if (-1 != nPos2) - { - if (-1 != nPos1) sb.append(","); - sb.append(result, nPos1 + 1, nPos2 - 1); - } - throw new IOException(sb.toString()); - } - } - } - } - - public String downloadDBChunk(String db, String release, long offset, String hash, long filesize, long timestamp) - { - errorCode = 0; - errorString = ""; - - findWorkableSettings (false); - - //Properties results; - Properties parameters = new Properties(); - parameters.setProperty("cgi", "labkeydbmgmt.pl"); - parameters.setProperty("cmd", "downloaddb"); - parameters.setProperty("db", db); - parameters.setProperty("release", release); - StringBuffer sb = new StringBuffer(); - sb.append(offset); - parameters.setProperty("offset", sb.toString()); - parameters.setProperty("hash", hash); - sb=new StringBuffer(); - sb.append(filesize); - parameters.setProperty("filesize", sb.toString()); - sb=new StringBuffer(); - sb.append(timestamp); - parameters.setProperty("timestamp", sb.toString()); - - //results = request (parameters, false); - //return results.getProperty("HTTPContent", ""); - - try (InputStream in = getRequestResultStream (parameters)) - { - if (null == in) - return "STATUS=Fail to get result stream\n"; - BufferedReader reader = new BufferedReader(new InputStreamReader(in)); - sb = new StringBuffer(5 * 1024 * 1024 + 4 * 1024); - char[] buffer = new char[4096]; // use 4-KB fragment - int readLen; - while ((readLen = reader.read(buffer)) > 0) - { - sb.append(buffer, 0, readLen); - } - } - catch (IOException e) - { - getLogger().warn("Encountered exception after reading {} byte(s)", sb.length(), e); - } - - return sb.toString(); - } - - public String startSession () - { - findWorkableSettings (true); - - if (0 == errorCode) - return startSessionInternal(); - else - return ""; - } - - private String startSessionInternal () - { - Properties results; - - errorCode = 0; - errorString = ""; - if ("".equals(_userAccount) && "".equals(_userPassword)) - { - //anoymous session - //GET /cgi/login.pl?display=nothing&onerrdisplay=nothing&action=issecuritydisabled - Properties parameters = new Properties(); - parameters.setProperty("cgi", "login.pl"); - parameters.setProperty("display", "nothing"); - parameters.setProperty("onerrdisplay", "nothing"); - parameters.setProperty("action", "issecuritydisabled"); - results = request (parameters, true); - } - else - { - //GET /cgi/login.pl?display=nothing&onerrdisplay=nothing&action=login&username=&password= - Properties parameters = new Properties(); - parameters.setProperty("cgi", "login.pl"); - parameters.setProperty("display", "nothing"); - parameters.setProperty("onerrdisplay", "nothing"); - parameters.setProperty("action", "login"); - parameters.setProperty("username", _userAccount); - parameters.setProperty("password", _userPassword); - results = request (parameters, true); - } - if ("0".equals(results.getProperty("error","0"))) - return results.getProperty("sessionID", ""); - else - { - if (results.containsKey("error")) - errorCode = Integer.parseInt(results.getProperty("error", "0")); - return ""; - } - } - - public void endSession (String sessionID) - { - errorCode = 0; - errorString = ""; - - if ("".equals(sessionID)) - return; - - //GET /cgi/login.pl?display=nothing&onerrdisplay=nothing&action=logout&sessionID= - Properties parameters = new Properties(); - parameters.setProperty("cgi", "login.pl"); - parameters.setProperty("display", "nothing"); - parameters.setProperty("onerrdisplay", "nothing"); - parameters.setProperty("action", "logout"); - parameters.setProperty("sessionID", sessionID); - request (parameters, true); - // we basically ignore the failure to log out - } - - public String getMascotErrorMessage(int mascotErrorCode) { - if (mascotErrorCode < 0) { - return "Non-Mascot error code"; - } - - findWorkableSettings(false); - - //GET /cgi/ms-geterror.exe? - Properties parameters = new Properties(); - parameters.setProperty("cgi", "ms-geterror.exe"); - parameters.setProperty(Integer.toString(mascotErrorCode), ""); - Properties results = request(parameters, false); - String mascotErrorString = results.getProperty("HTTPContent", ""); - if (0 == errorCode) { - return mascotErrorString; - } else { - return "Sorry, unable to get Mascot error string for code " + mascotErrorCode; - } - } - - public String getMascotVersion() { - - findWorkableSettings(false); - - //GET /cgi/client.pl?version - // try to find out about the platform that Mascot Server is running on - String mascotRequestURL; - { - StringBuilder urlSB = new StringBuilder(_url); - if (!_url.endsWith("/")) - urlSB.append("/"); - urlSB.append("client.pl?version"); - mascotRequestURL = urlSB.toString(); - } - - HttpClient client = HttpClient.newHttpClient(); - HttpRequest request = HttpRequest.newBuilder(URI.create(mascotRequestURL)).build(); - String result = "Sorry, unable to get Mascot version"; - try - { - HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); - if (response.statusCode() == -1) - { - result = result + " " + response.body(); - } - else - { - result = response.body() + " - Server: " + response.headers().firstValue("Server").orElse(""); - } - } - catch (IOException | InterruptedException e) - { - getLogger().warn("Failed to get Mascot server information via '{}'", mascotRequestURL, e); - } - - result = result.replaceAll("[\r\n]"," "); - return result; - } - - public boolean isMimeResultSupported() { - - findWorkableSettings(false); - - //GET /cgi/client.pl?version - Properties parameters = new Properties(); - parameters.setProperty("cgi", "client.pl"); - parameters.setProperty("result_file_mime", ""); - parameters.setProperty("task_id", "0"); - Properties results = request(parameters, false); - String result = results.getProperty("HTTPContent", ""); - return (!result.contains("Invalid keyword argument")); - } - - protected Properties getTaskID (String sessionID) - { - errorCode = 0; - errorString = ""; - //sessionID is optional - /*if ("".equals(sessionID)) - return results;*/ - - //GET /cgi/client.pl?create_task_id&sessionID= - Properties parameters = new Properties(); - parameters.setProperty("cgi", "client.pl"); - parameters.setProperty("create_task_id", ""); - if (!"".equals(sessionID)) - parameters.setProperty("sessionID", sessionID); - Properties results = request (parameters, true); - if (! "0".equals(results.getProperty("error","0"))) - results.clear(); - // if the call succeeded, we have keys={'actionstring', 'taskID'} - return results; - } - - protected Logger getLogger() - { - return _instanceLogger; - } - - protected String getTaskStatus (String sessionID, String taskID) - { - errorCode = 0; - errorString = ""; - - //sessionID is optional - if (/*"".equals(sessionID) ||*/ "".equals(taskID)) - return ""; - - //GET /cgi/client.pl?status&sessionID=&task_id= - Properties parameters = new Properties(); - parameters.setProperty("cgi", "client.pl"); - parameters.setProperty("status", ""); - parameters.setProperty("task_id", taskID); - if (!"".equals(sessionID)) - parameters.setProperty("sessionID", sessionID); - Properties results = request (parameters, false); - String statusString = results.getProperty("HTTPContent", ""); - if (statusString.contains("=")) { - /*Logger tlogInstance = getLogger(); - if (null != tlogInstance) { - tlogInstance.info ("Full Mascot response: (" + results.getProperty("HTTPContent","") + ")"); - }*/ - String[] contentLines = statusString.split("\n"); - for (String contentLine : contentLines) { - if (contentLine.contains("=")) { - String[] parts = contentLine.split("="); - if (2 == parts.length) - if (!"".equals(parts[0])) - results.put(parts[0], parts[1]); - } - } - if (results.containsKey("error")) { - String errorValue = results.getProperty("error", "-1"); - if (!"0".equals(errorValue)) { - // fall thru', return the full HTTP Content as we need the full text for diagnosis - getLogger().info("Mascot search task status error: ({}) {}", results.getProperty("error", "-1"), results.getProperty("errorstring", "")); - if ("-1".equals(errorValue)) { - getLogger().info("Full Mascot response: ({})", results.getProperty("HTTPContent", "")); - } else { - String mascotErrorMessage = getMascotErrorMessage(Integer.parseInt(errorValue)); - getLogger().info("Mascot message: ({})", mascotErrorMessage); - } - } - } else - statusString = results.getProperty("running", ""); - results.remove("HTTPContent"); - } else { - //TODO: wch - do we want to dump this, how frequent will this be? - String lcStatus = statusString.toLowerCase(); - if (!lcStatus.startsWith("complete\n") && !lcStatus.startsWith("complete\r\n")) { - getLogger().info("Mascot response: ({})", results.getProperty("HTTPContent", "")); - } - } - - return statusString; - } - - public List getTaxonomyList() - { - errorCode = 0; - errorString = ""; - - findWorkableSettings (false); - - Properties results; - if (0 == errorCode || -3 == errorCode) - results = getParametersResults(); - else - results = new Properties(); - - List taxonomies = new ArrayList<>(); - String dbsString = results.getProperty("HTTPContent", ""); - String[] contentLines = dbsString.split("\n"); - boolean sectionTAXONOMY = false; - for (String contentLine : contentLines) - { - if (contentLine.startsWith("[") && contentLine.endsWith("]")) - sectionTAXONOMY = "[TAXONOMY]".equals(contentLine); - else - { - if (sectionTAXONOMY) - if (!contentLine.isEmpty()) - taxonomies.add(contentLine); - } - } - return taxonomies; - } - - public List getSequenceDbList() - { - errorCode = 0; - errorString = ""; - - findWorkableSettings (false); - - Properties results; - if (0 == errorCode || -3 == errorCode) - results = getParametersResults(); - else - results = new Properties(); - - List dbNames = new ArrayList<>(); - String dbsString = results.getProperty("HTTPContent", ""); - String[] contentLines = dbsString.split("\n"); - boolean sectionDB = false; - for (String contentLine : contentLines) - { - if (contentLine.startsWith("[") && contentLine.endsWith("]")) - sectionDB = "[DB]".equals(contentLine); - else - { - if (sectionDB) - if (!contentLine.isEmpty()) - dbNames.add(contentLine); - } - } - return dbNames; - } - - public Map getResidueModsMap() - { - errorCode = 0; - errorString = ""; - - findWorkableSettings (false); - - Properties results; - if (0 == errorCode || -3 == errorCode) - results = getParametersResults(); - else - results = new Properties(); - - Map mods = new HashMap<>(); - String dbsString = results.getProperty("HTTPContent", ""); - String[] contentLines = dbsString.split("\n"); - boolean sectionMODS = false; - for (String contentLine : contentLines) - { - if (contentLine.startsWith("[") && contentLine.endsWith("]")) - sectionMODS = "[MODS]".equals(contentLine); - else - { - if (sectionMODS) - if (!contentLine.isEmpty()) - mods.put(contentLine, contentLine); - } - } - return mods; - } - - public int search (String paramFile, String queryFile, String resultFile) - { - errorCode = 0; - errorString = ""; - - String version=getMascotVersion(); - getLogger().info(version); - if (!isMimeResultSupported()) { - String msg1="Your mascot installation does not have support for MIME result download via client.pl!"; - getLogger().warn(msg1); - String msg2="Result retrieval may fail. See " + - (new HelpTopic("configMascot")).getHelpTopicHref() +" for more info."; - getLogger().warn(msg2); - } - - // check if security is enabled - // let's acquire a session id if we do not have one or security is enabled - getLogger().info("Creating Mascot session..."); - String mascotSessionId = startSession(); - if (0 != getErrorCode()) - { - getLogger().info("Fail to start Mascot session"); - return 2; - } else { - getLogger().info("Mascot session#{} started.", mascotSessionId); - } - - int returnCode = 0; - final int maxRetry = 3; - int attempt = 0; - final int delayAfterSubmitSec = 30; - final int delayBetweenRetrySec = 3 * 60; - final int delayBetweenResultRetrievalSec = 10; - while (attempt < maxRetry) - { - attempt++; - - // get a TaskID to submit the job - getLogger().info("Creating Mascot search task..."); - Properties taskProperties = getTaskID (mascotSessionId); - String actionString = taskProperties.getProperty("actionstring", ""); - String taskID = taskProperties.getProperty("taskID", ""); - if ("".equals(actionString) || "".equals(taskID)) - { - getLogger().info("Fail to create Mascot search task id."); - returnCode = 5; - break; - } else { - getLogger().info("Mascot search task#{} created with '{}'.", taskID, actionString); - } - - // submit job to mascot server - getLogger().info("Submitting search to Mascot server..."); - if (!submitFile (mascotSessionId, taskID, actionString, paramFile, queryFile)) - { - getLogger().info("Fail to submit search to Mascot server."); - returnCode = 3; - break; - } else { - getLogger().info("Search submitted."); - } - - getLogger().info("Mascot search status verbose reporting on"); - - final int delayBetweenSameStatus = 2 * 60; - int secSinceSameStatus = 0; - String prevSearchStatus = null; - String searchStatus; - final int maxNegativeErrorTry = 3; - int numOfNegativeError = 0; - while (true) { - try { - Thread.sleep(delayAfterSubmitSec * 1000); - } - catch (InterruptedException ignored) { } - - searchStatus = getTaskStatus(mascotSessionId, taskID); - secSinceSameStatus += delayAfterSubmitSec; - if (!searchStatus.equals(prevSearchStatus) - || secSinceSameStatus >= delayBetweenSameStatus) { - getLogger().info("Mascot search status: {}", searchStatus); - secSinceSameStatus = 0; - } - prevSearchStatus = searchStatus; - - if (searchStatus.toLowerCase().contains("error=-")) { - numOfNegativeError++; - if (numOfNegativeError>=maxNegativeErrorTry) { - break; - } - getLogger().info("{}, will retry..", searchStatus); - } - else if (searchStatus.toLowerCase().contains("complete") || - searchStatus.toLowerCase().contains("error=")) { - break; - } - } - - if (!searchStatus.toLowerCase().contains("complete")) { - if (searchStatus.toLowerCase().contains("error=51")) { - getLogger().info("Retrying " + delayBetweenRetrySec + " seconds later..."); - try { - Thread.sleep(delayBetweenRetrySec * 1000); - } - catch (InterruptedException ignored) {} - continue; - } - else - { - returnCode = 3; - break; - } - } - - try - { - Thread.sleep(delayBetweenResultRetrievalSec*1000); - } - catch (InterruptedException ignored) { } - - getLogger().info("Retrieving Mascot search result..."); - if (getResultFile (mascotSessionId, taskID, resultFile)) - { - getLogger().info("Mascot search result retrieved."); - } - else - { - returnCode = 3; - } - - break; - } - - // let's terminate the session - endSession(mascotSessionId); - getLogger().info("Mascot session ended."); - - return returnCode; - } - - private ParamParser getInputParameters(File parametersFile) - { - try - { - ParamParser parser = PipelineJobService.get().createParamParser(); - // CONSIDER: Set validator? - parser.parse(new FileInputStream(parametersFile)); - if (parser.getErrors() != null) - { - ParamParser.Error err = parser.getErrors()[0]; - if (err.getLine() == 0) - getLogger().error("Failed parsing Mascot input xml '{}'.\n{}", parametersFile.getPath(), err.getMessage()); - else - getLogger().error("Failed parsing Mascot input xml '{}'.\nLine {}: {}", parametersFile.getPath(), err.getLine(), err.getMessage()); - return null; - } - return parser; - } - catch (IOException eio) - { - getLogger().error("Failed to read Mascot input xml '{}'.", parametersFile.getPath()); - return null; - } - } - - protected boolean submitFile (String sessionID, String taskID, - String actionString, String paramFile, String analysisFile) - { - errorCode = 0; - errorString = ""; - - //sessionID is optional - if (/*"".equals(sessionID) ||*/ "".equals(taskID) || - "".equals(actionString) || "".equals(paramFile) || "".equals(analysisFile)) - { - getLogger().error("At least one of the required arguments is empty."); - return false; - } - - File queryParamFile = new File(paramFile); - ParamParser parser = getInputParameters(queryParamFile); - if (null == parser) - { - getLogger().error("I'm sorry, I could not parse the parameter file '{}'.", paramFile); - return false; - } - - String [][] submitFields = { - {"charge", "mascot, peptide_charge", "search, charge"}, - {"cle", "mascot, enzyme", "search, cle"}, - {"com", "mascot, comment", "search, com"}, - {"db", "pipeline, database", "search, db"}, - {"errortolerant", "mascot, error_tolerant", "default, errortolerant"}, - {"format", "spectrum, path type", "search, format"}, - {"formver", "mascot, form version", "default, formver"}, - {"icat", "mascot, icat", "search, icat"}, - {"instrument", "mascot, instrument", "search, instrument"}, - {"intermediate", "mascot, intermediate", "default, intermediate"}, - {"it_mods", "mascot, variable modifications", "search, it_mods"}, - {"mods", "mascot, fixed modifications", "search, mods"}, - {"overview", "mascot, overview", "search, overview"}, - {"pfa", AbstractMS2SearchTask.MAXIMUM_MISSED_CLEAVAGE_SITES, "search, pfa"}, - {"precursor", "mascot, precursor", "search, precursor"}, - {"report", "mascot, report top results", "search, report"}, - {"reptype", "mascot, report type", "default, reptype"}, - {"search", "mascot, search type", "default, search"}, - {"seg", "mascot, protein mass", "search, seg"}, - {"taxonomy", "protein, taxon", "search, taxonomy"}, - {"tolu", "spectrum, parent monoisotopic mass error units", "search, tolu"}, - {"useremail", PipelineJob.PIPELINE_EMAIL_ADDRESS_PARAM, "search, usermail"}, - {"username", PipelineJob.PIPELINE_USERNAME_PARAM, "search, username"}, - {"iatol", "mascot, iatol", "default, iatol"}, - {"iastol", "mascot, iastol", "default, iastol"}, - {"ia2tol", "mascot, ia2tol", "default, ia2tol"}, - {"ibtol", "mascot, ibtol", "default, ibtol"}, - {"ibstol", "mascot, ibstol", "default, ibstol"}, - {"ib2tol", "mascot, ib2tol", "default, ib2tol"}, - {"iytol", "mascot, iytol", "default, iytol"}, - {"iystol", "mascot, iystol", "default, iystol"}, - {"iy2tol", "mascot, iy2tol", "default, iy2tol"}, - {"peak", "mascot, peak", "default, peak"}, - {"ltol", "mascot, ltol", "default, ltol"}, - {"showallmods", "mascot, showallmods", "default, showallmods"} - }; - - Map parts = new LinkedHashMap<>(); - - for (String [] keys : submitFields) - { - int j; - String formFieldKey = keys[0].toUpperCase(); - String formFieldValue = null; - for (j=1; j float2) ? parentMassErrorPlus : parentMassErrorMinus; - } - else parentMassError = Objects.requireNonNullElse(parentMassErrorPlus, parentMassErrorMinus); - } - else - parentMassError = parser.getInputParameter("search, tol"); - parts.put("TOL", null==parentMassError ? "" : parentMassError); - - String massType = parser.getInputParameter("spectrum, fragment mass type"); - if (massType == null) - massType = parser.getInputParameter("search, mass"); - parts.put("MASS", null == massType ? "" : massType); - boolean isMonoisoptopicMass = "monoisotopic".equalsIgnoreCase(massType); - String fragmentMassError = parser.getInputParameter(isMonoisoptopicMass ? "spectrum, fragment monoisotopic mass error" : "spectrum, fragment mass error"); - if (fragmentMassError == null) - { - fragmentMassError = parser.getInputParameter("search, itol"); - } - parts.put("ITOL", null == fragmentMassError ? "" : fragmentMassError); - - String fragmentMassErrorUnits = parser.getInputParameter(isMonoisoptopicMass ? "spectrum, fragment monoisotopic mass error units" : "spectrum, fragment mass error units"); - if (fragmentMassErrorUnits == null) - fragmentMassErrorUnits = parser.getInputParameter("search, itolu"); - parts.put("ITOLU", null == fragmentMassErrorUnits ? "" : fragmentMassErrorUnits); - - // Decoy controlled by "mascot, decoy", submitted as "1" or nothing at all - String decoyValue = parser.getInputParameter("mascot, decoy"); - if (decoyValue != null && new BooleanConverter().convert(Boolean.class, decoyValue).booleanValue()) - { - parts.put("DECOY", "1"); - } - - String mascotRequestURL; - { - StringBuilder urlSB = new StringBuilder(_url); - if (!_url.endsWith("/")) - urlSB.append("/"); - urlSB.append(actionString); - urlSB.append("?"); - urlSB.append("1"); - urlSB.append("+--taskID+"); - urlSB.append(taskID); - if (!"".equals(sessionID)) - { - urlSB.append("+--sessionID+"); - urlSB.append(sessionID); - } - mascotRequestURL = urlSB.toString(); - } - - try (CloseableHttpClient httpclient = HttpClients.createDefault()) - { - HttpPost post = new HttpPost(mascotRequestURL); - MultipartEntityBuilder builder = MultipartEntityBuilder.create(); - parts.forEach(builder::addTextBody); - - File queryFile = new File(analysisFile); - getLogger().info("Submitting query file, size={}", queryFile.length()); - builder.addPart("FILE", new FileBody(queryFile)); - - post.setEntity(builder.build()); - - int attempt = 0; - // We will retry up to 3 times. - final int maxAttempt = 3; - - while (attempt < maxAttempt) - { - try (CloseableHttpResponse response = httpclient.execute(post)) - { - if (-1 == response.getCode()) - continue; - - boolean uploadFinished = false; - try - { - // handle response. - // check for "Finished uploading search details..." - //for Mascot version earlier than 2.2.03 - //final String endOfUploadMarker = "Finished uploading search details..."; - //for Mascot version 2.2.03 - //final String endOfUploadMarker = "Finished uploading search details and file..."; - final String endOfUploadMarker = "Finished uploading search details"; - StringBuilder sb = new StringBuilder(); - try (BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()))) - { - String str; - while ((str = in.readLine()) != null) - { - sb.append(str); - sb.append('\n'); - //getLogger().info("Mascot Server: "+str); - if (str.contains(endOfUploadMarker)) - { - uploadFinished = true; - getLogger().info("Mascot search task status: query upload completed"); - // Need to continue waiting for Mascot server to close the connection or it will cause the - // search to error - see issue 29773 - } - } - } - if (!uploadFinished) - { - getLogger().error("Failed to get response from Mascot query '{}' for {} with parameters {} on attempt#{}.\nMascot output: {}", mascotRequestURL, queryFile.getPath(), queryParamFile.getPath(), attempt + 1, sb); - } - } - catch (IOException err) - { - getLogger().error("Failed to get response from Mascot query '{}' for {} with parameters {} on attempt#{}.\n", mascotRequestURL, queryFile.getPath(), queryParamFile.getPath(), attempt + 1, err); - } - return uploadFinished; - } - catch (IOException err) - { - getLogger().error("Failed to submit Mascot query '{}' for {} with parameters {} on attempt#{}.\n", mascotRequestURL, queryFile.getPath(), queryParamFile.getPath(), attempt + 1, err); - attempt = maxAttempt; - } - attempt++; - } - - // We ran out of retries! - getLogger().error("Failed to submit Mascot query '{}' for {} with parameters {}. Tried " + maxAttempt + " times.", mascotRequestURL, queryFile.getPath(), queryParamFile.getPath()); - } - catch (IOException e) - { - getLogger().error("Failed to create CloseableHttpClient", e); - } - - return false; - } - - protected boolean getResultFile (String sessionID, String taskID, String resultFile) - { - errorCode = 0; - errorString = ""; - //sessionID is optional - if (/*"".equals(sessionID) ||*/ "".equals(taskID) || "".equals(resultFile)) - return false; - - //GET /cgi/client.pl?result_file_mime&task_id=&sessionID= - Properties parameters = new Properties(); - parameters.setProperty("cgi", "client.pl"); - parameters.setProperty("result_file_mime", ""); - parameters.setProperty("task_id", taskID); - if (!"".equals(sessionID)) - parameters.setProperty("sessionID", sessionID); - InputStream in = getRequestResultStream (parameters); - if (null == in) - return false; - - long lByteRead=0; - boolean ioError = false; - File outFile = new File(resultFile); - OutputStream out = null; - try - { - // TODO: wch - write to log on the result retrieval progress - // we do not know the real size, as it is chunked stream - out = new FileOutputStream(outFile); - byte[] buffer = new byte [4096]; // use 4-KB fragment - int readLen; - while ((readLen = in.read(buffer)) > 0) { - lByteRead += readLen; - out.write(buffer, 0, readLen); - } - } - catch (IOException e) - { - // a read or write error occurred - ioError = true; - getLogger().error("getResultFile(result={},session={},taskid={})", resultFile, sessionID, taskID, e); - } - finally - { - try { in.close(); } catch (IOException ignored) {} - if (null != out) - { - try { out.close(); } catch (IOException ignored) {} - } - } - - getLogger().info("Downloaded {} bytes of result file.", lByteRead); - - if (ioError) - return false; - - // let's check that we have the right file - final int maxLines=20; - List contentLines = new ArrayList<>(); - String firstLine; - try (BufferedReader resultStream = new BufferedReader(new InputStreamReader(new FileInputStream(outFile)))) - { - for (int index = 0; index < maxLines; index++) - { - firstLine = resultStream.readLine(); - if (null != firstLine) - { - contentLines.add(firstLine); - } - } - } - catch (IOException ignored) - { - } - - firstLine=contentLines.getFirst(); - if (!firstLine.startsWith("MIME-Version:")) { - getLogger().info("First line of Mascot result file does not start with 'MIME-Version:'... will remove file"); - getLogger().info("First {} line(s)\n{}", contentLines.size(), StringUtils.join(contentLines.iterator(), "\n")); - outFile.delete(); - return false; - } - else - { - return true; - } - } - - public String getParameters() - { - // retrieve the list of databases from MascotServer - Properties results = getParametersResults(); - return results.getProperty("HTTPContent", ""); - } - -// private Properties getEnzymeResults() -// { -// // retrieve the list of databases from MascotServer -// Properties parameters = new Properties(); -// parameters.setProperty("cgi", "labkeydbmgmt.pl"); -// parameters.setProperty("cmd", "downloadenz"); -// return request (parameters, false); -// } - - private Properties getParametersResults() - { - // retrieve the list of databases from MascotServer - Properties parameters = new Properties(); - parameters.setProperty("cgi", "get_params.pl"); - return request (parameters, false); - } - - private String requestURL (Properties parameters) - { - StringBuilder requestURLLSB = new StringBuilder(_url); - if (!_url.endsWith("/")) - { - requestURLLSB.append("/"); - } - requestURLLSB.append(parameters.getProperty("cgi","login.pl")); - requestURLLSB.append("?"); - boolean firstEntry=true; - for (Enumeration e = parameters.propertyNames(); e.hasMoreElements();) - { - String s = (String) e.nextElement(); - if (!"cgi".equalsIgnoreCase(s)) - { - if (firstEntry) - { - firstEntry = false; - } - else - { - requestURLLSB.append("&"); - } - requestURLLSB.append(URLEncoder.encode(s, StandardCharsets.UTF_8)); - String val = parameters.getProperty(s); - if (!"".equals(val)) - { - requestURLLSB.append("="); - requestURLLSB.append(URLEncoder.encode(val, StandardCharsets.UTF_8)); - } - } - } - - return requestURLLSB.toString(); - } - - private Properties request(Properties parameters, boolean parse) - { - // connect to the Mascot Server to send request - // report the results as a property set, i.e. key=value pairs - - Properties results = new Properties(); - InputStream in = null; - String mascotRequestURL = requestURL(parameters); - try - { - URL mascotURL = new URL(mascotRequestURL); - HttpURLConnection connection = (HttpURLConnection)mascotURL.openConnection(); - connection.setInstanceFollowRedirects(true); - in = new BufferedInputStream(connection.getInputStream()); - if (parse) - { - results.load(in); - in.close(); - errorString = results.getProperty("errorstring", ""); - } - else - { - String str; - BufferedReader reader = new BufferedReader(new InputStreamReader(in)); - StringBuilder reply = new StringBuilder(); - while ((str = reader.readLine()) != null) { - reply.append (str); - reply.append ("\n"); - } - results.setProperty("HTTPContent", reply.toString()); - in.close(); - } - } - catch (Exception x) - { - String password = parameters.getProperty("password",""); - if (!password.isEmpty()) - mascotRequestURL = mascotRequestURL.replace(password, "***"); - // If using the class logger, then assume user interface will deliver the error message. - String msg = "Connect("+_url+","+parameters.getProperty("username","")+"," - +(!parameters.getProperty("password", "").isEmpty() ? "***" : "") - +","+_proxyURL+")="+mascotRequestURL; - if (getLogger() == _log) - getLogger().info(msg, x); - else - getLogger().error(msg, x); - if (x instanceof MalformedURLException) - { - errorCode = 1; - errorString = "Fail to parse Mascot Server URL"; - } - else - { - errorCode = 2; - errorString = "Failed to interact with Mascot Server"; - } - results.setProperty("error", Integer.toString(errorCode)); - results.setProperty("errorstring", errorString); - results.setProperty("exceptionmessage", x.getMessage()); - results.setProperty("exceptionclass", x.getClass().getName()); - } - finally - { - if (in != null) { try { in.close(); } catch (IOException ignored) {} } - } - - return results; - } - - private InputStream getRequestResultStream (Properties parameters) - { - // connect to the Mascot Server to send request - // return the reply as a stream - - String mascotRequestURL = requestURL(parameters); - try - { - URL mascotURL = new URL(mascotRequestURL); - return mascotURL.openStream(); - } - catch (MalformedURLException x) - { - String password = parameters.getProperty("password",""); - if (!password.isEmpty()) - mascotRequestURL = mascotRequestURL.replace(password, "***"); - getLogger().warn("Exception {} connect({},{},{},{})={}", x.getClass(), _url, parameters.getProperty("username", ""), !parameters.getProperty("password", "").isEmpty() ? "***" : "", _proxyURL, mascotRequestURL, x); - //Fail to parse Mascot Server URL - errorCode = 1; - } - catch (Exception x) - { - String password = parameters.getProperty("password",""); - if (!password.isEmpty()) - mascotRequestURL = mascotRequestURL.replace(password, "***"); - getLogger().warn("Exception {} on connect({},{},{},{})={}", x.getClass(), _url, parameters.getProperty("username", ""), !parameters.getProperty("password", "").isEmpty() ? "***" : "", _proxyURL, mascotRequestURL, x); - //Fail to interact with Mascot Server - errorCode = 2; - } - - return null; - } - - /** - * This test requires the MockMascotServlet to be running. - */ - public static class TestCase extends Assert - { - @Test - public void testMockMascotServer() throws IOException - { - if (!AppProps.getInstance().isDevMode()) - { - Assume.assumeNotNull("Mock mascot server requires DeveloperTools module. Skipping test in production mode.", - ModuleLoader.getInstance().getModule("DeveloperTools")); - } - MascotClientImpl client = new MascotClientImpl(ActionURL.getBaseServerURL() + "/mockmascot/cgi/", _log); - String version = client.getMascotVersion().trim(); - Assert.assertEquals("Hello - Server: LabKey MockMascotServer 1.0", version); - - // We need to POST an absolute file path to MascotDefaults.xml. First look for it in source. - String mascotDefaultsPath = MascotSearchProtocolFactory.get().getDefaultParametersResource(); - String paramFile = ModuleLoader.getInstance().getModule("MS2").getSourcePath() + "/src/" + mascotDefaultsPath; - - // Not found in source? Fine, create a temp file and use that. - if (!new File(paramFile).exists()) - { - InputStream is = getClass().getClassLoader().getResourceAsStream(mascotDefaultsPath); - File file = FileUtil.createTempFile("MascotDefaults", ".xml"); - file.deleteOnExit(); - FileUtils.copyInputStreamToFile(is, file); - paramFile = file.getAbsolutePath(); - } - - String mascotSessionId = client.startSession(); - Assert.assertTrue(client.submitFile(mascotSessionId, "5678", "submit.pl", paramFile, paramFile)); - } - } -} - diff --git a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotConfig.java b/ms2/src/org/labkey/ms2/pipeline/mascot/MascotConfig.java deleted file mode 100644 index 2b9b78a53e..0000000000 --- a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotConfig.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (c) 2016-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.labkey.ms2.pipeline.mascot; - -import org.labkey.api.data.Container; -import org.labkey.api.data.PropertyManager; -import org.labkey.api.data.PropertyManager.WritablePropertyMap; -import org.labkey.api.settings.AbstractWriteableSettingsGroup; - -public class MascotConfig extends AbstractWriteableSettingsGroup -{ - protected static final String MASCOT_SERVER_PROP = "MascotServer"; - protected static final String MASCOT_USERACCOUNT_PROP = "MascotUserAccount"; - protected static final String MASCOT_USERPASSWORD_PROP = "MascotUserPassword"; - protected static final String MASCOT_HTTPPROXY_PROP = "MascotHTTPProxy"; - - protected static final String GROUP_NAME = "MascotConfig"; - - private final Container _container; - - public MascotConfig(Container container) - { - _container = container; - } - - @Override - protected String getType() - { - return "Mascot configuration"; - } - - @Override - protected String getGroupName() - { - return GROUP_NAME; - } - - public boolean hasMascotServer() - { - return !"".equals(getMascotServer()); - } - - public String getMascotServer() - { - return lookupStringValue(_container, MASCOT_SERVER_PROP, ""); - } - - public String getMascotUserAccount() - { - return lookupStringValue(_container, MASCOT_USERACCOUNT_PROP, ""); - } - - public String getMascotUserPassword() - { - return lookupStringValue(_container, MASCOT_USERPASSWORD_PROP, ""); - } - - public String getMascotHTTPProxy() - { - return lookupStringValue(_container, MASCOT_HTTPPROXY_PROP, ""); - } - - - public void setMascotServer(String mascotServer) - { - storeStringValue(MASCOT_SERVER_PROP, mascotServer); - } - - public void setMascotUserAccount(String mascotUserAccount) - { - storeStringValue(MASCOT_USERACCOUNT_PROP, mascotUserAccount); - } - - public void setMascotUserPassword(String mascotUserPassword) - { - storeStringValue(MASCOT_USERPASSWORD_PROP, mascotUserPassword); - } - - public void setMascotHTTPProxy(String mascotHTTPProxy) - { - storeStringValue(MASCOT_HTTPPROXY_PROP, mascotHTTPProxy); - } - - @Override - public void save() - { - super.save(); - } - - public Container getContainer() - { - return _container; - } - - @Override - protected boolean isPasswordProperty(String propName) - { - return super.isPasswordProperty(propName) || MASCOT_USERPASSWORD_PROP.equals(propName); - } - - public static void reset(Container container) - { - WritablePropertyMap props = PropertyManager.getWritableProperties(SITE_CONFIG_USER, container, GROUP_NAME, false); - if (props != null) - props.delete(); - } - - public static MascotConfig getWriteableMascotConfig(Container container) - { - MascotConfig result = new MascotConfig(container); - result.makeWriteable(container); - return result; - } - - public static MascotConfig findMascotConfig(Container container) - { - while (!container.isRoot()) - { - PropertyManager.PropertyMap props = PropertyManager.getProperties(SITE_CONFIG_USER, container, GROUP_NAME); - if (!props.isEmpty()) - { - break; - } - container = container.getParent(); - } - return new MascotConfig(container); - } -} diff --git a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotDefaults.xml b/ms2/src/org/labkey/ms2/pipeline/mascot/MascotDefaults.xml deleted file mode 100644 index 8a1b33a778..0000000000 --- a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotDefaults.xml +++ /dev/null @@ -1,179 +0,0 @@ - - -list path parameters - mascot_default_input.xml - This value is ignored when it is present in the default parameter - list path. - -pipeline parameters - Please consult - http://www.matrixscience.com/help/search_field_help.html - for details of each parameters. - - cluster - Used by LabKey Server to named the protocol described by this set of parameters - - cluster protocol - A general description of this protocol - - false - Skip direct import of Mascot .dat search results by default, relying on pepXML import - - 1+, 2+ and 3+ - See http://www.matrixscience.com/help/search_field_help.html#TWO - - Trypsin - See http://www.matrixscience.com/help/search_field_help.html#CLE - - Comments on this Mascot search - See http://www.matrixscience.com/help/search_field_help.html#COM - - IPI_human_plus - See http://www.matrixscience.com/help/search_field_help.html#DB - Name of database in mascot - - Mascot generic - See http://www.matrixscience.com/help/data_file_help.html - - - See http://www.matrixscience.com/help/search_field_help.html#ICAT - - Default - See http://www.matrixscience.com/help/search_field_help.html#INSTRUMENT - - - See http://www.matrixscience.com/help/search_field_help.html#MODS - and http://www.matrixscience.com/help/pt_mods_help.html - - 0.8 - See http://www.matrixscience.com/help/search_field_help.html#ITOL - - 0.8 - See http://www.matrixscience.com/help/search_field_help.html#ITOL - - Da - See http://www.matrixscience.com/help/search_field_help.html#ITOL - - Da - See http://www.matrixscience.com/help/search_field_help.html#ITOL - - Average - See http://www.matrixscience.com/help/search_field_help.html#MASS - - no - - - See http://www.matrixscience.com/help/search_field_help.html#MODS - - - See http://www.matrixscience.com/help/search_field_help.html#OVERVIEW - - 1 - See http://www.matrixscience.com/help/search_field_help.html#PFA - Number of missed cleavages allowed - - - See http://www.matrixscience.com/help/search_field_help.html#PRECURSOR - - 20 - See http://www.matrixscience.com/help/search_field_help.html#REPORT - - - See http://www.matrixscience.com/help/search_field_help.html#SEG - - All entries - See http://www.matrixscience.com/help/search_field_help.html#TAXONOMY - - 2.0 - See http://www.matrixscience.com/help/search_field_help.html#TOL - - 2.0 - See http://www.matrixscience.com/help/search_field_help.html#TOL - - Da - See http://www.matrixscience.com/help/search_field_help.html#TOL - - useremail@domain - See http://www.matrixscience.com/help/search_field_help.html#NAME - - username - See http://www.matrixscience.com/help/search_field_help.html#NAME - - By default, don't import spectra into the database. We'll still resolve them by looking at the file system --> - no - -default search input parameters - - List of accession strings for error tolerant search. Strings are - quoted and comma separated. - - - See your Mascot Installation and Setup manual, - Table 8.1 Mascot Search Parameters - - 0 - See your Mascot Installation and Setup manual, - Table 8.1 Mascot Search Parameters - - - See your Mascot Installation and Setup manual, - Table 8.1 Mascot Search Parameters, - will be supplied by LabKey Server pipeline - - 1.01 - See your Mascot Installation and Setup manual, - Table 8.1 Mascot Search Parameters - - 0 - - 0 - - 0 - - 1 - - 0 - - 1 - - - See your Mascot Installation and Setup manual, - Table 8.1 Mascot Search Parameters - - 1 - - 0 - - 1 - - - - auto - - peptide - See your Mascot Installation and Setup manual, - Table 8.1 Mascot Search Parameters, - must be peptide - - - See your Mascot Installation and Setup manual, - Table 8.1 Mascot Search Parameters - - - See your Mascot Installation and Setup manual, - Table 8.1 Mascot Search Parameters - - MIS - See your Mascot Installation and Setup manual, - Table 8.1 Mascot Search Parameters, - values = PMF|SQ|MIS, must be MIS for MS/MS - - - - - See your Mascot Installation and Setup manual, - Table 8.1 Mascot Search Parameters - -ADDITIONAL EXPLANATIONS - Sample explanation. - diff --git a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotImportPipelineJob.java b/ms2/src/org/labkey/ms2/pipeline/mascot/MascotImportPipelineJob.java deleted file mode 100644 index 10043e77fc..0000000000 --- a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotImportPipelineJob.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (c) 2007-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.labkey.ms2.pipeline.mascot; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; -import org.labkey.api.pipeline.PipeRoot; -import org.labkey.api.util.FileUtil; -import org.labkey.api.view.ViewBackgroundInfo; -import org.labkey.ms2.MS2Importer; -import org.labkey.ms2.pipeline.MS2ImportPipelineJob; -import org.labkey.vfs.FileLike; - -import java.io.IOException; - -/** - * User: jeckels - * Date: Mar 9, 2006 - */ -public class MascotImportPipelineJob extends MS2ImportPipelineJob -{ - @JsonCreator - protected MascotImportPipelineJob( - @JsonProperty("_file") FileLike file, - @JsonProperty("_description") String description, - @JsonProperty("_runInfo") MS2Importer.RunInfo runInfo) - { - super(file, description, runInfo); - } - - public MascotImportPipelineJob(ViewBackgroundInfo info, FileLike file, String description, - MS2Importer.RunInfo runInfo, PipeRoot root) - { - super(info, file, description, runInfo, root); - } - - @Override - public void run() - { - // Clear out any previous errors - setErrors(0); - if (!setStatus("INITIALIZING")) - { - return; - } - - FileLike dirAnalysis = _file.getParent(); - String baseName = FileUtil.getBaseName(_file); - FileLike dirWork = dirAnalysis.resolveChild(baseName + ".import.work"); - FileLike workFile = dirWork.resolveChild(_file.getName()); - - boolean completeStatus = false; - try - { - if (!dirWork.exists() && !FileUtil.mkdir(dirWork)) - { - getLogger().error("Failed create working folder {}.", dirWork); - return; - } - - try - { - FileUtil.copyFile(_file, workFile); - } - catch (IOException x) - { - getLogger().error("Failed to move Mascot result file to working folder as {}", workFile, x); - return; - } - - // let's import the .dat file - super.run(); - if (getErrors() == 0) - { - - if (!workFile.delete()) - { - getLogger().error("Failed to delete {}", workFile); - return; - } - else if (!dirWork.delete()) - { - getLogger().error("Failed to delete {}", dirWork); - return; - } - else - { - setStatus(TaskStatus.complete); - } - completeStatus = true; - } - } - catch (Exception e) - { - getLogger().error("MS2 import failed", e); - } - finally - { - if (!completeStatus) - { - setStatus(TaskStatus.error); - } - if (workFile.exists()) - { - try - { - workFile.delete(); - } - catch (IOException e) - { - getLogger().error("Failed to delete {}", workFile, e); - } - } - } - } -} diff --git a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotPipelineJob.java b/ms2/src/org/labkey/ms2/pipeline/mascot/MascotPipelineJob.java deleted file mode 100644 index 1f5c1abd12..0000000000 --- a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotPipelineJob.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (c) 2007-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.labkey.ms2.pipeline.mascot; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; -import org.labkey.api.pipeline.PipeRoot; -import org.labkey.api.pipeline.TaskId; -import org.labkey.api.pipeline.file.AbstractFileAnalysisJob; -import org.labkey.api.view.ViewBackgroundInfo; -import org.labkey.ms2.pipeline.AbstractMS2SearchPipelineJob; -import org.labkey.vfs.FileLike; - -import java.io.IOException; -import java.util.List; - -/** - * MascotPipelineJob class - *

- * Created: Oct 4, 2005 - * - * @author bmaclean - */ -public class MascotPipelineJob extends AbstractMS2SearchPipelineJob implements MascotSearchTask.JobSupport -{ - public static final TaskId TASK_ID = new TaskId(MascotPipelineJob.class); - - private String _mascotServer; - private String _mascotHTTPProxy; - private String _mascotUserAccount; - private String _mascotUserPassword; - - @JsonCreator - protected MascotPipelineJob(@JsonProperty("_dirSequenceRoot") FileLike dirSequenceRoot) - { - super(dirSequenceRoot); - } - - public MascotPipelineJob(MascotSearchProtocol protocol, - ViewBackgroundInfo info, - PipeRoot root, - String name, - List filesMzXML, - FileLike fileInputXML) throws IOException - { - super(protocol, MascotCPipelineProvider.name, info, root, name, fileInputXML, filesMzXML); - - MascotConfig config = MascotConfig.findMascotConfig(info.getContainer()); - _mascotServer = config.getMascotServer(); - _mascotHTTPProxy = config.getMascotHTTPProxy(); - _mascotUserAccount = config.getMascotUserAccount(); - _mascotUserPassword = config.getMascotUserPassword(); - - header("Mascot search for " + getBaseName()); - writeInputFilesToLog(); - } - - public MascotPipelineJob(MascotPipelineJob job, FileLike fileFraction) - { - super(job, fileFraction); - - _mascotServer = job._mascotServer; - _mascotHTTPProxy = job._mascotHTTPProxy; - _mascotUserAccount = job._mascotUserAccount; - _mascotUserPassword = job._mascotUserPassword; - } - - @Override - public String getMascotServer() - { - return _mascotServer; - } - - @Override - public String getMascotHTTPProxy() - { - return _mascotHTTPProxy; - } - - @Override - public String getMascotUserAccount() - { - return _mascotUserAccount; - } - - @Override - public String getMascotUserPassword() - { - return _mascotUserPassword; - } - - @Override - public TaskId getTaskPipelineId() - { - return TASK_ID; - } - - @Override - public AbstractFileAnalysisJob createSingleFileJob(FileLike file) - { - return new MascotPipelineJob(this, file); - } - - @Override - public FileLike getSearchNativeSpectraFile() - { - return MascotSearchTask.getNativeSpectraFile(getAnalysisDirectory(), getBaseName()); - } - - @Override - public FileLike getSearchNativeOutputFile() - { - return MascotSearchTask.getNativeOutputFile(getAnalysisDirectory(), getBaseName()); - } -} \ No newline at end of file diff --git a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotRun.java b/ms2/src/org/labkey/ms2/pipeline/mascot/MascotRun.java deleted file mode 100644 index 57286a6ffa..0000000000 --- a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotRun.java +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright (c) 2005-2026 Fred Hutchinson Cancer Research Center - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.labkey.ms2.pipeline.mascot; - -import org.labkey.api.data.RenderContext; -import org.labkey.api.data.SimpleDisplayColumn; -import org.labkey.api.data.SimpleFilter; -import org.labkey.api.query.FieldKey; -import org.labkey.api.util.HtmlString; -import org.labkey.api.view.JspView; -import org.labkey.api.view.ViewContext; -import org.labkey.api.view.WebPartView; -import org.labkey.api.writer.HtmlWriter; -import org.labkey.ms2.MS2Controller; -import org.labkey.ms2.MS2Manager; -import org.labkey.ms2.MS2Peptide; -import org.labkey.ms2.MS2Run; -import org.labkey.ms2.MS2RunType; -import org.labkey.ms2.peptideview.AbstractMS2RunView; -import org.labkey.ms2.peptideview.MS2RunViewType; -import org.labkey.ms2.peptideview.QueryPeptideMS2RunView; -import org.springframework.web.servlet.ModelAndView; - -import java.util.Map; - -import static org.labkey.api.util.DOM.DIV; - -public class MascotRun extends MS2Run -{ - private String mascotFile; - private String distillerRawFile; - - @Override - public void adjustScores(Map map) - { - // Mascot exported pepXML can exclude "homologyscore" - map.putIfAbsent("homologyscore", "-1"); - // Issue 30322 - ProteomeDiscoverer pep.xml files use a different name for the score value - if (null == map.get("ionscore") && map.containsKey("Ions Score")) - map.put("ionscore", map.get("Ions Score")); - } - - @Override - public MS2RunType getRunType() - { - return MS2RunType.Mascot; - } - - @Override - public String getParamsFileName() - { - return "mascot.xml"; - } - - - @Override - public String getChargeFilterColumnName() - { - return "Ion"; - } - - - @Override - public String getChargeFilterParamName() - { - return "ion"; - } - - @Override - public String getDiscriminateExpressions() - { - return "-Identity"; - } - - @Override - public String[] getGZFileExtensions() - { - return new String[]{"out", "dta"}; - } - - public String getMascotFile() - { - return mascotFile; - } - - public void setMascotFile(String mascotFile) - { - this.mascotFile = mascotFile; - } - - public String getDistillerRawFile() - { - return distillerRawFile; - } - - public void setDistillerRawFile(String distillerRawFile) - { - this.distillerRawFile = distillerRawFile; - } - - @Override - protected ModelAndView getAdditionalRunSummaryView(MS2Controller.RunForm form) - { - // Add the Mascot decoy Summary - - MS2Manager.DecoySummaryBean decoySummary = MS2Manager.getDecoySummaryForRun(getRun(), form.desiredFdrToFloat()); - if (null != decoySummary) - { - JspView decoySummaryView = new JspView<>("/org/labkey/ms2/decoySummary.jsp", decoySummary); - decoySummaryView.setFrame(WebPartView.FrameType.PORTAL); - decoySummaryView.setTitle("Decoy Summary"); - return decoySummaryView; - } - else return null; - } - - @Override - protected ModelAndView getAdditionalPeptideSummaryView(ViewContext viewContext, MS2Peptide peptide, String grouping) - { - final String title = "All Matches To This Query"; - AbstractMS2RunView altPeptideView = MS2RunViewType.getViewType(grouping).createView(viewContext, this); - - if (altPeptideView instanceof QueryPeptideMS2RunView) - { - SimpleFilter altPeptideFilter = new SimpleFilter(FieldKey.fromParts("scan"), peptide.getScan()); - altPeptideFilter.addCondition(FieldKey.fromParts("fraction"), peptide.getFraction()); - altPeptideFilter.addCondition(FieldKey.fromParts("charge"), peptide.getCharge()); - - QueryPeptideMS2RunView.PeptideQueryView altPeptideGrid = (QueryPeptideMS2RunView.PeptideQueryView) ((QueryPeptideMS2RunView)altPeptideView).createGridView(altPeptideFilter); - altPeptideGrid.setTitle(title); - altPeptideGrid.addDisplayColumn(new CurrentPeptideColumn(peptide.getRowId())); - return altPeptideGrid; - } - else - { - return new WebPartView<>(title) { - @Override - protected void renderView(Object model, HtmlWriter out) - { - DIV( - "Use the 'Standard' grouping to view this information." - ).appendTo(out); - } - }; - } - } - - private static final class CurrentPeptideColumn extends SimpleDisplayColumn - { - private final Long _currentPeptideId; - - public CurrentPeptideColumn(long currentPeptideId) - { - _currentPeptideId = currentPeptideId; - setCaption("Current View"); - } - - @Override - public void renderDetailsCellContents(RenderContext ctx, HtmlWriter out) - { - renderGridCellContents(ctx, out); - } - - @Override - public void renderGridCellContents(RenderContext ctx, HtmlWriter out) - { - if (_currentPeptideId.equals(ctx.getRow().get("rowId"))) - { - out.write(HtmlString.unsafe("✔")); // html checkmark - } - } - } -} diff --git a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotSearchProtocol.java b/ms2/src/org/labkey/ms2/pipeline/mascot/MascotSearchProtocol.java deleted file mode 100644 index 73eebc41c3..0000000000 --- a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotSearchProtocol.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2007-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.labkey.ms2.pipeline.mascot; - -import org.jetbrains.annotations.Nullable; -import org.labkey.api.data.Container; -import org.labkey.api.pipeline.PipeRoot; -import org.labkey.api.view.ViewBackgroundInfo; -import org.labkey.ms2.pipeline.AbstractMS2SearchProtocol; -import org.labkey.vfs.FileLike; - -import java.io.IOException; -import java.util.List; -import java.util.Map; - -/** - * Created: Jun 6, 2006 - * @author bmaclean - */ -public class MascotSearchProtocol extends AbstractMS2SearchProtocol -{ - public MascotSearchProtocol(String name, String description, String xml, Container container) - { - super(name, description, xml, container); - } - - @Override - public MascotSearchProtocolFactory getFactory() - { - return MascotSearchProtocolFactory.get(); - } - - @Override - public MascotPipelineJob createPipelineJob(ViewBackgroundInfo info, - PipeRoot root, List filesInput, - FileLike fileParameters, @Nullable Map variableMap - ) throws IOException - { - return new MascotPipelineJob(this, info, root, getName(), - filesInput, fileParameters); - } -} diff --git a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotSearchProtocolFactory.java b/ms2/src/org/labkey/ms2/pipeline/mascot/MascotSearchProtocolFactory.java deleted file mode 100644 index 8cdcd1a2d3..0000000000 --- a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotSearchProtocolFactory.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2007-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.labkey.ms2.pipeline.mascot; - -import org.labkey.api.data.Container; -import org.labkey.api.pipeline.ParamParser; -import org.labkey.ms2.pipeline.AbstractMS2SearchProtocol; -import org.labkey.ms2.pipeline.AbstractMS2SearchProtocolFactory; - -/** - * Created: Jun 6, 2006 - * @author bmaclean - */ -public class MascotSearchProtocolFactory extends AbstractMS2SearchProtocolFactory -{ - private static final MascotSearchProtocolFactory instance = new MascotSearchProtocolFactory(); - - public static MascotSearchProtocolFactory get() - { - return instance; - } - - private MascotSearchProtocolFactory() - { - // Use the get() function. - } - - @Override - public String getName() - { - return "mascot"; - } - - @Override - public String getDefaultParametersResource() - { - return "org/labkey/ms2/pipeline/mascot/MascotDefaults.xml"; - } - - @Override - public MascotSearchProtocol createProtocolInstance(String name, String description, String xml, Container container) - { - return new MascotSearchProtocol(name, description, xml, container); - } - - @Override - protected AbstractMS2SearchProtocol createProtocolInstance(ParamParser parser, Container container) - { - parser.removeInputParameter("pipeline, mascot server"); - parser.removeInputParameter("pipeline, mascot http proxy"); - - return super.createProtocolInstance(parser, container); - } -} diff --git a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotSearchTask.java b/ms2/src/org/labkey/ms2/pipeline/mascot/MascotSearchTask.java deleted file mode 100644 index 00aa138f5e..0000000000 --- a/ms2/src/org/labkey/ms2/pipeline/mascot/MascotSearchTask.java +++ /dev/null @@ -1,533 +0,0 @@ -/* - * Copyright (c) 2007-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.labkey.ms2.pipeline.mascot; - -import org.apache.commons.lang3.StringUtils; -import org.jetbrains.annotations.NotNull; -import org.labkey.api.pipeline.PipelineJob; -import org.labkey.api.pipeline.PipelineJobException; -import org.labkey.api.pipeline.PipelineJobService; -import org.labkey.api.pipeline.RecordedAction; -import org.labkey.api.pipeline.RecordedActionSet; -import org.labkey.api.pipeline.WorkDirectory; -import org.labkey.api.util.FileType; -import org.labkey.api.util.FileUtil; -import org.labkey.api.util.LabKeyProcessBuilder; -import org.labkey.api.util.NetworkDrive; -import org.labkey.api.util.PepXMLFileType; -import org.labkey.ms2.MS2RunType; -import org.labkey.ms2.pipeline.AbstractMS2SearchPipelineJob; -import org.labkey.ms2.pipeline.AbstractMS2SearchTask; -import org.labkey.ms2.pipeline.AbstractMS2SearchTaskFactory; -import org.labkey.ms2.pipeline.MS2PipelineManager; -import org.labkey.ms2.pipeline.MS2SearchJobSupport; -import org.labkey.ms2.pipeline.TPPTask; -import org.labkey.vfs.FileLike; - -import java.io.BufferedInputStream; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -/** - * MascotSearchTask - */ -public class MascotSearchTask extends AbstractMS2SearchTask -{ - private static final String KEY_HASH = "HASH"; - private static final String KEY_FILESIZE = "FILESIZE"; - private static final String KEY_TIMESTAMP = "TIMESTAMP"; - - private static final FileType FT_MASCOT_DAT = new FileType(".dat"); - private static final FileType FT_MASCOT_MGF = new FileType(".mgf"); - private static final String MZXML2SEARCH_ACTION_NAME = "MzXML2Search"; - private static final String MASCOT_ACTION_NAME = MS2RunType.Mascot.name(); - private static final String MASCOT2XML_ACTION_NAME = "Mascot2XML"; - - public static FileLike getNativeSpectraFile(FileLike dirAnalysis, String baseName) - { - return FT_MASCOT_MGF.newFile(dirAnalysis, baseName); - } - - public static FileLike getNativeOutputFile(FileLike dirAnalysis, String baseName) - { - return FT_MASCOT_DAT.newFile(dirAnalysis, baseName); - } - - public static boolean isNativeOutputFile(FileLike file) - { - return FT_MASCOT_DAT.isType(file); - } - - /** - * Interface for support required from the PipelineJob to run this task, - * beyond the base PipelineJob methods. - */ - public interface JobSupport extends MS2SearchJobSupport - { - /** - * Returns Mascot server name. - */ - String getMascotServer(); - - /** - * Returns HTTP proxy for Mascot server. - */ - String getMascotHTTPProxy(); - - /** - * Returns user name for Mascot server connection. - */ - String getMascotUserAccount(); - - /** - * Return password for Mascot server connection. - */ - String getMascotUserPassword(); - } - - public static class Factory extends AbstractMS2SearchTaskFactory - { - public Factory() - { - super(MascotSearchTask.class); - } - - @Override - public MascotSearchTask createTask(PipelineJob job) - { - return new MascotSearchTask(this, job); - } - - @Override - public String getGroupParameterName() - { - return "mascot"; - } - - @Override - public boolean isJobComplete(PipelineJob job) - { - JobSupport support = (JobSupport) job; - String baseName = support.getBaseName(); - FileLike dirAnalysis = support.getAnalysisDirectory(); - - // Mascot input (MGF) and Mascot native output - if (!NetworkDrive.exists(getNativeSpectraFile(dirAnalysis, baseName)) || - !NetworkDrive.exists(getNativeOutputFile(dirAnalysis, baseName))) - return false; - - String baseNameJoined = support.getJoinedBaseName(); - - // Fraction roll-up, completely analyzed sample pepXML, or the raw pepXML exist - return NetworkDrive.exists(TPPTask.getPepXMLFile(dirAnalysis, baseNameJoined)) || - NetworkDrive.exists(TPPTask.getPepXMLFile(dirAnalysis, baseName)) || - NetworkDrive.exists(AbstractMS2SearchPipelineJob.getPepXMLConvertFile(dirAnalysis, baseName)); - } - - @Override - public List getProtocolActionNames() - { - return Arrays.asList(MZXML2SEARCH_ACTION_NAME, MASCOT_ACTION_NAME, MASCOT2XML_ACTION_NAME); - } - } - - protected MascotSearchTask(Factory factory, PipelineJob job) - { - super(factory, job); - } - - public JobSupport getJobSupport() - { - return getJob().getJobSupport(JobSupport.class); - } - - @Override - @NotNull - public RecordedActionSet run() throws PipelineJobException - { - try - { - // Make a copy so that we can modify the map - Map params = new HashMap<>(getJob().getParameters()); - - RecordedAction mzxml2SearchAction = new RecordedAction(MZXML2SEARCH_ACTION_NAME); - RecordedAction mascotAction = new RecordedAction(MASCOT_ACTION_NAME); - RecordedAction mascot2XMLAction = new RecordedAction(MASCOT2XML_ACTION_NAME); - - FileLike fileWorkMGF = _wd.newFile(FT_MASCOT_MGF); - FileLike fileWorkDAT = _wd.newFile(FT_MASCOT_DAT); - - // Mascot starts with remote sequence file names, so it has to look at the - // raw parameter, rather than using getJob().getSequenceFiles(). - String paramDatabase = params.get("pipeline, database"); - if (paramDatabase == null) - { - throw new IOException("Failed parsing Mascot input xml '" + getJobSupport().getParametersFile() + "'.\n" + - "Missing required input parameter 'pipeline, database'"); - } - - params.put("pipeline, user name", "LabKey User"); // BUGBUG: should be "pipeline, username" ? - - FileLike fileWorkInputXML = _wd.newFile("input.xml"); - getJobSupport().createParamParser().writeFromMap(params, fileWorkInputXML); - - FileLike fileMzXML = _factory.findInputFile(getJobSupport()); - FileLike fileMGF = _wd.getDir().resolveChild(fileWorkMGF.getName()); - - // 0. pre-Mascot search: c) translate the mzXML file to mgf for Mascot using MzXML2Search - FileLike fileWorkSpectra = _wd.inputFile(fileMzXML, true); - ArrayList argsM2S = new ArrayList<>(); - String ver = TPPTask.getTPPVersion(getJob()); - argsM2S.add(PipelineJobService.get().getExecutablePath("MzXML2Search", null, "tpp", ver, getJob().getLogger())); - argsM2S.add("-mgf"); - String paramMinParent = params.get(MINIMUM_PARENT_M_H); - if (paramMinParent != null) - argsM2S.add("-B" + paramMinParent); - String paramMaxParent = params.get(MAXIMUM_PARENT_M_H); - if (paramMaxParent != null) - argsM2S.add("-T" + paramMaxParent); - String paramMinPeakIntensity = params.get("spectrum, minimum peak intensity"); - if (paramMinPeakIntensity != null) - argsM2S.add("-I" + paramMinPeakIntensity); - String paramMinPeakCount = params.get("spectrum, minimum peak count"); - if (paramMinPeakCount != null) - argsM2S.add("-P" + paramMinPeakCount); - argsM2S.add(fileWorkSpectra.toNioPathForRead().toFile().getAbsolutePath()); - - getJob().runSubProcess(new LabKeyProcessBuilder(argsM2S), _wd.getDir()); - - // 1. perform Mascot search - getJob().header("mascot client output"); - - MascotClientImpl mascotClient = new MascotClientImpl(getJobSupport().getMascotServer(), getJob().getLogger(), - getJobSupport().getMascotUserAccount(), getJobSupport().getMascotUserPassword()); - mascotClient.setProxyURL(getJobSupport().getMascotHTTPProxy()); - int iReturn = mascotClient.search(fileWorkInputXML.toNioPathForRead().toFile().getAbsolutePath(), - fileMGF.toNioPathForRead().toFile().getAbsolutePath(), fileWorkDAT.toNioPathForRead().toFile().getAbsolutePath()); - if (iReturn != 0) - { - throw new IOException("Error code " + iReturn + " " + mascotClient.getErrorString()); - } - if (!fileWorkDAT.exists()) - { - throw new IOException("Did not get expected results file from Mascot: " + fileWorkDAT); - } - - getJob().header("Sequence Database Synchronization output"); - - //a. get database and release entry - String sequenceDB = getSequenceDatabase(fileWorkDAT); - String sequenceRelease = getDatabaseRelease(fileWorkDAT); - //b. get release information at Mascot server - getJob().info("Retrieving database information ("+sequenceRelease+")..."); - Map returns = mascotClient.getDBInfo(sequenceDB, sequenceRelease); - String status = returns.get("STATUS"); - if (!"OK".equals(status)) - { - getJob().error("Failed to get database from Mascot server."); - String exceptionMessage=returns.get("exceptionmessage"); - String exceptionClass=returns.get("exceptionclass"); - if (null!=exceptionMessage) - { - exceptionMessage=exceptionMessage.toLowerCase(); - exceptionClass=exceptionClass.toLowerCase(); - - if (exceptionMessage.contains("http response code: 500")) - throw new IOException("labkeydbmgmt.pl does not seem to be functioning on Mascot server. " + - "Please ask your administrator to verify."); - else if (exceptionClass.contains("java.io.filenotfoundexception")) - throw new IOException("labkeydbmgmt.pl may not have been installed on Mascot server " + - "(/cgi). Please ask your administrator to install it."); - else - throw new IOException("Message: " + returns.get("exceptionmessage")); - } - } - - String smascotFileHash=returns.get("HASH"); - String smascotFileSize=returns.get("FILESIZE"); - String smascotFileTimestamp=returns.get("TIMESTAMP"); - - getJob().info("Database "+sequenceRelease+", hash="+smascotFileHash+", size="+smascotFileSize+", timestamp="+smascotFileTimestamp); - - long nmascotFileSize = smascotFileSize == null ? -1 : Long.parseLong(smascotFileSize); - long nmascotFileTimestamp= smascotFileTimestamp == null ? -1 : Long.parseLong(smascotFileTimestamp); - - FileLike dirSequenceRoot = getJobSupport().getSequenceRootDirectory(); - FileLike localDB = MS2PipelineManager.getLocalMascotFile(dirSequenceRoot, sequenceDB, sequenceRelease); - FileLike localDBHash = MS2PipelineManager.getLocalMascotFileHash(dirSequenceRoot, sequenceDB, sequenceRelease); - FileLike localDBParent = localDB.getParent(); - FileUtil.mkdirs(localDBParent); - long filesize=0; - long timestamp=0; - String hash=""; - boolean toDownloadDB = false; - if (!localDB.exists()) - { - //c. if local copy does not exist, download DB and cache checking hashes - // use the default hashes - getJob().info("Local database "+sequenceRelease+" does not exist, downloading from Mascot server"); - toDownloadDB = true; - } - else - { - //c. if local copy exists & cached checking hashes do not match, download new DB and cache new hashes - // let's get the hashes - Map hashes=readLocalMascotFileHash(localDBHash.toNioPathForRead().toFile().getCanonicalPath()); - if (null!=hashes.get("HASH")) - { - hash=hashes.get("HASH"); - } - if (null!=hashes.get("FILESIZE")) - { - String value=hashes.get("FILESIZE"); - filesize=Long.parseLong(value); - } - if (null!=hashes.get("TIMESTAMP")) - { - String value=hashes.get("TIMESTAMP"); - timestamp=Long.parseLong(value); - } - if (smascotFileHash == null || !smascotFileHash.equals(hash) || - nmascotFileSize!=filesize || nmascotFileTimestamp!=timestamp) - { - getJob().info("Local database "+sequenceRelease+" is different (hash="+ - hash+", size="+filesize+", timestamp="+timestamp+"), downloading from Mascot server"); - toDownloadDB = true; - } - else - { - getJob().info("Local copy of database "+sequenceRelease+" exists, skipping download."); - } - } - - if (toDownloadDB) - { - getJob().info("Starting download of database "+sequenceRelease+"..."); - mascotClient.downloadDB(localDB.toNioPathForRead().toFile().getCanonicalPath(), - sequenceDB, sequenceRelease, smascotFileHash, nmascotFileSize, nmascotFileTimestamp); - - getJob().info("Database "+sequenceRelease+" downloaded"); - getJob().info("Saving its checksums..."); - saveLocalMascotFileHash(localDBHash.toNioPathForRead().toFile().getCanonicalPath(), - smascotFileHash, nmascotFileSize, nmascotFileTimestamp); - getJob().info("Checksums saved."); - } - - // 2. translate Mascot result file to pep.xml format - FileLike fileSequenceDatabase = MS2PipelineManager.getLocalMascotFile(dirSequenceRoot, sequenceDB, sequenceRelease); - String exePath = PipelineJobService.get().getExecutablePath("Mascot2XML", null, "tpp", ver, getJob().getLogger()); - String[] args = - { - exePath, - fileWorkDAT.getName(), - "-D" + fileSequenceDatabase.toNioPathForRead().toFile().getAbsolutePath(), - "-xml", - "-notgz", // don't create the tarball of fake .out and .dta - "-desc" - //wch: 2007-05-11 - // expand the protein id to match X!Tandem output or user who run X! Tandem first - // will fail to access protein associated information in mascot run - //,"-shortid" - }; - getJob().runSubProcess(new LabKeyProcessBuilder(args), _wd.getDir()); - - PepXMLFileType pepxft = new PepXMLFileType(true); // "true" == accept .xml as valid extension for older converters - FileLike fileOutputPepXML = _wd.newFile(pepxft); - FileLike fileWorkPepXMLRaw = AbstractMS2SearchPipelineJob.getPepXMLConvertFile(_wd.getDir(), - getJobSupport().getBaseName(), - getJobSupport().getGZPreference()); - // three possibilities: basename.xml, basename.pep.xml, basename.pep.xml.gz - if (fileOutputPepXML.getName().endsWith(".gz")&&!fileWorkPepXMLRaw.getName().endsWith(".gz")) - { - fileWorkPepXMLRaw = fileWorkPepXMLRaw.getParent().resolveChild(fileWorkPepXMLRaw.getName()+".gz"); - } - if (!fileOutputPepXML.renameTo(fileWorkPepXMLRaw)) - { - throw new IOException("Failed to rename " + fileOutputPepXML + " to " + fileWorkPepXMLRaw); - } - - try (WorkDirectory.CopyingResource lock = _wd.ensureCopyingLock()) - { - mzxml2SearchAction.addParameter(RecordedAction.COMMAND_LINE_PARAM, StringUtils.join(argsM2S, " ")); - mzxml2SearchAction.addInput(fileMzXML, SPECTRA_INPUT_ROLE); - mzxml2SearchAction.addOutput(fileMGF, "MGF", false); - - for (FileLike file : getJobSupport().getSequenceFiles()) - { - mascotAction.addInput(file, FASTA_INPUT_ROLE); - } - mascotAction.addInput(fileMGF, "MGF"); - mascotAction.addOutput(_wd.outputFile(fileWorkDAT), "DAT", false); - - mascot2XMLAction.addInput(_wd.outputFile(fileWorkDAT), "DAT"); - mascot2XMLAction.addOutput(_wd.outputFile(fileWorkPepXMLRaw), "RawPepXML", true); - mascot2XMLAction.addParameter(RecordedAction.COMMAND_LINE_PARAM, StringUtils.join(args)); - } - - _wd.discardFile(fileWorkMGF); - _wd.discardFile(fileWorkInputXML); - - return new RecordedActionSet(mzxml2SearchAction, mascotAction, mascot2XMLAction); - } - catch (IOException e) - { - throw new PipelineJobException(e); - } - } - - private String getSequenceDatabase(FileLike datFile) throws IOException - { - return getMascotResultEntity(datFile, "parameters", "DB"); - } - - private String getDatabaseRelease(FileLike datFile) throws IOException - { - return getMascotResultEntity(datFile, "header", "release"); - } - - private String getMascotResultEntity(FileLike datFile, String mimeName, String tag) throws FileNotFoundException - { - if (!NetworkDrive.exists(datFile)) - throw new FileNotFoundException(datFile + " not found"); - - boolean skipParameter = true; - String mimeNameSubString = "; name=\""+mimeName+"\""; - String tagEqual=tag+"="; - String value = null; - try (InputStream datIn = datFile.openInputStream()) - { - BufferedReader datReader = new BufferedReader(new InputStreamReader(datIn)); - - String line; - while (null != (line = datReader.readLine())) - { - // TODO: check for actual MIME boundary - if (line.startsWith("Content-Type: ")) - { - skipParameter = !line.endsWith(mimeNameSubString); - } - else - { - if (!skipParameter && line.startsWith(tagEqual)) - { - value = line.substring(tagEqual.length()); - break; - } - } - } - } - catch (FileNotFoundException e) - { - throw e; - } - catch (IOException e) - { - // fail to readLine! - } - return value; - } - - private Map readLocalMascotFileHash(String filepath) throws IOException - { - final File hashFile = new File(filepath); - - Map returns=new HashMap<>(); - - if (hashFile.exists()) { - try (InputStream datIn = new FileInputStream(hashFile)) - { - Properties results=new Properties(); - try (InputStream in = new BufferedInputStream(datIn)) - { - results.load(in); - } - catch (IOException e) - { - getJob().warn("Fail to load database information " + filepath); - } - - for(Map.Entry entry: results.entrySet()) { - returns.put((String)entry.getKey(),(String)entry.getValue()); - } - } - catch (FileNotFoundException e) - { - //do nothing - } - } - - return returns; - } - - private boolean saveLocalMascotFileHash(String filepath, String hash, long filesize, long timestamp) - { - Properties hashes = new Properties(); - hashes.put(KEY_HASH, hash); - StringBuilder sb=new StringBuilder(); - sb.append(filesize); - hashes.put(KEY_FILESIZE, sb.toString()); - sb=new StringBuilder(); - sb.append(timestamp); - hashes.put(KEY_TIMESTAMP, sb.toString()); - - final File hashFile = new File(filepath); - OutputStream datOut; - try - { - datOut = new FileOutputStream(hashFile); - } - catch (FileNotFoundException e) - { - getJob().warn("Fail to open database information " + filepath); - return false; - } - boolean status = false; - try - { - hashes.store(datOut, ""); - status = true; - } - catch (IOException e) - { - getJob().warn("Fail to save database information " + filepath); - } - finally - { - try - { - datOut.close(); - } - catch (IOException e) - { - getJob().warn("Fail to close database information " + filepath); - } - } - return status; - } -} diff --git a/ms2/src/org/labkey/ms2/pipeline/mascot/setMascotDefaults.jsp b/ms2/src/org/labkey/ms2/pipeline/mascot/setMascotDefaults.jsp deleted file mode 100644 index b77bdd7c26..0000000000 --- a/ms2/src/org/labkey/ms2/pipeline/mascot/setMascotDefaults.jsp +++ /dev/null @@ -1,54 +0,0 @@ -<% -/* - * Copyright (c) 2007-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -%> -<%@ page import="org.labkey.api.data.Container"%> -<%@ page import="org.labkey.api.pipeline.PipelineUrls"%> -<%@ page import="org.labkey.api.view.HttpView" %> -<%@ page import="org.labkey.api.view.JspView" %> -<%@ page import="org.labkey.api.view.template.ClientDependencies" %> -<%@ page import="org.labkey.ms2.pipeline.PipelineController" %> -<%@ page extends="org.labkey.api.jsp.JspBase" %> -<%@ taglib prefix="labkey" uri="http://www.labkey.org/taglib" %> -<%! - @Override - public void addClientDependencies(ClientDependencies dependencies) - { - dependencies.add("clientapi/ext3"); - } -%> -<% - JspView view = HttpView.currentView(); - PipelineController.SetDefaultsForm form = view.getModelBean(); - Container c = getContainer(); -%> - - -

- -
-
- For detailed explanations of all available input parameters, see the - Mascot API Documentation and <%= helpLink("pipelineMascot", "LabKey Server Mascot documentation")%> on-line. -
-
- -
- - diff --git a/ms2/src/org/labkey/ms2/query/MS2Schema.java b/ms2/src/org/labkey/ms2/query/MS2Schema.java index 5db0b3af2a..5f9796d1ea 100644 --- a/ms2/src/org/labkey/ms2/query/MS2Schema.java +++ b/ms2/src/org/labkey/ms2/query/MS2Schema.java @@ -113,7 +113,6 @@ public class MS2Schema extends UserSchema private static final String PROTOCOL_PATTERN_PREFIX = "urn:lsid:%:Protocol.%:"; - public static final String MASCOT_PROTOCOL_OBJECT_PREFIX = "MS2.Mascot"; public static final String COMET_PROTOCOL_OBJECT_PREFIX = "MS2.Comet"; public static final String SEQUEST_PROTOCOL_OBJECT_PREFIX = "MS2.Sequest"; public static final String XTANDEM_PROTOCOL_OBJECT_PREFIX = "MS2.XTandem"; @@ -192,16 +191,6 @@ public ExpRunTable createTable(MS2Schema ms2Schema, ContainerFilter cf) return searchTable; } }, - MascotSearchRuns - { - @Override - public ExpRunTable createTable(MS2Schema ms2Schema, ContainerFilter cf) - { - ExpRunTable searchTable = ms2Schema.createSearchTable(MascotSearchRuns.toString(), cf, MASCOT_PROTOCOL_OBJECT_PREFIX); - searchTable.setDescription("Contains one row per Mascot search results loaded in this folder."); - return searchTable; - } - }, CometSearchRuns { @Override @@ -271,8 +260,6 @@ public TableInfo createTable(MS2Schema ms2, ContainerFilter cf) result.addWrapColumn(result.getRealTable().getColumn("Status")); result.addWrapColumn(result.getRealTable().getColumn("StatusId")).setHidden(true); result.addWrapColumn(result.getRealTable().getColumn("Type")); - result.addWrapColumn(result.getRealTable().getColumn("MascotFile")); - result.addWrapColumn(result.getRealTable().getColumn("DistillerRawFile")); var iconColumn = result.wrapColumn("Links", result.getRealTable().getColumn("Run")); iconColumn.setDisplayColumnFactory(colInfo -> { @@ -500,7 +487,7 @@ public CompareProteinProphetTableInfo createProteinProphetCompareTable(HttpServl public ExpRunTable createRunsTable(String name, ContainerFilter filter) { - return createSearchTable(name, filter, XTANDEM_PROTOCOL_OBJECT_PREFIX, MASCOT_PROTOCOL_OBJECT_PREFIX, COMET_PROTOCOL_OBJECT_PREFIX, SEQUEST_PROTOCOL_OBJECT_PREFIX , IMPORTED_SEARCH_PROTOCOL_OBJECT_PREFIX); + return createSearchTable(name, filter, XTANDEM_PROTOCOL_OBJECT_PREFIX, COMET_PROTOCOL_OBJECT_PREFIX, SEQUEST_PROTOCOL_OBJECT_PREFIX , IMPORTED_SEARCH_PROTOCOL_OBJECT_PREFIX); } public SpectraCountTableInfo createSpectraCountTable(SpectraCountConfiguration config, ViewContext context, MS2Controller.SpectraCountForm form) diff --git a/ms2/src/org/labkey/ms2/query/PeptidesTableInfo.java b/ms2/src/org/labkey/ms2/query/PeptidesTableInfo.java index e0f01a60e6..f685490731 100644 --- a/ms2/src/org/labkey/ms2/query/PeptidesTableInfo.java +++ b/ms2/src/org/labkey/ms2/query/PeptidesTableInfo.java @@ -60,8 +60,6 @@ */ public class PeptidesTableInfo extends FilteredTable { - public static final String DUMMY_SCORE_COLUMN_NAME = "NullScore"; - private final MS2RunType[] _runTypes; public PeptidesTableInfo(MS2Schema schema) @@ -554,7 +552,7 @@ public List getDefaultVisibleColumns() Set scoreCols = new HashSet<>(); for (FieldKey name : runType.getScoreColumnList()) { - if (!DUMMY_SCORE_COLUMN_NAME.equalsIgnoreCase(name.getName()) && scoreCols.add(name)) + if (scoreCols.add(name)) { result.add(name); } diff --git a/ms2/src/org/labkey/ms2/reader/DatDocumentParser.java b/ms2/src/org/labkey/ms2/reader/DatDocumentParser.java deleted file mode 100644 index f0e2bc1042..0000000000 --- a/ms2/src/org/labkey/ms2/reader/DatDocumentParser.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2011-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.labkey.ms2.reader; - -import org.labkey.api.search.AbstractDocumentParser; -import org.labkey.api.webdav.WebdavResource; -import org.xml.sax.ContentHandler; - -import java.io.InputStream; - -/** - * Mascot .dat file Lucene document parser - * User: jeckels - * Date: Feb 22, 2011 - */ -public class DatDocumentParser extends AbstractDocumentParser -{ - @Override - protected void parseContent(InputStream stream, ContentHandler handler) - { - // Intentionally no-op as the content isn't very interesting for full text search - } - - @Override - public String getMediaType() - { - return "application/dat"; - } - - @Override - public boolean detect(WebdavResource resource, String contentType, byte[] buf) - { - if (resource.getName().toLowerCase().endsWith(".dat") || getMediaType().equals(resource.getContentType())) - { - String header = new String(buf, 0, buf.length); - return header.contains("Generated by Mascot"); - } - return false; - } -} diff --git a/ms2/src/org/labkey/ms2/reader/MS2Loader.java b/ms2/src/org/labkey/ms2/reader/MS2Loader.java index 2e036a9dfa..3393b2af68 100644 --- a/ms2/src/org/labkey/ms2/reader/MS2Loader.java +++ b/ms2/src/org/labkey/ms2/reader/MS2Loader.java @@ -77,8 +77,6 @@ public static class PeptideFraction protected Float _importSpectraMinProbability = null; protected boolean _loadSpectra = false; protected MS2ModificationList _modifications = new MS2ModificationList(); - protected String _mascotFile = null; - protected String _distillerRawFile = null; public String getMassSpecType() { @@ -179,26 +177,6 @@ public void addModification(MS2Modification modification) { _modifications.add(modification); } - - public String getMascotFile() - { - return _mascotFile; - } - - public void setMascotFile(String mascotFile) - { - _mascotFile = mascotFile; - } - - public String getDistillerRawFile() - { - return _distillerRawFile; - } - - public void setDistillerRawFile(String distillerRawFile) - { - _distillerRawFile = distillerRawFile; - } } public static class Peptide diff --git a/ms2/src/org/labkey/ms2/reader/MascotDatLoader.java b/ms2/src/org/labkey/ms2/reader/MascotDatLoader.java deleted file mode 100644 index 900a7f87f2..0000000000 --- a/ms2/src/org/labkey/ms2/reader/MascotDatLoader.java +++ /dev/null @@ -1,1105 +0,0 @@ -/* - * Copyright (c) 2015-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.labkey.ms2.reader; - -import org.apache.commons.lang3.StringUtils; -import org.apache.logging.log4j.Logger; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.labkey.api.data.Container; -import org.labkey.api.util.Pair; -import org.labkey.api.util.Path; -import org.labkey.api.util.StringUtilsLabKey; -import org.labkey.ms2.MS2Modification; -import org.labkey.ms2.MS2RunType; -import org.labkey.ms2.SpectrumException; -import org.labkey.ms2.pipeline.MS2PipelineManager; -import org.labkey.vfs.FileLike; -import org.labkey.vfs.FileSystemLike; - -import javax.xml.stream.XMLStreamException; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * Handles parsing of .dat files and inserting into the database. - * Created by susanh on 10/22/15. - */ -public class MascotDatLoader extends MS2Loader implements AutoCloseable -{ - public static final String DB_PREFIX = "DB="; - /** Match "fastafile=FASTA", "fastafile2=FASTA2", "fastafile3=FASTA3", etc */ - public static final Pattern FASTAFILE_REGEX = Pattern.compile("fastafile\\d*=(.*)"); - public static final String ENZYME_PREFIX = "CLE="; - public static final String ENZYME_PREFIX_LC = "cle="; - public static final String DEFAULT_ENZYME = "trypsin"; - public static final String SEARCH_ENGINE_NAME = MS2RunType.Mascot.name().toUpperCase(); - public static final String MASCOT_FILE_PREFIX = "FILE="; - public static final String DISTILLER_RAWFILE_PREFIX = "_DISTILLER_RAWFILE="; - - // Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p - private static final Pattern BOUNDARY_MARKER_LINE = Pattern.compile("\\s*Content-Type: multipart/mixed; boundary=(.*)"); - private static final int BOUNDARY_MARKER_GROUP_NUM = 1; - // Content-Type: application/x-Mascot; name="" - private static final Pattern CONTENT_TYPE_LINE = Pattern.compile("\\s*Content-Type: application/x-Mascot; name=\"([^\\d]*)(\\d*)\""); - private static final int SECTION_NAME_GROUP_NUM = 1; - private static final int QUERY_SECTION_INDEX_GROUP_NUM = 2; - - - // For matching generic assignments of values to keys - // Key=value - private static final Pattern KEY_VALUE_LINE = Pattern.compile("([^=]*)=(.*)"); - private static final int KV_KEY_GROUP_NUM = 1; - private static final int KV_VALUE_GROUP_NUM = 2; - // Example lines: - // delta1=15.233,Me-ester (C-term) - // delta2=44.123,ICAT-C:13C(9) (C) - // delta4=15.994919,Oxidation (HW) - private static final Pattern MASS_DELTA_LINE = Pattern.compile("delta(\\d+)=([^,]*),(.*\\((.*)\\))"); - // FixedMod1=57.021464,Carbamidomethyl (C) - private static final Pattern MASS_FIXED_MOD_LINE = Pattern.compile("FixedMod(\\d+)=([^,]*),(.*\\((.*)\\))"); - // FixedModResidues1=C - @SuppressWarnings({"UnusedDeclaration"}) - private static final Pattern MASS_FIXED_MOD_RESIDUES_LINE = Pattern.compile("FixedModResidues(\\d+)=(.*)"); - private static final int MASS_INDEX_GROUP_NUM = 1; - private static final int MASS_DELTA_GROUP_NUM = 2; - @SuppressWarnings({"UnusedDeclaration"}) - private static final int MASS_FIXED_MOD_RESIDUES_GROUP_NUM = 2; - private static final int MASS_DELTA_NAME_GROUP_NUM = 3; - private static final int MASS_RESIDUES_GROUP_NUM = 4; - - - // Peptides are on two separate lines: - // Peptide Line 1: - // q1_p1=0,605.641861,-0.122701,4,SASVSR,10,00000000,15.51,00020020000000000,0,0;"gi|15599453|30S_ribosomal_pro":0:49:54:2 - // OR, for multiple protein matches: - // q4_p1=1,610.666458,-1.616048,2,RGGGHK,8,00000000,2.94,00000020000000000,0,0;"gi|11036695|putative_L2_ribos":0:54:59:1,"gi|1685374|ribosomal_protein_":0:55:60:2 - // If there was no match for a peptide, it may be represented like this: - // q2_p1=-1 - // &first, &mass , &massdiff,&nextionmatch,nextpeptide,&first,nextmods,&nextionscore,discard ,&first,&first;"nextprotein" :); - // q 1 _p 1 = 0 ,605.641861,-0.122701 ,4 ,SASVSR ,10 ,00000000,15.51 ,00020020000000000,0 ,0 ;"gi|15599453|30S_ribosomal_pro":0 :49 :54 :2 - // private static final Pattern PEPTIDE_LINE1 = Pattern.compile("q(\\d+)_p(\\d+)=\\d+ ,(.*) ,(.*) ,(\\d*) ,(.*) ,\\d+ ,(.*) ,(.*) ,.* ;"(.*)" :\d+:\d+:\d+:\d+""); - // 1 2 3 4 5 6 7 8 9 "); - private static final Pattern PEPTIDE_PROTEIN = Pattern.compile("\"([^\"]*)\":\\d+:\\d+:\\d+:\\d+"); - private static final int PEPTIDE_PROTEIN_NAME_GROUP_NUM = 1; - - private static final Pattern PEPTIDE_LINE1 = Pattern.compile("q(\\d+)_p(\\d+)=\\d+,([^,]*),([^,]*),(\\d*),([^,]*),\\d+,([^,]*),([^,]*),.*;" + PEPTIDE_PROTEIN + "(.*)"); - private static final int QUERY_INDEX_GROUP_NUM = 1; - private static final int HIT_RANK_GROUP_NUM = 2; - private static final int PEPTIDE_MASS_GROUP_NUM = 3; - private static final int PEPTIDE_MASS_DIFF_GROUP_NUM = 4; - private static final int PEPTIDE_ION_MATCH_GROUP_NUM = 5; - private static final int PEPTIDE_NAME_GROUP_NUM = 6; - private static final int PEPTIDE_MODS_GROUP_NUM = 7; - private static final int PEPTIDE_ION_SCORE_GROUP_NUM = 8; - private static final int PEPTIDE_PROTEIN_GROUP_NUM = 9; - private static final int PEPTIDE_ALTERNATE_PROTEIN_GROUP_NUM = 10; - - - // Peptide Line 2: - // q1_p1_terms=K,I - // OR, for multiple protein matches - // q1_p5_terms=R,I:R,I - private static final Pattern PEPTIDE_LINE2 = Pattern.compile("q(\\d+)_p(\\d+)_terms=([^,]*),([^:]*)(:([^,]*?),([^:]*?))*"); - private static final int PEPTIDE_TERMS_PREVIOUS_AA_GROUP_NUM = 3; - private static final int PEPTIDE_TERMS_NEXT_AA_GROUP_NUM = 4; - - private static final Pattern IDENTITY_SCORE_SUMMARY_LINE = Pattern.compile("qmatch(\\d+)=(.*)"); - private static final Pattern HOMOLOGY_SCORE_SUMMARY_LINE = Pattern.compile("qplughole(\\d+)=(.*)"); - private static final Pattern PRECURSOR_ION_CHARGE_SUMMARY_LINE = Pattern.compile("qexp(\\d+)=([^,]*)(,(\\d).)?"); - - private static final int ION_CHARGE_GROUP_NUM = 4; - private static final int UNKNOWN_ION_CHARGE_VALUE = 4; - - private static final String QUERY_TITLE_PREFIX = "title="; - private static final String QUERY_SCANS_PREFIX = "scans="; - private static final String QUERY_RETENTION_TIME_PREFIX = "rtinseconds="; - private static final String QUERY_SPECTRUM_PREFIX = "Ions1="; - - // the title line starts out looking like this: - // title=CAexample_mini%2e0110%2e0110%2e1 - // once URL decoded, the value looks like this: - // CAexample_mini.0110.0110.1 - - public static final Pattern QUERY_TITLE_SCAN_REGEX = Pattern.compile("\\.??(\\d{1,6})\\.(\\d{1,6})\\.(\\d)\\.??[a-zA-Z0-9_]*?$"); - // the title line may also look like this: - // title=Spectrum270258%20scans%3a6721%2c - // decoded to: - // Spectrum270258 scans:6721, - public static final Pattern SPECTRUM_SCANS_REGEX = Pattern.compile(".*\\s+scans:(\\d+).*"); - - // the title line may also look like this: - // title=Description%2e4276%2e4276%2e2%20File%3a%22Description%2eraw%22%2c%20NativeID%3a%22controllerType%3d0%20controllerNumber%3d1%20scan%3d4276%22 - // decoded to: - // Description.4276.4276.2 File:"Description.raw", NativeID:"controllerType=0 controllerNumber=1 scan=4276" - public static final Pattern SPECTRUM_SCAN_REGEX = Pattern.compile(".*\\s+scan=(\\d+).*"); - public static final int START_SCAN_GROUP_NUM = 1; - public static final int END_SCAN_GROUP_NUM = 2; - @SuppressWarnings({"UnusedDeclaration"}) - public static final int CHARGE_GROUP_NUM = 3; // Not currently used as we extract the charge value elsewhere, left for documentation - public static final String IDENTITY_SCORE = "identityscore"; - public static final String HOMOLOGY_SCORE = "homologyscore"; - - /** - * The sections that appear in a .dat file. It's unclear if they always appear in this order or not, but empirical evidence - * suggests they do. If they don't it's not a problem, though. - */ - public enum Section { - PARAMETERS, - MASSES, - QUANTITATION, // Not currently used - UNIMOD, // Not currently used - ENZYME, // Not currently used - TAXONOMY, // Not currently used - HEADER, - SUMMARY, - DECOY_SUMMARY, - PEPTIDES, - DECOY_PEPTIDES, - PROTEINS, // Not currently used - QUERY, - INDEX, // Not currently used - UNKNOWN_SECTION // We don't have an exhaustive list. Set to this if we find a section we don't know about. - } - - private String _boundaryMarker = null; - private final BufferedReader _reader; - private String _currentLine = null; - private Section _currentSection = null; - private Integer _currentQueryNum = null; - - private long _charactersRead = 0L; // used for indicating progress; not exact, but probably close enough - - private final Set
_loadedSections = new HashSet<>(); - - private final Map _masses = new HashMap<>(); - - private static final String _nonStandardAminoAcids = "BJOUXZ"; - - public MascotDatLoader(FileLike f, Logger log) throws IOException, XMLStreamException - { - init(f, log); - _reader = new BufferedReader(new InputStreamReader(f.openInputStream(), StringUtilsLabKey.DEFAULT_CHARSET)); - findBoundaryMarker(); - } - - public long getCharactersRead() - { - return _charactersRead; - } - - // Looking for the boundary marker in the header like so: - // MIME-Version: 1.0 (Generated by Mascot version 1.0) - // Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p - // After this, the current line will be the last line read (i.e., the Content-Type line) or null if EOF was reached. - private void findBoundaryMarker() throws IOException - { - readLine(); - while (!eof() && (_boundaryMarker == null)) - { - Matcher matcher = BOUNDARY_MARKER_LINE.matcher(_currentLine); - if (matcher.matches()) - { - _boundaryMarker = "--" + matcher.group(BOUNDARY_MARKER_GROUP_NUM); - } - else - { - readLine(); - } - } - } - - /** - * Find the next line that looks like this: - * Content-Type: application/x-Mascot; name="" - * and sets the currentSection member to the value of . If this is a Query section, the currentQueryNum - * will also be set to the number after the word "query" in - * The current line will be the last line read (i.e., the Content-Type line) or null if EOF was reached. - * - * @return indicator of whether a section was found or not. - */ - public boolean findSection() throws IOException - { - readLine(); - while (!eof()) - { - Matcher matcher = CONTENT_TYPE_LINE.matcher(_currentLine); - if (matcher.matches()) - { - try - { - _currentSection = Section.valueOf(matcher.group(SECTION_NAME_GROUP_NUM).toUpperCase()); - } - catch (IllegalArgumentException e) // Don't fail on sections we don't know about - { - _log.warn("Unknown section found in dat file: {}", matcher.group(SECTION_NAME_GROUP_NUM)); - _currentSection = Section.UNKNOWN_SECTION; - return true; - } - if (!matcher.group(QUERY_SECTION_INDEX_GROUP_NUM).isEmpty()) - { - _currentQueryNum = Integer.valueOf(matcher.group(QUERY_SECTION_INDEX_GROUP_NUM)); - } - else - { - _currentQueryNum = null; - } - return true; - } - readLine(); - } - return false; - } - - public Section getCurrentSection() - { - return _currentSection; - } - - public Integer getCurrentQueryNum() - { - return _currentQueryNum; - } - - /** - * Seek to a specific query section within the file based on the requested scan number - */ - public boolean findByScanNumber(int scan) throws IOException - { - while (findSection()) - { - if (Section.QUERY.equals(getCurrentSection())) - { - // Burn lines until we find a scan or hit the end of the section - while (!atEndOfSection()) - { - Pair scans = getScanInfo(); - if (scans != null && scans.getKey().intValue() == scan) - { - return true; - } - readLine(); - } - } - } - return false; - } - - @Override - public void close() - { - try - { - if (null != _reader) - _reader.close(); - } - catch (IOException e) - { - _log.error(e); - } - } - - public boolean isLoaded(Section section) - { - return _loadedSections.contains(section); - } - - /** - * Loads data from the parameters section and stores it in the given peptide fraction. - * @param fraction the object to contain the data loaded from the parameters - * @param container the container in which we look for database files - * @throws IOException if there are problems reading from the .dat file - */ - public void loadParameters(PeptideFraction fraction, Container container) throws IOException - { - fraction.setSearchEngine(SEARCH_ENGINE_NAME); - fraction.setSearchEnzyme(DEFAULT_ENZYME); // use the default unless we find something else - readLine(); - while (!atEndOfSection()) - { - if (_currentLine.startsWith(DB_PREFIX)) - { - String dbFileName = _currentLine.substring(DB_PREFIX.length()).trim(); - try - { - FileLike databaseFile = getDatabaseFile(container, dbFileName, null); - fraction.setDatabaseLocalPaths(Arrays.asList(databaseFile.toNioPathForRead().toFile().getAbsolutePath())); - } - catch (FileNotFoundException e) - { - // Do nothing. If we can't find the file from the fastafile value in the header section, it will throw an exception. - // Note that this assumes the header comes after the parameters section, which seems to be the case (despite what the names - // might suggest). - _log.warn("Could not find FASTA file: {}", dbFileName); - } - } - else if (_currentLine.startsWith(ENZYME_PREFIX) || _currentLine.startsWith(ENZYME_PREFIX_LC)) - { - fraction.setSearchEnzyme(_currentLine.substring(ENZYME_PREFIX.length()).trim()); - } - else if (_currentLine.startsWith(MASCOT_FILE_PREFIX)) - { - fraction.setMascotFile(_currentLine.substring(MASCOT_FILE_PREFIX.length()).trim()); - } - else if (_currentLine.startsWith(DISTILLER_RAWFILE_PREFIX)) - { - fraction.setDistillerRawFile(_currentLine.substring(DISTILLER_RAWFILE_PREFIX.length()).trim()); - } - readLine(); - } - _loadedSections.add(Section.PARAMETERS); - } - - public void loadMasses(PeptideFraction fraction) throws IOException - { - readLine(); - while (!atEndOfSection()) - { - if (!_currentLine.trim().isEmpty()) - { - Matcher matcher = MASS_DELTA_LINE.matcher(_currentLine); - if (matcher.matches()) // These are the variable mods - { - String name = matcher.group(MASS_DELTA_NAME_GROUP_NUM); - Float massDelta = Float.parseFloat(matcher.group(MASS_DELTA_GROUP_NUM)); - boolean isProteinTerm = name.contains("Protein"); - - // CONSIDER: This index is possibly important for matching up modifications for individual proteins, but is not used now ('cause I don't know how) - int deltaNum = Integer.parseInt(matcher.group(MASS_INDEX_GROUP_NUM)); - String residues = matcher.group(MASS_RESIDUES_GROUP_NUM); - boolean isNTerm = residues.contains("N-term"); - boolean isCTerm = residues.contains("C-term"); - if (isNTerm && isCTerm) - { - _log.error("Both c and n term modification detected. Skipping delta {} in masses.", deltaNum); - } - else if ((((residues.length() == 7 || residues.length() == 14) && isProteinTerm)) || - (residues.length() == 6 && isNTerm)) - { - addVariableModifiedMass(fraction, "N", massDelta); - } - else if (residues.length() == 6 && isCTerm) - { - addVariableModifiedMass(fraction, "C", massDelta); - } - else - { - if (isCTerm || isNTerm) // presumably the [N|C]-term string comes at the beginning - residues = residues.substring(7); - - for (int i = 0; i < residues.length(); i++) - { - addVariableModifiedMass(fraction, residues.substring(i, i + 1), massDelta); - } - } - } - else if ((matcher = MASS_FIXED_MOD_LINE.matcher(_currentLine)).matches()) // these are static mods - { - float massDelta = Float.parseFloat(matcher.group(MASS_DELTA_GROUP_NUM)); - String residues = matcher.group(MASS_RESIDUES_GROUP_NUM); - residues = residues.replace("N-term", ""); - residues = residues.replace("C-term", ""); - - for (int i = 0; i < residues.length(); i++) - { - MS2Modification mod = new MS2Modification(); - mod.setAminoAcid(residues.substring(i, i+1)); - mod.setMass(massDelta); // I think it is correct to set mass and massDelta the same here - mod.setVariable(false); - mod.setMassDiff(massDelta); - mod.setSymbol("?"); - fraction.addModification(mod); - } - } - else if ((matcher = KEY_VALUE_LINE.matcher(_currentLine)).matches()) - { - String massName = matcher.group(KV_KEY_GROUP_NUM); - - if (massName.length() == 1) - { - float mass = Float.parseFloat(matcher.group(KV_VALUE_GROUP_NUM)); - _masses.put(massName, mass); - if (_nonStandardAminoAcids.contains(massName)) // These are the fixed mods - { - MS2Modification mod = new MS2Modification(); - mod.setAminoAcid(massName); - mod.setMass(mass); - mod.setVariable(false); - mod.setMassDiff(mass); // for these non-standard AA's, the delta and the mass are the same. - mod.setSymbol("?"); - fraction.addModification(mod); - } - } - else if (massName.equalsIgnoreCase("c_term")) - { - _masses.put("c", Float.parseFloat(matcher.group(KV_VALUE_GROUP_NUM))); - } - else if (massName.equalsIgnoreCase("n_term")) - { - _masses.put("n", Float.parseFloat(matcher.group(KV_VALUE_GROUP_NUM))); - } - } - } - readLine(); - } - ((MS2ModificationList) fraction.getModifications()).initializeSymbols(); - _loadedSections.add(Section.MASSES); - } - - private void addVariableModifiedMass(PeptideFraction fraction, String aminoAcid, Float massDelta) - { - if (!_masses.containsKey(aminoAcid)) - _log.error("Trying to store a variable AA modification for '{}' without any prior info for this AA.", aminoAcid); - else - { - MS2Modification mod = new MS2Modification(); - mod.setAminoAcid(aminoAcid); - mod.setMass(_masses.get(aminoAcid) + massDelta); - mod.setVariable(true); - // we don't set the symbols here; they are set by the initializeSymbols method on the modifications list - // once all the modifications have been collected. - mod.setMassDiff(massDelta); - fraction.addModification(mod); - } - } - - public void loadPeptides(Map peptides, PeptideFraction fraction, boolean decoys) - { - PeptideIterator iterator = new PeptideIterator(fraction); - DatPeptide peptide; - while (iterator.hasNext()) - { - peptide = iterator.next(); - peptide.setDecoy(decoys); - if (peptides.containsKey(peptide.getIndex())) - { - DatPeptide existingPeptide = peptides.get(peptide.getIndex()); - if (Objects.equals(peptide.getHitRank(), existingPeptide.getHitRank())) - { - existingPeptide.merge(peptide); - } - else - { - existingPeptide.getOtherHitRanks().add(peptide); - } - } - else - { - if (null == peptide.getHitRank()) - peptide.setHitRank(1); - peptides.put(peptide.getIndex(), peptide); - } - } - _loadedSections.add(decoys ? Section.DECOY_PEPTIDES : Section.PEPTIDES); - } - - /** - * Used for on-demand spectrum loading from the file, not for database storage - */ - public Pair loadSpectrum(int scan) throws SpectrumException, IOException - { - if (!findByScanNumber(scan)) - throw new SpectrumException("Can't find requested scan: " + scan); - - readLine(); - while (!atEndOfSection()) - { - if (_currentLine.startsWith(QUERY_SPECTRUM_PREFIX)) - { - try - { - String[] coordPairs = StringUtils.substringAfter(_currentLine, QUERY_SPECTRUM_PREFIX).trim().split(","); - float[][] data = new float[2][coordPairs.length]; - - for (int i = 0; i < coordPairs.length; i++) - { - String[] coords = coordPairs[i].trim().split(":"); - data[0][i] = Float.parseFloat(coords[0].trim()); - data[1][i] = Float.parseFloat(coords[1].trim()); - } - return new Pair<>(data[0], data[1]); - } - catch (Exception e) - { - throw new SpectrumException("Dat file spectrum information is corrupted for scan: " + scan); - } - } - readLine(); - } - throw new SpectrumException("Spectrum information not found for scan: " + scan); - } - - public void loadSummary(Map peptides, boolean decoys) throws IOException - { - readLine(); - while (!atEndOfSection()) - { - Matcher matcher = IDENTITY_SCORE_SUMMARY_LINE.matcher(_currentLine); - if (matcher.matches()) - { - Integer index = Integer.valueOf(matcher.group(QUERY_INDEX_GROUP_NUM)); - DatPeptide peptide = initDatPeptide(peptides, index, decoys); - if (matcher.group(KV_VALUE_GROUP_NUM).isEmpty()) - peptide.setScore(IDENTITY_SCORE, "100.0"); - else - { - float matchValue = Float.parseFloat(matcher.group(KV_VALUE_GROUP_NUM)); - double valueLog10 = 10 * Math.log10(matchValue); - peptide.setScore(IDENTITY_SCORE, String.format("%.2f", valueLog10)); - } - } - else if ((matcher = HOMOLOGY_SCORE_SUMMARY_LINE.matcher(_currentLine)).matches()) - { - Integer index = Integer.valueOf(matcher.group(QUERY_INDEX_GROUP_NUM)); - DatPeptide peptide = initDatPeptide(peptides, index, decoys); - if (matcher.group(KV_VALUE_GROUP_NUM).isEmpty()) - peptide.setScore(HOMOLOGY_SCORE, "100.0"); - else - { - Float scoreValue = Float.valueOf(matcher.group(KV_VALUE_GROUP_NUM)); - peptide.setScore(HOMOLOGY_SCORE, String.format("%.2f", scoreValue)); - } - } - else if ((matcher = PRECURSOR_ION_CHARGE_SUMMARY_LINE.matcher(_currentLine)).matches()) - { - Integer index = Integer.valueOf(matcher.group(QUERY_INDEX_GROUP_NUM)); - DatPeptide peptide = initDatPeptide(peptides, index, decoys); - if (matcher.group(ION_CHARGE_GROUP_NUM).isEmpty()) - peptide.setCharge(UNKNOWN_ION_CHARGE_VALUE); - else - peptide.setCharge(Integer.valueOf(matcher.group(ION_CHARGE_GROUP_NUM))); - - - } - readLine(); - } - _loadedSections.add(decoys ? Section.DECOY_SUMMARY : Section.SUMMARY); - } - - @NotNull - private DatPeptide initDatPeptide(Map peptides, Integer index, boolean isDecoy) - { - DatPeptide peptide = peptides.get(index); - if (null == peptide) - { - peptide = new DatPeptide(); - peptide.setDecoy(isDecoy); - peptides.put(index, peptide); - } - return peptide; - } - - /** @return start and end scan numbers for the current query section */ - @Nullable - private Pair getScanInfo() throws UnsupportedEncodingException - { - if (_currentLine.startsWith(QUERY_TITLE_PREFIX)) - { - String title = URLDecoder.decode(_currentLine.substring(QUERY_TITLE_PREFIX.length()), "UTF-8"); - Matcher matcher = QUERY_TITLE_SCAN_REGEX.matcher(title); - if (matcher.find()) - { - return new Pair<>(Integer.parseInt(matcher.group(START_SCAN_GROUP_NUM)), Integer.parseInt(matcher.group(END_SCAN_GROUP_NUM))); - } - else - { - matcher = SPECTRUM_SCANS_REGEX.matcher(title); - if (matcher.find()) - { - int scan = Integer.parseInt(matcher.group(START_SCAN_GROUP_NUM)); - return new Pair<>(scan, scan); - } - else - { - matcher = SPECTRUM_SCAN_REGEX.matcher(title); - if (matcher.find()) - { - int scan = Integer.parseInt(matcher.group(START_SCAN_GROUP_NUM)); - return new Pair<>(scan, scan); - } - } - } - } - else if (_currentLine.startsWith(QUERY_SCANS_PREFIX)) // N.B. This line is not parsed in the Mascot2XML code, but it seems a good place to get the start scan data; the syntax is unknown for multiple scans, though - { - String scanValue = _currentLine.substring(QUERY_SCANS_PREFIX.length()); - String[] scans = scanValue.split("-"); - if (scans.length < 1 || scans.length > 2) - { - throw new NumberFormatException("Could not parse scan number: " + scanValue); - } - // Some Mascot files have a range for scans. See issue 28505 - int startScan = Integer.parseInt(scans[0]); - int endScan = scans.length == 1 ? startScan : Integer.parseInt(scans[1]); - return new Pair<>(startScan, endScan); - } - return null; - } - - /** - * Load the query section, which applies to both peptides and decoys, and all hit ranks. Make one pass to fill in for both - * peptides and the decoy peptides at same time. Note, this is a bit inefficient if it turns out there are no decoy peptides - * for this run, as we'll build up that list just to drop it on the floor later. But this is necessary to support arbitrary - * ordering of sections. - */ - public void loadQuery(Map peptides, Map decoyPeptides) throws IOException - { - readLine(); - DatPeptide peptide = initDatPeptide(peptides, _currentQueryNum, false); - peptide.setQueryNumber(_currentQueryNum); - String title = null; - while (!atEndOfSection()) - { - Pair scans = getScanInfo(); - if (scans != null) - { - peptide.setScan(scans.getKey()); - peptide.setEndScan(scans.getValue()); - } - if (_currentLine.startsWith(QUERY_TITLE_PREFIX)) - { - title = URLDecoder.decode(_currentLine.substring(QUERY_TITLE_PREFIX.length()), "UTF-8"); - } - - if (_currentLine.startsWith(QUERY_RETENTION_TIME_PREFIX)) // N.B. This line is not parsed in the Mascot2Xml code, but it seems a reasonable place to get the retention time - { - String retentionTime = _currentLine.substring(QUERY_RETENTION_TIME_PREFIX.length()); - if (retentionTime.contains("-")) - { - // Some Mascot files have a range for retention times when the match spans multiple scans. We only support - // a single retention time, so throw away the end of the range. See issue 28505 - retentionTime = retentionTime.split("-")[0]; - } - peptide.setRetentionTime(Double.parseDouble(retentionTime)); - } - readLine(); - } - if (peptide.getScan() == null && title != null) - { - _log.debug("Scan for peptide {} in query {} not found. Parsing from title.", peptide.getTrimmedPeptide(), _currentQueryNum); - findScanFromTitle(title, peptide); - } - - if (peptide.getScan() == null) - { - throw new IllegalArgumentException("Unable to determine scan number for peptide " + peptide.getTrimmedPeptide() + " in query " + _currentQueryNum + " - title = " + title); - } - - DatPeptide decoyPeptide = initDatPeptide(decoyPeptides, _currentQueryNum, true); - decoyPeptide.setQueryNumber(_currentQueryNum); - decoyPeptide.setScan(peptide.getScan()); - decoyPeptide.setEndScan(peptide.getEndScan()); - decoyPeptide.setRetentionTime(peptide.getRetentionTime()); - } - - private void findScanFromTitle(String title, @NotNull DatPeptide peptide) - { - Pair range = new Pair<>(-1,-1); - Double retentionTime = null; - - String scanPrefix = "scansinrange"; - int rangePosition = title.indexOf(scanPrefix); //sum of several scans - - // get end scan if we haven't already - if (rangePosition != -1) { // was scansinrange: end scan after 'to' - int endIndexStart = title.indexOf("to", rangePosition + scanPrefix.length()); - if (endIndexStart != -1) - range.second = Integer.parseInt(title.substring(endIndexStart)); - } - else - { - scanPrefix = "Scan"; - rangePosition = title.indexOf(scanPrefix); // single scan - } - - if (title.startsWith("ScanNumber:")) - { - range.first = range.second = Integer.parseInt(title.substring("ScanNumber:".length())); // single scan - } - else if (title.startsWith("spectrumId=")) - { - range.first = range.second = Integer.parseInt(title.substring("specturmId=".length())); // single scan - int index = title.indexOf("TimeInSeconds="); - if (index >= 0) - { - index = index + "TimeInSections=".length(); - retentionTime = Double.parseDouble(title.substring(index, index+14)); - } - } // if we had a match and after the match still some characters and the first of them is a number, get start scan - else if (rangePosition >= 0 && title.length() > rangePosition + scanPrefix.length() && Character.isDigit(title.charAt(rangePosition + scanPrefix.length()))) - { - range.first = Integer.parseInt(title.substring(rangePosition+scanPrefix.length())); - } - else if (title.contains("FinneganScanNumber:")) - { - range.first = range.second = Integer.parseInt(title.substring("FinneganScanNumber:".length())); - } - - // CONSIDER: Mascot2XML code has some logic here about parsing scan data from a mzXML file if all the above fails - - if (range.first < 0) { // no scan numbers found: set start scan to 0000 - range.first = 0; - } - - //no end scan: either was single scan or "to" not found or no scan numbers at all - // set end scan to start scan - if (range.first > range.second) { - range.second = range.first; - } - peptide.setScan(range.first); - peptide.setEndScan(range.second); - if (peptide.getRetentionTime() == null) - peptide.setRetentionTime(retentionTime); - - } - - public void loadHeader(PeptideFraction fraction, Container container) throws IOException - { - readLine(); - while (!atEndOfSection()) - { - Matcher matcher = FASTAFILE_REGEX.matcher(_currentLine); - if (matcher.matches()) - { - String s = matcher.group(1); - FileLike databaseFile = getDatabaseFile(container, null, s.trim()); - fraction.getDatabaseLocalPaths().add(databaseFile.toNioPathForRead().toFile().getAbsolutePath()); - } - readLine(); - } - _loadedSections.add(Section.HEADER); - } - - private boolean eof() - { - return _currentLine == null; - } - - private void readLine() throws IOException - { - // Consider: perhaps use the LineIterator from FileUtils instead - _currentLine = _reader.readLine(); - if (_currentLine != null) - _charactersRead += _currentLine.length(); - } - - private boolean atEndOfSection() - { - return eof() || _currentLine.matches(_boundaryMarker); - } - - public FileLike getDatabaseFile(Container container, String dbName, String fastaFileName) throws FileNotFoundException - { - // Try looking for the "DB" value under the FASTA root - FileLike dbRoot = MS2PipelineManager.getSequenceDatabaseRoot(container, true); - if (dbName != null) - { - // Mascot FASTA files may have been downloaded from the server into a ./mascot/X subdirectory, so seek it out - FileLike file = findFile(dbRoot, dbName, 3); - if (file != null) - { - return file; - } - } - - if (fastaFileName != null) - { - // Try using the full path and see if it resolves - FileLike file = FileSystemLike.wrapFile(new File(fastaFileName)); - if (file.isFile()) - { - return file; - } - - // Try looking for the file name under our FASTA directory - String[] fileNameParts = fastaFileName.split("[\\\\/]"); - String fileName = fileNameParts[fileNameParts.length - 1]; - - // Mascot FASTA files may have been downloaded from the server into a ./mascot/X subdirectory, so seek it out - file = findFile(dbRoot, fileName, 3); - if (file != null) - { - return file; - } - } - - throw new FileNotFoundException("Could not find FASTA file. " + (dbName == null ? "" : (DB_PREFIX + dbName)) + " " + (fastaFileName == null ? "" : ("fastafile=" + fastaFileName))); - } - - @Nullable - /** Look for the file up to maxDepth child directories under the current directory */ - private FileLike findFile(FileLike parent, String name, int maxDepth) - { - // Stop looking, we've exceeded our maximum recursive depth - if (maxDepth == 0) - { - return null; - } - - FileLike f = parent.resolveFile(Path.parse(name)); - if (f.isFile()) - { - return f; - } - List children = parent.getChildren(FileLike::isDirectory); - for (FileLike child : children) - { - f = findFile(child, name, maxDepth - 1); - if (f != null) - { - return f; - } - } - return null; - } - - - public class DatPeptide extends Peptide - { - - private int _index; - // The DatPeptide itself will have the properties for hitRank == 1; hit ranks > 1 are stored in this member list - private final List otherHitRanks = new ArrayList<>(); - - public int getIndex() - { - return _index; - } - - public void setIndex(int index) - { - _index = index; - } - - public List getOtherHitRanks() - { - return otherHitRanks; - } - - private String getPeptideWithModifications(MS2ModificationList modificationList, String modificationsMask) - { - StringBuilder peptide = new StringBuilder(_trimmedPeptide); - char[] modChars = new char[_trimmedPeptide.length()]; - _unknownModArray = new boolean[_trimmedPeptide.length()]; - boolean isModified = false; - // the mask is a mask on the un-trimmed peptide, so we adjust indexes in one on either end - for (int i = 1; i < modificationsMask.length()-1; i++) - { - if (modificationsMask.charAt(i) != '0') - { - - String aminoAcid = peptide.substring(i-1, i); - MS2Modification mod = modificationList.get(aminoAcid); - - // If null, it's either one of the mods that X! Tandem looks for on N-terminal amino acids Q, E, and C, and Tandem2XML isn't spitting out - // amino-acid tags OR it's a problem we don't understand - if (null == mod) - { - //record the unknown modification, but don't print out anything yet - _unknownModArray[i-1] = true; - _log.debug("Unknown modification at scan {}: {}", getScan(), aminoAcid); - } - else if (mod.getVariable()) - { - isModified = true; - modChars[i - 1] = mod.getSymbol().charAt(0); - } - } - } - if (isModified) - { - // Iterate in reverse order, so inserts don't invalidate future positions - for (int i = modChars.length - 1; i >= 0; i--) - if (0 != modChars[i]) - peptide.insert(i + 1, modChars[i]); - } - return peptide.toString(); - } - - public boolean load(MS2ModificationList modificationList) throws IOException - { - readLine(); - while (!atEndOfSection()) - { - Matcher matcher = PEPTIDE_LINE1.matcher(_currentLine); - if (matcher.matches()) - { - setIndex(Integer.parseInt(matcher.group(QUERY_INDEX_GROUP_NUM))); - setHitRank(Integer.parseInt(matcher.group(HIT_RANK_GROUP_NUM))); - setCalculatedNeutralMass(Rounder.round(Double.parseDouble(matcher.group(PEPTIDE_MASS_GROUP_NUM)), 4)); - setDeltaMass(Rounder.round(Float.parseFloat(matcher.group(PEPTIDE_MASS_DIFF_GROUP_NUM)), 4)); - - setMatchedIons(Integer.parseInt(matcher.group(PEPTIDE_ION_MATCH_GROUP_NUM))); - setTrimmedPeptide(matcher.group(PEPTIDE_NAME_GROUP_NUM)); - setPeptide(getPeptideWithModifications(modificationList, matcher.group(PEPTIDE_MODS_GROUP_NUM))); - setScore("ionscore", matcher.group(PEPTIDE_ION_SCORE_GROUP_NUM)); - setProtein(matcher.group(PEPTIDE_PROTEIN_GROUP_NUM).trim()); - String alternateProteins = matcher.group(PEPTIDE_ALTERNATE_PROTEIN_GROUP_NUM); - Matcher proteinMatcher = PEPTIDE_PROTEIN.matcher(alternateProteins); - while (proteinMatcher.find()) - { - if (!matcher.group(PEPTIDE_PROTEIN_NAME_GROUP_NUM).isEmpty()) - { - addAlternativeProtein(matcher.group(PEPTIDE_PROTEIN_NAME_GROUP_NUM)); - } - } - setProteinHits(getAlternativeProteins().size() + 1); - - // Read the "terms" line to get the previous and next amino acid - // q1_p1_terms=K,I - // q1_p5_terms=R,I:R,I - readLine(); - Matcher termsMatcher = PEPTIDE_LINE2.matcher(_currentLine); - if (termsMatcher.find()) - { - setNextAA(termsMatcher.group(PEPTIDE_TERMS_NEXT_AA_GROUP_NUM)); - setPrevAA(termsMatcher.group(PEPTIDE_TERMS_PREVIOUS_AA_GROUP_NUM)); - // skipping the terms for alternate proteins (at least for now) - } - return true; - } - readLine(); - } - - return false; - } - - public void merge(DatPeptide otherPeptide) - { - if (otherPeptide.getFraction() != null) - setFraction(otherPeptide.getFraction()); - // load - if (otherPeptide.getPeptide() != null) - setPeptide(otherPeptide.getPeptide()); - if (otherPeptide.getMatchedIons() != null) - setMatchedIons(otherPeptide.getMatchedIons()); - if (otherPeptide.getProteinHits() != null) - setProteinHits(otherPeptide.getProteinHits()); - if (otherPeptide.getPrevAA() != null) - setPrevAA(otherPeptide.getPrevAA()); - if (otherPeptide.getTrimmedPeptide() != null) - setTrimmedPeptide(otherPeptide.getTrimmedPeptide()); - if (otherPeptide.getNextAA() != null) - setNextAA(otherPeptide.getNextAA()); - if (otherPeptide.getProtein() != null) - setProtein(otherPeptide.getProtein()); - getAlternativeProteins().addAll(otherPeptide.getAlternativeProteins()); - // pepXmlLoad - if (otherPeptide.getModifications() != null) - setModifications(otherPeptide.getModifications()); - if (otherPeptide.getDeltaMass() != null) - setDeltaMass(otherPeptide.getDeltaMass()); - if (otherPeptide.getCalculatedNeutralMass() != null) - setCalculatedNeutralMass(otherPeptide.getCalculatedNeutralMass()); - // some scores come from initial load, some from summary info - if (otherPeptide.getScores() != null) - { - if (getScores() == null) - setScores(otherPeptide.getScores()); - else - { - getScores().putAll(otherPeptide.getScores()); - } - } - mergeQueryAndSummarySections(otherPeptide, false); - // derived fields - if (otherPeptide.getTotalIons() != null) - setTotalIons(otherPeptide.getTotalIons()); - if (otherPeptide.getIonPercent() != null) - setIonPercent(otherPeptide.getIonPercent()); - } - - public void mergeQueryAndSummarySections(DatPeptide otherPeptide, boolean mergeSummaryScores) - { - // query - if (otherPeptide.getQueryNumber() != null) - setQueryNumber(otherPeptide.getQueryNumber()); - if (otherPeptide.getScan() != null) - setScan(otherPeptide.getScan()); - if (otherPeptide.getEndScan() != null) - setEndScan(otherPeptide.getEndScan()); - if (otherPeptide.getRetentionTime() != null) - setRetentionTime(otherPeptide.getRetentionTime()); - // summary - if (otherPeptide.getCharge() != null) - setCharge(otherPeptide.getCharge()); - if (mergeSummaryScores) - { - // some scores come from initial load, some from summary info - if (otherPeptide.getScore(IDENTITY_SCORE) != null) - setScore(IDENTITY_SCORE, otherPeptide.getScore(IDENTITY_SCORE)); - if (otherPeptide.getScore(HOMOLOGY_SCORE) != null) - setScore(HOMOLOGY_SCORE, otherPeptide.getScore(HOMOLOGY_SCORE)); - } - } - } - - public class PeptideIterator implements Iterator - { - private DatPeptide _peptide = null; - private final PeptideFraction _fraction; - - public PeptideIterator(PeptideFraction fraction) - { - _fraction = fraction; - } - - @Override - public boolean hasNext() - { - try - { - DatPeptide peptide = new DatPeptide(); - boolean success = peptide.load((MS2ModificationList) _fraction.getModifications()); - - if (success) - _peptide = peptide; - else - _peptide = null; - } - catch (IOException e) - { - _log.error(e); - _peptide = null; - } - - return _peptide != null; - } - - @Override - public DatPeptide next() - { - return _peptide; - } - - } -} diff --git a/ms2/src/org/labkey/ms2/reader/PepXmlLoader.java b/ms2/src/org/labkey/ms2/reader/PepXmlLoader.java index 296f8c9682..0ea210d931 100644 --- a/ms2/src/org/labkey/ms2/reader/PepXmlLoader.java +++ b/ms2/src/org/labkey/ms2/reader/PepXmlLoader.java @@ -33,7 +33,6 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Map; -import java.util.regex.Matcher; public class PepXmlLoader extends MS2XmlLoader { @@ -529,18 +528,6 @@ protected void processStartElement(int index) throws XMLStreamException String retentionTime = _parser.getAttributeValue(null, "retention_time_sec"); _retentionTime = (null != retentionTime ? Double.parseDouble(retentionTime) : null); - // Mascot exported pepXML can have start_scan="0" and end_scan="0" - if (0 == _scan) - { - Matcher m = MascotDatLoader.QUERY_TITLE_SCAN_REGEX.matcher(_dtaFileName); - if (m.find()) - { - // endScan=m.group(2), charge=m.group(3) - setScan(Integer.parseInt(m.group(MascotDatLoader.START_SCAN_GROUP_NUM))); - setEndScan(Integer.parseInt(m.group(MascotDatLoader.END_SCAN_GROUP_NUM))); - } - } - break; case(SEARCH_RESULT): // Start over again within each spectrum_query block @@ -570,7 +557,7 @@ protected void processStartElement(int index) throws XMLStreamException else _totalIons = 0; - // Mascot exported pepXML may not report "tot_num_ions" + // Some pepXML exporters omit "tot_num_ions" if (0 == _totalIons && _matchedIons > 0) { // let's attempt to guess the total ions as per sashimi diff --git a/ms2/src/org/labkey/ms2/runSummary.jsp b/ms2/src/org/labkey/ms2/runSummary.jsp index 11ca7c6741..e059bad53e 100644 --- a/ms2/src/org/labkey/ms2/runSummary.jsp +++ b/ms2/src/org/labkey/ms2/runSummary.jsp @@ -23,7 +23,6 @@ <%@ page import="org.labkey.api.view.JspView" %> <%@ page import="org.labkey.ms2.MS2Controller" %> <%@ page import="org.labkey.ms2.MS2Run" %> -<%@ page import="org.labkey.ms2.pipeline.mascot.MascotRun" %> <%@ page import="java.util.ArrayList" %> <%@ page import="java.util.List" %> <%@ page extends="org.labkey.api.jsp.JspBase" %> @@ -51,12 +50,6 @@ Mass Spec Type<%=h(MS2Controller.defaultIfNull(run.getMassSpecType(), "n/a"))%> Fasta File<%= h(fastas.size() > 1 ? "s" : "") %><%=h(StringUtils.join(fastas, ", "))%> - <% if (run instanceof MascotRun) { %> - - Mascot File<%=h(MS2Controller.defaultIfNull(((MascotRun)run).getMascotFile(), "n/a"))%> - Distiller Raw File<%=h(MS2Controller.defaultIfNull(((MascotRun)run).getDistillerRawFile(), "n/a"))%> - - <% } %> <% diff --git a/ms2/src/org/labkey/ms2/showPeptide.jsp b/ms2/src/org/labkey/ms2/showPeptide.jsp index 7bbbaee9cc..aea9360d92 100644 --- a/ms2/src/org/labkey/ms2/showPeptide.jsp +++ b/ms2/src/org/labkey/ms2/showPeptide.jsp @@ -26,7 +26,6 @@ <%@ page import="org.labkey.ms2.MS2GZFileRenderer" %> <%@ page import="org.labkey.ms2.MS2Manager" %> <%@ page import="org.labkey.ms2.MS2Peptide" %> -<%@ page import="org.labkey.ms2.MS2RunType" %> <%@ page import="org.labkey.ms2.ShowPeptideContext" %> <%@ page import="org.labkey.ms2.reader.LibraQuantResult" %> <%@ page import="java.util.ArrayList" %> @@ -119,15 +118,6 @@ <%= h(run.getRunType().getScoreColumnList().get(2)) %><%= h(p.getZScore() == null ? "" : Formats.f3.format(p.getZScore())) %> <% } %> - <% if (MS2RunType.Mascot.equals(run.getRunType())) { %> - - Query Number<%=h(p.getQueryNumber())%> - Hit Rank<%= p.getHitRank() %> - - - Is Decoy<%= p.isDecoy() %> - - <% } %> <% diff --git a/ms2/src/org/labkey/ms2/testMascot.jsp b/ms2/src/org/labkey/ms2/testMascot.jsp deleted file mode 100644 index dbf069f997..0000000000 --- a/ms2/src/org/labkey/ms2/testMascot.jsp +++ /dev/null @@ -1,66 +0,0 @@ -<% -/* - * Copyright (c) 2008-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -%> -<%@ page import="org.apache.commons.lang3.StringUtils"%> -<%@ page import="org.labkey.api.view.HttpView" %> -<%@ page import="org.labkey.api.view.JspView" %> -<%@ page import="org.labkey.ms2.MS2Controller.TestMascotForm" %> -<%@ page extends="org.labkey.api.jsp.JspBase" %> -<% - JspView view = HttpView.currentView(); - TestMascotForm form = view.getModelBean(); - - if (!StringUtils.isBlank(form.getMessage())) - { - boolean errorMessage = form.getMessage().contains("Test failed."); - - if (errorMessage) { %><% } %> - <%= h(form.getMessage())%> - <% if (errorMessage) { %><% } - } -%> - -
Mascot settings tested
- - - - - -<% -if (!StringUtils.isBlank(form.getParameters())) { %> - - -<% } %> -
Server<%= h(StringUtils.defaultIfBlank(form.getMascotServer(), "")) %>
User account<%= h(StringUtils.defaultIfBlank(form.getMascotUserAccount(), "")) %>
Password<%= h(StringUtils.defaultIfBlank(form.getMascotUserPassword(), "")) %>
HTTP Proxy URL<%= h(StringUtils.defaultIfBlank(form.getMascotHTTPProxy(), "")) %>

Your Mascot Server Configurations
Mascot.dat<%=h(form.getParameters())%>
- -<% -if (0 != form.getStatus()) -{ -%> -
-If you're unfamiliar with your organization's Mascot services configuration you should consult with your Mascot administrator. - -
    -
  • Server is typically of the form mascot.server.org
  • -
  • User account is the userid for logging in to your Mascot server. It is mandatory if Mascot security is enabled.
  • -
  • Password is the pass phrase to authenticate you to your Mascot server. It is mandatory if Mascot security is enabled.
  • -
  • HTTP Proxy URL is typically of the form http://proxyservername.domain.org:8080/ to make HTTP requests on your behalf if necessary.
  • -
  • <%=helpLink("configMascot", "More information...")%>
  • -
-<% -} -%> diff --git a/ms2/test/sampledata/xarfiles/ms2pipe/.labkey/protocols/mascot/test1.xml b/ms2/test/sampledata/xarfiles/ms2pipe/.labkey/protocols/mascot/test1.xml deleted file mode 100644 index c2847cc2b2..0000000000 --- a/ms2/test/sampledata/xarfiles/ms2pipe/.labkey/protocols/mascot/test1.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - test1 - This is a test protocol using Mascot defaults. - Bovine_mini.fasta - diff --git a/ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test1/CAexample_mini.pep.xml b/ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test1/CAexample_mini.pep.xml deleted file mode 100644 index c7374478e0..0000000000 --- a/ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test1/CAexample_mini.pep.xml +++ /dev/null @@ -1,1546 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test1/CAexample_mini.prot.xml b/ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test1/CAexample_mini.prot.xml deleted file mode 100644 index 86508b50fa..0000000000 --- a/ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test1/CAexample_mini.prot.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test1/CAexample_mini.search.xar.xml b/ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test1/CAexample_mini.search.xar.xml deleted file mode 100644 index 64f582dc88..0000000000 --- a/ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test1/CAexample_mini.search.xar.xml +++ /dev/null @@ -1,238 +0,0 @@ - - - - Default Experiment - - - - - Convert To Mgf - ProtocolApplication - 0 - - 0 - 1 - - - - - - - - - - - Mascot analysis - ProtocolApplication - 0 - 1 - 0 - 1 - - - - - - - - - - - Convert To PepXml - ProtocolApplication - 0 - 1 - 0 - 1 - - - - - - - - - - - Run Peptide Prophet using XInteract - ProtocolApplication - 0 - - 0 - 1 - - - - - - - - - - - Run Protein Prophet using XInteract - ProtocolApplication - 0 - 1 - 0 - 1 - - - - - - - - - - - Mascot Analysis - Use Mascot to search for peptides in one mzXml file - ExperimentRun - - - - - - ${RunLSIDBase}:MS2.MascotAnalysis - Mascot analysis run - - - mascot - - - - Mark Run Outputs - - ExperimentRunOutput - - - 0 - 0 - - ${RunLSIDBase}:MarkOutput - Run Output - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CAexample_mini.mzXML - Data - ..\..\CAexample_mini.mzXML - - - - Mascot Settings - Data - mascot.xml - - - Bovine_mini.fasta - Data - ..\..\..\databases\mascot\Bovine_mini.fasta\Bovine_mini.fasta - - - - - - bov_sample/CAexample_mini (test1) - ${FolderLSIDBase}:MS2.MascotAnalysis:3 - - - - - - - - ${AutoFileLSID} - ${AutoFileLSID} - - ${AutoFileLSID} - - - - - - - - ${RunLSIDBase}:MS2.ConvertToMgf - Convert to Mgf - ${RunLSIDBase}:MgfFile - Mgf/Mascot Search file - CAexample_mini.mgf - - - - - ${RunLSIDBase}:MS2.MascotSearch - Mascot Database Search - ${RunLSIDBase}:MascotFile - Mascot Search Results - CAexample_mini.dat - - - - - ${RunLSIDBase}:MS2.ConvertToPepXml - Convert to PepXml - ${RunLSIDBase}:PepXmlFile - PepXml/Mascot Search Results - CAexample_mini.pep.xml - - - - - ${RunLSIDBase}:MS2.XInteract.PeptideProphet - Peptide Prophet - ${RunLSIDBase}:ScoredPepXmlFile - Scored Search Results - CAexample_mini.pep.xml - - - - - ${RunLSIDBase}:MS2.XInteract.ProteinProphet - Protein Prophet - ${RunLSIDBase}:ProteinScoresFile - Protein Prophet scores - CAexample_mini.prot.xml - - - - - - - - - diff --git a/ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test1/mascot.xml b/ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test1/mascot.xml deleted file mode 100644 index 4ae6b46572..0000000000 --- a/ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test1/mascot.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - test1 - This is a test protocol using Mascot defaults. - Bovine_mini.fasta - zhihonghypy@yahoo.com - phenyx.bii.a-star.edu.sg - - diff --git a/ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test3/CAexample_mini.dat b/ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test3/CAexample_mini.dat deleted file mode 100644 index e3bb0a7788..0000000000 --- a/ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test3/CAexample_mini.dat +++ /dev/null @@ -1,2304 +0,0 @@ -MIME-Version: 1.0 (Generated by Mascot version 1.0) -Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p - ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="parameters" - -LICENSE=Licensed to: Bioinformatics Institute, #07-01 Matrix, (4502001058), (12 processors). -MP= -NM= -COM=Conversion of CAexample_mini.mzXML to mascot generic -IATOL=0 -IA2TOL=0 -IASTOL=0 -IBTOL=1 -IB2TOL=1 -IBSTOL=0 -IYTOL=1 -IY2TOL=1 -IYSTOL=0 -SEG= -SEGT= -SEGTU= -LTOL= -TOL=2.0 -TOLU=Da -ITH= -ITOL=0.8 -ITOLU=Da -PFA=1 -DB=Bovine_mini1.fasta -MODS= -MASS=Average -CLE=Trypsin -FILE=CAexample_mini.mgf -PEAK=auto -QUE= -TWO= -SEARCH=MIS -USERNAME=CPAS User -USEREMAIL=zhihonghypy@yahoo.com -CHARGE=2+ and 3+ -INTERMEDIATE= -REPORT=20 -OVERVIEW= -FORMAT=Mascot generic -FORMVER=1.01 -FRAG= -IT_MODS= -USER00= -USER01= -USER02= -USER03= -USER04= -USER05= -USER06= -USER07= -USER08= -USER09= -USER10= -USER11= -USER12= -PRECURSOR= -TAXONOMY=All entries -ACCESSION= -REPTYPE=peptide -SUBCLUSTER= -ICAT= -INSTRUMENT=Default -ERRORTOLERANT=0 -FRAMES= -CUTOUT= -USERID=1060 -RULES=1,2,5,6,8,9,13,14 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="masses" - -A=71.077900 -B=114.595000 -C=103.142900 -D=115.087400 -E=129.114000 -F=147.173900 -G=57.051300 -H=137.139300 -I=113.157600 -J=0.000000 -K=128.172300 -L=113.157600 -M=131.196100 -N=114.102600 -O=0.000000 -P=97.115200 -Q=128.129200 -R=156.185700 -S=87.077300 -T=101.103900 -U=150.037900 -V=99.131100 -W=186.209900 -X=111.000000 -Y=163.173300 -Z=128.621600 -Hydrogen=1.007940 -Carbon=12.010700 -Nitrogen=14.006700 -Oxygen=15.999400 -Electron=0.000000 -C_term=17.007340 -N_term=1.007940 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="header" - -sequences=4308 -sequences_after_tax=4311 -residues=987126 -distribution=735,9,29,63,75,90,93,89,65,71,60,44,36,35,21,23,17,15,17,10,15,8,4,5,6,2,6,1,0,1,1,1,0,2,2,1,0,1,0,0,0,0,0,0,0,0,0,1,1 -exec_time=6 -date=1163920245 -time=15:10:45 -queries=64 -max_hits=50 -version=2.1.03 -release=Bovine_mini.fasta -taskid=116392023801 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="summary" - -qmass1=605.519160 -qexp1=606.527100,1+ -qintensity1=194054.0000 -qmatch1=669 -qplughole1=24.151846 -qmass2=607.261347 -qexp2=608.269287,1+ -qintensity2=575293.0000 -qmatch2=495 -qplughole2=0.000000 -qmass3=608.924677 -qexp3=609.932617,1+ -qintensity3=288293.0000 -qmatch3=329 -qplughole3=0.000000 -qmass4=609.050410 -qexp4=610.058350,1+ -qintensity4=247745.0000 -qmatch4=329 -qplughole4=15.938901 -qmass5=618.949824 -qexp5=619.957764,1+ -qintensity5=274107.0000 -qmatch5=627 -qplughole5=18.276466 -qmass6=642.245234 -qexp6=643.253174,1+ -qintensity6=25219900.0000 -qmatch6=604 -qplughole6=19.986934 -qmass7=650.334345 -qexp7=651.342285,1+ -qintensity7=147879.0000 -qmatch7=541 -qplughole7=0.000000 -qmass8=652.491816 -qexp8=653.499756,1+ -qintensity8=38326200.0000 -qmatch8=477 -qplughole8=17.110570 -qmass9=652.545283 -qexp9=653.553223,1+ -qintensity9=268133.0000 -qmatch9=477 -qplughole9=15.441879 -qmass10=654.241328 -qexp10=655.249268,1+ -qintensity10=455778.0000 -qmatch10=455 -qplughole10=23.904417 -qmass11=661.693476 -qexp11=662.701416,1+ -qintensity11=318966.0000 -qmatch11=628 -qplughole11=18.748375 -qmass12=684.625849 -qexp12=685.633789,1+ -qintensity12=237183.0000 -qmatch12=456 -qplughole12=25.336848 -qmass13=721.501459 -qexp13=722.509399,1+ -qintensity13=204061.0000 -qmatch13=477 -qplughole13=22.806906 -qmass14=729.081538 -qexp14=730.089478,1+ -qintensity14=250591.0000 -qmatch14=718 -qplughole14=14.651793 -qmass15=751.724848 -qexp15=752.732788,1+ -qintensity15=1061730.0000 -qmatch15=374 -qplughole15=0.000000 -qmass16=754.640253 -qexp16=755.648193,1+ -qintensity16=292149.0000 -qmatch16=372 -qplughole16=16.251981 -qmass17=820.821278 -qexp17=411.418579,2+ -qintensity17=312586.0000 -qmatch17=940 -qplughole17=20.244082 -qmass18=1248.935103 -qexp18=417.319641,3+ -qintensity18=184258.0000 -qmatch18=1032 -qplughole18=18.577961 -qmass19=1265.828781 -qexp19=422.950867,3+ -qintensity19=225127.0000 -qmatch19=1012 -qplughole19=20.182741 -qmass20=1270.572678 -qexp20=424.532166,3+ -qintensity20=639800.0000 -qmatch20=949 -qplughole20=24.026323 -qmass21=1277.815779 -qexp21=426.946533,3+ -qintensity21=338383.0000 -qmatch21=815 -qplughole21=24.257188 -qmass22=1283.220870 -qexp22=428.748230,3+ -qintensity22=453665.0000 -qmatch22=808 -qplughole22=25.143704 -qmass23=1284.697065 -qexp23=429.240295,3+ -qintensity23=241101.0000 -qmatch23=908 -qplughole23=22.916408 -qmass24=856.987666 -qexp24=857.995606,1+ -qintensity24=295009.0000 -qmatch24=604 -qplughole24=0.000000 -qmass25=860.063100 -qexp25=431.039490,2+ -qintensity25=202722.0000 -qmatch25=1070 -qplughole25=23.558094 -qmass26=879.432118 -qexp26=440.723999,2+ -qintensity26=227253.0000 -qmatch26=789 -qplughole26=28.172522 -qmass27=883.476796 -qexp27=442.746338,2+ -qintensity27=477369.0000 -qmatch27=834 -qplughole27=19.232439 -qmass28=1332.002730 -qexp28=445.008850,3+ -qintensity28=571307.0000 -qmatch28=938 -qplughole28=32.691454 -qmass29=1332.331404 -qexp29=445.118408,3+ -qintensity29=451239.0000 -qmatch29=963 -qplughole29=19.363169 -qmass30=890.792231 -qexp30=891.800171,1+ -qintensity30=266185.0000 -qmatch30=614 -qplughole30=17.221982 -qmass31=1374.075423 -qexp31=459.033081,3+ -qintensity31=370841.0000 -qmatch31=953 -qplughole31=24.916938 -qmass32=923.305166 -qexp32=462.660523,2+ -qintensity32=299746.0000 -qmatch32=709 -qplughole32=24.195735 -qmass33=1386.851973 -qexp33=463.291931,3+ -qintensity33=345614.0000 -qmatch33=700 -qplughole33=19.950871 -qmass34=927.896596 -qexp34=464.956238,2+ -qintensity34=583676.0000 -qmatch34=827 -qplughole34=18.590386 -qmass35=1402.593735 -qexp35=468.539185,3+ -qintensity35=209041.0000 -qmatch35=875 -qplughole35=25.290719 -qmass36=948.718984 -qexp36=475.367432,2+ -qintensity36=5841730.0000 -qmatch36=734 -qplughole36=24.505146 -qmass37=956.109486 -qexp37=479.062683,2+ -qintensity37=2274360.0000 -qmatch37=742 -qplughole37=18.751934 -qmass38=967.656977 -qexp38=968.664917,1+ -qintensity38=258466.0000 -qmatch38=376 -qplughole38=15.306355 -qmass39=1503.970077 -qexp39=502.331299,3+ -qintensity39=238401.0000 -qmatch39=766 -qplughole39=24.461733 -qmass40=1013.346308 -qexp40=1014.354248,1+ -qintensity40=331351.0000 -qmatch40=475 -qplughole40=13.696240 -qmass41=1525.947126 -qexp41=509.656982,3+ -qintensity41=222368.0000 -qmatch41=782 -qplughole41=24.852653 -qmass42=1553.165388 -qexp42=518.729736,3+ -qintensity42=372042.0000 -qmatch42=691 -qplughole42=23.600469 -qmass43=1557.698349 -qexp43=520.240723,3+ -qintensity43=290807.0000 -qmatch43=684 -qplughole43=26.377238 -qmass44=1042.759266 -qexp44=522.387573,2+ -qintensity44=270316.0000 -qmatch44=742 -qplughole44=25.632806 -qmass45=1571.281110 -qexp45=524.768310,3+ -qintensity45=246758.0000 -qmatch45=701 -qplughole45=19.458219 -qmass46=1091.350820 -qexp46=546.683350,2+ -qintensity46=325118.0000 -qmatch46=646 -qplughole46=23.815301 -qmass47=1661.809920 -qexp47=554.944580,3+ -qintensity47=198048.0000 -qmatch47=617 -qplughole47=20.189803 -qmass48=1135.910878 -qexp48=568.963379,2+ -qintensity48=354257.0000 -qmatch48=626 -qplughole48=23.414880 -qmass49=1728.606795 -qexp49=577.210205,3+ -qintensity49=26745400.0000 -qmatch49=722 -qplughole49=19.992220 -qmass50=1198.937490 -qexp50=600.476685,2+ -qintensity50=439170.0000 -qmatch50=609 -qplughole50=20.692527 -qmass51=1212.988398 -qexp51=1213.996338,1+ -qintensity51=347698.0000 -qmatch51=356 -qplughole51=14.665468 -qmass52=1835.345199 -qexp52=612.789673,3+ -qintensity52=206651.0000 -qmatch52=552 -qplughole52=26.041118 -qmass53=1905.093735 -qexp53=636.039185,3+ -qintensity53=213008.0000 -qmatch53=569 -qplughole53=20.855515 -qmass54=1323.455439 -qexp54=1324.463379,1+ -qintensity54=314414.0000 -qmatch54=296 -qplughole54=16.718435 -qmass55=1354.687734 -qexp55=678.351807,2+ -qintensity55=459779.0000 -qmatch55=503 -qplughole55=17.377731 -qmass56=1406.654286 -qexp56=704.335083,2+ -qintensity56=263315.0000 -qmatch56=504 -qplughole56=17.555233 -qmass57=2218.458969 -qexp57=740.494263,3+ -qintensity57=255501.0000 -qmatch57=407 -qplughole57=15.757351 -qmass58=2357.071638 -qexp58=786.698486,3+ -qintensity58=3753150.0000 -qmatch58=383 -qplughole58=19.131143 -qmass59=1730.000722 -qexp59=866.008301,2+ -qintensity59=251506.0000 -qmatch59=350 -qplughole59=24.763329 -qmass60=1753.515498 -qexp60=1754.523438,1+ -qintensity60=392307.0000 -qmatch60=283 -qplughole60=0.000000 -qmass61=1843.191396 -qexp61=922.603638,2+ -qintensity61=493234.0000 -qmatch61=273 -qplughole61=17.952409 -qmass62=3353.007918 -qexp62=1118.677246,3+ -qintensity62=403456.0000 -qmatch62=184 -qplughole62=19.645449 -qmass63=2294.374746 -qexp63=1148.195313,2+ -qintensity63=283174.0000 -qmatch63=174 -qplughole63=19.441076 -qmass64=2651.797596 -qexp64=1326.906738,2+ -qintensity64=360754.0000 -qmatch64=123 -qplughole64=18.416192 -num_hits=0 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="peptides" - -q1_p1=0,605.641861,-0.122701,4,SASVSR,10,00000000,15.51,00020020000000000,0,0;"gi|15599453|30S_ribosomal_pro":0:49:54:2 -q1_p1_terms=K,I -q1_p2=1,603.669067,1.850093,2,RSDVK,4,0000000,10.40,00000020000000000,0,0;"gi|15642589|ribosomal_protein":0:77:81:1,"gi|28897033|ribosomal_protein":0:77:81:1 -q1_p2_terms=R,K:R,K -q1_p3=0,604.741455,0.777705,2,VIFAR,7,0000000,6.98,00000020000000000,0,0;"gi|30019716|Xanthine_phosphor":0:76:80:1 -q1_p3_terms=K,K -q1_p4=0,605.709549,-0.190389,2,CAAWR,10,0000000,4.25,00020000000000000,0,0;"gi|27693369|similar_to_riboso":0:86:90:1 -q1_p4_terms=R,R -q1_p5=1,604.657059,0.862101,2,SGKSAR,10,00000000,3.47,00000020000000000,0,0;"gi|17545655|PROBABLE_50S_RIBO":0:108:113:1,"gi|28899304|ribosomal_protein":0:104:109:1 -q1_p5_terms=R,I:R,I -q2_p1=-1 -q3_p1=-1 -q4_p1=1,610.666458,-1.616048,2,RGGGHK,8,00000000,2.94,00000020000000000,0,0;"gi|11036695|putative_L2_ribos":0:54:59:1,"gi|1685374|ribosomal_protein_":0:55:60:2 -q4_p1_terms=R,K:R,R -q5_p1=0,617.801437,1.148387,2,IAACLK,4,00000000,13.72,00000020000000000,0,0;"gi|13541175|50S_ribosomal_pro":0:108:113:1 -q5_p1_terms=R,G -q5_p2=1,617.804855,1.144969,2,IAMRK,4,0000000,13.42,00000020000000000,0,0;"gi|11878280|AF321497_1_phosph":0:540:544:2 -q5_p2_terms=R,A -q5_p3=0,617.652451,1.297373,2,IASDGR,4,00000000,13.42,00000020000000000,0,0;"gi|20543864|similar_to_riboso":0:57:62:2,"gi|12314263|bA486O22.3_(simil":0:57:62:2 -q5_p3_terms=K,V:K,V -q5_p4=0,617.735352,1.214472,2,IASVTK,4,00000000,13.42,00000020000000000,0,0;"gi|28493679|50S_ribosomal_pro":0:133:138:1 -q5_p4_terms=K,G -q5_p5=0,618.746445,0.203379,2,NACLAK,4,00000000,13.42,00000020000000000,0,0;"gi|32699630|RR8_CHLRE_Chlorop":0:20:25:1 -q5_p5_terms=R,K -q5_p6=0,618.680252,0.269572,2,NASSIK,4,00000000,13.42,00000020000000000,0,0;"gi|23112787|COG1670:_Acetyltr":0:42:47:1 -q5_p6_terms=R,V -q5_p7=0,618.677048,0.272776,2,ITEEK,12,0000000,4.61,00000020000000000,0,0;"gi|20825485|similar_to_riboso":0:69:73:1 -q5_p7_terms=R,H -q5_p8=0,618.680344,0.269480,2,LTETR,12,0000000,4.61,00000020000000000,0,0;"gi|2864701|MHC_class_I_heavy_":0:1:5:1 -q5_p8_terms=-,A -q5_p9=0,619.622055,-0.672231,2,NTEEK,12,0000000,3.59,00000020000000000,0,0;"gi|6321315|Homology_to_rat_S2":0:29:33:1 -q5_p9_terms=R,G -q5_p10=0,620.780655,-1.830831,3,VIVYK,19,0000000,3.02,00000020000000000,0,0;"gi|16330952|50S_ribosomal_pro":0:73:77:1 -q5_p10_terms=K,M -q6_p1=0,640.709061,1.536173,2,CFSER,5,0000000,7.48,20000000000000000,0,0;"gi|7657526|ribosomal_protein_":0:514:518:1 -q6_p1_terms=K,E -q6_p2=0,640.689148,1.556086,2,HLTDR,5,0000000,7.48,20000000000000000,0,0;"gi|22947834|borf-1":0:122:126:1 -q6_p2_terms=R,C -q6_p3=0,640.649353,1.595881,2,SNQHR,10,0000000,6.53,00000020000000000,0,0;"gi|730557|RL34_PEA_60S_RIBOSO":0:17:21:1 -q6_p3_terms=K,V -q6_p4=0,641.717072,0.528162,2,VSPSXR,15,00000000,6.09,00000020000000000,0,0;"gi|998744|ribosomal_protein_L":0:7:12:2 -q6_p4_terms=K,N -q6_p4_subst=5,X,P -q6_p5=1,641.677261,0.567973,2,DSRHK,10,0000000,5.87,00000020000000000,0,0;"gi|32418134|hypothetical_prot":0:6:10:1 -q6_p5_terms=R,R -q6_p6=1,641.720352,0.524882,2,TTRHK,10,0000000,5.87,00000020000000000,0,0;"gi|3822557|oxytocin_receptor":0:66:70:1 -q6_p6_terms=R,H -q6_p7=0,641.716949,0.528285,3,AGELPR,40,00000000,4.09,00000020000000000,0,0;"gi|15612711|30S_ribosomal_pro":0:91:96:1 -q6_p7_terms=K,V -q6_p8=0,640.732147,1.513087,2,LAQGPR,15,00000000,2.12,00000020000000000,0,0;"gi|29837764|putative_ribosoma":0:181:186:1 -q6_p8_terms=R,E -q6_p9=0,640.732269,1.512965,2,GKPSPR,15,00000000,2.09,00000020000000000,0,0;"gi|23119515|COG1020:_Non-ribo":0:1:6:1 -q6_p9_terms=-,V -q6_p10=1,641.763367,0.481867,2,GKRPGK,20,00000000,1.93,00000020000000000,0,0;"gi|166869|ribosomal_protein_S":0:25:30:1 -q6_p10_terms=K,G -q7_p1=-1 -q8_p1=0,652.825760,-0.333944,2,KPLAPK,10,00000000,4.46,00020000000000000,0,0;"gi|30148903|similar_to_60S_ri":0:110:115:1 -q8_p1_terms=R,K -q8_p2=0,652.736343,-0.244527,4,YTEIK,25,0000000,4.37,00020020000000000,0,0;"gi|15793002|50S_ribosomal_pro":0:3:7:1 -q8_p2_terms=K,D -q8_p3=0,652.736343,-0.244527,4,YTELK,25,0000000,4.37,00020020000000000,0,0;"gi|15645924|ribosomal_protein":0:3:7:1,"gi|15612296|50S_RIBOSOMAL_PRO":0:3:7:1 -q8_p3_terms=K,D:K,D -q8_p4=1,652.785950,-0.294134,3,KLHQK,36,0000000,3.83,00020000000000000,0,0;"gi|27806859|limbin":0:566:570:2 -q8_p4_terms=K,L -q8_p5=1,652.825760,-0.333944,2,IPPKAK,10,00000000,3.60,00020000000000000,0,0;"gi|404015|ribosomal_protein_L":0:1:6:1 -q8_p5_terms=-,K -q8_p6=0,652.696564,-0.204748,2,GTFSNK,25,00000000,2.15,20010000000000000,0,0;"gi|28526981|similar_to_60S_RI":0:77:82:1 -q8_p6_terms=K,Y -q8_p7=1,652.739655,-0.247839,2,KYTNK,25,0000000,2.15,20010000000000000,0,0;"gi|32400989|40S_ribosome_prot":0:11:15:2 -q8_p7_terms=K,K -q8_p8=0,652.762772,-0.270956,2,MNFNK,25,0000000,2.15,20010000000000000,0,0;"gi|15924055|phosphoribosylami":0:1:5:1 -q8_p8_terms=-,L -q8_p9=0,651.754852,0.736964,2,THGIPK,10,00000000,2.11,20000000000000000,0,0;"gi|34557671|FUSION_PENICILLIN":0:69:74:1 -q8_p9_terms=R,D -q8_p10=1,652.746246,-0.254430,2,ARHAAK,25,00000000,1.75,00020000000000000,0,0;"gi|15803493|putative_ribosoma":0:54:59:1,"gi|24114209|putative_ribosoma":0:54:59:1 -q8_p10_terms=K,V:K,V -q9_p1=0,653.731064,-1.185781,2,RPEPR,4,0000000,8.55,00000020000000000,0,0;"gi|30794364|diazepam_binding_":0:212:216:1 -q9_p1_terms=K,D -q9_p2=0,651.711868,0.833415,2,VPGHDK,16,00000000,2.03,00000020000000000,0,0;"gi|27807269|tenascin_X":0:2299:2304:1 -q9_p2_terms=R,G -q10_p1=0,654.800171,-0.558843,2,KPWPK,5,0000000,12.67,00020000000000000,0,0;"gi|16126453|hypoxanthine-guan":0:133:137:1 -q10_p1_terms=R,D -q10_p2=0,652.742950,1.498378,2,IEHVR,5,0000000,12.52,00000020000000000,0,0;"gi|23480613|Ribosomal_protein":0:94:98:1 -q10_p2_terms=R,K -q10_p3=0,652.825760,1.415568,3,KPLAPK,20,00000000,12.19,00000020000000000,0,0;"gi|30148903|similar_to_60S_ri":0:110:115:1 -q10_p3_terms=R,K -q10_p4=0,654.672760,-0.431432,2,DEVHR,5,0000000,10.18,00000020000000000,0,0;"gi|6094194|RS7_THICU_30S_ribo":0:139:143:1 -q10_p4_terms=R,M -q10_p5=1,655.746857,-1.505529,3,KNAPAR,29,00000000,8.07,00020000000000000,0,0;"gi|8953449|40S_ribosomal_prot":0:261:266:1 -q10_p5_terms=R,G -q10_p6=0,654.755554,-0.514226,3,TAAPPAK,25,000000000,7.81,00000020000000000,0,0;"gi|12407954|AF316149_1_riboso":0:301:307:4,"gi|12407954|AF316149_1_riboso":0:315:321:4,"gi|12407954|AF316149_1_riboso":0:322:328:4 -q10_p6_terms=K,A:K,T:K,A -q10_p7=0,654.666153,-0.424825,3,EDYTK,25,0000000,7.09,00000020000000000,0,0;"gi|23509806|ribosomal_protein":0:41:45:2 -q10_p7_terms=R,Y -q10_p8=0,654.755569,-0.514241,3,GGTPVPK,32,000000000,6.32,00000020000000000,0,0;"gi|18312189|ribosomal_protein":0:211:217:1 -q10_p8_terms=K,T -q10_p9=1,655.786560,-1.545232,4,NKIGPK,15,00000000,3.30,00020020000000000,0,0;"gi|17136324|Ribosomal_protein":0:198:203:1 -q10_p9_terms=K,K -q10_p10=0,655.829529,-1.588201,2,LLLAAR,10,00000000,2.74,00020000000000000,0,0;"gi|27683067|similar_to_40kDa_":0:25:30:1,"gi|30149544|similar_to_40S_ri":0:58:63:1,"gi|1173296|RSP4_ECHGR_40S_RIB":0:58:63:1,"gi|1710781|RSP4_CHICK_40S_RIB":0:58:63:1,"gi|29742843|similar_to_40S_ri":0:58:63:1,"gi|13642851|similar_to_40S_ri":0:58:63:1 -q10_p10_terms=K,A:K,A:K,A:K,A:K,A:K,A -q11_p1=0,660.716949,0.976527,4,LNDTAK,16,00000000,9.01,20000020000000000,0,0;"gi|29347323|nicotinate_phosph":0:182:187:1 -q11_p1_terms=R,Y -q11_p2=0,659.815048,1.878428,2,ILVTSK,4,00000000,5.32,20000000000000000,0,0;"gi|27806695|cystic_fibrosis_t":0:600:605:2 -q11_p2_terms=R,M -q11_p3=1,660.763458,0.930018,3,KVTTGR,28,00000000,4.53,00000020000000000,0,0;"gi|13541159|30S_ribosomal_pro":0:21:26:1 -q11_p3_terms=R,A -q11_p4=1,660.763458,0.930018,2,KTSVAR,12,00000000,3.78,00020000000000000,0,0;"gi|33241134|Ribosomal_protein":0:18:23:1,"gi|34765017|SSU_ribosomal_pro":0:15:20:1 -q11_p4_terms=R,V:R,V -q11_p5=1,660.760162,0.933314,2,TPKTSK,4,00000000,2.68,20000000000000000,0,0;"gi|15891731|AGR_L_3222p":0:15:20:1 -q11_p5_terms=K,D -q11_p6=0,660.677246,1.016230,2,ATENAR,12,00000000,2.18,00020000000000000,0,0;"gi|29653607|ribosomal_protein":0:65:70:1 -q11_p6_terms=K,R -q11_p7=1,660.789856,0.903620,2,GCVRAR,12,00000000,2.18,00020000000000000,0,0;"gi|18312189|ribosomal_protein":0:236:241:1 -q11_p7_terms=R,A -q11_p8=1,660.723648,0.969828,2,GRTTAR,12,00000000,2.18,00020000000000000,0,0;"gi|23119681|COG0047:_Phosphor":0:513:518:1 -q11_p8_terms=R,L -q11_p9=0,660.720245,0.973231,2,ISTNAR,12,00000000,2.18,00020000000000000,0,0;"gi|20178384|CPXV016_protein":0:28:33:1 -q11_p9_terms=R,I -q11_p10=1,660.720352,0.973124,2,KSEAAR,12,00000000,2.18,00020000000000000,0,0;"gi|16079595|ribosomal_protein":0:48:53:2 -q11_p10_terms=K,K -q12_p1=0,684.695358,-0.069509,4,GTPAAGDP,8,0000000000,23.26,00000020000000000,0,0;"gi|5002198|AF143203_1_interle":0:371:378:2 -q12_p1_terms=K,- -q12_p2=0,683.796646,0.829203,3,GAQAPLK,8,000000000,11.22,00000020000000000,0,0;"gi|27711016|similar_to_60S_RI":0:107:113:1 -q12_p2_terms=K,G -q12_p3=1,684.910767,-0.284918,2,VVKVLK,4,00000000,5.39,00000020000000000,0,0;"gi|1173033|RL34_AEDAL_60S_rib":0:100:105:2 -q12_p3_terms=K,A -q13_p1=0,720.768951,0.732508,3,SIEGSTK,8,000000000,15.26,00000020000000000,0,0;"gi|21493019|NADH_dehydrogenas":0:52:58:1 -q13_p1_terms=R,Y -q13_p2=0,721.713959,-0.212500,2,SDSAQSK,8,000000000,8.89,00000020000000000,0,0;"gi|2136775|I45939_MHC_cell_su":0:187:193:1,"gi|21668459|MHC_class_II_anti":0:3:9:1 -q13_p2_terms=R,M:R,M -q13_p3=0,720.795349,0.706110,2,QLSDCR,8,00000000,8.78,00000020000000000,0,0;"gi|4454113|A-type_inclusion_p":0:143:148:1 -q13_p3_terms=R,R -q13_p4=0,720.838455,0.663004,2,ISXGCVR,8,000000000,6.09,00000020000000000,0,0;"gi|23477330|ribosomal_protein":0:24:30:1 -q13_p4_terms=K,X -q13_p4_subst=3,X,S -q13_p5=0,720.856552,0.644907,2,SLNIFK,8,00000000,5.47,00000020000000000,0,0;"gi|23481646|Ribosomal_protein":0:62:67:1 -q13_p5_terms=K,E -q13_p6=1,720.899765,0.601694,2,SLVFKK,8,00000000,5.47,00000020000000000,0,0;"gi|13812014|60S_acidic_riboso":0:10:15:1 -q13_p6_terms=K,F -q13_p7=1,722.793045,-1.291586,2,RTYAGR,8,00000000,4.99,20000000000000000,0,0;"gi|1006629|UL6_protein":0:155:160:1,"gi|9629869|UL6":0:681:686:3 -q13_p7_terms=R,A:R,A -q13_p8=1,719.827255,1.674204,2,SLKSSAK,8,000000000,4.10,00000020000000000,0,0;"gi|33152032|deoxyribose-phosp":0:2:8:1 -q13_p8_terms=M,V -q13_p9=0,722.768265,-1.266806,2,MDSAGSR,8,000000000,1.99,20000000000000000,0,0;"gi|29841159|similar_to_GenBan":0:1:7:1 -q13_p9_terms=-,G -q13_p10=1,721.823273,-0.321814,2,SNMKDK,8,00000000,1.38,00000020000000000,0,0;"gi|13541309|NMD_protein_(ribo":0:101:106:2 -q13_p10_terms=R,I -q14_p1=1,729.785660,-0.704122,2,RTGSPGR,5,000000000,5.18,00020000000000000,0,0;"gi|27677506|similar_to_riboso":0:78:84:2 -q14_p1_terms=K,R -q14_p2=0,729.822159,-0.740621,2,VDAAVAGK,5,0000000000,1.42,20000000000000000,0,0;"gi|33594755|30S_ribosomal_pro":0:19:26:2 -q14_p2_terms=K,D -q15_p1=-1 -q16_p1=1,754.795059,-0.154806,2,HGNSGRK,5,000000000,3.25,00000020000000000,0,0;"gi|15889217|AGR_C_3516p":0:3:9:1 -q16_p1_terms=R,L -q17_p1=0,820.801956,0.019322,5,GGNEESTK,25,0000000000,9.81,00020020000000000,0,0;"gi|442754|A_Chain_A,_Superoxi":0:127:134:1 -q17_p1_terms=R,T -q17_p2=0,818.999649,1.821629,6,LLYPVSK,38,000000000,9.31,00000210200000000,0,0;"gi|27807041|phosphoinositide-":0:417:423:2 -q17_p2_terms=R,Y -q17_p3=0,819.900055,0.921223,3,IDVTGTSK,13,0000000000,9.23,00000020000000000,0,0;"gi|23097574|50S_ribosomal_pro":0:108:115:1 -q17_p3_terms=K,G -q17_p4=0,820.009247,0.812031,5,SQIMITK,25,000000000,6.65,00220000000000000,0,0;"gi|28194743|AF480988_1_riboso":0:139:145:1,"gi|28194713|AF480973_1_riboso":0:133:139:1 -q17_p4_terms=K,N:K,N -q17_p5=0,819.966248,0.855030,4,AATDALMK,41,0000000000,4.19,00020000000000000,0,0;"gi|6323666|Mitochondrial_ribo":0:362:369:2 -q17_p5_terms=R,W -q17_p6=1,819.987534,0.833744,3,IINIKGY,31,000000000,3.34,00000020000000000,0,0;"gi|32423698|ribosomal_protein":0:99:105:1 -q17_p6_terms=K,- -q17_p7=0,819.926453,0.894825,3,LGGAEMSR,25,0000000000,3.13,00000020100000000,0,0;"gi|15639188|ribosomal_protein":0:159:166:1 -q17_p7_terms=R,T -q17_p8=1,819.813965,1.007313,3,KAEDDDK,31,000000000,2.95,00020000000000000,0,0;"gi|2369710|hypothetical_prote":0:90:96:1 -q17_p8_terms=R,A -q17_p9=1,818.832458,1.988820,4,DEGKGASR,19,0000000000,0.80,20000200000000000,0,0;"gi|15839232|50S_ribosomal_pro":0:13:20:1 -q17_p9_terms=K,R -q18_p1=0,1247.338852,1.596251,2,VVACQSNNEGAR,3,00000000000000,10.35,00020000000000000,0,0;"gi|21244404|ribosomal_RNA_sma":0:112:123:1 -q18_p1_terms=R,S -q18_p2=1,1247.426529,1.508574,2,LRXHYGITER,3,000000000000,4.96,00020000000000000,0,0;"gi|29422369|small_ribosomal_p":0:33:42:1,"gi|12330514|ribosomal_protein":0:42:51:1 -q18_p2_terms=K,Q:K,Q -q18_p2_subst=3,X,C -q18_p3=1,1248.434662,0.500441,5,HGISVPRVVER,17,0000000000000,4.86,00000020200000000,0,0;"gi|125470|KKA9_STRRI_Aminogly":0:65:75:1 -q18_p3_terms=R,G -q18_p4=1,1250.448746,-1.513643,2,ARNVVYPLYR,3,000000000000,4.60,00000200000000000,0,0;"gi|903323|ribosomal_protein_L":0:2:11:1 -q18_p4_terms=M,L -q18_p5=1,1249.462234,-0.527131,5,RINVQIEHIK,21,000000000000,4.03,00000200200000000,0,0;"gi|20866171|similar_to_60S_ri":0:84:93:1 -q18_p5_terms=K,H -q18_p6=1,1249.394547,-0.459444,6,TQAEEMLSGKR,15,0000000000000,3.17,10200200200000000,0,0;"gi|27807041|phosphoinositide-":0:626:636:1 -q18_p6_terms=R,D -q18_p7=1,1248.428055,0.507048,6,AKPSAAKGEYVK,17,00000000000000,2.86,20000200200000000,0,0;"gi|17987029|LSU_ribosomal_pro":0:199:210:1 -q18_p7_terms=K,R -q18_p8=1,1248.470840,0.464263,4,GYVILISGKNGK,19,00000000000000,1.76,00020200000000000,0,0;"gi|20859043|similar_to_riboso":0:336:347:1 -q18_p8_terms=K,K -q18_p9=1,1250.553070,-1.617967,4,VLGPKGLMPNPK,15,00000000000000,0.88,00200000200000000,0,0;"gi|16077171|ribosomal_protein":0:130:141:1,"gi|15896395|Ribosomal_protein":0:128:139:3 -q18_p9_terms=R,T:R,S -q18_p10=1,1249.286743,-0.351640,4,ALGHGDGKSASSY,17,000000000000000,0.55,00200020000000000,0,0;"gi|24636803|DEOC_SALTY_Deoxyr":0:247:259:1 -q18_p10_terms=K,- -q19_p1=1,1267.474152,-1.645371,6,HVSGKIIGFFY,24,0000000000000,7.61,00020000200000000,0,0;"gi|32411611|40S_RIBOSOMAL_PRO":0:120:130:1 -q19_p1_terms=K,- -q19_p2=1,1266.511047,-0.682266,4,IRWVTCYTPK,18,000000000000,7.21,00200200000000000,0,0;"gi|22550349|ribosomal_protein":0:68:77:1 -q19_p2_terms=R,E -q19_p3=0,1267.427841,-1.599060,3,QSLPPGLNVTEL,12,00000000000000,6.02,00000200000000000,0,0;"gi|27497793|60S_ribosomal_pro":0:58:69:1 -q19_p3_terms=K,- -q19_p4=0,1266.466141,-0.637360,4,LINNSNCFTLK,22,0000000000000,5.81,00200200000000000,0,0;"gi|13812230|putative_ribosome":0:74:84:1 -q19_p4_terms=K,K -q19_p5=1,1266.654907,-0.826126,3,LKIAILEILIK,18,0000000000000,5.11,20000000000000000,0,0;"gi|12045018|ribosomal_protein":0:39:49:1 -q19_p5_terms=K,E -q19_p6=1,1266.449753,-0.620972,7,VRDPGNLGAVIR,22,00000000000000,3.18,20200200000000000,0,0;"gi|17988081|23S_ribosomal_RNA":0:151:162:1 -q19_p6_terms=R,T -q19_p7=0,1265.415466,0.413315,2,APAPAGSPVVNTGK,9,0000000000000000,2.79,00000000200000000,0,0;"gi|9631846|similar_to_bovine_":0:561:574:1 -q19_p7_terms=K,V -q19_p8=1,1264.381058,1.447723,2,AAFSXDKVDIVA,9,00000000000000,2.69,00000000200000000,0,0;"gi|257764|nitric_oxide-enhanc":0:18:29:2 -q19_p8_terms=R,- -q19_p8_subst=5,X,E -q19_p9=0,1265.088638,0.740143,2,AVIXXQQNQQD,9,0000000000000,2.69,00000000200000000,0,0;"gi|408962|ribosomal_protein_A":0:10:20:1 -q19_p9_terms=K,- -q19_p10=0,1265.329132,0.499649,3,DGNGYISAAELR,26,00000000000000,2.16,00000000200000000,0,0;"gi|71662|MCBO_calmodulin":0:95:106:1 -q19_p10_terms=K,H -q20_p1=1,1271.421555,-0.848877,3,VEHLDKDLFR,6,000000000000,15.10,00200000000000000,0,0;"gi|23335713|hypothetical_prot":0:211:220:1 -q20_p1_terms=K,R -q20_p2=0,1271.634918,-1.062240,7,CGAILAILGLCPK,25,000000000000000,8.98,00200020200000000,0,0;"gi|29743876|similar_to_60S_ri":0:22:34:1 -q20_p2_terms=K,K -q20_p3=1,1269.529831,1.042847,6,GIVIEKIGIEAK,22,00000000000000,8.97,00200220000000000,0,0;"gi|13812373|40S_ribosomal_pro":0:51:62:1 -q20_p3_terms=K,Q -q20_p4=1,1269.529831,1.042847,6,GIVLEKIGIEAK,22,00000000000000,8.97,00200220000000000,0,0;"gi|20805266|40S_ribosomal_pro":0:48:59:1 -q20_p4_terms=K,Q -q20_p5=1,1270.433548,0.139130,4,AGKTTDVYFIR,19,0000000000000,7.22,00000020200000000,0,0;"gi|14521924|Nicotinate_phosph":0:14:24:1 -q20_p5_terms=K,T -q20_p6=1,1270.478241,0.094437,6,VASVRLAIDQAK,22,00000000000000,6.08,20000220000000000,0,0;"gi|15899995|phosphoribosylami":0:440:451:1 -q20_p6_terms=R,D -q20_p7=0,1272.470947,-1.898269,4,MSEPELQLVAR,22,0000000000000,5.88,00000220000000000,0,0;"gi|1351962|APT_STOLO_Adenine_":0:1:11:1 -q20_p7_terms=-,R -q20_p8=1,1271.340240,-0.767562,6,GNNRLELEGNR,19,0000000000000,5.53,00200020200000000,0,0;"gi|29741522|similar_to_riboso":0:68:78:1 -q20_p8_terms=R,D -q20_p9=1,1269.559647,1.013031,3,ILTRNVMGPIR,19,0000000000000,4.83,00020000000000000,0,0;"gi|15678284|ribosomal_protein":0:38:48:1 -q20_p9_terms=R,E -q20_p10=0,1270.433350,0.139328,2,IPNHLFLDSSK,6,0000000000000,4.25,00200000000000000,0,0;"gi|11878067|small_ribosomal_p":0:156:166:1 -q20_p10_terms=K,G -q21_p1=1,1278.526749,-0.710970,8,LHRIEAGVMPR,21,0000000000000,16.34,00120020200000000,0,0;"gi|16078254|similar_to_riboso":0:127:137:1 -q21_p1_terms=K,N -q21_p2=0,1277.512146,0.303633,7,VIIVPGDLAQPR,24,00000000000000,9.96,00120220000000000,0,0;"gi|23118031|COG1020:_Non-ribo":0:256:267:1 -q21_p2_terms=R,L -q21_p3=1,1277.639862,0.175917,5,TVAMMILSGKVK,18,00000000000000,7.56,00220100000000000,0,0;"gi|24213644|ribosome_binding_":0:16:27:1 -q21_p3_terms=R,D -q21_p4=1,1278.546646,-0.730867,2,RPVLPITQRAK,3,0000000000000,6.41,00000000200000000,0,0;"gi|2500358|RL13_SCHMA_60S_RIB":0:151:161:1 -q21_p4_terms=R,R -q21_p5=1,1276.396545,1.419234,2,SLNSAGFYYRV,3,0000000000000,6.41,00200000000000000,0,0;"gi|320046|VGXR49_glycoprotein":0:316:326:1 -q21_p5_terms=R,- -q21_p6=1,1279.485138,-1.669359,6,TLYTQRAVVTK,27,0000000000000,5.35,00200000200000000,0,0;"gi|15836810|phosphoribosylami":0:103:113:1 -q21_p6_terms=K,K -q21_p7=1,1278.502167,-0.686388,3,AREVVDAMTMR,29,0000000000000,5.03,00000020000000000,0,0;"gi|28379204|pyrimidine_operon":0:2:12:1 -q21_p7_terms=M,R -q21_p8=1,1277.421463,0.394316,5,TTPSDKTTVTVK,24,00000000000000,4.76,20000200000000000,0,0;"gi|34849400|ribosomal_protein":0:218:229:1 -q21_p8_terms=K,S -q21_p9=1,1278.346375,-0.530596,5,DSDLPSDMRDK,21,0000000000000,3.74,20200000000000000,0,0;"gi|134068|RT14_VICFA_Mitochon":0:32:42:1 -q21_p9_terms=K,L -q21_p10=1,1277.467438,0.348341,4,YFLISTSKYR,21,000000000000,2.90,00000200000000000,0,0;"gi|7524688|ribosomal_protein_":0:57:66:1 -q21_p10_terms=K,R -q22_p1=1,1283.538269,-0.317399,5,MDIGAVKFGAFK,24,00000000000000,12.62,10020200000000000,0,0;"gi|18313949|orotate_phosphori":0:1:12:1 -q22_p1_terms=-,L -q22_p2=1,1284.528168,-1.307298,7,RMEVGAVVGAAPK,26,000000000000000,11.36,00200220100000000,0,0;"gi|15894932|bifunctional_enzy":0:421:433:1 -q22_p2_terms=K,E -q22_p3=1,1283.516846,-0.295976,4,KTKPLATTQPAK,26,00000000000000,9.30,00000010200000000,0,0;"gi|22138804|microtubule-assoc":0:245:256:1 -q22_p3_terms=K,T -q22_p4=1,1284.466766,-1.245896,4,RPSVKQFHASK,17,0000000000000,7.85,20000000200000000,0,0;"gi|24266948|ribosomal_protein":0:139:149:1 -q22_p4_terms=R,I -q22_p5=0,1284.441864,-1.220994,4,XAEVMISGPGPGR,13,000000000000000,7.12,20200000000000000,0,0;"gi|27808056|ribosomal_protein":0:82:94:3 -q22_p5_terms=K,D -q22_p5_subst=1,X,N -q22_p6=1,1283.433945,-0.213075,4,TKTPGPGAQSALR,26,000000000000000,6.21,00200210000000000,0,0;"gi|25070170|similar_to_40S_ri":0:105:117:1,"gi|28189929|similar_to_riboso":0:111:123:1,"gi|7440317|JE0129_ribosomal_p":0:105:117:1,"gi|28436071|cytoplasmic_ribos":0:104:116:1 -q22_p6_terms=R,A:R,A:R,A:K,A -q22_p7=1,1283.516541,-0.295671,5,LWSKAIFAGYK,26,0000000000000,5.12,20200000000000000,0,0;"gi|71346|R5HU35_ribosomal_pro":0:5:15:1 -q22_p7_terms=R,R -q22_p8=0,1283.496841,-0.275971,2,AENALVHVCLSK,9,00000000000000,4.31,20000000000000000,0,0;"gi|30348581|viral_phosphoribo":0:819:830:1 -q22_p8_terms=K,E -q22_p9=0,1284.377151,-1.156281,6,SWASSSHPGALGK,28,000000000000000,4.20,00200000200000000,0,0;"gi|7545323|mucin":0:32:44:1 -q22_p9_terms=R,L -q22_p10=1,1283.476929,-0.256059,4,GIDAVLAEIRAR,13,00000000000000,4.16,00020000200000000,0,0;"gi|16272889|ribosomal_protein":0:63:74:1 -q22_p10_terms=K,G -q23_p1=0,1284.377151,0.319914,7,SWASSSHPGALGK,30,000000000000000,11.84,00200000200000000,0,0;"gi|7545323|mucin":0:32:44:1 -q23_p1_terms=R,L -q23_p2=1,1284.507950,0.189115,4,TRSILFWPHK,12,000000000000,8.43,00000200200000000,0,0;"gi|27670691|similar_to_60S_ac":0:103:112:1 -q23_p2_terms=R,G -q23_p3=1,1285.409958,-0.712893,5,ARDGFQAFFAR,35,0000000000000,7.29,00000020000000000,0,0;"gi|32038889|COG0047:_Phosphor":0:79:89:1 -q23_p3_terms=R,K -q23_p4=1,1284.466766,0.230299,4,RPSVKQFHASK,22,0000000000000,7.19,20020000100000000,0,0;"gi|24266948|ribosomal_protein":0:139:149:2 -q23_p4_terms=R,I -q23_p5=1,1283.476929,1.220136,6,GIDAVLAEIRAR,37,00000000000000,5.69,20000020000000000,0,0;"gi|16272889|ribosomal_protein":0:63:74:1 -q23_p5_terms=K,G -q23_p6=1,1285.406860,-0.709795,4,REVSVSGLDPAR,22,00000000000000,5.19,20000000200000000,0,0;"gi|27807269|tenascin_X":0:1956:1967:3 -q23_p6_terms=R,R -q23_p7=1,1283.582947,1.114118,2,LCQPKPKIQTK,6,0000000000000,4.13,00000000200000000,0,0;"gi|27678012|similar_to_60S_RI":0:82:92:1 -q23_p7_terms=R,T -q23_p8=1,1283.428955,1.268110,2,NELNVKEFYK,6,000000000000,3.99,00000000200000000,0,0;"gi|21400712|RrnaAD,_Ribosomal":0:2:11:2 -q23_p8_terms=M,K -q23_p9=1,1283.516846,1.180219,3,KTKPLATTQPAK,22,00000000000000,3.70,20000000000000000,0,0;"gi|22138804|microtubule-assoc":0:245:256:1 -q23_p9_terms=K,T -q23_p10=0,1284.377258,0.319807,4,VATSGFFTGQNR,35,00000000000000,3.60,00200000000000000,0,0;"gi|2738139|tumor_necrosis_fac":0:211:222:1 -q23_p10_terms=K,Y -q24_p1=-1 -q25_p1=1,858.984070,1.079030,6,KVSPSXR,19,000000000,20.27,00010020200000000,0,0;"gi|998744|ribosomal_protein_L":0:6:12:1 -q25_p1_terms=R,N -q25_p1_subst=6,X,W -q25_p2=0,861.936646,-1.873546,5,IVSSADSIA,21,00000000000,5.73,20200000000000000,0,0;"gi|28526981|similar_to_60S_RI":0:128:136:1 -q25_p2_terms=R,- -q25_p3=0,859.920746,0.142354,4,ENGSLVEI,19,0000000000,5.23,20000020000000000,0,0;"gi|27715187|similar_to_60S_RI":0:144:151:1 -q25_p3_terms=R,- -q25_p4=0,859.884155,0.178945,4,NNNNGLSK,21,0000000000,4.57,20000000200000000,0,0;"gi|11467071|ribosomal_protein":0:12:19:1 -q25_p4_terms=K,S -q25_p5=0,859.965347,0.097753,4,EWLLDGK,21,000000000,3.74,00020020000000000,0,0;"gi|27363948|Pseudouridylate_s":0:38:44:1 -q25_p5_terms=K,V -q25_p6=1,862.027649,-1.964549,4,KALAQGFK,17,0000000000,3.22,20000200000000000,0,0;"gi|13357807|ribosomal_protein":0:85:92:1 -q25_p6_terms=K,Q -q25_p7=1,860.998245,-0.935145,3,GRLSSTLK,27,0000000000,3.14,00000020000000000,0,0;"gi|119759|FA10_BOVIN_Coagulat":0:370:377:1 -q25_p7_terms=K,M -q25_p8=0,861.963150,-1.900050,4,GQCGAEAVK,19,00000000000,2.37,00000220000000000,0,0;"gi|18313949|orotate_phosphori":0:139:147:1 -q25_p8_terms=R,R -q25_p9=0,861.018265,-0.955165,4,NMAVEVAK,19,0000000000,2.34,00000220000000000,0,0;"gi|74502|GNWVBV_genome_polypr":0:2088:2095:5 -q25_p9_terms=R,K -q25_p10=1,862.049362,-1.986262,2,MATKVQGK,5,0000000000,2.30,00200000000000000,0,0;"gi|33594498|30S_ribosomal_pro":0:1:8:2 -q25_p10_terms=-,H -q26_p1=1,881.034348,-1.602230,5,KVGHATLR,18,0000000000,20.21,00020000000000000,0,0;"gi|26992011|phosphoribosylami":0:333:340:1 -q26_p1_terms=R,C -q26_p2=0,879.011948,0.420170,3,EVYTVLR,14,000000000,7.67,00000000200000000,0,0;"gi|4140570|ribosomal_protein_":0:42:48:1,"gi|15618460|S10_Ribosomal_Pro":0:49:55:1 -q26_p2_terms=R,S:R,S -q26_p3=1,878.975464,0.456654,5,ERQPPPR,21,000000000,7.02,00200020000000000,0,0;"gi|27807269|tenascin_X":0:3337:3343:2 -q26_p3_terms=K,L -q26_p4=0,879.011948,0.420170,4,EYVTLVR,14,000000000,5.71,00020000200000000,0,0;"gi|15643702|ribosomal_large_s":0:169:175:1 -q26_p4_terms=K,G -q26_p5=0,881.034241,-1.602123,4,SCYICHR,14,000000000,4.26,20200000000000000,0,0;"gi|28201974|tankyrase,_TRF1-i":0:890:896:1,"gi|13376842|tankyrase,_TRF1-i":0:1088:1094:2 -q26_p5_terms=R,Q:R,Q -q26_p6=0,879.996643,-0.564525,4,AVLTGEYK,21,0000000000,3.23,00210000200000000,0,0;"gi|13376842|tankyrase,_TRF1-i":0:170:177:2 -q26_p6_terms=K,K -q26_p7=1,878.030441,1.401677,4,ARVIYTR,10,000000000,3.20,00020000200000000,0,0;"gi|17462420|similar_to_40S_ri":0:82:88:1 -q26_p7_terms=R,N -q26_p8=0,877.853348,1.578770,2,TEESADAR,5,0000000000,0.01,20000000000000000,0,0;"gi|2147625|I47034_laminin_B1_":0:5:12:1 -q26_p8_terms=K,R -q27_p1=1,883.007156,0.469640,4,RLPVGADR,14,0000000000,6.93,20000200000000000,0,0;"gi|30157963|similar_to_riboso":0:170:177:1 -q27_p1_terms=R,G -q27_p2=1,884.117630,-0.640834,4,ILQAIKAK,22,0000000000,5.81,20000020000000000,0,0;"gi|15828480|50S_RIBOSOMAL_PRO":0:96:103:1 -q27_p2_terms=K,S -q27_p3=0,881.969467,1.507329,4,EVPPLNVD,22,0000000000,3.18,00020020000000000,0,0;"gi|24111784|queuine_tRNA-ribo":0:368:375:1 -q27_p3_terms=R,- -q27_p4=0,884.011749,-0.534953,2,MSYISGAR,6,0000000000,1.56,00020000000000000,0,0;"gi|9838401|ribosomal_protein_":0:1:8:1,"gi|30141205|ribosomal_protein":0:1:8:1,"gi|24636941|AF314105_1_riboso":0:1:8:2,"gi|11830845|ribosomal_protein":0:1:8:1 -q27_p4_terms=-,L:-,S:-,S:-,S -q27_p5=0,883.947250,-0.470454,2,EECCSTGR,6,0000000000,1.39,00000200000000000,0,0;"gi|1706914|FSA_BOVIN_Follista":0:53:60:1 -q27_p5_terms=K,L -q27_p6=0,884.008560,-0.531764,2,YVMESGAK,6,0000000000,0.72,20000000000000000,0,0;"gi|6324151|Homology_to_mammal":0:125:132:1 -q27_p6_terms=R,G -q27_p7=0,882.101974,1.374822,2,MTFQMPK,6,000000000,0.48,00020000000000000,0,0;"gi|27806015|myozenin_1":0:236:242:1 -q27_p7_terms=R,F -q27_p8=0,882.980667,0.496129,2,EGFMNASK,6,0000000000,0.39,00000020000000000,0,0;"gi|6323250|RiboSome_Assembly;":0:124:131:1 -q27_p8_terms=K,I -q27_p9=1,884.996552,-1.519756,4,TECGKYGK,22,0000000000,0.31,00200020000000000,0,0;"gi|9838465|ribosomal_protein_":0:509:516:1,"gi|4106851|ribosomal_protein_":0:97:104:2 -q27_p9_terms=R,T:R,T -q27_p10=1,882.924255,0.552541,2,KNHSNQR,10,000000000,0.13,00000200000000000,0,0;"gi|22406356|COG2147:_Ribosoma":0:55:61:1 -q27_p10_terms=K,L -q28_p1=1,1331.433746,0.568984,6,ENEPFEAALRR,13,0000000000000,19.70,00000020200000000,0,0;"gi|33593190|30S_ribosomal_pro":0:8:18:1 -q28_p1_terms=K,F -q28_p2=0,1333.451172,-1.448442,6,NPGAPGPPGEWVR,17,000000000000000,18.71,00200000200000000,0,0;"gi|9629869|UL6":0:21:33:1 -q28_p2_terms=R,I -q28_p3=0,1333.530655,-1.527925,6,ETVWNLPLFSK,17,0000000000000,15.34,00020200000000000,0,0;"gi|2231410|MHC_class_II_antig":0:38:48:1 -q28_p3_terms=R,F -q28_p4=1,1331.518036,0.484694,4,NSILSSINSIRK,9,00000000000000,10.99,00020200000000000,0,0;"gi|27806695|cystic_fibrosis_t":0:698:709:2 -q28_p4_terms=K,F -q28_p5=0,1330.465469,1.537261,5,GDLSCPDGVGPWK,21,000000000000000,9.25,00200000200000000,0,0;"gi|29135309|phenylethanolamin":0:45:57:1 -q28_p5_terms=R,L -q28_p6=1,1333.494247,-1.491517,2,QKTAAFDHFIR,5,0000000000000,8.16,00020000000000000,0,0;"gi|9629858|UL15_protein":0:636:646:1 -q28_p6_terms=K,L -q28_p7=1,1333.492630,-1.489900,4,EYQGAGARLVAAK,17,000000000000000,6.52,00020000200000000,0,0;"gi|9629822|component_of_DNA_h":0:974:986:1 -q28_p7_terms=R,A -q28_p8=1,1330.526825,1.475905,4,EKLEAAGASITLK,19,000000000000000,6.49,00000200000000000,0,0;"gi|15673250|50S_ribosomal_pro":0:109:121:1 -q28_p8_terms=K,- -q28_p9=1,1330.531738,1.470992,5,ELAYKGQIPGVR,21,00000000000000,6.28,00200020000000000,0,0;"gi|15925227|30S_ribosomal_pro":0:46:57:1 -q28_p9_terms=R,K -q28_p10=1,1332.378662,-0.375932,6,SSGSGWGPANERK,21,000000000000000,6.04,00200200200000000,0,0;"gi|29731743|similar_to_riboso":0:341:353:1 -q28_p10_terms=R,A -q29_p1=1,1333.494247,-1.162843,4,QKTAAFDHFIR,16,0000000000000,8.11,00020200000000000,0,0;"gi|9629858|UL15_protein":0:636:646:1 -q29_p1_terms=K,L -q29_p2=0,1330.443924,1.887480,3,QTQNQEAGIITK,24,00000000000000,3.75,00000200000000000,0,0;"gi|15965120|PROBABLE_50S_RIBO":0:48:59:1 -q29_p2_terms=R,E -q29_p3=1,1330.553238,1.778166,2,MRLDNLLAQEK,11,0000000000000,3.74,00200000000000000,0,0;"gi|15900581|ribosomal_small_s":0:1:11:1 -q29_p3_terms=-,I -q29_p4=0,1333.505936,-1.174532,2,SEIEYYAMLSK,6,0000000000000,3.55,00000200000000000,0,0;"gi|17368239|RL30_ICTPU_60S_ri":0:58:68:1 -q29_p4_terms=K,T -q29_p5=0,1333.505936,-1.174532,2,SELEYYAMLSK,6,0000000000000,3.55,00000200000000000,0,0;"gi|730563|RL30_KLULA_60S_RIBO":0:54:64:1,"gi|32400991|ribosome_protein_":0:56:66:1 -q29_p5_terms=K,T:K,C -q29_p6=0,1331.491745,0.839659,2,DPSEEIEILMR,6,0000000000000,3.40,00020000000000000,0,0;"gi|7657526|ribosomal_protein_":0:463:473:1 -q29_p6_terms=R,Y -q29_p7=1,1333.515762,-1.184358,2,VLNTNMDGRWK,6,0000000000000,3.40,00020000000000000,0,0;"gi|25024868|similar_to_riboso":0:119:129:1 -q29_p7_terms=R,I -q29_p8=0,1330.465469,1.865935,3,GDLSCPDGVGPWK,16,000000000000000,2.97,00000000200000000,0,0;"gi|29135309|phenylethanolamin":0:45:57:1 -q29_p8_terms=R,L -q29_p9=1,1330.487152,1.844252,2,GADLSDRVASLVK,16,000000000000000,2.60,00000200000000000,0,0;"gi|32034692|COG0228:_Ribosoma":0:64:76:1 -q29_p9_terms=K,E -q29_p10=0,1331.516541,0.814863,4,TPVALLDFAASAR,39,000000000000000,1.80,00000200000000000,0,0;"gi|32028777|COG0046:_Phosphor":0:701:713:2 -q29_p10_terms=R,L -q30_p1=1,891.068832,-0.276601,2,GRAYAILK,6,0000000000,4.35,00000020000000000,0,0;"gi|23306478|50S_ribosomal_pro":0:98:105:1 -q30_p1_terms=R,R -q30_p2=0,892.015564,-1.223333,2,GRPFPYR,6,000000000,4.18,00000020000000000,0,0;"gi|9711713|gp53":0:144:150:1 -q30_p2_terms=R,Q -q30_p3=1,891.022552,-0.230321,2,GDKLPYAK,7,0000000000,3.62,20000000000000000,0,0;"gi|15667880|AF408195_6_putati":0:80:87:1 -q30_p3_terms=K,E -q30_p4=0,891.047455,-0.255224,2,GVMTGSIAR,7,00000000000,3.62,00020000000000000,0,0;"gi|11465435|ribosomal_protein":0:112:120:1 -q30_p4_terms=K,N -q31_p1=0,1373.309967,0.765456,3,EEEESDEDMGFG,5,00000000000000,13.97,00000000200000000,0,0;"gi|4689022|ribosomal_protein_":0:95:106:1 -q31_p1_terms=K,- -q31_p2=1,1375.655029,-1.579606,3,NKLLTIAFNTLK,5,00000000000000,13.83,00200000000000000,0,0;"gi|17647881|Ribosomal_protein":0:120:131:1 -q31_p2_terms=R,K -q31_p3=1,1372.440948,1.634475,3,KAAGIESGSGEPNR,5,0000000000000000,13.51,00000200000000000,0,0;"gi|1942158|Nmr_Structure_Of_L":0:16:29:1 -q31_p3_terms=K,N -q31_p4=0,1375.482956,-1.407533,7,TWVSPLSNTENK,17,00000000000000,10.23,00200200200000000,0,0;"gi|20894558|similar_to_ADP-ri":0:227:238:1 -q31_p4_terms=R,A -q31_p5=1,1373.639130,0.436293,7,FIDLGGIRELIK,21,00000000000000,6.91,00000200200000000,0,0;"gi|9838465|ribosomal_protein_":0:387:398:3 -q31_p5_terms=K,G -q31_p6=1,1375.658447,-1.583024,6,LFMQYSRSCLK,15,0000000000000,6.39,00200200200000000,0,0;"gi|21672662|ribosomal_large_s":0:27:37:1 -q31_p6_terms=K,K -q31_p7=0,1375.481445,-1.406022,5,AGVNTVTTLEENK,19,000000000000000,5.57,00200200000000000,0,0;"gi|27669479|similar_to_riboso":0:24:36:1 -q31_p7_terms=R,K -q31_p8=0,1372.528763,1.546660,5,HCYTVFMDNSR,19,0000000000000,4.90,00020000200000000,0,0;"gi|22947834|borf-1":0:84:94:1 -q31_p8_terms=K,L -q31_p9=1,1373.548355,0.527068,5,DLDTDVVIDKLK,19,00000000000000,4.36,00000200200000000,0,0;"gi|20178427|CPXV061_protein":0:217:228:1 -q31_p9_terms=R,S -q31_p10=0,1375.527664,-1.452241,4,VEGVWTWVGTNK,17,00000000000000,4.29,00200000200000000,0,0;"gi|27901801|selectin_L":0:94:105:2 -q31_p10_terms=K,S -q32_p1=0,922.978241,0.326925,3,AEIDYANK,11,0000000000,11.89,00020000000000000,0,0;"gi|33241155|Ribosomal_protein":0:183:190:1 -q32_p1_terms=R,T -q32_p2=1,924.078964,-0.773798,3,DLSRFMR,11,000000000,9.59,20000000000000000,0,0;"gi|12407956|AF316150_1_riboso":0:103:109:2 -q32_p2_terms=R,W -q32_p3=0,924.011063,-0.705897,2,FGEFAPTR,6,0000000000,8.42,00000020000000000,0,0;"gi|13470555|30S_ribosomal_pro":0:71:78:1 -q32_p3_terms=K,T -q32_p4=0,925.002350,-1.697184,3,AWAVEHGR,11,0000000000,5.79,00020000000000000,0,0;"gi|23308832|non-ribosomal_pep":0:531:538:1 -q32_p4_terms=R,A -q32_p5=0,922.981537,0.323629,4,AEGITYNR,20,0000000000,5.73,00020200000000000,0,0;"gi|23465929|50S_ribosomal_pro":0:71:78:1 -q32_p5_terms=R,F -q32_p6=1,922.084549,1.220617,2,ALYPFRR,6,000000000,3.80,00020000000000000,0,0;"gi|27807041|phosphoinositide-":0:11:17:1 -q32_p6_terms=R,E -q32_p7=0,924.123672,-0.818506,2,ARPFFMR,6,000000000,3.80,20000000000000000,0,0;"gi|15236185|amidophosphoribos":0:226:232:1 -q32_p7_terms=K,I -q32_p8=1,924.141739,-0.836573,4,IRIAIPNK,24,0000000000,3.55,00000010200000000,0,0;"gi|20089115|ATP_phosphoribosy":0:2:9:1 -q32_p8_terms=M,G -q32_p9=1,923.065948,0.239218,3,ADYLKWK,20,000000000,2.87,00020000000000000,0,0;"gi|6093994|RL10_PINTA_60S_rib":0:179:185:2 -q32_p9_terms=R,T -q32_p10=0,924.055634,-0.750468,2,SLGLEHLR,11,0000000000,2.78,00020000000000000,0,0;"gi|28201974|tankyrase,_TRF1-i":0:686:693:1 -q32_p10_terms=K,D -q33_p1=1,1385.564041,1.287932,6,SREVYIVATGYK,24,00000000000000,8.45,00200000200000000,0,0;"gi|16273244|cell_division_pro":0:197:208:1 -q33_p1_terms=R,G -q33_p2=1,1385.564041,1.287932,6,SREVYLVATGYK,24,00000000000000,8.45,00200000200000000,0,0;"gi|24372779|ribosomal_RNA_lar":0:197:208:1 -q33_p2_terms=R,L -q33_p3=1,1386.555328,0.296645,4,LPPATAEAYARAR,26,000000000000000,6.43,00200100000000000,0,0;"gi|9629822|component_of_DNA_h":0:411:423:3 -q33_p3_terms=R,T -q33_p4=1,1387.604767,-0.752794,2,VNTMIRPDGEKK,4,00000000000000,4.84,00200000000000000,0,0;"gi|27712514|similar_to_riboso":0:124:135:1 -q33_p4_terms=K,A -q33_p5=0,1388.610626,-1.758653,2,FGATIGIIGGGQLGK,12,00000000000000000,2.25,20000000000000000,0,0;"gi|15924055|phosphoribosylami":0:8:22:1 -q33_p5_terms=K,M -q33_p6=1,1387.581436,-0.729463,2,DTSGILVIAKTNR,8,000000000000000,2.05,00000200000000000,0,0;"gi|28211276|ribosomal_large_s":0:142:154:1 -q33_p6_terms=K,A -q33_p7=1,1385.674957,1.177016,2,LVANMLVKAGVDR,8,000000000000000,1.70,00000200000000000,0,0;"gi|15900963|ribose-phosphate_":0:114:126:1 -q33_p7_terms=K,I -q33_p8=0,1386.618149,0.233824,4,QNFHALMDAIVK,21,00000000000000,1.63,20000020000000000,0,0;"gi|15896395|Ribosomal_protein":0:185:196:1 -q33_p8_terms=K,A -q33_p9=1,1387.672546,-0.820573,4,VVSVLHHLSIKR,18,00000000000000,1.55,00200000200000000,0,0;"gi|23893540|liprin_beta1":0:137:148:1 -q33_p9_terms=K,A -q33_p10=0,1386.598267,0.253706,2,CSSMPNIQGFFR,8,00000000000000,1.36,00200000000000000,0,0;"gi|30348505|viral_phosphoribo":0:318:329:1 -q33_p10_terms=K,L -q34_p1=1,926.112946,1.783650,6,FLYLKSR,23,000000000,5.92,00220020000000000,0,0;"gi|30519439|F9L_protein":0:17:23:1 -q34_p1_terms=R,C -q34_p2=1,929.068954,-1.172358,4,SLKDIEPK,21,0000000000,5.23,00020000200000000,0,0;"gi|1685371|ribosomal_protein_":0:70:77:1 -q34_p2_terms=K,R -q34_p3=0,927.094437,0.802159,2,VYLEYIK,6,000000000,4.24,00000020000000000,0,0;"gi|17529672|AF220295_2_RNA_po":0:874:880:4 -q34_p3_terms=R,K -q34_p4=1,926.112946,1.783650,2,FSRIYIK,12,000000000,2.42,00000020000000000,0,0;"gi|10802916|AF288091_9_riboso":0:10:16:1 -q34_p4_terms=K,H -q34_p5=0,929.115128,-1.218532,2,SIQLILSR,12,0000000000,1.94,00000000200000000,0,0;"gi|619569|ribosomal_protein_S":0:43:50:1 -q34_p5_terms=R,A -q34_p6=1,929.075562,-1.178966,2,SLKKPSGGR,12,00000000000,1.94,00000000200000000,0,0;"gi|18977441|SSU_ribosomal_pro":0:8:16:1 -q34_p6_terms=R,I -q34_p7=1,925.985657,1.910939,2,EVEEHKR,21,000000000,1.17,00000020000000000,0,0;"gi|17508145|ribosomal_protein":0:259:265:1 -q34_p7_terms=K,E -q34_p8=1,929.097061,-1.200465,2,GYMRQFK,21,000000000,0.80,00000200000000000,0,0;"gi|23100887|30S_ribosomal_pro":0:60:66:1 -q34_p8_terms=R,M -q34_p9=1,926.076553,1.820043,3,FLRTHPR,21,000000000,0.46,00000020000000000,0,0;"gi|23119029|COG0047:_Phosphor":0:351:357:1 -q34_p9_terms=R,C -q35_p1=0,1401.627960,0.965775,4,VLVGNEGCSVPSLK,14,0000000000000000,12.65,00000020000000000,0,0;"gi|12644020|VWF_BOVIN_Von_Wil":0:906:919:1 -q35_p1_terms=R,C -q35_p2=0,1400.661453,1.932282,4,YVQVGDVVPAIIK,8,000000000000000,7.46,00200020000000000,0,0;"gi|15895236|Ribosomal_protein":0:155:167:1 -q35_p2_terms=K,E -q35_p3=1,1401.608032,0.985703,4,NPTTKLTSAISLR,17,000000000000000,7.04,00200000000000000,0,0;"gi|15897602|LSU_ribosomal_pro":0:62:74:1 -q35_p3_terms=R,K -q35_p4=1,1400.729233,1.864502,4,IARMLDTGLAVIK,18,000000000000000,5.99,20000020000000000,0,0;"gi|29840327|ribose-phosphate_":0:180:192:1 -q35_p4_terms=R,K -q35_p5=1,1403.589035,-0.995300,6,HAREVLAANPGLR,20,000000000000000,5.49,00200200200000000,0,0;"gi|29829740|putative_non-ribo":0:501:513:1 -q35_p5_terms=R,L -q35_p6=1,1401.628067,0.965668,6,EADKVLVQMPSGK,18,000000000000000,5.00,00220000200000000,0,0;"gi|11499506|LSU_ribosomal_pro":0:132:144:1 -q35_p6_terms=R,Q -q35_p7=1,1403.582443,-0.988708,5,FLPSTAAIKAGGDR,16,0000000000000000,4.96,00200020000000000,0,0;"gi|28899811|phosphoribosylami":0:80:93:1 -q35_p7_terms=K,R -q35_p8=1,1400.628143,1.965592,4,GPLPALARAGPAPGR,19,00000000000000000,4.84,00000200200000000,0,0;"gi|9629869|UL6":0:191:205:1 -q35_p8_terms=R,C -q35_p9=1,1403.709824,-1.116089,3,FYLAIIHGKLTK,14,00000000000000,1.90,00200000000000000,0,0;"gi|28211672|ribosomal_large_s":0:89:100:1 -q35_p9_terms=K,K -q35_p10=1,1402.548141,0.045594,2,HDIEAKVVSIEY,4,00000000000000,1.76,00000020000000000,0,0;"gi|11036695|putative_L2_ribos":0:72:83:1 -q35_p10_terms=K,- -q36_p1=0,947.001450,1.717534,7,GALEDTVSR,38,00000000000,13.59,20000020000000000,0,0;"gi|29827410|putative_non-ribo":0:138:146:1 -q36_p1_terms=R,Q -q36_p2=1,947.067657,1.651327,6,NAGKDAAAVM,41,000000000000,10.66,20200000000000000,0,0;"gi|12407956|AF316150_1_riboso":0:310:319:1 -q36_p2_terms=R,- -q36_p3=1,947.041260,1.677724,3,KEIDVTDK,21,0000000000,9.18,10000020000000000,0,0;"gi|17137486|Poly(ADP-ribose)_":0:753:760:2 -q36_p3_terms=R,D -q36_p4=1,949.065369,-0.346385,3,FTVRVGDR,6,0000000000,8.88,00000020000000000,0,0;"gi|119759|FA10_BOVIN_Coagulat":0:283:290:1 -q36_p4_terms=R,N -q36_p5=1,948.160065,0.558919,3,FNVLKVTK,16,0000000000,6.80,00020000000000000,0,0;"gi|13516490|ribosomal_protein":0:140:147:1,"gi|29825599|40S_ribosomal_pro":0:138:145:1,"gi|14318169|AF379640_1_riboso":0:134:141:1 -q36_p5_terms=R,A:R,A:R,G -q36_p6=1,948.181549,0.537435,3,KSQIMITK,11,0000000000,5.83,00020000000000000,0,0;"gi|28194743|AF480988_1_riboso":0:138:145:1,"gi|28194713|AF480973_1_riboso":0:132:139:1 -q36_p6_terms=K,N:K,N -q36_p7=0,948.116837,0.602147,3,LYNVQALK,26,0000000000,5.71,20000100000000000,0,0;"gi|17569427|ribosomal_Protein":0:107:114:1 -q36_p7_terms=K,V -q36_p8=1,948.120132,0.598852,6,LKYALNAR,41,0000000000,4.45,20000020000000000,0,0;"gi|8953449|40S_ribosomal_prot":0:49:56:1 -q36_p8_terms=R,E -q36_p9=0,948.934448,-0.215464,3,ESAGNQTSR,21,00000000000,4.42,00000020000000000,0,0;"gi|27806859|limbin":0:116:124:1 -q36_p9_terms=R,G -q36_p10=0,950.028564,-1.309580,3,MDSTGVQGR,38,00000000000,2.84,00000020000000000,0,0;"gi|27806331|adenylate_cyclase":0:1012:1020:1 -q36_p10_terms=R,I -q37_p1=1,957.088837,-0.979351,4,NTILRQXR,18,0000000000,7.27,00000000200000000,0,0;"gi|3914699|RL4_PIG_60S_RIBOSO":0:13:20:1 -q37_p1_terms=R,X -q37_p1_subst=7,X,G -q37_p2=0,954.124756,1.984730,2,GVRPDLGLK,4,00000000000,5.30,00200000000000000,0,0;"gi|16124752|ribosomal_protein":0:80:88:1 -q37_p2_terms=R,E -q37_p3=0,954.124542,1.984944,2,IYWFGLR,4,000000000,5.30,00000200000000000,0,0;"gi|131019|PRR4_BOVIN_PLACENTA":0:189:195:1 -q37_p3_terms=R,S -q37_p4=1,954.131348,1.978138,2,RISRPGLR,4,0000000000,5.30,00000200000000000,0,0;"gi|11465992|ribosomal_protein":0:81:88:1,"gi|23112492|COG0096:_Ribosoma":0:79:86:1,"gi|14017607|ribosomal_protein":0:83:90:1 -q37_p4_terms=K,I:K,V:K,I -q37_p5=0,957.122040,-1.012554,2,VLEIIQDK,4,0000000000,5.15,00000020000000000,0,0;"gi|18976798|phosphoribosylami":0:93:100:1 -q37_p5_terms=R,L -q37_p6=1,957.088959,-0.979473,4,NNVVLSRR,20,0000000000,1.73,00000020200000000,0,0;"gi|25028013|putative_30S_ribo":0:179:186:1 -q37_p6_terms=R,A -q37_p7=0,956.140533,-0.031047,3,NVTLLIQR,19,0000000000,1.12,00000000200000000,0,0;"gi|28829032|similar_to_putati":0:73:80:1 -q37_p7_terms=K,K -q37_p8=1,958.030548,-1.921062,2,QENRNGIK,13,0000000000,0.63,00020000000000000,0,0;"gi|30150289|similar_to_riboso":0:54:61:1 -q37_p8_terms=R,K -q37_p9=1,957.045853,-0.936367,2,GIDNRVQR,13,0000000000,0.33,20000000000000000,0,0;"gi|27669227|similar_to_riboso":0:74:81:2 -q37_p9_terms=R,R -q37_p10=0,956.097641,0.011845,2,RPETAAALK,10,00000000000,0.07,00200000000000000,0,0;"gi|13620887|mitochondrial_rib":0:53:61:1,"gi|23956244|mitochondrial_rib":0:15:23:1 -q37_p10_terms=R,R:R,R -q38_p1=1,969.058258,-1.401281,2,ESHVRWR,5,000000000,2.31,20000000000000000,0,0;"gi|30519569|B18R_protein":0:169:175:1 -q38_p1_terms=R,D -q39_p1=1,1505.757065,-1.786988,4,TFFILNFNKFSK,11,00000000000000,13.17,00200000000000000,0,0;"gi|11496544|ribosomal_protein":0:7:18:2 -q39_p1_terms=K,Q -q39_p2=1,1504.883682,-0.913605,5,VRPSVKPMCEKCK,23,000000000000000,9.17,00000200000000000,0,0;"gi|16801819|ribosomal_protein":0:3:15:1 -q39_p2_terms=K,V -q39_p3=0,1503.650238,0.319839,3,SPYQEFTDYLIK,6,00000000000000,8.61,00000200000000000,0,0;"gi|17449614|similar_to_riboso":0:156:167:1 -q39_p3_terms=K,T -q39_p4=0,1503.747940,0.222137,4,VDIHTARPGIVIGR,15,0000000000000000,8.33,00200000000000000,0,0;"gi|6094178|RS3_MYCBO_30S_ribo":0:65:78:1 -q39_p4_terms=R,R -q39_p5=1,1503.681732,0.288345,6,ARADTIYHPAGTCK,19,0000000000000000,3.32,00220000200000000,0,0;"gi|13472812|dehydrogenase_(po":0:466:479:1 -q39_p5_terms=R,M -q39_p6=0,1503.701431,0.268646,4,LDQLPGDIAIGHVR,23,0000000000000000,1.67,00200000000000000,0,0;"gi|15236185|amidophosphoribos":0:146:159:1 -q39_p6_terms=K,Y -q39_p7=0,1503.804352,0.165725,2,IVFLECSVELVPR,11,000000000000000,1.19,00000020000000000,0,0;"gi|14600762|hypothetical_prot":0:3:15:1 -q39_p7_terms=K,S -q39_p8=1,1503.696625,0.273452,2,QELITQSQTLKSK,6,000000000000000,0.18,00000000200000000,0,0;"gi|32699654|RR2A_CHLRE_Chloro":0:539:551:1 -q39_p8_terms=R,A -q40_p1=0,1012.203720,1.142588,2,LLALGGEAIR,5,000000000000,0.70,00000020000000000,0,0;"gi|23120335|COG1020:_Non-ribo":0:313:322:1 -q40_p1_terms=R,L -q40_p2=1,1013.191940,0.154368,2,LRQAGIEVK,5,00000000000,0.70,00000020000000000,0,0;"gi|16331497|riboflavin_biosyn":0:116:124:1 -q40_p2_terms=R,V -q41_p1=1,1524.719147,1.227979,4,KNACCSVNTSIEAXK,17,00000000000000000,14.03,10200000000000000,0,0;"gi|120460|FOL1_BOVIN_Milk_fol":0:42:56:2 -q41_p1_terms=R,D -q41_p1_subst=14,X,G -q41_p2=1,1526.799561,-0.852435,4,SFLQTMPHFYKK,17,00000000000000,10.99,00200010000000000,0,0;"gi|29735004|similar_to_60S_RI":0:157:168:1 -q41_p2_terms=K,G -q41_p3=0,1524.593140,1.353986,3,ISQEHLADHFDGR,6,000000000000000,9.59,00000200000000000,0,0;"gi|27806069|phospholipase_C_g":0:1263:1275:2 -q41_p3_terms=R,D -q41_p4=1,1524.760544,1.186582,4,AKGADDVVLLGIPTR,10,00000000000000000,7.15,00020200000000000,0,0;"gi|21219989|pyrimidine_operon":0:35:49:1 -q41_p4_terms=R,G -q41_p5=1,1526.882446,-0.935320,4,EPLTAKLVANMLVK,13,0000000000000000,6.22,00220000000000000,0,0;"gi|15900963|ribose-phosphate_":0:108:121:1 -q41_p5_terms=R,A -q41_p6=1,1524.760437,1.186689,5,YFQGIHVYLKEK,17,00000000000000,5.24,00200000200000000,0,0;"gi|108953|B39505_trophoblast_":0:146:157:1 -q41_p6_terms=K,E -q41_p7=1,1526.650665,-0.703539,5,DPEDCFTEGCVRR,17,000000000000000,4.91,00200200000000000,0,0;"gi|27806135|sodium_channel,_v":0:1168:1180:1 -q41_p7_terms=K,C -q41_p8=1,1526.731537,-0.784411,6,AEGLSYSKFINGLK,21,0000000000000000,4.20,00220200000000000,0,0;"gi|464625|RL20_MYCFE_50S_ribo":0:70:83:1 -q41_p8_terms=R,R -q41_p9=1,1524.641266,1.305860,4,NNTVTPGGKPNRNR,15,0000000000000000,4.01,00020200000000000,0,0;"gi|27712692|similar_to_riboso":0:238:251:2 -q41_p9_terms=K,E -q41_p10=1,1527.741455,-1.794329,2,KTCTTVAFTQVNSK,6,0000000000000000,3.12,00020000000000000,0,0;"gi|27697936|similar_to_riboso":0:149:162:1 -q41_p10_terms=R,D -q42_p1=0,1554.786423,-1.621035,4,GIQAGAVLVSGAEAAIK,12,0000000000000000000,12.31,00000200000000000,0,0;"gi|15676072|50S_ribosomal_pro":0:109:125:1,"gi|15793154|50S_ribosomal_pro":0:109:125:1 -q42_p1_terms=R,V:R,V -q42_p2=0,1552.707855,0.457533,4,TVMVQEGNVEGAYR,8,0000000000000000,9.84,20000000200000000,0,0;"gi|17505220|mitochondrial_rib":0:11:24:1 -q42_p2_terms=R,T -q42_p3=1,1553.869659,-0.704271,7,VIEHAVFGMLPKGR,32,0000000000000000,5.57,00200200000000000,0,0;"gi|15805210|ribosomal_protein":0:126:139:1 -q42_p3_terms=R,Q -q42_p4=1,1552.836960,0.328428,2,GKLAGLPVVEMPADR,4,00000000000000000,4.78,00200000000000000,0,0;"gi|29829701|putative_non-ribo":0:163:177:1 -q42_p4_terms=K,A -q42_p5=1,1551.767441,1.397947,4,KGISYQGNHICFGK,28,0000000000000000,3.84,00200000000000000,0,0;"gi|17129612|ribosomal_protein":0:1:14:1 -q42_p5_terms=-,Y -q42_p6=1,1553.674240,-0.508852,2,KAEAGAGAATEFQFR,4,00000000000000000,3.57,00000000200000000,0,0;"gi|33585857|Ribosomal_protein":0:139:153:1 -q42_p6_terms=K,G -q42_p7=1,1554.791428,-1.626040,4,RYLAVTPSAHQALK,12,0000000000000000,2.61,20000000200000000,0,0;"gi|6324775|Ribose_methyltrans":0:11:24:1 -q42_p7_terms=K,T -q42_p8=1,1551.628342,1.537046,4,LPGGRGNAGGEHHHR,16,00000000000000000,2.48,00000000200000000,0,0;"gi|27673569|similar_to_60S_RI":0:31:45:1 -q42_p8_terms=K,I -q42_p9=0,1552.639847,0.525541,4,SPYQEHTDFLSTK,16,000000000000000,1.01,00200000200000000,0,0;"gi|18406325|40S_ribosomal_pro":0:257:269:1 -q42_p9_terms=R,A -q42_p10=0,1552.643158,0.522230,4,ADVYWESTVVGGNR,16,0000000000000000,0.65,00000220000000000,0,0;"gi|23481646|Ribosomal_protein":0:353:366:2 -q42_p10_terms=K,E -q43_p1=0,1557.849823,-0.151474,4,ILDMENLNLEIIK,12,000000000000000,15.95,00000200000000000,0,0;"gi|30262377|nonribosomal_pept":0:1124:1136:1 -q43_p1_terms=K,T -q43_p2=1,1558.803131,-1.104782,5,CLEAFQNHISKIR,16,000000000000000,9.73,00000220000000000,0,0;"gi|16121347|ribosome_recyclin":0:16:28:1 -q43_p2_terms=K,T -q43_p3=1,1555.854019,1.844330,5,TLIGKTITLEIEPK,16,0000000000000000,5.78,20000000200000000,0,0;"gi|27691796|similar_to_ubiqui":0:7:20:1 -q43_p3_terms=K,Y -q43_p4=1,1557.815033,-0.116684,5,LASPWCLLQNKER,23,000000000000000,5.01,00000020200000000,0,0;"gi|138202|VGLB_HSVBP_Glycopro":0:557:569:1 -q43_p4_terms=R,A -q43_p5=1,1556.893326,0.805023,4,LIAYAVVVNRLGLR,20,0000000000000000,4.99,20000200000000000,0,0;"gi|21702622|AF481909_2_riboso":0:76:89:1 -q43_p5_terms=R,R -q43_p6=1,1556.759232,0.939117,2,QLDDLKVELSQLR,8,000000000000000,4.90,00000020000000000,0,0;"gi|27481428|similar_to_60S_ri":0:20:32:1,"gi|29742841|similar_to_60S_ri":0:19:31:1 -q43_p6_terms=K,V:K,V -q43_p7=1,1555.774429,1.923920,2,QLDNLKVELSQLR,8,000000000000000,4.90,00000020000000000,0,0;"gi|18594471|similar_to_60S_RI":0:32:44:1 -q43_p7_terms=K,V -q43_p8=1,1558.841446,-1.143097,4,MEIRVVTLGLDGAGK,12,00000000000000000,4.75,00000200200000000,0,0;"gi|15208643|ADP-ribosylation_":0:403:417:2 -q43_p8_terms=K,T -q43_p9=0,1556.714355,0.983994,3,WDFTALIDFWDK,12,00000000000000,4.26,00000000200000000,0,0;"gi|18575873|similar_to_poly_(":0:460:471:1,"gi|4505609|poly_(ADP-ribose)_":0:568:579:1 -q43_p9_terms=K,V:K,V -q43_p10=1,1557.879730,-0.181381,2,IVLRLECLEPNCR,4,000000000000000,4.20,00000200000000000,0,0;"gi|27478446|similar_to_large_":0:66:78:1 -q43_p10_terms=K,S -q44_p1=0,1042.186859,0.572407,3,IDDVNVVLR,4,00000000000,17.52,00000000200000000,0,0;"gi|15644001|phosphoribosylfor":0:150:158:1 -q44_p1_terms=K,Y -q44_p2=0,1042.186737,0.572529,3,LNTLAPAAGSK,4,0000000000000,16.99,00000000200000000,0,0;"gi|28897050|ribosomal_protein":0:3:13:2 -q44_p2_terms=R,H -q44_p3=1,1041.244934,1.514332,4,LLAGGQLNKK,8,000000000000,11.54,00020000200000000,0,0;"gi|18312092|ribosomal_protein":0:70:79:1 -q44_p3_terms=K,I -q44_p4=1,1043.174957,-0.415691,6,IDVKNAVER,25,00000000000,7.88,20200000200000000,0,0;"gi|28198355|50S_ribosomal_pro":0:42:50:2 -q44_p4_terms=K,L -q44_p5=0,1043.254227,-0.494961,5,ILLISEDLK,22,00000000000,5.40,00020000200000000,0,0;"gi|27806463|peptidylprolyl_is":0:219:227:2 -q44_p5_terms=K,N -q44_p6=0,1041.347626,1.411640,6,LLPEILLCK,28,00000000000,3.34,20000000200000000,0,0;"gi|13095627|unknown":0:118:126:1 -q44_p6_terms=K,Y -q44_p7=1,1043.174866,-0.415600,2,GGDLKKPSGGK,4,0000000000000,2.77,00000000200000000,0,0;"gi|18313995|ribosomal_protein":0:9:19:1 -q44_p7_terms=K,K -q44_p8=0,1043.131729,-0.372463,2,DADAALQIAR,4,000000000000,1.64,00000000200000000,0,0;"gi|15673500|bifunctional_puri":0:254:263:1 -q44_p8_terms=R,D -q44_p9=1,1041.241730,1.517536,2,IKAAGGEVILA,4,0000000000000,1.64,00000000200000000,0,0;"gi|7440777|F71184_probable_ri":0:140:150:1 -q44_p9_terms=K,- -q44_p10=0,1041.284622,1.474644,2,LAGNSLLLLK,4,000000000000,1.64,00000000200000000,0,0;"gi|7994659|PUR2_METTH_Phospho":0:39:48:2 -q44_p10_terms=R,L -q45_p1=0,1572.549835,-1.268725,3,NGQNEQNEQNEIR,4,000000000000000,15.38,00200000000000000,0,0;"gi|23481646|Ribosomal_protein":0:166:178:2 -q45_p1_terms=K,A -q45_p2=1,1572.765030,-1.483920,3,LWDLGETGWRLAR,8,000000000000000,4.72,00000000200000000,0,0;"gi|27687673|similar_to_riboso":0:134:146:1 -q45_p2_terms=K,K -q45_p3=1,1572.780365,-1.499255,3,GTKFTAVDVMQNVX,8,0000000000000000,4.66,20000000000000000,0,0;"gi|3914740|RL26_BRARA_60S_rib":0:133:146:1 -q45_p3_terms=K,- -q45_p3_subst=14,X,Y -q45_p4=1,1569.822647,1.458463,6,AYSALEKISFPGMR,19,0000000000000000,3.63,00220200000000000,0,0;"gi|11498757|phosphoribosylami":0:446:459:1 -q45_p4_terms=K,Y -q45_p5=1,1569.845535,1.435575,2,NIFNPNIDKIIIR,4,000000000000000,1.66,00000000200000000,0,0;"gi|13272308|AF274444_21_ribos":0:17:29:1 -q45_p5_terms=K,S -q45_p6=1,1569.774734,1.506376,4,KTNEYTLMEAIEK,19,000000000000000,1.18,00200000000000000,0,0;"gi|23508797|50S_ribosomal_pro":0:115:127:1 -q45_p6_terms=K,I -q45_p7=0,1569.632233,1.648877,6,AEAGLNTGTGEAHVSR,31,000000000000000000,1.11,00200000200000000,0,0;"gi|9629858|UL15_protein":0:94:109:1 -q45_p7_terms=R,E -q45_p8=1,1570.785721,0.495389,2,QIEISGANAEKLIGK,8,00000000000000000,0.63,00000000200000000,0,0;"gi|14590508|30S_ribosomal_pro":0:18:32:1 -q45_p8_terms=K,K -q45_p9=1,1571.754150,-0.473040,2,THMNSQDVKAAIEK,8,0000000000000000,0.15,00000000200000000,0,0;"gi|27806781|vitrin":0:323:336:1 -q45_p9_terms=K,I -q46_p1=1,1092.248840,-0.898020,3,LYRTGDLVR,8,00000000000,10.84,00000020000000000,0,0;"gi|15597620|probable_non-ribo":0:2567:2575:1 -q46_p1_terms=R,L -q46_p2=0,1093.147446,-1.796626,3,NIESFEAQR,8,00000000000,10.77,00000020000000000,0,0;"gi|21672803|50S_ribosomal_pro":0:43:51:1 -q46_p2_terms=K,V -q46_p3=0,1090.232834,1.117986,3,QGIQTIFQR,8,00000000000,10.17,00000020000000000,0,0;"gi|16802612|histidyl-tRNA_syn":0:381:389:1 -q46_p3_terms=R,E -q46_p4=0,1090.168457,1.182363,4,VEEQGNQMR,18,00000000000,10.03,00000000200000000,0,0;"gi|2119392|I45996_apolipoprot":0:260:268:1 -q46_p4_terms=K,L -q46_p5=1,1093.337952,-1.987132,2,KSSSSLMLLK,4,000000000000,9.80,20000000000000000,0,0;"gi|13095590|hypothetical_prot":0:83:92:1 -q46_p5_terms=K,Y -q46_p6=1,1091.136642,0.214178,3,SNGGATTRATR,8,0000000000000,9.04,00000000200000000,0,0;"gi|21673159|phosphoribosylami":0:163:173:1 -q46_p6_terms=R,L -q46_p7=1,1092.230759,-0.879939,4,AASGMASSRVR,15,0000000000000,8.98,00000020200000000,0,0;"gi|27721359|similar_to_riboso":0:314:324:1 -q46_p7_terms=K,D -q46_p8=0,1093.169037,-1.818217,4,TCQSELQER,21,00000000000,8.54,00000020000000000,0,0;"gi|32453503|ModB_ADP-ribosyla":0:2:10:1 -q46_p8_terms=M,E -q46_p9=1,1090.279343,1.071477,4,SHTVLHLKR,12,00000000000,8.13,00000020200000000,0,0;"gi|629880|A53191_hypothetical":0:42:50:2 -q46_p9_terms=R,R -q46_p10=1,1091.199554,0.151266,5,MANNASAEKR,15,000000000000,8.04,00020020000000000,0,0;"gi|11467565|ribosomal_protein":0:1:10:1 -q46_p10_terms=-,I -q47_p1=1,1659.923538,1.886382,5,IIVRIGSGFDNIDIK,20,00000000000000000,11.62,00000200000000000,0,0;"gi|15011859|C-terminal_bindin":0:83:97:1 -q47_p1_terms=R,S -q47_p2=0,1660.829056,0.980864,6,TDCHMYQPVPEGQR,24,0000000000000000,6.46,00220100200000000,0,0;"gi|27718291|similar_to_riboso":0:227:240:1 -q47_p2_terms=K,E -q47_p3=1,1662.929123,-1.119203,3,HYRFGASSLLASLLK,13,00000000000000000,3.64,00200000000000000,0,0;"gi|24636803|DEOC_SALTY_Deoxyr":0:232:246:1 -q47_p3_terms=R,A -q47_p4=0,1662.992035,-1.182115,5,VGLIAAFWTGQLCGVK,22,000000000000000000,2.55,20200000000000000,0,0;"gi|27732941|similar_to_riboso":0:22:37:1 -q47_p4_terms=K,S -q47_p5=1,1662.974030,-1.164110,4,QIEAARIAMTHYMK,20,0000000000000000,2.46,00020000200000000,0,0;"gi|9931596|ribosomal_protein_":0:42:55:1 -q47_p5_terms=R,R -q47_p6=1,1661.966370,-0.156450,2,AVPVTPAVMKQVEHR,10,00000000000000000,2.21,20000000000000000,0,0;"gi|33866908|50S_ribosomal_pro":0:40:54:1 -q47_p6_terms=K,R -q47_p7=1,1660.916428,0.893492,2,NGILKSGLGTWLHHK,7,00000000000000000,2.16,00000000200000000,0,0;"gi|17543676|predicted_CDS,_mi":0:339:353:1 -q47_p7_terms=K,L -q47_p8=1,1659.925262,1.884658,2,VVPNGPYNFIIKNGK,10,00000000000000000,1.81,20000000000000000,0,0;"gi|2507605|RM05_BRANA_MITOCHO":0:36:50:1 -q47_p8_terms=R,L -q47_p9=0,1662.927521,-1.117601,4,GAIIQTPTLGPIQPTR,20,000000000000000000,1.56,00020000200000000,0,0;"gi|27806449|RAB7,_member_RAS_":0:374:389:1 -q47_p9_terms=R,V -q47_p10=0,1663.779938,-1.970018,4,TDLSGDPTFAELIER,20,00000000000000000,1.08,00020020000000000,0,0;"gi|29829701|putative_non-ribo":0:263:277:1 -q47_p10_terms=R,V -q48_p1=0,1135.202454,0.708424,4,DQEVIDACDK,9,000000000000,11.95,00220000000000000,0,0;"gi|15673500|bifunctional_puri":0:494:503:1 -q48_p1_terms=R,Y -q48_p2=1,1135.313339,0.597539,4,KLEITGVGYR,9,000000000000,6.02,00020200000000000,0,0;"gi|27380496|50S_ribosomal_pro":0:86:95:2 -q48_p2_terms=K,A -q48_p3=0,1136.253357,-0.342479,2,QPYEPLDFK,4,00000000000,4.41,00200000000000000,0,0;"gi|7438074|T13363_phosphoribo":0:367:375:1 -q48_p3_terms=K,Y -q48_p4=0,1136.211945,-0.301067,2,LLDATADDFR,4,000000000000,4.12,00000200000000000,0,0;"gi|26541519|AF484556_28_nonri":0:499:508:1 -q48_p4_terms=R,L -q48_p5=0,1134.346848,1.564030,2,LMSVIQGATSK,4,0000000000000,4.12,00200000000000000,0,0;"gi|23057827|COG0244:_Ribosoma":0:139:149:1 -q48_p5_terms=K,L -q48_p6=1,1135.379654,0.531224,2,MAERVAAFLK,4,000000000000,4.12,00200000000000000,0,0;"gi|28603780|NADH_dehydrogenas":0:1:10:1 -q48_p6_terms=-,N -q48_p7=1,1135.146057,0.764821,2,NDSINRSSSR,4,000000000000,4.12,00000200000000000,0,0;"gi|32401761|small_ribosomal_p":0:19:28:1 -q48_p7_terms=R,K -q48_p8=1,1135.316757,0.594121,2,RSGVVLSYVR,4,000000000000,4.12,00000200000000000,0,0;"gi|27808056|ribosomal_protein":0:103:112:1,"gi|28202205|ribosomal_protein":0:103:112:1 -q48_p8_terms=R,D:R,D -q48_p9=1,1134.307159,1.603719,2,VALDQSXSRK,9,000000000000,3.89,20000000000000000,0,0;"gi|23477330|ribosomal_protein":0:14:23:1 -q48_p9_terms=R,I -q48_p9_subst=7,X,M -q48_p10=1,1134.366440,1.544438,4,WLDISLKFL,7,00000000000,3.62,00220000000000000,0,0;"gi|15606213|quinolinate_phosp":0:266:274:1 -q48_p10_terms=R,- -q49_p1=1,1728.972534,-0.365739,7,AVMATAANIAHFEARR,32,000000000000000000,7.39,10000020200000000,0,0;"gi|32033887|COG0359:_Ribosoma":0:36:51:1,"gi|33152180|50S_ribosomal_pro":0:36:51:1 -q49_p1_terms=K,A:K,A -q49_p2=1,1726.906952,1.699843,6,EMAHAGELPGVQKSSW,17,000000000000000000,6.62,20100020200000000,0,0;"gi|15607857|rpsN":0:46:61:1 -q49_p2_terms=R,- -q49_p3=1,1726.913345,1.693450,6,QSLNNFQGLRSFGCR,41,00000000000000000,4.52,00020000200000000,0,0;"gi|9910622|ADML_BOVIN_ADM_pre":0:97:111:1 -q49_p3_terms=R,F -q49_p4=1,1729.949142,-1.342347,9,THEEVKMTLNDTLAK,41,00000000000000000,3.52,00000220200000000,0,0;"gi|12240158|uveal_autoantigen":0:864:878:1 -q49_p4_terms=K,T -q49_p5=0,1727.916550,0.690245,6,DHTIFALVDGTVHFR,32,00000000000000000,3.09,00000200200000000,0,0;"gi|3122716|RL27_CHLVI_50S_rib":0:56:70:2 -q49_p5_terms=K,N -q49_p6=1,1729.940521,-1.333726,4,EYHRLCLHCSANQR,9,0000000000000000,3.02,20200000000000000,0,0;"gi|1170669|KIT_BOVIN_Mast/ste":0:178:191:1 -q49_p6_terms=R,G -q49_p7=1,1726.797653,1.809142,7,FRDLEAQANDGTFDK,32,00000000000000000,2.17,00020200000000000,0,0;"gi|464713|RS2_SPIPL_30S_ribos":0:114:128:1 -q49_p7_terms=R,L -q49_p8=1,1729.934250,-1.327455,9,VGGATYQVPVEVAAGRR,53,0000000000000000000,1.47,00000200200000000,0,0;"gi|29839958|ribosomal_protein":0:81:97:2 -q49_p8_terms=R,D -q49_p9=0,1729.948837,-1.342042,5,LGCLGLDLNSGVESAPGK,37,00000000000000000000,1.37,00000200000000000,0,0;"gi|28898733|indole-3-glycerol":0:448:465:1 -q49_p9_terms=K,K -q50_p1=1,1197.386169,1.551321,4,SSVHAKWVVGK,8,0000000000000,9.57,00200000200000000,0,0;"gi|27694896|similar_to_mitoch":0:7:17:1 -q50_p1_terms=R,V -q50_p2=1,1197.278564,1.658926,2,DSREQFEMR,5,00000000000,5.84,00000200000000000,0,0;"gi|34849392|ribosomal_protein":0:60:68:1,"gi|15900144|ribosomal_protein":0:60:68:1 -q50_p2_terms=K,T:K,T -q50_p3=1,1197.449051,1.488439,2,CLEAKNSAMCK,5,0000000000000,5.53,00200000000000000,0,0;"gi|23598933|similar_to_riboso":0:161:171:1 -q50_p3_terms=R,Y -q50_p4=0,1197.409042,1.528448,2,INWICNAVHK,5,000000000000,5.53,00200000000000000,0,0;"gi|6093871|R15A_PICMA_60S_RIB":0:148:157:1 -q50_p4_terms=R,H -q50_p5=1,1197.260147,1.677343,2,RNYYPSANGR,8,000000000000,2.69,00020000000000000,0,0;"gi|16120762|ribosomal-protein":0:127:136:1 -q50_p5_terms=R,E -q50_p6=1,1199.357361,-0.419871,2,AVESGDKKPLR,8,0000000000000,2.50,20000000000000000,0,0;"gi|16762847|30S_ribosomal_sub":0:22:32:1,"gi|33357896|S_Chain_S,_Real_S":0:21:31:1 -q50_p6_terms=K,T:K,T -q50_p7=1,1197.339645,1.597845,2,NRYLIFDEK,8,00000000000,2.18,00020000000000000,0,0;"gi|23481646|Ribosomal_protein":0:275:283:2 -q50_p7_terms=K,N -q50_p8=1,1197.381149,1.556341,2,ELVDNAPKALK,8,0000000000000,1.72,00200000000000000,0,0;"gi|16799360|ribosomal_protein":0:85:95:1 -q50_p8_terms=K,E -q50_p9=1,1197.341354,1.596136,2,IAGVDIPNDKR,8,0000000000000,1.72,00200000000000000,0,0;"gi|15674311|30S_ribosomal_pro":0:4:14:1 -q50_p9_terms=R,V -q50_p10=0,1198.412262,0.525228,2,WISMGSSCTVK,8,0000000000000,1.63,20000000000000000,0,0;"gi|320046|VGXR49_glycoprotein":0:184:194:1 -q50_p10_terms=K,V -q51_p1=1,1211.457230,1.531168,2,VLLRLSNLQR,5,000000000000,3.59,00000020000000000,0,0;"gi|4895079|thrombospondin_4":0:29:38:1 -q51_p1_terms=R,G -q51_p2=0,1213.385452,-0.397054,2,EWKPVTQLGR,6,000000000000,1.53,20000000000000000,0,0;"gi|29841159|similar_to_GenBan":0:39:48:1 -q51_p2_terms=K,L -q51_p3=0,1214.368546,-1.380148,2,CNTPTYCDLGK,5,0000000000000,1.42,00020000000000000,0,0;"gi|27807415|voltage-dependent":0:2:12:1 -q51_p3_terms=M,A -q52_p1=0,1837.146729,-1.801530,5,DYLHLPPEIVPATLCR,10,000000000000000000,14.57,00200200000000000,0,0;"gi|13639605|similar_to_40S_ri":0:81:96:1 -q52_p1_terms=R,S -q52_p2=1,1837.148666,-1.803467,3,TSPATMQVQKKPPPAGAK,10,00000000000000000000,2.99,00020000000000000,0,0;"gi|516062|tau_protein":0:172:189:1 -q52_p2_terms=K,S -q52_p3=0,1836.009735,-0.664536,3,VLGSQEALHPVHYEEK,13,000000000000000000,2.64,00020000000000000,0,0;"gi|1085440|S07573_amine_oxida":0:139:154:1 -q52_p3_terms=K,N -q52_p4=0,1836.971252,-1.626053,2,YTNGFNVSELEDACFK,7,000000000000000000,1.72,00200000000000000,0,0;"gi|11870042|12.7_kDa_putative":0:13:28:1,"gi|138942|VNS2_CVBM_Nonstruct":0:13:28:1 -q52_p4_terms=R,F:R,F -q52_p5=0,1834.933731,0.411468,2,EEGAGLGFSLAGGADLENK,7,000000000000000000000,1.52,00000200000000000,0,0;"gi|5002198|AF143203_1_interle":0:168:186:1 -q52_p5_terms=K,V -q52_p6=1,1835.110947,0.234252,2,LRIGNSDFFITLPVSR,13,000000000000000000,1.20,20000000000000000,0,0;"gi|32528235|interphotorecepto":0:171:186:1 -q52_p6_terms=K,S -q52_p7=0,1834.932358,0.412841,2,LSHFVVGEPEDGYEEK,7,000000000000000000,1.03,00200000000000000,0,0;"gi|30157963|similar_to_riboso":0:369:384:1 -q52_p7_terms=K,G -q52_p8=1,1834.126251,1.218948,2,LRIGQSNFFLTVPVSR,16,000000000000000000,0.73,00020000000000000,0,0;"gi|29653252|interphotorecepto":0:228:243:1 -q52_p8_terms=K,S -q52_p9=1,1834.035019,1.310180,2,GSGIIKINNEEDLYIR,10,000000000000000000,0.32,00000200000000000,0,0;"gi|23485635|ribosomal_protein":0:193:208:1 -q52_p9_terms=R,W -q52_p10=1,1834.150848,1.194351,2,QKQNHPIPQWIWMK,10,0000000000000000,0.23,00000020000000000,0,0;"gi|30153088|similar_to_riboso":0:17:30:1 -q52_p10_terms=K,T -q53_p1=1,1903.209824,1.883911,4,SYAGATLRQPLSPALMAR,9,00000000000000000000,9.67,20200000000000000,0,0;"gi|23119459|COG1020:_Non-ribo":0:283:300:1 -q53_p1_terms=R,L -q53_p2=1,1903.140121,1.953614,2,NITEIADLNQKIFDLR,6,000000000000000000,4.49,00200000000000000,0,0;"gi|136210|TRIC_BOVIN_Troponin":0:122:137:1 -q53_p2_terms=K,G -q53_p3=1,1905.109833,-0.016098,4,LGEYKEPILAAGSDGVGTK,19,000000000000000000000,4.46,00020020000000000,0,0;"gi|6705949|5'-phosphoribosyl-":0:48:66:1 -q53_p3_terms=K,L -q53_p4=1,1905.197632,-0.103897,2,EYYLLHKPPKTISSTK,9,000000000000000000,3.31,00000000200000000,0,0;"gi|15828808|RIBOSOMAL_LARGE_S":0:61:76:1 -q53_p4_terms=K,D -q53_p5=1,1903.276245,1.817490,4,AVEIAPRPVAGLLRSVVR,18,00000000000000000000,3.28,00200000200000000,0,0;"gi|28894834|Ribosomal_protein":0:43:60:1 -q53_p5_terms=K,C -q53_p6=0,1904.105362,0.988373,2,EWLEVGQDVVDAVSVCR,9,0000000000000000000,3.01,00000200000000000,0,0;"gi|15599019|S-adenosylmethion":0:224:240:1 -q53_p6_terms=R,A -q53_p7=1,1904.171448,0.922287,5,RYMGTSGLFGSAESCLPK,21,00000000000000000000,2.68,20200000000000000,0,0;"gi|29827385|putative_non-ribo":0:365:382:1 -q53_p7_terms=R,V -q53_p8=1,1903.170029,1.923706,2,VQGGGFMGQAEAARIAIAR,18,000000000000000000000,2.57,00000000200000000,0,0;"gi|14520749|SSU_ribosomal_pro":0:66:84:1 -q53_p8_terms=K,A -q54_p1=0,1324.525421,-1.069982,2,GGIIEPSLQALAR,5,000000000000000,4.67,00020000000000000,0,0;"gi|20330759|AC103891_2_Putati":0:75:87:1 -q54_p1_terms=R,K -q54_p2=1,1324.595261,-1.139822,2,QVVHMLSQRVK,5,0000000000000,4.67,20000000000000000,0,0;"gi|27806273|chemokine_(C-C_mo":0:84:94:1 -q54_p2_terms=K,R -q54_p3=1,1324.439560,-0.984121,2,SGGGLSESFTVRK,5,000000000000000,4.67,20000000000000000,0,0;"gi|15889957|AGR_C_4900p":0:56:68:1 -q54_p3_terms=R,I -q54_p4=1,1324.510773,-1.055334,2,SHHPEFMGRVK,5,0000000000000,4.67,20000000000000000,0,0;"gi|11258367|T51702_amidophosp":0:183:193:1 -q54_p4_terms=R,E -q54_p5=1,1324.484375,-1.028936,2,DKVSHEFVVHK,8,0000000000000,3.50,20000000000000000,0,0;"gi|20178479|CPXV115_protein":0:168:178:1 -q54_p5_terms=K,S -q54_p6=1,1324.525635,-1.070196,2,HAKAQEVIISTK,8,00000000000000,1.34,20000000000000000,0,0;"gi|14521719|LSU_ribosomal_pro":0:42:53:1 -q54_p6_terms=R,V -q54_p7=1,1324.399750,-0.944311,2,SSHPEDLRAANK,8,00000000000000,1.12,00000020000000000,0,0;"gi|9558729|ADP-ribosylation_f":0:184:195:1 -q54_p7_terms=K,L -q55_p1=0,1355.584244,-0.896510,4,MFCHAAQSLGYK,5,00000000000000,7.77,00200020000000000,0,0;"gi|33595872|phosphoribosylami":0:27:38:1 -q55_p1_terms=R,V -q55_p2=1,1353.604935,1.082799,4,YYGAPKVITTIK,14,00000000000000,3.90,20000020000000000,0,0;"gi|10121780|polyprotein":0:6:17:1 -q55_p2_terms=K,A -q55_p3=1,1353.441071,1.246663,2,RGAPVGPSGDPTSR,8,0000000000000000,3.62,00020000000000000,0,0;"gi|27719837|similar_to_a_disi":0:160:173:1 -q55_p3_terms=R,C -q55_p4=1,1353.586655,1.101079,2,LNCSQSKSLVFK,5,00000000000000,3.00,00000200000000000,0,0;"gi|13812014|60S_acidic_riboso":0:3:14:1 -q55_p4_terms=K,K -q55_p5=0,1355.577652,-0.889918,2,LPLAIVEDPNFK,5,00000000000000,3.00,00000000200000000,0,0;"gi|13471648|binding_protein_c":0:309:320:1 -q55_p5_terms=K,A -q55_p6=1,1356.610229,-1.922495,3,SNSLILKNINIK,11,00000000000000,2.01,00000000200000000,0,0;"gi|11467728|ribosomal_protein":0:30:41:1 -q55_p6_terms=K,N -q55_p7=1,1353.566940,1.120794,2,QTKPAAATKAAPAK,16,0000000000000000,1.91,20000000000000000,0,0;"gi|28828264|similar_to_Gallus":0:19:32:1 -q55_p7_terms=K,T -q55_p8=1,1356.489532,-1.801798,4,RFQAHTAQIER,18,0000000000000,0.55,00020000200000000,0,0;"gi|25028013|putative_30S_ribo":0:422:432:2 -q55_p8_terms=R,R -q55_p9=1,1354.616165,0.071569,2,FNYKSIMQVPK,5,0000000000000,0.52,00020000000000000,0,0;"gi|132987|RL5_BACST_50S_ribos":0:20:30:1 -q55_p9_terms=K,I -q55_p10=1,1355.625656,-0.937922,2,VWIFKGEVLHK,8,0000000000000,0.37,00000200000000000,0,0;"gi|32266883|ribosomal_protein":0:200:210:2 -q55_p10_terms=K,G -q56_p1=0,1408.552536,-1.898250,4,DTFLNQELSTLK,14,00000000000000,4.91,00000200200000000,0,0;"gi|9695410|ribosomal_protein_":0:144:155:1 -q56_p1_terms=K,I -q56_p2=0,1408.597244,-1.942958,3,YTVIGNPLPYGSK,14,000000000000000,4.26,00000200000000000,0,0;"gi|484967|PN0528_G_protein-co":0:11:23:1 -q56_p2_terms=R,M -q56_p3=0,1405.594940,1.059346,3,TNLFISEIQVNK,12,00000000000000,4.04,00000000200000000,0,0;"gi|11466743|ribosomal_protein":0:74:85:1 -q56_p3_terms=K,G -q56_p4=1,1405.618347,1.035939,2,TEQEVMKYLHK,4,0000000000000,3.80,00000200000000000,0,0;"gi|27688675|similar_to_60S_RI":0:334:344:1 -q56_p4_terms=K,N -q56_p5=0,1405.679367,0.974919,3,YFNFFPIFLVV,12,0000000000000,3.17,00000200000000000,0,0;"gi|23484450|ribosomal_protein":0:161:171:1 -q56_p5_terms=R,- -q56_p6=1,1406.500259,0.154027,2,ASGGVRNLEDFNK,8,000000000000000,1.92,00000020000000000,0,0;"gi|15923128|deoxyribose-phosp":0:181:193:2,"gi|21281841|deoxyribose-phosp":0:181:193:2 -q56_p6_terms=K,M:K,M -q56_p7=1,1406.689163,-0.034877,4,ILESGPFVSCVKK,12,000000000000000,1.91,00200200000000000,0,0;"gi|29135265|transferrin":0:48:60:1 -q56_p7_terms=R,T -q56_p8=1,1405.469269,1.185017,2,QNEEPVFSKDGR,12,00000000000000,1.06,00020000000000000,0,0;"gi|284605|A41793_dipeptidyl_a":0:371:382:2 -q56_p8_terms=R,K -q56_p9=0,1408.640335,-1.986049,4,FDPTAITIVYLR,12,00000000000000,0.36,00220000000000000,0,0;"gi|7635738|L12_ribosomal_prot":0:5:16:1 -q56_p9_terms=K,V -q57_p1=1,2220.397476,-1.938507,4,DNASVIVGSVAGRFFPDPDTR,12,00000000000000000000000,2.91,00020000200000000,0,0;"gi|28868666|phosphoribosylfor":0:256:276:1 -q57_p1_terms=K,Q -q57_p2=1,2217.414825,1.044144,2,WSEISYKANNYQYTYMR,6,0000000000000000000,2.81,00200000000000000,0,0;"gi|287435|VP4":0:290:306:1,"gi|549415|VP4_ROTBA_Outer_cap":0:290:306:1 -q57_p2_terms=K,D:K,D -q57_p3=0,2216.574265,1.884704,2,WPEIPPQGFLVEAFVPYVK,6,000000000000000000000,1.11,00000200000000000,0,0;"gi|22298801|phosphoribosylami":0:163:181:1 -q57_p3_terms=R,E -q58_p1=1,2356.626450,0.445188,4,LEELSGEFYTVIPHDFGFKK,7,0000000000000000000000,9.37,00200000200000000,0,0;"gi|30679124|NAD+_ADP-ribosylt":0:352:371:1 -q58_p1_terms=R,M -q58_p2=1,2356.610062,0.461576,2,MELNQFPDGETHVKVLEDVR,4,0000000000000000000000,2.90,00000000200000000,0,0;"gi|29840327|ribose-phosphate_":0:31:50:1 -q58_p2_terms=R,G -q58_p3=1,2358.562622,-1.490984,3,YQQLNSERGVPNENIENLIK,11,0000000000000000000000,1.71,00000200000000000,0,0;"gi|5107505|Bovine_Lipocalin_A":0:131:150:1 -q58_p3_terms=K,T -q58_p4=1,2355.598740,1.472898,2,VDHDEVLLDIGYKTEGVIPSR,11,00000000000000000000000,1.47,00000020000000000,0,0;"gi|25028013|putative_30S_ribo":0:44:64:1 -q58_p4_terms=K,E -q58_p5=1,2355.626740,1.444898,2,APGPDLEYPRFHAMGDAELLR,7,00000000000000000000000,0.77,00000200000000000,0,0;"gi|15597498|probable_non-ribo":0:1989:2009:1 -q58_p5_terms=R,T -q58_p6=1,2356.594757,0.476881,2,EPPGWALWWRGGGPTFTDAVR,13,00000000000000000000000,0.67,00000200000000000,0,0;"gi|30150275|similar_to_riboso":0:151:171:1 -q58_p6_terms=K,H -q58_p7=1,2357.578140,-0.506502,3,AQGYSGLSVKVVNSTTGPGEHLR,13,0000000000000000000000000,0.07,00000200000000000,0,0;"gi|33340123|AF309630_1_thromb":0:1055:1077:1 -q58_p7_terms=R,N -q59_p1=1,1729.992279,0.008443,4,NNVTPDMMEEMYKK,8,0000000000000000,14.08,20000000200000000,0,0;"gi|7440743|S50100_ribosomal_p":0:42:55:1 -q59_p1_terms=K,A -q59_p2=1,1728.921249,1.079473,4,VLEINVRDCDPGAEAK,12,000000000000000000,10.89,00020200000000000,0,0;"gi|11498757|phosphoribosylami":0:322:337:1 -q59_p2_terms=K,L -q59_p3=0,1729.008926,0.991796,2,IYVMATHGILSAEAPR,6,000000000000000000,4.82,20000000000000000,0,0;"gi|11968140|phosphoribosylpyr":0:280:295:1 -q59_p3_terms=K,L -q59_p4=0,1730.098267,-0.097545,2,EVVVPLNMELMGTVAK,8,000000000000000000,4.16,00000000200000000,0,0;"gi|27806189|vascular_endothel":0:51:66:1 -q59_p4_terms=R,Q -q59_p5=0,1729.884338,0.116384,2,GELENADLVVLWTDR,8,00000000000000000,4.08,00020000000000000,0,0;"gi|30794286|dopamine_beta-hyd":0:86:100:1 -q59_p5_terms=R,D -q59_p6=1,1731.047852,-1.047130,2,MNGLSYSRFMNGILK,6,00000000000000000,3.58,00000200000000000,0,0;"gi|22997825|hypothetical_prot":0:71:85:1 -q59_p6_terms=R,C -q59_p7=0,1729.889130,0.111592,2,GYWGTNLGQPHSLATK,6,000000000000000000,3.52,20000000000000000,0,0;"gi|6321315|Homology_to_rat_S2":0:142:157:1 -q59_p7_terms=R,T -q59_p8=1,1729.889450,0.111272,2,QAVKTQPSSVSGSLGQR,12,0000000000000000000,2.46,20000000000000000,0,0;"gi|2323378|immunoglobulin_lig":0:1:17:1 -q59_p8_terms=-,V -q59_p9=1,1729.045334,0.955388,2,LDVTLDGYCKLFITK,12,00000000000000000,1.20,20000000000000000,0,0;"gi|26008092|coronavirus_nsp11":0:61:75:1,"gi|17529672|AF220295_2_RNA_po":0:1587:1601:2 -q59_p9_terms=K,E:K,E -q59_p10=1,1728.941147,1.059575,2,SQAEVDVKGIIISVDR,8,000000000000000000,0.46,00200000000000000,0,0;"gi|557066|putative_ortho_phos":0:30:45:1 -q59_p10_terms=K,M -q60_p1=-1 -q61_p1=1,1841.966324,1.225072,2,DYRLTYYTPEYETK,4,0000000000000000,5.54,00020000000000000,0,0;"gi|18920474|AF408250_1_ribulo":0:3:16:1 -q61_p1_terms=K,D -q62_p1=0,3352.046310,0.961608,6,VWGACVLCLLGPLPIVLGHVHPECDVITQLR,14,000000000000000000000000000000000,8.07,00220000200000000,0,0;"gi|6009553|growth_hormone-rel":0:5:35:1 -q62_p1_terms=R,E -q62_p2=0,3352.713455,0.294463,3,CVQGVCVCHVGYSGEDCGQEEPPASACPGGCGPR,9,000000000000000000000000000000000000,6.15,00000000200000000,0,0;"gi|27807269|tenascin_X":0:661:694:1 -q62_p2_terms=R,E -q62_p3=0,3353.616913,-0.608995,4,EMDIYADLDFINLSSYGNETISSGEVQLTK,9,00000000000000000000000000000000,4.60,00200000200000000,0,0;"gi|28377430|hypoxanthine-guan":0:54:83:1 -q62_p3_terms=R,D -q62_p4=1,3352.748154,0.259764,2,RLGIPVVAPLDTNCDPDMVDYPIPGNDDAIR,9,000000000000000000000000000000000,3.75,00020000000000000,0,0;"gi|32266571|ribosomal_protein":0:176:206:1 -q62_p4_terms=R,S -q62_p5=0,3352.708298,0.299620,2,LAAAAAALAALAAPTAAGAGGPPVLATAPPGGDGDGGSVR,5,000000000000000000000000000000000000000000,3.18,00000020000000000,0,0;"gi|9629846|ICP18.5_assembly_p":0:278:317:1 -q62_p5_terms=R,E -q62_p6=1,3353.868423,-0.860505,2,VLGLAGAYQKPESGGVNILSGPLGFLVKQFHR,11,0000000000000000000000000000000000,2.48,00000020000000000,0,0;"gi|9629845|major_DNA_binding_":0:795:826:1 -q62_p6_terms=R,K -q62_p7=0,3354.614960,-1.607042,2,LPXPQDVAQCLEVGSFDTPPFYSNSTNSFR,12,00000000000000000000000000000000,0.82,00200000000000000,0,0;"gi|15150345|AF400250_1_tyrosi":0:327:356:1 -q62_p7_terms=R,N -q62_p7_subst=3,X,H -q62_p8=1,3353.905136,-0.897218,2,LLAYVIFTSGSTGVPKGVMVEQAGMLNNQLSK,13,0000000000000000000000000000000000,0.24,00000020000000000,0,0;"gi|26990912|non-ribosomal_pep":0:2156:2187:1 -q62_p8_terms=K,L -q63_p1=1,2294.517349,-0.142603,3,NARNVYVATTFSFFTEGLEK,5,0000000000000000000000,15.19,00200000000000000,0,0;"gi|18310531|probable_phosphor":0:275:294:1 -q63_p1_terms=R,F -q63_p2=1,2293.517548,0.857198,2,EAPGTLSHQCPGVLRSWPSDR,5,00000000000000000000000,5.50,20000000000000000,0,0;"gi|30157251|similar_to_60S_RI":0:2:22:1 -q63_p2_terms=M,I -q63_p3=1,2294.580231,-0.205485,2,SQMEDVSILQITLKEFQER,8,000000000000000000000,4.22,00000200000000000,0,0;"gi|30794356|RPGR-interacting_":0:297:315:1 -q63_p3_terms=K,V -q63_p4=1,2293.577240,0.797506,2,NMGMIVINEGSLDGTRETLSR,5,00000000000000000000000,4.11,00000000200000000,0,0;"gi|27807317|ATPase,_aminophos":0:690:710:1 -q63_p4_terms=K,H -q63_p5=1,2294.461060,-0.086314,2,DSPGQQGISACDVDHRPVEKR,8,00000000000000000000000,3.82,00000200000000000,0,0;"gi|27719837|similar_to_a_disi":0:868:888:1 -q63_p5_terms=R,A -q63_p6=1,2292.587311,1.787435,2,LSTQIEPQRNLTVQPLLDIN,8,0000000000000000000000,3.45,00000000200000000,0,0;"gi|17974988|G6R":0:44:63:1 -q63_p6_terms=K,- -q63_p7=1,2292.607391,1.767355,2,FFFFFSSWFSTDKMAPTAK,8,000000000000000000000,2.68,00020000000000000,0,0;"gi|4378008|ribosomal_protein_":0:1:19:1 -q63_p7_terms=-,T -q63_p8=1,2293.358658,1.016088,2,QPDTEVDGFSELRWDDQQK,8,000000000000000000000,2.60,00200000000000000,0,0;"gi|6978455|ADP-ribosyltransfe":0:66:84:1 -q63_p8_terms=R,V -q63_p9=0,2292.633835,1.740911,2,VEVCSLLLSHGADPTLVNCHGK,8,000000000000000000000000,2.48,00000000200000000,0,0;"gi|28201974|tankyrase,_TRF1-i":0:97:118:1,"gi|27672119|similar_to_Tankyr":0:18:39:1 -q63_p9_terms=R,S:R,S -q63_p10=1,2295.442444,-1.067698,2,SDTGPLDPECDCYTCRNYSR,9,0000000000000000000000,0.70,00000000200000000,0,0;"gi|24111784|queuine_tRNA-ribo":0:293:312:1 -q63_p10_terms=K,A -q64_p1=1,2651.047318,0.750278,4,ASTVERLVTALHTLLQDMVAAPASR,7,000000000000000000000000000,10.63,00200200000000000,0,0;"gi|26990912|non-ribosomal_pep":0:452:476:1 -q64_p1_terms=K,L -q64_p2=1,2652.038727,-0.241131,2,ARSEAVAEALLAAGVRPGQAVAVMTGR,7,00000000000000000000000000000,2.82,00200000000000000,0,0;"gi|15597498|probable_non-ribo":0:481:507:1 -q64_p2_terms=R,N -q64_p3=1,2651.028641,0.768955,2,YYLVNFWQCYFYMWSQPRR,10,000000000000000000000,1.74,00000200000000000,0,0;"gi|27448849|ribosomal_maturas":0:300:318:1,"gi|2734738|ribosomal_maturase":0:300:318:1,"gi|3089291|ribosomal_maturase":0:300:318:1,"gi|2734800|ribosomal_maturase":0:300:318:1,"gi|27805529|MATK_RHOTS_Matura":0:300:318:1 -q64_p3_terms=K,I:K,I:K,I:K,I:K,I -q64_p4=1,2650.042343,1.755253,2,RPKNFGIALSVPPAINQFPQALDR,7,00000000000000000000000000,1.30,00200000000000000,0,0;"gi|27678402|similar_to_riboso":0:35:58:1 -q64_p4_terms=K,Q -q64_p5=1,2652.134521,-0.336925,2,EKAYIPELQISFMEHIAMPIYK,7,000000000000000000000000,0.55,00000000200000000,0,0;"gi|27806053|c-GMP_stimulated_":0:831:852:2 -q64_p5_terms=R,L -q64_p6=1,2652.031952,-0.234356,2,ESASVTCLVKGFAPADVFVQWLQR,10,00000000000000000000000000,0.38,20000000000000000,0,0;"gi|28592070|IgM_heavy_chain_c":0:346:369:1 -q64_p6_terms=R,G -q64_p7=1,2652.956940,-1.159344,2,SGASVTIECRALDFQASNMFWYR,10,0000000000000000000000000,0.28,20000000000000000,0,0;"gi|6687000|T-cell_receptor_be":0:13:35:1 -q64_p7_terms=K,Q ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="proteins" - -"gi|23119459|COG1020:_Non-ribo"=45968.84,"gi|23119459|ref|ZP_00102537.1| COG1020: Non-ribosomal peptide synthetase modules and related protei" -"gi|33241155|Ribosomal_protein"=27403.05,"gi|33241155|ref|NP_876097.1| Ribosomal protein S3 [Prochlorococcus marinus subsp. marinus str. CCMP" -"gi|3914699|RL4_PIG_60S_RIBOSO"=11108.02,"gi|3914699|sp|Q29187|RL4_PIG 60S RIBOSOMAL PROTEIN L4 (L1) [MASS=11115]" -"gi|11496544|ribosomal_protein"=32958.51,"gi|11496544|ref|NP_044554.1| ribosomal protein S5 [Toxoplasma gondii]" -"gi|12644020|VWF_BOVIN_Von_Wil"=102598.52,"gi|12644020|sp|P80012|VWF_BOVIN Von Willebrand factor precursor (vWF)" -"gi|15889217|AGR_C_3516p"=15394.49,"gi|15889217|ref|NP_354898.1| AGR_C_3516p [Agrobacterium tumefaciens]" -"gi|29347323|nicotinate_phosph"=45318.21,"gi|29347323|ref|NP_810826.1| nicotinate phosphoribosyltransferase [Bacteroides thetaiotaomicron VPI" -"gi|15597620|probable_non-ribo"=480291.05,"gi|15597620|ref|NP_251114.1| probable non-ribosomal peptide synthetase [Pseudomonas aeruginosa PA01" -"gi|30148903|similar_to_60S_ri"=21733.09,"gi|30148903|ref|XP_301131.1| similar to 60S ribosomal protein L13 (A52) [Homo sapiens] [MASS=21733]" -"gi|15599453|30S_ribosomal_pro"=25837.74,"gi|15599453|ref|NP_252947.1| 30S ribosomal protein S3 [Pseudomonas aeruginosa PA01]" -"gi|13639605|similar_to_40S_ri"=15208.64,"gi|13639605|ref|XP_016113.1| similar to 40S ribosomal protein S10 [Homo sapiens] [MASS=15209]" -"gi|30519439|F9L_protein"=116876.68,"gi|30519439|emb|CAD90614.1| F9L protein [Cowpox virus] [MASS=116878]" -"gi|4895079|thrombospondin_4"=95338.75,"gi|4895079|gb|AAD32714.1| thrombospondin 4 [Mus musculus] [MASS=95340]" -"gi|30679124|NAD+_ADP-ribosylt"=72174.83,"gi|30679124|ref|NP_192148.2| NAD+ ADP-ribosyltransferase [Arabidopsis thaliana]" -"gi|16078254|similar_to_riboso"=20924.52,"gi|16078254|ref|NP_389071.1| similar to ribosomal-protein-alanine N-acetyltransferase [Bacillus sub" -"gi|20330759|AC103891_2_Putati"=19623.62,"gi|20330759|gb|AAM19122.1|AC103891_2 Putative ubiquitin / ribosomal protein CEP52 [Oryza sativa (ja" -"gi|33595872|phosphoribosylami"=41589.01,"gi|33595872|ref|NP_883515.1| phosphoribosylaminoimidazole carboxylase ATPase subunit [Bordetella pa" -"gi|15793154|50S_ribosomal_pro"=30097.28,"gi|15793154|ref|NP_282976.1| 50S ribosomal protein L2 [Neisseria meningitidis Z2491]" -"gi|15676072|50S_ribosomal_pro"=30124.30,"gi|15676072|ref|NP_273203.1| 50S ribosomal protein L2 [Neisseria meningitidis MC58]" -"gi|33593190|30S_ribosomal_pro"=8534.91,"gi|33593190|ref|NP_880834.1| 30S ribosomal protein S21 [Bordetella pertussis]" -"gi|15644001|phosphoribosylfor"=23587.86,"gi|15644001|ref|NP_229050.1| phosphoribosylformylglycinamidine synthase I [Thermotoga maritima]" -"gi|33152180|50S_ribosomal_pro"=15363.46,"gi|33152180|ref|NP_873533.1| 50S ribosomal protein L9 [Haemophilus ducreyi 35000HP]" -"gi|18310531|probable_phosphor"=41628.98,"gi|18310531|ref|NP_562465.1| probable phosphoribosyl pyrophosphate synthetase [Clostridium perfring" -"gi|9629858|UL15_protein"=78902.20,"gi|9629858|ref|NP_045342.1| UL15 protein [Bovine herpesvirus 1]" -"gi|23335713|hypothetical_prot"=28219.95,"gi|23335713|ref|ZP_00120946.1| hypothetical protein [Bifidobacterium longum DJO10A]" -"gi|26992011|phosphoribosylami"=38701.83,"gi|26992011|ref|NP_747436.1| phosphoribosylaminoimidazole carboxylase, ATPase subunit [Pseudomonas " -"gi|442754|A_Chain_A,_Superoxi"=15551.15,"gi|442754|pdb|1COB|A Chain A, Superoxide Dismutase (Co Substituted) (E.C.1.15.1.1)" -"gi|26990912|non-ribosomal_pep"=287551.01,"gi|26990912|ref|NP_746337.1| non-ribosomal peptide synthetase domain protein, putative [Pseudomonas" -"gi|21493019|NADH_dehydrogenas"=39188.70,"gi|21493019|ref|NP_660091.1| NADH dehydrogenase subunit 2 [Macroscelides proboscideus] [MASS=39189]" -"gi|15673500|bifunctional_puri"=57093.59,"gi|15673500|ref|NP_267674.1| bifunctional purine biosynthesis protein PurH [Lactococcus lactis subs" -"gi|23481646|Ribosomal_protein"=70273.85,"gi|23481646|gb|EAA17859.1| Ribosomal protein L15 amino terminal region, putative [Plasmodium yoelii" -"gi|18920474|AF408250_1_ribulo"=48170.01,"gi|18920474|gb|AAL82222.1|AF408250_1 ribulose 1,5-bisphosphate carboxylase/oxygenase large subunit " -"gi|6009553|growth_hormone-rel"=44867.99,"gi|6009553|dbj|BAA84959.1| growth hormone-releasing hormone receptor short form [Bos taurus] [MASS=" -"gi|23120335|COG1020:_Non-ribo"=37954.08,"gi|23120335|ref|ZP_00103040.1| COG1020: Non-ribosomal peptide synthetase modules and related protei" -"gi|30157963|similar_to_riboso"=60343.86,"gi|30157963|ref|XP_301405.1| similar to ribosomal protein L29 [Homo sapiens] [MASS=60345]" -"gi|18313949|orotate_phosphori"=20606.40,"gi|18313949|ref|NP_560616.1| orotate phosphoribosyltransferase (pyrE) [Pyrobaculum aerophilum]" -"gi|13541175|50S_ribosomal_pro"=17769.57,"gi|13541175|ref|NP_110863.1| 50S ribosomal protein L18 [Thermoplasma volcanium]" -"gi|998744|ribosomal_protein_L"=2528.57,"gi|998744|gb|AAB34186.1| ribosomal protein L32 {N-terminal} [Brevundimonas vesicularis, Peptide Par" -"gi|30262377|nonribosomal_pept"=267413.79,"gi|30262377|ref|NP_844754.1| nonribosomal peptide synthetase DhbF [Bacillus anthracis str. Ames]" -"gi|27694896|similar_to_mitoch"=12246.56,"gi|27694896|ref|XP_227601.1| similar to mitochondrial ribosomal protein S17 [Mus musculus] [Rattus " -"gi|7440743|S50100_ribosomal_p"=12965.81,"gi|7440743|pir||S50100 ribosomal protein L5, cytosolic - mouse (fragments) [MASS=12966]" -"gi|27677506|similar_to_riboso"=52684.05,"gi|27677506|ref|XP_222771.1| similar to ribosomal protein L7, cytosolic [validated] - rat [Rattus n" -"gi|1685374|ribosomal_protein_"=30582.05,"gi|1685374|gb|AAB36825.1| ribosomal protein L2 [Borrelia burgdorferi] [MASS=30582]" -"gi|11036695|putative_L2_ribos"=9555.07,"gi|11036695|gb|AAG27266.1| putative L2 ribosomal protein [Brachyspira pilosicoli] [MASS=9555]" -"gi|7545323|mucin"=54863.42,"gi|7545323|gb|AAB35070.2| mucin [Bos taurus] [MASS=54864]" -"gi|5002198|AF143203_1_interle"=40226.78,"gi|5002198|gb|AAD37356.1|AF143203_1 interleukin-16 [Bos indicus] [MASS=40227]" -"gi|21244404|ribosomal_RNA_sma"=38846.62,"gi|21244404|ref|NP_643986.1| ribosomal RNA small subunit methyltransferase C [Xanthomonas axonopodi" -"gi|120460|FOL1_BOVIN_Milk_fol"=25825.61,"gi|120460|sp|P02702|FOL1_BOVIN Milk folate-binding protein (FBP) (Folate receptor alpha)" -"gi|30519569|B18R_protein"=94692.90,"gi|30519569|emb|CAD90744.1| B18R protein [Cowpox virus] [MASS=94694]" -"gi|9695410|ribosomal_protein_"=23229.33,"gi|9695410|ref|NP_037632.1| ribosomal protein S2 [Phytophthora infestans]" -"gi|32411611|40S_RIBOSOMAL_PRO"=14820.17,"gi|32411611|ref|XP_326286.1| 40S RIBOSOMAL PROTEIN S22 (S15A) (YS24) [Neurospora crassa]" -"gi|4689022|ribosomal_protein_"=10863.93,"gi|4689022|emb|CAA80880.2| ribosomal protein A1 [Schizosaccharomyces pombe] [MASS=10864]" -"gi|32033887|COG0359:_Ribosoma"=15255.26,"gi|32033887|ref|ZP_00134158.1| COG0359: Ribosomal protein L9 [Actinobacillus pleuropneumoniae serov" -"gi|15011859|C-terminal_bindin"=46627.68,"gi|15011859|ref|NP_062074.2| C-terminal binding protein 1 [Rattus norvegicus]" -"gi|28868666|phosphoribosylfor"=140645.30,"gi|28868666|ref|NP_791285.1| phosphoribosylformylglycinamidine synthase [Pseudomonas syringae pv. t" -"gi|23306478|50S_ribosomal_pro"=14385.61,"gi|23306478|gb|AAM08940.1| 50S ribosomal protein L22 [Mycoplasma hominis] [MASS=14386]" -"gi|16273244|cell_division_pro"=23407.72,"gi|16273244|ref|NP_439485.1| cell division protein [Haemophilus influenzae Rd]" -"gi|29827410|putative_non-ribo"=57107.07,"gi|29827410|ref|NP_822044.1| putative non-ribosomal peptide synthetase [Streptomyces avermitilis MA" ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query1" - -title=CAexample_mini%2e0110%2e0110%2e1 -charge=1+ -mass_min=246.924800 -mass_max=588.970700 -int_min=802 -int_max=2.976e+04 -num_vals=14 -num_used1=-1 -Ions1=246.924800:2917,371.142600:2.976e+04,447.776600:5980,588.224900:1.329e+04,393.248400:1.629e+04,546.190400:5675,585.793200:6307,433.116900:6500,519.231000:2587,588.970700:894,400.087300:4295,456.096100:1441,410.767300:2367,447.006300:802 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query2" - -title=CAexample_mini%2e0068%2e0068%2e1 -charge=1+ -mass_min=220.415200 -mass_max=695.729600 -int_min=5 -int_max=3.266e+05 -num_vals=37 -num_used1=-1 -Ions1=236.752800:5164,321.439500:1.49e+04,503.142000:9154,591.252700:3.266e+05,220.415200:5012,370.838300:1.332e+04,459.325400:7185,547.131100:3.716e+04,221.148000:4746,396.948800:1.142e+04,493.265300:6551,529.326900:1.21e+04,308.977400:4622,415.256400:9993,440.659400:5673,573.090100:7046,265.001100:3949,353.071400:8589,508.712700:3082,590.436400:6433,264.038200:2292,326.772200:6981,498.038300:2378,563.917200:6020,238.902000:1539,354.931800:5667,485.201500:1824,586.983200:4863,283.264600:1005,386.892300:3428,548.104500:2770,598.495400:2533,551.232700:2458,589.214500:766,592.013200:5,677.221200:3376,695.729600:4083 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query3" - -title=CAexample_mini%2e0104%2e0104%2e1 -charge=1+ -mass_min=238.769600 -mass_max=605.793900 -int_min=2 -int_max=4.848e+04 -num_vals=23 -num_used1=-1 -Ions1=284.985500:8457,354.971200:4.848e+04,486.046800:3277,593.438200:5861,268.637800:4519,400.878200:3559,460.462000:1758,583.104500:4626,284.058100:2615,372.466200:2067,453.161400:1626,545.248500:4463,328.594000:1924,397.754800:778,591.408200:3026,238.769600:1266,605.793900:2859,240.302000:1003,592.181400:2134,310.140800:958,548.155600:1386,298.520100:957,285.600000:2 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query4" - -title=CAexample_mini%2e0036%2e0036%2e1 -charge=1+ -mass_min=224.999600 -mass_max=642.333900 -int_min=1 -int_max=5.755e+04 -num_vals=25 -num_used1=-1 -Ions1=284.770900:1.954e+04,354.991000:5.755e+04,488.895500:7147,556.488300:7268,238.687700:1.12e+04,372.699400:1.271e+04,454.795800:3413,595.166500:4375,268.978800:5470,344.463100:7303,463.623200:2240,591.197300:2836,282.866300:3481,418.612700:5094,496.265400:2103,574.146200:2646,224.999600:3396,414.964900:3310,267.094100:1647,370.850800:2853,424.433400:987,340.212000:462,355.606100:8,373.410500:1,642.333900:699 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query5" - -title=CAexample_mini%2e0022%2e0022%2e1 -charge=1+ -mass_min=255.688900 -mass_max=637.109000 -int_min=769 -int_max=3.71e+04 -num_vals=22 -num_used1=-1 -Ions1=255.688900:3816,434.351400:3.71e+04,506.193200:6074,602.371300:1.072e+04,259.154900:3136,384.085500:6315,500.651100:4730,612.690900:1.021e+04,313.280400:2240,405.928800:5021,523.039300:2056,603.287600:8327,270.697100:1322,417.313600:3580,471.156300:1408,595.847300:5851,310.341300:769,409.049900:2398,613.685700:3630,388.160800:1371,619.071900:3399,637.109000:1023 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query6" - -title=CAexample_mini%2e0054%2e0054%2e1 -charge=1+ -mass_min=187.201600 -mass_max=1041.259300 -int_min=1 -int_max=7.151e+05 -num_vals=85 -num_used1=-1 -Ions1=223.033500:2.189e+04,357.996300:4.414e+04,440.110400:7.151e+05,537.107900:1.488e+05,626.231000:2.705e+04,283.675000:1.881e+04,368.121200:3.143e+04,457.129100:4.845e+05,554.088700:2.465e+04,625.054700:2.408e+04,272.016500:1.58e+04,325.080600:2.947e+04,412.086100:9.074e+04,538.146200:1.81e+04,608.042000:2.244e+04,254.065600:1.497e+04,300.988500:2.835e+04,421.972500:6.947e+04,580.109900:1.768e+04,610.511000:1.731e+04,279.624800:1.06e+04,350.883800:2.754e+04,394.110400:6.197e+04,515.619600:9871,603.201200:9564,269.043600:1.008e+04,369.214900:2.663e+04,439.238600:5.566e+04,514.257300:8945,624.088400:6294,223.997300:9955,324.075900:1.44e+04,428.996600:3.997e+04,546.880600:6050,589.530900:2667,214.082200:9063,370.111100:1.356e+04,441.099800:1.822e+04,571.779100:944,612.204600:1378,285.242800:7582,343.147600:1.085e+04,394.885100:1.724e+04,590.185800:1073,267.164200:6972,342.240700:9047,411.301300:1.03e+04,608.799900:1,187.201600:6352,195.209700:4084,208.027000:4326,209.123900:5625,224.600000:1,237.213500:4485,239.155800:3728,239.935100:6907,265.979900:3395,267.968300:5437,284.333300:1,294.940700:3449,307.844000:6286,312.982100:7124,315.217500:1639,322.780500:5788,339.994100:448,340.938900:2737,348.771500:5860,353.104400:8866,358.766600:4,362.067600:2636,365.068600:5417,365.779300:6264,371.215800:4811,376.497200:3918,386.222400:7484,395.496600:2318,413.098300:3958,423.286000:3370,429.605100:13,452.987000:3977,458.072500:7051,487.199600:4115,682.928100:2027,695.615800:1.069e+04,1041.259300:4337 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query7" - -title=CAexample_mini%2e0106%2e0106%2e1 -charge=1+ -mass_min=238.407600 -mass_max=635.241500 -int_min=603 -int_max=7751 -num_vals=14 -num_used1=-1 -Ions1=238.407600:3132,400.042200:7751,490.349700:1697,635.241500:7198,409.040500:3673,493.706900:1111,565.036000:4817,399.227300:2996,590.441800:3003,437.994200:1442,627.167000:1312,417.801900:1006,570.874300:917,552.719000:603 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query8" - -title=CAexample_mini%2e0052%2e0052%2e1 -charge=1+ -mass_min=199.739300 -mass_max=637.149800 -int_min=2 -int_max=2.366e+07 -num_vals=69 -num_used1=-1 -Ions1=297.115500:4.087e+06,357.231900:2.366e+07,479.192400:4.089e+06,507.247500:5.326e+06,636.349200:3.372e+06,211.127900:1.15e+06,339.196000:4.752e+06,467.342800:2.798e+06,567.392700:1.266e+06,635.287400:2.497e+06,209.120700:8.935e+05,358.295800:2.576e+06,468.305000:2.252e+06,566.258500:1.26e+06,618.404800:3.353e+05,242.166600:7.437e+05,394.111100:9.412e+05,485.077800:2.008e+06,556.451400:1.165e+06,637.149800:2.76e+05,260.192700:5.276e+05,365.326200:9.067e+05,490.353000:1.66e+06,508.306100:1.109e+06,619.142100:1.66e+05,270.268900:4.491e+05,396.084500:8.038e+05,469.511400:1.394e+06,525.249800:1.08e+06,219.922700:4.054e+05,377.295800:7.785e+05,489.371200:9.712e+05,526.005100:2.548e+05,261.152600:3.243e+05,379.266400:6.771e+05,491.466600:5.862e+05,271.323900:2.275e+05,322.339800:6.766e+05,450.293800:4.612e+05,298.111700:1.905e+05,340.304700:6.167e+05,480.220700:4.376e+05,199.739300:1.793e+05,211.941300:1.541e+05,226.955800:1.478e+05,229.130100:1.376e+05,241.434400:1.383e+05,269.081900:1.018e+05,306.961000:5.034e+05,307.963300:1.451e+05,320.705300:3.647e+05,323.415000:1.453e+05,325.107200:3.923e+05,365.937000:206,393.038000:1.255e+05,411.237100:8.495e+04,420.127300:1.939e+05,421.048300:2.79e+05,448.627200:1.634e+05,449.640300:4.306e+05,455.360300:3.362e+05,459.147400:2.582e+05,462.263000:6.341e+04,466.635800:3.504e+05,470.162700:2,485.803300:10,492.139000:9,493.236800:1.71e+05,495.958000:4.424e+04 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query9" - -title=CAexample_mini%2e0114%2e0114%2e1 -charge=1+ -mass_min=307.355600 -mass_max=690.294100 -int_min=956 -int_max=1.853e+04 -num_vals=21 -num_used1=-1 -Ions1=401.341700:1.853e+04,498.986900:6643,547.348400:3014,635.426500:8829,307.355600:4949,438.972800:6406,637.223900:7757,395.127700:4566,481.041600:4656,619.028300:4136,400.083100:3121,438.080000:2315,609.018100:3089,308.509000:2468,456.526400:2232,636.450600:1451,490.289000:1825,617.288800:956,479.922400:1671,439.706100:1277,690.294100:2057 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query10" - -title=CAexample_mini%2e0076%2e0076%2e1 -charge=1+ -mass_min=197.623600 -mass_max=638.203400 -int_min=5 -int_max=7.549e+05 -num_vals=39 -num_used1=-1 -Ions1=226.066200:1.216e+05,337.138900:4.1e+04,412.163900:7.549e+05,541.228100:8.992e+04,637.258500:2.856e+04,227.128300:1.097e+04,394.287100:1.56e+04,467.984600:8.353e+04,522.998200:2.772e+04,618.310500:5130,243.930300:8782,315.218600:1.234e+04,413.151500:8.068e+04,542.068800:2.342e+04,635.720900:4906,296.979900:6749,354.942300:8012,469.047200:2.377e+04,526.093100:1.263e+04,636.334000:2925,247.981700:6024,298.149200:7319,478.415800:1.808e+04,555.233400:2460,638.203400:971,209.067900:4931,314.519200:2927,450.105200:1.729e+04,505.434000:2222,197.623600:2931,308.953000:2902,440.125300:2941,266.192900:1003,357.179900:2852,411.432000:2451,244.551000:5,394.892200:1049,487.265400:2195,494.047100:2100 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query11" - -title=CAexample_mini%2e0046%2e0046%2e1 -charge=1+ -mass_min=253.780200 -mass_max=646.474400 -int_min=2 -int_max=1.923e+04 -num_vals=39 -num_used1=-1 -Ions1=299.230000:6771,434.815400:1.125e+04,487.157100:6643,618.442900:1.923e+04,300.225800:5259,390.434300:1.011e+04,475.304000:6621,644.328000:1.518e+04,290.917200:3834,416.979200:9526,488.258200:5828,593.241200:1.237e+04,325.155600:2747,408.257400:9438,549.240500:4150,628.615700:8136,328.642500:1665,444.373600:2166,543.941500:3416,645.476100:6245,333.118100:1173,355.427600:2151,527.291000:1146,614.420400:5937,253.780200:1013,436.129600:1745,533.133500:1102,619.498800:5851,356.861100:1343,522.705000:728,646.474400:4839,392.647900:1058,489.033300:2,610.390900:3684,601.791000:2917,565.560800:1766,568.755500:1156,602.430900:582,626.458500:1407 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query12" - -title=CAexample_mini%2e0020%2e0020%2e1 -charge=1+ -mass_min=285.854800 -mass_max=718.956100 -int_min=801 -int_max=3.678e+04 -num_vals=36 -num_used1=-1 -Ions1=358.819000:2.646e+04,429.110100:3.678e+04,509.249000:9059,587.203600:6262,358.067100:7816,430.141600:2.724e+04,528.167700:8179,628.228500:5855,355.122200:7712,430.935700:4417,506.501500:7244,636.735600:5373,285.854800:7640,476.068000:3298,572.045800:7125,659.845000:3729,343.554900:5799,571.033400:2886,625.517300:3265,342.390300:4507,526.147800:950,673.874500:3110,355.955800:4125,621.544400:2648,359.544400:3963,607.463500:2512,340.616600:2535,622.494100:2494,294.853300:1659,668.757200:1448,360.989300:801,375.032200:866,654.385500:1383,667.399700:920,702.140100:1913,718.956100:2380 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query13" - -title=CAexample_mini%2e0102%2e0102%2e1 -charge=1+ -mass_min=376.955600 -mass_max=717.439600 -int_min=518 -int_max=7739 -num_vals=8 -num_used1=-1 -Ions1=376.955600:7739,503.332700:6026,635.007600:6151,704.974700:3209,392.781700:518,520.974400:1036,593.746800:4546,717.439600:3065 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query14" - -title=CAexample_mini%2e0144%2e0144%2e1 -charge=1+ -mass_min=240.930700 -mass_max=712.841300 -int_min=975 -int_max=8529 -num_vals=15 -num_used1=-1 -Ions1=258.985700:3973,379.507600:6958,498.820300:7923,610.901900:2309,688.243300:8529,240.930700:1732,430.742300:4702,488.065700:2999,706.323400:6132,534.717800:2292,712.841300:3980,514.917000:1724,707.259000:1202,668.694300:1093,711.378300:975 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query15" - -title=CAexample_mini%2e0112%2e0112%2e1 -charge=1+ -mass_min=437.800400 -mass_max=1493.881300 -int_min=1071 -int_max=1.496e+04 -num_vals=15 -num_used1=-1 -Ions1=476.860800:6705,538.075700:1.496e+04,660.835200:1.412e+04,743.583300:1071,437.800400:4275,539.084400:6550,674.042700:1.074e+04,465.086400:3604,586.428600:5530,709.705300:5738,499.452700:2594,735.073100:5206,671.305500:1688,727.505100:1252,1493.881300:1811 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query16" - -title=CAexample_mini%2e0142%2e0142%2e1 -charge=1+ -mass_min=258.191900 -mass_max=896.293500 -int_min=479 -int_max=2.043e+04 -num_vals=29 -num_used1=-1 -Ions1=306.245100:3814,361.067100:1.211e+04,540.984400:2.043e+04,560.826900:4450,667.531700:9146,319.912800:3136,394.932300:6677,547.315200:5619,558.316200:2833,694.417000:5899,258.191900:2248,384.018400:6241,499.379800:3692,614.358200:479,737.078100:2363,362.347000:5342,529.229500:3408,393.813400:3683,493.993000:3246,453.127500:3274,519.322600:2300,367.101100:2603,520.274900:2263,420.446500:2099,482.863500:1519,396.066200:1687,542.100100:726,430.141400:1264,896.293500:2072 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query17" - -title=CAexample_mini%2e0018%2e0018%2e2 -charge=2+,3+ -mass_min=129.198800 -mass_max=786.262700 -int_min=1 -int_max=2.007e+04 -num_vals=66 -num_used1=-1 -Ions1=151.173600:4829,233.626300:1.043e+04,402.452900:2.007e+04,453.112500:7521,621.854400:6009,640.080000:5784,786.262700:1212,216.634700:3223,293.462600:8630,393.071400:1.328e+04,451.986000:7196,574.076700:2669,707.875700:5435,129.198800:2191,244.101600:5870,368.120500:1.213e+04,464.104700:6132,557.455700:1421,655.522800:2770,196.491600:2120,313.082000:5587,354.243200:8760,471.008500:4010,594.186000:1126,675.283100:1418,142.809600:1537,312.048100:4191,370.692600:7395,443.956800:2780,595.403300:849,690.514900:1408,215.969700:835,296.533300:4102,387.348600:6922,435.254500:1270,298.027600:3274,396.564500:5368,429.727500:1138,326.795500:3212,394.227400:5110,446.310700:1082,253.357900:2703,350.898000:4947,464.777700:3,235.949200:2155,428.441200:4552,239.329200:1359,245.647700:1438,247.986100:1621,282.263100:1221,336.567700:1903,341.562500:1973,358.760000:2718,366.786500:715,368.866600:1,369.560700:2718,374.211100:1852,378.877800:2064,384.551300:1493,388.766800:4071,390.181900:3684,403.066700:1,406.442700:1768,413.246900:2252,414.059500:2390,427.344200:1735 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query18" - -title=CAexample_mini%2e0042%2e0042%2e2 -charge=2+,3+ -mass_min=179.910400 -mass_max=435.877900 -int_min=895 -int_max=9230 -num_vals=37 -num_used1=-1 -Ions1=270.164400:4962,372.905000:9230,400.418700:8084,192.110200:3174,304.525400:9031,399.151600:6605,179.910400:2844,319.782300:8971,388.021400:6495,202.162500:2514,346.598900:7814,402.891400:6071,180.917100:1567,378.689300:6579,433.459800:5859,356.823000:5268,427.522500:4406,373.758300:4307,390.258500:2938,363.566100:3528,415.198100:1860,344.432100:3345,416.239400:1722,364.873900:3266,393.764700:1675,288.116800:1551,303.815400:2627,321.891600:2599,335.845900:1078,336.794900:895,339.024500:2702,342.409400:2738,347.574300:1276,385.978000:1184,394.504600:1233,419.384500:1570,435.877900:1239 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query19" - -title=CAexample_mini%2e0086%2e0086%2e2 -charge=2+,3+ -mass_min=172.963900 -mass_max=625.523800 -int_min=3 -int_max=1.16e+05 -num_vals=36 -num_used1=-1 -Ions1=262.174400:5219,343.174300:6074,380.792100:1.16e+05,549.970000:3058,625.523800:1.122e+04,264.379900:1672,364.559600:3930,398.875700:2.063e+04,597.734600:715,238.057300:1511,290.604900:3440,405.055500:1.278e+04,172.963900:1125,333.531300:3009,379.776900:1.195e+04,215.060900:670,329.439500:1904,381.766800:1.097e+04,319.851300:1785,414.866000:9729,362.135400:1782,440.785900:6491,324.019200:1597,403.965700:5359,280.146100:1273,386.990400:4413,361.105700:1167,422.130900:4288,345.595800:866,377.664500:1745,379.025300:1564,382.425100:3832,402.672300:4211,405.705300:3,406.924000:2162,439.403700:2144 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query20" - -title=CAexample_mini%2e0004%2e0004%2e2 -charge=2+,3+ -mass_min=158.709000 -mass_max=717.351700 -int_min=268 -int_max=1.534e+05 -num_vals=50 -num_used1=-1 -Ions1=227.251600:6020,347.782200:9343,406.198900:1.534e+05,461.370400:7336,598.191700:3349,717.351700:4043,158.709000:4262,307.016500:7359,407.189000:5.536e+04,493.846300:2168,681.779900:1761,174.441500:3362,310.879500:6540,363.932700:1.807e+04,478.220500:1077,700.014400:1588,218.118200:3165,328.705200:6223,364.533300:8276,257.201000:3165,309.753100:5659,408.078200:4452,245.192000:2559,308.587200:4089,395.162800:4344,168.811100:2263,298.851600:2357,377.390600:4272,175.112400:1675,331.950000:1745,390.249600:3602,185.813400:1663,348.427100:1475,409.846200:2546,210.477200:1037,266.583400:1252,442.359700:2265,261.809600:268,269.070600:706,320.570100:671,323.291300:1166,360.077600:972,361.770900:490,365.233900:2116,381.311200:529,382.687200:1094,389.377000:1613,418.326200:953,423.470800:1316,443.946500:855 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query21" - -title=CAexample_mini%2e0048%2e0048%2e2 -charge=2+,3+ -mass_min=174.754300 -mass_max=463.529800 -int_min=1 -int_max=2.358e+04 -num_vals=38 -num_used1=-1 -Ions1=251.167200:6102,290.774400:2.358e+04,407.274700:2.01e+04,202.823100:4367,297.027200:8975,390.296600:8809,212.758700:4172,330.577600:8547,410.126100:6417,254.529700:3785,313.224600:6654,408.113800:4455,190.792700:3765,367.063700:6187,403.198600:4395,272.276300:2854,315.136600:4650,425.306900:3904,174.754300:2400,364.162700:4606,404.426900:3529,175.856100:1638,366.256500:4092,391.094800:2976,241.570100:780,337.434200:3068,401.685200:2001,305.996800:2758,463.529800:1921,304.893900:288,307.585900:687,314.474600:970,343.934900:1698,365.373400:2195,396.251300:1016,397.746900:1583,410.733300:1,411.587400:1057 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query22" - -title=CAexample_mini%2e0016%2e0016%2e2 -charge=2+,3+ -mass_min=132.925100 -mass_max=687.283700 -int_min=3 -int_max=1.562e+05 -num_vals=49 -num_used1=-1 -Ions1=226.881800:5020,255.208400:1.352e+04,358.788800:1.562e+05,447.407200:1.383e+04,687.283700:2621,209.003800:2248,286.727400:5732,358.096400:3.851e+04,446.085900:5582,158.898400:2169,332.364300:5470,359.742400:3.307e+04,464.533000:4493,132.925100:1746,313.199600:4827,423.692100:2.543e+04,444.060700:3131,292.090300:3743,409.292100:1.061e+04,462.943900:1217,315.160300:3519,405.322300:1.023e+04,244.436000:2152,427.720200:8213,272.209500:2047,342.434800:6825,322.286900:1962,406.583700:5890,299.995000:1576,404.648600:3980,260.890500:735,268.846900:1177,293.210100:1346,317.210100:1392,333.012700:3,340.944700:2739,347.258700:1628,349.389200:2170,355.128300:1287,356.359300:2572,369.414600:1218,370.749000:3131,387.372700:1604,392.075600:2369,397.986600:1084,399.246200:1912,403.969800:2625,410.646700:555,422.882300:2607 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query23" - -title=CAexample_mini%2e0072%2e0072%2e2 -charge=2+,3+ -mass_min=166.705100 -mass_max=722.924700 -int_min=1 -int_max=1.367e+05 -num_vals=54 -num_used1=-1 -Ions1=229.188600:3139,358.673100:1.367e+05,421.319300:7681,553.038500:3049,592.704600:5115,722.924700:4582,166.705100:3072,359.602100:2.265e+04,427.835300:7466,516.177000:2521,656.476700:3674,696.250400:1450,216.153000:2586,358.064100:1.269e+04,383.362800:6507,540.151700:1504,630.200300:3059,225.982800:2581,341.074700:1.132e+04,406.272200:6164,519.692600:550,612.266200:2574,246.840100:1093,298.190700:7344,408.328900:6129,583.985600:1263,175.047500:847,342.369900:5364,369.021800:4450,599.679800:1182,357.306800:4946,424.360800:4051,616.384300:950,296.342900:3242,393.055400:3759,329.414800:2903,411.115100:3661,351.896200:2519,403.399200:3495,285.452900:1637,306.974700:1922,343.036200:1,360.266800:1,368.299500:1589,369.991200:1078,387.604500:2729,388.756500:1454,402.322800:414,404.435900:2754,411.839000:2074,413.110200:2220,416.501500:3353,418.821100:2675,446.392300:3228 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query24" - -title=CAexample_mini%2e0164%2e0164%2e1 -charge=1+ -mass_min=419.283300 -mass_max=851.647700 -int_min=1186 -int_max=8745 -num_vals=9 -num_used1=-1 -Ions1=419.283300:2861,713.817400:7296,834.382100:8745,622.710400:5784,851.647700:4372,638.623200:5562,622.046100:4796,653.559400:3847,658.052700:1186 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query25" - -title=CAexample_mini%2e0032%2e0032%2e2 -charge=2+,3+ -mass_min=138.161600 -mass_max=731.291900 -int_min=363 -int_max=3.695e+04 -num_vals=46 -num_used1=-1 -Ions1=138.161600:3544,315.976000:8018,359.726600:3.695e+04,483.962600:8140,731.291900:1932,148.958200:2786,317.032600:7905,412.588700:1.992e+04,446.928600:8103,224.994100:363,274.334200:5581,358.673200:1.297e+04,448.434400:2551,311.363000:5572,360.747700:1.08e+04,285.118600:4232,361.805200:9362,273.050900:3491,429.425600:8158,319.428300:2860,373.451400:8110,303.426000:2840,387.405800:7159,334.210100:1521,406.622000:6473,260.746000:1508,347.658900:4644,253.936800:1026,335.863100:1151,341.875900:2510,357.541300:2128,375.497300:458,376.875700:1030,388.984800:829,390.018900:4636,390.713900:2011,392.474500:804,407.749400:1483,408.581700:1962,414.006300:2439,414.890200:653,417.243700:3255,419.198900:1715,419.802900:1345,424.489500:1473,425.288400:3729 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query26" - -title=CAexample_mini%2e0038%2e0038%2e2 -charge=2+,3+ -mass_min=129.036600 -mass_max=606.232400 -int_min=1 -int_max=2.259e+04 -num_vals=40 -num_used1=-1 -Ions1=183.316500:4370,327.091400:2.259e+04,419.499500:1.166e+04,439.786400:6396,606.232400:3694,220.861900:3649,245.070400:5073,422.331700:1.05e+04,432.435500:5038,594.824700:2261,194.363300:1830,272.364600:4463,369.939200:1.011e+04,494.278900:4907,129.036600:1599,285.076800:3546,426.917500:6277,442.888300:2411,248.729200:2317,416.879800:6241,458.201400:2289,238.894800:1002,344.592600:5166,457.299900:1622,309.374500:542,382.762500:4192,495.450500:992,327.733300:1,401.702700:2920,388.175500:2599,398.709100:2484,343.890600:1432,346.771900:1902,360.643200:1893,379.364900:860,394.690600:2112,403.980300:1992,411.165500:2207,414.575300:1304,424.157200:1452 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query27" - -title=CAexample_mini%2e0010%2e0010%2e2 -charge=2+,3+ -mass_min=158.538800 -mass_max=817.560500 -int_min=1 -int_max=2.942e+04 -num_vals=54 -num_used1=-1 -Ions1=233.777500:8834,327.184700:9898,419.638600:2.942e+04,496.249600:1.098e+04,639.133500:833,817.560500:1539,191.004700:6809,297.163700:5333,417.669700:1.103e+04,460.630200:8064,243.101200:3278,352.961100:5288,436.702600:9641,459.428300:6265,246.603100:2201,328.001800:3624,423.145300:6851,513.396400:3927,228.943400:1931,346.168500:3508,367.151100:5894,461.692100:3594,215.015100:1052,329.595000:3118,437.618600:5247,477.075600:1869,158.538800:979,348.448600:2816,441.557500:5210,514.709700:1554,188.827400:849,316.683500:2217,424.255900:5076,495.159900:1138,293.139200:2100,406.233300:4882,478.075600:945,322.387900:1044,445.511100:4193,496.991800:1,367.828200:2,379.023400:983,381.706900:3357,385.669600:2560,390.719100:2190,394.745500:2085,398.369800:1684,399.978500:2399,401.718600:1133,402.454900:2574,407.083600:944,412.859600:2247,415.215700:3523,418.393600:2603 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query28" - -title=CAexample_mini%2e0006%2e0006%2e2 -charge=2+,3+ -mass_min=175.318600 -mass_max=630.293100 -int_min=1262 -int_max=3.545e+05 -num_vals=48 -num_used1=-1 -Ions1=251.476400:4599,358.616400:2.305e+05,428.953400:3.545e+05,498.361600:4764,630.293100:2488,175.318600:4369,357.549600:1.772e+04,421.660900:1.265e+04,516.324600:3276,222.842100:4270,331.127600:8950,420.730700:1.162e+04,480.681300:2119,231.134300:2052,298.026000:6378,386.559200:9754,478.222600:2029,286.849500:5942,461.609200:9107,369.933200:4138,438.085800:8450,342.971200:3989,385.377400:7079,339.613400:3690,426.425000:6640,365.973900:2880,419.880400:6624,359.804300:2377,402.868000:5782,293.060700:1572,360.775300:1376,367.675700:1969,387.232900:1829,395.856900:1699,397.849400:1513,400.234400:1549,408.945900:1529,414.391200:1345,415.230000:2827,416.879200:1851,427.259300:4805,428.128400:3872,435.776600:2066,438.994500:2567,444.060200:3295,447.416500:1262,456.248400:1513,463.407500:5112 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query29" - -title=CAexample_mini%2e0070%2e0070%2e2 -charge=2+,3+ -mass_min=149.150300 -mass_max=790.607500 -int_min=2 -int_max=2.682e+05 -num_vals=49 -num_used1=-1 -Ions1=212.967100:8468,312.180900:1.805e+04,428.947100:2.682e+05,450.246600:1.447e+04,569.964800:5931,790.607500:3235,232.137200:4917,342.098600:7849,358.542300:2.183e+05,527.038300:1.098e+04,556.117600:5906,216.144600:3982,250.459200:5660,419.775200:1.74e+04,543.121100:5131,637.103800:2393,196.781000:3898,288.260100:4850,427.642500:1.445e+04,505.860700:3979,169.982000:3815,341.110600:4538,401.421000:1.31e+04,468.293900:1995,185.011500:2530,312.957800:2773,383.961200:8860,488.935400:1047,149.150300:2091,342.782100:2530,387.664300:7201,450.900000:2,176.915300:1177,272.821900:1758,357.196400:5296,329.887600:1359,414.384500:5190,271.925000:932,356.235800:4402,256.937000:671,349.459500:1925,359.532600:301,369.569400:3617,385.402800:1421,399.103300:1653,408.788100:3463,421.627600:490,429.640000:5,437.124100:4016 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query30" - -title=CAexample_mini%2e0126%2e0126%2e1 -charge=1+ -mass_min=401.505100 -mass_max=943.625700 -int_min=903 -int_max=1.711e+04 -num_vals=10 -num_used1=-1 -Ions1=401.505100:1250,676.802500:1.155e+04,758.445300:1865,835.553300:1.711e+04,679.261200:4921,717.793000:903,647.362100:4322,655.080100:2525,638.005100:2055,943.625700:2173 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query31" - -title=CAexample_mini%2e0200%2e0200%2e2 -charge=2+,3+ -mass_min=131.144100 -mass_max=558.032700 -int_min=328 -int_max=1.07e+04 -num_vals=21 -num_used1=-1 -Ions1=220.580700:2781,328.981800:5874,398.822400:1.07e+04,494.083700:9960,558.032700:3373,176.104100:1749,308.662400:2945,370.965800:7103,434.776400:3742,131.144100:1273,262.602700:1779,415.282400:6189,440.668100:857,283.012600:1226,385.681200:5966,261.893800:807,403.872400:5004,241.472200:328,359.051500:4330,384.080300:2280,386.809800:573 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query32" - -title=CAexample_mini%2e0082%2e0082%2e2 -charge=2+,3+ -mass_min=131.717400 -mass_max=725.758400 -int_min=1 -int_max=1.028e+05 -num_vals=42 -num_used1=-1 -Ions1=184.048000:6705,258.496600:3481,420.610300:1.699e+04,444.874000:1.028e+05,591.993500:2939,725.758400:2736,201.745000:4660,329.163100:2770,428.847200:1.622e+04,445.896800:8665,572.482400:2425,131.717400:3720,236.372700:2268,358.478900:9229,473.810100:6381,561.970000:1074,186.624800:1738,261.301900:2128,350.102200:6101,434.233900:5152,179.810900:1300,320.774900:1950,401.371500:4610,479.374400:4357,419.794400:3489,438.371600:2915,378.710000:3433,460.791300:2307,429.763500:3322,444.214400:2208,417.332600:2842,446.733300:1,421.761400:2741,355.790400:1287,359.100000:2,371.055500:2655,388.320100:1570,390.206200:1439,394.867000:2517,407.457600:1678,418.252100:1558,427.337800:1139 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query33" - -title=CAexample_mini%2e0008%2e0008%2e2 -charge=2+,3+ -mass_min=177.033400 -mass_max=515.938700 -int_min=1 -int_max=9.468e+04 -num_vals=38 -num_used1=-1 -Ions1=265.818900:4855,344.185500:1.379e+04,445.869800:9.468e+04,482.517500:9877,190.907800:3938,362.249500:8153,444.771300:4.178e+04,499.465400:7301,177.033400:1098,348.739200:3295,429.812100:2.629e+04,481.270300:6928,376.947600:3153,438.514200:1.356e+04,497.322900:4862,304.896300:2100,420.733500:1.181e+04,500.557600:3653,359.881000:1935,457.665900:1.082e+04,480.418600:2118,319.866200:1211,439.701400:9220,515.938700:1684,426.790700:6964,479.463400:868,428.710600:5936,384.576000:5754,378.641100:4132,421.773000:2746,424.185200:1930,430.550000:4,440.732800:1258,441.576600:3318,446.572200:2218,449.347200:5546,449.999900:1,469.321600:3035 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query34" - -title=CAexample_mini%2e0064%2e0064%2e2 -charge=2+,3+ -mass_min=255.099300 -mass_max=838.800900 -int_min=506 -int_max=1.887e+05 -num_vals=47 -num_used1=-1 -Ions1=351.377000:7546,422.803000:1.887e+05,456.929300:5520,556.957800:7748,665.545700:2772,838.800900:8647,301.046600:7416,440.520300:2.938e+04,463.265400:4793,574.885700:6232,666.267600:1784,779.754800:1916,318.726600:6335,446.967100:2.236e+04,511.263200:3601,603.587900:4846,822.300500:717,255.099300:4560,443.915200:1.525e+04,455.901200:1637,798.421500:506,290.924100:3524,423.830000:1.37e+04,354.196900:2574,452.961400:1.024e+04,285.073900:2513,407.345600:9674,310.153400:1434,399.821000:7577,283.664900:1310,420.369000:6352,332.461400:711,449.279300:6339,327.091400:598,357.069300:2608,364.413100:2334,380.222100:3142,388.088200:3289,392.147500:5138,411.927300:3843,421.977800:5656,430.082000:4207,431.017900:2498,436.945500:5164,441.857400:3797,448.021400:4745,453.667700:3233 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query35" - -title=CAexample_mini%2e0100%2e0100%2e2 -charge=2+,3+ -mass_min=182.966700 -mass_max=569.813000 -int_min=767 -int_max=7050 -num_vals=20 -num_used1=-1 -Ions1=182.966700:5441,349.268700:3885,424.328600:7050,569.813000:5835,260.606800:5062,381.130800:3455,444.563800:6639,543.424400:3671,290.584100:2616,426.831800:5021,503.526600:2797,347.955400:1712,411.353300:3356,561.410200:1499,314.082400:767,450.883900:3069,408.039600:2762,427.627200:2194,425.121300:1312,467.594400:840 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query36" - -title=CAexample_mini%2e0056%2e0056%2e2 -charge=2+,3+ -mass_min=164.934700 -mass_max=701.419400 -int_min=3 -int_max=6.377e+04 -num_vals=65 -num_used1=-1 -Ions1=175.069600:7871,347.233500:1.523e+04,459.166300:6.377e+04,484.353800:7236,664.104100:1.031e+04,701.419400:2638,262.251800:7122,343.905800:9116,458.300500:4.141e+04,466.756300:5455,644.442400:5863,212.532200:4260,301.221600:5785,440.415400:1.416e+04,474.327100:2647,590.813100:5469,196.209100:4026,363.934000:4561,462.536100:1.211e+04,549.163100:1250,619.330400:2643,226.078600:2974,310.479400:4243,386.111500:9258,465.958000:1200,568.315600:2588,221.076700:2167,312.993800:4155,391.043100:7378,164.934700:2126,343.249500:4028,392.665600:7121,215.029600:2119,325.990100:1902,447.893800:6366,171.113200:2001,361.141500:1598,457.020500:5702,264.822900:1221,309.017600:1311,377.285900:4746,205.006100:317,243.987000:589,261.382100:779,263.082900:994,272.962700:444,283.715800:1092,344.622200:3,346.354400:968,369.883400:3873,380.999800:3951,393.511100:2663,397.478200:1320,400.406400:1122,402.446200:1424,407.351800:4105,413.629500:2925,415.347400:4285,418.020000:1080,432.791400:2015,434.141500:780,439.551300:1868,441.531500:2259,456.311100:3676,459.837200:614 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query37" - -title=CAexample_mini%2e0088%2e0088%2e2 -charge=2+,3+ -mass_min=177.901400 -mass_max=745.241200 -int_min=815 -int_max=7195 -num_vals=21 -num_used1=-1 -Ions1=264.909700:6214,306.359400:2090,390.490100:7195,745.241200:1778,177.901400:2717,372.408100:1941,461.091600:4664,183.189400:1690,331.076700:1462,456.365000:3660,258.858900:826,283.800100:1251,461.950000:3371,302.503100:1248,399.317000:3284,315.898600:815,459.744000:2803,422.353900:2017,455.639500:1987,418.686400:1358,382.008900:985 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query38" - -title=CAexample_mini%2e0134%2e0134%2e1 -charge=1+ -mass_min=325.872300 -mass_max=887.880400 -int_min=729 -int_max=5772 -num_vals=7 -num_used1=-1 -Ions1=325.872300:2653,582.304300:2379,681.769900:3896,772.677200:2271,887.880400:5772,731.978500:1781,753.902800:729 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query39" - -title=CAexample_mini%2e0080%2e0080%2e2 -charge=2+,3+ -mass_min=176.709400 -mass_max=788.965600 -int_min=3 -int_max=2.953e+04 -num_vals=58 -num_used1=-1 -Ions1=238.923200:1.352e+04,298.564600:2.953e+04,460.792600:2.252e+04,484.197400:1.844e+04,623.328700:4006,788.965600:949,176.709400:6455,355.109200:2.217e+04,466.115800:1.469e+04,485.065200:1.747e+04,614.361200:1425,269.673000:6124,358.070700:8590,383.030800:1.098e+04,483.433700:7924,221.035200:5063,336.960900:7870,415.165200:1.016e+04,478.698900:6988,252.818100:4856,296.527700:6905,449.295400:4876,479.609300:2417,265.047600:3389,365.232200:5764,438.093300:4156,520.465100:1531,246.885800:3054,312.225800:5330,457.209300:3982,539.389200:1213,242.101500:1813,325.868700:5041,472.728800:3761,224.026800:952,346.797100:4716,461.528900:3339,356.134300:4095,459.689300:2877,289.158400:1968,299.391400:3,322.417200:3148,345.194300:1521,371.043000:1875,377.025600:1867,384.059800:2736,388.841400:847,390.377300:2427,397.130100:2185,401.190100:2651,421.228100:2533,423.980900:1725,429.621500:506,440.335600:1746,458.075200:1593,468.678800:2745,474.148600:2201,475.193200:2530 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query40" - -title=CAexample_mini%2e0170%2e0170%2e1 -charge=1+ -mass_min=488.351400 -mass_max=972.375900 -int_min=1385 -int_max=8835 -num_vals=7 -num_used1=-1 -Ions1=488.351400:3604,793.397600:1385,970.793900:8835,546.026700:1710,953.583400:6030,972.375900:4543,947.354700:3699 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query41" - -title=CAexample_mini%2e0078%2e0078%2e2 -charge=2+,3+ -mass_min=229.968500 -mass_max=870.330600 -int_min=681 -int_max=1.19e+04 -num_vals=26 -num_used1=-1 -Ions1=229.968500:3689,418.295700:1.19e+04,448.414900:1.023e+04,676.709200:4071,792.513400:7278,852.387600:6091,257.780800:1377,408.986500:9788,491.666500:8127,870.330600:3528,275.816200:1335,340.254200:5907,438.640600:7083,396.756900:4522,484.541900:5758,390.275100:3498,464.084500:4846,422.115800:1215,440.698400:3181,372.204300:681,481.705900:3082,488.127100:2772,500.873000:2720,508.130900:2699,468.412400:919,503.132400:1782 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query42" - -title=CAexample_mini%2e0012%2e0012%2e2 -charge=2+,3+ -mass_min=224.933900 -mass_max=587.773100 -int_min=2 -int_max=6.68e+04 -num_vals=53 -num_used1=-1 -Ions1=298.757800:6.68e+04,404.094900:1.238e+04,513.514600:1.256e+04,535.468300:2.555e+04,304.276700:1.271e+04,404.939900:4771,517.349600:1.017e+04,536.301800:1.738e+04,298.033000:7946,358.602400:4572,476.837500:1.012e+04,555.493700:5582,224.933900:3897,415.071600:4266,502.875300:9624,534.385500:3445,285.370600:3530,384.580700:3944,495.470100:8630,571.622300:3196,238.900900:3511,392.944500:3830,442.456700:7400,587.773100:1949,240.295200:2535,325.830800:3289,479.499000:6284,537.573500:1390,226.213300:2337,378.583400:2907,493.441200:5609,554.254600:868,282.860100:1917,388.998900:1434,477.966800:4870,260.123800:1802,346.420700:1004,457.599500:4604,299.566700:2,305.955000:653,321.834200:754,439.874300:1408,462.454700:641,474.719700:2112,475.725800:333,478.634400:2021,483.234700:4081,494.109100:2404,501.258300:3773,503.831100:2948,512.867700:2014,520.771000:2603,522.382300:1575 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query43" - -title=CAexample_mini%2e0130%2e0130%2e2 -charge=2+,3+ -mass_min=176.623000 -mass_max=528.802000 -int_min=193 -int_max=8.866e+04 -num_vals=31 -num_used1=-1 -Ions1=239.767300:4238,298.760700:8.866e+04,414.924000:1.341e+04,502.950900:6.587e+04,238.155900:3117,299.728800:4.068e+04,415.818600:3763,503.962300:2.687e+04,224.895000:2990,358.230600:8839,472.439400:2525,528.802000:7374,176.623000:2744,297.699200:8471,403.695900:1655,522.072800:6424,217.148700:2499,279.724200:7637,432.891100:1523,477.804000:1051,305.039600:5543,451.122700:1195,504.577100:193,358.877400:4813,373.122200:3566,322.836300:2780,282.828600:2574,282.141700:1557,306.640400:1707,308.888900:560,323.946300:2220 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query44" - -title=CAexample_mini%2e0024%2e0024%2e2 -charge=2+,3+ -mass_min=223.007900 -mass_max=574.533200 -int_min=1 -int_max=1.511e+04 -num_vals=37 -num_used1=-1 -Ions1=300.587300:1.511e+04,408.176400:4134,465.425000:1.182e+04,573.826500:3882,299.106600:9183,409.018300:3553,424.460200:1.122e+04,540.302000:3341,239.656600:6230,402.454200:3496,463.081400:1.038e+04,538.307900:2644,223.007900:4579,324.820400:2804,506.047100:1.001e+04,574.533200:1,307.992100:3830,362.805400:2562,504.733200:8597,296.152300:3141,340.370000:1795,429.160500:6532,224.732100:2694,356.217600:1531,427.365900:5432,309.173500:2003,403.142600:878,425.857600:4164,514.650300:3683,464.112300:3455,427.966600:2,445.912500:1192,478.251600:290,486.358500:3326,498.477400:1837,499.477200:743,517.219500:2602 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query45" - -title=CAexample_mini%2e0030%2e0030%2e2 -charge=2+,3+ -mass_min=222.697100 -mass_max=577.515000 -int_min=489 -int_max=1.506e+04 -num_vals=37 -num_used1=-1 -Ions1=258.986200:4974,379.301100:8804,508.133400:1.347e+04,542.217000:1.506e+04,317.761800:3880,406.270300:5367,501.298800:1.046e+04,523.384500:6845,235.095400:2406,377.971100:5012,506.802100:8938,577.515000:574,222.697100:2399,325.013300:4547,427.025700:4204,541.168700:489,305.026100:1940,382.092500:3431,487.898900:4080,275.705900:1889,410.736800:3199,426.228900:3242,267.250000:789,397.346500:2470,494.164100:3037,281.545800:743,398.131500:2371,429.962000:2245,264.330000:684,409.846900:2247,428.387500:2100,396.253500:920,482.365400:2085,424.202500:1294,463.033100:782,511.770200:1612,519.148300:1711 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query46" - -title=CAexample_mini%2e0044%2e0044%2e2 -charge=2+,3+ -mass_min=174.964100 -mass_max=563.386500 -int_min=2 -int_max=1.675e+04 -num_vals=36 -num_used1=-1 -Ions1=274.764200:9546,303.168200:8770,395.029800:5223,563.386500:1.675e+04,174.964100:6695,287.450100:7655,443.492300:4549,502.747600:1.069e+04,254.081200:1628,333.395900:6134,425.237500:4529,501.281600:4891,350.153800:4234,432.145800:3238,477.618900:3690,367.554800:3480,411.503400:3231,545.836700:3661,304.251000:3087,449.514200:2713,508.054900:3250,343.579800:1550,377.140100:2240,526.430200:3160,311.044100:874,410.789600:2000,540.457400:2935,288.090700:2,466.859700:1896,480.606600:2047,389.094000:1859,518.486300:1627,410.053600:1271,429.391100:947,506.317800:320,520.374500:692 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query47" - -title=CAexample_mini%2e0040%2e0040%2e2 -charge=2+,3+ -mass_min=241.761800 -mass_max=590.419200 -int_min=1017 -int_max=4.927e+04 -num_vals=28 -num_used1=-1 -Ions1=241.761800:1873,440.119500:4.927e+04,495.128400:1.471e+04,587.262800:8370,441.320600:1.521e+04,496.523700:5925,572.555200:6467,370.657400:1.085e+04,536.940400:4673,571.820800:2709,398.322100:8555,478.465800:4572,588.996100:1952,416.810600:1870,539.538100:3854,590.419200:1181,438.020400:1763,497.347300:3244,354.660300:1739,530.528700:3241,427.174200:1727,527.678700:3021,457.633600:1987,456.340900:1940,445.975800:1306,519.272800:1017,536.210900:1450,540.700200:1054 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query48" - -title=CAexample_mini%2e0178%2e0178%2e2 -charge=2+,3+ -mass_min=291.135700 -mass_max=728.263400 -int_min=1165 -int_max=9075 -num_vals=13 -num_used1=-1 -Ions1=350.886000:9075,481.602200:7869,498.772000:6176,728.263400:1184,373.498900:5004,415.030200:2557,575.532200:5895,371.853800:4232,586.122100:5004,291.135700:2190,544.851300:2323,497.113600:1644,512.166900:1165 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query49" - -title=CAexample_mini%2e0050%2e0050%2e2 -charge=2+,3+ -mass_min=180.924300 -mass_max=1024.540300 -int_min=1 -int_max=4.01e+04 -num_vals=111 -num_used1=-1 -Ions1=235.188000:9812,379.449000:8529,445.167200:1.58e+04,513.259500:4.01e+04,661.005700:1497,732.148900:3417,815.874100:8511,887.315300:4580,1024.540300:2817,233.918800:6782,318.017200:8194,450.304900:1.392e+04,533.034900:2.136e+04,636.315400:606,771.383400:1382,852.314900:6217,959.334800:3947,184.756900:4629,339.252200:6819,449.663500:1.296e+04,559.412000:1.885e+04,839.278400:5370,216.222200:4234,304.307300:5795,444.134000:1.222e+04,523.282000:1.386e+04,793.417000:5357,266.183200:3389,330.918800:5415,413.237700:7774,558.184100:1.06e+04,831.785500:5062,193.903400:3172,315.528800:5138,462.972300:7707,512.395900:1.052e+04,849.492800:3241,217.740700:2614,363.211400:4837,448.212400:7093,541.257800:9307,264.512100:2020,371.910700:4336,384.984100:6825,542.406300:9138,268.324700:2014,345.698400:4268,429.644000:5534,489.201200:6919,194.872300:2000,344.827600:4151,460.097900:4531,531.690400:6095,180.924300:1610,215.097100:720,226.184400:1507,248.256700:1781,257.244100:1127,258.551300:1720,278.848500:1379,286.172200:1060,293.866100:1334,309.067700:2014,312.215800:3603,316.808300:2830,319.034800:3306,323.611300:3886,332.241500:1444,333.341100:3153,342.155200:365,353.270600:1076,355.029800:2750,358.315300:1043,359.147300:3676,361.592400:1863,364.249000:1486,365.456400:2016,366.434100:2932,368.847900:2042,370.743300:4007,375.226400:2844,375.924900:1123,382.390400:2834,389.124500:3222,400.476900:3431,402.050700:3459,402.987500:3526,416.806000:3069,423.505600:3770,426.172700:3972,427.122500:2037,431.366900:3029,433.015700:3705,487.116600:2876,488.231400:4585,489.880400:4346,493.974800:2133,500.225600:5052,502.989900:4207,504.084000:3715,505.742900:5112,508.360600:4715,511.142900:1479,514.000000:1,515.480000:2423,518.063500:6012,535.297100:5447,548.443400:2813,551.400600:4056,560.312300:4536,561.015400:3777 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query50" - -title=CAexample_mini%2e0174%2e0174%2e2 -charge=2+,3+ -mass_min=271.780000 -mass_max=1107.263200 -int_min=787 -int_max=1.093e+04 -num_vals=10 -num_used1=-1 -Ions1=359.215700:1.093e+04,382.576800:1522,512.143100:1.004e+04,573.750600:787,1107.263200:5685,271.780000:2248,434.112800:1165,539.978500:2885,496.866500:2160,557.654500:1217 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query51" - -title=CAexample_mini%2e0182%2e0182%2e1 -charge=1+ -mass_min=416.562600 -mass_max=1000.074300 -int_min=1082 -int_max=7021 -num_vals=7 -num_used1=-1 -Ions1=416.562600:3463,721.078400:2027,960.952900:7021,784.015900:1082,1000.074300:4030,954.986500:2093,963.299000:1854 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query52" - -title=CAexample_mini%2e0094%2e0094%2e2 -charge=2+,3+ -mass_min=240.710400 -mass_max=614.652100 -int_min=1434 -int_max=1.423e+04 -num_vals=18 -num_used1=-1 -Ions1=278.760700:1.423e+04,354.826300:8399,526.433600:1687,589.587600:4237,308.511800:6053,356.970500:7161,614.652100:3695,286.786700:5970,418.293200:3368,578.452600:2677,270.995400:5920,355.968500:3223,594.364300:2220,240.710400:4959,373.616900:2230,568.118900:1538,398.567000:1958,595.388200:1434 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query53" - -title=CAexample_mini%2e0108%2e0108%2e2 -charge=2+,3+ -mass_min=204.839700 -mass_max=850.855200 -int_min=3 -int_max=9.106e+04 -num_vals=23 -num_used1=-1 -Ions1=204.839700:2669,400.164100:3.152e+04,422.090000:9.106e+04,522.774200:2617,669.984000:4551,850.855200:4696,404.326300:5284,479.917600:6299,565.688500:1969,399.412300:3073,462.199100:5934,591.503200:1455,375.816700:2783,421.450800:5826,387.546400:2259,423.489700:5399,439.759500:2779,485.357100:2187,462.858500:2171,420.315600:1864,480.763100:1769,422.733300:3,438.474200:304 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query54" - -title=CAexample_mini%2e0138%2e0138%2e1 -charge=1+ -mass_min=896.456400 -mass_max=1888.705100 -int_min=1320 -int_max=1.399e+04 -num_vals=10 -num_used1=-1 -Ions1=896.456400:1.381e+04,1027.735600:1.256e+04,1151.994100:1.399e+04,1281.307100:3867,1298.742200:1320,962.858900:5947,1014.187600:4983,1109.270500:3670,1186.819100:2328,1888.705100:1969 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query55" - -title=CAexample_mini%2e0120%2e0120%2e2 -charge=2+,3+ -mass_min=362.797200 -mass_max=803.119500 -int_min=670 -int_max=1.958e+04 -num_vals=20 -num_used1=-1 -Ions1=425.502400:8685,480.995400:1.958e+04,641.297400:5756,695.759800:5063,803.119500:1544,366.147500:4287,463.819200:9468,635.834100:5529,378.821400:3629,478.670700:4803,654.249000:3069,427.393300:3565,463.132000:4550,652.628300:1693,362.797200:2538,481.989300:4154,458.566500:2307,503.073200:1282,429.062800:1154,441.074200:670 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query56" - -title=CAexample_mini%2e0156%2e0156%2e2 -charge=2+,3+ -mass_min=359.679600 -mass_max=738.743900 -int_min=978 -int_max=7351 -num_vals=17 -num_used1=-1 -Ions1=359.679600:4381,505.941200:5992,597.878700:6303,680.370100:7351,408.659900:1750,506.611100:5081,652.827400:4378,738.743900:4287,373.141100:1505,466.509100:3572,645.492100:4081,685.434200:1497,478.001200:3489,632.746100:3485,531.402700:1482,643.938000:1476,489.814900:978 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query57" - -title=CAexample_mini%2e0148%2e0148%2e2 -charge=2+,3+ -mass_min=242.720000 -mass_max=757.734300 -int_min=512 -int_max=9165 -num_vals=18 -num_used1=-1 -Ions1=242.720000:2333,434.385100:6431,527.084000:4269,582.352500:6075,734.030900:9165,757.734300:1827,488.032200:1192,612.320200:2876,735.945600:6654,756.612100:1210,639.824200:2672,666.570300:5391,605.662800:1208,721.679100:1997,560.945600:963,681.054900:1494,706.974100:1119,679.736100:512 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query58" - -title=CAexample_mini%2e0098%2e0098%2e2 -charge=2+,3+ -mass_min=530.786500 -mass_max=936.930900 -int_min=373 -int_max=9728 -num_vals=16 -num_used1=-1 -Ions1=548.745600:9728,725.754800:5341,797.989400:3827,936.930900:1216,571.238500:6956,726.897000:4580,768.100700:1001,629.521700:5334,694.763100:4048,589.390400:5223,652.456700:2146,546.820600:3013,697.505900:2054,554.717000:1384,631.916500:373,530.786500:1275 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query59" - -title=CAexample_mini%2e0116%2e0116%2e2 -charge=2+,3+ -mass_min=455.683700 -mass_max=1556.544700 -int_min=798 -int_max=1.783e+04 -num_vals=12 -num_used1=-1 -Ions1=455.683700:1081,652.067700:1.783e+04,702.923800:2308,847.572900:1264,1230.603800:6538,1556.544700:798,614.293700:7047,707.010100:1782,636.826500:3071,669.204100:1262,579.699500:1882,628.961800:915 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query60" - -title=CAexample_mini%2e0196%2e0196%2e1 -charge=1+ -mass_min=520.774700 -mass_max=1679.304400 -int_min=1008 -int_max=4814 -num_vals=6 -num_used1=-1 -Ions1=520.774700:4814,1203.712400:1008,1486.835400:3054,1633.185100:3803,1500.642100:2232,1679.304400:2118 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query61" - -title=CAexample_mini%2e0186%2e0186%2e2 -charge=2+,3+ -mass_min=279.106200 -mass_max=1596.436000 -int_min=822 -int_max=7639 -num_vals=8 -num_used1=-1 -Ions1=279.106200:4828,726.285400:5438,879.743500:3586,1596.436000:7639,746.383300:3792,921.287200:1706,686.133500:1035,940.111900:822 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query62" - -title=CAexample_mini%2e0168%2e0168%2e2 -charge=2+,3+ -mass_min=531.022900 -mass_max=1134.888700 -int_min=848 -int_max=1.21e+04 -num_vals=14 -num_used1=-1 -Ions1=590.031600:1.21e+04,650.404300:1595,904.847300:5272,1070.931200:7710,1134.888700:3574,531.022900:9715,858.957000:1384,1115.983900:6698,1132.790500:3346,903.919100:848,1076.021500:5709,1062.066400:2455,1058.752400:1191,1060.095700:1106 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query63" - -title=CAexample_mini%2e0158%2e0158%2e2 -charge=2+,3+ -mass_min=431.750700 -mass_max=1519.705600 -int_min=532 -int_max=1.121e+04 -num_vals=9 -num_used1=-1 -Ions1=431.750700:3922,910.888100:3548,996.977500:1.121e+04,1078.357200:3393,1519.705600:6046,905.826800:1410,932.604100:5289,1097.693800:3291,969.094400:532 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query64" - -title=CAexample_mini%2e0192%2e0192%2e2 -charge=2+,3+ -mass_min=428.848600 -mass_max=1891.165300 -int_min=1454 -int_max=8134 -num_vals=11 -num_used1=-1 -Ions1=428.848600:5350,911.726400:8134,976.512100:2713,1111.558100:4808,1208.359400:4385,1266.165500:5595,1891.165300:5814,898.805800:2877,1048.687000:2905,1840.770000:1739,914.351100:1454 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="index" - -parameters=4 -header=110 -masses=74 -summary=125 -mixture=449 -peptides=449 -proteins=1401 -query1=1462 -query2=1474 -query3=1486 -query4=1498 -query5=1510 -query6=1522 -query7=1534 -query8=1546 -query9=1558 -query10=1570 -query11=1582 -query12=1594 -query13=1606 -query14=1618 -query15=1630 -query16=1642 -query17=1654 -query18=1666 -query19=1678 -query20=1690 -query21=1702 -query22=1714 -query23=1726 -query24=1738 -query25=1750 -query26=1762 -query27=1774 -query28=1786 -query29=1798 -query30=1810 -query31=1822 -query32=1834 -query33=1846 -query34=1858 -query35=1870 -query36=1882 -query37=1894 -query38=1906 -query39=1918 -query40=1930 -query41=1942 -query42=1954 -query43=1966 -query44=1978 -query45=1990 -query46=2002 -query47=2014 -query48=2026 -query49=2038 -query50=2050 -query51=2062 -query52=2074 -query53=2086 -query54=2098 -query55=2110 -query56=2122 -query57=2134 -query58=2146 -query59=2158 -query60=2170 -query61=2182 -query62=2194 -query63=2206 -query64=2218 ---gc0p4Jq0M2Yt08jU534c0p-- diff --git a/ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test4/CAexample_mini_decoy.dat b/ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test4/CAexample_mini_decoy.dat deleted file mode 100644 index 49d94b2da3..0000000000 --- a/ms2/test/sampledata/xarfiles/ms2pipe/bov_sample/mascot/test4/CAexample_mini_decoy.dat +++ /dev/null @@ -1,610 +0,0 @@ -MIME-Version: 1.0 (Generated by Mascot version 1.0) -Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p - ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="parameters" - -LICENSE=Licensed to: Bioinformatics Institute, #07-01 Matrix, (4502001058), (12 processors). -MP= -NM= -COM=Conversion of CAexample_mini.mzXML to mascot generic -IATOL=0 -IA2TOL=0 -IASTOL=0 -IBTOL=1 -IB2TOL=1 -IBSTOL=0 -IYTOL=1 -IY2TOL=1 -IYSTOL=0 -SEG= -SEGT= -SEGTU= -LTOL= -TOL=2.0 -TOLU=Da -ITH= -ITOL=0.8 -ITOLU=Da -PFA=1 -DB=Bovine_mini1.fasta -MODS= -MASS=Average -CLE=Trypsin -FILE=CAexample_mini.mgf -PEAK=auto -QUE= -TWO= -SEARCH=MIS -USERNAME=CPAS User -USEREMAIL=zhihonghypy@yahoo.com -CHARGE=2+ and 3+ -INTERMEDIATE= -REPORT=20 -OVERVIEW= -FORMAT=Mascot generic -FORMVER=1.01 -FRAG= -IT_MODS= -USER00= -USER01= -USER02= -USER03= -USER04= -USER05= -USER06= -USER07= -USER08= -USER09= -USER10= -USER11= -USER12= -PRECURSOR= -TAXONOMY=All entries -ACCESSION= -REPTYPE=peptide -SUBCLUSTER= -ICAT= -INSTRUMENT=Default -ERRORTOLERANT=0 -FRAMES= -CUTOUT= -USERID=1060 -RULES=1,2,5,6,8,9,13,14 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="masses" - -A=71.077900 -B=114.595000 -C=103.142900 -D=115.087400 -E=129.114000 -F=147.173900 -G=57.051300 -H=137.139300 -I=113.157600 -J=0.000000 -K=128.172300 -L=113.157600 -M=131.196100 -N=114.102600 -O=0.000000 -P=97.115200 -Q=128.129200 -R=156.185700 -S=87.077300 -T=101.103900 -U=150.037900 -V=99.131100 -W=186.209900 -X=111.000000 -Y=163.173300 -Z=128.621600 -Hydrogen=1.007940 -Carbon=12.010700 -Nitrogen=14.006700 -Oxygen=15.999400 -Electron=0.000000 -C_term=17.007340 -N_term=1.007940 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="header" - -sequences=4308 -sequences_after_tax=4311 -residues=987126 -distribution=735,9,29,63,75,90,93,89,65,71,60,44,36,35,21,23,17,15,17,10,15,8,4,5,6,2,6,1,0,1,1,1,0,2,2,1,0,1,0,0,0,0,0,0,0,0,0,1,1 -exec_time=6 -date=1163920245 -time=15:10:45 -queries=64 -max_hits=50 -version=2.1.03 -release=Bovine_mini.fasta -taskid=116392023801 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="summary" - -qmass1=605.519160 -qexp1=606.527100,1+ -qintensity1=194054.0000 -qmatch1=669 -qplughole1=24.151846 -qmass2=607.261347 -qexp2=608.269287,1+ -qintensity2=575293.0000 -qmatch2=495 -qplughole2=0.000000 -qmass3=608.924677 -qexp3=609.932617,1+ -qintensity3=288293.0000 -qmatch3=329 -qplughole3=0.000000 -qmass4=609.050410 -qexp4=610.058350,1+ -qintensity4=247745.0000 -qmatch4=329 -qplughole4=15.938901 -qmass5=618.949824 -qexp5=619.957764,1+ -qintensity5=274107.0000 -qmatch5=627 -qplughole5=18.276466 -qmass6=642.245234 -qexp6=643.253174,1+ -qintensity6=25219900.0000 -qmatch6=604 -qplughole6=19.986934 -qmass7=650.334345 -qexp7=651.342285,1+ -qintensity7=147879.0000 -qmatch7=541 -qplughole7=0.000000 -qmass8=652.491816 -qexp8=653.499756,1+ -qintensity8=38326200.0000 -qmatch8=477 -qplughole8=17.110570 -qmass9=652.545283 -qexp9=653.553223,1+ -qintensity9=268133.0000 -qmatch9=477 -qplughole9=15.441879 -qmass10=654.241328 -qexp10=655.249268,1+ -qintensity10=455778.0000 -qmatch10=455 -qplughole10=23.904417 -qmass11=661.693476 -qexp11=662.701416,1+ -qintensity11=318966.0000 -qmatch11=628 -qplughole11=18.748375 -qmass12=684.625849 -qexp12=685.633789,1+ -qintensity12=237183.0000 -qmatch12=456 -qplughole12=25.336848 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="decoy_summary" - -qmass1=605.519160 -qexp1=606.527100,1+ -qintensity1=194054.0000 -qmatch1=669 -qplughole1=24.151846 -qmass2=607.261347 -qexp2=608.269287,1+ -qintensity2=575293.0000 -qmatch2=495 -qplughole2=0.000000 -qmass3=608.924677 -qexp3=609.932617,1+ -qintensity3=288293.0000 -qmatch3=329 -qplughole3=0.000000 -qmass4=609.050410 -qexp4=610.058350,1+ -qintensity4=247745.0000 -qmatch4=329 -qplughole4=15.938901 -qmass5=618.949824 -qexp5=619.957764,1+ -qintensity5=274107.0000 -qmatch5=627 -qplughole5=18.276466 -qmass6=642.245234 -qexp6=643.253174,1+ -qintensity6=25219900.0000 -qmatch6=604 -qplughole6=19.986934 -qmass7=650.334345 -qexp7=651.342285,1+ -qintensity7=147879.0000 -qmatch7=541 -qplughole7=0.000000 -qmass8=652.491816 -qexp8=653.499756,1+ -qintensity8=38326200.0000 -qmatch8=477 -qplughole8=17.110570 -qmass9=652.545283 -qexp9=653.553223,1+ -qintensity9=268133.0000 -qmatch9=477 -qplughole9=15.441879 -qmass10=654.241328 -qexp10=655.249268,1+ -qintensity10=455778.0000 -qmatch10=455 -qplughole10=23.904417 -qmass11=661.693476 -qexp11=662.701416,1+ -qintensity11=318966.0000 -qmatch11=628 -qplughole11=18.748375 -qmass12=684.625849 -qexp12=685.633789,1+ -qintensity12=237183.0000 -qmatch12=456 -qplughole12=25.336848 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="peptides" - -q1_p1=0,605.641861,-0.122701,4,SASVSR,10,00000000,15.51,00020020000000000,0,0;"gi|15599453|30S_ribosomal_pro":0:49:54:2 -q1_p1_terms=K,I -q1_p2=1,603.669067,1.850093,2,RSDVK,4,0000000,10.40,00000020000000000,0,0;"gi|15642589|ribosomal_protein":0:77:81:1,"gi|28897033|ribosomal_protein":0:77:81:1 -q1_p2_terms=R,K:R,K -q1_p3=0,604.741455,0.777705,2,VIFAR,7,0000000,6.98,00000020000000000,0,0;"gi|30019716|Xanthine_phosphor":0:76:80:1 -q1_p3_terms=K,K -q1_p4=0,605.709549,-0.190389,2,CAAWR,10,0000000,4.25,00020000000000000,0,0;"gi|27693369|similar_to_riboso":0:86:90:1 -q1_p4_terms=R,R -q1_p5=1,604.657059,0.862101,2,SGKSAR,10,00000000,3.47,00000020000000000,0,0;"gi|17545655|PROBABLE_50S_RIBO":0:108:113:1,"gi|28899304|ribosomal_protein":0:104:109:1 -q1_p5_terms=R,I:R,I -q2_p1=-1 -q3_p1=-1 -q4_p1=1,610.666458,-1.616048,2,RGGGHK,8,00000000,2.94,00000020000000000,0,0;"gi|11036695|putative_L2_ribos":0:54:59:1,"gi|1685374|ribosomal_protein_":0:55:60:2 -q4_p1_terms=R,K:R,R -q5_p1=0,617.801437,1.148387,2,IAACLK,4,00000000,13.72,00000020000000000,0,0;"gi|13541175|50S_ribosomal_pro":0:108:113:1 -q5_p1_terms=R,G -q5_p2=1,617.804855,1.144969,2,IAMRK,4,0000000,13.42,00000020000000000,0,0;"gi|11878280|AF321497_1_phosph":0:540:544:2 -q5_p2_terms=R,A -q5_p3=0,617.652451,1.297373,2,IASDGR,4,00000000,13.42,00000020000000000,0,0;"gi|20543864|similar_to_riboso":0:57:62:2,"gi|12314263|bA486O22.3_(simil":0:57:62:2 -q5_p3_terms=K,V:K,V -q5_p4=0,617.735352,1.214472,2,IASVTK,4,00000000,13.42,00000020000000000,0,0;"gi|28493679|50S_ribosomal_pro":0:133:138:1 -q5_p4_terms=K,G -q5_p5=0,618.746445,0.203379,2,NACLAK,4,00000000,13.42,00000020000000000,0,0;"gi|32699630|RR8_CHLRE_Chlorop":0:20:25:1 -q5_p5_terms=R,K -q5_p6=0,618.680252,0.269572,2,NASSIK,4,00000000,13.42,00000020000000000,0,0;"gi|23112787|COG1670:_Acetyltr":0:42:47:1 -q5_p6_terms=R,V -q5_p7=0,618.677048,0.272776,2,ITEEK,12,0000000,4.61,00000020000000000,0,0;"gi|20825485|similar_to_riboso":0:69:73:1 -q5_p7_terms=R,H -q5_p8=0,618.680344,0.269480,2,LTETR,12,0000000,4.61,00000020000000000,0,0;"gi|2864701|MHC_class_I_heavy_":0:1:5:1 -q5_p8_terms=-,A -q5_p9=0,619.622055,-0.672231,2,NTEEK,12,0000000,3.59,00000020000000000,0,0;"gi|6321315|Homology_to_rat_S2":0:29:33:1 -q5_p9_terms=R,G -q5_p10=0,620.780655,-1.830831,3,VIVYK,19,0000000,3.02,00000020000000000,0,0;"gi|16330952|50S_ribosomal_pro":0:73:77:1 -q5_p10_terms=K,M -q6_p1=0,640.709061,1.536173,2,CFSER,5,0000000,7.48,20000000000000000,0,0;"gi|7657526|ribosomal_protein_":0:514:518:1 -q6_p1_terms=K,E -q6_p2=0,640.689148,1.556086,2,HLTDR,5,0000000,7.48,20000000000000000,0,0;"gi|22947834|borf-1":0:122:126:1 -q6_p2_terms=R,C -q6_p3=0,640.649353,1.595881,2,SNQHR,10,0000000,6.53,00000020000000000,0,0;"gi|730557|RL34_PEA_60S_RIBOSO":0:17:21:1 -q6_p3_terms=K,V -q6_p4=0,641.717072,0.528162,2,VSPSXR,15,00000000,6.09,00000020000000000,0,0;"gi|998744|ribosomal_protein_L":0:7:12:2 -q6_p4_terms=K,N -q6_p4_subst=5,X,P -q6_p5=1,641.677261,0.567973,2,DSRHK,10,0000000,5.87,00000020000000000,0,0;"gi|32418134|hypothetical_prot":0:6:10:1 -q6_p5_terms=R,R -q6_p6=1,641.720352,0.524882,2,TTRHK,10,0000000,5.87,00000020000000000,0,0;"gi|3822557|oxytocin_receptor":0:66:70:1 -q6_p6_terms=R,H -q6_p7=0,641.716949,0.528285,3,AGELPR,40,00000000,4.09,00000020000000000,0,0;"gi|15612711|30S_ribosomal_pro":0:91:96:1 -q6_p7_terms=K,V -q6_p8=0,640.732147,1.513087,2,LAQGPR,15,00000000,2.12,00000020000000000,0,0;"gi|29837764|putative_ribosoma":0:181:186:1 -q6_p8_terms=R,E -q6_p9=0,640.732269,1.512965,2,GKPSPR,15,00000000,2.09,00000020000000000,0,0;"gi|23119515|COG1020:_Non-ribo":0:1:6:1 -q6_p9_terms=-,V -q6_p10=1,641.763367,0.481867,2,GKRPGK,20,00000000,1.93,00000020000000000,0,0;"gi|166869|ribosomal_protein_S":0:25:30:1 -q6_p10_terms=K,G -q7_p1=-1 -q8_p1=0,652.825760,-0.333944,2,KPLAPK,10,00000000,4.46,00020000000000000,0,0;"gi|30148903|similar_to_60S_ri":0:110:115:1 -q8_p1_terms=R,K -q8_p2=0,652.736343,-0.244527,4,YTEIK,25,0000000,4.37,00020020000000000,0,0;"gi|15793002|50S_ribosomal_pro":0:3:7:1 -q8_p2_terms=K,D -q8_p3=0,652.736343,-0.244527,4,YTELK,25,0000000,4.37,00020020000000000,0,0;"gi|15645924|ribosomal_protein":0:3:7:1,"gi|15612296|50S_RIBOSOMAL_PRO":0:3:7:1 -q8_p3_terms=K,D:K,D -q8_p4=1,652.785950,-0.294134,3,KLHQK,36,0000000,3.83,00020000000000000,0,0;"gi|27806859|limbin":0:566:570:2 -q8_p4_terms=K,L -q8_p5=1,652.825760,-0.333944,2,IPPKAK,10,00000000,3.60,00020000000000000,0,0;"gi|404015|ribosomal_protein_L":0:1:6:1 -q8_p5_terms=-,K -q8_p6=0,652.696564,-0.204748,2,GTFSNK,25,00000000,2.15,20010000000000000,0,0;"gi|28526981|similar_to_60S_RI":0:77:82:1 -q8_p6_terms=K,Y -q8_p7=1,652.739655,-0.247839,2,KYTNK,25,0000000,2.15,20010000000000000,0,0;"gi|32400989|40S_ribosome_prot":0:11:15:2 -q8_p7_terms=K,K -q8_p8=0,652.762772,-0.270956,2,MNFNK,25,0000000,2.15,20010000000000000,0,0;"gi|15924055|phosphoribosylami":0:1:5:1 -q8_p8_terms=-,L -q8_p9=0,651.754852,0.736964,2,THGIPK,10,00000000,2.11,20000000000000000,0,0;"gi|34557671|FUSION_PENICILLIN":0:69:74:1 -q8_p9_terms=R,D -q8_p10=1,652.746246,-0.254430,2,ARHAAK,25,00000000,1.75,00020000000000000,0,0;"gi|15803493|putative_ribosoma":0:54:59:1,"gi|24114209|putative_ribosoma":0:54:59:1 -q8_p10_terms=K,V:K,V -q9_p1=0,653.731064,-1.185781,2,RPEPR,4,0000000,8.55,00000020000000000,0,0;"gi|30794364|diazepam_binding_":0:212:216:1 -q9_p1_terms=K,D -q9_p2=0,651.711868,0.833415,2,VPGHDK,16,00000000,2.03,00000020000000000,0,0;"gi|27807269|tenascin_X":0:2299:2304:1 -q9_p2_terms=R,G -q10_p1=0,654.800171,-0.558843,2,KPWPK,5,0000000,12.67,00020000000000000,0,0;"gi|16126453|hypoxanthine-guan":0:133:137:1 -q10_p1_terms=R,D -q10_p2=0,652.742950,1.498378,2,IEHVR,5,0000000,12.52,00000020000000000,0,0;"gi|23480613|Ribosomal_protein":0:94:98:1 -q10_p2_terms=R,K -q10_p3=0,652.825760,1.415568,3,KPLAPK,20,00000000,12.19,00000020000000000,0,0;"gi|30148903|similar_to_60S_ri":0:110:115:1 -q10_p3_terms=R,K -q10_p4=0,654.672760,-0.431432,2,DEVHR,5,0000000,10.18,00000020000000000,0,0;"gi|6094194|RS7_THICU_30S_ribo":0:139:143:1 -q10_p4_terms=R,M -q10_p5=1,655.746857,-1.505529,3,KNAPAR,29,00000000,8.07,00020000000000000,0,0;"gi|8953449|40S_ribosomal_prot":0:261:266:1 -q10_p5_terms=R,G -q10_p6=0,654.755554,-0.514226,3,TAAPPAK,25,000000000,7.81,00000020000000000,0,0;"gi|12407954|AF316149_1_riboso":0:301:307:4,"gi|12407954|AF316149_1_riboso":0:315:321:4,"gi|12407954|AF316149_1_riboso":0:322:328:4 -q10_p6_terms=K,A:K,T:K,A -q10_p7=0,654.666153,-0.424825,3,EDYTK,25,0000000,7.09,00000020000000000,0,0;"gi|23509806|ribosomal_protein":0:41:45:2 -q10_p7_terms=R,Y -q10_p8=0,654.755569,-0.514241,3,GGTPVPK,32,000000000,6.32,00000020000000000,0,0;"gi|18312189|ribosomal_protein":0:211:217:1 -q10_p8_terms=K,T -q10_p9=1,655.786560,-1.545232,4,NKIGPK,15,00000000,3.30,00020020000000000,0,0;"gi|17136324|Ribosomal_protein":0:198:203:1 -q10_p9_terms=K,K -q10_p10=0,655.829529,-1.588201,2,LLLAAR,10,00000000,2.74,00020000000000000,0,0;"gi|27683067|similar_to_40kDa_":0:25:30:1,"gi|30149544|similar_to_40S_ri":0:58:63:1,"gi|1173296|RSP4_ECHGR_40S_RIB":0:58:63:1,"gi|1710781|RSP4_CHICK_40S_RIB":0:58:63:1,"gi|29742843|similar_to_40S_ri":0:58:63:1,"gi|13642851|similar_to_40S_ri":0:58:63:1 -q10_p10_terms=K,A:K,A:K,A:K,A:K,A:K,A -q11_p1=0,660.716949,0.976527,4,LNDTAK,16,00000000,9.01,20000020000000000,0,0;"gi|29347323|nicotinate_phosph":0:182:187:1 -q11_p1_terms=R,Y -q11_p2=0,659.815048,1.878428,2,ILVTSK,4,00000000,5.32,20000000000000000,0,0;"gi|27806695|cystic_fibrosis_t":0:600:605:2 -q11_p2_terms=R,M -q11_p3=1,660.763458,0.930018,3,KVTTGR,28,00000000,4.53,00000020000000000,0,0;"gi|13541159|30S_ribosomal_pro":0:21:26:1 -q11_p3_terms=R,A -q11_p4=1,660.763458,0.930018,2,KTSVAR,12,00000000,3.78,00020000000000000,0,0;"gi|33241134|Ribosomal_protein":0:18:23:1,"gi|34765017|SSU_ribosomal_pro":0:15:20:1 -q11_p4_terms=R,V:R,V -q11_p5=1,660.760162,0.933314,2,TPKTSK,4,00000000,2.68,20000000000000000,0,0;"gi|15891731|AGR_L_3222p":0:15:20:1 -q11_p5_terms=K,D -q11_p6=0,660.677246,1.016230,2,ATENAR,12,00000000,2.18,00020000000000000,0,0;"gi|29653607|ribosomal_protein":0:65:70:1 -q11_p6_terms=K,R -q11_p7=1,660.789856,0.903620,2,GCVRAR,12,00000000,2.18,00020000000000000,0,0;"gi|18312189|ribosomal_protein":0:236:241:1 -q11_p7_terms=R,A -q11_p8=1,660.723648,0.969828,2,GRTTAR,12,00000000,2.18,00020000000000000,0,0;"gi|23119681|COG0047:_Phosphor":0:513:518:1 -q11_p8_terms=R,L -q11_p9=0,660.720245,0.973231,2,ISTNAR,12,00000000,2.18,00020000000000000,0,0;"gi|20178384|CPXV016_protein":0:28:33:1 -q11_p9_terms=R,I -q11_p10=1,660.720352,0.973124,2,KSEAAR,12,00000000,2.18,00020000000000000,0,0;"gi|16079595|ribosomal_protein":0:48:53:2 -q11_p10_terms=K,K -q12_p1=0,684.695358,-0.069509,4,GTPAAGDP,8,0000000000,23.26,00000020000000000,0,0;"gi|5002198|AF143203_1_interle":0:371:378:2 -q12_p1_terms=K,- -q12_p2=0,683.796646,0.829203,3,GAQAPLK,8,000000000,11.22,00000020000000000,0,0;"gi|27711016|similar_to_60S_RI":0:107:113:1 -q12_p2_terms=K,G -q12_p3=1,684.910767,-0.284918,2,VVKVLK,4,00000000,5.39,00000020000000000,0,0;"gi|1173033|RL34_AEDAL_60S_rib":0:100:105:2 -q12_p3_terms=K,A ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="decoy_peptides" - -q1_p1=-1 -q2_p1=1,604.657059,0.862101,2,SGKSAR,10,00000000,3.47,00000020000000000,0,0;"gi|17545655|PROBABLE_50S_RIBO":0:108:113:1,"gi|28899304|ribosomal_protein":0:104:109:1 -q2_p1_terms=R,I:R,I -q3_p1=-1 -q4_p1=-1 -q5_p1=-1 -q6_p1=0,640.709061,1.536173,2,CFSER,5,0000000,7.48,20000000000000000,0,0;"gi|7657526|ribosomal_protein_":0:514:518:1 -q6_p1_terms=K,E -q6_p2=0,640.689148,1.556086,2,HLTDR,5,0000000,7.48,20000000000000000,0,0;"gi|22947834|borf-1":0:122:126:1 -q6_p2_terms=R,C -q6_p3=0,640.649353,1.595881,2,SNQHR,10,0000000,6.53,00000020000000000,0,0;"gi|730557|RL34_PEA_60S_RIBOSO":0:17:21:1 -q6_p3_terms=K,V -q6_p4=0,641.717072,0.528162,2,VSPSXR,15,00000000,6.09,00000020000000000,0,0;"gi|998744|ribosomal_protein_L":0:7:12:2 -q6_p4_terms=K,N -q6_p4_subst=5,X,P -q7_p1=0,652.825760,-0.333944,2,KPLAPK,10,00000000,4.46,00020000000000000,0,0;"gi|30148903|similar_to_60S_ri":0:110:115:1 -q7_p1_terms=R,K -q8_p1=-1 -q9_p1=-1 -q9_p2=-1 -q10_p1=-1 -q11_p1=-1 -q12_p1=-1 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="proteins" - -"gi|23119459|COG1020:_Non-ribo"=45968.84,"gi|23119459|ref|ZP_00102537.1| COG1020: Non-ribosomal peptide synthetase modules and related protei" -"gi|33241155|Ribosomal_protein"=27403.05,"gi|33241155|ref|NP_876097.1| Ribosomal protein S3 [Prochlorococcus marinus subsp. marinus str. CCMP" -"gi|3914699|RL4_PIG_60S_RIBOSO"=11108.02,"gi|3914699|sp|Q29187|RL4_PIG 60S RIBOSOMAL PROTEIN L4 (L1) [MASS=11115]" -"gi|11496544|ribosomal_protein"=32958.51,"gi|11496544|ref|NP_044554.1| ribosomal protein S5 [Toxoplasma gondii]" -"gi|12644020|VWF_BOVIN_Von_Wil"=102598.52,"gi|12644020|sp|P80012|VWF_BOVIN Von Willebrand factor precursor (vWF)" -"gi|15889217|AGR_C_3516p"=15394.49,"gi|15889217|ref|NP_354898.1| AGR_C_3516p [Agrobacterium tumefaciens]" -"gi|29347323|nicotinate_phosph"=45318.21,"gi|29347323|ref|NP_810826.1| nicotinate phosphoribosyltransferase [Bacteroides thetaiotaomicron VPI" -"gi|15597620|probable_non-ribo"=480291.05,"gi|15597620|ref|NP_251114.1| probable non-ribosomal peptide synthetase [Pseudomonas aeruginosa PA01" -"gi|30148903|similar_to_60S_ri"=21733.09,"gi|30148903|ref|XP_301131.1| similar to 60S ribosomal protein L13 (A52) [Homo sapiens] [MASS=21733]" -"gi|15599453|30S_ribosomal_pro"=25837.74,"gi|15599453|ref|NP_252947.1| 30S ribosomal protein S3 [Pseudomonas aeruginosa PA01]" -"gi|13639605|similar_to_40S_ri"=15208.64,"gi|13639605|ref|XP_016113.1| similar to 40S ribosomal protein S10 [Homo sapiens] [MASS=15209]" -"gi|30519439|F9L_protein"=116876.68,"gi|30519439|emb|CAD90614.1| F9L protein [Cowpox virus] [MASS=116878]" -"gi|4895079|thrombospondin_4"=95338.75,"gi|4895079|gb|AAD32714.1| thrombospondin 4 [Mus musculus] [MASS=95340]" -"gi|30679124|NAD+_ADP-ribosylt"=72174.83,"gi|30679124|ref|NP_192148.2| NAD+ ADP-ribosyltransferase [Arabidopsis thaliana]" -"gi|16078254|similar_to_riboso"=20924.52,"gi|16078254|ref|NP_389071.1| similar to ribosomal-protein-alanine N-acetyltransferase [Bacillus sub" -"gi|20330759|AC103891_2_Putati"=19623.62,"gi|20330759|gb|AAM19122.1|AC103891_2 Putative ubiquitin / ribosomal protein CEP52 [Oryza sativa (ja" -"gi|33595872|phosphoribosylami"=41589.01,"gi|33595872|ref|NP_883515.1| phosphoribosylaminoimidazole carboxylase ATPase subunit [Bordetella pa" -"gi|15793154|50S_ribosomal_pro"=30097.28,"gi|15793154|ref|NP_282976.1| 50S ribosomal protein L2 [Neisseria meningitidis Z2491]" -"gi|15676072|50S_ribosomal_pro"=30124.30,"gi|15676072|ref|NP_273203.1| 50S ribosomal protein L2 [Neisseria meningitidis MC58]" -"gi|33593190|30S_ribosomal_pro"=8534.91,"gi|33593190|ref|NP_880834.1| 30S ribosomal protein S21 [Bordetella pertussis]" -"gi|15644001|phosphoribosylfor"=23587.86,"gi|15644001|ref|NP_229050.1| phosphoribosylformylglycinamidine synthase I [Thermotoga maritima]" -"gi|33152180|50S_ribosomal_pro"=15363.46,"gi|33152180|ref|NP_873533.1| 50S ribosomal protein L9 [Haemophilus ducreyi 35000HP]" -"gi|18310531|probable_phosphor"=41628.98,"gi|18310531|ref|NP_562465.1| probable phosphoribosyl pyrophosphate synthetase [Clostridium perfring" -"gi|9629858|UL15_protein"=78902.20,"gi|9629858|ref|NP_045342.1| UL15 protein [Bovine herpesvirus 1]" -"gi|23335713|hypothetical_prot"=28219.95,"gi|23335713|ref|ZP_00120946.1| hypothetical protein [Bifidobacterium longum DJO10A]" -"gi|26992011|phosphoribosylami"=38701.83,"gi|26992011|ref|NP_747436.1| phosphoribosylaminoimidazole carboxylase, ATPase subunit [Pseudomonas " -"gi|442754|A_Chain_A,_Superoxi"=15551.15,"gi|442754|pdb|1COB|A Chain A, Superoxide Dismutase (Co Substituted) (E.C.1.15.1.1)" -"gi|26990912|non-ribosomal_pep"=287551.01,"gi|26990912|ref|NP_746337.1| non-ribosomal peptide synthetase domain protein, putative [Pseudomonas" -"gi|21493019|NADH_dehydrogenas"=39188.70,"gi|21493019|ref|NP_660091.1| NADH dehydrogenase subunit 2 [Macroscelides proboscideus] [MASS=39189]" -"gi|15673500|bifunctional_puri"=57093.59,"gi|15673500|ref|NP_267674.1| bifunctional purine biosynthesis protein PurH [Lactococcus lactis subs" -"gi|23481646|Ribosomal_protein"=70273.85,"gi|23481646|gb|EAA17859.1| Ribosomal protein L15 amino terminal region, putative [Plasmodium yoelii" -"gi|18920474|AF408250_1_ribulo"=48170.01,"gi|18920474|gb|AAL82222.1|AF408250_1 ribulose 1,5-bisphosphate carboxylase/oxygenase large subunit " -"gi|6009553|growth_hormone-rel"=44867.99,"gi|6009553|dbj|BAA84959.1| growth hormone-releasing hormone receptor short form [Bos taurus] [MASS=" -"gi|23120335|COG1020:_Non-ribo"=37954.08,"gi|23120335|ref|ZP_00103040.1| COG1020: Non-ribosomal peptide synthetase modules and related protei" -"gi|30157963|similar_to_riboso"=60343.86,"gi|30157963|ref|XP_301405.1| similar to ribosomal protein L29 [Homo sapiens] [MASS=60345]" -"gi|18313949|orotate_phosphori"=20606.40,"gi|18313949|ref|NP_560616.1| orotate phosphoribosyltransferase (pyrE) [Pyrobaculum aerophilum]" -"gi|13541175|50S_ribosomal_pro"=17769.57,"gi|13541175|ref|NP_110863.1| 50S ribosomal protein L18 [Thermoplasma volcanium]" -"gi|998744|ribosomal_protein_L"=2528.57,"gi|998744|gb|AAB34186.1| ribosomal protein L32 {N-terminal} [Brevundimonas vesicularis, Peptide Par" -"gi|30262377|nonribosomal_pept"=267413.79,"gi|30262377|ref|NP_844754.1| nonribosomal peptide synthetase DhbF [Bacillus anthracis str. Ames]" -"gi|27694896|similar_to_mitoch"=12246.56,"gi|27694896|ref|XP_227601.1| similar to mitochondrial ribosomal protein S17 [Mus musculus] [Rattus " -"gi|7440743|S50100_ribosomal_p"=12965.81,"gi|7440743|pir||S50100 ribosomal protein L5, cytosolic - mouse (fragments) [MASS=12966]" -"gi|27677506|similar_to_riboso"=52684.05,"gi|27677506|ref|XP_222771.1| similar to ribosomal protein L7, cytosolic [validated] - rat [Rattus n" -"gi|1685374|ribosomal_protein_"=30582.05,"gi|1685374|gb|AAB36825.1| ribosomal protein L2 [Borrelia burgdorferi] [MASS=30582]" -"gi|11036695|putative_L2_ribos"=9555.07,"gi|11036695|gb|AAG27266.1| putative L2 ribosomal protein [Brachyspira pilosicoli] [MASS=9555]" -"gi|7545323|mucin"=54863.42,"gi|7545323|gb|AAB35070.2| mucin [Bos taurus] [MASS=54864]" -"gi|5002198|AF143203_1_interle"=40226.78,"gi|5002198|gb|AAD37356.1|AF143203_1 interleukin-16 [Bos indicus] [MASS=40227]" -"gi|21244404|ribosomal_RNA_sma"=38846.62,"gi|21244404|ref|NP_643986.1| ribosomal RNA small subunit methyltransferase C [Xanthomonas axonopodi" -"gi|120460|FOL1_BOVIN_Milk_fol"=25825.61,"gi|120460|sp|P02702|FOL1_BOVIN Milk folate-binding protein (FBP) (Folate receptor alpha)" -"gi|30519569|B18R_protein"=94692.90,"gi|30519569|emb|CAD90744.1| B18R protein [Cowpox virus] [MASS=94694]" -"gi|9695410|ribosomal_protein_"=23229.33,"gi|9695410|ref|NP_037632.1| ribosomal protein S2 [Phytophthora infestans]" -"gi|32411611|40S_RIBOSOMAL_PRO"=14820.17,"gi|32411611|ref|XP_326286.1| 40S RIBOSOMAL PROTEIN S22 (S15A) (YS24) [Neurospora crassa]" -"gi|4689022|ribosomal_protein_"=10863.93,"gi|4689022|emb|CAA80880.2| ribosomal protein A1 [Schizosaccharomyces pombe] [MASS=10864]" -"gi|32033887|COG0359:_Ribosoma"=15255.26,"gi|32033887|ref|ZP_00134158.1| COG0359: Ribosomal protein L9 [Actinobacillus pleuropneumoniae serov" -"gi|15011859|C-terminal_bindin"=46627.68,"gi|15011859|ref|NP_062074.2| C-terminal binding protein 1 [Rattus norvegicus]" -"gi|28868666|phosphoribosylfor"=140645.30,"gi|28868666|ref|NP_791285.1| phosphoribosylformylglycinamidine synthase [Pseudomonas syringae pv. t" -"gi|23306478|50S_ribosomal_pro"=14385.61,"gi|23306478|gb|AAM08940.1| 50S ribosomal protein L22 [Mycoplasma hominis] [MASS=14386]" -"gi|16273244|cell_division_pro"=23407.72,"gi|16273244|ref|NP_439485.1| cell division protein [Haemophilus influenzae Rd]" -"gi|29827410|putative_non-ribo"=57107.07,"gi|29827410|ref|NP_822044.1| putative non-ribosomal peptide synthetase [Streptomyces avermitilis MA" ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query1" - -title=CAexample_mini%2e0110%2e0110%2e1 -charge=1+ -mass_min=246.924800 -mass_max=588.970700 -int_min=802 -int_max=2.976e+04 -num_vals=14 -num_used1=-1 -Ions1=246.924800:2917,371.142600:2.976e+04,447.776600:5980,588.224900:1.329e+04,393.248400:1.629e+04,546.190400:5675,585.793200:6307,433.116900:6500,519.231000:2587,588.970700:894,400.087300:4295,456.096100:1441,410.767300:2367,447.006300:802 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query2" - -title=CAexample_mini%2e0068%2e0068%2e1 -charge=1+ -mass_min=220.415200 -mass_max=695.729600 -int_min=5 -int_max=3.266e+05 -num_vals=37 -num_used1=-1 -Ions1=236.752800:5164,321.439500:1.49e+04,503.142000:9154,591.252700:3.266e+05,220.415200:5012,370.838300:1.332e+04,459.325400:7185,547.131100:3.716e+04,221.148000:4746,396.948800:1.142e+04,493.265300:6551,529.326900:1.21e+04,308.977400:4622,415.256400:9993,440.659400:5673,573.090100:7046,265.001100:3949,353.071400:8589,508.712700:3082,590.436400:6433,264.038200:2292,326.772200:6981,498.038300:2378,563.917200:6020,238.902000:1539,354.931800:5667,485.201500:1824,586.983200:4863,283.264600:1005,386.892300:3428,548.104500:2770,598.495400:2533,551.232700:2458,589.214500:766,592.013200:5,677.221200:3376,695.729600:4083 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query3" - -title=CAexample_mini%2e0104%2e0104%2e1 -charge=1+ -mass_min=238.769600 -mass_max=605.793900 -int_min=2 -int_max=4.848e+04 -num_vals=23 -num_used1=-1 -Ions1=284.985500:8457,354.971200:4.848e+04,486.046800:3277,593.438200:5861,268.637800:4519,400.878200:3559,460.462000:1758,583.104500:4626,284.058100:2615,372.466200:2067,453.161400:1626,545.248500:4463,328.594000:1924,397.754800:778,591.408200:3026,238.769600:1266,605.793900:2859,240.302000:1003,592.181400:2134,310.140800:958,548.155600:1386,298.520100:957,285.600000:2 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query4" - -title=CAexample_mini%2e0036%2e0036%2e1 -charge=1+ -mass_min=224.999600 -mass_max=642.333900 -int_min=1 -int_max=5.755e+04 -num_vals=25 -num_used1=-1 -Ions1=284.770900:1.954e+04,354.991000:5.755e+04,488.895500:7147,556.488300:7268,238.687700:1.12e+04,372.699400:1.271e+04,454.795800:3413,595.166500:4375,268.978800:5470,344.463100:7303,463.623200:2240,591.197300:2836,282.866300:3481,418.612700:5094,496.265400:2103,574.146200:2646,224.999600:3396,414.964900:3310,267.094100:1647,370.850800:2853,424.433400:987,340.212000:462,355.606100:8,373.410500:1,642.333900:699 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query5" - -title=CAexample_mini%2e0022%2e0022%2e1 -charge=1+ -mass_min=255.688900 -mass_max=637.109000 -int_min=769 -int_max=3.71e+04 -num_vals=22 -num_used1=-1 -Ions1=255.688900:3816,434.351400:3.71e+04,506.193200:6074,602.371300:1.072e+04,259.154900:3136,384.085500:6315,500.651100:4730,612.690900:1.021e+04,313.280400:2240,405.928800:5021,523.039300:2056,603.287600:8327,270.697100:1322,417.313600:3580,471.156300:1408,595.847300:5851,310.341300:769,409.049900:2398,613.685700:3630,388.160800:1371,619.071900:3399,637.109000:1023 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query6" - -title=CAexample_mini%2e0054%2e0054%2e1 -charge=1+ -mass_min=187.201600 -mass_max=1041.259300 -int_min=1 -int_max=7.151e+05 -num_vals=85 -num_used1=-1 -Ions1=223.033500:2.189e+04,357.996300:4.414e+04,440.110400:7.151e+05,537.107900:1.488e+05,626.231000:2.705e+04,283.675000:1.881e+04,368.121200:3.143e+04,457.129100:4.845e+05,554.088700:2.465e+04,625.054700:2.408e+04,272.016500:1.58e+04,325.080600:2.947e+04,412.086100:9.074e+04,538.146200:1.81e+04,608.042000:2.244e+04,254.065600:1.497e+04,300.988500:2.835e+04,421.972500:6.947e+04,580.109900:1.768e+04,610.511000:1.731e+04,279.624800:1.06e+04,350.883800:2.754e+04,394.110400:6.197e+04,515.619600:9871,603.201200:9564,269.043600:1.008e+04,369.214900:2.663e+04,439.238600:5.566e+04,514.257300:8945,624.088400:6294,223.997300:9955,324.075900:1.44e+04,428.996600:3.997e+04,546.880600:6050,589.530900:2667,214.082200:9063,370.111100:1.356e+04,441.099800:1.822e+04,571.779100:944,612.204600:1378,285.242800:7582,343.147600:1.085e+04,394.885100:1.724e+04,590.185800:1073,267.164200:6972,342.240700:9047,411.301300:1.03e+04,608.799900:1,187.201600:6352,195.209700:4084,208.027000:4326,209.123900:5625,224.600000:1,237.213500:4485,239.155800:3728,239.935100:6907,265.979900:3395,267.968300:5437,284.333300:1,294.940700:3449,307.844000:6286,312.982100:7124,315.217500:1639,322.780500:5788,339.994100:448,340.938900:2737,348.771500:5860,353.104400:8866,358.766600:4,362.067600:2636,365.068600:5417,365.779300:6264,371.215800:4811,376.497200:3918,386.222400:7484,395.496600:2318,413.098300:3958,423.286000:3370,429.605100:13,452.987000:3977,458.072500:7051,487.199600:4115,682.928100:2027,695.615800:1.069e+04,1041.259300:4337 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query7" - -title=CAexample_mini%2e0106%2e0106%2e1 -charge=1+ -mass_min=238.407600 -mass_max=635.241500 -int_min=603 -int_max=7751 -num_vals=14 -num_used1=-1 -Ions1=238.407600:3132,400.042200:7751,490.349700:1697,635.241500:7198,409.040500:3673,493.706900:1111,565.036000:4817,399.227300:2996,590.441800:3003,437.994200:1442,627.167000:1312,417.801900:1006,570.874300:917,552.719000:603 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query8" - -title=CAexample_mini%2e0052%2e0052%2e1 -charge=1+ -mass_min=199.739300 -mass_max=637.149800 -int_min=2 -int_max=2.366e+07 -num_vals=69 -num_used1=-1 -Ions1=297.115500:4.087e+06,357.231900:2.366e+07,479.192400:4.089e+06,507.247500:5.326e+06,636.349200:3.372e+06,211.127900:1.15e+06,339.196000:4.752e+06,467.342800:2.798e+06,567.392700:1.266e+06,635.287400:2.497e+06,209.120700:8.935e+05,358.295800:2.576e+06,468.305000:2.252e+06,566.258500:1.26e+06,618.404800:3.353e+05,242.166600:7.437e+05,394.111100:9.412e+05,485.077800:2.008e+06,556.451400:1.165e+06,637.149800:2.76e+05,260.192700:5.276e+05,365.326200:9.067e+05,490.353000:1.66e+06,508.306100:1.109e+06,619.142100:1.66e+05,270.268900:4.491e+05,396.084500:8.038e+05,469.511400:1.394e+06,525.249800:1.08e+06,219.922700:4.054e+05,377.295800:7.785e+05,489.371200:9.712e+05,526.005100:2.548e+05,261.152600:3.243e+05,379.266400:6.771e+05,491.466600:5.862e+05,271.323900:2.275e+05,322.339800:6.766e+05,450.293800:4.612e+05,298.111700:1.905e+05,340.304700:6.167e+05,480.220700:4.376e+05,199.739300:1.793e+05,211.941300:1.541e+05,226.955800:1.478e+05,229.130100:1.376e+05,241.434400:1.383e+05,269.081900:1.018e+05,306.961000:5.034e+05,307.963300:1.451e+05,320.705300:3.647e+05,323.415000:1.453e+05,325.107200:3.923e+05,365.937000:206,393.038000:1.255e+05,411.237100:8.495e+04,420.127300:1.939e+05,421.048300:2.79e+05,448.627200:1.634e+05,449.640300:4.306e+05,455.360300:3.362e+05,459.147400:2.582e+05,462.263000:6.341e+04,466.635800:3.504e+05,470.162700:2,485.803300:10,492.139000:9,493.236800:1.71e+05,495.958000:4.424e+04 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query9" - -title=CAexample_mini%2e0114%2e0114%2e1 -charge=1+ -mass_min=307.355600 -mass_max=690.294100 -int_min=956 -int_max=1.853e+04 -num_vals=21 -num_used1=-1 -Ions1=401.341700:1.853e+04,498.986900:6643,547.348400:3014,635.426500:8829,307.355600:4949,438.972800:6406,637.223900:7757,395.127700:4566,481.041600:4656,619.028300:4136,400.083100:3121,438.080000:2315,609.018100:3089,308.509000:2468,456.526400:2232,636.450600:1451,490.289000:1825,617.288800:956,479.922400:1671,439.706100:1277,690.294100:2057 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query10" - -title=CAexample_mini%2e0076%2e0076%2e1 -charge=1+ -mass_min=197.623600 -mass_max=638.203400 -int_min=5 -int_max=7.549e+05 -num_vals=39 -num_used1=-1 -Ions1=226.066200:1.216e+05,337.138900:4.1e+04,412.163900:7.549e+05,541.228100:8.992e+04,637.258500:2.856e+04,227.128300:1.097e+04,394.287100:1.56e+04,467.984600:8.353e+04,522.998200:2.772e+04,618.310500:5130,243.930300:8782,315.218600:1.234e+04,413.151500:8.068e+04,542.068800:2.342e+04,635.720900:4906,296.979900:6749,354.942300:8012,469.047200:2.377e+04,526.093100:1.263e+04,636.334000:2925,247.981700:6024,298.149200:7319,478.415800:1.808e+04,555.233400:2460,638.203400:971,209.067900:4931,314.519200:2927,450.105200:1.729e+04,505.434000:2222,197.623600:2931,308.953000:2902,440.125300:2941,266.192900:1003,357.179900:2852,411.432000:2451,244.551000:5,394.892200:1049,487.265400:2195,494.047100:2100 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query11" - -title=CAexample_mini%2e0046%2e0046%2e1 -charge=1+ -mass_min=253.780200 -mass_max=646.474400 -int_min=2 -int_max=1.923e+04 -num_vals=39 -num_used1=-1 -Ions1=299.230000:6771,434.815400:1.125e+04,487.157100:6643,618.442900:1.923e+04,300.225800:5259,390.434300:1.011e+04,475.304000:6621,644.328000:1.518e+04,290.917200:3834,416.979200:9526,488.258200:5828,593.241200:1.237e+04,325.155600:2747,408.257400:9438,549.240500:4150,628.615700:8136,328.642500:1665,444.373600:2166,543.941500:3416,645.476100:6245,333.118100:1173,355.427600:2151,527.291000:1146,614.420400:5937,253.780200:1013,436.129600:1745,533.133500:1102,619.498800:5851,356.861100:1343,522.705000:728,646.474400:4839,392.647900:1058,489.033300:2,610.390900:3684,601.791000:2917,565.560800:1766,568.755500:1156,602.430900:582,626.458500:1407 ---gc0p4Jq0M2Yt08jU534c0p -Content-Type: application/x-Mascot; name="query12" - -title=CAexample_mini%2e0020%2e0020%2e1 -charge=1+ -mass_min=285.854800 -mass_max=718.956100 -int_min=801 -int_max=3.678e+04 -num_vals=36 -num_used1=-1 -Ions1=358.819000:2.646e+04,429.110100:3.678e+04,509.249000:9059,587.203600:6262,358.067100:7816,430.141600:2.724e+04,528.167700:8179,628.228500:5855,355.122200:7712,430.935700:4417,506.501500:7244,636.735600:5373,285.854800:7640,476.068000:3298,572.045800:7125,659.845000:3729,343.554900:5799,571.033400:2886,625.517300:3265,342.390300:4507,526.147800:950,673.874500:3110,355.955800:4125,621.544400:2648,359.544400:3963,607.463500:2512,340.616600:2535,622.494100:2494,294.853300:1659,668.757200:1448,360.989300:801,375.032200:866,654.385500:1383,667.399700:920,702.140100:1913,718.956100:2380 diff --git a/ms2/test/src/org/labkey/test/pages/ms2/MascotConfigPage.java b/ms2/test/src/org/labkey/test/pages/ms2/MascotConfigPage.java deleted file mode 100644 index d139fe56ca..0000000000 --- a/ms2/test/src/org/labkey/test/pages/ms2/MascotConfigPage.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2015-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.labkey.test.pages.ms2; - -import org.labkey.test.BaseWebDriverTest; -import org.labkey.test.Locator; -import org.labkey.test.WebTestHelper; -import org.labkey.test.pages.LabKeyPage; -import org.labkey.test.selenium.LazyWebElement; -import org.openqa.selenium.WebElement; - -public class MascotConfigPage extends LabKeyPage -{ - public MascotConfigPage(BaseWebDriverTest test) - { - super(test); - } - - public static MascotConfigPage beginAt(BaseWebDriverTest test) - { - test.beginAt(WebTestHelper.buildURL("ms2", "mascotConfig")); - return new MascotConfigPage(test); - } - - public MascotConfigPage setMascotServer(String serverUrl) - { - setFormElement(elementCache().serverUrlInput, serverUrl); - return this; - } - - public MascotConfigPage setMascotUser(String user) - { - setFormElement(elementCache().userInput, user); - return this; - } - - public MascotConfigPage setMascotPassword(String password) - { - setFormElement(elementCache().passwordInput, password); - return this; - } - - public MascotConfigPage setMascotProxy(String proxyUrl) - { - setFormElement(elementCache().proxyUrlInput, proxyUrl); - return this; - } - - public MascotTestPage testMascotSettings() - { - elementCache().testLink.click(); - return new MascotTestPage(this); - } - - public LabKeyPage save() - { - clickAndWait(elementCache().saveButton); - return null; - } - - public LabKeyPage cancel() - { - clickAndWait(elementCache().cancelButton); - return null; - } - - @Override - protected Elements newElementCache() - { - return new Elements(); - } - - protected class Elements extends LabKeyPage.ElementCache - { - WebElement serverUrlInput = new LazyWebElement(Locator.name("mascotServer"), this); - WebElement userInput = new LazyWebElement(Locator.name("mascotUserAccount"), this); - WebElement passwordInput = new LazyWebElement(Locator.name("mascotUserPassword"), this); - WebElement proxyUrlInput = new LazyWebElement(Locator.name("mascotHTTPProxy"), this); - - WebElement testLink = new LazyWebElement(Locator.linkWithText("Test Mascot settings"), this); - WebElement saveButton = new LazyWebElement(Locator.lkButton("Save"), this); - WebElement cancelButton = new LazyWebElement(Locator.lkButton("Cancel"), this); - } -} diff --git a/ms2/test/src/org/labkey/test/pages/ms2/MascotTestPage.java b/ms2/test/src/org/labkey/test/pages/ms2/MascotTestPage.java deleted file mode 100644 index 26a3ba446a..0000000000 --- a/ms2/test/src/org/labkey/test/pages/ms2/MascotTestPage.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2015-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.labkey.test.pages.ms2; - -import org.labkey.test.Locator; -import org.labkey.test.Locators; -import org.labkey.test.pages.LabKeyPage; -import org.labkey.test.selenium.LazyWebElement; -import org.openqa.selenium.NoSuchElementException; -import org.openqa.selenium.WebElement; - -public class MascotTestPage extends LabKeyPage -{ - private final MascotConfigPage _configPage; - - public MascotTestPage(MascotConfigPage configPage) - { - super(configPage); - _configPage = configPage; - - switchToWindow(1); - } - - public String getError() - { - try - { - return elementCache().testError.getText(); - } - catch (NoSuchElementException ignore) - { - return null; - } - } - - public String getConfigurationText() - { - return elementCache().configurationTextArea.getText(); - } - - public MascotConfigPage close() - { - getDriver().close(); - switchToMainWindow(); - - return _configPage; - } - - @Override - protected Elements newElementCache() - { - return new Elements(); - } - - protected class Elements extends LabKeyPage.ElementCache - { - WebElement testError = new LazyWebElement(Locators.labkeyError, this); - WebElement configurationTextArea = new LazyWebElement(Locator.tag("textarea"), this); - } -} diff --git a/ms2/test/src/org/labkey/test/tests/ms2/MascotTest.java b/ms2/test/src/org/labkey/test/tests/ms2/MascotTest.java deleted file mode 100644 index fe86d001f0..0000000000 --- a/ms2/test/src/org/labkey/test/tests/ms2/MascotTest.java +++ /dev/null @@ -1,512 +0,0 @@ -/* - * Copyright (c) 2015-2026 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.labkey.test.tests.ms2; - -import org.junit.Assume; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.experimental.categories.Category; -import org.labkey.api.util.FileUtil; -import org.labkey.api.util.Path; -import org.labkey.test.BaseWebDriverTest; -import org.labkey.test.Locator; -import org.labkey.test.SortDirection; -import org.labkey.test.TestCredentials; -import org.labkey.test.TestTimeoutException; -import org.labkey.test.WebTestHelper; -import org.labkey.test.categories.Daily; -import org.labkey.test.categories.MS2; -import org.labkey.test.categories.Mascot; -import org.labkey.test.components.BodyWebPart; -import org.labkey.test.credentials.Login; -import org.labkey.test.ms2.AbstractMS2SearchEngineTest; -import org.labkey.test.pages.ms2.MascotConfigPage; -import org.labkey.test.pages.ms2.MascotTestPage; -import org.labkey.test.util.DataRegionExportHelper; -import org.labkey.test.util.DataRegionTable; -import org.labkey.test.util.PortalHelper; -import org.labkey.test.util.TextSearcher; -import org.openqa.selenium.WebElement; - -import java.io.File; -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * Tests the fields added to the Customize Site form for the MS2 modules. - * - * WCH: Please take note on how you should set up the sequence database - * Bovine_mini.fasta Mascot server. You should copy it to - * /sequence/Bovine_mini.fasta/current/Bovine_mini.fasta - * Its name MUST BE "Bovine_mini.fasta" (excluding the quotes) - * Its Path "/sequence/Bovine_mini.fasta/current/Bovine_mini*.fasta" (excluding the quotes, and note the *) - * Its Rule to parse accession string from Fasta file: MUST BE - * Rule 4 ">\([^ ]*\)" (the rule number can be different, but regex must be the same or equivalent) - * Its Rule to Rule to parse description string from Fasta file: MUST BE - * Rule 5 ">[^ ]* \(.*\)" (the rule number can be different, but regex must be the same or equivalent) - * - */ -@Category({MS2.class, Mascot.class, Daily.class}) -@BaseWebDriverTest.ClassTimeout(minutes = 7) -public class MascotTest extends AbstractMS2SearchEngineTest -{ - protected static final String PEPTIDE = "R.RLPVGADR.G"; - protected static final String PEPTIDE2 = "R.SREVYIVATGYK.G"; - protected static final String PEPTIDE3 = "K.ENEPFEAALRR.F"; - protected static final String PEPTIDE4 = "-.MDIGAVKFGAFK.L"; - protected static final String PEPTIDE5 = "K.ASTVERLVTALHTLLQDMVAAPASR.L"; - protected static final String PROTEIN = "gi|23335713|hypothetical_prot"; - protected static final String SEARCH = "gi|23335713|hypothetical_prot"; - protected static final String SEARCH_FIND = "BIFIDOBACTERIUM LONGUM"; - protected static final String SEARCH_FIND_ALT = "Bifidobacterium longum"; - protected static final String PROTOCOL = "Mascot analysis"; - protected static final String SEARCH_TYPE = "mascot"; - protected static final String SEARCH_BUTTON = "Mascot"; - protected static final String SEARCH_NAME = "MASCOT"; - - private static String MASCOT_HOST; - private static Login MASCOT_USER_LOGIN; - private static String MASCOT_PROXY; - - @Override - protected void doCleanup(boolean afterTest) throws TestTimeoutException - { - cleanPipe(SEARCH_TYPE); - - _containerHelper.deleteProject(getProjectName(), afterTest); - } - - @BeforeClass - public static void setupProject() throws Exception - { - MascotTest init = getCurrentTest(); - - init.doSetup(); - } - - private void doSetup() throws IOException - { - if (TestCredentials.hasCredentials(SEARCH_TYPE)) - { - MASCOT_HOST = TestCredentials.getServer(SEARCH_TYPE).getHost(); - MASCOT_USER_LOGIN = TestCredentials.getServer(SEARCH_TYPE).getLogins().getFirst(); - MASCOT_PROXY = (String)TestCredentials.getServer(SEARCH_TYPE).getExtraValues().get("proxy"); - } - - createProjectAndFolder(); - PortalHelper _portalHelper = new PortalHelper(this); - navigateToFolder(FOLDER_NAME); - _portalHelper.addWebPart("MS2 Runs Browser"); - } - - @Test - public void testMascotAuthentication() - { - Assume.assumeTrue("Add Mascot Server info to test.credentials.json to test Mascot authentication", - TestCredentials.hasCredentials(SEARCH_TYPE)); - - String mascotServerURL = MASCOT_HOST; - String mascotUserAccount = MASCOT_USER_LOGIN.getUsername(); - String mascotUserPassword = MASCOT_USER_LOGIN.getPassword(); - String mascotHTTPProxyURL = MASCOT_PROXY; - MascotConfigPage configPage; - MascotTestPage testPage; - - // Case 1: default setting has to pass as it is configured by the administrator initially - log("Testing Mascot settings"); - configPage = MascotConfigPage.beginAt(this); - configPage. - setMascotServer(mascotServerURL). - setMascotUser(mascotUserAccount). - setMascotPassword(mascotUserPassword); - testPage = configPage.testMascotSettings(); - assertTextPresent("Test passed."); - configPage = testPage.close(); - - // Case 2: correct server, wrong user id - log("Testing non-existent Mascot user via " + mascotServerURL); - configPage. - setMascotServer(mascotServerURL). - setMascotUser("nonexistent"). - setMascotPassword(mascotUserPassword); - testPage = configPage.testMascotSettings(); - assertTextPresent("Test failed."); - configPage = testPage.close(); - - // Case 3: correct server, wrong user password - log("Testing wrong password fo Mascot user " + mascotUserAccount + " via " + mascotServerURL); - configPage. - setMascotServer(mascotServerURL). - setMascotUser(mascotUserAccount). - setMascotPassword("wrongpassword"); - testPage = configPage.testMascotSettings(); - assertTextPresent("Test failed."); - testPage.close(); - } - - @Test - public void testAlternateMascotAuthentication() throws Exception - { - Assume.assumeTrue("Add Mascot Server info to test.credentials.json to test Mascot authentication", - TestCredentials.hasCredentials(SEARCH_TYPE)); - - URL url = new URL((MASCOT_HOST.startsWith("http://") ? "" : "http://") + MASCOT_HOST); - StringBuilder alternativeLink = new StringBuilder("http://"); - alternativeLink.append(url.getHost()); - if (80 != url.getPort() && -1 != url.getPort()) - { - alternativeLink.append(":").append(url.getPort()); - } - alternativeLink.append("/"); - if ("".equals(url.getPath())) - alternativeLink.append("alternativefolder/"); - - String mascotServerURL = alternativeLink.toString(); - String mascotUserAccount = MASCOT_USER_LOGIN.getUsername(); - String mascotUserPassword = MASCOT_USER_LOGIN.getPassword(); - String mascotHTTPProxyURL = MASCOT_PROXY; - MascotConfigPage configPage; - MascotTestPage testPage; - - // Case 1: default setting has to pass as it is configured by the administrator initially - log("Testing Mascot settings"); - configPage = MascotConfigPage.beginAt(this); - configPage. - setMascotServer(mascotServerURL). - setMascotUser(mascotUserAccount). - setMascotPassword(mascotUserPassword); - testPage = configPage.testMascotSettings(); - assertTextPresent("Test passed."); - configPage = testPage.close(); - - // Case 2: correct server, wrong user id - log("Testing non-existent Mascot user via " + mascotServerURL); - configPage. - setMascotServer(mascotServerURL). - setMascotUser("nonexistent"). - setMascotPassword(mascotUserPassword); - testPage = configPage.testMascotSettings(); - assertTextPresent("Test failed."); - configPage = testPage.close(); - - // Case 3: correct server, wrong user password - log("Testing wrong password fo Mascot user " + mascotUserAccount + " via " + mascotServerURL); - configPage. - setMascotServer(mascotServerURL). - setMascotUser(mascotUserAccount). - setMascotPassword("wrongpassword"); - testPage = configPage.testMascotSettings(); - assertTextPresent("Test failed."); - testPage.close(); - } - - @Test - public void testDatImport() - { - // test import of .dat file - log("Upload existing Mascot .dat result file."); - navigateToFolder(FOLDER_NAME); - clickButton("Process and Import Data"); - _fileBrowserHelper.importFile("bov_sample/" + SEARCH_TYPE + "/test3/", "Import Search Results"); - - String mascotDatLabel = SAMPLE_BASE_NAME + ".dat"; - waitForRunningPipelineJobs(MAX_WAIT_SECONDS * 1000); - waitForElement(Locator.linkWithText(mascotDatLabel)); - - log("Spot check results loaded from .dat file"); - clickAndWait(Locator.linkWithText(mascotDatLabel)); - String overviewText = new BodyWebPart(getDriver(), "Run Overview").getComponentElement().getText(); - assertTextPresent(new TextSearcher(overviewText), - "Trypsin", // N.B. when importing via XML, this becomes lower case ("trypsin") - "MASCOT", - "CAexample_mini.dat", - "sampledata/xarfiles/ms2pipe/bov_sample/mascot/test3", - "Bovine_mini1.fasta"); - - DataRegionTable peptidesTable = new DataRegionTable(REGION_NAME_PEPTIDES, this); - - // really 466 peptides in the .dat import, but only first 100 show in default view - assertEquals("Wrong number of peptides found", 100, peptidesTable.getDataRowCount()); - List peptideRow = peptidesTable.getRowDataAsText(0); - List expectedPeptideRow = new ArrayList<>(Arrays.asList( - "4", // Scan - "3+", // Z - "15.100", // Ion - "29.770", // Identity - "24.030", // Homology - "8%", // Ion% - "-0.8489", // dMass - "K.VEHLDKDLFR.R", // Peptide - "1", // SeqHits - "gi|23335713|hypothetical_prot")); // Protein - expectedPeptideRow.removeAll(peptideRow); - assertTrue("Missing values from first peptide row: [" + String.join(",", expectedPeptideRow) + "]", expectedPeptideRow.isEmpty()); - String value = peptidesTable.getDataAsText(0, "Expect"); - assertEquals("Wrong value for 'Expect' in first row", 1.47, Double.parseDouble(value), 0.01); - value = peptidesTable.getDataAsText(0, "CalcMH+"); - assertEquals("Wrong value for 'CalcMH+' in first row", 1272.43, Double.parseDouble(value), 0.01); - navigateToFolder(FOLDER_NAME); - BodyWebPart ms2Overview = new BodyWebPart(getDriver(), "MS2 Runs Overview"); - WebElement filterEngine = Locator.id("filter-engine").waitForElement(ms2Overview, WAIT_FOR_JAVASCRIPT); - setFormElement(filterEngine, "MASCOT"); - setFormElement(Locator.id("filter-fasta").findElement(ms2Overview), "Bovine_mini1.fasta"); - _extHelper.selectExtGridItem("path", "/MS2VerifyProject/ms2folder", -1, "x-grid-panel", false); - Locator.button("Show Matching MS2 Runs").findElement(ms2Overview).click(); - clickAndWait(Locator.linkWithText("CAexample_mini.dat").waitForElement(ms2Overview, WAIT_FOR_JAVASCRIPT)); - waitForText("Peptides", "CAexample_mini.mgf"); - click(Locator.linkWithText("K.GTPAAGDP.-")); - - switchToWindow(1); - peptidesTable = new DataRegionTable(REGION_NAME_PEPTIDES, this); - List peptides = peptidesTable.getColumnDataAsText("Peptide"); - assertEquals("peptide grid not filtered on the current fraction/scan/charge", Arrays.asList("K.GTPAAGDP.-", "K.GAQAPLK.G", "K.VVKVLK.A"), peptides); - getDriver().close(); - switchToMainWindow(); - } - - - @Test - public void testDatImportWithDecoys() - { - // test import of .dat file - log("Upload existing Mascot .dat result file."); - navigateToFolder(FOLDER_NAME); - clickButton("Process and Import Data"); - _fileBrowserHelper.importFile("bov_sample/" + SEARCH_TYPE + "/test4/", "Import Search Results"); - - String mascotDatLabel = SAMPLE_BASE_NAME + "_decoy.dat"; - waitForRunningPipelineJobs(MAX_WAIT_SECONDS * 1000); - waitForElement(Locator.linkWithText(mascotDatLabel)); - - log("Spot check results loaded from .dat file"); - clickAndWait(Locator.linkWithText(mascotDatLabel)); - String overviewText = new BodyWebPart(getDriver(), "Run Overview").getComponentElement().getText(); - assertTextPresent(new TextSearcher(overviewText), - "Trypsin", // N.B. when importing via XML, this becomes lower case ("trypsin") - "MASCOT", - "CAexample_mini_decoy.dat", - "sampledata/xarfiles/ms2pipe/bov_sample/mascot/test4", - "Bovine_mini1.fasta"); - - DataRegionTable peptidesTable = new DataRegionTable(REGION_NAME_PEPTIDES, this); - peptidesTable.ensureColumnsPresent("HitRank", "QueryNumber", "Decoy"); - peptidesTable = new DataRegionTable(REGION_NAME_PEPTIDES, this); - - assertEquals("Wrong number of peptides found", 67, peptidesTable.getDataRowCount()); - List peptideRow = peptidesTable.getRowDataAsText(0); - List expectedPeptideRow = new ArrayList<>(Arrays.asList( - "20", // Scan - "1+", // Z - "23.260", // Ion - "26.590", // Identity - "25.340", // Homology - "29%", // Ion% - "-0.0695", // dMass - "K.GTPAAGDP.-", // Peptide - "1", // SeqHits - "gi|5002198|AF143203_1_interle")); // Protein - expectedPeptideRow.removeAll(peptideRow); - assertTrue("Missing values from first peptide row: [" + String.join(",", expectedPeptideRow) + "]", expectedPeptideRow.isEmpty()); - String value = peptidesTable.getDataAsText(0, "Expect"); - assertEquals("Wrong value for 'Expect' in first row", 0.110, Double.parseDouble(value), 0.01); - value = peptidesTable.getDataAsText(0, "CalcMH+"); - assertEquals("Wrong value for 'CalcMH+' in first row", 685.7027, Double.parseDouble(value), 0.01); - value = peptidesTable.getDataAsText(0, "QueryNumber"); - assertEquals("Wrong value for 'QueryNumber' in first row", 12, Integer.parseInt(value)); - value = peptidesTable.getDataAsText(0, "HitRank"); - assertEquals("Wrong value for 'HitRank' in first row", 1, Integer.parseInt(value)); - value = peptidesTable.getDataAsText(0, "Decoy"); - assertEquals("Wrong value for 'Decoy' in first row", "false", value); - peptidesTable.setFilter("Decoy", "Equals", "true"); - assertEquals("Wrong number of decoy peptides", 6, peptidesTable.getDataRowCount()); - peptidesTable.setFilter("QueryNumber", "Equals", "12"); - assertEquals("Should not have a decoy peptide for query 12", 0, peptidesTable.getDataRowCount()); - peptidesTable.clearAllFilters("QueryNumber"); - peptidesTable.clearAllFilters("Decoy"); - peptidesTable.setFilter("Decoy", "Equals", "false"); - assertEquals("Wrong number of non-decoy peptides", 61, peptidesTable.getDataRowCount()); - peptidesTable.setFilter("QueryNumber", "Equals", "2"); - assertEquals("Should not have a non-decoy peptide for query 2", 0, peptidesTable.getDataRowCount()); - peptidesTable.clearAllFilters("QueryNumber"); - peptidesTable.clearAllFilters("Decoy"); - peptidesTable.setFilter("HitRank", "Is Greater Than", "1"); - peptidesTable.setSort("HitRank", SortDirection.DESC); - assertEquals("Wrong number of peptides with hit rank > 1", 55, peptidesTable.getDataRowCount()); - value = peptidesTable.getDataAsText(0, "HitRank"); - assertEquals("Wrong value for maximum 'HitRank'", "10", value); - value = peptidesTable.getDataAsText(0, "QueryNumber"); - assertEquals("Wrong value for 'QueryNumber' in first row with max hit rank", "5", value); - peptidesTable.clearSort("HitRank"); - peptidesTable.clearAllFilters("HitRank"); - _customizeViewsHelper.revertUnsavedViewGridClosed(); - navigateToFolder(FOLDER_NAME); - waitForElement(Locator.id("filter-engine")); - setFormElement(Locator.id("filter-engine"), "MASCOT"); - setFormElement(Locator.id("filter-fasta"), "Bovine_mini1.fasta"); - _extHelper.selectExtGridItem("path", "/MS2VerifyProject/ms2folder", -1, "x-grid-panel", false); - click(Locator.button("Show Matching MS2 Runs")); - clickAndWait(Locator.linkWithText("CAexample_mini_decoy.dat")); - - waitForText("Decoy Summary"); - //get and check values in Decoy Summary table - List headers = getDriver().findElements(Locator.xpath("//table[tbody/tr/th/span[text()='Decoy Summary']]//table//td[@class='labkey-form-label']")); - List values = getDriver().findElements(Locator.xpath("//table[tbody/tr/th/span[text()='Decoy Summary']]//table//td[not(@class='labkey-form-label')]")); - Map decoySummary = new LinkedHashMap<>(); - for(int i = 0; i < headers.size(); i++) - { - decoySummary.put(headers.get(i).getText(), values.get(i).getText()); - } - assertEquals("Incorrect Identity Threshold in Decoy Summary", "13.1", getDriver().findElement(Locator.id("ionThresholdValue")).getText()); - assertEquals("Incorrect In Target count in Decoy Summary", "3", getDriver().findElement(Locator.id("inTargetValue")).getText()); - assertEquals("Incorrect In Decoy count in Decoy Summary", "0", getDriver().findElement(Locator.id("inDecoyValue")).getText()); - assertEquals("Incorrect FDR % in Decoy Summary", "0.00%", getDriver().findElement(Locator.id("fdrValue")).getText()); - - // TODO: Would be good to test the functionality of the "Adjust FDR To" dropdown, but we may still have further tweaking on this UI to do pending client feedback. - - DataRegionTable drt = new DataRegionTable(REGION_NAME_PEPTIDES, this); - drt.setFilter("Peptide", "Equals", "R.KPLAPK.K"); - drt.setSort("Ion", SortDirection.DESC); - assertTrue("Not enough results to test filtering", drt.getDataRowCount() > 1); - - String greatest = drt.getDataAsText(0, "Ion"); - - //Apply filter - checkCheckbox(Locator.checkboxByName("highestScore")); - clickAndWait(Locator.id("AddHighestScoreFilterButton")); - assertEquals("Too many results ", 1, drt.getDataRowCount()); - - String filteredIonValue = drt.getDataAsText(0, "Ion"); - assertEquals("Highest ion value not shown", greatest, filteredIonValue); - - checkCheckbox(Locator.checkboxById("isIonCutoff")); - waitForElement(Locator.tagContainingText("span","Ion >= 13.1")); - assertEquals("All results should be filtered", 0, drt.getDataRowCount()); - - selectOptionByText(Locator.tagWithName("select", "desiredFdr"),"1.0%"); - assertChecked(Locator.checkboxById("isIonCutoff")); - assertEquals("IonCutoff incorrectly applied", 1, drt.getDataRowCount()); - drt.clearFilter("Peptide"); - assertEquals("Unexpected number of results for IonCutoff filter", 20, drt.getDataRowCount()); - drt.clearFilter("Ion"); //reset filter - drt.clearSort("Ion"); - } - - @Override - protected void setupEngine() - { - log("Analyze " + SEARCH_NAME + " sample data."); - _fileBrowserHelper.selectImportDataAction(SEARCH_BUTTON + " Peptide Search"); - } - - @Override - protected void basicChecks() - { - navigateToFolder(FOLDER_NAME); - clickAndWait(Locator.linkWithImage(WebTestHelper.getContextPath() + "/MS2/images/runIcon.gif")); - - // Make sure we're not using a custom default view for the current user - selectOptionByText(Locator.name("viewParams"), ""); - clickButton("Go"); - - log("Test filtering and sorting"); - DataRegionTable peptidesRegion = new DataRegionTable(REGION_NAME_PEPTIDES, this); - peptidesRegion.setFilter("Mass", "Is Greater Than", "1000"); - assertTextNotPresent(PEPTIDE); - peptidesRegion.setSort("Scan", SortDirection.DESC); - assertTextBefore(PEPTIDE2, PEPTIDE3); - - log("Test Save View"); - clickButton("Save View"); - setFormElement(Locator.name("name"), VIEW); - clickButton("Save View"); - selectOptionByText(Locator.name("viewParams"), ""); - clickButton("Go"); - assertTextPresent(PEPTIDE); - selectOptionByText(Locator.name("viewParams"), VIEW); - clickButton("Go"); - assertTextNotPresent(PEPTIDE); - assertTextBefore(PEPTIDE2, PEPTIDE3); - - log("Test exporting"); - File expFile = new DataRegionExportHelper(new DataRegionTable("query", this)) - .exportText(DataRegionExportHelper.TextSeparator.COMMA); - TextSearcher tsvSearcher = new TextSearcher(expFile); - - assertTextNotPresent(tsvSearcher, PEPTIDE); - assertTextPresentInThisOrder(tsvSearcher, PEPTIDE2, PEPTIDE3); - assertTextPresent(tsvSearcher, PROTEIN); - - log("Test Comparing Peptides"); - navigateToFolder(FOLDER_NAME); - DataRegionTable MS2SearchRunsTable = new DataRegionTable("MS2SearchRuns", this); - MS2SearchRunsTable.checkAllOnPage(); - MS2SearchRunsTable.clickHeaderMenu("Compare", "Peptide"); - selectOptionByText(Locator.name("viewParams"), VIEW); - clickButton("Go"); - assertTextPresent("(Mass > 1000)"); - - DataRegionTable compareRegion = new DataRegionTable("MS2Compare", this); - compareRegion.setSort("Peptide", SortDirection.DESC); - assertTextBefore(PEPTIDE5, PEPTIDE4); - - navigateToFolder(FOLDER_NAME); - - log("Verify experiment information in MS2 runs."); - assertElementPresent(Locator.linkWithText(PROTOCOL)); - - log("Test Protein Search"); - setFormElement(Locator.name("identifier"), SEARCH); - click(Locator.name("exactMatch")); - clickButton("Search"); - assertElementPresent(Locator.linkContainingText(SAMPLE_BASE_NAME + " (test2)")); - clickAndWait(Locator.id("expandCollapse-ProteinSearchProteinMatches"), 0); - assertTrue(isTextPresent(SEARCH_FIND) || isTextPresent(SEARCH_FIND_ALT)); - - setFormElement(Locator.name("minimumProbability"), "2.0"); - clickButton("Search"); - clickAndWait(Locator.id("expandCollapse-ProteinSearchProteinMatches"), 0); - assertTrue(isTextPresent(SEARCH_FIND) || isTextPresent(SEARCH_FIND_ALT)); - assertElementNotPresent(Locator.linkWithText(SAMPLE_BASE_NAME + " (test2)")); - - setFormElement(Locator.name("identifier"), "GarbageProteinName"); - setFormElement(Locator.name("minimumProbability"), ""); - clickButton("Search"); - clickAndWait(Locator.id("expandCollapse-ProteinSearchProteinMatches"), 0); - assertTextNotPresent(SEARCH_FIND, SEARCH_FIND_ALT); - assertTextPresent("No data to show"); - } - - @Override - protected void cleanPipe(String search_type) - { - super.cleanPipe(search_type); - - if (PIPELINE_PATH == null) - return; - - File rootDir = new File(PIPELINE_PATH); - delete(FileUtil.appendPath(rootDir, Path.parse("databases/mascot"))); - } -} diff --git a/ms2/webapp/WEB-INF/ms2/ms2Context.xml b/ms2/webapp/WEB-INF/ms2/ms2Context.xml index eaed7e3683..185035b17f 100644 --- a/ms2/webapp/WEB-INF/ms2/ms2Context.xml +++ b/ms2/webapp/WEB-INF/ms2/ms2Context.xml @@ -16,13 +16,6 @@ - - - - - - - @@ -87,29 +80,6 @@ - - - - - - - - - - - org.labkey.ms2.pipeline.FastaCheckTask - - - - org.labkey.ms2.pipeline.mascot.MascotSearchTask - - - - - - - -