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;
{
if (name == null)
{
- System.err.println(
+ jalview.bin.Console.errPrintln(
"POSSIBLE IMPLEMENTATION ERROR: null sequence name passed to constructor.");
name = "";
}
{
// 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);
}
}
{
if (sf.getType() == null)
{
- System.err.println(
+ jalview.bin.Console.errPrintln(
"SequenceFeature type may not be null: " + sf.toString());
return false;
}
// 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;
}
transferAnnotation(entry.getDatasetSequence(), mp);
return;
}
+ // transfer from entry to sequence
+ // if entry has a description and sequence doesn't, then transfer
+ if (entry.getDescription() != null
+ && (description == null || description.trim().length() == 0))
+ {
+ description = entry.getDescription();
+ }
+
// transfer any new features from entry onto sequence
if (entry.getSequenceFeatures() != null)
{
////
//// 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<ContactMatrixI> 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()];
- 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())
+ if (cm instanceof MappableContactMatrix
+ && !((MappableContactMatrix) cm).hasReferenceSeq())
{
((MappableContactMatrix) cm).setRefSeq(this);
}
public void addContactListFor(AlignmentAnnotation annotation,
ContactMatrixI cm)
{
- cmholder.addContactListFor(annotation, cm);
+ getContactMapHolder().addContactListFor(annotation, cm);
}
}