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
{
*/
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;
*/
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<String> curDBRefAccessionIdsString;
@Override
public HashSet<String> getAllMappingAccession()
{
- HashSet<String> accessions = new HashSet<String>();
+ HashSet<String> accessions = new HashSet<>();
List<Entity> entities = siftsEntry.getEntity();
for (Entity entity : entities)
{
public HashMap<Integer, int[]> getGreedyMapping(String entityId,
SequenceI seq, java.io.PrintStream os) throws SiftsException
{
- List<Integer> omitNonObserved = new ArrayList<Integer>();
- int nonObservedShiftIndex = 0;
+ List<Integer> 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<Integer, int[]> mapping = new HashMap<Integer, int[]>();
+ HashMap<Integer, int[]> mapping = new HashMap<>();
DBRefEntryI sourceDBRef;
sourceDBRef = getValidSourceDBRef(seq);
// TODO ensure sequence start/end is in the same coordinate system and
seqCoordSys = CoordinateSys.PDB;
}
- HashSet<String> dbRefAccessionIdsString = new HashSet<String>();
+ HashSet<String> dbRefAccessionIdsString = new HashSet<>();
for (DBRefEntry dbref : seq.getDBRefs())
{
dbRefAccessionIdsString.add(dbref.getAccessionId().toLowerCase());
curDBRefAccessionIdsString = dbRefAccessionIdsString;
curSourceDBRef = sourceDBRef.getAccessionId();
- TreeMap<Integer, String> resNumMap = new TreeMap<Integer, String>();
+ TreeMap<Integer, String> resNumMap = new TreeMap<>();
List<Segment> segments = entity.getSegment();
SegmentHelperPojo shp = new SegmentHelperPojo(seq, mapping, resNumMap,
- omitNonObserved, nonObservedShiftIndex);
+ omitNonObserved, nonObservedShiftIndex,pdbeNonObserved);
processSegments(segments, shp);
try
{
List<Residue> residues = segment.getListResidue().getResidue();
for (Residue residue : residues)
{
+ boolean isObserved = isResidueObserved(residue);
int pdbeIndex = getLeadingIntegerValue(residue.getDbResNum(),
UNASSIGNED);
int currSeqIndex = UNASSIGNED;
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()))
}
}
}
- 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
: 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);
+ }
}
}
}
*/
private boolean isResidueObserved(Residue residue)
{
- Set<String> annotations = getResidueAnnotaitons(residue,
+ Set<String> annotations = getResidueAnnotations(residue,
ResidueDetailType.ANNOTATION);
if (annotations == null || annotations.isEmpty())
{
* @param type
* @return
*/
- private Set<String> getResidueAnnotaitons(Residue residue,
+ private Set<String> getResidueAnnotations(Residue residue,
ResidueDetailType type)
{
- HashSet<String> foundAnnotations = new HashSet<String>();
+ HashSet<String> foundAnnotations = new HashSet<>();
List<ResidueDetail> resDetails = residue.getResidueDetail();
for (ResidueDetail resDetail : resDetails)
{
public int resCount;
+ protected SiftsEntitySortPojo()
+ {
+ }
+
@Override
public int compareTo(SiftsEntitySortPojo o)
{
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<Integer, int[]> mapping,
TreeMap<Integer, String> resNumMap,
- List<Integer> omitNonObserved, int nonObservedShiftIndex)
+ List<Integer> 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()
{
this.nonObservedShiftIndex = nonObservedShiftIndex;
}
+
}
@Override