X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FCrossRef.java;h=b4d75f9d4ef23f3759669465fa1cd39d1fd9a82a;hb=8f767dbd2ec39bd1c06167c7a1da00f413b7a899;hp=2b5a0e214f10cbdf3528e045cfdeebed326c9a9d;hpb=29d4809e01ace4e6ac449ec944bfeec70070ac81;p=jalview.git diff --git a/src/jalview/analysis/CrossRef.java b/src/jalview/analysis/CrossRef.java index 2b5a0e2..b4d75f9 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()); @@ -286,21 +281,23 @@ public class CrossRef refIterator.remove(); continue; } + // TODO: need to determine if this should be a deriveSequence SequenceI rsq = new Sequence(mappedTo); rseqs.add(rsq); - if (xref.getMap().getMap().getFromRatio() != xref.getMap() - .getMap().getToRatio()) + if (xref.getMap().getMap().isTripletMap()) { // get sense of map correct for adding to product alignment. 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);