JAL-1479 minor refactor and housekeeping
authortcofoegbu <tcnofoegbu@dundee.ac.uk>
Tue, 28 Jun 2016 15:21:17 +0000 (16:21 +0100)
committertcofoegbu <tcnofoegbu@dundee.ac.uk>
Tue, 28 Jun 2016 15:21:17 +0000 (16:21 +0100)
src/jalview/ws/sifts/SiftsClient.java
test/jalview/ws/sifts/SiftsClientTest.java

index 13e52cd..a88bacb 100644 (file)
@@ -80,8 +80,6 @@ public class SiftsClient implements SiftsClientI
 
   private String structId;
 
-  // private String segStartEnd;
-
   private CoordinateSys seqCoordSys = CoordinateSys.UNIPROT;
 
   private static final int BUFFER_SIZE = 4096;
@@ -102,7 +100,7 @@ public class SiftsClient implements SiftsClientI
 
   private HashSet<String> curDBRefAccessionIdsString;
 
-  public enum CoordinateSys
+  private enum CoordinateSys
   {
     UNIPROT("UniProt"), PDB("PDBresnum"), PDBe("PDBe");
     private String name;
@@ -118,7 +116,7 @@ public class SiftsClient implements SiftsClientI
     }
   };
 
-  public enum ResidueDetailType
+  private enum ResidueDetailType
   {
     NAME_SEC_STRUCTURE("nameSecondaryStructure"), CODE_SEC_STRUCTURE(
             "codeSecondaryStructure"), ANNOTATION("Annotation");
@@ -465,10 +463,91 @@ public class SiftsClient implements SiftsClientI
 
     TreeMap<Integer, String> resNumMap = new TreeMap<Integer, String>();
     List<Segment> segments = entity.getSegment();
+    SegmentHelperPojo shp = new SegmentHelperPojo(seq, mapping, resNumMap,
+            omitNonObserved, nonObservedShiftIndex);
+    processSegments(segments, shp);
+    try
+    {
+      populateAtomPositions(entityId, mapping);
+    } catch (Exception e)
+    {
+      e.printStackTrace();
+    }
+    if (seqCoordSys == CoordinateSys.UNIPROT)
+    {
+      padWithGaps(resNumMap, omitNonObserved);
+    }
+    int seqStart = UNASSIGNED;
+    int seqEnd = UNASSIGNED;
+    int pdbStart = UNASSIGNED;
+    int pdbEnd = UNASSIGNED;
+
+    Integer[] keys = mapping.keySet().toArray(new Integer[0]);
+    Arrays.sort(keys);
+    if (keys.length < 1)
+    {
+      throw new SiftsException(">>> Empty SIFTS mapping generated!!");
+    }
+    seqStart = keys[0];
+    seqEnd = keys[keys.length - 1];
+
+    String matchedSeq = originalSeq;
+    if (seqStart != UNASSIGNED)
+    {
+      pdbStart = mapping.get(seqStart)[PDB_RES_POS];
+      pdbEnd = mapping.get(seqEnd)[PDB_RES_POS];
+      int orignalSeqStart = seq.getStart();
+      if (orignalSeqStart >= 1)
+      {
+        int subSeqStart = (seqStart >= orignalSeqStart) ? seqStart
+                - orignalSeqStart : 0;
+        int subSeqEnd = seqEnd - (orignalSeqStart - 1);
+        subSeqEnd = originalSeq.length() < subSeqEnd ? originalSeq.length()
+                : subSeqEnd;
+        matchedSeq = originalSeq.substring(subSeqStart, subSeqEnd);
+      }
+      else
+      {
+        matchedSeq = originalSeq.substring(1, originalSeq.length());
+      }
+    }
+
+    StringBuilder targetStrucSeqs = new StringBuilder();
+    for (String res : resNumMap.values())
+    {
+      targetStrucSeqs.append(res);
+    }
+
+    if (os != null)
+    {
+      MappingOutputPojo mop = new MappingOutputPojo();
+      mop.setSeqStart(pdbStart);
+      mop.setSeqEnd(pdbEnd);
+      mop.setSeqName(seq.getName());
+      mop.setSeqResidue(matchedSeq);
+
+      mop.setStrStart(seqStart);
+      mop.setStrEnd(seqEnd);
+      mop.setStrName(structId);
+      mop.setStrResidue(targetStrucSeqs.toString());
+
+      mop.setType("pep");
+      os.print(getMappingOutput(mop).toString());
+      os.println();
+    }
+    return mapping;
+  }
+
+  void processSegments(List<Segment> segments, SegmentHelperPojo shp)
+  {
+    SequenceI seq = shp.getSeq();
+    HashMap<Integer, int[]> mapping = shp.getMapping();
+    TreeMap<Integer, String> resNumMap = shp.getResNumMap();
+    List<Integer> omitNonObserved = shp.getOmitNonObserved();
+    int nonObservedShiftIndex = shp.getNonObservedShiftIndex();
     for (Segment segment : segments)
     {
-      // segStartEnd = segment.getStart() + " - " + segment.getEnd();
-      // System.out.println("Mapping segments : " + segment.getSegId() + "\\"
+      // System.out.println("Mapping segments : " + segment.getSegId() + "\\"s
       // + segStartEnd);
       List<Residue> residues = segment.getListResidue().getResidue();
       for (Residue residue : residues)
@@ -542,78 +621,7 @@ public class SiftsClient implements SiftsClientI
         }
       }
     }
