X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FCrossRef.java;h=288d60e68121b23a569cdbb149696a711f7befea;hb=9975899291c5d1c4bed9139315e31382c2225d97;hp=2b5a0e214f10cbdf3528e045cfdeebed326c9a9d;hpb=29d4809e01ace4e6ac449ec944bfeec70070ac81;p=jalview.git diff --git a/src/jalview/analysis/CrossRef.java b/src/jalview/analysis/CrossRef.java index 2b5a0e2..288d60e 100644 --- a/src/jalview/analysis/CrossRef.java +++ b/src/jalview/analysis/CrossRef.java @@ -68,11 +68,6 @@ public class CrossRef List rseqs; /** - * mappings constructed - */ - AlignedCodonFrame cf; - - /** * Constructor * * @param seqs @@ -213,7 +208,7 @@ public class CrossRef { rseqs = new ArrayList(); - cf = new AlignedCodonFrame(); + AlignedCodonFrame cf = new AlignedCodonFrame(); matcher = new SequenceIdMatcher( dataset.getSequences()); @@ -295,12 +290,14 @@ public class CrossRef if (fromDna) { // map is from dna seq to a protein product - cf.addMap(dss, rsq, xref.getMap().getMap()); + cf.addMap(dss, rsq, xref.getMap().getMap(), xref.getMap() + .getMappedFromId()); } else { // map should be from protein seq to its coding dna - cf.addMap(rsq, dss, xref.getMap().getMap().getInverse()); + cf.addMap(rsq, dss, xref.getMap().getMap().getInverse(), + xref.getMap().getMappedFromId()); } } } @@ -336,7 +333,7 @@ public class CrossRef */ if (!sourceRefs.isEmpty()) { - retrieveCrossRef(sourceRefs, seq, xrfs, fromDna); + retrieveCrossRef(sourceRefs, seq, xrfs, fromDna, cf); } } @@ -353,7 +350,7 @@ public class CrossRef } private void retrieveCrossRef(List sourceRefs, SequenceI seq, - DBRefEntry[] xrfs, boolean fromDna) + DBRefEntry[] xrfs, boolean fromDna, AlignedCodonFrame cf) { ASequenceFetcher sftch = SequenceFetcherFactory.getSequenceFetcher(); SequenceI[] retrieved = null; @@ -621,14 +618,14 @@ public class CrossRef void updateDbrefMappings(SequenceI mapFrom, DBRefEntry[] xrefs, SequenceI[] retrieved, AlignedCodonFrame acf, boolean fromDna) { - SequenceIdMatcher matcher = new SequenceIdMatcher(retrieved); + SequenceIdMatcher idMatcher = new SequenceIdMatcher(retrieved); for (DBRefEntry xref : xrefs) { if (!xref.hasMap()) { String targetSeqName = xref.getSource() + "|" + xref.getAccessionId(); - SequenceI[] matches = matcher.findAllIdMatches(targetSeqName); + SequenceI[] matches = idMatcher.findAllIdMatches(targetSeqName); if (matches == null) { return; @@ -705,6 +702,20 @@ public class CrossRef return false; } xref.setMap(new Mapping(mapTo, mapping)); + + /* + * and add a reverse DbRef with the inverse mapping + */ + if (mapFrom.getDatasetSequence() != null + && mapFrom.getDatasetSequence().getSourceDBRef() != null) + { + DBRefEntry dbref = new DBRefEntry(mapFrom.getDatasetSequence() + .getSourceDBRef()); + dbref.setMap(new Mapping(mapFrom.getDatasetSequence(), mapping + .getInverse())); + mapTo.addDBRef(dbref); + } + if (fromDna) { AlignmentUtils.computeProteinFeatures(mapFrom, mapTo, mapping);