X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Fsifts%2FSiftsClient.java;h=b45d0072ce2c11e63735cb7d5268dcebfd3d0dcd;hb=27555f103dbf71e346da16206f784f14e20af3d0;hp=e1b539e21baee0b4b0b0b00cb6368b25b8b67e89;hpb=f1b12e688d0b261d04553a858e5b440cfc158a45;p=jalview.git diff --git a/src/jalview/ws/sifts/SiftsClient.java b/src/jalview/ws/sifts/SiftsClient.java index e1b539e..b45d007 100644 --- a/src/jalview/ws/sifts/SiftsClient.java +++ b/src/jalview/ws/sifts/SiftsClient.java @@ -71,8 +71,8 @@ import javax.xml.bind.Unmarshaller; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamReader; -import MCview.Atom; -import MCview.PDBChain; +import mc_view.Atom; +import mc_view.PDBChain; public class SiftsClient implements SiftsClientI { @@ -82,6 +82,22 @@ public class SiftsClient implements SiftsClientI */ private static File mockSiftsFile; + private static final int BUFFER_SIZE = 4096; + + public static final int UNASSIGNED = Integer.MIN_VALUE; + + private static final int PDB_RES_POS = 0; + + private static final int PDB_ATOM_POS = 1; + + private static final int PDBE_POS = 2; + + private static final String NOT_OBSERVED = "Not_Observed"; + + protected static final String SIFTS_FTP_BASE_URL = "http://ftp.ebi.ac.uk/pub/databases/msd/sifts/xml/"; + + protected final static String NEWLINE = System.lineSeparator(); + private Entry siftsEntry; private StructureFile pdb; @@ -100,20 +116,6 @@ public class SiftsClient implements SiftsClientI */ private jalview.datamodel.Mapping seqFromPdbMapping; - private static final int BUFFER_SIZE = 4096; - - public static final int UNASSIGNED = Integer.MIN_VALUE; - - private static final int PDB_RES_POS = 0; - - private static final int PDB_ATOM_POS = 1; - - private static final String NOT_OBSERVED = "Not_Observed"; - - private static final String SIFTS_FTP_BASE_URL = "http://ftp.ebi.ac.uk/pub/databases/msd/sifts/xml/"; - - private final static String NEWLINE = System.lineSeparator(); - private String curSourceDBRef; private HashSet curDBRefAccessionIdsString; @@ -398,7 +400,7 @@ public class SiftsClient implements SiftsClientI @Override public HashSet getAllMappingAccession() { - HashSet accessions = new HashSet(); + HashSet accessions = new HashSet<>(); List entities = siftsEntry.getEntity(); for (Entity entity : entities) { @@ -458,14 +460,14 @@ public class SiftsClient implements SiftsClientI public HashMap getGreedyMapping(String entityId, SequenceI seq, java.io.PrintStream os) throws SiftsException { - List omitNonObserved = new ArrayList(); - int nonObservedShiftIndex = 0; + List omitNonObserved = new ArrayList<>(); + int nonObservedShiftIndex = 0,pdbeNonObserved=0; // System.out.println("Generating mappings for : " + entityId); Entity entity = null; entity = getEntityById(entityId); String originalSeq = AlignSeq.extractGaps( jalview.util.Comparison.GapChars, seq.getSequenceAsString()); - HashMap mapping = new HashMap(); + HashMap mapping = new HashMap<>(); DBRefEntryI sourceDBRef; sourceDBRef = getValidSourceDBRef(seq); // TODO ensure sequence start/end is in the same coordinate system and @@ -477,7 +479,7 @@ public class SiftsClient implements SiftsClientI seqCoordSys = CoordinateSys.PDB; } - HashSet dbRefAccessionIdsString = new HashSet(); + HashSet dbRefAccessionIdsString = new HashSet<>(); for (DBRefEntry dbref : seq.getDBRefs()) { dbRefAccessionIdsString.add(dbref.getAccessionId().toLowerCase()); @@ -487,10 +489,10 @@ public class SiftsClient implements SiftsClientI curDBRefAccessionIdsString = dbRefAccessionIdsString; curSourceDBRef = sourceDBRef.getAccessionId(); - TreeMap resNumMap = new TreeMap(); + TreeMap resNumMap = new TreeMap<>(); List segments = entity.getSegment(); SegmentHelperPojo shp = new SegmentHelperPojo(seq, mapping, resNumMap, - omitNonObserved, nonObservedShiftIndex); + omitNonObserved, nonObservedShiftIndex,pdbeNonObserved); processSegments(segments, shp); try { @@ -628,6 +630,7 @@ public class SiftsClient implements SiftsClientI List residues = segment.getListResidue().getResidue(); for (Residue residue : residues) { + boolean isObserved = isResidueObserved(residue); int pdbeIndex = getLeadingIntegerValue(residue.getDbResNum(), UNASSIGNED); int currSeqIndex = UNASSIGNED; @@ -638,6 +641,19 @@ public class SiftsClient implements SiftsClientI if (cRefDb.getDbSource().equalsIgnoreCase(DBRefSource.PDB)) { pdbRefDb = cRefDb; + if (firstPDBResNum == UNASSIGNED) + { + firstPDBResNum = getLeadingIntegerValue(cRefDb.getDbResNum(), + UNASSIGNED); + } + else + { + if (isObserved) + { + // after we find the first observed residue we just increment + firstPDBResNum++; + } + } } if (cRefDb.getDbCoordSys().equalsIgnoreCase(seqCoordSys.getName()) && isAccessionMatched(cRefDb.getDbAccessionId())) @@ -650,27 +666,37 @@ public class SiftsClient implements SiftsClientI } } } - if (seqCoordSys == seqCoordSys.PDB) // FIXME: is seqCoordSys ever PDBe + if (!isObserved) + { + ++pdbeNonObservedCount; // TODO this value is never used + } + if (seqCoordSys == CoordinateSys.PDB) // FIXME: is seqCoordSys ever PDBe // ??? { // if the sequence has a primary reference to the PDB, then we are // dealing with a sequence extracted directly from the PDB. In that // case, numbering is PDBe - non-observed residues - currSeqIndex = pdbeIndex; + currSeqIndex = seq.getStart() - 1 + pdbeIndex; } - if (currSeqIndex == UNASSIGNED) + if (!isObserved) { - continue; + if (seqCoordSys != CoordinateSys.UNIPROT) // FIXME: PDB or PDBe only + // here + { + // mapping to PDB or PDBe so we need to bookkeep for the + // non-observed + // SEQRES positions + omitNonObserved.add(currSeqIndex); + ++nonObservedShiftIndex; + } } - if (!isResidueObserved(residue) - && seqCoordSys != seqCoordSys.UNIPROT) + if (currSeqIndex == UNASSIGNED) { - // mapping to PDB or PDBe so we need to bookkeep for the non-observed - // SEQRES positions - omitNonObserved.add(currSeqIndex); - ++nonObservedShiftIndex; + // change in logic - unobserved residues with no currSeqIndex + // corresponding are still counted in both nonObservedShiftIndex and + // pdbeIndex... + continue; } - // if (currSeqIndex >= seq.getStart() && currSeqIndex <= seqlength) // // true // numbering @@ -687,18 +713,18 @@ public class SiftsClient implements SiftsClientI : getLeadingIntegerValue(pdbRefDb.getDbResNum(), UNASSIGNED); - if (isResidueObserved(residue) - || seqCoordSys == CoordinateSys.UNIPROT) + if (isObserved) { char resCharCode = ResidueProperties .getSingleCharacterCode(ResidueProperties .getCanonicalAminoAcid(residue.getDbResName())); resNumMap.put(currSeqIndex, String.valueOf(resCharCode)); - } - mapping.put(currSeqIndex - nonObservedShiftIndex, - new int[] - { Integer.valueOf(resNum), UNASSIGNED }); + int[] mappingcols = new int[] { Integer.valueOf(resNum), + UNASSIGNED, isObserved ? firstPDBResNum : UNASSIGNED }; + + mapping.put(currSeqIndex - nonObservedShiftIndex, mappingcols); + } } } } @@ -798,7 +824,7 @@ public class SiftsClient implements SiftsClientI */ private boolean isResidueObserved(Residue residue) { - Set annotations = getResidueAnnotaitons(residue, + Set annotations = getResidueAnnotations(residue, ResidueDetailType.ANNOTATION); if (annotations == null || annotations.isEmpty()) { @@ -821,10 +847,10 @@ public class SiftsClient implements SiftsClientI * @param type * @return */ - private Set getResidueAnnotaitons(Residue residue, + private Set getResidueAnnotations(Residue residue, ResidueDetailType type) { - HashSet foundAnnotations = new HashSet(); + HashSet foundAnnotations = new HashSet<>(); List resDetails = residue.getResidueDetail(); for (ResidueDetail resDetail : resDetails) { @@ -969,6 +995,10 @@ public class SiftsClient implements SiftsClientI public int resCount; + protected SiftsEntitySortPojo() + { + } + @Override public int compareTo(SiftsEntitySortPojo o) { @@ -988,15 +1018,35 @@ public class SiftsClient implements SiftsClientI private int nonObservedShiftIndex; + /** + * count of number of 'not observed' positions in the PDB record's SEQRES + * (total number of residues with coordinates == length(SEQRES) - + * pdbeNonObserved + */ + private int pdbeNonObserved; + public SegmentHelperPojo(SequenceI seq, HashMap mapping, TreeMap resNumMap, - List omitNonObserved, int nonObservedShiftIndex) + List omitNonObserved, int nonObservedShiftIndex, + int pdbeNonObserved) { setSeq(seq); setMapping(mapping); setResNumMap(resNumMap); setOmitNonObserved(omitNonObserved); setNonObservedShiftIndex(nonObservedShiftIndex); + setPdbeNonObserved(pdbeNonObserved); + + } + + public void setPdbeNonObserved(int pdbeNonObserved2) + { + this.pdbeNonObserved = pdbeNonObserved2; + } + + public int getPdbeNonObserved() + { + return pdbeNonObserved; } public SequenceI getSeq() @@ -1048,6 +1098,7 @@ public class SiftsClient implements SiftsClientI { this.nonObservedShiftIndex = nonObservedShiftIndex; } + } @Override