util.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /**
  2. * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  5. */
  6. import { readUrl, readFile, readUrlAsBuffer, readFileAsBuffer } from 'mol-util/read';
  7. import CIF, { CifBlock } from 'mol-io/reader/cif'
  8. import { Model, Format, StructureSymmetry, Structure } from 'mol-model/structure';
  9. import CCP4 from 'mol-io/reader/ccp4/parser'
  10. import { FileHandle } from 'mol-io/common/file-handle';
  11. import { Ccp4File } from 'mol-io/reader/ccp4/schema';
  12. import { volumeFromCcp4 } from 'mol-model/volume/formats/ccp4';
  13. import { parseDensityServerData } from 'mol-model/volume';
  14. // import { parse as parseObj } from 'mol-io/reader/obj/parser'
  15. // export async function getObjFromUrl(url: string) {
  16. // const data = await readUrlAs(url, false) as string
  17. // const comp = parseObj(data)
  18. // const parsed = await comp.run()
  19. // if (parsed.isError) throw parsed
  20. // return parsed.result
  21. // }
  22. export async function getCifFromData(data: string | Uint8Array) {
  23. const comp = CIF.parse(data)
  24. const parsed = await comp.run()
  25. if (parsed.isError) throw parsed
  26. return parsed.result
  27. }
  28. export async function getCifFromUrl(url: string, binary = false) {
  29. return getCifFromData(await readUrl(url, binary))
  30. }
  31. export async function getCifFromFile(file: File, binary = false) {
  32. return getCifFromData(await readFile(file, binary))
  33. }
  34. export async function getModelsFromMmcif(cif: CifBlock) {
  35. return await Model.create(Format.mmCIF(cif)).run()
  36. }
  37. export async function getStructureFromModel(model: Model, assembly: string) {
  38. const assemblies = model.symmetry.assemblies
  39. if (assembly === '0') {
  40. return Structure.ofModel(model)
  41. } else if (assemblies.find(a => a.id === assembly)) {
  42. return await StructureSymmetry.buildAssembly(Structure.ofModel(model), assembly).run()
  43. }
  44. }
  45. //
  46. export async function getCcp4FromUrl(url: string) {
  47. return getCcp4FromData(await readUrlAsBuffer(url))
  48. }
  49. export async function getCcp4FromFile(file: File) {
  50. return getCcp4FromData(await readFileAsBuffer(file))
  51. }
  52. export async function getCcp4FromData(data: Uint8Array) {
  53. const file = FileHandle.fromBuffer(data)
  54. const parsed = await CCP4(file).run()
  55. if (parsed.isError) throw parsed
  56. return parsed.result
  57. }
  58. export async function getVolumeFromCcp4(ccp4: Ccp4File) {
  59. return await volumeFromCcp4(ccp4).run()
  60. }
  61. //
  62. export async function getVolumeFromVolcif(cif: CifBlock) {
  63. return await parseDensityServerData(CIF.schema.densityServer(cif)).run()
  64. }