From: jprocter Date: Thu, 23 Aug 2007 11:52:32 +0000 (+0000) Subject: proper vamsas style binding of alignment sequence objects to newick node labels.... X-Git-Tag: Release_2_4~305 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=38c8b5a114ce8f0c57aa73a022e6ce83b7cf97ff;p=jalview.git proper vamsas style binding of alignment sequence objects to newick node labels. modified binding of vamsas alignment to the SequenceSet id from the alignment viewport. --- diff --git a/src/jalview/io/VamsasAppDatastore.java b/src/jalview/io/VamsasAppDatastore.java index 379982a..aaaf589 100644 --- a/src/jalview/io/VamsasAppDatastore.java +++ b/src/jalview/io/VamsasAppDatastore.java @@ -331,13 +331,13 @@ public class VamsasAppDatastore // //////////////////////////////////////////// // Save the Alignments - Alignment alignment = (Alignment) getjv2vObj(av); // this is so we can get + Alignment alignment = (Alignment) getjv2vObj(av.getSequenceSetId()); // this is so we can get // the alignviewport // back if (alignment == null) { alignment = new Alignment(); - bindjvvobj(av, alignment); + bindjvvobj(av.getSequenceSetId(), alignment); if (alignment.getProvenance() == null) { alignment.setProvenance(new Provenance()); @@ -1107,7 +1107,8 @@ public class VamsasAppDatastore { uk.ac.vamsas.objects.core.Alignment alignment = dataset .getAlignment(al); - AlignViewport av = (AlignViewport) getvObj2jv(alignment); + AlignViewport av=findViewport(alignment); + jalview.datamodel.AlignmentI jal = null; if (av != null) { @@ -1335,7 +1336,7 @@ public class VamsasAppDatastore jalview.gui.Desktop.addInternalFrame(alignFrame, title , AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); - bindjvvobj(av, alignment); + bindjvvobj(av.getSequenceSetId(), alignment); } else { @@ -1360,9 +1361,19 @@ public class VamsasAppDatastore .ShowNewickTree(vstree.getNewickTree(), vstree .getTitle(), vstree.getInputData(), 600, 500, t * 20 + 50, t * 20 + 50); + } if (tp!=null) + { bindjvvobj(tp, alignment.getTree(t)); + try + { + vstree.UpdateSequenceTreeMap(tp); + } catch (RuntimeException e) + { + Cache.log.warn("update of labels failed.",e); + } + } else { Cache.log.warn("Cannot create tree for tree "+t+" in document ("+alignment.getTree(t).getVorbaId()); @@ -1390,6 +1401,44 @@ public class VamsasAppDatastore } } + public AlignViewport findViewport(Alignment alignment) + { + AlignViewport av=null; + AlignViewport[] avs = findViewportForSequenceSetId((String)getvObj2jv(alignment)); + if (avs!=null) + { + av = avs[0]; + } + return av; + } + + private AlignViewport[] findViewportForSequenceSetId(String sequenceSetId) + { + Vector viewp = new Vector(); + if (Desktop.desktop != null) + { + javax.swing.JInternalFrame[] frames = Desktop.instance.getAllFrames(); + + for (int t = 0; t < frames.length; t++) + { + if (frames[t] instanceof AlignFrame) + { + if (((AlignFrame) frames[t]).getViewport().getSequenceSetId().equals(sequenceSetId)) + { + viewp.addElement(((AlignFrame) frames[t]).getViewport()); + } + } + } + if (viewp.size()>0) + { + AlignViewport[] vp = new AlignViewport[viewp.size()]; + viewp.copyInto(vp); + return vp; + } + } + return null; + } + // bitfields - should be a template in j1.5 private static int HASSECSTR = 0; @@ -2132,7 +2181,7 @@ public class VamsasAppDatastore { Cache.log .warn("NO Vamsas Binding for local sequence! NOT CREATING MAPPING FOR " - + mfrom.getName() + + dmps[smp].getDisplayId(true) + " to " + mps[smp].getTo().getName()); } diff --git a/src/jalview/io/vamsas/DatastoreItem.java b/src/jalview/io/vamsas/DatastoreItem.java index c0464ff..1a57dc3 100644 --- a/src/jalview/io/vamsas/DatastoreItem.java +++ b/src/jalview/io/vamsas/DatastoreItem.java @@ -119,9 +119,10 @@ public class DatastoreItem initDatastoreItem(datastore); // TODO Auto-generated constructor stub } - + VamsasAppDatastore datastore = null; public void initDatastoreItem(VamsasAppDatastore ds) { + datastore = ds; initDatastoreItem(ds.getProvEntry(), ds.getClientDocument(), ds.getVamsasObjectBinding(), ds.getJvObjectBinding()); } public void initDatastoreItem(Entry provEntry, IClientDocument cdoc, Hashtable vobj2jv, IdentityHashMap jv2vobj) diff --git a/src/jalview/io/vamsas/Tree.java b/src/jalview/io/vamsas/Tree.java index 82f4f07..de8230c 100644 --- a/src/jalview/io/vamsas/Tree.java +++ b/src/jalview/io/vamsas/Tree.java @@ -6,16 +6,21 @@ import java.util.Hashtable; import java.util.Vector; import jalview.analysis.NJTree; +import jalview.analysis.SequenceIdMatcher; import jalview.bin.Cache; import jalview.datamodel.AlignmentI; import jalview.datamodel.AlignmentView; +import jalview.datamodel.BinaryNode; import jalview.datamodel.SeqCigar; +import jalview.datamodel.Sequence; import jalview.datamodel.SequenceI; +import jalview.datamodel.SequenceNode; import jalview.gui.AlignViewport; import jalview.gui.TreePanel; import jalview.io.NewickFile; import jalview.io.VamsasAppDatastore; import uk.ac.vamsas.client.Vobject; +import uk.ac.vamsas.objects.core.AlignmentSequence; import uk.ac.vamsas.objects.core.Entry; import uk.ac.vamsas.objects.core.Input; import uk.ac.vamsas.objects.core.Newick; @@ -140,11 +145,11 @@ public class Tree extends DatastoreItem prov.getEntry(0).setAction("created " + tp.getTitle()); prov.getEntry(0).addInput(vInput); // jalview's special input parameter for distance matrix calculations - vInput.setName("jalview:seqdist"); + vInput.setName("jalview:seqdist"); // TODO: settle on appropriate name. prov.getEntry(0).addParam(new Param()); prov.getEntry(0).getParam(0).setName("treeType"); prov.getEntry(0).getParam(0).setType("utf8"); - prov.getEntry(0).getParam(0).setContent("NJ"); + prov.getEntry(0).getParam(0).setContent("NJ"); // TODO: type of tree is a general parameter int ranges[] = tp.getTree().seqData.getVisibleContigs(); // VisibleContigs are with respect to alignment coordinates. Still need // offsets @@ -194,6 +199,59 @@ public class Tree extends DatastoreItem return alsq; } /** + * + * Update jalview newick representation with TreeNode map + + * @param tp the treepanel that this tree is bound to. + */ + public void UpdateSequenceTreeMap(TreePanel tp) + { + if (tp==null || tree!=null) + return; + Vector leaves = new Vector(); + tp.getTree().findLeaves(tp.getTree().getTopNode(), leaves); + Treenode[] tn = tree.getTreenode(); // todo: select nodes for this particular tree + int sz = tn.length; + int i = 0; + + while (i < sz) + { + Treenode node = tn[i++]; + BinaryNode mappednode = findNodeSpec(node.getNodespec(),leaves); + if (mappednode!=null && mappednode instanceof SequenceNode) { + SequenceNode leaf = (SequenceNode) leaves.elementAt(i++); + // check if we can make the specified association + Object jvseq = null; + int vrf=0,refv=0; + while (jvseq==null && vrf