X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FContactMatrixI.java;h=ce4b0d7dfe45e52d2af83b552fb46bd423ff497a;hb=HEAD;hp=1d20987117ba409ebb79782c9453ca51acf03f19;hpb=beb2fee66dde629e3bbb7febb38d0116e1a64df2;p=jalview.git diff --git a/src/jalview/datamodel/ContactMatrixI.java b/src/jalview/datamodel/ContactMatrixI.java index 1d20987..ce4b0d7 100644 --- a/src/jalview/datamodel/ContactMatrixI.java +++ b/src/jalview/datamodel/ContactMatrixI.java @@ -1,3 +1,23 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.datamodel; import java.awt.Color; @@ -5,6 +25,9 @@ import java.util.Arrays; import java.util.BitSet; import java.util.List; +import jalview.util.ColorUtils; +import jalview.ws.datamodel.MappableContactMatrixI; + public interface ContactMatrixI { @@ -27,7 +50,9 @@ public interface ContactMatrixI String getType(); int getWidth(); + int getHeight(); + public GroupSetI getGroupSet(); /// proxy methods to simplify use of the interface @@ -122,4 +147,93 @@ public interface ContactMatrixI } void setGroupSet(GroupSet makeGroups); + + default void randomlyReColourGroups() + { + if (hasGroupSet()) + { + GroupSetI groups = getGroupSet(); + for (BitSet group : groups.getGroups()) + { + groups.setColorForGroup(group, ColorUtils.getARandomColor()); + } + } + } + + default void transferGroupColorsTo(AlignmentAnnotation aa) + { + if (hasGroupSet()) + { + GroupSetI groups = getGroupSet(); + // stash colors in linked annotation row. + // doesn't work yet. TESTS! + int sstart = aa.sequenceRef != null ? aa.sequenceRef.getStart() - 1 + : 0; + Annotation ae; + Color gpcol = null; + int[] seqpos = null; + for (BitSet gp : groups.getGroups()) + { + gpcol = groups.getColourForGroup(gp); + for (int p = gp.nextSetBit(0); p >= 0 + && p < Integer.MAX_VALUE; p = gp.nextSetBit(p + 1)) + { + if (this instanceof MappableContactMatrixI) + { + MappableContactMatrixI mcm = (MappableContactMatrixI) this; + seqpos = mcm.getMappedPositionsFor(aa.sequenceRef, p); + if (seqpos == null) + { + // no mapping for this column. + continue; + } + // TODO: handle ranges... + ae = aa.getAnnotationForPosition(seqpos[0]); + } + else + { + ae = aa.getAnnotationForPosition(p + sstart); + } + if (ae != null) + { + ae.colour = gpcol.brighter().darker(); + } + } + } + } + } + + /** + * look up the colour for a column in the associated contact matrix + * + * @return Color.white or assigned colour + */ + default Color getGroupColorForPosition(int column) + { + if (hasGroupSet()) + { + GroupSetI groups = getGroupSet(); + for (BitSet gp : groups.getGroups()) + { + if (gp.get(column)) + { + return groups.getColourForGroup(gp); + } + } + } + return Color.white; + } + + /** + * direct access to column and row position of matrix + * + * Implementations are allowed to throw RunTimeExceptions if _column/i are out + * of bounds + * + * @param column + * @param row + * @return + */ + double getElementAt(int column, int row); + }