docs: def _setup_atoms(self):
          """Derive Atom objects from the record."""
          # Delete existing atoms
          self._atoms = {}
          # Create atoms
          aids = self.record['atoms']['aid']
          elements = self.record['atoms']['element']
          if not len(aids) == len(elements):
              raise ResponseParseError('Error parsing atom elements')
          for aid, element in zip(aids, elements):
              self._atoms[aid] = Atom(aid=aid, number=element)
          # Add coordinates
          if 'coords' in self.record:
              coord_ids = self.record['coords'][0]['aid']
              xs = self.record['coords'][0]['conformers'][0]['x']
              ys = self.record['coords'][0]['conformers'][0]['y']
              zs = self.record['coords'][0]['conformers'][0].get('z', [])
              if not len(coord_ids) == len(xs) == len(ys) == len(self._atoms) or (zs and not len(zs) == len(coord_ids)):
                  raise ResponseParseError('Error parsing atom coordinates')
              for aid, x, y, z in zip_longest(coord_ids, xs, ys, zs):
                  self._atoms[aid].set_coordinates(x, y, z)
          # Add charges
          if 'charge' in self.record['atoms']:
              for charge in self.record['atoms']['charge']:
                  self._atoms[charge['aid']].charge = charge['value']