示例#1
0
    def classify(
        self, orbital_elem_set: ResonanceOrbitalElementSetFacade, serialized_phases: List[Dict[str, float]]
    ) -> bool:
        """
        Determines class of libration. Libration can be loaded from database if object has upped
        flag _get_from_db. If libration's class was not determined, libration will be removed and
        method returns False else libration will be saved and method return True.
        :param serialized_phases:
        :param orbital_elem_set:
        :return: flag of successful determining class of libration.
        """
        if not self._get_from_db and self._libration is None:
            builder = TransientBuilder(self._resonance, orbital_elem_set, serialized_phases)
            self._libration = self._libration_director.build(builder)
        elif not self._libration:
            return True

        try:
            if _save_as_transient(self._libration, self._resonance, self._asteroid_num, self._resonance_str):
                return True
            elif not self._libration.is_apocentric:
                logging.info("A%i, pure resonance %s", self._asteroid_num, self._resonance_str)
                return True
            raise _NoTransientException()
        except _NoTransientException:
            if not self._get_from_db and not self._libration.is_apocentric:
                builder = ApocentricBuilder(self._resonance, orbital_elem_set, serialized_phases)
                self._libration = self._libration_director.build(builder)

            if self._libration.is_pure:
                logging.info("A%i, pure apocentric resonance %s", self._asteroid_num, self._resonance_str)
                return True
            else:
                session.expunge(self._libration)
        return False
示例#2
0
def _save_as_transient(libration: LibrationMixin, resonance: ResonanceMixin, asteroid_num: int, resonance_str: str):
    if not libration.is_pure:
        if libration.is_transient:
            if libration.percentage:
                logging.info("A%i, %s, resonance = %s", asteroid_num, str(libration), str(resonance))
                return True
            else:
                logging.debug(
                    "A%i, NO RESONANCE, resonance = %s, max = %f", asteroid_num, resonance_str, libration.max_diff
                )
                session.expunge(libration)
                raise _NoTransientException()
        raise _NoTransientException()
    return False