import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
public Iterable<AlignmentAnnotation> findAnnotations(SequenceI seq,
String calcId, String label)
{
- return AlignmentAnnotation.findAnnotations(
- Arrays.asList(getAlignmentAnnotation()), seq, calcId, label);
+ return annotations == null ? null
+ : AlignmentAnnotation.findAnnotations(
+ Arrays.asList(getAlignmentAnnotation()), seq, calcId,
+ label);
}
@Override
}
}
- Map<Object, ContactMatrixI> contactmaps = new HashMap<>();
+ ////
+ //// Contact Matrix Holder Boilerplate
+ ////
+ ContactMapHolder cmholder = new ContactMapHolder();
@Override
public Collection<ContactMatrixI> getContactMaps()
{
- if (contactmaps != null && contactmaps.size() > 0)
+ return cmholder.getContactMaps();
+ }
+
+ @Override
+ public ContactMatrixI getContactMatrixFor(AlignmentAnnotation _aa)
+ {
+ ContactMatrixI cm = cmholder.getContactMatrixFor(_aa);
+ if (cm == null && _aa.groupRef != null)
{
- return contactmaps.values();
+ cm = _aa.groupRef.getContactMatrixFor(_aa);
}
- return Collections.EMPTY_LIST;
+ if (cm == null && _aa.sequenceRef != null)
+ {
+ cm = _aa.sequenceRef.getContactMatrixFor(_aa);
+ if (cm == null)
+ {
+ // TODO fix up this logic and unify with getContactListFor
+ cm = _aa.sequenceRef.getDatasetSequence().getContactMatrixFor(_aa);
+ }
+ }
+ return cm;
}
@Override
public ContactListI getContactListFor(AlignmentAnnotation _aa, int column)
{
- ContactMatrixI cm = contactmaps.get(_aa.annotationId);
- if (cm == null)
+ if (_aa.annotations==null || column>=_aa.annotations.length || column<0)
{
return null;
}
- return cm.getContactList(column);
+ ContactListI cl = cmholder.getContactListFor(_aa, column);
+ if (cl == null && _aa.groupRef != null)
+ {
+ cl = _aa.groupRef.getContactListFor(_aa, column);
+ }
+ if (cl == null && _aa.sequenceRef != null)
+ {
+ if (_aa.annotations[column] != null)
+ {
+ // sequence associated
+ cl = _aa.sequenceRef.getContactListFor(_aa, column);
+ if (cl == null && _aa.sequenceRef.getDatasetSequence() != null)
+ {
+ int spos = _aa.sequenceRef.findPosition(column);
+ if (spos >= _aa.sequenceRef.getStart()
+ && spos <= 1 + _aa.sequenceRef.getEnd())
+ {
+ cl = _aa.sequenceRef.getDatasetSequence().getContactListFor(_aa,
+ spos - _aa.sequenceRef.getStart());
+ }
+ }
+ }
+ }
+ return cl;
}
@Override
public AlignmentAnnotation addContactList(ContactMatrixI cm)
{
+ AlignmentAnnotation aa = cmholder.addContactList(cm);
+
Annotation _aa[] = new Annotation[getWidth()];
- 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))
{
;
}
- AlignmentAnnotation aa = new AlignmentAnnotation("Contact Matrix",
- "Contact Matrix", _aa);
- aa.graph = AlignmentAnnotation.CUSTOMRENDERER;
- aa.graphMin = cm.getMin();
- aa.graphMax = cm.getMax();
- aa.editable = false;
- // aa.autoCalculated = true;
- contactmaps.put(aa.annotationId, cm);
- // TODO: contact matrices could be intra or inter - more than one refseq
- // possible!
- if (cm.hasReferenceSeq())
- {
- aa.setSequenceRef(cm.getReferenceSeq());
- }
+ aa.annotations = _aa;
addAnnotation(aa);
return aa;
}
+
+ @Override
+ public void addContactListFor(AlignmentAnnotation annotation,
+ ContactMatrixI cm)
+ {
+ cmholder.addContactListFor(annotation, cm);
+
+ }
}