X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FSequence.java;h=32d295a7132a56058faa8adc46fa58de76a18edc;hb=03750f3a72c19b215f872bbdcf04585c463c6967;hp=d62be1776d0a7ec3e285c926db7e65b4bd59fd19;hpb=0eda79421bb03c19e3b74c4b83b1644ca12ea66c;p=jalview.git diff --git a/src/jalview/datamodel/Sequence.java b/src/jalview/datamodel/Sequence.java index d62be17..32d295a 100755 --- a/src/jalview/datamodel/Sequence.java +++ b/src/jalview/datamodel/Sequence.java @@ -33,12 +33,15 @@ import java.util.Vector; import fr.orsay.lri.varna.models.rna.RNA; import jalview.analysis.AlignSeq; +import jalview.analysis.AlignmentUtils; +import jalview.analysis.SeqsetUtils; import jalview.datamodel.features.SequenceFeatures; import jalview.datamodel.features.SequenceFeaturesI; import jalview.util.Comparison; import jalview.util.DBRefUtils; import jalview.util.MapList; import jalview.util.StringUtils; +import jalview.ws.datamodel.alphafold.MappableContactMatrix; /** * @@ -349,6 +352,11 @@ public class Sequence extends ASequence implements SequenceI { // only copy the given annotation AlignmentAnnotation newann = new AlignmentAnnotation(sqann[i]); + ContactMatrixI cm = seq.getContactMatrixFor(sqann[i]); + if (cm!=null) + { + addContactListFor(newann, cm); + } addAlignmentAnnotation(newann); } } @@ -1625,8 +1633,20 @@ public class Sequence extends ASequence implements SequenceI _aa.adjustForAlignment(); // uses annotation's own record of // sequence-column mapping datasetSequence.addAlignmentAnnotation(_aa); + + if (_cmholder != null) + { // transfer contact matrices + ContactMatrixI cm = _cmholder.getContactMatrixFor(aa); + if (cm != null) + { + datasetSequence.addContactListFor(_aa, cm); + datasetSequence.addContactListFor(aa, cm); + } + } } } + // all matrices should have been transferred. so we clear the local holder + _cmholder=null; } return datasetSequence; } @@ -2111,34 +2131,79 @@ public class Sequence extends ASequence implements SequenceI //// //// Contact Matrix Holder Boilerplate //// - ContactMapHolder cmholder = new ContactMapHolder(); + ContactMapHolderI _cmholder = null; + private ContactMapHolderI getContactMapHolder() + { + if (datasetSequence!=null) { + return ((Sequence)datasetSequence).getContactMapHolder(); + } + if (_cmholder==null) + { + _cmholder=new ContactMapHolder(); + } + return _cmholder; + } @Override public Collection getContactMaps() { - return cmholder.getContactMaps(); + return getContactMapHolder().getContactMaps(); + } + + @Override + public ContactMatrixI getContactMatrixFor(AlignmentAnnotation ann) + { + return getContactMapHolder().getContactMatrixFor(ann); } @Override public ContactListI getContactListFor(AlignmentAnnotation _aa, int column) { - return cmholder.getContactListFor(_aa, column); + return getContactMapHolder().getContactListFor(_aa, column); } @Override public AlignmentAnnotation addContactList(ContactMatrixI cm) { - AlignmentAnnotation aa = cmholder.addContactList(cm); + AlignmentAnnotation aa; + + if (datasetSequence != null) + { + aa = datasetSequence.addContactList(cm); + // clone the annotation for the local sequence + aa = new AlignmentAnnotation(aa); + aa.restrict(start, end); + aa.adjustForAlignment(); + getContactMapHolder().addContactListFor(aa,cm); + addAlignmentAnnotation(aa); + return aa; + } + + // construct new annotation for matrix on dataset sequence + aa = getContactMapHolder().addContactList(cm); Annotation _aa[] = new Annotation[getLength()]; - Annotation dummy = new Annotation(0.0f); - for (int i = 0; i < _aa.length; _aa[i++] = dummy) + + for (int i = 0; i < _aa.length; _aa[i++] = new Annotation(0.0f)) { ; } aa.annotations = _aa; + aa.setSequenceRef(this); + if (cm instanceof MappableContactMatrix + && !((MappableContactMatrix) cm).hasReferenceSeq()) + { + ((MappableContactMatrix) cm).setRefSeq(this); + } + aa.createSequenceMapping(this, getStart(), false); addAlignmentAnnotation(aa); return aa; } + @Override + public void addContactListFor(AlignmentAnnotation annotation, + ContactMatrixI cm) + { + getContactMapHolder().addContactListFor(annotation, cm); + } }