docs: def parse_atoms(self):
          '''All ATOM lines are parsed even though only one per residue needs to be parsed. The reason for parsing all the
             lines is just to sanity-checks that the ATOMs within one residue are consistent with each other.'''
  
          atom_site_header_tag = self.main_tag.getElementsByTagName("PDBx:atom_siteCategory")
          assert(len(atom_site_header_tag) == 1)
          atom_site_header_tag = atom_site_header_tag[0]
  
          atom_site_tags = atom_site_header_tag.getElementsByTagName("PDBx:atom_site")
  
          residue_map = {}
          residues_read = {}
          int_type = types.IntType
          for t in atom_site_tags:
              r, seqres, ResidueAA, Residue3AA = PDBML_slow.parse_atom_site(t, self.modified_residues)
              if r:
                  # skip certain ACE residues
                  if not(self.pdb_id in cases_with_ACE_residues_we_can_ignore and Residue3AA == 'ACE'):
                      full_residue_id = str(r)
                      if residues_read.get(full_residue_id):
                          assert(residues_read[full_residue_id] == (r.ResidueAA, seqres))
                      else:
                          residues_read[full_residue_id] = (r.ResidueAA, seqres)
                          residue_map[r.Chain] = residue_map.get(r.Chain, {})
                          assert(type(seqres) == int_type)
                          residue_map[r.Chain][str(r)] = seqres
  
          ## Create SequenceMap objects to map the ATOM Sequences to the SEQRES Sequences
          atom_to_seqres_sequence_maps = {}
          for chain_id, atom_seqres_mapping in residue_map.iteritems():
              atom_to_seqres_sequence_maps[chain_id] = SequenceMap.from_dict(atom_seqres_mapping)
  
          self.atom_to_seqres_sequence_maps = atom_to_seqres_sequence_maps