-
Alexander Rose authoredAlexander Rose authored
script.ts 3.33 KiB
/*
* Copyright (c) 2017 molio contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
// import * as util from 'util'
import * as fs from 'fs'
import { parse } from './reader/gro'
import { Table } from './relational/table'
const file = '1crn.gro'
// const file = 'water.gro'
// const file = 'test.gro'
// const file = 'md_1u19_trj.gro'
function getFloatArray(table: Table, name: string) {
const column = table.getColumn(name)
const n = table.rowCount
const array = new Float32Array(n)
for (let i = 0; i < n; ++i) {
array[i] = column.getFloat(i)
}
return array
}
function getIntArray(table: Table, name: string) {
const column = table.getColumn(name)
const n = table.rowCount
const array = new Int32Array(n)
for (let i = 0; i < n; ++i) {
array[i] = column.getInteger(i)
}
return array
}
fs.readFile(`./examples/${file}`, 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
// console.log(data);
console.time('parse')
const parsed = parse(data)
console.timeEnd('parse')
if (parsed.isError) {
console.log(parsed)
} else {
const groFile = parsed.result
const header = groFile.blocks[0].getTable('header')
if (header) {
console.log(header.columnNames)
console.log('title', header.getColumn('title').getString(0))
console.log('timeInPs', header.getColumn('timeInPs').getFloat(0))
console.log('numberOfAtoms', header.getColumn('numberOfAtoms').getInteger(0))
console.log('boxX', header.getColumn('boxX').getFloat(0))
console.log('boxY', header.getColumn('boxY').getFloat(0))
console.log('boxZ', header.getColumn('boxZ').getFloat(0))
} else {
console.error('no header')
}
const atoms = groFile.blocks[0].getTable('atoms')
if (atoms) {
console.log(atoms.columnNames)
console.log(`'${atoms.getColumn('residueNumber').getString(1)}'`)
console.log(`'${atoms.getColumn('residueName').getString(1)}'`)
console.log(`'${atoms.getColumn('atomName').getString(1)}'`)
console.log(atoms.getColumn('z').getFloat(1))
console.log(`'${atoms.getColumn('z').getString(1)}'`)
const n = atoms.rowCount
console.log('rowCount', n)
console.time('getFloatArray x')
const x = getFloatArray(atoms, 'x')
console.timeEnd('getFloatArray x')
console.log(x.length, x[0], x[x.length-1])
console.time('getFloatArray y')
const y = getFloatArray(atoms, 'y')
console.timeEnd('getFloatArray y')
console.log(y.length, y[0], y[y.length-1])
console.time('getFloatArray z')
const z = getFloatArray(atoms, 'z')
console.timeEnd('getFloatArray z')
console.log(z.length, z[0], z[z.length-1])
console.time('getIntArray residueNumber')
const residueNumber = getIntArray(atoms, 'residueNumber')
console.timeEnd('getIntArray residueNumber')
console.log(residueNumber.length, residueNumber[0], residueNumber[residueNumber.length-1])
} else {
console.error('no atoms')
}
}
});