X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FSequence.java;fp=src%2Fjalview%2Fdatamodel%2FSequence.java;h=32d295a7132a56058faa8adc46fa58de76a18edc;hb=19c22459dca6c69d6f1fd0eed029c01e21c99854;hp=33c8ac507a26d9272855907c12c76b054fc1d92b;hpb=7440c240e784fa663228f579b51694e023a30ae3;p=jalview.git diff --git a/src/jalview/datamodel/Sequence.java b/src/jalview/datamodel/Sequence.java index 33c8ac5..32d295a 100755 --- a/src/jalview/datamodel/Sequence.java +++ b/src/jalview/datamodel/Sequence.java @@ -33,6 +33,8 @@ 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; @@ -350,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); } } @@ -1627,14 +1634,19 @@ public class Sequence extends ASequence implements SequenceI // sequence-column mapping datasetSequence.addAlignmentAnnotation(_aa); - // transfer contact matrices - ContactMatrixI cm = getContactMatrixFor(aa); - if (cm != null) - { - datasetSequence.addContactListFor(_aa, cm); + 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; } @@ -2119,30 +2131,56 @@ public class Sequence extends ASequence implements SequenceI //// //// Contact Matrix Holder Boilerplate //// - ContactMapHolderI 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 cmholder.getContactMatrixFor(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()]; @@ -2166,6 +2204,6 @@ public class Sequence extends ASequence implements SequenceI public void addContactListFor(AlignmentAnnotation annotation, ContactMatrixI cm) { - cmholder.addContactListFor(annotation, cm); + getContactMapHolder().addContactListFor(annotation, cm); } }