Explorar el Código

basic support for aligning coarse structures

Alexander Rose hace 4 años
padre
commit
ad38a33943
Se han modificado 1 ficheros con 20 adiciones y 10 borrados
  1. 20 10
      src/mol-model/sequence/alignment/sequence.ts

+ 20 - 10
src/mol-model/sequence/alignment/sequence.ts

@@ -24,16 +24,26 @@ namespace AlignSequences {
 
     function createSeqIdIndicesMap(element: StructureElement.Loci.Element) {
         const seqIds = new Map<number, StructureElement.UnitIndex[]>();
-        if (!Unit.isAtomic(element.unit)) return seqIds;
-
-        const { label_seq_id } = element.unit.model.atomicHierarchy.residues;
-        const { residueIndex } = element.unit;
-        for (let i = 0, il = OrderedSet.size(element.indices); i < il; ++i) {
-            const uI = OrderedSet.getAt(element.indices, i);
-            const eI = element.unit.elements[uI];
-            const seqId = label_seq_id.value(residueIndex[eI]);
-            if (seqIds.has(seqId)) seqIds.get(seqId)!.push(uI);
-            else seqIds.set(seqId, [uI]);
+        if (Unit.isAtomic(element.unit)) {
+            const { label_seq_id } = element.unit.model.atomicHierarchy.residues;
+            const { residueIndex } = element.unit;
+            for (let i = 0, il = OrderedSet.size(element.indices); i < il; ++i) {
+                const uI = OrderedSet.getAt(element.indices, i);
+                const eI = element.unit.elements[uI];
+                const seqId = label_seq_id.value(residueIndex[eI]);
+                if (seqIds.has(seqId)) seqIds.get(seqId)!.push(uI);
+                else seqIds.set(seqId, [uI]);
+            }
+        } else if (Unit.isCoarse(element.unit)) {
+            const { seq_id_begin } = Unit.isSpheres(element.unit)
+                ? element.unit.model.coarseHierarchy.spheres
+                : element.unit.model.coarseHierarchy.gaussians;
+            for (let i = 0, il = OrderedSet.size(element.indices); i < il; ++i) {
+                const uI = OrderedSet.getAt(element.indices, i);
+                const eI = element.unit.elements[uI];
+                const seqId = seq_id_begin.value(eI);
+                seqIds.set(seqId, [uI]);
+            }
         }
         return seqIds;
     }