|
@@ -12,12 +12,12 @@ import fetch from 'node-fetch'
|
|
import CIF from 'mol-io/reader/cif'
|
|
import CIF from 'mol-io/reader/cif'
|
|
|
|
|
|
import { Structure, Model, Queries as Q, StructureElement, StructureSelection, StructureSymmetry, StructureQuery, Format, StructureProperties as SP } from 'mol-model/structure'
|
|
import { Structure, Model, Queries as Q, StructureElement, StructureSelection, StructureSymmetry, StructureQuery, Format, StructureProperties as SP } from 'mol-model/structure'
|
|
-//import { Segmentation, OrderedSet } from 'mol-data/int'
|
|
|
|
|
|
+// import { Segmentation, OrderedSet } from 'mol-data/int'
|
|
|
|
|
|
import to_mmCIF from 'mol-model/structure/export/mmcif'
|
|
import to_mmCIF from 'mol-model/structure/export/mmcif'
|
|
import { Vec3 } from 'mol-math/linear-algebra';
|
|
import { Vec3 } from 'mol-math/linear-algebra';
|
|
-//import { printUnits } from 'apps/structure-info/model';
|
|
|
|
-//import { EquivalenceClasses } from 'mol-data/util';
|
|
|
|
|
|
+// import { printUnits } from 'apps/structure-info/model';
|
|
|
|
+// import { EquivalenceClasses } from 'mol-data/util';
|
|
|
|
|
|
require('util.promisify').shim();
|
|
require('util.promisify').shim();
|
|
const readFileAsync = util.promisify(fs.readFile);
|
|
const readFileAsync = util.promisify(fs.readFile);
|
|
@@ -293,37 +293,37 @@ export namespace PropertyAccess {
|
|
export async function testAssembly(id: string, s: Structure) {
|
|
export async function testAssembly(id: string, s: Structure) {
|
|
console.time('assembly')
|
|
console.time('assembly')
|
|
const a = await StructureSymmetry.buildAssembly(s, '1').run();
|
|
const a = await StructureSymmetry.buildAssembly(s, '1').run();
|
|
- //const auth_comp_id = SP.residue.auth_comp_id;
|
|
|
|
- //const q1 = Query(Q.generators.atoms({ residueTest: l => auth_comp_id(l) === 'ALA' }));
|
|
|
|
- //const alas = await query(q1, a);
|
|
|
|
|
|
+ // const auth_comp_id = SP.residue.auth_comp_id;
|
|
|
|
+ // const q1 = Query(Q.generators.atoms({ residueTest: l => auth_comp_id(l) === 'ALA' }));
|
|
|
|
+ // const alas = await query(q1, a);
|
|
|
|
|
|
console.timeEnd('assembly')
|
|
console.timeEnd('assembly')
|
|
fs.writeFileSync(`${DATA_DIR}/${id}_assembly.bcif`, to_mmCIF(id, a, true));
|
|
fs.writeFileSync(`${DATA_DIR}/${id}_assembly.bcif`, to_mmCIF(id, a, true));
|
|
- //fs.writeFileSync(`${DATA_DIR}/${id}_assembly.bcif`, to_mmCIF(id, Selection.unionStructure(alas), true));
|
|
|
|
|
|
+ // fs.writeFileSync(`${DATA_DIR}/${id}_assembly.bcif`, to_mmCIF(id, Selection.unionStructure(alas), true));
|
|
console.log('exported');
|
|
console.log('exported');
|
|
}
|
|
}
|
|
|
|
|
|
export async function testSymmetry(id: string, s: Structure) {
|
|
export async function testSymmetry(id: string, s: Structure) {
|
|
console.time('symmetry')
|
|
console.time('symmetry')
|
|
const a = await StructureSymmetry.buildSymmetryRange(s, Vec3.create(-1, -1, -1), Vec3.create(1, 1, 1)).run();
|
|
const a = await StructureSymmetry.buildSymmetryRange(s, Vec3.create(-1, -1, -1), Vec3.create(1, 1, 1)).run();
|
|
- //const auth_comp_id = SP.residue.auth_comp_id;
|
|
|
|
- //const q1 = Query(Q.generators.atoms({ residueTest: l => auth_comp_id(l) === 'ALA' }));
|
|
|
|
- //const alas = await query(q1, a);
|
|
|
|
|
|
+ // const auth_comp_id = SP.residue.auth_comp_id;
|
|
|
|
+ // const q1 = Query(Q.generators.atoms({ residueTest: l => auth_comp_id(l) === 'ALA' }));
|
|
|
|
+ // const alas = await query(q1, a);
|
|
|
|
|
|
console.timeEnd('symmetry')
|
|
console.timeEnd('symmetry')
|
|
fs.writeFileSync(`${DATA_DIR}/${id}_symm.bcif`, to_mmCIF(id, a, true));
|
|
fs.writeFileSync(`${DATA_DIR}/${id}_symm.bcif`, to_mmCIF(id, a, true));
|
|
- //fs.writeFileSync(`${DATA_DIR}/${id}_assembly.bcif`, to_mmCIF(id, Selection.unionStructure(alas), true));
|
|
|
|
|
|
+ // fs.writeFileSync(`${DATA_DIR}/${id}_assembly.bcif`, to_mmCIF(id, Selection.unionStructure(alas), true));
|
|
console.log('exported');
|
|
console.log('exported');
|
|
}
|
|
}
|
|
|
|
|
|
export async function testIncludeSurroundings(id: string, s: Structure) {
|
|
export async function testIncludeSurroundings(id: string, s: Structure) {
|
|
- //const a = s;
|
|
|
|
|
|
+ // const a = s;
|
|
console.time('symmetry')
|
|
console.time('symmetry')
|
|
const a = await StructureSymmetry.buildSymmetryRange(s, Vec3.create(-2, -2, -2), Vec3.create(2, 2, 2)).run();
|
|
const a = await StructureSymmetry.buildSymmetryRange(s, Vec3.create(-2, -2, -2), Vec3.create(2, 2, 2)).run();
|
|
- //console.log(printUnits(a));
|
|
|
|
|
|
+ // console.log(printUnits(a));
|
|
|
|
|
|
const auth_comp_id = SP.residue.auth_comp_id, op = SP.unit.operator_name;
|
|
const auth_comp_id = SP.residue.auth_comp_id, op = SP.unit.operator_name;
|
|
- //const q1 = Q.generators.atoms({ residueTest: l => auth_comp_id(l) === 'REA' });
|
|
|
|
|
|
+ // const q1 = Q.generators.atoms({ residueTest: l => auth_comp_id(l) === 'REA' });
|
|
const q1 = Q.modifiers.includeSurroundings(Q.generators.atoms({
|
|
const q1 = Q.modifiers.includeSurroundings(Q.generators.atoms({
|
|
chainTest: l => op(l.element) === '1_555',
|
|
chainTest: l => op(l.element) === '1_555',
|
|
residueTest: l => auth_comp_id(l.element) === 'REA'
|
|
residueTest: l => auth_comp_id(l.element) === 'REA'
|
|
@@ -347,7 +347,7 @@ export namespace PropertyAccess {
|
|
// const e = it.move();
|
|
// const e = it.move();
|
|
// console.log(`${SP.unit.operator_name(e)} ${SP.atom.id(e)}`);
|
|
// console.log(`${SP.unit.operator_name(e)} ${SP.atom.id(e)}`);
|
|
// }
|
|
// }
|
|
- //fs.writeFileSync(`${DATA_DIR}/${id}_surr.bcif`, to_mmCIF(id, a, true));
|
|
|
|
|
|
+ // fs.writeFileSync(`${DATA_DIR}/${id}_surr.bcif`, to_mmCIF(id, a, true));
|
|
fs.writeFileSync(`${DATA_DIR}/${id}_surr.cif`, to_mmCIF(id, surr, false));
|
|
fs.writeFileSync(`${DATA_DIR}/${id}_surr.cif`, to_mmCIF(id, surr, false));
|
|
console.log('exported');
|
|
console.log('exported');
|
|
}
|
|
}
|
|
@@ -383,29 +383,29 @@ export namespace PropertyAccess {
|
|
}
|
|
}
|
|
|
|
|
|
export async function run() {
|
|
export async function run() {
|
|
- //const { structures, models/*, mmcif*/ } = await getBcif('1cbs');
|
|
|
|
|
|
+ // const { structures, models/*, mmcif*/ } = await getBcif('1cbs');
|
|
// const { structures, models } = await getBcif('3j3q');
|
|
// const { structures, models } = await getBcif('3j3q');
|
|
|
|
|
|
const { structures, models /*, mmcif*/ } = await readCIF('e:/test/quick/1cbs_updated.cif');
|
|
const { structures, models /*, mmcif*/ } = await readCIF('e:/test/quick/1cbs_updated.cif');
|
|
- //const { structures: s1, /*, mmcif*/ } = await readCIF('e:/test/quick/1tqn_updated.cif');
|
|
|
|
|
|
+ // const { structures: s1, /*, mmcif*/ } = await readCIF('e:/test/quick/1tqn_updated.cif');
|
|
|
|
|
|
// testGrouping(structures[0]);
|
|
// testGrouping(structures[0]);
|
|
// console.log('------');
|
|
// console.log('------');
|
|
// testGrouping(s1[0]);
|
|
// testGrouping(s1[0]);
|
|
- //const { structures, models/*, mmcif*/ } = await readCIF('e:/test/quick/5j7v_updated.cif');
|
|
|
|
|
|
+ // const { structures, models/*, mmcif*/ } = await readCIF('e:/test/quick/5j7v_updated.cif');
|
|
|
|
|
|
- //console.log(mmcif.pdbx_struct_oper_list.matrix.toArray());
|
|
|
|
|
|
+ // console.log(mmcif.pdbx_struct_oper_list.matrix.toArray());
|
|
// console.log(mmcif.pdbx_struct_oper_list.vector.toArray());
|
|
// console.log(mmcif.pdbx_struct_oper_list.vector.toArray());
|
|
|
|
|
|
- //await testAssembly('1hrv', structures[0]);
|
|
|
|
- //await testSymmetry('1cbs', structures[0]);
|
|
|
|
|
|
+ // await testAssembly('1hrv', structures[0]);
|
|
|
|
+ // await testSymmetry('1cbs', structures[0]);
|
|
await testIncludeSurroundings('1cbs', structures[0]);
|
|
await testIncludeSurroundings('1cbs', structures[0]);
|
|
// throw '';
|
|
// throw '';
|
|
|
|
|
|
// console.log(models[0].symmetry.assemblies);
|
|
// console.log(models[0].symmetry.assemblies);
|
|
|
|
|
|
|
|
|
|
- //const { structures, models } = await readCIF('e:/test/molstar/3j3q.bcif');
|
|
|
|
|
|
+ // const { structures, models } = await readCIF('e:/test/molstar/3j3q.bcif');
|
|
|
|
|
|
// fs.writeFileSync('e:/test/molstar/3j3q.bcif', to_mmCIF('test', structures[0], true));
|
|
// fs.writeFileSync('e:/test/molstar/3j3q.bcif', to_mmCIF('test', structures[0], true));
|
|
// return;
|
|
// return;
|
|
@@ -416,31 +416,31 @@ export namespace PropertyAccess {
|
|
|
|
|
|
console.log('bs', baseline(models[0]));
|
|
console.log('bs', baseline(models[0]));
|
|
console.log('sp', sumProperty(structures[0], l => l.unit.model.atomicConformation.atomId.value(l.element)));
|
|
console.log('sp', sumProperty(structures[0], l => l.unit.model.atomicConformation.atomId.value(l.element)));
|
|
- //console.log(sumPropertySegmented(structures[0], l => l.unit.model.atomSiteConformation.atomId.value(l.element)));
|
|
|
|
|
|
+ // console.log(sumPropertySegmented(structures[0], l => l.unit.model.atomSiteConformation.atomId.value(l.element)));
|
|
|
|
|
|
- //console.log(sumPropertySegmentedMutable(structures[0], l => l.unit.model.conformation.atomId.value(l.element));
|
|
|
|
- //console.log(sumPropertyAtomSetIt(structures[0], l => l.unit.model.atomSiteConformation.atomId.value(l.element)));
|
|
|
|
- //console.log(sumProperty(structures[0], Property.cachedAtomColumn(m => m.conformation.atomId)));
|
|
|
|
- //console.log(sumDirect(structures[0]));
|
|
|
|
- //console.log('r', sumPropertyResidue(structures[0], l => l.unit.hierarchy.residues.auth_seq_id.value(l.unit.residueIndex[l.atom])));
|
|
|
|
|
|
+ // console.log(sumPropertySegmentedMutable(structures[0], l => l.unit.model.conformation.atomId.value(l.element));
|
|
|
|
+ // console.log(sumPropertyAtomSetIt(structures[0], l => l.unit.model.atomSiteConformation.atomId.value(l.element)));
|
|
|
|
+ // console.log(sumProperty(structures[0], Property.cachedAtomColumn(m => m.conformation.atomId)));
|
|
|
|
+ // console.log(sumDirect(structures[0]));
|
|
|
|
+ // console.log('r', sumPropertyResidue(structures[0], l => l.unit.hierarchy.residues.auth_seq_id.value(l.unit.residueIndex[l.atom])));
|
|
|
|
|
|
console.time('atom.x');
|
|
console.time('atom.x');
|
|
console.log('atom.x', sumProperty(structures[0], SP.atom.x));
|
|
console.log('atom.x', sumProperty(structures[0], SP.atom.x));
|
|
console.timeEnd('atom.x');
|
|
console.timeEnd('atom.x');
|
|
console.time('__x')
|
|
console.time('__x')
|
|
- //console.log('__x', sumProperty(structures[0], l => l.unit.conformation.x[l.atom]));
|
|
|
|
|
|
+ // console.log('__x', sumProperty(structures[0], l => l.unit.conformation.x[l.atom]));
|
|
console.timeEnd('__x')
|
|
console.timeEnd('__x')
|
|
|
|
|
|
- //const authSeqId = Element.property(l => l.unit.hierarchy.residues.auth_seq_id.value(l.unit.residueIndex[l.atom]));
|
|
|
|
|
|
+ // const authSeqId = Element.property(l => l.unit.hierarchy.residues.auth_seq_id.value(l.unit.residueIndex[l.atom]));
|
|
|
|
|
|
- //const auth_seq_id = SP.residue.auth_seq_id;
|
|
|
|
|
|
+ // const auth_seq_id = SP.residue.auth_seq_id;
|
|
const auth_comp_id = SP.residue.auth_comp_id;
|
|
const auth_comp_id = SP.residue.auth_comp_id;
|
|
- //const auth_asym_id = SP.chain.auth_asym_id;
|
|
|
|
- //const set = new Set(['A', 'B', 'C', 'D']);
|
|
|
|
- //const q = Q.generators.atomGroups({ atomTest: l => auth_seq_id(l) < 3 });
|
|
|
|
|
|
+ // const auth_asym_id = SP.chain.auth_asym_id;
|
|
|
|
+ // const set = new Set(['A', 'B', 'C', 'D']);
|
|
|
|
+ // const q = Q.generators.atomGroups({ atomTest: l => auth_seq_id(l) < 3 });
|
|
const q = Q.generators.atoms({ atomTest: Q.pred.eq(l => SP.residue.auth_comp_id(l.element), 'ALA') });
|
|
const q = Q.generators.atoms({ atomTest: Q.pred.eq(l => SP.residue.auth_comp_id(l.element), 'ALA') });
|
|
const P = SP
|
|
const P = SP
|
|
- //const q0 = Q.generators.atoms({ atomTest: l => auth_comp_id(l) === 'ALA' });
|
|
|
|
|
|
+ // const q0 = Q.generators.atoms({ atomTest: l => auth_comp_id(l) === 'ALA' });
|
|
const q1 = (Q.generators.atoms({ residueTest: l => auth_comp_id(l.element) === 'ALA' }));
|
|
const q1 = (Q.generators.atoms({ residueTest: l => auth_comp_id(l.element) === 'ALA' }));
|
|
const q2 = (Q.generators.atoms({ residueTest: l => auth_comp_id(l.element) === 'ALA', groupBy: l => SP.residue.key(l.element) }));
|
|
const q2 = (Q.generators.atoms({ residueTest: l => auth_comp_id(l.element) === 'ALA', groupBy: l => SP.residue.key(l.element) }));
|
|
const q3 = (Q.generators.atoms({
|
|
const q3 = (Q.generators.atoms({
|
|
@@ -448,7 +448,7 @@ export namespace PropertyAccess {
|
|
residueTest: Q.pred.eq(l => P.residue.auth_comp_id(l.element), 'ALA')
|
|
residueTest: Q.pred.eq(l => P.residue.auth_comp_id(l.element), 'ALA')
|
|
}));
|
|
}));
|
|
await query(q, structures[0]);
|
|
await query(q, structures[0]);
|
|
- //console.log(to_mmCIF('test', Selection.union(q0r)));
|
|
|
|
|
|
+ // console.log(to_mmCIF('test', Selection.union(q0r)));
|
|
|
|
|
|
console.time('q1')
|
|
console.time('q1')
|
|
query(q1, structures[0]);
|
|
query(q1, structures[0]);
|
|
@@ -460,13 +460,13 @@ export namespace PropertyAccess {
|
|
const q2r = query(q2, structures[0]);
|
|
const q2r = query(q2, structures[0]);
|
|
console.timeEnd('q2')
|
|
console.timeEnd('q2')
|
|
console.log(StructureSelection.structureCount(q2r));
|
|
console.log(StructureSelection.structureCount(q2r));
|
|
- //console.log(q1(structures[0]));
|
|
|
|
|
|
+ // console.log(q1(structures[0]));
|
|
|
|
|
|
const col = models[0].atomicConformation.atomId.value;
|
|
const col = models[0].atomicConformation.atomId.value;
|
|
const suite = new B.Suite();
|
|
const suite = new B.Suite();
|
|
suite
|
|
suite
|
|
- //.add('test q', () => q1(structures[0]))
|
|
|
|
- //.add('test q', () => q(structures[0]))
|
|
|
|
|
|
+ // .add('test q', () => q1(structures[0]))
|
|
|
|
+ // .add('test q', () => q(structures[0]))
|
|
.add('test int', () => sumProperty(structures[0], l => col(l.element)))
|
|
.add('test int', () => sumProperty(structures[0], l => col(l.element)))
|
|
.add('test q1', async () => query(q1, structures[0]))
|
|
.add('test q1', async () => query(q1, structures[0]))
|
|
.add('test q3', async () => query(q3, structures[0]))
|
|
.add('test q3', async () => query(q3, structures[0]))
|
|
@@ -474,17 +474,17 @@ export namespace PropertyAccess {
|
|
|
|
|
|
// .add('baseline', () => baseline(models[0]))
|
|
// .add('baseline', () => baseline(models[0]))
|
|
// .add('direct', () => sumDirect(structures[0]))
|
|
// .add('direct', () => sumDirect(structures[0]))
|
|
- //.add('normal int', () => sumProperty(structures[0], l => l.unit.model.conformation.atomId.value(l.element))
|
|
|
|
- //.add('atom set it int', () => sumPropertyAtomSetIt(structures[0], l => l.unit.conformation.atomId.value(l.element))
|
|
|
|
|
|
+ // .add('normal int', () => sumProperty(structures[0], l => l.unit.model.conformation.atomId.value(l.element))
|
|
|
|
+ // .add('atom set it int', () => sumPropertyAtomSetIt(structures[0], l => l.unit.conformation.atomId.value(l.element))
|
|
// .add('segmented faster int', () => sumPropertySegmented(structures[0], l => l.unit.conformation.atomId.value(l.element))
|
|
// .add('segmented faster int', () => sumPropertySegmented(structures[0], l => l.unit.conformation.atomId.value(l.element))
|
|
// .add('faster int', () => sumProperty(structures[0], l => l.unit.conformation.atomId.value(l.element))
|
|
// .add('faster int', () => sumProperty(structures[0], l => l.unit.conformation.atomId.value(l.element))
|
|
- //.add('segmented faster _x', () => sumPropertySegmented(structures[0], l => l.unit.conformation.__x[l.atom]))
|
|
|
|
- //.add('faster _x', () => sumProperty(structures[0], l => l.unit.conformation.__x[l.atom] + l.unit.conformation.__y[l.atom] + l.unit.conformation.__z[l.atom]))
|
|
|
|
- //.add('segmented mut faster int', () => sumPropertySegmentedMutable(structures[0], l => l.unit.conformation.atomId.value(l.element))
|
|
|
|
- //.add('normal shortcut int', () => sumProperty(structures[0], l => l.conformation.atomId.value(l.element))
|
|
|
|
- //.add('cached int', () => sumProperty(structures[0], Property.cachedAtomColumn(m => m.conformation.atomId)))
|
|
|
|
- //.add('concat str', () => concatProperty(structures[0], l => l.unit.model.hierarchy.atoms.auth_atom_id.value(l.element))
|
|
|
|
- //.add('cached concat str', () => concatProperty(structures[0], Property.cachedAtomColumn(m => m.hierarchy.atoms.auth_atom_id)))
|
|
|
|
|
|
+ // .add('segmented faster _x', () => sumPropertySegmented(structures[0], l => l.unit.conformation.__x[l.atom]))
|
|
|
|
+ // .add('faster _x', () => sumProperty(structures[0], l => l.unit.conformation.__x[l.atom] + l.unit.conformation.__y[l.atom] + l.unit.conformation.__z[l.atom]))
|
|
|
|
+ // .add('segmented mut faster int', () => sumPropertySegmentedMutable(structures[0], l => l.unit.conformation.atomId.value(l.element))
|
|
|
|
+ // .add('normal shortcut int', () => sumProperty(structures[0], l => l.conformation.atomId.value(l.element))
|
|
|
|
+ // .add('cached int', () => sumProperty(structures[0], Property.cachedAtomColumn(m => m.conformation.atomId)))
|
|
|
|
+ // .add('concat str', () => concatProperty(structures[0], l => l.unit.model.hierarchy.atoms.auth_atom_id.value(l.element))
|
|
|
|
+ // .add('cached concat str', () => concatProperty(structures[0], Property.cachedAtomColumn(m => m.hierarchy.atoms.auth_atom_id)))
|
|
.on('cycle', (e: any) => console.log(String(e.target)))
|
|
.on('cycle', (e: any) => console.log(String(e.target)))
|
|
.run();
|
|
.run();
|
|
}
|
|
}
|