def rot_consts(geom, masses, units=_EURC.INV_INERTIA, on_tol=_DEF.ORTHONORM_TOL):
    import numpy as np
    from ..const import EnumTopType as ETT, EnumUnitsRotConst as EURC, PRM, PHYS
    if not units in EURC:
        raise ValueError("'{0}' is not a valid units value".format(units))
    mom, ax, top = principals(geom, masses, on_tol)
    if top == ETT.ATOM:
        mom = np.repeat(PRM.ZERO_MOMENT_TOL, 3)
    elif top == ETT.LINEAR:
        mom[0] = PRM.ZERO_MOMENT_TOL
    if units == EURC.INV_INERTIA:
        rc = 1.0 / (2.0 * mom)
    elif units == EURC.ANGFREQ_ATOMIC:
        rc = PHYS.PLANCK_BAR / (2.0 * mom * PHYS.ME_PER_AMU)
    elif units == EURC.ANGFREQ_SECS:
        rc = PHYS.PLANCK_BAR / (2.0 * mom * PHYS.ME_PER_AMU) / PHYS.SEC_PER_TA
    elif units == EURC.CYCFREQ_ATOMIC:
        rc = PHYS.PLANCK_BAR / (4.0 * np.pi * mom * PHYS.ME_PER_AMU)
    elif units == EURC.CYCFREQ_HZ:
        rc = PHYS.PLANCK_BAR / (4.0 * np.pi * mom * PHYS.ME_PER_AMU) / \
                                                            PHYS.SEC_PER_TA
    elif units == EURC.CYCFREQ_MHZ:
        rc = PHYS.PLANCK_BAR / (4.0 * np.pi * mom * PHYS.ME_PER_AMU) / \
                                                    PHYS.SEC_PER_TA / 1.0e6
    elif units == EURC.WAVENUM_ATOMIC:
        rc = PHYS.PLANCK / (mom * PHYS.ME_PER_AMU) / \
            (8.0 * np.pi**2.0 * PHYS.LIGHT_SPEED)
    elif units == EURC.WAVENUM_CM:
        rc = PHYS.PLANCK / (mom * PHYS.ME_PER_AMU) / \
            (8.0 * np.pi**2.0 * PHYS.LIGHT_SPEED * PHYS.ANG_PER_BOHR) * 1.0e8
    else:
        raise NotImplementedError("Units conversion not yet implemented.")
    return rc