Skip to content

Commit 79c6641

Browse files
authored
Merge pull request #2181 from dkoes/master
Fix for Issue #2178
2 parents 6f86167 + 43df5f8 commit 79c6641

File tree

4 files changed

+10614
-20
lines changed

4 files changed

+10614
-20
lines changed

prody/proteins/ciffile.py

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ def _parseMMCIFLines(atomgroup, lines, model, chain, subset,
334334
nModels += 1
335335
asize += 1
336336

337-
else:
337+
elif line.strip() == "#":
338338
if foundAtomBlock:
339339
doneAtomBlock = True
340340
stop = i
@@ -402,14 +402,22 @@ def _parseMMCIFLines(atomgroup, lines, model, chain, subset,
402402
asize = n_atoms
403403

404404
acount = 0
405-
for line in lines[start:stop]:
406-
startswith = line.split()[fields['group_PDB']]
405+
lineidx = start
406+
while lineidx < stop: # not a for loop since need to be able to skip lines
407+
line = lines[lineidx]
408+
lineidx += 1
409+
linefields = line.split()
410+
while len(linefields) <= fieldCounter: #line is wrapped
411+
lineidx += 1
412+
linefields += lines[lineidx].split()
413+
414+
startswith = linefields[fields['group_PDB']]
407415

408416
try:
409-
atomname = line.split()[fields['auth_atom_id']]
417+
atomname = linefields[fields['auth_atom_id']]
410418
except KeyError:
411419
try:
412-
atomname = line.split()[fields['label_atom_id']]
420+
atomname = linefields[fields['label_atom_id']]
413421
except KeyError:
414422
raise MMCIFParseError('mmCIF file is missing required atom IDs.')
415423

@@ -418,10 +426,10 @@ def _parseMMCIFLines(atomgroup, lines, model, chain, subset,
418426
atomname = atomname[1:-1]
419427

420428
try:
421-
resname = line.split()[fields['auth_comp_id']]
429+
resname = linefields[fields['auth_comp_id']]
422430
except KeyError:
423431
try:
424-
resname = line.split()[fields['label_comp_id']]
432+
resname = linefields[fields['label_comp_id']]
425433
except KeyError:
426434
raise MMCIFParseError('mmCIF file is missing required component IDs.')
427435

@@ -430,8 +438,8 @@ def _parseMMCIFLines(atomgroup, lines, model, chain, subset,
430438
if not (atomname in subset and resname in protein_resnames):
431439
continue
432440

433-
chID = line.split()[fields['label_asym_id']]
434-
segID = line.split()[fields['auth_asym_id']]
441+
chID = linefields[fields['label_asym_id']]
442+
segID = linefields[fields['auth_asym_id']]
435443

436444
if chain is not None:
437445
if isinstance(chain, str):
@@ -448,25 +456,25 @@ def _parseMMCIFLines(atomgroup, lines, model, chain, subset,
448456
if not segID in segment:
449457
continue
450458

451-
alt = line.split()[fields['label_alt_id']]
459+
alt = linefields[fields['label_alt_id']]
452460

453461
if alt == '.':
454462
alt = ' '
455463

456-
coordinates[acount] = [line.split()[fields['Cartn_x']],
457-
line.split()[fields['Cartn_y']],
458-
line.split()[fields['Cartn_z']]]
464+
coordinates[acount] = [linefields[fields['Cartn_x']],
465+
linefields[fields['Cartn_y']],
466+
linefields[fields['Cartn_z']]]
459467
atomnames[acount] = atomname
460468
resnames[acount] = resname
461469
chainids[acount] = chID
462470
segnames[acount] = segID
463471
hetero[acount] = startswith == 'HETATM' # True or False
464472

465473
try:
466-
resnums[acount] = line.split()[fields['auth_seq_id']]
474+
resnums[acount] = linefields[fields['auth_seq_id']]
467475
except KeyError:
468476
try:
469-
resnums[acount] = line.split()[fields['label_seq_id']]
477+
resnums[acount] = linefields[fields['label_seq_id']]
470478
except KeyError:
471479
raise MMCIFParseError('mmCIF file is missing required sequence IDs.')
472480

@@ -477,19 +485,19 @@ def _parseMMCIFLines(atomgroup, lines, model, chain, subset,
477485
altlocs[acount] = alt
478486

479487
try:
480-
icodes[acount] = line.split()[fields['pdbx_PDB_ins_code']]
488+
icodes[acount] = linefields[fields['pdbx_PDB_ins_code']]
481489
except KeyError:
482490
icodes[acount] = ''
483491

484492
if icodes[acount] == '?' or icodes[acount] == '.':
485493
icodes[acount] = ''
486494

487-
serials[acount] = line.split()[fields['id']]
488-
elements[acount] = line.split()[fields['type_symbol']]
495+
serials[acount] = linefields[fields['id']]
496+
elements[acount] = linefields[fields['type_symbol']]
489497
if 'B_iso_or_equiv' in fields.keys():
490-
bfactors[acount] = line.split()[fields['B_iso_or_equiv']]
498+
bfactors[acount] = linefields[fields['B_iso_or_equiv']]
491499
if 'occupancy' in fields.keys():
492-
occupancies[acount] = line.split()[fields['occupancy']]
500+
occupancies[acount] = linefields[fields['occupancy']]
493501

494502
acount += 1
495503

0 commit comments

Comments
 (0)