- void executeGSDI() {\r
- if ( !isOKforSDI( false, true ) ) {\r
- return;\r
- }\r
- if ( !_mainpanel.getCurrentPhylogeny().isRooted() ) {\r
- JOptionPane.showMessageDialog( this,\r
- "Gene tree is not rooted.",\r
- "Cannot execute GSDI",\r
- JOptionPane.ERROR_MESSAGE );\r
- return;\r
- }\r
- final Phylogeny gene_tree = _mainpanel.getCurrentPhylogeny().copy();\r
- gene_tree.setAllNodesToNotCollapse();\r
- gene_tree.recalculateNumberOfExternalDescendants( false );\r
- GSDI gsdi = null;\r
- final Phylogeny species_tree = getSpeciesTree().copy();\r
- try {\r
- gsdi = new GSDI( gene_tree, species_tree, false, true, true, true );\r
- }\r
- catch ( final SDIException e ) {\r
- JOptionPane.showMessageDialog( this,\r
- e.getLocalizedMessage(),\r
- "Error during GSDI",\r
- JOptionPane.ERROR_MESSAGE );\r
- return;\r
- }\r
- catch ( final Exception e ) {\r
- AptxUtil.unexpectedException( e );\r
- return;\r
- }\r
- gene_tree.setRerootable( false );\r
- gene_tree.clearHashIdToNodeMap();\r
- gene_tree.recalculateNumberOfExternalDescendants( true );\r
- _mainpanel.addPhylogenyInNewTab( gene_tree, getConfiguration(), "gene tree", null );\r
- getMainPanel().getControlPanel().setShowEvents( true );\r
- showWhole();\r
- final int selected = _mainpanel.getTabbedPane().getSelectedIndex();\r
- _mainpanel.addPhylogenyInNewTab( species_tree, getConfiguration(), "species tree", null );\r
- showWhole();\r
- _mainpanel.getTabbedPane().setSelectedIndex( selected );\r
- showWhole();\r
- _mainpanel.getCurrentTreePanel().setEdited( true );\r
- final int poly = PhylogenyMethods.countNumberOfPolytomies( species_tree );\r
- if ( gsdi.getStrippedExternalGeneTreeNodes().size() > 0 ) {\r
- JOptionPane.showMessageDialog( this,\r
- "Duplications: " + gsdi.getDuplicationsSum() + "\n"\r
- + "Potential duplications: "\r
- + gsdi.getSpeciationOrDuplicationEventsSum() + "\n"\r
- + "Speciations: " + gsdi.getSpeciationsSum() + "\n"\r
- + "Stripped gene tree nodes: "\r
- + gsdi.getStrippedExternalGeneTreeNodes().size() + "\n"\r
- + "Taxonomy linkage based on: " + gsdi.getTaxCompBase() + "\n"\r
- + "Number of polytomies in species tree used: " + poly + "\n",\r
- "GSDI successfully completed",\r
- JOptionPane.WARNING_MESSAGE );\r
- }\r
- else {\r
- JOptionPane.showMessageDialog( this,\r
- "Duplications: " + gsdi.getDuplicationsSum() + "\n"\r
- + "Potential duplications: "\r
- + gsdi.getSpeciationOrDuplicationEventsSum() + "\n"\r
- + "Speciations: " + gsdi.getSpeciationsSum() + "\n"\r
- + "Stripped gene tree nodes: "\r
- + gsdi.getStrippedExternalGeneTreeNodes().size() + "\n"\r
- + "Taxonomy linkage based on: " + gsdi.getTaxCompBase() + "\n"\r
- + "Number of polytomies in species tree used: " + poly + "\n",\r
- "GSDI successfully completed",\r
- JOptionPane.INFORMATION_MESSAGE );\r
- }\r
- }\r
-\r
- void executeGSDIR() {\r
- if ( !isOKforSDI( false, false ) ) {\r
- return;\r
- }\r
- final int p = PhylogenyMethods.countNumberOfPolytomies( _mainpanel.getCurrentPhylogeny() );\r
- if ( ( p > 0 )\r
- && !( ( p == 1 ) && ( _mainpanel.getCurrentPhylogeny().getRoot().getNumberOfDescendants() == 3 ) ) ) {\r
- JOptionPane.showMessageDialog( this,\r
- "Gene tree is not completely binary",\r
- "Cannot execute GSDI",\r
- JOptionPane.ERROR_MESSAGE );\r
- return;\r
- }\r
- final Phylogeny gene_tree = _mainpanel.getCurrentPhylogeny().copy();\r
- gene_tree.setAllNodesToNotCollapse();\r
- gene_tree.recalculateNumberOfExternalDescendants( false );\r
- GSDIR gsdir = null;\r
- final Phylogeny species_tree = getSpeciesTree().copy();\r
- try {\r
- gsdir = new GSDIR( gene_tree, species_tree, true, true, true );\r
- }\r
- catch ( final SDIException e ) {\r
- JOptionPane.showMessageDialog( this,\r
- e.getLocalizedMessage(),\r
- "Error during GSDIR",\r
- JOptionPane.ERROR_MESSAGE );\r
- return;\r
- }\r
- catch ( final Exception e ) {\r
- AptxUtil.unexpectedException( e );\r
- return;\r
- }\r
- final Phylogeny result_gene_tree = gsdir.getMinDuplicationsSumGeneTree();\r
- result_gene_tree.setRerootable( false );\r
- result_gene_tree.clearHashIdToNodeMap();\r
- result_gene_tree.recalculateNumberOfExternalDescendants( true );\r
- PhylogenyMethods.orderAppearance( result_gene_tree.getRoot(), true, true, DESCENDANT_SORT_PRIORITY.NODE_NAME );\r
- _mainpanel.addPhylogenyInNewTab( result_gene_tree, getConfiguration(), "gene tree", null );\r
- getMainPanel().getControlPanel().setShowEvents( true );\r
- showWhole();\r
- final int selected = _mainpanel.getTabbedPane().getSelectedIndex();\r
- _mainpanel.addPhylogenyInNewTab( species_tree, getConfiguration(), "species tree", null );\r
- showWhole();\r
- _mainpanel.getTabbedPane().setSelectedIndex( selected );\r
- showWhole();\r
- _mainpanel.getCurrentTreePanel().setEdited( true );\r
- final int poly = PhylogenyMethods.countNumberOfPolytomies( species_tree );\r
- if ( gsdir.getStrippedExternalGeneTreeNodes().size() > 0 ) {\r
- JOptionPane.showMessageDialog( this,\r
- "Minimal duplications: " + gsdir.getMinDuplicationsSum() + "\n"\r
- + "Speciations: " + gsdir.getSpeciationsSum() + "\n"\r
- + "Stripped gene tree nodes: "\r
- + gsdir.getStrippedExternalGeneTreeNodes().size() + "\n"\r
- + "Taxonomy linkage based on: " + gsdir.getTaxCompBase() + "\n"\r
- + "Number of polytomies in species tree used: " + poly + "\n",\r
- "GSDIR successfully completed",\r
- JOptionPane.WARNING_MESSAGE );\r
- }\r
- else {\r
- JOptionPane.showMessageDialog( this,\r
- "Minimal duplications: " + gsdir.getMinDuplicationsSum() + "\n"\r
- + "Speciations: " + gsdir.getSpeciationsSum() + "\n"\r
- + "Stripped gene tree nodes: "\r
- + gsdir.getStrippedExternalGeneTreeNodes().size() + "\n"\r
- + "Taxonomy linkage based on: " + gsdir.getTaxCompBase() + "\n"\r
- + "Number of polytomies in species tree used: " + poly + "\n",\r
- "GSDIR successfully completed",\r
- JOptionPane.INFORMATION_MESSAGE );\r
- }\r
- }\r
-\r
- boolean GAndSDoHaveMoreThanOneSpeciesInComman( final Phylogeny gene_tree ) {\r
- if ( ( gene_tree == null ) || gene_tree.isEmpty() ) {\r
- JOptionPane.showMessageDialog( this,\r
- "Gene tree and species tree have no species in common.",\r
- "Error during SDI",\r
- JOptionPane.ERROR_MESSAGE );\r
- return false;\r
- }\r
- else if ( gene_tree.getNumberOfExternalNodes() < 2 ) {\r
- JOptionPane.showMessageDialog( this,\r
- "Gene tree and species tree have only one species in common.",\r
- "Error during SDI",\r
- JOptionPane.ERROR_MESSAGE );\r
- return false;\r
- }\r
- else {\r
- return true;\r
- }\r
- }\r
-\r
- ControlPanel getControlPanel() {\r
- return getMainPanel().getControlPanel();\r
- }\r
-\r
- File getCurrentDir() {\r
- if ( ( _current_dir == null ) || !_current_dir.canRead() ) {\r
- if ( ForesterUtil.isWindows() ) {\r
- try {\r
- _current_dir = new File( WindowsUtils.getCurrentUserDesktopPath() );\r
- }\r
- catch ( final Exception e ) {\r
- _current_dir = null;\r
- }\r
- }\r
- }\r
- if ( ( _current_dir == null ) || !_current_dir.canRead() ) {\r
- if ( System.getProperty( "user.home" ) != null ) {\r
- _current_dir = new File( System.getProperty( "user.home" ) );\r
- }\r
- else if ( System.getProperty( "user.dir" ) != null ) {\r
- _current_dir = new File( System.getProperty( "user.dir" ) );\r
- }\r
- }\r
- return _current_dir;\r
- }\r
-\r
- TreePanel getCurrentTreePanel() {\r
- return getMainPanel().getCurrentTreePanel();\r
- }\r
-\r
- JMenu getHelpMenu() {\r
- return _help_jmenu;\r
- }\r
-\r
- JCheckBoxMenuItem getlabelDirectionCbmi() {\r
- return _label_direction_cbmi;\r
- }\r
-\r
- JMenuBar getMenuBarOfMainFrame() {\r
- return _jmenubar;\r
- }\r
-\r
- final Phylogeny getSpeciesTree() {\r
- return _species_tree;\r
- }\r
-\r
- void initializeTypeMenu( final Options options ) {\r
- setTypeMenuToAllUnselected();\r
- switch ( options.getPhylogenyGraphicsType() ) {\r
- case CONVEX:\r
- _convex_type_cbmi.setSelected( true );\r
- break;\r
- case CURVED:\r
- _curved_type_cbmi.setSelected( true );\r
- break;\r
- case EURO_STYLE:\r
- _euro_type_cbmi.setSelected( true );\r
- break;\r
- case ROUNDED:\r
- _rounded_type_cbmi.setSelected( true );\r
- break;\r
- case TRIANGULAR:\r
- _triangular_type_cbmi.setSelected( true );\r
- break;\r
- case UNROOTED:\r
- _unrooted_type_cbmi.setSelected( true );\r
- break;\r
- case CIRCULAR:\r
- _circular_type_cbmi.setSelected( true );\r
- break;\r
- default:\r
- _rectangular_type_cbmi.setSelected( true );\r
- break;\r
- }\r
- }\r
-\r
- boolean isOKforSDI( final boolean species_tree_has_to_binary, final boolean gene_tree_has_to_binary ) {\r
- if ( ( _mainpanel.getCurrentPhylogeny() == null ) || _mainpanel.getCurrentPhylogeny().isEmpty() ) {\r
- return false;\r
- }\r
- else if ( ( getSpeciesTree() == null ) || getSpeciesTree().isEmpty() ) {\r
- JOptionPane.showMessageDialog( this,\r
- "No species tree loaded",\r
- "Cannot execute GSDI",\r
- JOptionPane.ERROR_MESSAGE );\r
- return false;\r
- }\r
- else if ( species_tree_has_to_binary && !getSpeciesTree().isCompletelyBinary() ) {\r
- JOptionPane.showMessageDialog( this,\r
- "Species tree is not completely binary",\r
- "Cannot execute GSDI",\r
- JOptionPane.ERROR_MESSAGE );\r
- return false;\r
- }\r
- else if ( gene_tree_has_to_binary && !_mainpanel.getCurrentPhylogeny().isCompletelyBinary() ) {\r
- JOptionPane.showMessageDialog( this,\r
- "Gene tree is not completely binary",\r
- "Cannot execute GSDI",\r
- JOptionPane.ERROR_MESSAGE );\r
- return false;\r
- }\r
- else {\r
- return true;\r
- }\r
- }\r
-\r
- boolean isSubtreeDisplayed() {\r
- if ( getCurrentTreePanel() != null ) {\r
- if ( getCurrentTreePanel().isCurrentTreeIsSubtree() ) {\r
- JOptionPane\r
- .showMessageDialog( this,\r
- "This operation can only be performed on a complete tree, not on the currently displayed sub-tree only.",\r
- "Operation can not be exectuted on a sub-tree",\r
- JOptionPane.WARNING_MESSAGE );\r
- return true;\r
- }\r
- }\r
- return false;\r
- }\r
-\r
- void midpointRoot() {\r
- if ( _mainpanel.getCurrentTreePanel() != null ) {\r
- _mainpanel.getCurrentTreePanel().midpointRoot();\r
- }\r
- }\r
-\r
- static void printPhylogenyToPdf( final String file_name,\r
- final Options opts,\r
- final TreePanel tp,\r
- final Component comp ) {\r
- if ( !opts.isPrintUsingActualSize() ) {\r
- tp.calcParametersForPainting( opts.getPrintSizeX(), opts.getPrintSizeY() );\r
- tp.resetPreferredSize();\r
- tp.repaint();\r
- }\r
- String pdf_written_to = "";\r
- boolean error = false;\r
- try {\r
- if ( opts.isPrintUsingActualSize() ) {\r
- pdf_written_to = PdfExporter.writePhylogenyToPdf( file_name, tp, tp.getWidth(), tp.getHeight() );\r
- }\r
- else {\r
- pdf_written_to = PdfExporter.writePhylogenyToPdf( file_name,\r
- tp,\r
- opts.getPrintSizeX(),\r
- opts.getPrintSizeY() );\r
- }\r
- }\r
- catch ( final IOException e ) {\r
- error = true;\r
- JOptionPane.showMessageDialog( comp, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE );\r