util.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /**
  2. * Copyright (c) 2017-2022 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author David Sehnal <david.sehnal@gmail.com>
  5. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  6. */
  7. import { AtomSite, BasicData } from './schema';
  8. import { Column, Table } from '../../../mol-data/db';
  9. export function getModelGroupName(model_id: number, data: BasicData) {
  10. const { ihm_model_group, ihm_model_group_link } = data;
  11. const link = Table.pickRow(ihm_model_group_link, i => ihm_model_group_link.model_id.value(i) === model_id);
  12. if (link) {
  13. const group = Table.pickRow(ihm_model_group, i => ihm_model_group.id.value(i) === link.group_id);
  14. if (group) return group.name;
  15. }
  16. return '';
  17. }
  18. //
  19. function hasPresentValues(column: Column<any>) {
  20. for (let i = 0, il = column.rowCount; i < il; i++) {
  21. if (column.valueKind(i) === Column.ValueKinds.Present) return true;
  22. }
  23. return false;
  24. }
  25. function substUndefinedColumn<T extends Table<any>>(table: T, a: keyof T, b: keyof T) {
  26. if (!table[a].isDefined || !hasPresentValues(table[a])) table[a] = table[b];
  27. if (!table[b].isDefined || !hasPresentValues(table[b])) table[b] = table[a];
  28. }
  29. /** Fix possibly missing auth_/label_ columns */
  30. export function getNormalizedAtomSite(atom_site: AtomSite) {
  31. const normalized = Table.ofColumns(atom_site._schema, atom_site);
  32. substUndefinedColumn(normalized, 'label_atom_id', 'auth_atom_id');
  33. substUndefinedColumn(normalized, 'label_comp_id', 'auth_comp_id');
  34. substUndefinedColumn(normalized, 'label_seq_id', 'auth_seq_id');
  35. substUndefinedColumn(normalized, 'label_asym_id', 'auth_asym_id');
  36. return normalized;
  37. }