From 6ae9ad9d813c1acbe015fb76605d5b0635d9ef88 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michal=20Mal=C3=BD?= <michal.maly@ibt.cas.cz>
Date: Mon, 10 Oct 2022 12:12:33 +0200
Subject: [PATCH] ReDNATCO plugin stage 20

---
 src/apps/rednatco/api.ts       |  6 +++---
 src/apps/rednatco/filtering.ts | 30 ++++--------------------------
 src/apps/rednatco/filters.ts   | 24 ++++++++++++++++++++++++
 src/apps/rednatco/viewer.ts    |  7 ++++---
 4 files changed, 35 insertions(+), 32 deletions(-)
 create mode 100644 src/apps/rednatco/filters.ts

diff --git a/src/apps/rednatco/api.ts b/src/apps/rednatco/api.ts
index e6143205e..fce225760 100644
--- a/src/apps/rednatco/api.ts
+++ b/src/apps/rednatco/api.ts
@@ -1,4 +1,4 @@
-import { Filtering } from './filtering';
+import { Filters } from './filters';
 
 export namespace ReDNATCOMspApi {
     export namespace Commands {
@@ -9,8 +9,8 @@ export namespace ReDNATCOMspApi {
             return { type: 'deselect-step' };
         }
 
-        export type Filter = { type: 'filter', filter: Filtering.Filter };
-        export function Filter(filter: Filtering.Filter) {
+        export type Filter = { type: 'filter', filter: Filters.All };
+        export function Filter(filter: Filters.All) {
             return { type: 'filter', filter };
         }
 
diff --git a/src/apps/rednatco/filtering.ts b/src/apps/rednatco/filtering.ts
index 141e30efa..5857e05b2 100644
--- a/src/apps/rednatco/filtering.ts
+++ b/src/apps/rednatco/filtering.ts
@@ -1,36 +1,14 @@
+import { Filters } from './filters';
 import { Expression } from '../../mol-script/language/expression';
 import { MolScriptBuilder as MSB } from '../../mol-script/language/builder';
 import { formatMolScript } from '../../mol-script/language/expression-formatter';
 
 export namespace Filtering {
-    export type FilterKind = 'empty'|'slices';
-
-    export type EmptyFilter = {
-        kind: 'empty',
-    };
-    export function EmptyFilter(): EmptyFilter {
-        return { kind: 'empty' };
-    }
-
-    export type SlicesFilter = {
-        kind: 'slices',
-        slices: {
-            chain: string;
-            residues?: number[];
-            altIds?: string[];
-        }[];
-    };
-    export function SlicesFilter(slices: SlicesFilter['slices']): SlicesFilter {
-        return { kind: 'slices', slices };
-    }
-
-    export type Filter = EmptyFilter|SlicesFilter;
-
     function empty() {
         return MSB.struct.generator.all();
     }
 
-    function sliceExpr(slice: SlicesFilter['slices'][0]) {
+    function sliceExpr(slice: Filters.Slices['slices'][0]) {
         let expr = MSB.core.rel.eq([MSB.struct.atomProperty.macromolecular.label_asym_id(), slice.chain]);
 
         if (slice.residues && slice.residues.length > 0) {
@@ -59,7 +37,7 @@ export namespace Filtering {
         return expr;
     }
 
-    function slices(slices: SlicesFilter['slices']) {
+    function slices(slices: Filters.Slices['slices']) {
         if (slices.length > 0) {
             let expr = sliceExpr(slices[0]);
 
@@ -78,7 +56,7 @@ export namespace Filtering {
         return MSB.struct.generator.all();
     }
 
-    export function toExpression(filter: Filter): Expression {
+    export function toExpression(filter: Filters.All): Expression {
         switch (filter.kind) {
             case 'empty':
                 return empty();
diff --git a/src/apps/rednatco/filters.ts b/src/apps/rednatco/filters.ts
new file mode 100644
index 000000000..a108881d4
--- /dev/null
+++ b/src/apps/rednatco/filters.ts
@@ -0,0 +1,24 @@
+export namespace Filters {
+    export type Kind = 'empty'|'slices';
+
+    export type Empty = {
+        kind: 'empty',
+    };
+    export function Empty(): Empty {
+        return { kind: 'empty' };
+    }
+
+    export type Slices = {
+        kind: 'slices',
+        slices: {
+            chain: string;
+            residues?: number[];
+            altIds?: string[];
+        }[];
+    };
+    export function Slices(slices: Slices['slices']): Slices {
+        return { kind: 'slices', slices };
+    }
+
+    export type All = Empty|Slices;
+}
diff --git a/src/apps/rednatco/viewer.ts b/src/apps/rednatco/viewer.ts
index 63aaf14bc..f7cf4ec37 100644
--- a/src/apps/rednatco/viewer.ts
+++ b/src/apps/rednatco/viewer.ts
@@ -2,6 +2,7 @@ import * as IDs from './idents';
 import * as RefCfmr from './reference-conformers';
 import { ReDNATCOMsp, Display, VisualRepresentations } from './index';
 import { NtCColors } from './colors';
+import { Filters } from './filters';
 import { Filtering } from './filtering';
 import { ReferenceConformersPdbs } from './reference-conformers-pdbs';
 import { Step } from './step';
@@ -857,7 +858,7 @@ export class ReDNATCOMspViewer {
             b2.to(IDs.ID('entire-structure', 'nucleic', BaseRef))
                 .apply(
                     StateTransforms.Model.StructureSelectionFromExpression,
-                    { expression: Filtering.toExpression(Filtering.EmptyFilter()) },
+                    { expression: Filtering.toExpression(Filters.Empty()) },
                     { ref: IDs.ID('structure', 'nucleic', BaseRef) }
                 );
         }
@@ -865,7 +866,7 @@ export class ReDNATCOMspViewer {
             b2.to(IDs.ID('entire-structure', 'protein', BaseRef))
                 .apply(
                     StateTransforms.Model.StructureSelectionFromExpression,
-                    { expression: Filtering.toExpression(Filtering.EmptyFilter()) },
+                    { expression: Filtering.toExpression(Filters.Empty()) },
                     { ref: IDs.ID('structure', 'protein', BaseRef) }
                 );
         }
@@ -873,7 +874,7 @@ export class ReDNATCOMspViewer {
             b2.to(IDs.ID('entire-structure', 'water', BaseRef))
                 .apply(
                     StateTransforms.Model.StructureSelectionFromExpression,
-                    { expression: Filtering.toExpression(Filtering.EmptyFilter()) },
+                    { expression: Filtering.toExpression(Filters.Empty()) },
                     { ref: IDs.ID('structure', 'water', BaseRef) }
                 );
         }
-- 
GitLab