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":"pairwiseAlignment.js","sourceRoot":"","sources":["../src/pairwiseAlignment.ts"],"names":[],"mappings":";;;AAsFA,8CAEC;AA2PD,0CAWC;AAMD,sCAWC;AAmBD,8BAMC;AAED,0CAoBC;AAED,8CAMC;AAnaD,iEAAiE;AACjE,kBAAkB;AAClB,MAAM,WAAW,GAAG,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,CAAC,CAAA;AACrH,kBAAkB;AAClB,MAAM,YAAY,GAAG;IACrB,iGAAiG;IAC/F,CAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAC,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAC,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAC,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAC,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAE,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAC,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAC,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAE,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAE,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAC,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;IACtG,CAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { FetchOptions } from './fetchUtils.ts';
|
|
2
|
+
/** One contiguous UniProt <-> structure correspondence for a single entity.
|
|
3
|
+
* `unp*` are 1-based UniProt positions; `struct*` are 0-based inclusive
|
|
4
|
+
* structure-sequence positions, this plugin's native coordinate. */
|
|
5
|
+
export interface UniProtStructureSegment {
|
|
6
|
+
entityId: string;
|
|
7
|
+
/** author chain id, when the response names it */
|
|
8
|
+
chainId?: string;
|
|
9
|
+
unpStart: number;
|
|
10
|
+
unpEnd: number;
|
|
11
|
+
structStart: number;
|
|
12
|
+
structEnd: number;
|
|
13
|
+
/** the endpoints' author residue numbers, the numbering a paper cites and a
|
|
14
|
+
* Mol* hover shows; absent when the response omits them */
|
|
15
|
+
authorStart?: number;
|
|
16
|
+
authorEnd?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface UniProtStructureMapping {
|
|
19
|
+
accession: string;
|
|
20
|
+
/** UniProt entry name, e.g. "P53_HUMAN" */
|
|
21
|
+
name?: string;
|
|
22
|
+
segments: UniProtStructureSegment[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Maps a 1-based UniProt position to a 0-based structure-sequence position.
|
|
26
|
+
* Returns undefined for positions outside the modeled region, so callers drop
|
|
27
|
+
* the feature instead of drawing it somewhere misleading.
|
|
28
|
+
*/
|
|
29
|
+
export type MapUniProtPosition = (uniprotPos: number) => number | undefined;
|
|
30
|
+
export declare function pdbeSiftsUrl(pdbId: string): string;
|
|
31
|
+
/** SIFTS for an entry, retried twice: one failed request would otherwise
|
|
32
|
+
* leave a fusion construct mapped onto its partner for the whole session. */
|
|
33
|
+
export declare function fetchUniProtStructureMappings(pdbId: string, opts?: FetchOptions): Promise<UniProtStructureMapping[]>;
|
|
34
|
+
/**
|
|
35
|
+
* Parses a PDBe `mappings/uniprot/{pdbId}` response into one entry per UniProt
|
|
36
|
+
* accession. Unparseable segments are skipped rather than failing the whole
|
|
37
|
+
* response — a chimera with one malformed segment still maps its other chains.
|
|
38
|
+
* The response is keyed by pdb id, so the single entry is taken whatever its key.
|
|
39
|
+
*/
|
|
40
|
+
export declare function parseUniProtStructureMappings(json: unknown): UniProtStructureMapping[];
|
|
41
|
+
/** The entity a SIFTS segment is matched against: its mmCIF id and the author
|
|
42
|
+
* chains carrying it. */
|
|
43
|
+
export interface SegmentEntity {
|
|
44
|
+
entityId: string;
|
|
45
|
+
chains: readonly string[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Picks the UniProt entry that describes a given entity, with its segments
|
|
49
|
+
* narrowed to that entity. Only the entity the plugin has mapped to the
|
|
50
|
+
* transcript is relevant — a heteromer maps each of its chains to a different
|
|
51
|
+
* accession, and using the wrong one would silently annotate the wrong protein.
|
|
52
|
+
* When several accessions cover the same entity (a chimeric construct) the one
|
|
53
|
+
* contributing the most residues wins.
|
|
54
|
+
*/
|
|
55
|
+
export declare function chooseUniProtMappingForEntity(mappings: UniProtStructureMapping[], entity: SegmentEntity | undefined): UniProtStructureMapping | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* Mapped structure positions that SIFTS assigns to a protein other than the
|
|
58
|
+
* transcript's, on a chain that fuses two. Local alignment bridges a fusion
|
|
59
|
+
* boundary, and on every GPCR fusion construct checked it scattered receptor
|
|
60
|
+
* residues onto the partner, 33 of them onto T4 lysozyme in 2RH1.
|
|
61
|
+
*
|
|
62
|
+
* `mapped` is each mapped structure position and whether its pair is
|
|
63
|
+
* identical. The transcript's own accession is the one whose covered positions
|
|
64
|
+
* are most often identical, plus a pseudocount, as the chain picker scores
|
|
65
|
+
* chains. A count of covered positions would not do: TP53's 11-residue peptide
|
|
66
|
+
* fused to CDK2 covers 11 positions against 224 chance hits on the kinase, and
|
|
67
|
+
* counting unmapped the peptide. Unless that accession reaches half identity
|
|
68
|
+
* the transcript is taken to be neither protein, and nothing is unmapped.
|
|
69
|
+
* Residues SIFTS assigns to no accession, such as tags, stay mapped.
|
|
70
|
+
*/
|
|
71
|
+
export declare function fusionPartnerPositions(mappings: UniProtStructureMapping[], entity: SegmentEntity | undefined, mapped: ReadonlyMap<number, boolean>): Set<number>;
|
|
72
|
+
/** 1-based UniProt position -> 0-based structure position, for an AlphaFold
|
|
73
|
+
* model whose sequence is the UniProt sequence. */
|
|
74
|
+
export declare const identityUniProtPositionMap: MapUniProtPosition;
|
|
75
|
+
export declare function makeUniProtPositionMap(segments: UniProtStructureSegment[]): MapUniProtPosition;
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// SIFTS UniProt <-> PDB residue mapping.
|
|
3
|
+
//
|
|
4
|
+
// UniProt feature coordinates are positions in the UniProt canonical sequence.
|
|
5
|
+
// For an AlphaFold model that *is* the structure's own sequence, so a feature at
|
|
6
|
+
// UniProt position p sits at structure position p - 1. For an experimental PDB
|
|
7
|
+
// entry it is not: the deposited construct is usually a fragment, often with
|
|
8
|
+
// tags or engineered residues, so the two numberings differ by a per-segment
|
|
9
|
+
// offset (1TUP's p53 chain starts at UniProt 94; 6VXX's spike SEQRES 33 is
|
|
10
|
+
// UniProt 14). SIFTS is the authoritative alignment between the two, published
|
|
11
|
+
// per entity/chain by PDBe.
|
|
12
|
+
//
|
|
13
|
+
// `residue_number` in the PDBe response is the 1-based index into the entity's
|
|
14
|
+
// SEQRES, i.e. label_seq_id, which is exactly this plugin's structure-sequence
|
|
15
|
+
// position + 1 (see applyLociInteractivity.ts for the other place that boundary
|
|
16
|
+
// is crossed).
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.identityUniProtPositionMap = void 0;
|
|
19
|
+
exports.pdbeSiftsUrl = pdbeSiftsUrl;
|
|
20
|
+
exports.fetchUniProtStructureMappings = fetchUniProtStructureMappings;
|
|
21
|
+
exports.parseUniProtStructureMappings = parseUniProtStructureMappings;
|
|
22
|
+
exports.chooseUniProtMappingForEntity = chooseUniProtMappingForEntity;
|
|
23
|
+
exports.fusionPartnerPositions = fusionPartnerPositions;
|
|
24
|
+
exports.makeUniProtPositionMap = makeUniProtPositionMap;
|
|
25
|
+
const fetchUtils_ts_1 = require("./fetchUtils.js");
|
|
26
|
+
function pdbeSiftsUrl(pdbId) {
|
|
27
|
+
return `https://www.ebi.ac.uk/pdbe/api/mappings/uniprot/${pdbId.toLowerCase()}`;
|
|
28
|
+
}
|
|
29
|
+
const SIFTS_RETRY_DELAYS_MS = [1000, 3000];
|
|
30
|
+
// bounded, since a view reports itself loading until SIFTS answers
|
|
31
|
+
const SIFTS_TIMEOUT_MS = 20_000;
|
|
32
|
+
/** SIFTS for an entry, retried twice: one failed request would otherwise
|
|
33
|
+
* leave a fusion construct mapped onto its partner for the whole session. */
|
|
34
|
+
async function fetchUniProtStructureMappings(pdbId, opts) {
|
|
35
|
+
const { signal: caller, ...rest } = opts ?? {};
|
|
36
|
+
const signal = caller ?? undefined;
|
|
37
|
+
const deadline = () => signal
|
|
38
|
+
? AbortSignal.any([signal, AbortSignal.timeout(SIFTS_TIMEOUT_MS)])
|
|
39
|
+
: AbortSignal.timeout(SIFTS_TIMEOUT_MS);
|
|
40
|
+
for (let attempt = 0;; attempt++) {
|
|
41
|
+
try {
|
|
42
|
+
return parseUniProtStructureMappings(await (0, fetchUtils_ts_1.jsonfetch)(pdbeSiftsUrl(pdbId), { ...rest, signal: deadline() }));
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
const delay = SIFTS_RETRY_DELAYS_MS[attempt];
|
|
46
|
+
if (delay === undefined) {
|
|
47
|
+
throw e;
|
|
48
|
+
}
|
|
49
|
+
await (0, fetchUtils_ts_1.timeout)(delay, signal);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function isRecord(value) {
|
|
54
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
55
|
+
}
|
|
56
|
+
function finiteNumber(value) {
|
|
57
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
58
|
+
}
|
|
59
|
+
function residueNumber(endpoint) {
|
|
60
|
+
return isRecord(endpoint) ? finiteNumber(endpoint.residue_number) : undefined;
|
|
61
|
+
}
|
|
62
|
+
function authorResidueNumber(endpoint) {
|
|
63
|
+
return isRecord(endpoint)
|
|
64
|
+
? finiteNumber(endpoint.author_residue_number)
|
|
65
|
+
: undefined;
|
|
66
|
+
}
|
|
67
|
+
function parseSegment(mapping) {
|
|
68
|
+
if (!isRecord(mapping)) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
const entityId = finiteNumber(mapping.entity_id);
|
|
72
|
+
const unpStart = finiteNumber(mapping.unp_start);
|
|
73
|
+
const unpEnd = finiteNumber(mapping.unp_end);
|
|
74
|
+
const structStart = residueNumber(mapping.start);
|
|
75
|
+
const structEnd = residueNumber(mapping.end);
|
|
76
|
+
const authorStart = authorResidueNumber(mapping.start);
|
|
77
|
+
const authorEnd = authorResidueNumber(mapping.end);
|
|
78
|
+
return entityId === undefined ||
|
|
79
|
+
unpStart === undefined ||
|
|
80
|
+
unpEnd === undefined ||
|
|
81
|
+
structStart === undefined ||
|
|
82
|
+
structEnd === undefined
|
|
83
|
+
? undefined
|
|
84
|
+
: {
|
|
85
|
+
entityId: String(entityId),
|
|
86
|
+
...(typeof mapping.chain_id === 'string'
|
|
87
|
+
? { chainId: mapping.chain_id }
|
|
88
|
+
: {}),
|
|
89
|
+
unpStart,
|
|
90
|
+
unpEnd,
|
|
91
|
+
// SEQRES/label_seq_id is 1-based, structure positions are 0-based
|
|
92
|
+
structStart: structStart - 1,
|
|
93
|
+
structEnd: structEnd - 1,
|
|
94
|
+
...(authorStart === undefined ? {} : { authorStart }),
|
|
95
|
+
...(authorEnd === undefined ? {} : { authorEnd }),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Parses a PDBe `mappings/uniprot/{pdbId}` response into one entry per UniProt
|
|
100
|
+
* accession. Unparseable segments are skipped rather than failing the whole
|
|
101
|
+
* response — a chimera with one malformed segment still maps its other chains.
|
|
102
|
+
* The response is keyed by pdb id, so the single entry is taken whatever its key.
|
|
103
|
+
*/
|
|
104
|
+
function parseUniProtStructureMappings(json) {
|
|
105
|
+
const entry = isRecord(json) ? Object.values(json)[0] : undefined;
|
|
106
|
+
const uniprot = isRecord(entry) ? entry.UniProt : undefined;
|
|
107
|
+
if (!isRecord(uniprot)) {
|
|
108
|
+
return [];
|
|
109
|
+
}
|
|
110
|
+
const result = [];
|
|
111
|
+
for (const [accession, value] of Object.entries(uniprot)) {
|
|
112
|
+
const mappings = isRecord(value) ? value.mappings : undefined;
|
|
113
|
+
const segments = Array.isArray(mappings)
|
|
114
|
+
? mappings.map(parseSegment).filter(s => s !== undefined)
|
|
115
|
+
: [];
|
|
116
|
+
if (segments.length > 0) {
|
|
117
|
+
result.push({
|
|
118
|
+
accession,
|
|
119
|
+
name: isRecord(value) && typeof value.name === 'string'
|
|
120
|
+
? value.name
|
|
121
|
+
: undefined,
|
|
122
|
+
segments,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
function coveredResidues(segments) {
|
|
129
|
+
return segments.reduce((a, s) => a + (s.structEnd - s.structStart + 1), 0);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* The segments of one accession that describe this entity. SIFTS numbers
|
|
133
|
+
* entities as the mmCIF does, and a PDB-format file loaded through Mol* numbers
|
|
134
|
+
* them per chain (1H26.pdb's chain C is entity 2, which in SIFTS is cyclin A),
|
|
135
|
+
* so a segment naming its chain is matched by chain.
|
|
136
|
+
*/
|
|
137
|
+
function segmentsForEntity(mapping, entity) {
|
|
138
|
+
return dedupeSegments(mapping.segments.filter(s => s.chainId === undefined
|
|
139
|
+
? s.entityId === entity.entityId
|
|
140
|
+
: entity.chains.includes(s.chainId)));
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Picks the UniProt entry that describes a given entity, with its segments
|
|
144
|
+
* narrowed to that entity. Only the entity the plugin has mapped to the
|
|
145
|
+
* transcript is relevant — a heteromer maps each of its chains to a different
|
|
146
|
+
* accession, and using the wrong one would silently annotate the wrong protein.
|
|
147
|
+
* When several accessions cover the same entity (a chimeric construct) the one
|
|
148
|
+
* contributing the most residues wins.
|
|
149
|
+
*/
|
|
150
|
+
function chooseUniProtMappingForEntity(mappings, entity) {
|
|
151
|
+
if (entity === undefined) {
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
let best;
|
|
155
|
+
for (const mapping of mappings) {
|
|
156
|
+
const segments = segmentsForEntity(mapping, entity);
|
|
157
|
+
if (segments.length > 0 &&
|
|
158
|
+
(!best || coveredResidues(segments) > coveredResidues(best.segments))) {
|
|
159
|
+
best = { ...mapping, segments };
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return best;
|
|
163
|
+
}
|
|
164
|
+
const OWN_PSEUDOCOUNT = 5;
|
|
165
|
+
const MIN_OWN_IDENTITY = 0.5;
|
|
166
|
+
/**
|
|
167
|
+
* Mapped structure positions that SIFTS assigns to a protein other than the
|
|
168
|
+
* transcript's, on a chain that fuses two. Local alignment bridges a fusion
|
|
169
|
+
* boundary, and on every GPCR fusion construct checked it scattered receptor
|
|
170
|
+
* residues onto the partner, 33 of them onto T4 lysozyme in 2RH1.
|
|
171
|
+
*
|
|
172
|
+
* `mapped` is each mapped structure position and whether its pair is
|
|
173
|
+
* identical. The transcript's own accession is the one whose covered positions
|
|
174
|
+
* are most often identical, plus a pseudocount, as the chain picker scores
|
|
175
|
+
* chains. A count of covered positions would not do: TP53's 11-residue peptide
|
|
176
|
+
* fused to CDK2 covers 11 positions against 224 chance hits on the kinase, and
|
|
177
|
+
* counting unmapped the peptide. Unless that accession reaches half identity
|
|
178
|
+
* the transcript is taken to be neither protein, and nothing is unmapped.
|
|
179
|
+
* Residues SIFTS assigns to no accession, such as tags, stay mapped.
|
|
180
|
+
*/
|
|
181
|
+
function fusionPartnerPositions(mappings, entity, mapped) {
|
|
182
|
+
const partners = new Set();
|
|
183
|
+
const byAccession = entity
|
|
184
|
+
? mappings
|
|
185
|
+
.map(m => segmentsForEntity(m, entity))
|
|
186
|
+
.filter(segments => segments.length > 0)
|
|
187
|
+
: [];
|
|
188
|
+
if (byAccession.length < 2) {
|
|
189
|
+
return partners;
|
|
190
|
+
}
|
|
191
|
+
const covers = (segments, pos) => segments.some(s => pos >= s.structStart && pos <= s.structEnd);
|
|
192
|
+
const identity = byAccession.map(segments => {
|
|
193
|
+
let covered = 0;
|
|
194
|
+
let identical = 0;
|
|
195
|
+
for (const [pos, same] of mapped) {
|
|
196
|
+
if (covers(segments, pos)) {
|
|
197
|
+
covered++;
|
|
198
|
+
identical += same ? 1 : 0;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return identical / (covered + OWN_PSEUDOCOUNT);
|
|
202
|
+
});
|
|
203
|
+
const ownIdentity = Math.max(...identity);
|
|
204
|
+
if (ownIdentity < MIN_OWN_IDENTITY) {
|
|
205
|
+
return partners;
|
|
206
|
+
}
|
|
207
|
+
const own = byAccession[identity.indexOf(ownIdentity)];
|
|
208
|
+
for (const pos of mapped.keys()) {
|
|
209
|
+
if (!covers(own, pos) &&
|
|
210
|
+
byAccession.some(segments => segments !== own && covers(segments, pos))) {
|
|
211
|
+
partners.add(pos);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return partners;
|
|
215
|
+
}
|
|
216
|
+
// SIFTS lists one mapping per *chain*, so the several chains of a homodimer
|
|
217
|
+
// repeat the same entity-level correspondence. They collapse to one segment.
|
|
218
|
+
function dedupeSegments(segments) {
|
|
219
|
+
const seen = new Set();
|
|
220
|
+
return segments.filter(s => {
|
|
221
|
+
const key = `${s.unpStart}-${s.unpEnd}-${s.structStart}-${s.structEnd}`;
|
|
222
|
+
const isNew = !seen.has(key);
|
|
223
|
+
seen.add(key);
|
|
224
|
+
return isNew;
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
/** 1-based UniProt position -> 0-based structure position, for an AlphaFold
|
|
228
|
+
* model whose sequence is the UniProt sequence. */
|
|
229
|
+
const identityUniProtPositionMap = uniprotPos => uniprotPos - 1;
|
|
230
|
+
exports.identityUniProtPositionMap = identityUniProtPositionMap;
|
|
231
|
+
function makeUniProtPositionMap(segments) {
|
|
232
|
+
return uniprotPos => {
|
|
233
|
+
const segment = segments.find(s => uniprotPos >= s.unpStart && uniprotPos <= s.unpEnd);
|
|
234
|
+
if (!segment) {
|
|
235
|
+
return undefined;
|
|
236
|
+
}
|
|
237
|
+
const pos = segment.structStart + (uniprotPos - segment.unpStart);
|
|
238
|
+
return pos <= segment.structEnd ? pos : undefined;
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=pdbUniProtMapping.js.map
|
|
@@ -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,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// PDBe's SIFTS-derived list of the experimental structures covering a UniProt
|
|
3
|
+
// entry, one row per chain, ranked by PDBe (coverage, then resolution). The
|
|
4
|
+
// dialog shows one row per entry, so the chains of a homomer collapse into it.
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.pdbeBestStructuresUrl = pdbeBestStructuresUrl;
|
|
7
|
+
exports.isPdbId = isPdbId;
|
|
8
|
+
exports.rcsbEntryUrl = rcsbEntryUrl;
|
|
9
|
+
exports.parseBestStructures = parseBestStructures;
|
|
10
|
+
function pdbeBestStructuresUrl(uniprotId) {
|
|
11
|
+
return `https://www.ebi.ac.uk/pdbe/api/mappings/best_structures/${uniprotId}`;
|
|
12
|
+
}
|
|
13
|
+
// A PDB id is four characters, the first a digit: 1TUP, 6ZIO. Checked before
|
|
14
|
+
// a typed one reaches a fetch, so three characters on the way to four are not
|
|
15
|
+
// a 404 apiece.
|
|
16
|
+
function isPdbId(value) {
|
|
17
|
+
return /^[1-9][A-Za-z0-9]{3}$/.test(value);
|
|
18
|
+
}
|
|
19
|
+
function rcsbEntryUrl(pdbId) {
|
|
20
|
+
return `https://www.rcsb.org/structure/${pdbId.toUpperCase()}`;
|
|
21
|
+
}
|
|
22
|
+
function isRecord(value) {
|
|
23
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
24
|
+
}
|
|
25
|
+
function finiteNumber(value) {
|
|
26
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Groups the per-chain rows into one entry per PDB id, keeping PDBe's order.
|
|
30
|
+
* An entry whose chains cover different UniProt ranges (a construct
|
|
31
|
+
* crystallised beside a different fragment of itself) keeps its first row's
|
|
32
|
+
* range, which is the one PDBe ranked it by. The response is keyed by
|
|
33
|
+
* accession, so the single entry is taken whatever its key.
|
|
34
|
+
*/
|
|
35
|
+
function parseBestStructures(json) {
|
|
36
|
+
const rows = isRecord(json) ? Object.values(json)[0] : undefined;
|
|
37
|
+
if (!Array.isArray(rows)) {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
const byId = new Map();
|
|
41
|
+
for (const row of rows) {
|
|
42
|
+
if (!isRecord(row)) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
const pdbId = typeof row.pdb_id === 'string' ? row.pdb_id : undefined;
|
|
46
|
+
const chain = typeof row.chain_id === 'string' ? row.chain_id : undefined;
|
|
47
|
+
const unpStart = finiteNumber(row.unp_start);
|
|
48
|
+
const unpEnd = finiteNumber(row.unp_end);
|
|
49
|
+
const coverage = finiteNumber(row.coverage);
|
|
50
|
+
if (pdbId === undefined ||
|
|
51
|
+
chain === undefined ||
|
|
52
|
+
unpStart === undefined ||
|
|
53
|
+
unpEnd === undefined ||
|
|
54
|
+
coverage === undefined) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const existing = byId.get(pdbId);
|
|
58
|
+
if (existing) {
|
|
59
|
+
if (!existing.chains.includes(chain)) {
|
|
60
|
+
existing.chains.push(chain);
|
|
61
|
+
}
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const resolution = finiteNumber(row.resolution);
|
|
65
|
+
byId.set(pdbId, {
|
|
66
|
+
pdbId,
|
|
67
|
+
experimentalMethod: typeof row.experimental_method === 'string'
|
|
68
|
+
? row.experimental_method
|
|
69
|
+
: 'unknown',
|
|
70
|
+
...(resolution === undefined ? {} : { resolution }),
|
|
71
|
+
unpStart,
|
|
72
|
+
unpEnd,
|
|
73
|
+
coverage,
|
|
74
|
+
chains: [chain],
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
return [...byId.values()];
|
|
78
|
+
}
|
|
79
|
+
//# 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,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// The polymer entities of a PDB entry, as PDBe already knows them. The dialog
|
|
3
|
+
// wants the entry's residues only to annotate the isoform list, and reading
|
|
4
|
+
// them out of the structure file meant downloading and parsing the whole
|
|
5
|
+
// mmCIF — minutes for a ribosome, for a label. This is a few kB of JSON, and
|
|
6
|
+
// the view downloads the file itself when the user actually launches.
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.pdbeEntryMoleculesUrl = pdbeEntryMoleculesUrl;
|
|
9
|
+
exports.parseEntryMolecules = parseEntryMolecules;
|
|
10
|
+
function pdbeEntryMoleculesUrl(pdbId) {
|
|
11
|
+
return `https://www.ebi.ac.uk/pdbe/api/pdb/entry/molecules/${pdbId.toLowerCase()}`;
|
|
12
|
+
}
|
|
13
|
+
function isRecord(value) {
|
|
14
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* One sequence per protein entity, in entity order. Nucleic-acid entities are
|
|
18
|
+
* left out: A, C, G, T and U are amino-acid letters too, so a DNA chain scores
|
|
19
|
+
* as a candidate rather than losing honestly.
|
|
20
|
+
*/
|
|
21
|
+
function parseEntryMolecules(json) {
|
|
22
|
+
const entities = isRecord(json) ? Object.values(json)[0] : undefined;
|
|
23
|
+
if (!Array.isArray(entities)) {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
return entities.flatMap(entity => {
|
|
27
|
+
if (!isRecord(entity)) {
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
const { molecule_type: type, sequence } = entity;
|
|
31
|
+
return typeof type === 'string' &&
|
|
32
|
+
type.startsWith('polypeptide') &&
|
|
33
|
+
typeof sequence === 'string' &&
|
|
34
|
+
sequence.length > 0
|
|
35
|
+
? [sequence]
|
|
36
|
+
: [];
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
//# 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,sDAEC;AAWD,kDAiBC;AA9BD,SAAgB,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,SAAgB,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,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// How a PDB entry numbers the residues of a UniProt sequence. Author numbering
|
|
3
|
+
// is what a paper cites and what a viewer lights a named residue by, and it is
|
|
4
|
+
// not the UniProt numbering for every entry: haemoglobin's chains number from
|
|
5
|
+
// the mature protein, so author residue 1 is UniProt residue 2 (2HHB, measured
|
|
6
|
+
// 2026-09-12). SIFTS records the correspondence per chain segment, and
|
|
7
|
+
// `fetchUniProtStructureMappings` is what asks PDBe for it.
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.segmentsForAccession = segmentsForAccession;
|
|
10
|
+
exports.toAuthorRange = toAuthorRange;
|
|
11
|
+
/** The segments SIFTS gives one accession, chain ids and author numbers
|
|
12
|
+
* included, out of a whole entry's mappings. */
|
|
13
|
+
function segmentsForAccession(mappings, accession) {
|
|
14
|
+
return mappings.find(m => m.accession === accession)?.segments ?? [];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The author-numbered range a UniProt range is cited by in the entry: the
|
|
18
|
+
* segment overlapping most of the range decides the shift. Undefined when no
|
|
19
|
+
* chain of the entry covers any of it, or when SIFTS named no author numbers.
|
|
20
|
+
*/
|
|
21
|
+
function toAuthorRange(segments, range) {
|
|
22
|
+
const overlap = (s) => Math.min(s.unpEnd, range.end) - Math.max(s.unpStart, range.start) + 1;
|
|
23
|
+
const best = segments
|
|
24
|
+
.flatMap(s => {
|
|
25
|
+
const { chainId, authorStart, unpStart, unpEnd } = s;
|
|
26
|
+
return chainId !== undefined &&
|
|
27
|
+
authorStart !== undefined &&
|
|
28
|
+
overlap(s) > 0
|
|
29
|
+
? [{ chainId, authorStart, unpStart, unpEnd, overlap: overlap(s) }]
|
|
30
|
+
: [];
|
|
31
|
+
})
|
|
32
|
+
.toSorted((a, b) => b.overlap - a.overlap)[0];
|
|
33
|
+
if (!best) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
const shift = best.authorStart - best.unpStart;
|
|
37
|
+
return {
|
|
38
|
+
start: Math.max(range.start, best.unpStart) + shift,
|
|
39
|
+
end: Math.min(range.end, best.unpEnd) + shift,
|
|
40
|
+
chain: best.chainId,
|
|
41
|
+
shift,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# 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;;AAc5D,oDAQC;AAOD,sCA0BC;AA3CD;gDACgD;AAChD,SAAgB,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,SAAgB,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;
|