-
David Sehnal authoredDavid Sehnal authored
script.ts 4.70 KiB
/*
* Copyright (c) 2017 molio contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
* @author David Sehnal <david.sehnal@gmail.com>
*/
// import * as util from 'util'
import * as fs from 'fs'
import Gro from './reader/gro/parser'
import CIF from './reader/cif/index'
// const file = '1crn.gro'
// const file = 'water.gro'
// const file = 'test.gro'
const file = 'md_1u19_trj.gro'
async function runGro(input: string) {
console.time('parseGro');
const comp = Gro(input);
const running = comp.runObservable(Computation.observableContext({ updateRateMs: 250 }));
running.subscribe(p => console.log(`[Gro] ${(p.current / p.max * 100).toFixed(2)} (${p.elapsedMs | 0}ms)`));
const parsed = await running.result;
console.timeEnd('parseGro');
if (parsed.isError) {
console.log(parsed);
return;
}
const groFile = parsed.result
console.log('structure count: ', groFile.structures.length);
const data = groFile.structures[0];
// const header = groFile.blocks[0].getCategory('header')
const { header, atoms } = data;
console.log(JSON.stringify(header, null, 2));
console.log('number of atoms:', atoms.count);
console.log(`'${atoms.residueNumber.value(1)}'`)
console.log(`'${atoms.residueName.value(1)}'`)
console.log(`'${atoms.atomName.value(1)}'`)
console.log(atoms.z.value(1))
console.log(`'${atoms.z.value(1)}'`)
const n = atoms.count;
console.log('rowCount', n)
console.time('getFloatArray x')
const x = atoms.x.toArray({ array: Float32Array })
console.timeEnd('getFloatArray x')
console.log(x.length, x[0], x[x.length - 1])
console.time('getFloatArray y')
const y = atoms.y.toArray({ array: Float32Array })
console.timeEnd('getFloatArray y')
console.log(y.length, y[0], y[y.length - 1])
console.time('getFloatArray z')
const z = atoms.z.toArray({ array: Float32Array })
console.timeEnd('getFloatArray z')
console.log(z.length, z[0], z[z.length - 1])
console.time('getIntArray residueNumber')
const residueNumber = atoms.residueNumber.toArray({ array: Int32Array })
console.timeEnd('getIntArray residueNumber')
console.log(residueNumber.length, residueNumber[0], residueNumber[residueNumber.length - 1])
}
function _gro() {
fs.readFile(`./examples/${file}`, 'utf8', function (err, input) {
if (err) {
return console.log(err);
}
runGro(input)
});
}
_gro()
async function runCIF(input: string | Uint8Array) {
console.time('parseCIF');
const comp = typeof input === 'string' ? CIF.parseText(input) : CIF.parseBinary(input);
const running = comp.runObservable(Computation.observableContext({ updateRateMs: 250 }));
running.subscribe(p => console.log(`[CIF] ${(p.current / p.max * 100).toFixed(2)} (${p.elapsedMs | 0}ms)`));
const parsed = await running.result;
console.timeEnd('parseCIF');
if (parsed.isError) {
console.log(parsed);
return;
}
const data = parsed.result.blocks[0];
const atom_site = data.categories._atom_site;
console.log(atom_site.getField('Cartn_x')!.float(0));
//console.log(atom_site.getField('label_atom_id')!.toStringArray());
const mmcif = CIF.schema.mmCIF(data);
console.log(mmcif.atom_site.Cartn_x.value(0));
console.log(mmcif.entity.type.toArray());
console.log(mmcif.pdbx_struct_oper_list.matrix.value(0));
}
export function _cif() {
let path = `./examples/1cbs_updated.cif`;
path = 'c:/test/quick/3j3q.cif';
fs.readFile(path, 'utf8', function (err, input) {
if (err) {
return console.log(err);
}
console.log('------------------');
console.log('Text CIF:');
runCIF(input);
});
path = `./examples/1cbs_full.bcif`;
//const path = 'c:/test/quick/3j3q.cif';
fs.readFile(path, function (err, input) {
if (err) {
return console.log(err);
}
console.log('------------------');
console.log('BinaryCIF:');
const data = new Uint8Array(input.byteLength);
for (let i = 0; i < input.byteLength; i++) data[i] = input[i];
runCIF(input);
});
}
//_cif();
import Computation from './utils/computation'
const comp = new Computation(async ctx => {
for (let i = 0; i < 0; i++) {
await new Promise(res => setTimeout(res, 500));
if (ctx.requiresUpdate) await ctx.updateProgress('working', void 0, i, 2);
}
return 42;
});
async function testComp() {
const running = comp.runObservable();
running.subscribe(p => console.log(JSON.stringify(p)));
const ret = await running.result;
console.log('computation returned', ret);
}
testComp();