def check_geom(c1, a1, c2, a2, tol=_DEF.XYZ_COORD_MATCH_TOL):
    from ..const import atom_num
    import numpy as np
    from ..const import EnumCheckGeomMismatch as ECGM
    match = True
    if not len(c1.shape) == 1:
        raise ValueError(("'c1' is not a vector."))
    if not len(c2.shape) == 1:
        raise ValueError(("'c2' is not a vector."))
    if not len(a1.shape) == 1:
        raise ValueError(("'a1' is not a simple list."))
    if not len(a2.shape) == 1:
        raise ValueError(("'a2' is not a simple list."))
    if not c1.shape[0] == 3 * a1.shape[0]:
        raise ValueError("len(c1) != 3*len(a1)")
    if not c2.shape[0] == 3 * a2.shape[0]:
        raise ValueError("len(c2) != 3*len(a2)")
    if not c1.shape[0] == c2.shape[0]:
        match = False
        fail_type = ECGM.DIMENSION
        return match, fail_type, None
    fail_loc = np.less_equal(np.abs(np.subtract(c1,c2)), tol)
    if sum(fail_loc) != c2.shape[0]:
        match = False
        fail_type = ECGM.COORDS
        return match, fail_type, fail_loc
    if np.issubdtype(a1.dtype, np.dtype('str')):
        a1 = np.array([atom_num[e] for e in a1])
    if np.issubdtype(a2.dtype, np.dtype('str')):
        a2 = np.array([atom_num[e] for e in a2])
    fail_loc = np.equal(a1, a2)
    if sum(fail_loc) != a2.shape[0]:
        match = False
        fail_type = ECGM.ATOMS
        return match, fail_type, fail_loc
    return match, None, None