p2s_mapper 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +148 -0
- package/dist/alignmentQuality.d.ts +58 -0
- package/dist/alignmentQuality.js +108 -0
- package/dist/alignmentQuality.js.map +1 -0
- package/dist/alphaFoldModels.d.ts +29 -0
- package/dist/alphaFoldModels.js +60 -0
- package/dist/alphaFoldModels.js.map +1 -0
- package/dist/caCoordsToPdb.d.ts +18 -0
- package/dist/caCoordsToPdb.js +95 -0
- package/dist/caCoordsToPdb.js.map +1 -0
- package/dist/chooseMappedEntity.d.ts +55 -0
- package/dist/chooseMappedEntity.js +140 -0
- package/dist/chooseMappedEntity.js.map +1 -0
- package/dist/coordinates.d.ts +66 -0
- package/dist/coordinates.js +66 -0
- package/dist/coordinates.js.map +1 -0
- package/dist/dbIds.d.ts +16 -0
- package/dist/dbIds.js +42 -0
- package/dist/dbIds.js.map +1 -0
- package/dist/extractPerResidueConfidence.d.ts +49 -0
- package/dist/extractPerResidueConfidence.js +42 -0
- package/dist/extractPerResidueConfidence.js.map +1 -0
- package/dist/extractStructureSequences.d.ts +142 -0
- package/dist/extractStructureSequences.js +217 -0
- package/dist/extractStructureSequences.js.map +1 -0
- package/dist/fetchUtils.d.ts +34 -0
- package/dist/fetchUtils.js +91 -0
- package/dist/fetchUtils.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/invertMap.d.ts +2 -0
- package/dist/invertMap.js +8 -0
- package/dist/invertMap.js.map +1 -0
- package/dist/isoformRanking.d.ts +47 -0
- package/dist/isoformRanking.js +91 -0
- package/dist/isoformRanking.js.map +1 -0
- package/dist/mappings.d.ts +58 -0
- package/dist/mappings.js +193 -0
- package/dist/mappings.js.map +1 -0
- package/dist/package.json +1 -0
- package/dist/pairwiseAlignment.d.ts +35 -0
- package/dist/pairwiseAlignment.js +337 -0
- package/dist/pairwiseAlignment.js.map +1 -0
- package/dist/pdbUniProtMapping.d.ts +75 -0
- package/dist/pdbUniProtMapping.js +241 -0
- package/dist/pdbUniProtMapping.js.map +1 -0
- package/dist/pdbeBestStructures.d.ts +23 -0
- package/dist/pdbeBestStructures.js +79 -0
- package/dist/pdbeBestStructures.js.map +1 -0
- package/dist/pdbeEntryMolecules.d.ts +7 -0
- package/dist/pdbeEntryMolecules.js +39 -0
- package/dist/pdbeEntryMolecules.js.map +1 -0
- package/dist/siftsNumbering.d.ts +23 -0
- package/dist/siftsNumbering.js +44 -0
- package/dist/siftsNumbering.js.map +1 -0
- package/dist/stripStopCodon.d.ts +15 -0
- package/dist/stripStopCodon.js +24 -0
- package/dist/stripStopCodon.js.map +1 -0
- package/dist/structureFormat.d.ts +40 -0
- package/dist/structureFormat.js +54 -0
- package/dist/structureFormat.js.map +1 -0
- package/dist/structureSources.d.ts +28 -0
- package/dist/structureSources.js +76 -0
- package/dist/structureSources.js.map +1 -0
- package/dist/structureUrls.d.ts +54 -0
- package/dist/structureUrls.js +147 -0
- package/dist/structureUrls.js.map +1 -0
- package/dist/types.d.ts +14 -0
- package/dist/types.js +27 -0
- package/dist/types.js.map +1 -0
- package/dist/uniProtSearch.d.ts +32 -0
- package/dist/uniProtSearch.js +114 -0
- package/dist/uniProtSearch.js.map +1 -0
- package/esm/alignmentQuality.d.ts +58 -0
- package/esm/alignmentQuality.js +100 -0
- package/esm/alignmentQuality.js.map +1 -0
- package/esm/alphaFoldModels.d.ts +29 -0
- package/esm/alphaFoldModels.js +55 -0
- package/esm/alphaFoldModels.js.map +1 -0
- package/esm/caCoordsToPdb.d.ts +18 -0
- package/esm/caCoordsToPdb.js +91 -0
- package/esm/caCoordsToPdb.js.map +1 -0
- package/esm/chooseMappedEntity.d.ts +55 -0
- package/esm/chooseMappedEntity.js +134 -0
- package/esm/chooseMappedEntity.js.map +1 -0
- package/esm/coordinates.d.ts +66 -0
- package/esm/coordinates.js +58 -0
- package/esm/coordinates.js.map +1 -0
- package/esm/dbIds.d.ts +16 -0
- package/esm/dbIds.js +35 -0
- package/esm/dbIds.js.map +1 -0
- package/esm/extractPerResidueConfidence.d.ts +49 -0
- package/esm/extractPerResidueConfidence.js +38 -0
- package/esm/extractPerResidueConfidence.js.map +1 -0
- package/esm/extractStructureSequences.d.ts +142 -0
- package/esm/extractStructureSequences.js +205 -0
- package/esm/extractStructureSequences.js.map +1 -0
- package/esm/fetchUtils.d.ts +34 -0
- package/esm/fetchUtils.js +82 -0
- package/esm/fetchUtils.js.map +1 -0
- package/esm/index.d.ts +23 -0
- package/esm/index.js +30 -0
- package/esm/index.js.map +1 -0
- package/esm/invertMap.d.ts +2 -0
- package/esm/invertMap.js +5 -0
- package/esm/invertMap.js.map +1 -0
- package/esm/isoformRanking.d.ts +47 -0
- package/esm/isoformRanking.js +86 -0
- package/esm/isoformRanking.js.map +1 -0
- package/esm/mappings.d.ts +58 -0
- package/esm/mappings.js +179 -0
- package/esm/mappings.js.map +1 -0
- package/esm/pairwiseAlignment.d.ts +35 -0
- package/esm/pairwiseAlignment.js +328 -0
- package/esm/pairwiseAlignment.js.map +1 -0
- package/esm/pdbUniProtMapping.d.ts +75 -0
- package/esm/pdbUniProtMapping.js +231 -0
- package/esm/pdbUniProtMapping.js.map +1 -0
- package/esm/pdbeBestStructures.d.ts +23 -0
- package/esm/pdbeBestStructures.js +73 -0
- package/esm/pdbeBestStructures.js.map +1 -0
- package/esm/pdbeEntryMolecules.d.ts +7 -0
- package/esm/pdbeEntryMolecules.js +35 -0
- package/esm/pdbeEntryMolecules.js.map +1 -0
- package/esm/siftsNumbering.d.ts +23 -0
- package/esm/siftsNumbering.js +40 -0
- package/esm/siftsNumbering.js.map +1 -0
- package/esm/stripStopCodon.d.ts +15 -0
- package/esm/stripStopCodon.js +20 -0
- package/esm/stripStopCodon.js.map +1 -0
- package/esm/structureFormat.d.ts +40 -0
- package/esm/structureFormat.js +48 -0
- package/esm/structureFormat.js.map +1 -0
- package/esm/structureSources.d.ts +28 -0
- package/esm/structureSources.js +71 -0
- package/esm/structureSources.js.map +1 -0
- package/esm/structureUrls.d.ts +54 -0
- package/esm/structureUrls.js +134 -0
- package/esm/structureUrls.js.map +1 -0
- package/esm/types.d.ts +14 -0
- package/esm/types.js +23 -0
- package/esm/types.js.map +1 -0
- package/esm/uniProtSearch.d.ts +32 -0
- package/esm/uniProtSearch.js +110 -0
- package/esm/uniProtSearch.js.map +1 -0
- package/package.json +63 -0
- package/src/alignmentQuality.ts +132 -0
- package/src/alphaFoldModels.ts +91 -0
- package/src/caCoordsToPdb.ts +111 -0
- package/src/chooseMappedEntity.ts +198 -0
- package/src/coordinates.ts +119 -0
- package/src/dbIds.ts +46 -0
- package/src/extractPerResidueConfidence.ts +88 -0
- package/src/extractStructureSequences.ts +342 -0
- package/src/fetchUtils.ts +110 -0
- package/src/index.ts +34 -0
- package/src/invertMap.ts +4 -0
- package/src/isoformRanking.ts +139 -0
- package/src/mappings.ts +230 -0
- package/src/pairwiseAlignment.ts +423 -0
- package/src/pdbUniProtMapping.ts +320 -0
- package/src/pdbeBestStructures.ts +94 -0
- package/src/pdbeEntryMolecules.ts +37 -0
- package/src/siftsNumbering.ts +61 -0
- package/src/stripStopCodon.ts +20 -0
- package/src/structureFormat.ts +70 -0
- package/src/structureSources.ts +101 -0
- package/src/structureUrls.ts +171 -0
- package/src/types.ts +30 -0
- package/src/uniProtSearch.ts +212 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdbUniProtMapping.js","sourceRoot":"","sources":["../src/pdbUniProtMapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface PdbStructureEntry {
|
|
2
|
+
pdbId: string;
|
|
3
|
+
experimentalMethod: string;
|
|
4
|
+
/** Å; absent for NMR and some EM entries */
|
|
5
|
+
resolution?: number;
|
|
6
|
+
/** 1-based inclusive UniProt positions the entry covers */
|
|
7
|
+
unpStart: number;
|
|
8
|
+
unpEnd: number;
|
|
9
|
+
/** share of the UniProt sequence the entry covers, 0..1 */
|
|
10
|
+
coverage: number;
|
|
11
|
+
chains: string[];
|
|
12
|
+
}
|
|
13
|
+
export declare function pdbeBestStructuresUrl(uniprotId: string): string;
|
|
14
|
+
export declare function isPdbId(value: string): boolean;
|
|
15
|
+
export declare function rcsbEntryUrl(pdbId: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Groups the per-chain rows into one entry per PDB id, keeping PDBe's order.
|
|
18
|
+
* An entry whose chains cover different UniProt ranges (a construct
|
|
19
|
+
* crystallised beside a different fragment of itself) keeps its first row's
|
|
20
|
+
* range, which is the one PDBe ranked it by. The response is keyed by
|
|
21
|
+
* accession, so the single entry is taken whatever its key.
|
|
22
|
+
*/
|
|
23
|
+
export declare function parseBestStructures(json: unknown): PdbStructureEntry[];
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// PDBe's SIFTS-derived list of the experimental structures covering a UniProt
|
|
2
|
+
// entry, one row per chain, ranked by PDBe (coverage, then resolution). The
|
|
3
|
+
// dialog shows one row per entry, so the chains of a homomer collapse into it.
|
|
4
|
+
export function pdbeBestStructuresUrl(uniprotId) {
|
|
5
|
+
return `https://www.ebi.ac.uk/pdbe/api/mappings/best_structures/${uniprotId}`;
|
|
6
|
+
}
|
|
7
|
+
// A PDB id is four characters, the first a digit: 1TUP, 6ZIO. Checked before
|
|
8
|
+
// a typed one reaches a fetch, so three characters on the way to four are not
|
|
9
|
+
// a 404 apiece.
|
|
10
|
+
export function isPdbId(value) {
|
|
11
|
+
return /^[1-9][A-Za-z0-9]{3}$/.test(value);
|
|
12
|
+
}
|
|
13
|
+
export function rcsbEntryUrl(pdbId) {
|
|
14
|
+
return `https://www.rcsb.org/structure/${pdbId.toUpperCase()}`;
|
|
15
|
+
}
|
|
16
|
+
function isRecord(value) {
|
|
17
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
18
|
+
}
|
|
19
|
+
function finiteNumber(value) {
|
|
20
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Groups the per-chain rows into one entry per PDB id, keeping PDBe's order.
|
|
24
|
+
* An entry whose chains cover different UniProt ranges (a construct
|
|
25
|
+
* crystallised beside a different fragment of itself) keeps its first row's
|
|
26
|
+
* range, which is the one PDBe ranked it by. The response is keyed by
|
|
27
|
+
* accession, so the single entry is taken whatever its key.
|
|
28
|
+
*/
|
|
29
|
+
export function parseBestStructures(json) {
|
|
30
|
+
const rows = isRecord(json) ? Object.values(json)[0] : undefined;
|
|
31
|
+
if (!Array.isArray(rows)) {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
const byId = new Map();
|
|
35
|
+
for (const row of rows) {
|
|
36
|
+
if (!isRecord(row)) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
const pdbId = typeof row.pdb_id === 'string' ? row.pdb_id : undefined;
|
|
40
|
+
const chain = typeof row.chain_id === 'string' ? row.chain_id : undefined;
|
|
41
|
+
const unpStart = finiteNumber(row.unp_start);
|
|
42
|
+
const unpEnd = finiteNumber(row.unp_end);
|
|
43
|
+
const coverage = finiteNumber(row.coverage);
|
|
44
|
+
if (pdbId === undefined ||
|
|
45
|
+
chain === undefined ||
|
|
46
|
+
unpStart === undefined ||
|
|
47
|
+
unpEnd === undefined ||
|
|
48
|
+
coverage === undefined) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const existing = byId.get(pdbId);
|
|
52
|
+
if (existing) {
|
|
53
|
+
if (!existing.chains.includes(chain)) {
|
|
54
|
+
existing.chains.push(chain);
|
|
55
|
+
}
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
const resolution = finiteNumber(row.resolution);
|
|
59
|
+
byId.set(pdbId, {
|
|
60
|
+
pdbId,
|
|
61
|
+
experimentalMethod: typeof row.experimental_method === 'string'
|
|
62
|
+
? row.experimental_method
|
|
63
|
+
: 'unknown',
|
|
64
|
+
...(resolution === undefined ? {} : { resolution }),
|
|
65
|
+
unpStart,
|
|
66
|
+
unpEnd,
|
|
67
|
+
coverage,
|
|
68
|
+
chains: [chain],
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return [...byId.values()];
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=pdbeBestStructures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdbeBestStructures.js","sourceRoot":"","sources":["../src/pdbeBestStructures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function pdbeEntryMoleculesUrl(pdbId: string): string;
|
|
2
|
+
/**
|
|
3
|
+
* One sequence per protein entity, in entity order. Nucleic-acid entities are
|
|
4
|
+
* left out: A, C, G, T and U are amino-acid letters too, so a DNA chain scores
|
|
5
|
+
* as a candidate rather than losing honestly.
|
|
6
|
+
*/
|
|
7
|
+
export declare function parseEntryMolecules(json: unknown): string[];
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// The polymer entities of a PDB entry, as PDBe already knows them. The dialog
|
|
2
|
+
// wants the entry's residues only to annotate the isoform list, and reading
|
|
3
|
+
// them out of the structure file meant downloading and parsing the whole
|
|
4
|
+
// mmCIF — minutes for a ribosome, for a label. This is a few kB of JSON, and
|
|
5
|
+
// the view downloads the file itself when the user actually launches.
|
|
6
|
+
export function pdbeEntryMoleculesUrl(pdbId) {
|
|
7
|
+
return `https://www.ebi.ac.uk/pdbe/api/pdb/entry/molecules/${pdbId.toLowerCase()}`;
|
|
8
|
+
}
|
|
9
|
+
function isRecord(value) {
|
|
10
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* One sequence per protein entity, in entity order. Nucleic-acid entities are
|
|
14
|
+
* left out: A, C, G, T and U are amino-acid letters too, so a DNA chain scores
|
|
15
|
+
* as a candidate rather than losing honestly.
|
|
16
|
+
*/
|
|
17
|
+
export function parseEntryMolecules(json) {
|
|
18
|
+
const entities = isRecord(json) ? Object.values(json)[0] : undefined;
|
|
19
|
+
if (!Array.isArray(entities)) {
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
return entities.flatMap(entity => {
|
|
23
|
+
if (!isRecord(entity)) {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
const { molecule_type: type, sequence } = entity;
|
|
27
|
+
return typeof type === 'string' &&
|
|
28
|
+
type.startsWith('polypeptide') &&
|
|
29
|
+
typeof sequence === 'string' &&
|
|
30
|
+
sequence.length > 0
|
|
31
|
+
? [sequence]
|
|
32
|
+
: [];
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=pdbeEntryMolecules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdbeEntryMolecules.js","sourceRoot":"","sources":["../src/pdbeEntryMolecules.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,4EAA4E;AAC5E,yEAAyE;AACzE,6EAA6E;AAC7E,sEAAsE;AAEtE,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,OAAO,sDAAsD,KAAK,CAAC,WAAW,EAAE,EAAE,CAAA;AACpF,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAa;IAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACpE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAA;IACX,CAAC;IACD,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAC/B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,CAAA;QACX,CAAC;QACD,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;QAChD,OAAO,OAAO,IAAI,KAAK,QAAQ;YAC7B,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;YAC9B,OAAO,QAAQ,KAAK,QAAQ;YAC5B,QAAQ,CAAC,MAAM,GAAG,CAAC;YACnB,CAAC,CAAC,CAAC,QAAQ,CAAC;YACZ,CAAC,CAAC,EAAE,CAAA;IACR,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { UniProtStructureSegment } from './pdbUniProtMapping.ts';
|
|
2
|
+
export interface AuthorRange {
|
|
3
|
+
start: number;
|
|
4
|
+
end: number;
|
|
5
|
+
chain: string;
|
|
6
|
+
/** author number minus UniProt number in the chosen segment */
|
|
7
|
+
shift: number;
|
|
8
|
+
}
|
|
9
|
+
/** The segments SIFTS gives one accession, chain ids and author numbers
|
|
10
|
+
* included, out of a whole entry's mappings. */
|
|
11
|
+
export declare function segmentsForAccession(mappings: readonly {
|
|
12
|
+
accession: string;
|
|
13
|
+
segments: UniProtStructureSegment[];
|
|
14
|
+
}[], accession: string): UniProtStructureSegment[];
|
|
15
|
+
/**
|
|
16
|
+
* The author-numbered range a UniProt range is cited by in the entry: the
|
|
17
|
+
* segment overlapping most of the range decides the shift. Undefined when no
|
|
18
|
+
* chain of the entry covers any of it, or when SIFTS named no author numbers.
|
|
19
|
+
*/
|
|
20
|
+
export declare function toAuthorRange(segments: readonly UniProtStructureSegment[], range: {
|
|
21
|
+
start: number;
|
|
22
|
+
end: number;
|
|
23
|
+
}): AuthorRange | undefined;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// How a PDB entry numbers the residues of a UniProt sequence. Author numbering
|
|
2
|
+
// is what a paper cites and what a viewer lights a named residue by, and it is
|
|
3
|
+
// not the UniProt numbering for every entry: haemoglobin's chains number from
|
|
4
|
+
// the mature protein, so author residue 1 is UniProt residue 2 (2HHB, measured
|
|
5
|
+
// 2026-09-12). SIFTS records the correspondence per chain segment, and
|
|
6
|
+
// `fetchUniProtStructureMappings` is what asks PDBe for it.
|
|
7
|
+
/** The segments SIFTS gives one accession, chain ids and author numbers
|
|
8
|
+
* included, out of a whole entry's mappings. */
|
|
9
|
+
export function segmentsForAccession(mappings, accession) {
|
|
10
|
+
return mappings.find(m => m.accession === accession)?.segments ?? [];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The author-numbered range a UniProt range is cited by in the entry: the
|
|
14
|
+
* segment overlapping most of the range decides the shift. Undefined when no
|
|
15
|
+
* chain of the entry covers any of it, or when SIFTS named no author numbers.
|
|
16
|
+
*/
|
|
17
|
+
export function toAuthorRange(segments, range) {
|
|
18
|
+
const overlap = (s) => Math.min(s.unpEnd, range.end) - Math.max(s.unpStart, range.start) + 1;
|
|
19
|
+
const best = segments
|
|
20
|
+
.flatMap(s => {
|
|
21
|
+
const { chainId, authorStart, unpStart, unpEnd } = s;
|
|
22
|
+
return chainId !== undefined &&
|
|
23
|
+
authorStart !== undefined &&
|
|
24
|
+
overlap(s) > 0
|
|
25
|
+
? [{ chainId, authorStart, unpStart, unpEnd, overlap: overlap(s) }]
|
|
26
|
+
: [];
|
|
27
|
+
})
|
|
28
|
+
.toSorted((a, b) => b.overlap - a.overlap)[0];
|
|
29
|
+
if (!best) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
const shift = best.authorStart - best.unpStart;
|
|
33
|
+
return {
|
|
34
|
+
start: Math.max(range.start, best.unpStart) + shift,
|
|
35
|
+
end: Math.min(range.end, best.unpEnd) + shift,
|
|
36
|
+
chain: best.chainId,
|
|
37
|
+
shift,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=siftsNumbering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"siftsNumbering.js","sourceRoot":"","sources":["../src/siftsNumbering.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,+EAA+E;AAC/E,8EAA8E;AAC9E,+EAA+E;AAC/E,uEAAuE;AACvE,4DAA4D;AAY5D;gDACgD;AAChD,MAAM,UAAU,oBAAoB,CAClC,QAGG,EACH,SAAiB;IAEjB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAA;AACtE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,QAA4C,EAC5C,KAAqC;IAErC,MAAM,OAAO,GAAG,CAAC,CAA0B,EAAE,EAAE,CAC7C,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACvE,MAAM,IAAI,GAAG,QAAQ;SAClB,OAAO,CAAC,CAAC,CAAC,EAAE;QACX,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;QACpD,OAAO,OAAO,KAAK,SAAS;YAC1B,WAAW,KAAK,SAAS;YACzB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;YACd,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,CAAC,CAAC,EAAE,CAAA;IACR,CAAC,CAAC;SACD,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAA;IAC9C,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK;QACnD,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK;QAC7C,KAAK,EAAE,IAAI,CAAC,OAAO;QACnB,KAAK;KACN,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drop the terminal stop codon(s) from a translated protein sequence.
|
|
3
|
+
*
|
|
4
|
+
* Only trailing `*` go: an interior stop (mis-annotated CDS, selenoprotein
|
|
5
|
+
* read-through) occupies a real codon position, and deleting it would shift
|
|
6
|
+
* every later residue out of step with g2p's codon-indexed transcript
|
|
7
|
+
* coordinates — offsetting every genome↔structure hover past that point.
|
|
8
|
+
*/
|
|
9
|
+
export declare function stripStopCodon(seq: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Strip every stop codon, including interior ones. Only for sequences handed to
|
|
12
|
+
* an external similarity search (Foldseek, AlphaFold), where `*` is not a valid
|
|
13
|
+
* query character and no coordinate depends on the result's positions.
|
|
14
|
+
*/
|
|
15
|
+
export declare function stripAllStopCodons(seq: string): string;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drop the terminal stop codon(s) from a translated protein sequence.
|
|
3
|
+
*
|
|
4
|
+
* Only trailing `*` go: an interior stop (mis-annotated CDS, selenoprotein
|
|
5
|
+
* read-through) occupies a real codon position, and deleting it would shift
|
|
6
|
+
* every later residue out of step with g2p's codon-indexed transcript
|
|
7
|
+
* coordinates — offsetting every genome↔structure hover past that point.
|
|
8
|
+
*/
|
|
9
|
+
export function stripStopCodon(seq) {
|
|
10
|
+
return seq.replace(/\*+$/, '');
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Strip every stop codon, including interior ones. Only for sequences handed to
|
|
14
|
+
* an external similarity search (Foldseek, AlphaFold), where `*` is not a valid
|
|
15
|
+
* query character and no coordinate depends on the result's positions.
|
|
16
|
+
*/
|
|
17
|
+
export function stripAllStopCodons(seq) {
|
|
18
|
+
return seq.replaceAll('*', '');
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=stripStopCodon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripStopCodon.js","sourceRoot":"","sources":["../src/stripStopCodon.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;AAChC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which molstar trajectory parser a structure needs.
|
|
3
|
+
*
|
|
4
|
+
* Getting this wrong is not a graceful failure in either direction: parsing a
|
|
5
|
+
* PDB file as mmCIF throws ("Unexpected token. Expected data_, loop_, or data
|
|
6
|
+
* name"), and — worse — parsing an mmCIF as PDB *succeeds* and yields a model
|
|
7
|
+
* with zero polymer entities and thousands of misread atoms, so the view loads
|
|
8
|
+
* with no sequence, no alignment and no genome mapping, and nothing reports an
|
|
9
|
+
* error.
|
|
10
|
+
*
|
|
11
|
+
* So detection lives here and is applied as the default at every entry point,
|
|
12
|
+
* rather than at one of them.
|
|
13
|
+
*
|
|
14
|
+
* The two names are the subset of molstar's `BuiltInTrajectoryFormat` a
|
|
15
|
+
* structure loaded from a file or a url can be, spelled out rather than
|
|
16
|
+
* imported so nothing here depends on molstar.
|
|
17
|
+
*/
|
|
18
|
+
export type StructureFormat = 'pdb' | 'mmcif';
|
|
19
|
+
/** Trailing extension of a filename or URL, lowercased, ignoring any query or
|
|
20
|
+
* fragment and any `.gz` wrapper (`…/pdb1tup.ent.gz` -> `ent`). */
|
|
21
|
+
export declare function structureFileExtension(nameOrUrl: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Format for a filename or URL. Unknown extensions fall back to mmCIF, which is
|
|
24
|
+
* what every URL this plugin generates itself serves (AlphaFold and RCSB both
|
|
25
|
+
* hand out `.cif`).
|
|
26
|
+
*/
|
|
27
|
+
export declare function structureFormatFromName(nameOrUrl: string): StructureFormat;
|
|
28
|
+
/** Whether a URL points at a binary-encoded structure, which molstar must be
|
|
29
|
+
* told to download as bytes rather than text. */
|
|
30
|
+
export declare function isBinaryStructureUrl(url: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Format for structure text that arrived without a filename — an inline `data`
|
|
33
|
+
* snapshot, a pasted file, or the PDB the plugin synthesizes from Foldseek Cα
|
|
34
|
+
* coordinates. Sniffs the content, which is strictly more reliable than a name
|
|
35
|
+
* and is the only signal available here.
|
|
36
|
+
*
|
|
37
|
+
* mmCIF is line-oriented and its first meaningful line is a `data_` block
|
|
38
|
+
* header (comments and blank lines may precede it); PDB has none.
|
|
39
|
+
*/
|
|
40
|
+
export declare function structureFormatFromContent(data: string): StructureFormat;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// Only the PDB set is enumerated: mmCIF is the fallback (see below), so listing
|
|
2
|
+
// its extensions would be a second source of truth that could disagree.
|
|
3
|
+
const PDB_EXTENSIONS = new Set(['pdb', 'ent', 'pdb1', 'pdb2', 'pdb3']);
|
|
4
|
+
/** Trailing extension of a filename or URL, lowercased, ignoring any query or
|
|
5
|
+
* fragment and any `.gz` wrapper (`…/pdb1tup.ent.gz` -> `ent`). */
|
|
6
|
+
export function structureFileExtension(nameOrUrl) {
|
|
7
|
+
const path = nameOrUrl.split(/[?#]/)[0] ?? '';
|
|
8
|
+
const name = path.split('/').pop() ?? '';
|
|
9
|
+
const parts = name.toLowerCase().split('.');
|
|
10
|
+
if (parts.at(-1) === 'gz') {
|
|
11
|
+
parts.pop();
|
|
12
|
+
}
|
|
13
|
+
return parts.length > 1 ? (parts.at(-1) ?? '') : '';
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Format for a filename or URL. Unknown extensions fall back to mmCIF, which is
|
|
17
|
+
* what every URL this plugin generates itself serves (AlphaFold and RCSB both
|
|
18
|
+
* hand out `.cif`).
|
|
19
|
+
*/
|
|
20
|
+
export function structureFormatFromName(nameOrUrl) {
|
|
21
|
+
return PDB_EXTENSIONS.has(structureFileExtension(nameOrUrl)) ? 'pdb' : 'mmcif';
|
|
22
|
+
}
|
|
23
|
+
/** Whether a URL points at a binary-encoded structure, which molstar must be
|
|
24
|
+
* told to download as bytes rather than text. */
|
|
25
|
+
export function isBinaryStructureUrl(url) {
|
|
26
|
+
return structureFileExtension(url) === 'bcif';
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Format for structure text that arrived without a filename — an inline `data`
|
|
30
|
+
* snapshot, a pasted file, or the PDB the plugin synthesizes from Foldseek Cα
|
|
31
|
+
* coordinates. Sniffs the content, which is strictly more reliable than a name
|
|
32
|
+
* and is the only signal available here.
|
|
33
|
+
*
|
|
34
|
+
* mmCIF is line-oriented and its first meaningful line is a `data_` block
|
|
35
|
+
* header (comments and blank lines may precede it); PDB has none.
|
|
36
|
+
*/
|
|
37
|
+
export function structureFormatFromContent(data) {
|
|
38
|
+
// a data_ header can only appear in the first few lines; don't scan a 30MB
|
|
39
|
+
// structure to find out
|
|
40
|
+
for (const line of data.slice(0, 4096).split('\n')) {
|
|
41
|
+
const trimmed = line.trim();
|
|
42
|
+
if (trimmed !== '' && !trimmed.startsWith('#')) {
|
|
43
|
+
return trimmed.toLowerCase().startsWith('data_') ? 'mmcif' : 'pdb';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return 'pdb';
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=structureFormat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structureFormat.js","sourceRoot":"","sources":["../src/structureFormat.ts"],"names":[],"mappings":"AAmBA,gFAAgF;AAChF,wEAAwE;AACxE,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AAEtE;mEACmE;AACnE,MAAM,UAAU,sBAAsB,CAAC,SAAiB;IACtD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAA;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC3C,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC1B,KAAK,CAAC,GAAG,EAAE,CAAA;IACb,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,SAAiB;IACvD,OAAO,cAAc,CAAC,GAAG,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAA;AAChF,CAAC;AAED;iDACiD;AACjD,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,OAAO,sBAAsB,CAAC,GAAG,CAAC,KAAK,MAAM,CAAA;AAC/C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,2EAA2E;IAC3E,wBAAwB;IACxB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAC3B,IAAI,OAAO,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAA;QACpE,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { FetchOptions } from './fetchUtils.ts';
|
|
2
|
+
export interface ExperimentalStructure {
|
|
3
|
+
pdbId: string;
|
|
4
|
+
method: string;
|
|
5
|
+
/** Å; absent for NMR and some EM entries */
|
|
6
|
+
resolution?: number;
|
|
7
|
+
/** 1-based inclusive UniProt residues the entry covers */
|
|
8
|
+
start: number;
|
|
9
|
+
end: number;
|
|
10
|
+
/** fraction of the UniProt sequence the entry covers, 0..1 */
|
|
11
|
+
coverage: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function beaconsSummaryUrl(uniprotId: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* PDBe entries only, best-covering first and sharpest within a tie.
|
|
16
|
+
*
|
|
17
|
+
* Predicted entries (AlphaFold, SWISS-MODEL, AlphaFill) are left out because a
|
|
18
|
+
* prediction comes from AlphaFold's own API, which answers per model. And
|
|
19
|
+
* 3D-Beacons files SASBDB's small-angle-scattering fits under "experimentally
|
|
20
|
+
* determined" too, with numeric ids and near-full coverage — dystrophin's best
|
|
21
|
+
* "structure" by coverage was SASBDB 436 — which are not entries a residue
|
|
22
|
+
* mapping exists for. Hence the `provider === 'PDBe'` gate rather than the
|
|
23
|
+
* category alone.
|
|
24
|
+
*/
|
|
25
|
+
export declare function parseExperimentalStructures(json: unknown): ExperimentalStructure[];
|
|
26
|
+
/** Best-effort: an unreachable API reads as "no entries", which costs a
|
|
27
|
+
* structure suggestion and nothing else. */
|
|
28
|
+
export declare function fetchExperimentalStructures(uniprotId: string, opts?: FetchOptions): Promise<ExperimentalStructure[]>;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// The experimental structures 3D-Beacons knows for a UniProt entry: every PDBe
|
|
2
|
+
// entry mapped to the accession, with the UniProt range it covers and its
|
|
3
|
+
// resolution, in one CORS-enabled call. That is what lets a page offer a
|
|
4
|
+
// crystal structure beside a prediction without a PDB search of its own; take
|
|
5
|
+
// the entry id from here and ask `fetchUniProtStructureMappings` for its
|
|
6
|
+
// residue mapping.
|
|
7
|
+
import { rawfetch } from "./fetchUtils.js";
|
|
8
|
+
export function beaconsSummaryUrl(uniprotId) {
|
|
9
|
+
return `https://www.ebi.ac.uk/pdbe/pdbe-kb/3dbeacons/api/uniprot/summary/${encodeURIComponent(uniprotId)}.json?provider=pdbe`;
|
|
10
|
+
}
|
|
11
|
+
function isRecord(value) {
|
|
12
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
13
|
+
}
|
|
14
|
+
function finiteNumber(value) {
|
|
15
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* PDBe entries only, best-covering first and sharpest within a tie.
|
|
19
|
+
*
|
|
20
|
+
* Predicted entries (AlphaFold, SWISS-MODEL, AlphaFill) are left out because a
|
|
21
|
+
* prediction comes from AlphaFold's own API, which answers per model. And
|
|
22
|
+
* 3D-Beacons files SASBDB's small-angle-scattering fits under "experimentally
|
|
23
|
+
* determined" too, with numeric ids and near-full coverage — dystrophin's best
|
|
24
|
+
* "structure" by coverage was SASBDB 436 — which are not entries a residue
|
|
25
|
+
* mapping exists for. Hence the `provider === 'PDBe'` gate rather than the
|
|
26
|
+
* category alone.
|
|
27
|
+
*/
|
|
28
|
+
export function parseExperimentalStructures(json) {
|
|
29
|
+
const structures = isRecord(json) ? json.structures : undefined;
|
|
30
|
+
if (!Array.isArray(structures)) {
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
return structures
|
|
34
|
+
.flatMap(entry => {
|
|
35
|
+
const s = isRecord(entry) ? entry.summary : undefined;
|
|
36
|
+
if (!isRecord(s)) {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
const start = finiteNumber(s.uniprot_start);
|
|
40
|
+
const end = finiteNumber(s.uniprot_end);
|
|
41
|
+
const coverage = finiteNumber(s.coverage);
|
|
42
|
+
return typeof s.model_identifier === 'string' &&
|
|
43
|
+
s.provider === 'PDBe' &&
|
|
44
|
+
s.model_category === 'EXPERIMENTALLY DETERMINED' &&
|
|
45
|
+
start !== undefined &&
|
|
46
|
+
end !== undefined &&
|
|
47
|
+
coverage !== undefined
|
|
48
|
+
? [
|
|
49
|
+
{
|
|
50
|
+
pdbId: s.model_identifier.toLowerCase(),
|
|
51
|
+
method: typeof s.experimental_method === 'string'
|
|
52
|
+
? s.experimental_method
|
|
53
|
+
: 'experimental',
|
|
54
|
+
resolution: finiteNumber(s.resolution),
|
|
55
|
+
start,
|
|
56
|
+
end,
|
|
57
|
+
coverage,
|
|
58
|
+
},
|
|
59
|
+
]
|
|
60
|
+
: [];
|
|
61
|
+
})
|
|
62
|
+
.sort((a, b) => b.coverage - a.coverage ||
|
|
63
|
+
(a.resolution ?? Infinity) - (b.resolution ?? Infinity));
|
|
64
|
+
}
|
|
65
|
+
/** Best-effort: an unreachable API reads as "no entries", which costs a
|
|
66
|
+
* structure suggestion and nothing else. */
|
|
67
|
+
export async function fetchExperimentalStructures(uniprotId, opts) {
|
|
68
|
+
const res = await rawfetch(beaconsSummaryUrl(uniprotId), opts).catch(() => undefined);
|
|
69
|
+
return res?.ok ? parseExperimentalStructures(await res.json()) : [];
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=structureSources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structureSources.js","sourceRoot":"","sources":["../src/structureSources.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export declare function uniprotGffUrl(uniprotId: string): string;
|
|
2
|
+
export declare function uniprotFastaUrl(uniprotId: string): string;
|
|
3
|
+
export declare function uniprotEntryUrl(uniprotId: string): string;
|
|
4
|
+
/**
|
|
5
|
+
* The guessed filename of an accession's canonical AlphaFold model. A guess:
|
|
6
|
+
* the F1 fragment does not exist past the length cap and the version moves, so
|
|
7
|
+
* this is the last resort when the prediction API cannot be reached. Ask
|
|
8
|
+
* `fetchAlphaFoldModels` for the real files.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getAlphaFoldStructureUrl(uniprotId: string, version?: string): string;
|
|
11
|
+
export declare function getPdbStructureUrl(pdbId: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Resolve the `{ pdbId }` shorthand to a concrete structure URL, so a
|
|
14
|
+
* hand-authored snapshot or a short launch URL doesn't have to know RCSB's
|
|
15
|
+
* filename format. An explicit `url` (or inline `data`) always wins.
|
|
16
|
+
* Idempotent: re-resolving an already-resolved spec returns the same url.
|
|
17
|
+
*
|
|
18
|
+
* `uniprotId` deliberately resolves to no url here, and still outranks a
|
|
19
|
+
* `pdbId`. An accession's files are whatever AlphaFold DB currently holds — an
|
|
20
|
+
* isoform model, several fragments, a new model version — so the structure
|
|
21
|
+
* keeps the accession and the structure loader asks the prediction API which
|
|
22
|
+
* file to open.
|
|
23
|
+
*
|
|
24
|
+
* Shared by the Structure model's snapshot preprocessor and the
|
|
25
|
+
* LaunchView-ProteinView extension point, which would otherwise each carry
|
|
26
|
+
* their own copy of the same precedence rule.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveStructureUrl({ url, data, uniprotId, pdbId, }: {
|
|
29
|
+
url?: string;
|
|
30
|
+
data?: string;
|
|
31
|
+
uniprotId?: string;
|
|
32
|
+
pdbId?: string;
|
|
33
|
+
}): string | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* The PDB id of a structure URL from the PDB archive, lowercased, or undefined
|
|
36
|
+
* for any other URL. Accepts the filename forms those hosts serve, e.g.
|
|
37
|
+
* `1TUP.cif`, `pdb1tup.ent.gz`, `1tup_updated.cif`.
|
|
38
|
+
*/
|
|
39
|
+
export declare function getPdbIdFromUrl(url: string): string | undefined;
|
|
40
|
+
/** The accession of an AlphaFold model id or url, with its isoform suffix:
|
|
41
|
+
* `AF-P16442-F1-model_v6` gives P16442, `AF-P04637-2-F1-model_v6` P04637-2. */
|
|
42
|
+
export declare function getUniprotIdFromAlphaFoldTarget(target: string): string | undefined;
|
|
43
|
+
export declare function getStructureUrlFromTarget(target: string, db: string): string | undefined;
|
|
44
|
+
export declare function getConfidenceUrlFromTarget(target: string): string | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* What a structure is called in the UI: its PDB id, its AlphaFold accession,
|
|
47
|
+
* else the file's name. Shared by the view title, the alignment panel heading
|
|
48
|
+
* and the hover readout, so one structure reads the same everywhere.
|
|
49
|
+
*/
|
|
50
|
+
export declare function structureDisplayLabel({ url, data, uniprotId, }: {
|
|
51
|
+
url?: string;
|
|
52
|
+
data?: string;
|
|
53
|
+
uniprotId?: string;
|
|
54
|
+
}): string;
|