X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=d161cfd4fcd59170d418679ffe009e54300eb8f0;hb=586612d94f3a257f5d1dcb0ca20dc9eb5d97a004;hp=fc145edc2776179d37d0ef472d6aad4caf543ef9;hpb=f8563f9a829936e3cf75f36282e4816a3ea6163b;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index fc145ed..d161cfd 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -102,7 +102,6 @@ import jalview.ws.SequenceFetcher; import jalview.ws.jws1.Discoverer; import jalview.ws.jws2.Jws2Discoverer; import jalview.ws.jws2.jabaws2.Jws2Instance; -import jalview.ws.seqfetcher.ASequenceFetcher; import jalview.ws.seqfetcher.DbSourceProxy; import java.awt.BorderLayout; @@ -4723,33 +4722,18 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, new Object[] { source }), sttime); try { - /* - * 'peer' sequences are any to add to this alignment, for example - * alternative protein products for my protein's gene - */ - List addedPeers = new ArrayList(); AlignmentI alignment = AlignFrame.this.getViewport() .getAlignment(); - Alignment xrefs = CrossRef.findXrefSequences(sel, dna, source, - alignment, addedPeers); + AlignmentI xrefs = CrossRef.findXrefSequences(sel, dna, source, + alignment); if (xrefs != null) { /* - * figure out colour scheme if any to apply to features + * get display scheme (if any) to apply to features */ - ASequenceFetcher sftch = new SequenceFetcher(); - List proxies = sftch.getSourceProxy(source); - FeatureSettingsModelI featureColourScheme = null; - for (DbSourceProxy proxy : proxies) - { - FeatureSettingsModelI preferredColours = proxy - .getFeatureColourScheme(); - if (preferredColours != null) - { - featureColourScheme = preferredColours; - break; - } - } + FeatureSettingsModelI featureColourScheme = new SequenceFetcher() + .getFeatureColourScheme(source); + AlignmentI al = makeCrossReferencesAlignment( alignment.getDataset(), xrefs); @@ -4761,140 +4745,141 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, .getString("label.for"), getTitle()); newFrame.setTitle(newtitle); - boolean asSplitFrame = Cache.getDefault( - Preferences.ENABLE_SPLIT_FRAME, true); - if (asSplitFrame) + if (!Cache.getDefault(Preferences.ENABLE_SPLIT_FRAME, true)) { /* - * Make a copy of this alignment (sharing the same dataset - * sequences). If we are DNA, drop introns and update mappings + * split frame display is turned off in preferences file */ - AlignmentI copyAlignment = null; - final SequenceI[] sequenceSelection = AlignFrame.this.viewport - .getSequenceSelection(); - List cf = xrefs.getCodonFrames(); - if (dna) - { - copyAlignment = AlignmentUtils.makeCdsAlignment( - sequenceSelection, cf, alignment); - if (copyAlignment.getHeight() == 0) - { - System.err.println("Failed to make CDS alignment"); - } - al.getCodonFrames().clear(); - al.getCodonFrames().addAll(cf); - } - else + Desktop.addInternalFrame(newFrame, newtitle, DEFAULT_WIDTH, + DEFAULT_HEIGHT); + return; // via finally clause + } + + /* + * Make a copy of this alignment (sharing the same dataset + * sequences). If we are DNA, drop introns and update mappings + */ + AlignmentI copyAlignment = null; + final SequenceI[] sequenceSelection = AlignFrame.this.viewport + .getSequenceSelection(); + List cf = xrefs.getCodonFrames(); + boolean copyAlignmentIsAligned = false; + if (dna) + { + copyAlignment = AlignmentUtils.makeCdsAlignment( + sequenceSelection, cf, alignment); + if (copyAlignment.getHeight() == 0) { - copyAlignment = new Alignment(new Alignment( - sequenceSelection)); - copyAlignment.getCodonFrames().addAll(cf); + System.err.println("Failed to make CDS alignment"); } - copyAlignment.setGapCharacter(AlignFrame.this.viewport - .getGapCharacter()); - StructureSelectionManager ssm = StructureSelectionManager - .getStructureSelectionManager(Desktop.instance); - ssm.registerMappings(cf); + al.getCodonFrames().clear(); + al.getCodonFrames().addAll(copyAlignment.getCodonFrames()); /* - * add in any extra 'peer' sequences discovered - * (e.g. alternative protein products) + * pending getting Embl transcripts to 'align', + * we are only doing this for Ensembl */ - for (SequenceI peer : addedPeers) + // TODO want to do this also when fetching UNIPROT for Ensembl + if (DBRefSource.ENSEMBL.equalsIgnoreCase(source)) { - copyAlignment.addSequence(peer); + copyAlignment.alignAs(alignment); + copyAlignmentIsAligned = true; } + } + else + { + copyAlignment = AlignmentUtils.makeCopyAlignment( + sequenceSelection, xrefs.getSequencesArray()); + copyAlignment.getCodonFrames().addAll(cf); + } + copyAlignment.setGapCharacter(AlignFrame.this.viewport + .getGapCharacter()); - if (copyAlignment.getHeight() > 0) - { - /* - * align protein to dna - */ - // FIXME what if the dna is not aligned :-O - if (dna) - { - al.alignAs(copyAlignment); - } - else - { - /* - * align cdna to protein - currently only if - * fetching and aligning Ensembl transcripts! - */ - if (DBRefSource.ENSEMBL.equalsIgnoreCase(source)) - { - copyAlignment.alignAs(al); - } - } + StructureSelectionManager ssm = StructureSelectionManager + .getStructureSelectionManager(Desktop.instance); + ssm.registerMappings(cf); - AlignFrame copyThis = new AlignFrame(copyAlignment, - AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); - copyThis.setTitle(AlignFrame.this.getTitle()); - - boolean showSequenceFeatures = viewport - .isShowSequenceFeatures(); - newFrame.setShowSeqFeatures(showSequenceFeatures); - copyThis.setShowSeqFeatures(showSequenceFeatures); - FeatureRenderer myFeatureStyling = alignPanel.getSeqPanel().seqCanvas - .getFeatureRenderer(); - - /* - * copy feature rendering settings to split frame - */ - newFrame.alignPanel.getSeqPanel().seqCanvas - .getFeatureRenderer().transferSettings( - myFeatureStyling); - copyThis.alignPanel.getSeqPanel().seqCanvas - .getFeatureRenderer().transferSettings( - myFeatureStyling); - - /* - * apply 'database source' feature configuration - * if any was found - */ - // TODO is this the feature colouring for the original - // alignment or the fetched xrefs? either could be Ensembl - newFrame.getViewport().applyFeaturesStyle( - featureColourScheme); - copyThis.getViewport().applyFeaturesStyle( - featureColourScheme); - - SplitFrame sf = new SplitFrame(dna ? copyThis : newFrame, - dna ? newFrame : copyThis); - newFrame.setVisible(true); - copyThis.setVisible(true); - String linkedTitle = MessageManager - .getString("label.linked_view_title"); - Desktop.addInternalFrame(sf, linkedTitle, -1, -1); - sf.adjustDivider(); - } + if (copyAlignment.getHeight() <= 0) + { + System.err.println("No Sequences generated for xRef type " + + source); + return; + } + /* + * align protein to dna + */ + if (dna && copyAlignmentIsAligned) + { + al.alignAs(copyAlignment); } else { - Desktop.addInternalFrame(newFrame, newtitle, DEFAULT_WIDTH, - DEFAULT_HEIGHT); + /* + * align cdna to protein - currently only if + * fetching and aligning Ensembl transcripts! + */ + if (DBRefSource.ENSEMBL.equalsIgnoreCase(source)) + { + copyAlignment.alignAs(al); + } } - } - else - { - System.err.println("No Sequences generated for xRef type " - + source); + + AlignFrame copyThis = new AlignFrame(copyAlignment, + AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); + copyThis.setTitle(AlignFrame.this.getTitle()); + + boolean showSequenceFeatures = viewport + .isShowSequenceFeatures(); + newFrame.setShowSeqFeatures(showSequenceFeatures); + copyThis.setShowSeqFeatures(showSequenceFeatures); + FeatureRenderer myFeatureStyling = alignPanel.getSeqPanel().seqCanvas + .getFeatureRenderer(); + + /* + * copy feature rendering settings to split frame + */ + newFrame.alignPanel.getSeqPanel().seqCanvas + .getFeatureRenderer() + .transferSettings(myFeatureStyling); + copyThis.alignPanel.getSeqPanel().seqCanvas + .getFeatureRenderer() + .transferSettings(myFeatureStyling); + + /* + * apply 'database source' feature configuration + * if any was found + */ + // TODO is this the feature colouring for the original + // alignment or the fetched xrefs? either could be Ensembl + newFrame.getViewport().applyFeaturesStyle(featureColourScheme); + copyThis.getViewport().applyFeaturesStyle(featureColourScheme); + + SplitFrame sf = new SplitFrame(dna ? copyThis : newFrame, + dna ? newFrame : copyThis); + newFrame.setVisible(true); + copyThis.setVisible(true); + String linkedTitle = MessageManager + .getString("label.linked_view_title"); + Desktop.addInternalFrame(sf, linkedTitle, -1, -1); + sf.adjustDivider(); } } catch (Exception e) { - jalview.bin.Cache.log.error( + Cache.log.error( "Exception when finding crossreferences", e); } catch (OutOfMemoryError e) { new OOMWarning("whilst fetching crossreferences", e); - } catch (Error e) + } catch (Throwable e) { - jalview.bin.Cache.log.error("Error when finding crossreferences", + Cache.log.error("Error when finding crossreferences", e); + } finally + { + AlignFrame.this.setProgressBar(MessageManager.formatMessage( + "status.finished_searching_for_sequences_from", + new Object[] { source }), sttime); } - AlignFrame.this.setProgressBar(MessageManager.formatMessage( - "status.finished_searching_for_sequences_from", - new Object[] { source }), sttime); } /** @@ -4945,23 +4930,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, frunner.start(); } - public boolean canShowTranslationProducts(SequenceI[] selection, - AlignmentI alignment) - { - // old way - try - { - return (jalview.analysis.Dna.canTranslate(selection, - viewport.getViewAsVisibleContigs(true))); - } catch (Exception e) - { - jalview.bin.Cache.log - .warn("canTranslate threw an exception - please report to help@jalview.org", - e); - return false; - } - } - /** * Construct and display a new frame containing the translation of this * frame's DNA sequences to their aligned protein (amino acid) equivalents.