From: jprocter Date: Mon, 12 Nov 2007 16:35:50 +0000 (+0000) Subject: crossrefs have properly updated pdbId lists X-Git-Tag: Release_2_4~188 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=ce886100c1eae01eac7d59c961e694f4493d4bcb;p=jalview.git crossrefs have properly updated pdbId lists --- diff --git a/src/jalview/analysis/CrossRef.java b/src/jalview/analysis/CrossRef.java index d2f0358..3e046c2 100644 --- a/src/jalview/analysis/CrossRef.java +++ b/src/jalview/analysis/CrossRef.java @@ -40,8 +40,8 @@ public class CrossRef { rfs = jalview.util.DBRefUtils.selectRefs(rfs, DBRefSource.DNACODINGDBS); // could attempt to find other cross - // refs and return here - ie PDB xrefs - // (not dna, not protein seq) + // refs and return here - ie PDB xrefs + // (not dna, not protein seq) } return rfs; } @@ -216,13 +216,13 @@ public class CrossRef { System.out.println("Attempting to find ds Xrefs refs."); DBRefEntry[] lrfs = CrossRef.findXDbRefs(!dna, seqs[s].getDBRef()); // less - // ambiguous - // would - // be a - // 'find - // primary - // dbRefEntry' - // method. + // ambiguous + // would + // be a + // 'find + // primary + // dbRefEntry' + // method. // filter for desired source xref here found = CrossRef.searchDatasetXrefs(dss, !dna, lrfs, dataset, rseqs, cf); @@ -305,7 +305,7 @@ public class CrossRef xrfs = t; try { - retrieved = sftch.getSequences(xrfs); + retrieved = sftch.getSequences(xrfs); // problem here is we don't know which of xrfs resulted in which retrieved element } catch (Exception e) { System.err @@ -317,6 +317,46 @@ public class CrossRef { for (int rs = 0; rs < retrieved.length; rs++) { + // TODO: examine each sequence for 'redundancy' + jalview.datamodel.DBRefEntry[] dbr = retrieved[rs].getDBRef(); + if (dbr != null && dbr.length > 0) + { + for (int di = 0; di < dbr.length; di++) + { + // find any entry where we should put in the sequence being cross-referenced into the map + jalview.datamodel.Mapping map = dbr[di].getMap(); + if (map != null) + { + if (map.getTo() != null && map.getMap() != null) + { + // should search the local dataset to find any existing candidates for To ! + try + { + // compare ms with dss and replace with dss in mapping if map is congruent + SequenceI ms = map.getTo(); + int sf = map.getMap().getToLowest(); + int st = map.getMap().getToHighest(); + SequenceI mappedrg = ms.getSubSequence(sf, st); + SequenceI loc = dss.getSubSequence(sf, st); + if (mappedrg.getLength()>0 && mappedrg.getSequenceAsString().equals( + loc.getSequenceAsString())) + { + System.err + .println("Mapping updated for retrieved crossreference"); + // method to update all refs of existing To on retrieved sequence with dss and merge any props on To onto dss. + map.setTo(dss); + } + } catch (Exception e) + { + System.err + .println("Exception when consolidating Mapped sequence set..."); + e.printStackTrace(System.err); + } + } + } + } + } + retrieved[rs].updatePDBIds(); rseqs.addElement(retrieved[rs]); } } @@ -442,7 +482,7 @@ public class CrossRef { rseqs.addElement(nxt); boolean foundmap = cf != null; // don't search if we aren't given - // a codon map object + // a codon map object for (int r = 0; foundmap && r < cands.length; r++) { if (cands[r].hasMap())