From 4a560601f94b229cca59f64561bf87f146cc896b Mon Sep 17 00:00:00 2001 From: Jim Procter Date: Mon, 23 Jan 2017 14:37:56 +0000 Subject: [PATCH] JAL-2349 Abstract logic for colouring and computing over a range of contacts on a ContactListI from the data provider for the contact list. --- src/jalview/datamodel/ContactListI.java | 23 +---- src/jalview/datamodel/ContactListImpl.java | 92 ++++++++++++++++++++ src/jalview/datamodel/ContactListProviderI.java | 22 +++++ src/jalview/datamodel/ContactMatrix.java | 42 +-------- .../datamodel/SeqDistanceContactMatrix.java | 41 ++++----- 5 files changed, 140 insertions(+), 80 deletions(-) create mode 100644 src/jalview/datamodel/ContactListImpl.java create mode 100644 src/jalview/datamodel/ContactListProviderI.java diff --git a/src/jalview/datamodel/ContactListI.java b/src/jalview/datamodel/ContactListI.java index 84fcb7c..72dbf2e 100644 --- a/src/jalview/datamodel/ContactListI.java +++ b/src/jalview/datamodel/ContactListI.java @@ -1,31 +1,16 @@ package jalview.datamodel; -import java.awt.Color; -public interface ContactListI +public interface ContactListI extends ContactListProviderI { - int getColumnWidth(); - - int getContactHeight(); - - Color getColorForScore(int column); - /** - * return colour representing contacts from i through to j for this site + * return bounds for range * * @param from_column * @param to_column - * @return - */ - Color getColorForRange(int from_column, int to_column); - - /** - * get a value representing contact at column for this site - * - * @param column - * @return + * @return double[] { min, max, */ - double getContactAt(int column); + ContactRange getRangeFor(int from_column, int to_column); } diff --git a/src/jalview/datamodel/ContactListImpl.java b/src/jalview/datamodel/ContactListImpl.java new file mode 100644 index 0000000..6eb4cdb --- /dev/null +++ b/src/jalview/datamodel/ContactListImpl.java @@ -0,0 +1,92 @@ +package jalview.datamodel; + +/** + * helper class to compute min/max/mean for a range on a contact list + * + * @author jprocter + * + */ +public class ContactListImpl implements ContactListI +{ + ContactListProviderI clist; + + + public static ContactListI newContactList(ContactListProviderI list) + { + return new ContactListImpl(list); + } + + public ContactListImpl(ContactListProviderI list) + { + clist = list; + } + + @Override + public double getContactAt(int column) + { + return clist.getContactAt(column); + } + + @Override + public int getContactHeight() + { + return clist.getContactHeight(); + } + + @Override + public ContactRange getRangeFor(int from_column, int to_column) + { + if (clist instanceof ContactListI) + { + // clist may implement getRangeFor in a more efficient way, so use theirs + return ((ContactListI) clist).getRangeFor(from_column, to_column); + } + if (from_column < 0) + { + from_column = 0; + } + if (to_column > getContactHeight()) + { + to_column = getContactHeight(); + } + ContactRange cr = new ContactRange(); + cr.setFrom_column(from_column); + cr.setTo_column(to_column); + double tot = 0; + for (int i = from_column; i < to_column; i++) + { + double contact = getContactAt(i); + tot += contact; + if (i == from_column) + { + cr.setMin(contact); + cr.setMax(contact); + cr.setMinPos(i); + cr.setMaxPos(i); + } + else + { + if (cr.getMax() < contact) + { + cr.setMax(contact); + cr.setMaxPos(i); + } + if (cr.getMin() < contact) + { + cr.setMin(contact); + cr.setMinPos(i); + } + } + } + if (tot > 0) + { + cr.setMean(tot / (to_column - from_column)); + } + else + { + cr.setMean(tot); + } + return cr; + } + +} diff --git a/src/jalview/datamodel/ContactListProviderI.java b/src/jalview/datamodel/ContactListProviderI.java new file mode 100644 index 0000000..37c4e07 --- /dev/null +++ b/src/jalview/datamodel/ContactListProviderI.java @@ -0,0 +1,22 @@ +package jalview.datamodel; + +public interface ContactListProviderI +{ + + /** + * dimension of list where getContactAt(column= width) + if (column < 0 || column >= width) { return null; } - return new ContactListI() { + return new ContactListImpl(new ContactListProviderI() + { + int p = column; - @Override - public Color getColorForScore(int column) - { - return jalview.util.ColorUtils.getGraduatedColour(Math.abs(column-p), 0, Color.white, width, Color.magenta); - } - @Override - public Color getColorForRange(int from_column, int to_column) - { - return jalview.util.ColorUtils.getGraduatedColour( - Math.abs(to_column + from_column - 2 * p) / 2, 0, Color.white, width, - Color.magenta); - } - @Override - public int getColumnWidth() - { - return 1; - } + // @Override + // public Color getColorForScore(int column) + // { + // return jalview.util.ColorUtils.getGraduatedColour(Math.abs(column-p), + // 0, Color.white, width, Color.magenta); + // } + // @Override + // public Color getColorForRange(int from_column, int to_column) + // { + // return jalview.util.ColorUtils.getGraduatedColour( + // Math.abs(to_column + from_column - 2 * p) / 2, 0, Color.white, width, + // Color.magenta); + // } + @Override public int getContactHeight() { @@ -55,7 +52,7 @@ public class SeqDistanceContactMatrix implements ContactMatrixI { return Math.abs(column - p); } - }; + }); } } -- 1.7.10.2