script.ts 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. // import * as util from 'util'
  2. import * as fs from 'fs'
  3. import { parse } from './reader/gro'
  4. import { Table } from './relational/table'
  5. const file = '1crn.gro'
  6. // const file = 'water.gro'
  7. // const file = 'test.gro'
  8. // const file = 'md_1u19_trj.gro'
  9. function getFloatArray(table: Table, name: string) {
  10. const column = table.getColumn(name)
  11. const n = table.rowCount
  12. const array = new Float32Array(n)
  13. for (let i = 0; i < n; ++i) {
  14. array[i] = column.getFloat(i)
  15. }
  16. return array
  17. }
  18. function getIntArray(table: Table, name: string) {
  19. const column = table.getColumn(name)
  20. const n = table.rowCount
  21. const array = new Int32Array(n)
  22. for (let i = 0; i < n; ++i) {
  23. array[i] = column.getInteger(i)
  24. }
  25. return array
  26. }
  27. fs.readFile(`./examples/${file}`, 'utf8', function (err,data) {
  28. if (err) {
  29. return console.log(err);
  30. }
  31. // console.log(data);
  32. console.time('parse')
  33. const parsed = parse(data)
  34. console.timeEnd('parse')
  35. if (parsed.isError) {
  36. console.log(parsed)
  37. } else {
  38. const groFile = parsed.result
  39. const header = groFile.blocks[0].getTable('header')
  40. if (header) {
  41. console.log(header.columnNames)
  42. console.log('title', header.getColumn('title').getString(0))
  43. console.log('timeInPs', header.getColumn('timeInPs').getFloat(0))
  44. console.log('numberOfAtoms', header.getColumn('numberOfAtoms').getInteger(0))
  45. console.log('boxX', header.getColumn('boxX').getFloat(0))
  46. console.log('boxY', header.getColumn('boxY').getFloat(0))
  47. console.log('boxZ', header.getColumn('boxZ').getFloat(0))
  48. } else {
  49. console.error('no header')
  50. }
  51. const atoms = groFile.blocks[0].getTable('atoms')
  52. if (atoms) {
  53. console.log(atoms.columnNames)
  54. console.log(`'${atoms.getColumn('residueNumber').getString(1)}'`)
  55. console.log(`'${atoms.getColumn('residueName').getString(1)}'`)
  56. console.log(`'${atoms.getColumn('atomName').getString(1)}'`)
  57. console.log(atoms.getColumn('z').getFloat(1))
  58. console.log(`'${atoms.getColumn('z').getString(1)}'`)
  59. const n = atoms.rowCount
  60. console.log('rowCount', n)
  61. console.time('getFloatArray x')
  62. const x = getFloatArray(atoms, 'x')
  63. console.timeEnd('getFloatArray x')
  64. console.log(x.length, x[0], x[x.length-1])
  65. console.time('getFloatArray y')
  66. const y = getFloatArray(atoms, 'y')
  67. console.timeEnd('getFloatArray y')
  68. console.log(y.length, y[0], y[y.length-1])
  69. console.time('getFloatArray z')
  70. const z = getFloatArray(atoms, 'z')
  71. console.timeEnd('getFloatArray z')
  72. console.log(z.length, z[0], z[z.length-1])
  73. console.time('getIntArray residueNumber')
  74. const residueNumber = getIntArray(atoms, 'residueNumber')
  75. console.timeEnd('getIntArray residueNumber')
  76. console.log(residueNumber.length, residueNumber[0], residueNumber[residueNumber.length-1])
  77. } else {
  78. console.error('no atoms')
  79. }
  80. }
  81. });