JAL-4059 Tidy getting the namespace, and save the namespace in the Jalview instance...
[jalview.git] / src / jalview / ws / datamodel / alphafold / MappableContactMatrix.java
index d545741..c299a4d 100644 (file)
@@ -7,6 +7,7 @@ import java.util.BitSet;
 import jalview.datamodel.ContactListI;
 import jalview.datamodel.ContactListImpl;
 import jalview.datamodel.ContactListProviderI;
+import jalview.datamodel.ContactMatrixI;
 import jalview.datamodel.GroupSet;
 import jalview.datamodel.GroupSetI;
 import jalview.datamodel.Mapping;
@@ -17,42 +18,77 @@ import jalview.ws.datamodel.MappableContactMatrixI;
 public abstract class MappableContactMatrix<T extends MappableContactMatrix<T>>
         implements MappableContactMatrixI
 {
-  SequenceI refSeq = null;
-
-  MapList toSeq = null;
-
   /**
-   * the length that refSeq is expected to be (excluding gaps, of course)
+   * the matrix that is being mapped to
    */
-  int length;
+  protected ContactMatrixI mappedMatrix = null;
+
+  public ContactListI getContactList(int column)
+  {
+    return mappedMatrix.getContactList(column);
+  }
+
+  public float getMin()
+  {
+    return mappedMatrix.getMin();
+  }
+
+  public float getMax()
+  {
+    return mappedMatrix.getMax();
+  }
+
+  public int getWidth()
+  {
+    return mappedMatrix.getWidth();
+  }
+
+  public int getHeight()
+  {
+    return mappedMatrix.getHeight();
+  }
 
   @Override
-  public boolean hasReferenceSeq()
+  public ContactMatrixI getMappedMatrix()
   {
-    return (refSeq != null);
+    return mappedMatrix;
   }
 
   @Override
-  public SequenceI getReferenceSeq()
+  public GroupSetI getGroupSet()
   {
-    return refSeq;
+    return mappedMatrix.getGroupSet();
+  };
+
+  @Override
+  public void setGroupSet(GroupSet makeGroups)
+  {
+    mappedMatrix.setGroupSet(makeGroups);
   }
 
   /**
-   * container for groups - defined on matrix columns
+   * the sequence and how it is mapped to the matrix
    */
-  GroupSet grps = new GroupSet();
+
+  SequenceI refSeq = null;
+
+  MapList toSeq = null;
+
+  /**
+   * the length that refSeq is expected to be (excluding gaps, of course)
+   */
+  int length;
 
   @Override
-  public GroupSetI getGroupSet()
+  public boolean hasReferenceSeq()
   {
-    return grps;
-  };
+    return (refSeq != null);
+  }
 
   @Override
-  public void setGroupSet(GroupSet makeGroups)
+  public SequenceI getReferenceSeq()
   {
-    grps = makeGroups;
+    return refSeq;
   }
 
   @Override
@@ -218,9 +254,9 @@ public abstract class MappableContactMatrix<T extends MappableContactMatrix<T>>
               + "' is not mappable for the given localFrame sequence. ("
               + localFrame.getName() + ")");
     }
-    
+
     // now look up from-to matrix columns in toSeq frame
-    
+
     if (toSeq == null)
     {
       // no mapping - so we assume 1:1
@@ -230,33 +266,33 @@ public abstract class MappableContactMatrix<T extends MappableContactMatrix<T>>
     // first locate on reference sequence
 
     int[] mappedPositions = toSeq.locateInFrom(from, to);
-    if (mappedPositions==null)
+    if (mappedPositions == null)
     {
       return null;
     }
-    
+
     // and now map to localFrame
     // from-to columns on the associated sequence should be
     // i. restricted to positions in localFrame
-    // ii. 
-
-//    int s = -1, e = -1;
-//    for (int p = 0; p < mappedPositions.length; p++)
-//    {
-//      if (s == -1 && mappedPositions[p] >= localFrame.getStart())
-//      {
-//        s = p; // remember first position within local frame
-//      }
-//      if (e == -1 || mappedPositions[p] <= localFrame.getEnd())
-//      {
-//        // update end pointer
-//        e = p;
-//        // compute local map
-//        mappedPositions[p] = localFrame.findIndex(mappedPositions[p]);
-//      }
-//    }
-//    int[] _trimmed = new int[e - s + 1];
-//    return _trimmed;
+    // ii.
+
+    // int s = -1, e = -1;
+    // for (int p = 0; p < mappedPositions.length; p++)
+    // {
+    // if (s == -1 && mappedPositions[p] >= localFrame.getStart())
+    // {
+    // s = p; // remember first position within local frame
+    // }
+    // if (e == -1 || mappedPositions[p] <= localFrame.getEnd())
+    // {
+    // // update end pointer
+    // e = p;
+    // // compute local map
+    // mappedPositions[p] = localFrame.findIndex(mappedPositions[p]);
+    // }
+    // }
+    // int[] _trimmed = new int[e - s + 1];
+    // return _trimmed;
     return mappedPositions;
   }
 
@@ -439,14 +475,38 @@ public abstract class MappableContactMatrix<T extends MappableContactMatrix<T>>
   }
 
   /**
-   * get a specific element of the contact matrix in its data-local coordinates
-   * rather than the mapped frame. Implementations are allowed to throw
-   * RunTimeExceptions if _column/i are out of bounds
+   * get a specific element of the underlying contact matrix in its data-local
+   * coordinates rather than the mapped frame. Implementations are allowed to
+   * throw RunTimeExceptions if _column/i are out of bounds
    * 
    * @param _column
    * @param i
    * @return
    */
-  protected abstract double getElementAt(int _column, int i);
+  public double getElementAt(int _column, int i)
+  {
+    return mappedMatrix.getElementAt(_column, i);
+  }
 
+  @Override
+  public int hashCode()
+  {
+    return 7 * (refSeq != null ? refSeq.hashCode() : 0)
+            + 11 * (toSeq != null ? toSeq.hashCode() : 0)
+            + 13 * (mappedMatrix != null ? mappedMatrix.hashCode() : 0)
+            + length * 3;
+  }
+
+  @Override
+  public boolean equals(Object obj)
+  {
+    if (obj == null || !(obj.getClass().equals(getClass())))
+    {
+      return false;
+    }
+    T them = (T) obj;
+    return mappedMatrix == them.mappedMatrix && length == them.length
+            && refSeq == them.refSeq && toSeq.equals(them.toSeq);
+
+  }
 }