@@ -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