public void clearData(boolean clearDatabaseFolder) { projectDetails = null; spectrumAnnotator = new SpectrumAnnotator(); try { spectrumFactory.closeFiles(); } catch (Exception e) { e.printStackTrace(); } try { sequenceFactory.closeFile(); } catch (Exception e) { e.printStackTrace(); } try { GOFactory.getInstance().closeFiles(); } catch (Exception e) { e.printStackTrace(); } try { spectrumFactory.clearFactory(); } catch (Exception e) { e.printStackTrace(); } try { sequenceFactory.clearFactory(); } catch (Exception e) { e.printStackTrace(); } try { GOFactory.getInstance().clearFactory(); } catch (Exception e) { e.printStackTrace(); } identifiedModifications = null; if (clearDatabaseFolder) { clearDatabaseFolder(); } resetFeatureGenerator(); // set up the tabs/panels currentPSFile = null; }
/** * This dialog allows the user to resolve manually some protein inference issues. * * @author Marc Vaudel * @author Harald Barsnes */ public class ProteinInferenceDialog extends javax.swing.JDialog { /** The inspected protein match. */ private ProteinMatch inspectedMatch; /** The protein accessions. */ private ArrayList<String> accessions; /** The detected unique matches (if any). */ private ArrayList<String> uniqueMatches = new ArrayList<String>(); /** Associated matches presenting the same proteins or a share. */ private ArrayList<String> associatedMatches = new ArrayList<String>(); /** The sequence factory. */ private SequenceFactory sequenceFactory = SequenceFactory.getInstance(); /** The PeptideShaker parent frame. */ private PeptideShakerGUI peptideShakerGUI; /** The candidate protein table column header tooltips. */ private ArrayList<String> candidateProteinsTableToolTips; /** The unique hits table column header tooltips. */ private ArrayList<String> uniqueHitsTableToolTips; /** The related hits table column header tooltips. */ private ArrayList<String> relatedHitsTableToolTips; /** The identification. */ private Identification identification; /** The selected main match. */ private String previousMainMatch; /** * Creates new form ProteinInferenceDialog. * * @param peptideShakerGUI * @param inspectedMatch * @param identification */ public ProteinInferenceDialog( PeptideShakerGUI peptideShakerGUI, String inspectedMatch, Identification identification) { super(peptideShakerGUI, true); this.identification = identification; this.peptideShakerGUI = peptideShakerGUI; try { this.inspectedMatch = identification.getProteinMatch(inspectedMatch); previousMainMatch = this.inspectedMatch.getMainMatch(); } catch (Exception e) { peptideShakerGUI.catchException(e); this.dispose(); } accessions = new ArrayList(Arrays.asList(ProteinMatch.getAccessions(inspectedMatch))); for (String proteinAccession : accessions) { if (identification.getProteinIdentification().contains(proteinAccession)) { uniqueMatches.add(proteinAccession); } } for (String proteinKey : identification.getProteinIdentification()) { if (ProteinMatch.getNProteins(proteinKey) > 1 && !associatedMatches.contains(proteinKey) && !proteinKey.equals(inspectedMatch)) { for (String proteinAccession : accessions) { if (proteinKey.contains(proteinAccession)) { associatedMatches.add(proteinKey); break; } } } } initComponents(); // make sure that the scroll panes are see-through proteinMatchJScrollPane.getViewport().setOpaque(false); uniqueHitsJScrollPane.getViewport().setOpaque(false); relatedHitsJScrollPane.getViewport().setOpaque(false); groupClassJComboBox.setRenderer(new AlignedListCellRenderer(SwingConstants.CENTER)); PSParameter psParameter = new PSParameter(); try { psParameter = (PSParameter) identification.getProteinMatchParameter(inspectedMatch, psParameter); } catch (Exception e) { peptideShakerGUI.catchException(e); } matchInfoLbl.setText( "[Score: " + Util.roundDouble(psParameter.getProteinScore(), 2) + ", Confidence: " + Util.roundDouble(psParameter.getProteinConfidence(), 2) + "]"); // set up the table column properties setColumnProperies(); // The index should be set in the design according to the PSParameter class static fields! groupClassJComboBox.setSelectedIndex(psParameter.getGroupClass()); setLocationRelativeTo(peptideShakerGUI); setVisible(true); } /** Set the properties for the columns in the results tables. */ private void setColumnProperies() { proteinMatchTable.getTableHeader().setReorderingAllowed(false); uniqueHitsTable.getTableHeader().setReorderingAllowed(false); relatedHitsTable.getTableHeader().setReorderingAllowed(false); proteinMatchTable.getColumn(" ").setMinWidth(30); proteinMatchTable.getColumn(" ").setMaxWidth(30); // set the preferred size of the accession column Integer width = peptideShakerGUI.getPreferredAccessionColumnWidth( proteinMatchTable, proteinMatchTable.getColumn("Accession").getModelIndex(), 2); if (width != null) { proteinMatchTable.getColumn("Accession").setMinWidth(width); proteinMatchTable.getColumn("Accession").setMaxWidth(width); } else { proteinMatchTable.getColumn("Accession").setMinWidth(15); proteinMatchTable.getColumn("Accession").setMaxWidth(Integer.MAX_VALUE); } // the validated column uniqueHitsTable.getColumn(" ").setMaxWidth(30); relatedHitsTable.getColumn(" ").setMaxWidth(30); uniqueHitsTable.getColumn(" ").setMinWidth(30); relatedHitsTable.getColumn(" ").setMinWidth(30); proteinMatchTable.getColumn("").setMaxWidth(30); uniqueHitsTable.getColumn("").setMaxWidth(30); relatedHitsTable.getColumn("").setMaxWidth(30); proteinMatchTable.getColumn("").setMinWidth(30); uniqueHitsTable.getColumn("").setMinWidth(30); relatedHitsTable.getColumn("").setMinWidth(30); // the score and confidence columns uniqueHitsTable.getColumn("Confidence").setMaxWidth(90); uniqueHitsTable.getColumn("Confidence").setMinWidth(90); uniqueHitsTable.getColumn("Score").setMaxWidth(90); uniqueHitsTable.getColumn("Score").setMinWidth(90); relatedHitsTable.getColumn("Confidence").setMaxWidth(90); relatedHitsTable.getColumn("Confidence").setMinWidth(90); relatedHitsTable.getColumn("Score").setMaxWidth(90); relatedHitsTable.getColumn("Score").setMinWidth(90); // change the cell renderer to fix a problem in Nimbus and alternating row colors proteinMatchTable.getColumn(" ").setCellRenderer(new NimbusCheckBoxRenderer()); proteinMatchTable .getColumn("Accession") .setCellRenderer( new HtmlLinksRenderer( peptideShakerGUI.getSelectedRowHtmlTagFontColor(), peptideShakerGUI.getNotSelectedRowHtmlTagFontColor())); uniqueHitsTable .getColumn("Protein(s)") .setCellRenderer( new HtmlLinksRenderer( peptideShakerGUI.getSelectedRowHtmlTagFontColor(), peptideShakerGUI.getNotSelectedRowHtmlTagFontColor())); uniqueHitsTable .getColumn(" ") .setCellRenderer( new TrueFalseIconRenderer( new ImageIcon(this.getClass().getResource("/icons/accept.png")), new ImageIcon(this.getClass().getResource("/icons/Error_3.png")), "Validated", "Not Validated")); uniqueHitsTable .getColumn("Score") .setCellRenderer( new JSparklinesBarChartTableCellRenderer( PlotOrientation.HORIZONTAL, 100.0, peptideShakerGUI.getSparklineColor())); uniqueHitsTable .getColumn("Confidence") .setCellRenderer( new JSparklinesBarChartTableCellRenderer( PlotOrientation.HORIZONTAL, 100.0, peptideShakerGUI.getSparklineColor())); ((JSparklinesBarChartTableCellRenderer) uniqueHitsTable.getColumn("Score").getCellRenderer()) .showNumberAndChart(true, peptideShakerGUI.getLabelWidth() + 5); ((JSparklinesBarChartTableCellRenderer) uniqueHitsTable.getColumn("Confidence").getCellRenderer()) .showNumberAndChart(true, peptideShakerGUI.getLabelWidth() + 5); relatedHitsTable .getColumn("Protein(s)") .setCellRenderer( new HtmlLinksRenderer( peptideShakerGUI.getSelectedRowHtmlTagFontColor(), peptideShakerGUI.getNotSelectedRowHtmlTagFontColor())); relatedHitsTable .getColumn(" ") .setCellRenderer( new TrueFalseIconRenderer( new ImageIcon(this.getClass().getResource("/icons/accept.png")), new ImageIcon(this.getClass().getResource("/icons/Error_3.png")), "Validated", "Not Validated")); relatedHitsTable .getColumn("Score") .setCellRenderer( new JSparklinesBarChartTableCellRenderer( PlotOrientation.HORIZONTAL, 100.0, peptideShakerGUI.getSparklineColor())); relatedHitsTable .getColumn("Confidence") .setCellRenderer( new JSparklinesBarChartTableCellRenderer( PlotOrientation.HORIZONTAL, 100.0, peptideShakerGUI.getSparklineColor())); ((JSparklinesBarChartTableCellRenderer) relatedHitsTable.getColumn("Score").getCellRenderer()) .showNumberAndChart(true, peptideShakerGUI.getLabelWidth() + 5); ((JSparklinesBarChartTableCellRenderer) relatedHitsTable.getColumn("Confidence").getCellRenderer()) .showNumberAndChart(true, peptideShakerGUI.getLabelWidth() + 5); // set up the table header tooltips candidateProteinsTableToolTips = new ArrayList<String>(); candidateProteinsTableToolTips.add(null); candidateProteinsTableToolTips.add("Currently Selected Protein Match"); candidateProteinsTableToolTips.add("Protein Accession"); candidateProteinsTableToolTips.add("Protein Description"); uniqueHitsTableToolTips = new ArrayList<String>(); uniqueHitsTableToolTips.add(null); uniqueHitsTableToolTips.add("Protein Accession(s)"); uniqueHitsTableToolTips.add("Protein Score"); uniqueHitsTableToolTips.add("Protein Confidence"); uniqueHitsTableToolTips.add("Validated"); relatedHitsTableToolTips = new ArrayList<String>(); relatedHitsTableToolTips.add(null); relatedHitsTableToolTips.add("Protein Accession(s)"); relatedHitsTableToolTips.add("Protein Score"); relatedHitsTableToolTips.add("Protein Confidence"); relatedHitsTableToolTips.add("Validated"); } /** * This method is called from within the constructor to initialize the form. WARNING: Do NOT * modify this code. The content of this method is always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { backgroundPanel = new javax.swing.JPanel(); okButton = new javax.swing.JButton(); relatedHitsJPanel = new javax.swing.JPanel(); relatedHitsJScrollPane = new javax.swing.JScrollPane(); relatedHitsTable = new JTable() { protected JTableHeader createDefaultTableHeader() { return new JTableHeader(columnModel) { public String getToolTipText(MouseEvent e) { java.awt.Point p = e.getPoint(); int index = columnModel.getColumnIndexAtX(p.x); int realIndex = columnModel.getColumn(index).getModelIndex(); String tip = (String) relatedHitsTableToolTips.get(realIndex); return tip; } }; } }; uniqueHitsJPanel = new javax.swing.JPanel(); uniqueHitsJScrollPane = new javax.swing.JScrollPane(); uniqueHitsTable = new JTable() { protected JTableHeader createDefaultTableHeader() { return new JTableHeader(columnModel) { public String getToolTipText(MouseEvent e) { java.awt.Point p = e.getPoint(); int index = columnModel.getColumnIndexAtX(p.x); int realIndex = columnModel.getColumn(index).getModelIndex(); String tip = (String) uniqueHitsTableToolTips.get(realIndex); return tip; } }; } }; proteinMatchJPanel = new javax.swing.JPanel(); proteinMatchJScrollPane = new javax.swing.JScrollPane(); proteinMatchTable = new JTable() { protected JTableHeader createDefaultTableHeader() { return new JTableHeader(columnModel) { public String getToolTipText(MouseEvent e) { java.awt.Point p = e.getPoint(); int index = columnModel.getColumnIndexAtX(p.x); int realIndex = columnModel.getColumn(index).getModelIndex(); String tip = (String) candidateProteinsTableToolTips.get(realIndex); return tip; } }; } }; groupDetalsJPanel = new javax.swing.JPanel(); matchInfoLbl = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); groupClassJComboBox = new javax.swing.JComboBox(); helpJButton = new javax.swing.JButton(); cancelButton = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Protein Inference - Protein Level"); setResizable(false); backgroundPanel.setBackground(new java.awt.Color(230, 230, 230)); okButton.setText("OK"); okButton.addActionListener( new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { okButtonActionPerformed(evt); } }); relatedHitsJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Related Hits")); relatedHitsJPanel.setOpaque(false); relatedHitsTable.setModel(new AssociatedMatches()); relatedHitsTable.setOpaque(false); relatedHitsTable.addMouseListener( new java.awt.event.MouseAdapter() { public void mouseExited(java.awt.event.MouseEvent evt) { relatedHitsTableMouseExited(evt); } public void mouseReleased(java.awt.event.MouseEvent evt) { relatedHitsTableMouseReleased(evt); } }); relatedHitsTable.addMouseMotionListener( new java.awt.event.MouseMotionAdapter() { public void mouseMoved(java.awt.event.MouseEvent evt) { relatedHitsTableMouseMoved(evt); } }); relatedHitsJScrollPane.setViewportView(relatedHitsTable); javax.swing.GroupLayout relatedHitsJPanelLayout = new javax.swing.GroupLayout(relatedHitsJPanel); relatedHitsJPanel.setLayout(relatedHitsJPanelLayout); relatedHitsJPanelLayout.setHorizontalGroup( relatedHitsJPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( relatedHitsJPanelLayout .createSequentialGroup() .addContainerGap() .addComponent( relatedHitsJScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 723, Short.MAX_VALUE) .addContainerGap())); relatedHitsJPanelLayout.setVerticalGroup( relatedHitsJPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( relatedHitsJPanelLayout .createSequentialGroup() .addContainerGap() .addComponent( relatedHitsJScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); uniqueHitsJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Unique Hits")); uniqueHitsJPanel.setOpaque(false); uniqueHitsTable.setModel(new UniqueMatches()); uniqueHitsTable.setOpaque(false); uniqueHitsTable.addMouseListener( new java.awt.event.MouseAdapter() { public void mouseExited(java.awt.event.MouseEvent evt) { uniqueHitsTableMouseExited(evt); } public void mouseReleased(java.awt.event.MouseEvent evt) { uniqueHitsTableMouseReleased(evt); } }); uniqueHitsTable.addMouseMotionListener( new java.awt.event.MouseMotionAdapter() { public void mouseMoved(java.awt.event.MouseEvent evt) { uniqueHitsTableMouseMoved(evt); } }); uniqueHitsJScrollPane.setViewportView(uniqueHitsTable); javax.swing.GroupLayout uniqueHitsJPanelLayout = new javax.swing.GroupLayout(uniqueHitsJPanel); uniqueHitsJPanel.setLayout(uniqueHitsJPanelLayout); uniqueHitsJPanelLayout.setHorizontalGroup( uniqueHitsJPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( uniqueHitsJPanelLayout .createSequentialGroup() .addContainerGap() .addComponent( uniqueHitsJScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 723, Short.MAX_VALUE) .addContainerGap())); uniqueHitsJPanelLayout.setVerticalGroup( uniqueHitsJPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( uniqueHitsJPanelLayout .createSequentialGroup() .addContainerGap() .addComponent( uniqueHitsJScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(14, Short.MAX_VALUE))); proteinMatchJPanel.setBorder( javax.swing.BorderFactory.createTitledBorder("Candidate Proteins")); proteinMatchJPanel.setOpaque(false); proteinMatchTable.setModel(new MatchTable()); proteinMatchTable.setOpaque(false); proteinMatchTable.addMouseListener( new java.awt.event.MouseAdapter() { public void mouseExited(java.awt.event.MouseEvent evt) { proteinMatchTableMouseExited(evt); } public void mouseReleased(java.awt.event.MouseEvent evt) { proteinMatchTableMouseReleased(evt); } }); proteinMatchTable.addMouseMotionListener( new java.awt.event.MouseMotionAdapter() { public void mouseMoved(java.awt.event.MouseEvent evt) { proteinMatchTableMouseMoved(evt); } }); proteinMatchJScrollPane.setViewportView(proteinMatchTable); javax.swing.GroupLayout proteinMatchJPanelLayout = new javax.swing.GroupLayout(proteinMatchJPanel); proteinMatchJPanel.setLayout(proteinMatchJPanelLayout); proteinMatchJPanelLayout.setHorizontalGroup( proteinMatchJPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( proteinMatchJPanelLayout .createSequentialGroup() .addContainerGap() .addComponent( proteinMatchJScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 723, Short.MAX_VALUE) .addContainerGap())); proteinMatchJPanelLayout.setVerticalGroup( proteinMatchJPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( proteinMatchJPanelLayout .createSequentialGroup() .addContainerGap() .addComponent( proteinMatchJScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 141, Short.MAX_VALUE) .addContainerGap())); groupDetalsJPanel.setBorder( javax.swing.BorderFactory.createTitledBorder("Protein Group Details")); groupDetalsJPanel.setOpaque(false); matchInfoLbl.setText("protein match information"); jLabel2.setText("Type:"); groupClassJComboBox.setModel( new javax.swing.DefaultComboBoxModel( new String[] { "Single Protein", "Isoforms", "Unrelated Isoforms", "Unrelated Proteins" })); javax.swing.GroupLayout groupDetalsJPanelLayout = new javax.swing.GroupLayout(groupDetalsJPanel); groupDetalsJPanel.setLayout(groupDetalsJPanelLayout); groupDetalsJPanelLayout.setHorizontalGroup( groupDetalsJPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( groupDetalsJPanelLayout .createSequentialGroup() .addContainerGap() .addComponent(jLabel2) .addGap(20, 20, 20) .addComponent( groupClassJComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 295, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(matchInfoLbl) .addContainerGap(249, Short.MAX_VALUE))); groupDetalsJPanelLayout.setVerticalGroup( groupDetalsJPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( groupDetalsJPanelLayout .createSequentialGroup() .addContainerGap() .addGroup( groupDetalsJPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel2) .addComponent( groupClassJComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(matchInfoLbl)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); helpJButton.setIcon( new javax.swing.ImageIcon(getClass().getResource("/icons/help.GIF"))); // NOI18N helpJButton.setToolTipText("Help"); helpJButton.setBorder(null); helpJButton.setBorderPainted(false); helpJButton.setContentAreaFilled(false); helpJButton.setFocusable(false); helpJButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); helpJButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); helpJButton.addMouseListener( new java.awt.event.MouseAdapter() { public void mouseEntered(java.awt.event.MouseEvent evt) { helpJButtonMouseEntered(evt); } public void mouseExited(java.awt.event.MouseEvent evt) { helpJButtonMouseExited(evt); } }); helpJButton.addActionListener( new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { helpJButtonActionPerformed(evt); } }); cancelButton.setText("Cancel"); cancelButton.addActionListener( new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cancelButtonActionPerformed(evt); } }); javax.swing.GroupLayout backgroundPanelLayout = new javax.swing.GroupLayout(backgroundPanel); backgroundPanel.setLayout(backgroundPanelLayout); backgroundPanelLayout.setHorizontalGroup( backgroundPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( backgroundPanelLayout .createSequentialGroup() .addContainerGap() .addGroup( backgroundPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent( uniqueHitsJPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent( groupDetalsJPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent( proteinMatchJPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent( relatedHitsJPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup( backgroundPanelLayout .createSequentialGroup() .addGap(10, 10, 10) .addComponent(helpJButton) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED, 586, Short.MAX_VALUE) .addComponent( okButton, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(cancelButton))) .addContainerGap())); backgroundPanelLayout.setVerticalGroup( backgroundPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup( backgroundPanelLayout .createSequentialGroup() .addContainerGap() .addComponent( groupDetalsJPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent( proteinMatchJPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent( uniqueHitsJPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent( relatedHitsJPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(8, 8, 8) .addGroup( backgroundPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(helpJButton) .addComponent(okButton) .addComponent(cancelButton)) .addContainerGap())); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent( backgroundPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)); layout.setVerticalGroup( layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent( backgroundPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)); pack(); } // </editor-fold>//GEN-END:initComponents /** * Update the protein table according to the protein inference selection. * * @param evt */ private void okButtonActionPerformed( java.awt.event.ActionEvent evt) { // GEN-FIRST:event_okButtonActionPerformed PSParameter psParameter = new PSParameter(); try { psParameter = (PSParameter) identification.getProteinMatchParameter(inspectedMatch.getKey(), psParameter); } catch (Exception e) { peptideShakerGUI.catchException(e); this.dispose(); return; } if (!inspectedMatch.getMainMatch().equals(previousMainMatch) || groupClassJComboBox.getSelectedIndex() != psParameter.getGroupClass()) { try { psParameter.setGroupClass(groupClassJComboBox.getSelectedIndex()); identification.updateProteinMatchParameter(inspectedMatch.getKey(), psParameter); peptideShakerGUI.updateMainMatch( inspectedMatch.getMainMatch(), groupClassJComboBox.getSelectedIndex()); } catch (Exception e) { peptideShakerGUI.catchException(e); } peptideShakerGUI.setDataSaved(false); } this.dispose(); } // GEN-LAST:event_okButtonActionPerformed /** * Sets the main match if the main match column is selected, or opens the protein web link if the * accession number column is selected. * * @param evt */ private void proteinMatchTableMouseReleased( java.awt.event.MouseEvent evt) { // GEN-FIRST:event_proteinMatchTableMouseReleased int row = proteinMatchTable.rowAtPoint(evt.getPoint()); int column = proteinMatchTable.columnAtPoint(evt.getPoint()); if (row != -1) { if (column == 1) { try { inspectedMatch.setMainMatch(accessions.get(row)); identification.updateProteinMatch(inspectedMatch); peptideShakerGUI .getIdentificationFeaturesGenerator() .updateCoverableAA(inspectedMatch.getKey()); peptideShakerGUI .getIdentificationFeaturesGenerator() .updateSequenceCoverage(inspectedMatch.getKey()); peptideShakerGUI .getIdentificationFeaturesGenerator() .updateObservableCoverage(inspectedMatch.getKey()); } catch (Exception e) { peptideShakerGUI.catchException(e); } proteinMatchTable.revalidate(); proteinMatchTable.repaint(); } else if (column == 2) { // open protein link in web browser if (evt.getButton() == MouseEvent.BUTTON1 && ((String) proteinMatchTable.getValueAt(row, column)).lastIndexOf("<html>") != -1) { String link = (String) proteinMatchTable.getValueAt(row, column); link = link.substring(link.indexOf("\"") + 1); link = link.substring(0, link.indexOf("\"")); this.setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR)); BareBonesBrowserLaunch.openURL(link); this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); } } } } // GEN-LAST:event_proteinMatchTableMouseReleased /** * Change the cursor to a hand cursor. * * @param evt */ private void helpJButtonMouseEntered( java.awt.event.MouseEvent evt) { // GEN-FIRST:event_helpJButtonMouseEntered setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); } // GEN-LAST:event_helpJButtonMouseEntered /** * Change the cursor back to the default cursor. * * @param evt */ private void helpJButtonMouseExited( java.awt.event.MouseEvent evt) { // GEN-FIRST:event_helpJButtonMouseExited setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); } // GEN-LAST:event_helpJButtonMouseExited /** * Open the help dialog. * * @param evt */ private void helpJButtonActionPerformed( java.awt.event.ActionEvent evt) { // GEN-FIRST:event_helpJButtonActionPerformed setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR)); new HelpDialog(peptideShakerGUI, getClass().getResource("/helpFiles/ProteinInference.html")); setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); } // GEN-LAST:event_helpJButtonActionPerformed /** * Changes the cursor into a hand cursor if the table cell contains an HTML link. * * @param evt */ private void proteinMatchTableMouseMoved( java.awt.event.MouseEvent evt) { // GEN-FIRST:event_proteinMatchTableMouseMoved int row = proteinMatchTable.rowAtPoint(evt.getPoint()); int column = proteinMatchTable.columnAtPoint(evt.getPoint()); proteinMatchTable.setToolTipText(null); if (column == 2 && proteinMatchTable.getValueAt(row, column) != null) { String tempValue = (String) proteinMatchTable.getValueAt(row, column); if (tempValue.lastIndexOf("<html>") != -1) { this.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); } else { this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); } } else if (column == proteinMatchTable.getColumn("Description").getModelIndex() && proteinMatchTable.getValueAt(row, column) != null) { if (GuiUtilities.getPreferredWidthOfCell(proteinMatchTable, row, column) > proteinMatchTable.getColumn("Description").getWidth()) { proteinMatchTable.setToolTipText("" + proteinMatchTable.getValueAt(row, column)); } this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); } else { this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); } } // GEN-LAST:event_proteinMatchTableMouseMoved /** * Changes the cursor back to the default cursor a hand. * * @param evt */ private void proteinMatchTableMouseExited( java.awt.event.MouseEvent evt) { // GEN-FIRST:event_proteinMatchTableMouseExited this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); } // GEN-LAST:event_proteinMatchTableMouseExited /** * Changes the cursor back to the default cursor. * * @param evt */ private void uniqueHitsTableMouseExited( java.awt.event.MouseEvent evt) { // GEN-FIRST:event_uniqueHitsTableMouseExited this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); } // GEN-LAST:event_uniqueHitsTableMouseExited /** * Changes the cursor into a hand cursor if the table cell contains an HTML link. * * @param evt */ private void uniqueHitsTableMouseMoved( java.awt.event.MouseEvent evt) { // GEN-FIRST:event_uniqueHitsTableMouseMoved int row = uniqueHitsTable.rowAtPoint(evt.getPoint()); int column = uniqueHitsTable.columnAtPoint(evt.getPoint()); if (column == 1 && uniqueHitsTable.getValueAt(row, column) != null) { String tempValue = (String) uniqueHitsTable.getValueAt(row, column); if (tempValue.lastIndexOf("a href=") != -1) { this.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); } else { this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); } } else { this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); } } // GEN-LAST:event_uniqueHitsTableMouseMoved /** * Open the protein html links. * * @param evt */ private void uniqueHitsTableMouseReleased( java.awt.event.MouseEvent evt) { // GEN-FIRST:event_uniqueHitsTableMouseReleased int row = uniqueHitsTable.getSelectedRow(); int column = uniqueHitsTable.getSelectedColumn(); if (row != -1) { if (column == 1) { // open protein links in web browser if (evt != null && evt.getButton() == MouseEvent.BUTTON1 && ((String) uniqueHitsTable.getValueAt(row, column)).lastIndexOf("a href=") != -1) { peptideShakerGUI.openProteinLinks((String) uniqueHitsTable.getValueAt(row, column)); } } } } // GEN-LAST:event_uniqueHitsTableMouseReleased /** * Changes the cursor back to the default cursor. * * @param evt */ private void relatedHitsTableMouseExited( java.awt.event.MouseEvent evt) { // GEN-FIRST:event_relatedHitsTableMouseExited this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); } // GEN-LAST:event_relatedHitsTableMouseExited /** * Changes the cursor into a hand cursor if the table cell contains an HTML link. * * @param evt */ private void relatedHitsTableMouseMoved( java.awt.event.MouseEvent evt) { // GEN-FIRST:event_relatedHitsTableMouseMoved int row = relatedHitsTable.rowAtPoint(evt.getPoint()); int column = relatedHitsTable.columnAtPoint(evt.getPoint()); if (column == 1 && relatedHitsTable.getValueAt(row, column) != null) { String tempValue = (String) relatedHitsTable.getValueAt(row, column); if (tempValue.lastIndexOf("a href=") != -1) { this.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); } else { this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); } } else { this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); } } // GEN-LAST:event_relatedHitsTableMouseMoved /** * Open the protein html links. * * @param evt */ private void relatedHitsTableMouseReleased( java.awt.event.MouseEvent evt) { // GEN-FIRST:event_relatedHitsTableMouseReleased int row = relatedHitsTable.getSelectedRow(); int column = relatedHitsTable.getSelectedColumn(); if (row != -1) { if (column == 1) { // open protein links in web browser if (evt != null && evt.getButton() == MouseEvent.BUTTON1 && ((String) relatedHitsTable.getValueAt(row, column)).lastIndexOf("a href=") != -1) { peptideShakerGUI.openProteinLinks((String) relatedHitsTable.getValueAt(row, column)); } } } } // GEN-LAST:event_relatedHitsTableMouseReleased /** * Closes the dialog. * * @param evt */ private void cancelButtonActionPerformed( java.awt.event.ActionEvent evt) { // GEN-FIRST:event_cancelButtonActionPerformed this.setVisible(false); this.dispose(); } // GEN-LAST:event_cancelButtonActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel backgroundPanel; private javax.swing.JButton cancelButton; private javax.swing.JComboBox groupClassJComboBox; private javax.swing.JPanel groupDetalsJPanel; private javax.swing.JButton helpJButton; private javax.swing.JLabel jLabel2; private javax.swing.JLabel matchInfoLbl; private javax.swing.JButton okButton; private javax.swing.JPanel proteinMatchJPanel; private javax.swing.JScrollPane proteinMatchJScrollPane; private javax.swing.JTable proteinMatchTable; private javax.swing.JPanel relatedHitsJPanel; private javax.swing.JScrollPane relatedHitsJScrollPane; private javax.swing.JTable relatedHitsTable; private javax.swing.JPanel uniqueHitsJPanel; private javax.swing.JScrollPane uniqueHitsJScrollPane; private javax.swing.JTable uniqueHitsTable; // End of variables declaration//GEN-END:variables /** Table model for the protein match table. */ private class MatchTable extends DefaultTableModel { @Override public int getRowCount() { return accessions.size(); } @Override public int getColumnCount() { return 4; } @Override public String getColumnName(int column) { switch (column) { case 0: return ""; case 1: return " "; case 2: return "Accession"; case 3: return "Description"; default: return " "; } } @Override public Object getValueAt(int row, int column) { switch (column) { case 0: return (row + 1); case 1: return inspectedMatch.getMainMatch().equals(accessions.get(row)); case 2: return peptideShakerGUI .getIdentificationFeaturesGenerator() .addDatabaseLink(accessions.get(row)); case 3: try { return sequenceFactory.getHeader(accessions.get(row)).getDescription(); } catch (Exception e) { peptideShakerGUI.catchException(e); return "Database Error"; } default: return " "; } } @Override public Class getColumnClass(int columnIndex) { return getValueAt(0, columnIndex).getClass(); } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return columnIndex == 1; } } /** Table model for the unique matches table. */ private class UniqueMatches extends DefaultTableModel { @Override public int getRowCount() { return uniqueMatches.size(); } @Override public int getColumnCount() { return 5; } @Override public String getColumnName(int column) { switch (column) { case 0: return ""; case 1: return "Protein(s)"; case 2: return "Score"; case 3: return "Confidence"; case 4: return " "; default: return ""; } } @Override public Object getValueAt(int row, int column) { PSParameter pSParameter = new PSParameter(); try { pSParameter = (PSParameter) identification.getProteinMatchParameter(uniqueMatches.get(row), pSParameter); } catch (Exception e) { peptideShakerGUI.catchException(e); } switch (column) { case 0: return (row + 1); case 1: return peptideShakerGUI .getIdentificationFeaturesGenerator() .addDatabaseLinks( new ArrayList<String>( Arrays.asList(ProteinMatch.getAccessions(uniqueMatches.get(row))))); case 2: return pSParameter.getProteinScore(); case 3: return pSParameter.getProteinConfidence(); case 4: return pSParameter.isValidated(); default: return ""; } } @Override public Class getColumnClass(int columnIndex) { return getValueAt(0, columnIndex).getClass(); } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } } /** Table model for the associated matches table. */ private class AssociatedMatches extends DefaultTableModel { @Override public int getRowCount() { return associatedMatches.size(); } @Override public int getColumnCount() { return 5; } @Override public String getColumnName(int column) { switch (column) { case 0: return ""; case 1: return "Protein(s)"; case 2: return "Score"; case 3: return "Confidence"; case 4: return " "; default: return ""; } } @Override public Object getValueAt(int row, int column) { PSParameter pSParameter = new PSParameter(); try { pSParameter = (PSParameter) identification.getProteinMatchParameter(associatedMatches.get(row), pSParameter); } catch (Exception e) { peptideShakerGUI.catchException(e); } switch (column) { case 0: return (row + 1); case 1: return peptideShakerGUI .getIdentificationFeaturesGenerator() .addDatabaseLinks( new ArrayList<String>( Arrays.asList(ProteinMatch.getAccessions(associatedMatches.get(row))))); case 2: return pSParameter.getProteinScore(); case 3: return pSParameter.getProteinConfidence(); case 4: return pSParameter.isValidated(); default: return ""; } } @Override public Class getColumnClass(int columnIndex) { return getValueAt(0, columnIndex).getClass(); } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } } }
public class PSFileImporter { private File currentPSFile; private EnzymeFactory enzymeFactory = EnzymeFactory.getInstance(); private String resource; /** The spectrum annotator. */ private SpectrumAnnotator spectrumAnnotator = new SpectrumAnnotator(); /** The project details. */ private ProjectDetails projectDetails = null; /** The spectrum factory. */ private SpectrumFactory spectrumFactory = SpectrumFactory.getInstance(100); /** The identification to display. */ private Identification identification; /** The compomics PTM factory. */ private PTMFactory ptmFactory = PTMFactory.getInstance(); /** The parameters of the search. */ private SearchParameters searchParameters = new SearchParameters(); /** The initial processing preferences */ private ProcessingPreferences processingPreferences = new ProcessingPreferences(); /** The annotation preferences. */ private AnnotationPreferences annotationPreferences = new AnnotationPreferences(); /** The spectrum counting preferences. */ private SpectrumCountingPreferences spectrumCountingPreferences = new SpectrumCountingPreferences(); /** The PTM scoring preferences */ private PTMScoringPreferences ptmScoringPreferences = new PTMScoringPreferences(); /** The identification filter used for this project. */ private IdFilter idFilter = new IdFilter(); /** The actually identified modifications. */ /** * Returns the modifications found in this project. * * @return the modifications found in this project */ public ArrayList<String> getFoundModifications() { if (identifiedModifications == null) { identifiedModifications = new ArrayList<String>(); for (String peptideKey : identification.getPeptideIdentification()) { boolean modified = false; for (String modificationName : Peptide.getModificationFamily(peptideKey)) { if (!identifiedModifications.contains(modificationName)) { identifiedModifications.add(modificationName); modified = true; } } if (!modified && !identifiedModifications.contains(PtmPanel.NO_MODIFICATION)) { identifiedModifications.add(PtmPanel.NO_MODIFICATION); } } } return identifiedModifications; } private ArrayList<String> identifiedModifications = null; /** Metrics picked-up while loading the files. */ private Metrics metrics; /** The display preferences. */ private DisplayPreferences displayPreferences = new DisplayPreferences(); /** The sequence factory. */ private SequenceFactory sequenceFactory = SequenceFactory.getInstance(30000); /** The filter preferences. */ private FilterPreferences filterPreferences = new FilterPreferences(); /** The compomics experiment. */ private MsExperiment experiment = null; /** The investigated sample. */ private Sample sample; /** The replicate number. */ private int replicateNumber; /** The class used to provide sexy features out of the identification. */ private IdentificationFeaturesGenerator identificationFeaturesGenerator; /** The last folder opened by the user. Defaults to user.home. */ private String lastSelectedFolder = "user.home"; /** The object cache used for the identification database. */ private ObjectsCache objectsCache; private com.compomics.util.experiment.ProteomicAnalysis proteomicAnalysis; private ProgressDialogX progressDialog; private javax.swing.JProgressBar jprog; public PSFileImporter(javax.swing.JProgressBar jprog) { this.progressDialog = new ProgressDialogX(false); this.jprog = jprog; } public void importPeptideShakerFile(File aPsFile, final String resource) { this.resource = resource; this.currentPSFile = aPsFile; loadGeneMapping(); loadEnzymes(); resetPtmFactory(); // setDefaultPreferences(); // @TODO: i tried re-adding this but then we get a null pointer, but // the two below have to be added or the default neutral losses won't appear IonFactory.getInstance().addDefaultNeutralLoss(NeutralLoss.H2O); IonFactory.getInstance().addDefaultNeutralLoss(NeutralLoss.NH3); // exceptionHandler = new ExceptionHandler(this); new Thread("ProgressThread") { @Override public void run() { jprog.setValue(10); } }.start(); Thread importThread = new Thread("ImportThread") { @Override public void run() { try { // reset enzymes, ptms and preferences loadEnzymes(); resetPtmFactory(); setDefaultPreferences(); try { // close any open connection to an identification database if (identification != null) { identification.close(); } } catch (Exception e) { e.printStackTrace(); } File experimentFile = new File( PeptideShaker.SERIALIZATION_DIRECTORY, PeptideShaker.experimentObjectName); File matchFolder = new File(PeptideShaker.SERIALIZATION_DIRECTORY); // empty the existing files in the matches folder if (matchFolder.exists()) { for (File file : matchFolder.listFiles()) { if (file.isDirectory()) { boolean deleted = Util.deleteDir(file); if (!deleted) { System.out.println("Failed to delete folder: " + file.getPath()); } } else { boolean deleted = file.delete(); if (!deleted) { System.out.println("Failed to delete file: " + file.getPath()); } } } } final int BUFFER = 2048; byte data[] = new byte[BUFFER]; FileInputStream fi = new FileInputStream(currentPSFile); BufferedInputStream bis = new BufferedInputStream(fi, BUFFER); try { ArchiveInputStream tarInput = new ArchiveStreamFactory().createArchiveInputStream(bis); ArchiveEntry archiveEntry; while ((archiveEntry = tarInput.getNextEntry()) != null) { File destinationFile = new File(archiveEntry.getName()); File destinationFolder = destinationFile.getParentFile(); boolean destFolderExists = true; if (!destinationFolder.exists()) { destFolderExists = destinationFolder.mkdirs(); } if (destFolderExists) { FileOutputStream fos = new FileOutputStream(destinationFile); BufferedOutputStream bos = new BufferedOutputStream(fos); int count; while ((count = tarInput.read(data, 0, BUFFER)) != -1 && !progressDialog.isRunCanceled()) { bos.write(data, 0, count); } bos.close(); fos.close(); // int progress = (int) (100 * // tarInput.getBytesRead() / fileLength); // progressDialog.setValue(progress); } else { System.out.println( "Folder does not exist: \'" + destinationFolder.getAbsolutePath() + "\'. User preferences not saved."); } } tarInput.close(); } catch (ArchiveException e) { // Most likely an old project experimentFile = currentPSFile; e.printStackTrace(); } fi.close(); bis.close(); fi.close(); MsExperiment tempExperiment = ExperimentIO.loadExperiment(experimentFile); Sample tempSample = null; PeptideShakerSettings experimentSettings = new PeptideShakerSettings(); if (tempExperiment.getUrParam(experimentSettings) instanceof PSSettings) { // convert old settings files using utilities version 3.10.68 or older // convert the old ProcessingPreferences object PSSettings tempSettings = (PSSettings) tempExperiment.getUrParam(experimentSettings); ProcessingPreferences tempProcessingPreferences = new ProcessingPreferences(); tempProcessingPreferences.setProteinFDR( tempSettings.getProcessingPreferences().getProteinFDR()); tempProcessingPreferences.setPeptideFDR( tempSettings.getProcessingPreferences().getPeptideFDR()); tempProcessingPreferences.setPsmFDR( tempSettings.getProcessingPreferences().getPsmFDR()); // convert the old PTMScoringPreferences object PTMScoringPreferences tempPTMScoringPreferences = new PTMScoringPreferences(); tempPTMScoringPreferences.setaScoreCalculation( tempSettings.getPTMScoringPreferences().aScoreCalculation()); tempPTMScoringPreferences.setaScoreNeutralLosses( tempSettings.getPTMScoringPreferences().isaScoreNeutralLosses()); tempPTMScoringPreferences.setFlrThreshold( tempSettings.getPTMScoringPreferences().getFlrThreshold()); // missing gene refrences GenePreferences genePreferences = getGenePreferences(); // String selectedSpecies = genePreferences.getCurrentSpecies(); // String speciesDatabase = // genePreferences.getEnsemblDatabaseName(selectedSpecies); experimentSettings = new PeptideShakerSettings( tempSettings.getSearchParameters(), tempSettings.getAnnotationPreferences(), tempSettings.getSpectrumCountingPreferences(), tempSettings.getProjectDetails(), tempSettings.getFilterPreferences(), tempSettings.getDisplayPreferences(), tempSettings.getMetrics(), tempProcessingPreferences, tempSettings.getIdentificationFeaturesCache(), tempPTMScoringPreferences, genePreferences, new IdFilter()); ; } else { experimentSettings = (PeptideShakerSettings) tempExperiment.getUrParam(experimentSettings); } idFilter = experimentSettings.getIdFilter(); setAnnotationPreferences(experimentSettings.getAnnotationPreferences()); setSpectrumCountingPreferences(experimentSettings.getSpectrumCountingPreferences()); setPtmScoringPreferences(experimentSettings.getPTMScoringPreferences()); setProjectDetails(experimentSettings.getProjectDetails()); setSearchParameters(experimentSettings.getSearchParameters()); setProcessingPreferences(experimentSettings.getProcessingPreferences()); setMetrics(experimentSettings.getMetrics()); setDisplayPreferences(experimentSettings.getDisplayPreferences()); if (experimentSettings.getFilterPreferences() != null) { setFilterPreferences(experimentSettings.getFilterPreferences()); } else { setFilterPreferences(new FilterPreferences()); } if (experimentSettings.getDisplayPreferences() != null) { setDisplayPreferences(experimentSettings.getDisplayPreferences()); displayPreferences.compatibilityCheck(searchParameters.getModificationProfile()); } else { setDisplayPreferences(new DisplayPreferences()); displayPreferences.setDefaultSelection(searchParameters.getModificationProfile()); } ArrayList<Sample> samples = new ArrayList(tempExperiment.getSamples().values()); if (samples.size() == 1) { tempSample = samples.get(0); } else { tempSample = samples.get(0); String[] sampleNames = new String[samples.size()]; for (int cpt = 0; cpt < sampleNames.length; cpt++) { sampleNames[cpt] = samples.get(cpt).getReference(); System.out.println(sampleNames[cpt]); } SampleSelection sampleSelection = new SampleSelection(null, true, sampleNames, "sample"); sampleSelection.setVisible(false); String choice = sampleSelection.getChoice(); for (Sample sampleTemp : samples) { if (sampleTemp.getReference().equals(choice)) { tempSample = sampleTemp; break; } } } ArrayList<Integer> replicates = new ArrayList(tempExperiment.getAnalysisSet(tempSample).getReplicateNumberList()); System.out.println(replicates); int tempReplicate; if (replicates.size() == 1) { tempReplicate = replicates.get(0); } else { String[] replicateNames = new String[replicates.size()]; for (int cpt = 0; cpt < replicateNames.length; cpt++) { replicateNames[cpt] = samples.get(cpt).getReference(); } SampleSelection sampleSelection = new SampleSelection(null, true, replicateNames, "replicate"); sampleSelection.setVisible(false); Integer choice = new Integer(sampleSelection.getChoice()); tempReplicate = 0; } setProject(tempExperiment, tempSample, tempReplicate); identificationFeaturesGenerator = new IdentificationFeaturesGenerator( identification, searchParameters, idFilter, metrics, spectrumCountingPreferences); if (experimentSettings.getIdentificationFeaturesCache() != null) { identificationFeaturesGenerator.setIdentificationFeaturesCache( experimentSettings.getIdentificationFeaturesCache()); } // mainProgressDialog.setTitle("Loading FASTA File. Please // Wait..."); try { File providedFastaLocation = experimentSettings.getSearchParameters().getFastaFile(); String fileName = providedFastaLocation.getName(); File projectFolder = currentPSFile.getParentFile(); File dataFolder = new File(projectFolder, "data"); // try to locate the FASTA file if (providedFastaLocation.exists()) { SequenceFactory.getInstance().loadFastaFile(providedFastaLocation); } else if (new File(projectFolder, fileName).exists()) { SequenceFactory.getInstance().loadFastaFile(new File(projectFolder, fileName)); experimentSettings .getSearchParameters() .setFastaFile(new File(projectFolder, fileName)); } else if (new File(dataFolder, fileName).exists()) { SequenceFactory.getInstance().loadFastaFile(new File(dataFolder, fileName)); experimentSettings .getSearchParameters() .setFastaFile(new File(dataFolder, fileName)); } else { // return error System.out.println("fastafile is missing"); } } catch (Exception e) { e.printStackTrace(); System.out.println("fastafile is missing"); } // mainProgressDialog.setTitle("Locating Spectrum Files. Please // Wait..."); for (String spectrumFileName : identification.getSpectrumFiles()) { try { File providedSpectrumLocation = projectDetails.getSpectrumFile(spectrumFileName); // try to locate the spectrum file if (providedSpectrumLocation == null || !providedSpectrumLocation.exists()) { File projectFolder = currentPSFile.getParentFile(); File fileInProjectFolder = new File(projectFolder, spectrumFileName); File dataFolder = new File(projectFolder, "data"); File fileInDataFolder = new File(dataFolder, spectrumFileName); File fileInLastSelectedFolder = new File(getLastSelectedFolder(), spectrumFileName); if (fileInProjectFolder.exists()) { projectDetails.addSpectrumFile(fileInProjectFolder); } else if (fileInDataFolder.exists()) { projectDetails.addSpectrumFile(fileInDataFolder); } else if (fileInLastSelectedFolder.exists()) { projectDetails.addSpectrumFile(fileInLastSelectedFolder); } else { System.out.println("error no file"); } } } catch (Exception e) { clearData(true); // clearPreferences(); e.printStackTrace(); System.out.println("error no file"); return; } } objectsCache = new ObjectsCache(); objectsCache.setAutomatedMemoryManagement(true); if (identification.isDB()) { try { String dbFolder = new File(resource, PeptideShaker.SERIALIZATION_DIRECTORY).getAbsolutePath(); identification.establishConnection(dbFolder, false, objectsCache); } catch (Exception e) { e.printStackTrace(); } } else { updateAnnotationPreferencesFromSearchSettings(); annotationPreferences.useAutomaticAnnotation(true); } int cpt = 1, nfiles = identification.getSpectrumFiles().size(); for (String fileName : identification.getSpectrumFiles()) { // mainProgressDialog.setTitle("Importing Spectrum // Files. Please Wait..."); try { File mgfFile = projectDetails.getSpectrumFile(fileName); spectrumFactory.addSpectra(mgfFile, progressDialog); } catch (Exception e) { clearData(true); e.printStackTrace(); return; } } boolean compatibilityIssue = getSearchParameters().getIonSearched1() == null || getSearchParameters().getIonSearched2() == null; if (compatibilityIssue) { JOptionPane.showMessageDialog( null, "The annotation preferences for this project may have changed.\n\n" + "Note that PeptideShaker has substancially improved, we strongly\n" + "recommend reprocessing your identification files.", "Annotation Preferences", JOptionPane.INFORMATION_MESSAGE); updateAnnotationPreferencesFromSearchSettings(); } if (identification.getSpectrumIdentificationMap() == null) { // 0.18 version, needs update of the spectrum mapping identification.updateSpectrumMapping(); } } catch (OutOfMemoryError error) { System.out.println( "Ran out of memory! (runtime.maxMemory(): " + Runtime.getRuntime().maxMemory() + ")"); Runtime.getRuntime().gc(); JOptionPane.showMessageDialog( null, "The task used up all the available memory and had to be stopped.\n" + "Memory boundaries are set in ../resources/conf/JavaOptions.txt.", "Out Of Memory Error", JOptionPane.ERROR_MESSAGE); error.printStackTrace(); } catch (Exception exp) { exp.printStackTrace(); } } }; importThread.setPriority(Thread.MAX_PRIORITY); // importThread.start(); // while (importThread.isAlive()) { // try { // Thread.currentThread().sleep(100); // // } catch (Exception e) { // e.printStackTrace(); // } // } ExecutorService es = Executors.newCachedThreadPool(); es.execute(importThread); es.shutdown(); try { boolean finshed = es.awaitTermination(1, TimeUnit.DAYS); System.gc(); return; // t.start(); } catch (InterruptedException ex) { System.err.println(ex.getMessage()); // Logger.getLogger(UpdatedOutputGenerator.class.getName()).log(Level.SEVERE, null, ex); } System.gc(); // return; } /** Loads the enzymes from the enzyme file into the enzyme factory. */ private void loadEnzymes() { try { enzymeFactory.importEnzymes(new File(resource, PeptideShaker.ENZYME_FILE)); } catch (Exception e) { System.out.println("Not able to load the enzyme file." + "Wrong enzyme file."); e.printStackTrace(); } } /** Loads the modifications from the modification file. */ public void resetPtmFactory() { // reset ptm factory ptmFactory.reloadFactory(); ptmFactory = PTMFactory.getInstance(); try { ptmFactory.importModifications(new File(resource, PeptideShaker.MODIFICATIONS_FILE), false); } catch (Exception e) { e.printStackTrace(); } try { ptmFactory.importModifications( new File(resource, PeptideShaker.USER_MODIFICATIONS_FILE), true); } catch (Exception e) { e.printStackTrace(); } } /** Set the default preferences. */ private void setDefaultPreferences() { searchParameters = new SearchParameters(); annotationPreferences.setAnnotationLevel(0.75); annotationPreferences.useAutomaticAnnotation(true); spectrumCountingPreferences.setSelectedMethod(SpectralCountingMethod.NSAF); spectrumCountingPreferences.setValidatedHits(true); IonFactory.getInstance().addDefaultNeutralLoss(NeutralLoss.NH3); IonFactory.getInstance().addDefaultNeutralLoss(NeutralLoss.H2O); processingPreferences = new ProcessingPreferences(); ptmScoringPreferences = new PTMScoringPreferences(); } /** Imports the gene mapping. */ private void loadGeneMapping() { try { geneFactory.initialize(new File(resource, GENE_MAPPING_PATH), null); } catch (Exception e) { e.printStackTrace(); } } /** The path to the gene mapping file. */ private final String GENE_MAPPING_PATH = "/resources/conf/gene_ontology/gene_details_human"; /** The gene factory. */ private GeneFactory geneFactory = GeneFactory.getInstance(); /** * Updates the new annotation preferences. * * @param annotationPreferences the new annotation preferences */ public void setAnnotationPreferences(AnnotationPreferences annotationPreferences) { this.annotationPreferences = annotationPreferences; } /** * Sets new spectrum counting preferences. * * @param spectrumCountingPreferences new spectrum counting preferences */ public void setSpectrumCountingPreferences( SpectrumCountingPreferences spectrumCountingPreferences) { this.spectrumCountingPreferences = spectrumCountingPreferences; } /** * Sets the PTM scoring preferences * * @param ptmScoringPreferences the PTM scoring preferences */ public void setPtmScoringPreferences(PTMScoringPreferences ptmScoringPreferences) { this.ptmScoringPreferences = ptmScoringPreferences; } /** * Sets the project details. * * @param projectDetails the project details */ public void setProjectDetails(ProjectDetails projectDetails) { this.projectDetails = projectDetails; } /** * Updates the search parameters. * * @param searchParameters the new search parameters */ public void setSearchParameters(SearchParameters searchParameters) { this.searchParameters = searchParameters; PeptideShaker.loadModifications(searchParameters); } /** * Sets the initial processing preferences. * * @param processingPreferences the initial processing preferences */ public void setProcessingPreferences(ProcessingPreferences processingPreferences) { this.processingPreferences = processingPreferences; } /** * Sets the metrics saved while loading the files. * * @param metrics the metrics saved while loading the files */ public void setMetrics(Metrics metrics) { this.metrics = metrics; } /** * Sets the display preferences to use. * * @param displayPreferences the display preferences to use */ public void setDisplayPreferences(DisplayPreferences displayPreferences) { this.displayPreferences = displayPreferences; } /** * Sets the gui filter preferences to use. .\ * * @param filterPreferences the gui filter preferences to use */ public void setFilterPreferences(FilterPreferences filterPreferences) { this.filterPreferences = filterPreferences; } /** * This method sets the information of the project when opened. * * @param experiment the experiment conducted * @param sample The sample analyzed * @param replicateNumber The replicate number */ public void setProject(MsExperiment experiment, Sample sample, int replicateNumber) { this.experiment = experiment; this.sample = sample; this.replicateNumber = replicateNumber; ProteomicAnalysis proteomic_Analysis = experiment.getAnalysisSet(sample).getProteomicAnalysis(replicateNumber); identification = proteomic_Analysis.getIdentification(IdentificationMethod.MS2_IDENTIFICATION); } /** * Returns the last selected folder. * * @return the last selected folder */ public String getLastSelectedFolder() { return lastSelectedFolder; } /** * Set the last selected folder. * * @param lastSelectedFolder the folder to set */ public void setLastSelectedFolder(String lastSelectedFolder) { this.lastSelectedFolder = lastSelectedFolder; } /** * Returns the identification displayed. * * @return the identification displayed */ public com.compomics.util.experiment.identification.Identification getIdentification() { return identification; } /** * Returns the identification features generator. * * @return the identification features generator */ public IdentificationFeaturesGenerator getIdentificationFeaturesGenerator() { return identificationFeaturesGenerator; } /** * Returns the search parameters. * * @return the search parameters */ public SearchParameters getSearchParameters() { return searchParameters; } /** * Return the display preferences to use. * * @return the display preferences to use */ public DisplayPreferences getDisplayPreferences() { return displayPreferences; } public ArrayList<IonMatch> getIonsCurrentlyMatched() throws MzMLUnmarshallerException { return spectrumAnnotator.getCurrentAnnotation( annotationPreferences.getIonTypes(), annotationPreferences.getNeutralLosses(), annotationPreferences.getValidatedCharges()); } public SpectrumAnnotator getSpectrumAnnorator() { return spectrumAnnotator; } public void clearData(boolean clearDatabaseFolder) { projectDetails = null; spectrumAnnotator = new SpectrumAnnotator(); try { spectrumFactory.closeFiles(); } catch (Exception e) { e.printStackTrace(); } try { sequenceFactory.closeFile(); } catch (Exception e) { e.printStackTrace(); } try { GOFactory.getInstance().closeFiles(); } catch (Exception e) { e.printStackTrace(); } try { spectrumFactory.clearFactory(); } catch (Exception e) { e.printStackTrace(); } try { sequenceFactory.clearFactory(); } catch (Exception e) { e.printStackTrace(); } try { GOFactory.getInstance().clearFactory(); } catch (Exception e) { e.printStackTrace(); } identifiedModifications = null; if (clearDatabaseFolder) { clearDatabaseFolder(); } resetFeatureGenerator(); // set up the tabs/panels currentPSFile = null; } /** Resets the feature generator. */ public void resetFeatureGenerator() { identificationFeaturesGenerator = new IdentificationFeaturesGenerator( identification, searchParameters, idFilter, metrics, spectrumCountingPreferences); } /** Clears the database folder. */ private void clearDatabaseFolder() { boolean databaseClosed = true; // close the database connection if (identification != null) { try { identification.close(); identification = null; } catch (SQLException e) { databaseClosed = false; e.printStackTrace(); JOptionPane.showMessageDialog( null, "Failed to close the database.", "Database Error", JOptionPane.WARNING_MESSAGE); } } // empty the matches folder if (databaseClosed) { File matchFolder = new File(resource, PeptideShaker.SERIALIZATION_DIRECTORY); if (matchFolder.exists()) { File[] tempFiles = matchFolder.listFiles(); if (tempFiles != null) { for (File currentFile : tempFiles) { Util.deleteDir(currentFile); } } if (matchFolder.listFiles() != null && matchFolder.listFiles().length > 0) { JOptionPane.showMessageDialog( null, "Failed to empty the database folder:\n" + matchFolder.getPath() + ".", "Database Cleanup Failed", JOptionPane.WARNING_MESSAGE); } } } } /** Updates the ions used for fragment annotation. */ public void updateAnnotationPreferencesFromSearchSettings() { annotationPreferences.setPreferencesFromSearchParamaers(searchParameters); } /** * Returns the gene preferences. * * @return the gene preferences */ public GenePreferences getGenePreferences() { return genePreferences; } private GenePreferences genePreferences = new GenePreferences(); /** * Returns the experiment. * * @return the experiment */ public MsExperiment getExperiment() { return experiment; } /* * Returns the sample. * @return the sample */ public Sample getSample() { return sample; } /** * Returns the replicate number. * * @return the replicateNumber */ public int getReplicateNumber() { return this.replicateNumber; } /** * Returns the desired spectrum. * * @param spectrumKey the key of the spectrum * @return the desired spectrum */ public MSnSpectrum getSpectrum(String spectrumKey) { String spectrumFile = Spectrum.getSpectrumFile(spectrumKey); String spectrumTitle = Spectrum.getSpectrumTitle(spectrumKey); try { return (MSnSpectrum) spectrumFactory.getSpectrum(spectrumFile, spectrumTitle); } catch (Exception e) { System.out.println(e.getMessage()); return null; } } }