Browse Source

simplified interactions loci/location

Alexander Rose 5 years ago
parent
commit
3e0c4242ad

+ 9 - 7
src/mol-model-props/computed/interactions/interactions.ts

@@ -38,8 +38,9 @@ interface Interactions {
 }
 
 namespace Interactions {
+    type StructureInteractions = { readonly structure: Structure, readonly interactions: Interactions }
+
     export interface Element {
-        structure: Structure,
         unitA: Unit
         /** Index into features of unitA */
         indexA: Features.FeatureIndex
@@ -47,11 +48,12 @@ namespace Interactions {
         /** Index into features of unitB */
         indexB: Features.FeatureIndex
     }
-    export interface Location extends DataLocation<Interactions, Element> {}
+
+    export interface Location extends DataLocation<StructureInteractions, Element> {}
 
     export function Location(interactions: Interactions, structure: Structure, unitA?: Unit, indexA?: Features.FeatureIndex, unitB?: Unit, indexB?: Features.FeatureIndex): Location {
-        return DataLocation('interactions', interactions, 
-            { structure: structure as any, unitA: unitA as any, indexA: indexA as any, unitB: unitB as any, indexB: indexB as any });
+        return DataLocation('interactions', { structure, interactions },
+            { unitA: unitA as any, indexA: indexA as any, unitB: unitB as any, indexB: indexB as any });
     }
 
     export function isLocation(x: any): x is Location {
@@ -60,7 +62,8 @@ namespace Interactions {
 
     export function areLocationsEqual(locA: Location, locB: Location) {
         return (
-            locA.data === locB.data &&
+            locA.data.structure === locB.data.structure &&
+            locA.data.interactions === locB.data.interactions &&
             locA.element.indexA === locB.element.indexA &&
             locA.element.indexB === locB.element.indexB &&
             locA.element.unitA === locB.element.unitA &&
@@ -82,10 +85,9 @@ namespace Interactions {
     }
 
     export function locationLabel(location: Location): string {
-        return _label(location.data, location.element)
+        return _label(location.data.interactions, location.element)
     }
 
-    type StructureInteractions = { readonly structure: Structure, readonly interactions: Interactions }
     export interface Loci extends DataLoci<StructureInteractions, Element> { }
 
     export function Loci(structure: Structure, interactions: Interactions, elements: ReadonlyArray<Element>): Loci {

+ 2 - 2
src/mol-model-props/computed/representations/interactions-inter-unit-cylinder.ts

@@ -101,8 +101,8 @@ function getInteractionLoci(pickingId: PickingId, structure: Structure, id: numb
         const interactions = InteractionsProvider.get(structure).value!
         const c = interactions.contacts.edges[groupId]
         return Interactions.Loci(structure, interactions, [
-            { structure, unitA: c.unitA, indexA: c.indexA, unitB: c.unitB, indexB: c.indexB },
-            { structure, unitA: c.unitB, indexA: c.indexB, unitB: c.unitA, indexB: c.indexA },
+            { unitA: c.unitA, indexA: c.indexA, unitB: c.unitB, indexB: c.indexB },
+            { unitA: c.unitB, indexA: c.indexB, unitB: c.unitA, indexB: c.indexA },
         ])
     }
     return EmptyLoci

+ 2 - 2
src/mol-model-props/computed/representations/interactions-intra-unit-cylinder.ts

@@ -97,8 +97,8 @@ function getInteractionLoci(pickingId: PickingId, structureGroup: StructureGroup
         const interactions = InteractionsProvider.get(structure).value!
         const { a, b } = interactions.unitsContacts.get(unit.id)
         return Interactions.Loci(structure, interactions, [
-            { structure, unitA: unit, indexA: a[groupId], unitB: unit, indexB: b[groupId] },
-            { structure, unitA: unit, indexA: b[groupId], unitB: unit, indexB: a[groupId] },
+            { unitA: unit, indexA: a[groupId], unitB: unit, indexB: b[groupId] },
+            { unitA: unit, indexA: b[groupId], unitB: unit, indexB: a[groupId] },
         ])
     }
     return EmptyLoci

+ 1 - 1
src/mol-model-props/computed/themes/interaction-type.ts

@@ -78,7 +78,7 @@ export function InteractionTypeColorTheme(ctx: ThemeDataContext, props: PD.Value
     if (interactions && interactions.value) {
         color = (location: Location) => {
             if (Interactions.isLocation(location)) {
-                const { unitsContacts, contacts } = location.data
+                const { unitsContacts, contacts } = location.data.interactions
                 const { unitA, unitB, indexA, indexB } = location.element
                 if (unitA === unitB) {
                     const links = unitsContacts.get(unitA.id)