From: tcofoegbu Date: Tue, 23 Feb 2016 10:06:19 +0000 (+0000) Subject: develop merge X-Git-Tag: Release_2_10_0~293^2~12 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=17df7bf657763e2d787fdd2d6651f2ea7f3ee07f;hp=a1de1a4351878df7cba243a3421c136b634d4d5f;p=jalview.git develop merge --- diff --git a/src/MCview/PDBChain.java b/src/MCview/PDBChain.java index a43626f..e4e619c 100755 --- a/src/MCview/PDBChain.java +++ b/src/MCview/PDBChain.java @@ -295,11 +295,15 @@ public class PDBChain Vector resAnnotation = new Vector(); 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 resAtoms = new Vector(); // 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) diff --git a/src/jalview/gui/StructureChooser.java b/src/jalview/gui/StructureChooser.java index cf58322..5d381b9 100644 --- a/src/jalview/gui/StructureChooser.java +++ b/src/jalview/gui/StructureChooser.java @@ -382,17 +382,46 @@ public class StructureChooser extends GStructureChooser implements .getStructureSummaryFields(); Collection filteredResponse = new HashSet(); HashSet errors = new HashSet(); + // 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", "-", diff --git a/src/jalview/structure/StructureSelectionManager.java b/src/jalview/structure/StructureSelectionManager.java index 6bc8f84..9d06aef 100644 --- a/src/jalview/structure/StructureSelectionManager.java +++ b/src/jalview/structure/StructureSelectionManager.java @@ -607,17 +607,18 @@ public class StructureSelectionManager HashMap mapping = new HashMap(); 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 }); } diff --git a/src/jalview/viewmodel/AlignmentViewport.java b/src/jalview/viewmodel/AlignmentViewport.java index c4ae76d..7bbe677 100644 --- a/src/jalview/viewmodel/AlignmentViewport.java +++ b/src/jalview/viewmodel/AlignmentViewport.java @@ -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]; diff --git a/src/jalview/ws/dbsources/PDBRestClient.java b/src/jalview/ws/dbsources/PDBRestClient.java index c6251a6..8e08c84 100644 --- a/src/jalview/ws/dbsources/PDBRestClient.java +++ b/src/jalview/ws/dbsources/PDBRestClient.java @@ -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; diff --git a/src/jalview/ws/sifts/SiftsClient.java b/src/jalview/ws/sifts/SiftsClient.java index 6e7b988..f25c1cf 100644 --- a/src/jalview/ws/sifts/SiftsClient.java +++ b/src/jalview/ws/sifts/SiftsClient.java @@ -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) diff --git a/src/jalview/ws/uimodel/PDBRestRequest.java b/src/jalview/ws/uimodel/PDBRestRequest.java index 24f38d1..7bfc226 100644 --- a/src/jalview/ws/uimodel/PDBRestRequest.java +++ b/src/jalview/ws/uimodel/PDBRestRequest.java @@ -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; + } }