develop merge
authortcofoegbu <tcnofoegbu@dundee.ac.uk>
Tue, 23 Feb 2016 10:06:19 +0000 (10:06 +0000)
committertcofoegbu <tcnofoegbu@dundee.ac.uk>
Tue, 23 Feb 2016 10:06:19 +0000 (10:06 +0000)
src/MCview/PDBChain.java
src/jalview/gui/StructureChooser.java
src/jalview/structure/StructureSelectionManager.java
src/jalview/viewmodel/AlignmentViewport.java
src/jalview/ws/dbsources/PDBRestClient.java
src/jalview/ws/sifts/SiftsClient.java
src/jalview/ws/uimodel/PDBRestRequest.java

index a43626f..e4e619c 100755 (executable)
@@ -295,11 +295,15 @@ public class PDBChain
     Vector<Annotation> resAnnotation = new Vector<Annotation>();
     int i, iSize = atoms.size() - 1;
     int resNumber = -1;
+    char insCode = ' ';
     for (i = 0; i <= iSize; i++)
     {
       Atom tmp = atoms.elementAt(i);
       resNumber = tmp.resNumber;
+      insCode = tmp.insCode;
+
       int res = resNumber;
+      char ins = insCode;
 
       if (i == 0)
       {
@@ -309,7 +313,7 @@ public class PDBChain
       Vector<Atom> resAtoms = new Vector<Atom>();
       // Add atoms to a vector while the residue number
       // remains the same as the first atom's resNumber (res)
-      while ((resNumber == res) && (i < atoms.size()))
+      while ((resNumber == res) && (ins == insCode) && (i < atoms.size()))
       {
         resAtoms.add(atoms.elementAt(i));
         i++;
@@ -317,6 +321,7 @@ public class PDBChain
         if (i < atoms.size())
         {
           resNumber = atoms.elementAt(i).resNumber;
+          insCode = atoms.elementAt(i).insCode;
         }
         else
         {
@@ -327,13 +332,28 @@ public class PDBChain
       // We need this to keep in step with the outer for i = loop
       i--;
 
+      // Add inserted residues as features to the base residue
+      Atom currAtom = resAtoms.get(0);
+      if (currAtom.insCode != ' '
+              && residues.lastElement().atoms.get(0).resNumber == currAtom.resNumber)
+      {
+        SequenceFeature sf = new SequenceFeature("INSERTION",
+                currAtom.resName + ":" + currAtom.resNumIns + " " + pdbid
+                        + id, "", offset + count - 1, offset + count - 1,
+                "PDB_INS");
+        resFeatures.addElement(sf);
+        residues.lastElement().atoms.addAll(resAtoms);
+      }
+      else
+      {
+
       // Make a new Residue object with the new atoms vector
       residues.addElement(new Residue(resAtoms, resNumber - 1, count));
 
       Residue tmpres = residues.lastElement();
       Atom tmpat = tmpres.atoms.get(0);
       // Make A new SequenceFeature for the current residue numbering
-      SequenceFeature sf = new SequenceFeature("RESNUM", tmpat.resName
+        SequenceFeature sf = new SequenceFeature("RES NUM", tmpat.resName
               + ":" + tmpat.resNumIns + " " + pdbid + id, "", offset
               + count, offset + count, pdbid);
       // MCview.PDBChain.PDBFILEFEATURE);
@@ -371,7 +391,8 @@ public class PDBChain
         }
         seq.append(ResidueProperties.aa[((Integer) symbol).intValue()]);
       }
-      count++;
+        count++;
+      }
     }
 
     if (id.length() < 1)
index cf58322..5d381b9 100644 (file)
@@ -382,17 +382,46 @@ public class StructureChooser extends GStructureChooser implements
                 .getStructureSummaryFields();
         Collection<PDBResponseSummary> filteredResponse = new HashSet<PDBResponseSummary>();
         HashSet<String> errors = new HashSet<String>();
+        // try
+        // {
+        // PDBDocField fiterField = PDBRestClient
+        // .getPDBDocFieldByCode(fieldToFilterBy);
+        // if (!wantedFields.contains(fiterField))
+        // {
+        // wantedFields.add(fiterField);
+        // }
+        // } catch (Exception e)
+        // {
+        // e.printStackTrace();
+        // }
+
         for (SequenceI seq : selectedSequences)
         {
           PDBRestRequest pdbRequest = new PDBRestRequest();
-          pdbRequest.setAllowEmptySeq(false);
-          pdbRequest.setResponseSize(1);
-          pdbRequest.setFieldToSearchBy("(");
-          pdbRequest.setFieldToSortBy(fieldToFilterBy,
-                  !chk_invertFilter.isSelected());
-          pdbRequest.setSearchTerm(buildQuery(seq) + ")");
-          pdbRequest.setWantedFields(wantedFields);
-          pdbRequest.setAssociatedSequence(seq);
+          if (fieldToFilterBy.equalsIgnoreCase("uniprot_coverage"))
+          {
+            System.out.println(">>>>>> Filtering with uniprot coverate");
+            pdbRequest.setAllowEmptySeq(false);
+            pdbRequest.setResponseSize(1);
+            pdbRequest.setFieldToSearchBy("(");
+            pdbRequest.setSearchTerm(buildQuery(seq) + ")");
+            pdbRequest.setWantedFields(wantedFields);
+            pdbRequest.setAssociatedSequence(seq);
+            pdbRequest.setFacet(true);
+            pdbRequest.setFacetPivot(fieldToFilterBy + ",entry_entity");
+            pdbRequest.setFacetPivotMinCount(1);
+          }
+          else
+          {
+            pdbRequest.setAllowEmptySeq(false);
+            pdbRequest.setResponseSize(1);
+            pdbRequest.setFieldToSearchBy("(");
+            pdbRequest.setFieldToSortBy(fieldToFilterBy,
+                    !chk_invertFilter.isSelected());
+            pdbRequest.setSearchTerm(buildQuery(seq) + ")");
+            pdbRequest.setWantedFields(wantedFields);
+            pdbRequest.setAssociatedSequence(seq);
+          }
           pdbRestCleint = new PDBRestClient();
           PDBRestResponse resultList;
           try
@@ -491,15 +520,15 @@ public class StructureChooser extends GStructureChooser implements
     {
       cmb_filterOption.addItem(new FilterOption("Best Quality",
               PDBDocField.OVERALL_QUALITY.getCode(), VIEWS_FILTER));
-      cmb_filterOption.addItem(new FilterOption("Best UniProt Coverage",
+      cmb_filterOption.addItem(new FilterOption("Most UniProt Coverage",
               PDBDocField.UNIPROT_COVERAGE.getCode(), VIEWS_FILTER));
-      cmb_filterOption.addItem(new FilterOption("Highest Resolution",
+      cmb_filterOption.addItem(new FilterOption("Best Resolution",
               PDBDocField.RESOLUTION.getCode(), VIEWS_FILTER));
-      cmb_filterOption.addItem(new FilterOption("Highest Protein Chain",
+      cmb_filterOption.addItem(new FilterOption("Most Protein Chain",
               PDBDocField.PROTEIN_CHAIN_COUNT.getCode(), VIEWS_FILTER));
-      cmb_filterOption.addItem(new FilterOption("Highest Bound Molecules",
+      cmb_filterOption.addItem(new FilterOption("Most Bound Molecules",
               PDBDocField.BOUND_MOLECULE_COUNT.getCode(), VIEWS_FILTER));
-      cmb_filterOption.addItem(new FilterOption("Highest Polymer Residues",
+      cmb_filterOption.addItem(new FilterOption("Most Polymer Residues",
               PDBDocField.POLYMER_RESIDUE_COUNT.getCode(), VIEWS_FILTER));
     }
     cmb_filterOption.addItem(new FilterOption("Enter PDB Id", "-",
index 6bc8f84..9d06aef 100644 (file)
@@ -607,17 +607,18 @@ public class StructureSelectionManager
     HashMap<Integer, int[]> mapping = new HashMap<Integer, int[]>();
     int resNum = -10000;
     int index = 0;
+    char insCode = ' ';
 
     do
     {
       Atom tmp = maxChain.atoms.elementAt(index);
-      if (resNum != tmp.resNumber && tmp.alignmentMapping != -1)
+      if ((resNum != tmp.resNumber || insCode != tmp.insCode)
+              && tmp.alignmentMapping != -1)
       {
         resNum = tmp.resNumber;
+        insCode = tmp.insCode;
         if (tmp.alignmentMapping >= -1)
         {
-          // TODO (JAL-1836) address root cause: negative residue no in PDB
-          // file
           mapping.put(tmp.alignmentMapping + 1, new int[] { tmp.resNumber,
               tmp.atomIndex });
         }
index c4ae76d..7bbe677 100644 (file)
@@ -1557,9 +1557,20 @@ public abstract class AlignmentViewport implements AlignViewportI,
     }
     else
     {
-      iSize = alignment.getHeight();
-      seqs = alignment.getSequencesArray();
-      end = alignment.getWidth();
+      if (alignment.getHiddenSequences() != null)
+      {
+        iSize = alignment.getHiddenSequences().getFullAlignment()
+                .getHeight();
+        seqs = alignment.getHiddenSequences().getFullAlignment()
+                .getSequencesArray();
+        end = alignment.getHiddenSequences().getFullAlignment().getWidth();
+      }
+      else
+      {
+        iSize = alignment.getHeight();
+        seqs = alignment.getSequencesArray();
+        end = alignment.getWidth();
+      }
     }
 
     selection = new String[iSize];
index c6251a6..8e08c84 100644 (file)
@@ -79,19 +79,39 @@ public class PDBRestClient
               .getFieldToSortBy().trim().isEmpty()) ? "" : (pdbRestRequest
               .getFieldToSortBy() + (pdbRestRequest.isAscending() ? " asc"
               : " desc"));
+      String facetPivot = (pdbRestRequest.getFacetPivot() == null || pdbRestRequest
+              .getFacetPivot().isEmpty()) ? "" : pdbRestRequest
+              .getFacetPivot();
+      String facetPivotMinCount = String.valueOf(pdbRestRequest
+              .getFacetPivotMinCount());
+      
       // Build request parameters for the REST Request
-      WebResource webResource = client.resource(PDB_SEARCH_ENDPOINT)
-              .queryParam("wt", "json").queryParam("fl", wantedFields)
-              .queryParam("rows", String.valueOf(responseSize))
-              .queryParam("q", pdbRestRequest.getQuery())
-              .queryParam("sort", sortParam);
-
+      WebResource webResource = null;
+      if (pdbRestRequest.isFacet())
+      {
+        webResource = client.resource(PDB_SEARCH_ENDPOINT)
+                .queryParam("wt", "json").queryParam("fl", wantedFields)
+                .queryParam("rows", String.valueOf(responseSize))
+                .queryParam("q", pdbRestRequest.getQuery())
+                .queryParam("sort", sortParam).queryParam("facet", "true")
+                .queryParam("facet.pivot", facetPivot)
+                .queryParam("facet.pivot.mincount", facetPivotMinCount);
+      }
+      else
+      {
+        webResource = client.resource(PDB_SEARCH_ENDPOINT)
+                .queryParam("wt", "json").queryParam("fl", wantedFields)
+                .queryParam("rows", String.valueOf(responseSize))
+                .queryParam("q", pdbRestRequest.getQuery())
+                .queryParam("sort", sortParam);
+      }
       // Execute the REST request
       ClientResponse clientResponse = webResource.accept(
               MediaType.APPLICATION_JSON).get(ClientResponse.class);
 
       // Get the JSON string from the response object
       String responseString = clientResponse.getEntity(String.class);
+      System.out.println("query >>>>>>> " + pdbRestRequest.toString());
 
       // Check the response status and report exception if one occurs
       if (clientResponse.getStatus() != 200)
@@ -313,6 +333,19 @@ public class PDBRestClient
     return pdbFieldIndexCounter;
   }
 
+  public static PDBDocField getPDBDocFieldByCode(String fieldCode)
+          throws Exception
+  {
+    for (PDBDocField curPDBDocField : PDBDocField.values())
+    {
+      if (curPDBDocField.getCode().equalsIgnoreCase(fieldCode))
+      {
+        return curPDBDocField;
+      }
+    }
+    throw new Exception("PDB doc Field not found!");
+  }
+
   /**
    * This enum represents the fields available in the PDB JSON response
    *
@@ -414,6 +447,7 @@ public class PDBRestClient
       return code;
     }
 
+    @Override
     public String toString()
     {
       return name;
index 6e7b988..f25c1cf 100644 (file)
@@ -543,6 +543,7 @@ public class SiftsClient implements SiftsClientI
             resNum = (pdbRefDb == null) ? Integer.valueOf(residue
                     .getDbResNum()) : Integer.valueOf(pdbRefDb
                     .getDbResNum().split("[a-zA-Z]")[0]);
+            continue;
           }
 
           if (isResidueObserved(residue)
index 24f38d1..7bfc226 100644 (file)
@@ -48,6 +48,12 @@ public class PDBRestRequest
   private boolean allowUnpublishedEntries = Cache.getDefault(
           "ALLOW_UNPUBLISHED_PDB_QUERYING", false);
 
+  private boolean facet;
+
+  private String facetPivot;
+
+  private int facetPivotMinCount;
+
   private int responseSize;
 
   private boolean isSortAscending;
@@ -137,6 +143,7 @@ public class PDBRestRequest
             + (isAllowUnpublishedEntries() ? "" : " AND status:REL");
   }
 
+  @Override
   public String toString()
   {
     return "Query : " + getQuery() + " sort field: " + fieldToSortBy
@@ -153,4 +160,34 @@ public class PDBRestRequest
   {
     this.allowUnpublishedEntries = allowUnpublishedEntries;
   }
+
+  public boolean isFacet()
+  {
+    return facet;
+  }
+
+  public void setFacet(boolean facet)
+  {
+    this.facet = facet;
+  }
+
+  public String getFacetPivot()
+  {
+    return facetPivot;
+  }
+
+  public void setFacetPivot(String facetPivot)
+  {
+    this.facetPivot = facetPivot;
+  }
+
+  public int getFacetPivotMinCount()
+  {
+    return facetPivotMinCount;
+  }
+
+  public void setFacetPivotMinCount(int facetPivotMinCount)
+  {
+    this.facetPivotMinCount = facetPivotMinCount;
+  }
 }