-    try
-    {
-      populateAtomPositions(entityId, mapping);
-    } catch (Exception e)
-    {
-      e.printStackTrace();
-    }
-    if (seqCoordSys == CoordinateSys.UNIPROT)
-    {
-      padWithGaps(resNumMap, omitNonObserved);
-    }
-    int seqStart = UNASSIGNED;
-    int seqEnd = UNASSIGNED;
-    int pdbStart = UNASSIGNED;
-    int pdbEnd = UNASSIGNED;
-
-    Integer[] keys = mapping.keySet().toArray(new Integer[0]);
-    Arrays.sort(keys);
-    if (keys.length < 1)
-    {
-      throw new SiftsException(">>> Empty SIFTS mapping generated!!");
-    }
-    seqStart = keys[0];
-    seqEnd = keys[keys.length - 1];
-
-    String matchedSeq = originalSeq;
-    if (seqStart != UNASSIGNED)
-    {
-      pdbStart = mapping.get(seqStart)[PDB_RES_POS];
-      pdbEnd = mapping.get(seqEnd)[PDB_RES_POS];
-      int orignalSeqStart = seq.getStart();
-      if (orignalSeqStart >= 1)
-      {
-        int subSeqStart = (seqStart >= orignalSeqStart) ? seqStart
-                - orignalSeqStart : 0;
-        int subSeqEnd = seqEnd - (orignalSeqStart - 1);
-        subSeqEnd = originalSeq.length() < subSeqEnd ? originalSeq.length()
-                : subSeqEnd;
-        matchedSeq = originalSeq.substring(subSeqStart, subSeqEnd);
-      }
-      else
-      {
-        matchedSeq = originalSeq.substring(1, originalSeq.length());
-      }
-    }
-
-    StringBuilder targetStrucSeqs = new StringBuilder();
-    for (String res : resNumMap.values())
-    {
-      targetStrucSeqs.append(res);
-    }
-
-    if (os != null)
-    {
-      MappingOutputPojo mop = new MappingOutputPojo();
-      mop.setSeqStart(pdbStart);
-      mop.setSeqEnd(pdbEnd);
-      mop.setSeqName(seq.getName());
-      mop.setSeqResidue(matchedSeq);
-
-      mop.setStrStart(seqStart);
-      mop.setStrEnd(seqEnd);
-      mop.setStrName(structId);
-      mop.setStrResidue(targetStrucSeqs.toString());
-
-      mop.setType("pep");
-      os.print(getMappingOutput(mop).toString());
-      os.println();
-    }
-    return mapping;
   }
-
   /**
    * 
    * @param chainId
@@ -751,7 +759,7 @@ public class SiftsClient implements SiftsClientI
       return;
     }
     Integer[] keys = resNumMap.keySet().toArray(new Integer[0]);
-    Arrays.sort(keys);
+    // Arrays.sort(keys);
     int firstIndex = keys[0];
     int lastIndex = keys[keys.length - 1];
     // System.out.println("Min value " + firstIndex);
@@ -770,28 +778,8 @@ public class SiftsClient implements SiftsClientI
   @Override
   public Entity getEntityById(String id) throws SiftsException
   {
-    // Sometimes SIFTS mappings are wrongly swapped between different chains of
-    // a PDB entry. This results to wrong mappings being generated. The boolean
-    // flag 'isGetEntityIdDirectly, determines whether an entity to process is
-    // determined by a greedy heuristic search or by just matching the Chain Id
-    // directly against the entity Id tag. Setting the default value to 'false'
-    // utilise the heuristic search which always produces correct mappings but
-    // less optimised processing, where as changing the value to 'true'
-    // optimises performance but might result to incorrect mapping in some cases
-    // where SIFTS mappings are wrongly swapped between different chains.
-    // boolean isGetEntityIdDirectly = false;
-    // if (isGetEntityIdDirectly)
-    // {
-    // List<Entity> entities = siftsEntry.getEntity();
-    // for (Entity entity : entities)
-    // {
-    // if (!entity.getEntityId().equalsIgnoreCase(id))
-    // {
-    // continue;
-    // }
-    // return entity;
-    // }
-    // }
+    // Determines an entity to process by performing a heuristic matching of all
+    // Entities with the given chainId and choosing the best matching Entity
     Entity entity = getEntityByMostOptimalMatchedId(id);
     if (entity != null)
     {
@@ -861,7 +849,7 @@ public class SiftsClient implements SiftsClientI
     return null;
   }
 
-  public class SiftsEntitySortPojo implements
+  private class SiftsEntitySortPojo implements
           Comparable<SiftsEntitySortPojo>
   {
     public String entityId;
@@ -879,6 +867,80 @@ public class SiftsClient implements SiftsClientI
     }
   }
 
+  private class SegmentHelperPojo
+  {
+    private SequenceI seq;
+
+    private HashMap<Integer, int[]> mapping;
+
+    private TreeMap<Integer, String> resNumMap;
+
+    private List<Integer> omitNonObserved;
+
+    private int nonObservedShiftIndex;
+
+    public SegmentHelperPojo(SequenceI seq,
+            HashMap<Integer, int[]> mapping,
+            TreeMap<Integer, String> resNumMap,
+            List<Integer> omitNonObserved, int nonObservedShiftIndex)
+    {
+      setSeq(seq);
+      setMapping(mapping);
+      setResNumMap(resNumMap);
+      setOmitNonObserved(omitNonObserved);
+      setNonObservedShiftIndex(nonObservedShiftIndex);
+    }
+
+    public SequenceI getSeq()
+    {
+      return seq;
+    }
+
+    public void setSeq(SequenceI seq)
+    {
+      this.seq = seq;
+    }
+
+    public HashMap<Integer, int[]> getMapping()
+    {
+      return mapping;
+    }
+
+    public void setMapping(HashMap<Integer, int[]> mapping)
+    {
+      this.mapping = mapping;
+    }
+
+    public TreeMap<Integer, String> getResNumMap()
+    {
+      return resNumMap;
+    }
+
+    public void setResNumMap(TreeMap<Integer, String> resNumMap)
+    {
+      this.resNumMap = resNumMap;
+    }
+
+    public List<Integer> getOmitNonObserved()
+    {
+      return omitNonObserved;
+    }
+
+    public void setOmitNonObserved(List<Integer> omitNonObserved)
+    {
+      this.omitNonObserved = omitNonObserved;
+    }
+
+    public int getNonObservedShiftIndex()
+    {
+      return nonObservedShiftIndex;
+    }
+
+    public void setNonObservedShiftIndex(int nonObservedShiftIndex)
+    {
+      this.nonObservedShiftIndex = nonObservedShiftIndex;
+    }
+  }
 
   @Override
   public StringBuffer getMappingOutput(MappingOutputPojo mp)
index 6f692dc..2a8e584 100644 (file)
@@ -305,7 +305,6 @@ public class SiftsClientTest
           throws IllegalArgumentException, SiftsException
   {
       siftsClient.populateAtomPositions(null, null);
-
   }
 
   @Test(