<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def convert_obatoms_to_molecule(self, atoms, residue_name=None, site_property="ff_map"):
 """ Convert list of openbabel atoms to MOlecule. Args: atoms ([OBAtom]):
 list of OBAtom objects residue_name (str):
 the key in self.map_residue_to_mol. Usec to restore the site properties in the final packed molecule. site_property (str):
 the site property to be restored. Returns: Molecule object """


        restore_site_props = True if residue_name is not None else False

        if restore_site_props and not hasattr(self, "map_residue_to_mol"):
            self._set_residue_map()

        coords = []
        zs = []
        for atm in atoms:
            coords.append(list(atm.coords))
            zs.append(atm.atomicnum)

        mol = Molecule(zs, coords)

        if restore_site_props:

            props = []

            ref = self.map_residue_to_mol[residue_name].copy()

            # sanity check
            assert len(mol) == len(ref)
            assert ref.formula == mol.formula

            # the packed molecules have the atoms in the same order..sigh!
            for i, site in enumerate(mol):
                assert site.specie.symbol == ref[i].specie.symbol
                props.append(getattr(ref[i], site_property))

            mol.add_site_property(site_property, props)

        return mol