/pride-inspector/trunk/src/main/java/uk/ac/ebi/pride/gui/task/impl/ExportSpectrumMGFTask.java

http://pride-toolsuite.googlecode.com/
Java | 142 lines | 93 code | 17 blank | 32 comment | 17 complexity | df0bf71b1004e057928e2ceb5124deb7 MD5 | raw file
  1. package uk.ac.ebi.pride.gui.task.impl;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import uk.ac.ebi.pride.data.controller.DataAccessController;
  5. import uk.ac.ebi.pride.data.controller.DataAccessException;
  6. import uk.ac.ebi.pride.data.core.Experiment;
  7. import uk.ac.ebi.pride.data.core.Spectrum;
  8. import uk.ac.ebi.pride.gui.GUIUtilities;
  9. import uk.ac.ebi.pride.gui.desktop.Desktop;
  10. import uk.ac.ebi.pride.gui.utils.Constants;
  11. import java.io.File;
  12. import java.io.FileWriter;
  13. import java.io.IOException;
  14. import java.io.PrintWriter;
  15. /**
  16. * Task to export to MGF file format
  17. * <p/>
  18. * User: dani, rwang
  19. * Date: 18-Oct-2010
  20. * Time: 10:46:54
  21. */
  22. public class ExportSpectrumMGFTask extends AbstractDataAccessTask<Void, Void> {
  23. private static final Logger logger = LoggerFactory.getLogger(ExportSpectrumDescTask.class);
  24. /**
  25. * the default task title
  26. */
  27. private static final String DEFAULT_TASK_TITLE = "Exporting Spectrum MGF format";
  28. /**
  29. * the default task description
  30. */
  31. private static final String DEFAULT_TASK_DESCRIPTION = "Exporting Spectrum MGF format";
  32. /**
  33. * output File
  34. */
  35. private String outputFilePath;
  36. /**
  37. * Retrieve spectrum data in an MGF file format
  38. *
  39. * @param controller DataAccessController
  40. * @param outputFilePath file to output the result.
  41. */
  42. public ExportSpectrumMGFTask(DataAccessController controller, String outputFilePath) {
  43. super(controller);
  44. this.outputFilePath = outputFilePath;
  45. this.setName(DEFAULT_TASK_TITLE);
  46. this.setDescription(DEFAULT_TASK_DESCRIPTION);
  47. }
  48. @Override
  49. protected Void retrieve() throws Exception {
  50. PrintWriter writer = null;
  51. try {
  52. writer = new PrintWriter(new FileWriter(new File(outputFilePath)));
  53. Experiment exp = (Experiment) controller.getMetaData();
  54. //------- Comment section -------
  55. // data source
  56. if (controller.getType().equals(DataAccessController.Type.XML_FILE)) {
  57. writer.println("# Data source: " + ((File) controller.getSource()).getAbsolutePath());
  58. } else if (controller.getType().equals(DataAccessController.Type.DATABASE)) {
  59. writer.println("# Data source: pride public mysql instance");
  60. }
  61. // accession if exist
  62. String acc = exp.getAccession();
  63. if (acc != null) {
  64. writer.println("# PRIDE accession: " + acc);
  65. }
  66. String title = exp.getTitle();
  67. if (title != null) {
  68. writer.println("# Experiment title: " + title);
  69. }
  70. // number of spectrum
  71. if (controller.hasSpectrum()) {
  72. writer.println("# Number of spectra: " + controller.getNumberOfSpectra());
  73. }
  74. // number of protein identifications
  75. if (controller.hasIdentification()) {
  76. writer.println("# Number of protein identifications: " + controller.getNumberOfIdentifications());
  77. }
  78. // number of peptides
  79. if (controller.hasPeptide()) {
  80. writer.println("# Number of peptides: " + controller.getNumberOfPeptides());
  81. }
  82. //------- MGF content section -------
  83. for (Comparable spectrumId : controller.getSpectrumIds()) {
  84. Spectrum spectrum = controller.getSpectrumById(spectrumId);
  85. int msLevel = controller.getMsLevel(spectrumId);
  86. if (msLevel == 2) {
  87. writer.println("BEGIN IONS");
  88. writer.println("TITLE=" + spectrumId);
  89. writer.println("PEPMASS=" + controller.getPrecursorMz(spectrumId));
  90. // precursor charge
  91. int charge = controller.getPrecursorCharge(spectrumId);
  92. writer.println("CHARGE=" + charge + (charge >= 0 ? "+" : "-"));
  93. //get both arrays
  94. double[] mzBinaryArray = spectrum.getMzBinaryDataArray().getDoubleArray();
  95. double[] intensityArray = spectrum.getIntensityBinaryDataArray().getDoubleArray();
  96. for (int i = 0; i < mzBinaryArray.length; i++) {
  97. writer.println(mzBinaryArray[i] + Constants.TAB + intensityArray[i]);
  98. }
  99. writer.println("END IONS" + Constants.LINE_SEPARATOR);
  100. // this is important for cancelling
  101. if (Thread.interrupted()) {
  102. throw new InterruptedException();
  103. }
  104. writer.flush();
  105. }
  106. }
  107. writer.flush();
  108. } catch (DataAccessException e2) {
  109. String msg = "Failed to retrieve data from data source";
  110. logger.error(msg, e2);
  111. GUIUtilities.error(Desktop.getInstance().getMainComponent(), msg, "Export Error");
  112. } catch (IOException e1) {
  113. String msg = "Failed to write data to the output file, please check you have the right permission";
  114. logger.error(msg, e1);
  115. GUIUtilities.error(Desktop.getInstance().getMainComponent(), msg, "Export Error");
  116. } catch (InterruptedException e3) {
  117. logger.warn("Exporting spectrum in MGF format has been interrupted");
  118. } finally {
  119. if (writer != null) {
  120. writer.close();
  121. }
  122. }
  123. return null;
  124. }
  125. }