Skip to content
Snippets Groups Projects
Commit f5c619a4 authored by dsehnal's avatar dsehnal
Browse files

Fix Archive PDB assembly loading

parent 649e7791
No related branches found
No related tags found
No related merge requests found
......@@ -17,6 +17,7 @@ Note that since we don't clearly distinguish between a public and private interf
- Parse HEADER record when reading PDB file
- Support `ignoreHydrogens` in interactions representation
- Add hydroxyproline (HYP) commonly present in collagen molecules to the list of amino acids
- Fix assemblies for Archive PDB files (do not generate unique `label_asym_id` if `REMARK 350` is present)
## [v3.34.0] - 2023-04-16
......
......@@ -39,7 +39,7 @@ export function getAtomSiteTemplate(data: string, count: number) {
};
}
export function getAtomSite(sites: AtomSiteTemplate, terIndices: Set<number>): { [K in keyof mmCIF_Schema['atom_site'] | 'partial_charge']?: CifField } {
export function getAtomSite(sites: AtomSiteTemplate, terIndices: Set<number>, options: { hasAssemblies: boolean }): { [K in keyof mmCIF_Schema['atom_site'] | 'partial_charge']?: CifField } {
const pdbx_PDB_model_num = CifField.ofStrings(sites.pdbx_PDB_model_num);
const auth_asym_id = CifField.ofTokens(sites.auth_asym_id);
const auth_seq_id = CifField.ofTokens(sites.auth_seq_id);
......@@ -87,7 +87,7 @@ export function getAtomSite(sites: AtomSiteTemplate, terIndices: Set<number>): {
if (asymIdCounts.has(asymId)) {
// only change the chains name if there are TER records
// otherwise assume repeated chain name use is from interleaved chains
if (terIndices.has(i)) {
if (terIndices.has(i) && !options.hasAssemblies) {
const asymIdCount = asymIdCounts.get(asymId)! + 1;
asymIdCounts.set(asymId, asymIdCount);
currLabelAsymId = `${asymId}_${asymIdCount}`;
......
......@@ -54,6 +54,7 @@ export async function pdbToMmCif(pdb: PdbFile): Promise<CifFrame> {
let modelNum = 0, modelStr = '';
let conectRange: [number, number] | undefined = undefined;
let hasAssemblies = false;
const terIndices = new Set<number>();
for (let i = 0, _i = lines.count; i < _i; i++) {
......@@ -152,6 +153,7 @@ export async function pdbToMmCif(pdb: PdbFile): Promise<CifFrame> {
}
helperCategories.push(...parseRemark350(lines, i, j));
i = j - 1;
hasAssemblies = true;
}
break;
case 'S':
......@@ -208,7 +210,7 @@ export async function pdbToMmCif(pdb: PdbFile): Promise<CifFrame> {
atomSite.label_entity_id[i] = entityBuilder.getEntityId(compId, moleculeType, asymIds.value(i));
}
const atom_site = getAtomSite(atomSite, terIndices);
const atom_site = getAtomSite(atomSite, terIndices, { hasAssemblies });
if (!isPdbqt) delete atom_site.partial_charge;
if (conectRange) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment