ihm.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /**
  2. * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author David Sehnal <david.sehnal@gmail.com>
  5. */
  6. import { mmCIF_Database as mmCIF, mmCIF_Schema } from 'mol-io/reader/cif/schema/mmcif'
  7. import CoarseGrained from '../../properties/coarse-grained'
  8. import { Entities } from '../../properties/common';
  9. import { Column } from 'mol-data/db';
  10. function coarseGrainedFromIHM(data: mmCIF, entities: Entities): CoarseGrained {
  11. if (data.ihm_model_list._rowCount === 0) return CoarseGrained.Empty;
  12. const { ihm_model_list, ihm_sphere_obj_site, ihm_gaussian_obj_site } = data;
  13. const modelIndex = Column.createIndexer(ihm_model_list.model_id);
  14. return {
  15. isDefined: true,
  16. modelList: ihm_model_list,
  17. spheres: getSpheres(ihm_sphere_obj_site, entities, modelIndex),
  18. gaussians: getGaussians(ihm_gaussian_obj_site, entities, modelIndex)
  19. };
  20. }
  21. function getSpheres(data: mmCIF['ihm_sphere_obj_site'], entities: Entities, modelIndex: (id: number) => number): CoarseGrained.Spheres {
  22. const { Cartn_x, Cartn_y, Cartn_z, object_radius: radius, rmsf } = data;
  23. const x = Cartn_x.toArray({ array: Float32Array });
  24. const y = Cartn_y.toArray({ array: Float32Array });
  25. const z = Cartn_z.toArray({ array: Float32Array });
  26. return { count: x.length, ...getCommonColumns(data, entities, modelIndex), x, y, z, radius, rmsf };
  27. }
  28. function getGaussians(data: mmCIF['ihm_gaussian_obj_site'], entities: Entities, modelIndex: (id: number) => number): CoarseGrained.Gaussians {
  29. const { mean_Cartn_x, mean_Cartn_y, mean_Cartn_z, weight, covariance_matrix } = data;
  30. const x = mean_Cartn_x.toArray({ array: Float32Array });
  31. const y = mean_Cartn_y.toArray({ array: Float32Array });
  32. const z = mean_Cartn_z.toArray({ array: Float32Array });
  33. return { count: x.length, ...getCommonColumns(data, entities, modelIndex), x, y, z, weight, covariance_matrix, matrix_space: mmCIF_Schema.ihm_gaussian_obj_site.covariance_matrix.space };
  34. }
  35. function getCommonColumns(data: mmCIF['ihm_sphere_obj_site'] | mmCIF['ihm_gaussian_obj_site'], entities: Entities, modelIndex: (id: number) => number) {
  36. const { model_id, entity_id, seq_id_begin, seq_id_end, asym_id } = data;
  37. return {
  38. entityKey: Column.mapToArray(entity_id, id => entities.getEntityIndex(id), Int32Array),
  39. modelKey: Column.mapToArray(model_id, modelIndex, Int32Array),
  40. asym_id,
  41. seq_id_begin,
  42. seq_id_end
  43. };
  44. }
  45. export { coarseGrainedFromIHM }