import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.BitSet;
import java.util.Collections;
import java.util.Enumeration;
import java.util.GregorianCalendar;
tree.setLinkToAllViews(
tp.getTreeCanvas().isApplyToAllViews());
+ // columnWiseTree
+ if (tp.isColumnWise())
+ {
+ tree.setColumnWise(true);
+ String annId = tp.getAssocAnnotation().annotationId;
+ tree.setColumnReference(annId);
+ }
// jms.addTree(tree);
object.getTree().add(tree);
}
ov.getCanvas().getResidueColour().getRGB());
overview.setHiddenColour(ov.getCanvas().getHiddenColour().getRGB());
view.setOverview(overview);
- }
+ }
if (av.getGlobalColourScheme() instanceof jalview.schemes.UserColourScheme)
{
view.setBgColour(setUserColourScheme(av.getGlobalColourScheme(),
line.setColour(annotation.getThreshold().colour.getRGB());
an.setThresholdLine(line);
}
- if (annotation.graph==AlignmentAnnotation.CONTACT_MAP)
+ if (annotation.graph == AlignmentAnnotation.CONTACT_MAP)
{
- if (annotation.sequenceRef.getContactMaps()!=null)
+ if (annotation.sequenceRef.getContactMaps() != null)
{
- ContactMatrixI cm = annotation.sequenceRef.getContactMatrixFor(annotation);
- if (cm!=null)
+ ContactMatrixI cm = annotation.sequenceRef
+ .getContactMatrixFor(annotation);
+ if (cm != null)
{
MatrixType xmlmat = new MatrixType();
xmlmat.setType(cm.getType());
xmlmat.setRows(BigInteger.valueOf(cm.getWidth()));
xmlmat.setCols(BigInteger.valueOf(cm.getHeight()));
- xmlmat.setValue(ContactMatrix.contactToFloatString(cm));
+ // consider using an opaque to/from -> allow instance to control
+ // its representation ?
+ xmlmat.setElements(ContactMatrix.contactToFloatString(cm));
+ if (cm.hasGroups())
+ {
+ for (BitSet gp : cm.getGroups())
+ {
+ BigInteger val = new BigInteger(gp.toByteArray());
+ xmlmat.getGroups().add(val.toString());
+ }
+ }
+ if (cm.hasTree())
+ {
+ // provenance object for tree ?
+ xmlmat.getNewick().add(cm.getNewick());
+ xmlmat.setTreeMethod(cm.getTreeMethod());
+ }
+ if (cm.hasCutHeight())
+ {
+ xmlmat.setCutHeight(cm.getCutHeight());
+ }
+
+ // set/get properties
an.getContactmatrix().add(xmlmat);
}
}
{
for (String pr : annotation.getProperties())
{
- jalview.xml.binding.jalview.Annotation.Property prop = new jalview.xml.binding.jalview.Annotation.Property();
+ jalview.xml.binding.jalview.Property prop = new jalview.xml.binding.jalview.Property();
prop.setName(pr);
prop.setValue(annotation.getProperty(pr));
- // an.addProperty(prop);
an.getProperty().add(prop);
}
}
jaa.setCalcId(annotation.getCalcId());
if (annotation.getProperty().size() > 0)
{
- for (Annotation.Property prop : annotation.getProperty())
+ for (jalview.xml.binding.jalview.Property prop : annotation
+ .getProperty())
{
jaa.setProperty(prop.getName(), prop.getValue());
}
else
{
float[][] elements = ContactMatrix
- .fromFloatStringToContacts(xmlmat.getValue(),
+ .fromFloatStringToContacts(xmlmat.getElements(),
xmlmat.getCols().intValue(),
xmlmat.getRows().intValue());
PAEContactMatrix newpae = new PAEContactMatrix(
jaa.sequenceRef, elements);
+ List<BitSet> newgroups = new ArrayList<BitSet>();
+ if (xmlmat.getGroups().size() > 0)
+ {
+ for (String sgroup : xmlmat.getGroups())
+ {
+ try
+ {
+ BigInteger group = new BigInteger(sgroup);
+ newgroups.add(BitSet.valueOf(group.toByteArray()));
+ } catch (NumberFormatException nfe)
+ {
+ Console.error(
+ "Problem parsing groups for a contact matrix (\""
+ + sgroup + "\"",
+ nfe);
+ }
+ }
+ }
+ String nwk = xmlmat.getNewick().size() > 0
+ ? xmlmat.getNewick().get(0)
+ : null;
+ if (xmlmat.getNewick().size() > 1)
+ {
+ Console.log.info(
+ "Ignoring additional clusterings for contact matrix");
+ }
+
+ String treeMethod = xmlmat.getTreeMethod();
+ double thresh = xmlmat.getCutHeight() != null
+ ? xmlmat.getCutHeight()
+ : 0;
+ newpae.restoreGroups(newgroups, treeMethod, nwk, thresh);
jaa.sequenceRef.addContactListFor(jaa, newpae);
}
}
*/
protected void loadOverview(Viewport view, String version, AlignFrame af)
{
- if (!isVersionStringLaterThan("2.11.3",
- version) && view.getOverview()==null)
+ if (!isVersionStringLaterThan("2.11.3", version)
+ && view.getOverview() == null)
{
return;
}
TreePanel tp = (TreePanel) retrieveExistingObj(tree.getId());
if (tp == null)
{
- tp = af.showNewickTree(new NewickFile(tree.getNewick()),
- tree.getTitle(), safeInt(tree.getWidth()),
- safeInt(tree.getHeight()), safeInt(tree.getXpos()),
- safeInt(tree.getYpos()));
+ if (tree.isColumnWise())
+ {
+ AlignmentAnnotation aa = (AlignmentAnnotation) annotationIds
+ .get(tree.getColumnReference());
+ if (aa == null)
+ {
+ Console.warn(
+ "Null alignment annotation when restoring columnwise tree");
+ }
+ tp = af.showColumnWiseTree(new NewickFile(tree.getNewick()), aa,
+ tree.getTitle(), safeInt(tree.getWidth()),
+ safeInt(tree.getHeight()), safeInt(tree.getXpos()),
+ safeInt(tree.getYpos()));
+
+ }
+ else
+ {
+ tp = af.showNewickTree(new NewickFile(tree.getNewick()),
+ tree.getTitle(), safeInt(tree.getWidth()),
+ safeInt(tree.getHeight()), safeInt(tree.getXpos()),
+ safeInt(tree.getYpos()));
+ }
if (tree.getId() != null)
{
// perhaps bind the tree id to something ?
viewport.setIncrement(safeInt(view.getConsThreshold()));
viewport.setShowJVSuffix(safeBoolean(view.isShowFullId()));
viewport.setRightAlignIds(safeBoolean(view.isRightAlignIds()));
- viewport.setFont(new Font(view.getFontName(),
- safeInt(view.getFontStyle()), safeInt(view.getFontSize())),
- (view.getCharWidth()!=null) ? false : true);
- if (view.getCharWidth()!=null)
+ viewport.setFont(
+ new Font(view.getFontName(), safeInt(view.getFontStyle()),
+ safeInt(view.getFontSize())),
+ (view.getCharWidth() != null) ? false : true);
+ if (view.getCharWidth() != null)
{
viewport.setCharWidth(view.getCharWidth());
viewport.setCharHeight(view.getCharHeight());
+ annotationId);
return null;
}
- // belt-and-braces create a threshold line if the
+ // belt-and-braces create a threshold line if the
// colourscheme needs one but the matchedAnnotation doesn't have one
if (safeInt(viewAnnColour.getAboveThreshold()) != 0
&& matchedAnnotation.getThreshold() == null)