X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=forester%2Fjava%2Fsrc%2Forg%2Fforester%2Farchaeopteryx%2FMainFrameApplication.java;h=c146900a77c87e43f147629ef732344bed65be07;hb=b4d39d202d7162aed8a41f2e1c42ac81f91c9341;hp=e2f47379672135ab125ac1a1f4294de9b961f4cc;hpb=a29d5642b2f9a3db526f35ca5971c08700963503;p=jalview.git diff --git a/forester/java/src/org/forester/archaeopteryx/MainFrameApplication.java b/forester/java/src/org/forester/archaeopteryx/MainFrameApplication.java index e2f4737..c146900 100644 --- a/forester/java/src/org/forester/archaeopteryx/MainFrameApplication.java +++ b/forester/java/src/org/forester/archaeopteryx/MainFrameApplication.java @@ -66,7 +66,6 @@ import org.forester.archaeopteryx.Options.CLADOGRAM_TYPE; import org.forester.archaeopteryx.Options.NODE_LABEL_DIRECTION; import org.forester.archaeopteryx.Options.PHYLOGENY_GRAPHICS_TYPE; import org.forester.archaeopteryx.tools.AncestralTaxonomyInferrer; -import org.forester.archaeopteryx.tools.GoAnnotation; import org.forester.archaeopteryx.tools.InferenceManager; import org.forester.archaeopteryx.tools.PhyloInferenceDialog; import org.forester.archaeopteryx.tools.PhylogeneticInferenceOptions; @@ -98,10 +97,6 @@ import org.forester.phylogeny.data.Taxonomy; import org.forester.phylogeny.factories.ParserBasedPhylogenyFactory; import org.forester.phylogeny.factories.PhylogenyFactory; import org.forester.phylogeny.iterators.PhylogenyNodeIterator; -import org.forester.sdi.GSDI; -import org.forester.sdi.GSDIR; -import org.forester.sdi.SDIException; -import org.forester.sdi.SDIR; import org.forester.sequence.Sequence; import org.forester.util.BasicDescriptiveStatistics; import org.forester.util.BasicTable; @@ -137,15 +132,6 @@ public final class MainFrameApplication extends MainFrame { private final JFileChooser _save_filechooser; private final JFileChooser _writetopdf_filechooser; private final JFileChooser _writetographics_filechooser; - // Analysis menu - private JMenu _analysis_menu; - private JMenuItem _load_species_tree_item; - private JMenuItem _gsdi_item; - private JMenuItem _gsdir_item; - private JMenuItem _root_min_dups_item; - private JMenuItem _root_min_cost_l_item; - private JMenuItem _lineage_inference; - private JMenuItem _function_analysis; // Application-only print menu items private JMenuItem _print_item; private JMenuItem _write_to_pdf_item; @@ -154,7 +140,6 @@ public final class MainFrameApplication extends MainFrame { private JMenuItem _write_to_tif_item; private JMenuItem _write_to_png_item; private JMenuItem _write_to_bmp_item; - private Phylogeny _species_tree; private File _current_dir; private ButtonGroup _radio_group_1; private ButtonGroup _radio_group_2; @@ -279,7 +264,6 @@ public final class MainFrameApplication extends MainFrame { setInferenceManager( InferenceManager.createInstance( _configuration ) ); setPhylogeneticInferenceOptions( PhylogeneticInferenceOptions.createInstance( _configuration ) ); // _textframe = null; #~~~~ - _species_tree = null; // set title setTitle( Constants.PRG_NAME + " " + Constants.VERSION + " (" + Constants.PRG_DATE + ")" ); _mainpanel = new MainPanel( _configuration, this ); @@ -481,9 +465,6 @@ public final class MainFrameApplication extends MainFrame { } executeLineageInference(); } - else if ( o == _function_analysis ) { - executeFunctionAnalysis(); - } else if ( o == _obtain_detailed_taxonomic_information_jmi ) { if ( isSubtreeDisplayed() ) { return; @@ -520,30 +501,6 @@ public final class MainFrameApplication extends MainFrame { else if ( o == _extract_tax_code_from_node_names_jmi ) { extractTaxDataFromNodeNames(); } - else if ( o == _gsdi_item ) { - if ( isSubtreeDisplayed() ) { - return; - } - executeGSDI(); - } - else if ( o == _gsdir_item ) { - if ( isSubtreeDisplayed() ) { - return; - } - executeGSDIR(); - } - else if ( o == _root_min_dups_item ) { - if ( isSubtreeDisplayed() ) { - return; - } - executeSDIR( false ); - } - else if ( o == _root_min_cost_l_item ) { - if ( isSubtreeDisplayed() ) { - return; - } - executeSDIR( true ); - } else if ( o == _graphics_export_visible_only_cbmi ) { updateOptions( getOptions() ); } @@ -580,12 +537,16 @@ public final class MainFrameApplication extends MainFrame { } collapseBelowThreshold(); } - else if ( ( o == _extract_taxonomy_pfam_rbmi ) || ( o == _extract_taxonomy_yes_rbmi ) ) { + else if ( ( o == _extract_taxonomy_pfam_strict_rbmi ) || ( o == _extract_taxonomy_pfam_relaxed_rbmi ) + || ( o == _extract_taxonomy_agressive_rbmi ) ) { if ( _replace_underscores_cbmi != null ) { _replace_underscores_cbmi.setSelected( false ); } updateOptions( getOptions() ); } + else if ( o == _extract_taxonomy_no_rbmi ) { + updateOptions( getOptions() ); + } else if ( o == _inference_from_msa_item ) { executePhyleneticInference( false ); } @@ -805,16 +766,10 @@ public final class MainFrameApplication extends MainFrame { void buildAnalysisMenu() { _analysis_menu = MainFrame.createMenu( "Analysis", getConfiguration() ); _analysis_menu.add( _gsdi_item = new JMenuItem( "GSDI (Generalized Speciation Duplication Inference)" ) ); - _analysis_menu.add( _gsdir_item = new JMenuItem( "GSDIR (re-rooting)" ) ); - _analysis_menu.addSeparator(); - _analysis_menu.add( _root_min_dups_item = new JMenuItem( "Root by Minimizing Duplications | Height (SDI)" ) ); - _analysis_menu.add( _root_min_cost_l_item = new JMenuItem( "Root by Minimizing Cost L | Height (SDI)" ) ); - _analysis_menu.addSeparator(); + _analysis_menu.add( _gsdir_item = new JMenuItem( "GSDIR (GSDI with re-rooting)" ) ); _analysis_menu.add( _load_species_tree_item = new JMenuItem( "Load Species Tree..." ) ); customizeJMenuItem( _gsdi_item ); customizeJMenuItem( _gsdir_item ); - customizeJMenuItem( _root_min_dups_item ); - customizeJMenuItem( _root_min_cost_l_item ); customizeJMenuItem( _load_species_tree_item ); _analysis_menu.addSeparator(); _analysis_menu.add( _lineage_inference = new JMenuItem( INFER_ANCESTOR_TAXONOMIES ) ); @@ -929,34 +884,38 @@ public final class MainFrameApplication extends MainFrame { _radio_group_1.add( _ext_node_dependent_cladogram_rbmi ); _radio_group_1.add( _uniform_cladograms_rbmi ); _radio_group_1.add( _non_lined_up_cladograms_rbmi ); + /////// _options_jmenu.add( _show_overview_cbmi = new JCheckBoxMenuItem( SHOW_OVERVIEW_LABEL ) ); _options_jmenu.add( _show_scale_cbmi = new JCheckBoxMenuItem( DISPLAY_SCALE_LABEL ) ); _options_jmenu .add( _show_branch_length_values_cbmi = new JCheckBoxMenuItem( DISPLAY_BRANCH_LENGTH_VALUES_LABEL ) ); - _options_jmenu.add( _show_confidence_stddev_cbmi = new JCheckBoxMenuItem( SHOW_CONF_STDDEV_LABEL ) ); _options_jmenu .add( _show_default_node_shapes_internal_cbmi = new JCheckBoxMenuItem( DISPLAY_NODE_BOXES_LABEL_INT ) ); _options_jmenu .add( _show_default_node_shapes_external_cbmi = new JCheckBoxMenuItem( DISPLAY_NODE_BOXES_LABEL_EXT ) ); + if ( getConfiguration().doDisplayOption( Configuration.show_domain_architectures ) ) { + _options_jmenu.add( _show_domain_labels = new JCheckBoxMenuItem( SHOW_DOMAIN_LABELS_LABEL ) ); + } + _options_jmenu.add( _show_annotation_ref_source = new JCheckBoxMenuItem( SHOW_ANN_REF_SOURCE_LABEL ) ); + _options_jmenu.add( _show_confidence_stddev_cbmi = new JCheckBoxMenuItem( SHOW_CONF_STDDEV_LABEL ) ); + _options_jmenu.add( _color_by_taxonomic_group_cbmi = new JCheckBoxMenuItem( COLOR_BY_TAXONOMIC_GROUP ) ); _options_jmenu .add( _taxonomy_colorize_node_shapes_cbmi = new JCheckBoxMenuItem( MainFrame.TAXONOMY_COLORIZE_NODE_SHAPES_LABEL ) ); - _options_jmenu.add( _cycle_node_shape_mi = new JMenuItem( MainFrame.CYCLE_NODE_SHAPE_LABEL ) ); - _options_jmenu.add( _cycle_node_fill_mi = new JMenuItem( MainFrame.CYCLE_NODE_FILL_LABEL ) ); - _options_jmenu.add( _choose_node_size_mi = new JMenuItem( MainFrame.CHOOSE_NODE_SIZE_LABEL ) ); - _options_jmenu.add( _label_direction_cbmi = new JCheckBoxMenuItem( LABEL_DIRECTION_LABEL ) ); - _label_direction_cbmi.setToolTipText( LABEL_DIRECTION_TIP ); _options_jmenu.add( _color_labels_same_as_parent_branch = new JCheckBoxMenuItem( COLOR_LABELS_LABEL ) ); _color_labels_same_as_parent_branch.setToolTipText( MainFrame.COLOR_LABELS_TIP ); _options_jmenu.add( _abbreviate_scientific_names = new JCheckBoxMenuItem( ABBREV_SN_LABEL ) ); + _options_jmenu.add( _label_direction_cbmi = new JCheckBoxMenuItem( LABEL_DIRECTION_LABEL ) ); + _label_direction_cbmi.setToolTipText( LABEL_DIRECTION_TIP ); _options_jmenu.add( _screen_antialias_cbmi = new JCheckBoxMenuItem( SCREEN_ANTIALIAS_LABEL ) ); _options_jmenu.add( _background_gradient_cbmi = new JCheckBoxMenuItem( BG_GRAD_LABEL ) ); - if ( getConfiguration().doDisplayOption( Configuration.show_domain_architectures ) ) { - _options_jmenu.add( _show_domain_labels = new JCheckBoxMenuItem( SHOW_DOMAIN_LABELS_LABEL ) ); - } + _options_jmenu.add( _cycle_node_shape_mi = new JMenuItem( MainFrame.CYCLE_NODE_SHAPE_LABEL ) ); + _options_jmenu.add( _cycle_node_fill_mi = new JMenuItem( MainFrame.CYCLE_NODE_FILL_LABEL ) ); + _options_jmenu.add( _choose_node_size_mi = new JMenuItem( MainFrame.CHOOSE_NODE_SIZE_LABEL ) ); _options_jmenu.add( _choose_minimal_confidence_mi = new JMenuItem( "" ) ); _options_jmenu.add( _overview_placment_mi = new JMenuItem( "" ) ); _options_jmenu.add( _switch_colors_mi = new JMenuItem( "" ) ); _options_jmenu.add( _choose_font_mi = new JMenuItem( "" ) ); + /////// _options_jmenu.addSeparator(); _options_jmenu.add( customizeMenuItemAsLabel( new JMenuItem( SEARCH_SUBHEADER ), getConfiguration() ) ); _options_jmenu.add( _search_case_senstive_cbmi = new JCheckBoxMenuItem( SEARCH_CASE_SENSITIVE_LABEL ) ); @@ -983,17 +942,22 @@ public final class MainFrameApplication extends MainFrame { // _options_jmenu.add( _extract_taxonomy_no_rbmi = new JRadioButtonMenuItem( "No Taxonomy Extraction" ) ); _options_jmenu - .add( _extract_taxonomy_pfam_rbmi = new JRadioButtonMenuItem( "Extract Taxonomy Codes from Pfam-style Node Names" ) ); - _extract_taxonomy_pfam_rbmi - .setToolTipText( "To extract 5-letter taxonomy codes from node names in the form of \"BCL2_MOUSE/134-298\"" ); + .add( _extract_taxonomy_pfam_strict_rbmi = new JRadioButtonMenuItem( "Extract Taxonomy Codes/Ids from Pfam-style Node Names" ) ); + _options_jmenu + .add( _extract_taxonomy_pfam_relaxed_rbmi = new JRadioButtonMenuItem( "Extract Taxonomy Codes/Ids from Pfam-style like Node Names" ) ); _options_jmenu - .add( _extract_taxonomy_yes_rbmi = new JRadioButtonMenuItem( "Extract Taxonomy Codes from Node Names" ) ); - _extract_taxonomy_yes_rbmi - .setToolTipText( "To extract 5-letter taxonomy codes from node names in the form of \"BCL2_MOUSE\" or \"BCL2_MOUSE B-cell lymphoma 2...\"" ); + .add( _extract_taxonomy_agressive_rbmi = new JRadioButtonMenuItem( "Extract Taxonomy Codes/Ids/Scientific Names from Node Names" ) ); + _extract_taxonomy_pfam_strict_rbmi + .setToolTipText( "To extract taxonomy codes/ids from node names in the form of e.g. \"BCL2_MOUSE/123-304\" or \"BCL2_10090/123-304\"" ); + _extract_taxonomy_pfam_relaxed_rbmi + .setToolTipText( "To extract taxonomy codes/ids from node names in the form of e.g. \"bax_MOUSE\" or \"bax_10090\"" ); + _extract_taxonomy_agressive_rbmi + .setToolTipText( "To extract taxonomy codes/ids or scientific names from node names in the form of e.g. \"MOUSE\" or \"10090\" or \"xyz_Nematostella_vectensis\"" ); _radio_group_2 = new ButtonGroup(); _radio_group_2.add( _extract_taxonomy_no_rbmi ); - _radio_group_2.add( _extract_taxonomy_pfam_rbmi ); - _radio_group_2.add( _extract_taxonomy_yes_rbmi ); + _radio_group_2.add( _extract_taxonomy_pfam_strict_rbmi ); + _radio_group_2.add( _extract_taxonomy_pfam_relaxed_rbmi ); + _radio_group_2.add( _extract_taxonomy_agressive_rbmi ); // _options_jmenu.add( customizeMenuItemAsLabel( new JMenuItem( "Newick/Nexus Output:" ), getConfiguration() ) ); _options_jmenu @@ -1017,9 +981,11 @@ public final class MainFrameApplication extends MainFrame { customizeJMenuItem( _cycle_node_fill_mi ); customizeJMenuItem( _choose_node_size_mi ); customizeCheckBoxMenuItem( _color_labels_same_as_parent_branch, getOptions().isColorLabelsSameAsParentBranch() ); + customizeCheckBoxMenuItem( _color_by_taxonomic_group_cbmi, getOptions().isColorByTaxonomicGroup() ); customizeCheckBoxMenuItem( _screen_antialias_cbmi, getOptions().isAntialiasScreen() ); customizeCheckBoxMenuItem( _background_gradient_cbmi, getOptions().isBackgroundColorGradient() ); customizeCheckBoxMenuItem( _show_domain_labels, getOptions().isShowDomainLabels() ); + customizeCheckBoxMenuItem( _show_annotation_ref_source, getOptions().isShowAnnotationRefSource() ); customizeCheckBoxMenuItem( _abbreviate_scientific_names, getOptions().isAbbreviateScientificTaxonNames() ); customizeCheckBoxMenuItem( _search_case_senstive_cbmi, getOptions().isSearchCaseSensitive() ); customizeCheckBoxMenuItem( _show_scale_cbmi, getOptions().isShowScale() ); @@ -1039,10 +1005,12 @@ public final class MainFrameApplication extends MainFrame { .isInternalNumberAreConfidenceForNhParsing() ); customizeRadioButtonMenuItem( _extract_taxonomy_no_rbmi, getOptions().getTaxonomyExtraction() == TAXONOMY_EXTRACTION.NO ); - customizeRadioButtonMenuItem( _extract_taxonomy_yes_rbmi, - getOptions().getTaxonomyExtraction() == TAXONOMY_EXTRACTION.YES ); - customizeRadioButtonMenuItem( _extract_taxonomy_pfam_rbmi, - getOptions().getTaxonomyExtraction() == TAXONOMY_EXTRACTION.PFAM_STYLE_ONLY ); + customizeRadioButtonMenuItem( _extract_taxonomy_pfam_strict_rbmi, + getOptions().getTaxonomyExtraction() == TAXONOMY_EXTRACTION.PFAM_STYLE_STRICT ); + customizeRadioButtonMenuItem( _extract_taxonomy_pfam_relaxed_rbmi, + getOptions().getTaxonomyExtraction() == TAXONOMY_EXTRACTION.PFAM_STYLE_RELAXED ); + customizeRadioButtonMenuItem( _extract_taxonomy_agressive_rbmi, + getOptions().getTaxonomyExtraction() == TAXONOMY_EXTRACTION.AGGRESSIVE ); customizeCheckBoxMenuItem( _replace_underscores_cbmi, getOptions().isReplaceUnderscoresInNhParsing() ); customizeCheckBoxMenuItem( _search_whole_words_only_cbmi, getOptions().isMatchWholeTermsOnly() ); customizeCheckBoxMenuItem( _inverse_search_result_cbmi, getOptions().isInverseSearchResult() ); @@ -1119,6 +1087,9 @@ public final class MainFrameApplication extends MainFrame { customizeJMenuItem( _move_node_names_to_seq_names_jmi ); _move_node_names_to_seq_names_jmi.setToolTipText( "To interpret node names as sequence (protein, gene) names" ); _tools_menu.addSeparator(); + _tools_menu.add( _obtain_seq_information_jmi = new JMenuItem( "Obtain Sequence Information" ) ); + customizeJMenuItem( _obtain_seq_information_jmi ); + _obtain_seq_information_jmi.setToolTipText( "To add additional sequence information" ); _tools_menu .add( _obtain_detailed_taxonomic_information_jmi = new JMenuItem( OBTAIN_DETAILED_TAXONOMIC_INFORMATION ) ); customizeJMenuItem( _obtain_detailed_taxonomic_information_jmi ); @@ -1129,17 +1100,7 @@ public final class MainFrameApplication extends MainFrame { customizeJMenuItem( _obtain_detailed_taxonomic_information_deleting_jmi ); _obtain_detailed_taxonomic_information_deleting_jmi .setToolTipText( "To add additional taxonomic information, deletes nodes for which taxonomy cannot found (from UniProt Taxonomy)" ); - _tools_menu.add( _obtain_seq_information_jmi = new JMenuItem( "Obtain Sequence Information" ) ); - customizeJMenuItem( _obtain_seq_information_jmi ); - _obtain_seq_information_jmi.setToolTipText( "To add additional sequence information" ); _tools_menu.addSeparator(); - if ( !Constants.__RELEASE ) { - _tools_menu.add( _function_analysis = new JMenuItem( "Add UniProtKB Annotations" ) ); - customizeJMenuItem( _function_analysis ); - _function_analysis - .setToolTipText( "To add UniProtKB annotations for sequences with appropriate identifiers" ); - _tools_menu.addSeparator(); - } _tools_menu.add( _read_values_jmi = new JMenuItem( "Attach Vector/Expression Values" ) ); customizeJMenuItem( _read_values_jmi ); _read_values_jmi.setToolTipText( "To attach vector (e.g. gene expression) values to tree nodes (beta)" ); @@ -1165,108 +1126,6 @@ public final class MainFrameApplication extends MainFrame { exit(); } - void executeFunctionAnalysis() { - if ( ( _mainpanel.getCurrentPhylogeny() == null ) || ( _mainpanel.getCurrentPhylogeny().isEmpty() ) ) { - return; - } - final GoAnnotation a = new GoAnnotation( this, - _mainpanel.getCurrentTreePanel(), - _mainpanel.getCurrentPhylogeny() ); - new Thread( a ).start(); - } - - void executeGSDI() { - if ( !isOKforSDI( false, true ) ) { - return; - } - if ( !_mainpanel.getCurrentPhylogeny().isRooted() ) { - JOptionPane.showMessageDialog( this, - "Gene tree is not rooted.", - "Cannot execute GSDI", - JOptionPane.ERROR_MESSAGE ); - return; - } - final Phylogeny gene_tree = _mainpanel.getCurrentPhylogeny().copy(); - gene_tree.setAllNodesToNotCollapse(); - gene_tree.recalculateNumberOfExternalDescendants( false ); - GSDI gsdi = null; - final Phylogeny species_tree = _species_tree.copy(); - try { - gsdi = new GSDI( gene_tree, species_tree, false, true, true ); - } - catch ( final SDIException e ) { - JOptionPane.showMessageDialog( this, - e.getLocalizedMessage(), - "Error during GSDI", - JOptionPane.ERROR_MESSAGE ); - return; - } - catch ( final Exception e ) { - AptxUtil.unexpectedException( e ); - return; - } - gene_tree.setRerootable( false ); - _mainpanel.getCurrentTreePanel().setTree( gene_tree ); - _mainpanel.getCurrentPhylogeny().clearHashIdToNodeMap(); - _mainpanel.getCurrentPhylogeny().recalculateNumberOfExternalDescendants( true ); - _mainpanel.getCurrentTreePanel().resetNodeIdToDistToLeafMap(); - _mainpanel.getCurrentTreePanel().setEdited( true ); - getControlPanel().setShowEvents( true ); - showWhole(); - final int selected = _mainpanel.getTabbedPane().getSelectedIndex(); - _mainpanel.addPhylogenyInNewTab( species_tree, getConfiguration(), "species tree", null ); - showWhole(); - _mainpanel.getTabbedPane().setSelectedIndex( selected ); - showWhole(); - _mainpanel.getCurrentTreePanel().setEdited( true ); - JOptionPane.showMessageDialog( this, "Duplications: " + gsdi.getDuplicationsSum() + "\n" - + "Potential duplications: " + gsdi.getSpeciationOrDuplicationEventsSum() + "\n" + "Speciations: " - + gsdi.getSpeciationsSum(), "GSDI successfully completed", JOptionPane.INFORMATION_MESSAGE ); - } - - void executeGSDIR() { - if ( !isOKforSDI( false, true ) ) { - return; - } - final Phylogeny gene_tree = _mainpanel.getCurrentPhylogeny().copy(); - gene_tree.setAllNodesToNotCollapse(); - gene_tree.recalculateNumberOfExternalDescendants( false ); - GSDIR gsdir = null; - final Phylogeny species_tree = _species_tree.copy(); - try { - gsdir = new GSDIR( gene_tree, species_tree, true, true ); - } - catch ( final SDIException e ) { - JOptionPane.showMessageDialog( this, - e.getLocalizedMessage(), - "Error during GSDIR", - JOptionPane.ERROR_MESSAGE ); - return; - } - catch ( final Exception e ) { - AptxUtil.unexpectedException( e ); - return; - } - final Phylogeny result_gene_tree = gsdir.getMinDuplicationsSumGeneTree(); - result_gene_tree.setRerootable( false ); - result_gene_tree.clearHashIdToNodeMap(); - result_gene_tree.recalculateNumberOfExternalDescendants( true ); - _mainpanel.addPhylogenyInNewTab( result_gene_tree, getConfiguration(), "gene tree", null ); - getControlPanel().setShowEvents( true ); - showWhole(); - final int selected = _mainpanel.getTabbedPane().getSelectedIndex(); - _mainpanel.addPhylogenyInNewTab( species_tree, getConfiguration(), "species tree", null ); - showWhole(); - _mainpanel.getTabbedPane().setSelectedIndex( selected ); - showWhole(); - _mainpanel.getCurrentTreePanel().setEdited( true ); - JOptionPane.showMessageDialog( this, - "Duplications (min): " + gsdir.getMinDuplicationsSum() + "\n" + "Speciations: " - + gsdir.getSpeciationsSum(), - "GSDIR successfully completed", - JOptionPane.INFORMATION_MESSAGE ); - } - void executeLineageInference() { if ( ( _mainpanel.getCurrentPhylogeny() == null ) || ( _mainpanel.getCurrentPhylogeny().isEmpty() ) ) { return; @@ -1285,37 +1144,6 @@ public final class MainFrameApplication extends MainFrame { new Thread( inferrer ).start(); } - void executeSDIR( final boolean minimize_cost ) { - if ( !isOKforSDI( true, true ) ) { - return; - } - Phylogeny gene_tree = _mainpanel.getCurrentPhylogeny().copy(); - final SDIR sdiunrooted = new SDIR(); - gene_tree.setAllNodesToNotCollapse(); - gene_tree.recalculateNumberOfExternalDescendants( false ); - try { - gene_tree = sdiunrooted.infer( gene_tree, _species_tree, minimize_cost, // minimize cost - !minimize_cost, // minimize sum of dups - true, // minimize height - true, // return tree(s) - 1 )[ 0 ]; // # of trees to return - } - catch ( final Exception e ) { - JOptionPane.showMessageDialog( this, e.toString(), "Error during SDIR", JOptionPane.ERROR_MESSAGE ); - return; - } - final int duplications = sdiunrooted.getMinimalDuplications(); - gene_tree.setRerootable( false ); - _mainpanel.getCurrentTreePanel().setTree( gene_tree ); - getControlPanel().setShowEvents( true ); - showWhole(); - _mainpanel.getCurrentTreePanel().setEdited( true ); - JOptionPane.showMessageDialog( this, - "Number of duplications: " + duplications, - "SDIR successfully completed", - JOptionPane.INFORMATION_MESSAGE ); - } - void exit() { removeAllTextFrames(); _mainpanel.terminate(); @@ -1325,36 +1153,6 @@ public final class MainFrameApplication extends MainFrame { System.exit( 0 ); } - boolean isOKforSDI( final boolean species_tree_has_to_binary, final boolean gene_tree_has_to_binary ) { - if ( ( _mainpanel.getCurrentPhylogeny() == null ) || _mainpanel.getCurrentPhylogeny().isEmpty() ) { - return false; - } - else if ( ( _species_tree == null ) || _species_tree.isEmpty() ) { - JOptionPane.showMessageDialog( this, - "No species tree loaded", - "Cannot execute SDI", - JOptionPane.ERROR_MESSAGE ); - return false; - } - else if ( species_tree_has_to_binary && !_species_tree.isCompletelyBinary() ) { - JOptionPane.showMessageDialog( this, - "Species tree is not completely binary", - "Cannot execute SDI", - JOptionPane.ERROR_MESSAGE ); - return false; - } - else if ( gene_tree_has_to_binary && !_mainpanel.getCurrentPhylogeny().isCompletelyBinary() ) { - JOptionPane.showMessageDialog( this, - "Gene tree is not completely binary", - "Cannot execute SDI", - JOptionPane.ERROR_MESSAGE ); - return false; - } - else { - return true; - } - } - @Override void readPhylogeniesFromURL() { URL url = null; @@ -1489,6 +1287,118 @@ public final class MainFrameApplication extends MainFrame { _contentpane.repaint(); } + private void addExpressionValuesFromFile() { + if ( ( getCurrentTreePanel() == null ) || ( getCurrentTreePanel().getPhylogeny() == null ) ) { + JOptionPane.showMessageDialog( this, + "Need to load evolutionary tree first", + "Can Not Read Expression Values", + JOptionPane.WARNING_MESSAGE ); + return; + } + final File my_dir = getCurrentDir(); + if ( my_dir != null ) { + _values_filechooser.setCurrentDirectory( my_dir ); + } + final int result = _values_filechooser.showOpenDialog( _contentpane ); + final File file = _values_filechooser.getSelectedFile(); + if ( ( file != null ) && ( file.length() > 0 ) && ( result == JFileChooser.APPROVE_OPTION ) ) { + BasicTable t = null; + try { + t = BasicTableParser.parse( file, '\t' ); + if ( t.getNumberOfColumns() < 2 ) { + t = BasicTableParser.parse( file, ',' ); + } + if ( t.getNumberOfColumns() < 2 ) { + t = BasicTableParser.parse( file, ' ' ); + } + } + catch ( final IOException e ) { + JOptionPane.showMessageDialog( this, + e.getMessage(), + "Could Not Read Expression Value Table", + JOptionPane.ERROR_MESSAGE ); + return; + } + if ( t.getNumberOfColumns() < 2 ) { + JOptionPane.showMessageDialog( this, + "Table contains " + t.getNumberOfColumns() + " column(s)", + "Problem with Expression Value Table", + JOptionPane.ERROR_MESSAGE ); + return; + } + if ( t.getNumberOfRows() < 1 ) { + JOptionPane.showMessageDialog( this, + "Table contains zero rows", + "Problem with Expression Value Table", + JOptionPane.ERROR_MESSAGE ); + return; + } + final Phylogeny phy = getCurrentTreePanel().getPhylogeny(); + if ( t.getNumberOfRows() != phy.getNumberOfExternalNodes() ) { + JOptionPane.showMessageDialog( this, + "Table contains " + t.getNumberOfRows() + " rows, but tree contains " + + phy.getNumberOfExternalNodes() + " external nodes", + "Warning", + JOptionPane.WARNING_MESSAGE ); + } + final DescriptiveStatistics stats = new BasicDescriptiveStatistics(); + int not_found = 0; + for( final PhylogenyNodeIterator iter = phy.iteratorPreorder(); iter.hasNext(); ) { + final PhylogenyNode node = iter.next(); + final String node_name = node.getName(); + if ( !ForesterUtil.isEmpty( node_name ) ) { + int row = -1; + try { + row = t.findRow( node_name ); + } + catch ( final IllegalArgumentException e ) { + JOptionPane + .showMessageDialog( this, + e.getMessage(), + "Error Mapping Node Identifiers to Expression Value Identifiers", + JOptionPane.ERROR_MESSAGE ); + return; + } + if ( row < 0 ) { + if ( node.isExternal() ) { + not_found++; + } + continue; + } + final List l = new ArrayList(); + for( int col = 1; col < t.getNumberOfColumns(); ++col ) { + double d = -100; + try { + d = Double.parseDouble( t.getValueAsString( col, row ) ); + } + catch ( final NumberFormatException e ) { + JOptionPane.showMessageDialog( this, + "Could not parse \"" + t.getValueAsString( col, row ) + + "\" into a decimal value", + "Issue with Expression Value Table", + JOptionPane.ERROR_MESSAGE ); + return; + } + stats.addValue( d ); + l.add( d ); + } + if ( !l.isEmpty() ) { + if ( node.getNodeData().getProperties() != null ) { + node.getNodeData().getProperties() + .removePropertiesWithGivenReferencePrefix( PhyloXmlUtil.VECTOR_PROPERTY_REF ); + } + node.getNodeData().setVector( l ); + } + } + } + if ( not_found > 0 ) { + JOptionPane.showMessageDialog( this, "Could not fine expression values for " + not_found + + " external node(s)", "Warning", JOptionPane.WARNING_MESSAGE ); + } + getCurrentTreePanel().setStatisticsForExpressionValues( stats ); + } + } + private void addSequencesFromFile() { if ( ( getCurrentTreePanel() == null ) || ( getCurrentTreePanel().getPhylogeny() == null ) ) { JOptionPane.showMessageDialog( this, @@ -1567,6 +1477,9 @@ public final class MainFrameApplication extends MainFrame { nodes = phy.getNodesViaSequenceSymbol( seq_name ); } if ( nodes.isEmpty() ) { + nodes = phy.getNodesViaGeneName( seq_name ); + } + if ( nodes.isEmpty() ) { nodes = phy.getNodes( seq_name ); } if ( nodes.size() > 1 ) { @@ -1645,127 +1558,6 @@ public final class MainFrameApplication extends MainFrame { } } - private void setArrowCursor() { - try { - _mainpanel.getCurrentTreePanel().setArrowCursor(); - } - catch ( final Exception ex ) { - // Do nothing. - } - } - - private void addExpressionValuesFromFile() { - if ( ( getCurrentTreePanel() == null ) || ( getCurrentTreePanel().getPhylogeny() == null ) ) { - JOptionPane.showMessageDialog( this, - "Need to load evolutionary tree first", - "Can Not Read Expression Values", - JOptionPane.WARNING_MESSAGE ); - return; - } - final File my_dir = getCurrentDir(); - if ( my_dir != null ) { - _values_filechooser.setCurrentDirectory( my_dir ); - } - final int result = _values_filechooser.showOpenDialog( _contentpane ); - final File file = _values_filechooser.getSelectedFile(); - if ( ( file != null ) && ( file.length() > 0 ) && ( result == JFileChooser.APPROVE_OPTION ) ) { - BasicTable t = null; - try { - t = BasicTableParser.parse( file, "\t" ); - if ( t.getNumberOfColumns() < 2 ) { - t = BasicTableParser.parse( file, "," ); - } - if ( t.getNumberOfColumns() < 2 ) { - t = BasicTableParser.parse( file, " " ); - } - } - catch ( final IOException e ) { - JOptionPane.showMessageDialog( this, - e.getMessage(), - "Could Not Read Expression Value Table", - JOptionPane.ERROR_MESSAGE ); - return; - } - if ( t.getNumberOfColumns() < 2 ) { - JOptionPane.showMessageDialog( this, - "Table contains " + t.getNumberOfColumns() + " column(s)", - "Problem with Expression Value Table", - JOptionPane.ERROR_MESSAGE ); - return; - } - if ( t.getNumberOfRows() < 1 ) { - JOptionPane.showMessageDialog( this, - "Table contains zero rows", - "Problem with Expression Value Table", - JOptionPane.ERROR_MESSAGE ); - return; - } - final Phylogeny phy = getCurrentTreePanel().getPhylogeny(); - if ( t.getNumberOfRows() != phy.getNumberOfExternalNodes() ) { - JOptionPane.showMessageDialog( this, - "Table contains " + t.getNumberOfRows() + " rows, but tree contains " - + phy.getNumberOfExternalNodes() + " external nodes", - "Warning", - JOptionPane.WARNING_MESSAGE ); - } - final DescriptiveStatistics stats = new BasicDescriptiveStatistics(); - int not_found = 0; - for( final PhylogenyNodeIterator iter = phy.iteratorPreorder(); iter.hasNext(); ) { - final PhylogenyNode node = iter.next(); - final String node_name = node.getName(); - if ( !ForesterUtil.isEmpty( node_name ) ) { - int row = -1; - try { - row = t.findRow( node_name ); - } - catch ( final IllegalArgumentException e ) { - JOptionPane - .showMessageDialog( this, - e.getMessage(), - "Error Mapping Node Identifiers to Expression Value Identifiers", - JOptionPane.ERROR_MESSAGE ); - return; - } - if ( row < 0 ) { - if ( node.isExternal() ) { - not_found++; - } - continue; - } - final List l = new ArrayList(); - for( int col = 1; col < t.getNumberOfColumns(); ++col ) { - double d = -100; - try { - d = Double.parseDouble( t.getValueAsString( col, row ) ); - } - catch ( final NumberFormatException e ) { - JOptionPane.showMessageDialog( this, - "Could not parse \"" + t.getValueAsString( col, row ) - + "\" into a decimal value", - "Issue with Expression Value Table", - JOptionPane.ERROR_MESSAGE ); - return; - } - stats.addValue( d ); - l.add( d ); - } - if ( !l.isEmpty() ) { - if ( node.getNodeData().getProperties() != null ) { - node.getNodeData().getProperties() - .removePropertiesWithGivenReferencePrefix( PhyloXmlUtil.VECTOR_PROPERTY_REF ); - } - node.getNodeData().setVector( l ); - } - } - } - if ( not_found > 0 ) { - JOptionPane.showMessageDialog( this, "Could not fine expression values for " + not_found - + " external node(s)", "Warning", JOptionPane.WARNING_MESSAGE ); - } - getCurrentTreePanel().setStatisticsForExpressionValues( stats ); - } - } - private void choosePdfWidth() { final String s = ( String ) JOptionPane.showInputDialog( this, "Please enter the default line width for PDF export.\n" @@ -1971,7 +1763,7 @@ public final class MainFrameApplication extends MainFrame { } } if ( xml_parser == null ) { - xml_parser = new PhyloXmlParser(); + xml_parser = PhyloXmlParser.createPhyloXmlParser(); } return xml_parser; } @@ -2026,7 +1818,8 @@ public final class MainFrameApplication extends MainFrame { final PhylogenyNode n = it.next(); final String name = n.getName().trim(); if ( !ForesterUtil.isEmpty( name ) ) { - final String nt = ParserUtils.extractTaxonomyDataFromNodeName( n, TAXONOMY_EXTRACTION.YES ); + final String nt = ParserUtils.extractTaxonomyDataFromNodeName( n, + TAXONOMY_EXTRACTION.AGGRESSIVE ); if ( !ForesterUtil.isEmpty( nt ) ) { if ( counter < 15 ) { sb.append( name + ": " + nt + "\n" ); @@ -2081,7 +1874,7 @@ public final class MainFrameApplication extends MainFrame { private File getCurrentDir() { if ( ( _current_dir == null ) || !_current_dir.canRead() ) { - if ( ForesterUtil.isWindowns() ) { + if ( ForesterUtil.isWindows() ) { try { _current_dir = new File( WindowsUtils.getCurrentUserDesktopPath() ); } @@ -2436,7 +2229,8 @@ public final class MainFrameApplication extends MainFrame { if ( ( file != null ) && ( result == JFileChooser.APPROVE_OPTION ) ) { if ( _open_filechooser_for_species_tree.getFileFilter() == MainFrameApplication.xmlfilter ) { try { - final Phylogeny[] trees = PhylogenyMethods.readPhylogenies( new PhyloXmlParser(), file ); + final Phylogeny[] trees = PhylogenyMethods.readPhylogenies( PhyloXmlParser + .createPhyloXmlParserXsdValidating(), file ); t = trees[ 0 ]; } catch ( final Exception e ) { @@ -2457,7 +2251,8 @@ public final class MainFrameApplication extends MainFrame { // "*.*": else { try { - final Phylogeny[] trees = PhylogenyMethods.readPhylogenies( new PhyloXmlParser(), file ); + final Phylogeny[] trees = PhylogenyMethods.readPhylogenies( PhyloXmlParser + .createPhyloXmlParserXsdValidating(), file ); t = trees[ 0 ]; } catch ( final Exception e ) { @@ -2506,7 +2301,7 @@ public final class MainFrameApplication extends MainFrame { } } if ( !exception && ( t != null ) ) { - _species_tree = t; + setSpeciesTree( t ); JOptionPane.showMessageDialog( this, "Species tree successfully loaded", "Species tree loaded", @@ -2517,6 +2312,15 @@ public final class MainFrameApplication extends MainFrame { } } + private void setArrowCursor() { + try { + _mainpanel.getCurrentTreePanel().setArrowCursor(); + } + catch ( final Exception ex ) { + // Do nothing. + } + } + private void setCurrentDir( final File current_dir ) { _current_dir = current_dir; } @@ -2576,7 +2380,12 @@ public final class MainFrameApplication extends MainFrame { final int count = getMainPanel().getTabbedPane().getTabCount(); final List trees = new ArrayList(); for( int i = 0; i < count; ++i ) { - trees.add( getMainPanel().getPhylogeny( i ) ); + final Phylogeny phy = getMainPanel().getPhylogeny( i ); + if ( ForesterUtil.isEmpty( phy.getName() ) + && !ForesterUtil.isEmpty( getMainPanel().getTabbedPane().getTitleAt( i ) ) ) { + phy.setName( getMainPanel().getTabbedPane().getTitleAt( i ) ); + } + trees.add( phy ); getMainPanel().getTreePanels().get( i ).setEdited( false ); } final PhylogenyWriter writer = new PhylogenyWriter();