util.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /**
  2. * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  5. */
  6. import { CIF } from '../../../../mol-io/reader/cif'
  7. import { parsePDB } from '../../../../mol-io/reader/pdb/parser';
  8. export async function parseCif(data: string|Uint8Array) {
  9. const comp = CIF.parse(data);
  10. const parsed = await comp.run();
  11. if (parsed.isError) throw parsed;
  12. return parsed.result;
  13. }
  14. export async function parsePDBfile(data: string, id: string) {
  15. const comp = parsePDB(data, id);
  16. const parsed = await comp.run();
  17. if (parsed.isError) throw parsed;
  18. return parsed.result;
  19. }
  20. async function downloadCif(url: string, isBinary: boolean) {
  21. const data = await fetch(url);
  22. return parseCif(isBinary ? new Uint8Array(await data.arrayBuffer()) : await data.text());
  23. }
  24. async function downloadPDB(url: string, id: string) {
  25. const data = await fetch(url);
  26. return parsePDBfile(await data.text(), id);
  27. }
  28. export async function getFromPdb(id: string) {
  29. const parsed = await downloadCif(`https://files.rcsb.org/download/${id}.cif`, false);
  30. return parsed.blocks[0];
  31. }
  32. function getCellPackDataUrl(id: string, baseUrl: string) {
  33. const url = `${baseUrl}/other/${id}`
  34. return url.endsWith('.pdb') ? url : `${url}.pdb`
  35. }
  36. export async function getFromCellPackDB(id: string, baseUrl: string) {
  37. const name = id.endsWith('.pdb') ? id.substring(0, id.length - 4) : id
  38. const parsed = await downloadPDB(getCellPackDataUrl(id, baseUrl), name);
  39. return parsed;
  40. }
  41. export type IngredientFiles = { [name: string]: File }