X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FAlignmentAnnotation.java;fp=src%2Fjalview%2Fdatamodel%2FAlignmentAnnotation.java;h=92a4f6d328fe1436d0ce3f90cf0219352cb64727;hb=85d8faf004199c5cc63773d7d4643143d16600da;hp=601339acc1f84b1af5117b2341465d4636f4944f;hpb=c48c2f08cdc5e9ec96cae9829c4a3e502bcd8a8a;p=jalview.git diff --git a/src/jalview/datamodel/AlignmentAnnotation.java b/src/jalview/datamodel/AlignmentAnnotation.java index 601339a..92a4f6d 100755 --- a/src/jalview/datamodel/AlignmentAnnotation.java +++ b/src/jalview/datamodel/AlignmentAnnotation.java @@ -28,6 +28,8 @@ import jalview.analysis.WUSSParseException; import java.util.ArrayList; import java.util.Enumeration; import java.util.Hashtable; +import java.util.Map; +import java.util.Map.Entry; import fr.orsay.lri.varna.models.rna.RNA; @@ -105,7 +107,7 @@ public class AlignmentAnnotation // System.out.println("featuregroup " + _rnasecstr[0].getFeatureGroup()); } - public java.util.Hashtable sequenceMapping; + public java.util.Hashtable sequenceMapping; /** DOCUMENT ME!! */ public float graphMin; @@ -1117,4 +1119,45 @@ public class AlignmentAnnotation { return isrna; } + + /** + * transfer annotation to the given sequence using the given mapping from the + * current positions or an existing sequence mapping + * + * @param sq + * @param sp2sq + * map involving sq as To or From + */ + public void liftOver(SequenceI sq, Mapping sp2sq) + { + boolean mapIsTo = (sp2sq != null) ? (sp2sq.getTo() == sq || sp2sq + .getTo() == sq.getDatasetSequence()) : false; + + // TODO build a better annotation element map and get rid of annotations[] + Hashtable mapForsq = new Hashtable(); + if (sequenceMapping != null) + { + if (sp2sq != null) + { + for (Entry ie : sequenceMapping.entrySet()) + { + Integer mpos = Integer.valueOf(mapIsTo ? sp2sq + .getMappedPosition(ie.getKey()) : sp2sq.getPosition(ie + .getKey())); + if (mpos >= sq.getStart() && mpos <= sq.getEnd()) + { + mapForsq.put(mpos, ie.getValue()); + } + } + sequenceMapping = mapForsq; + sequenceRef = sq; + adjustForAlignment(); + } + else + { + // trim positions + } + } + + } }