Browse Source

numModels param for first model

JonStargaryen 4 years ago
parent
commit
cc6dce8845
2 changed files with 6 additions and 5 deletions
  1. 3 3
      src/servers/model/server/api.ts
  2. 3 2
      src/servers/model/server/query.ts

+ 3 - 3
src/servers/model/server/api.ts

@@ -33,7 +33,7 @@ export interface QueryDefinition<Params = any> {
     name: string,
     niceName: string,
     exampleId: string, // default is 1cbs
-    query: (params: Params, structure: Structure) => StructureQuery,
+    query: (params: Params, structure: Structure, numModels: number[]) => StructureQuery,
     description: string,
     jsonParams: QueryParamInfo[],
     restParams: QueryParamInfo[],
@@ -132,11 +132,11 @@ const QueryMap = {
     'ligand': Q<{ atom_site: AtomSiteSchema }>({
         niceName: 'Ligand',
         description: 'Coordinates of the first group satisfying the given criteria.',
-        query: p => {
+        query: (p, _s, numModels) => {
             const tests = getAtomsTests(p.atom_site);
             const ligands = Queries.combinators.merge(tests.map(test => Queries.generators.atoms({
                 ...test,
-                unitTest: ctx => StructureProperties.unit.model_num(ctx.element) === 1,
+                unitTest: ctx => StructureProperties.unit.model_num(ctx.element) === numModels[0],
                 groupBy: ctx => StructureProperties.residue.key(ctx.element)
             })));
             return Queries.filters.first(ligands);

+ 3 - 2
src/servers/model/server/query.ts

@@ -7,7 +7,7 @@
 import * as path from 'path';
 import { Column } from '../../../mol-data/db';
 import { CifWriter } from '../../../mol-io/writer/cif';
-import { Structure, StructureQuery, StructureSelection } from '../../../mol-model/structure';
+import { Structure, StructureQuery, StructureSelection, Model } from '../../../mol-model/structure';
 import { encode_mmCIF_categories } from '../../../mol-model/structure/export/mmcif';
 import { Progress } from '../../../mol-task';
 import { ConsoleLogger } from '../../../mol-util/console-logger';
@@ -208,7 +208,8 @@ async function resolveJobEntry(entry: JobEntry, structure: StructureWrapper, enc
             }
         }
 
-        const queries = structures.map(s => entry.queryDefinition.query(entry.normalizedParams, s));
+        const modelNums = entry.modelNums || (structure.models as Model[]).map(m => m.modelNum);
+        const queries = structures.map(s => entry.queryDefinition.query(entry.normalizedParams, s, modelNums));
         const result: Structure[] = [];
         for (let i = 0; i < structures.length; i++) {
             const s = StructureSelection.unionStructure(StructureQuery.run(queries[i], structures[i], { timeoutMs: Config.queryTimeoutMs }));