Пример #1
0
    def get_fw_by_id(self, dbname, fw_id):
        """
        Given a Firework id, give back a Firework object

        :param fw_id: Firework id (int)
        :return: Firework object
        """
        return Firework.from_dict(self.get_fw_dict_by_id(fw_id))
Пример #2
0
    def from_dict(cls, m_dict):
        """
        Return Workflow from its dict representation.

        Args:
            m_dict (dict): either a Workflow dict or a Firework dict

        Returns:
            SwarmFlow
        """

        if 'fws' in m_dict:
            created_on = m_dict.get('created_on')
            updated_on = m_dict.get('updated_on')
            return SwarmFlow([Firework.from_dict(f) for f in m_dict['fws']],
                            Workflow.Links.from_dict(m_dict['links']), m_dict.get('name'),
                            m_dict['metadata'], created_on, updated_on)
        else:
            return SwarmFlow.from_Firework(Firework.from_dict(m_dict))
Пример #3
0
    def partial_fw(self):
        if not self._fw:
            fields = list(self.db_fields) + list(self.db_launch_fields)
            data = self._fwc.find_one({'fw_id': self.fw_id}, projection=fields)
            launch_data = {}  # move some data to separate launch dict
            for key in self.db_launch_fields:
                launch_data[key] = data[key]
                del data[key]

            self._lids = launch_data
            self._fw = Firework.from_dict(data)
        return self._fw
Пример #4
0
def _find_fw_structure(firework):
    """
    Look for the final geometry in the spec/tasks of a Firework.

    Args:
        firework (Firework): Firework in which to look for the geometry.

    Returns:
        Last specified geometry in the Firework and its parents.

    """
    structure = None

    if "final_geometry" in firework.spec:
        structure = firework.spec["final_geometry"]

    else:
        for t in firework.tasks:
            if "WriteVaspFromIOSet" in t["_fw_name"]:

                try:
                    structure = t["structure"]
                    break
                except KeyError:
                    pass

                try:
                    structure = t["vasp_input_set"].structure
                    break
                except TypeError:
                    pass
                except AttributeError:
                    pass

                try:
                    structure = _find_fw_structure(
                        Firework.from_dict(t["parents"])
                    )
                except KeyError:
                    pass

    if issubclass(structure.__class__, Structure):
        return structure
    else:
        raise ValueError("Failed to extract structure from Firework.")
Пример #5
0
    def get_fw_by_id(self, fw_id):
        """
        Given a Firework id, give back a Firework object

        :param fw_id: Firework id (int)
        :return: Firework object
        """
        fw_dict = self.fireworks.find_one({'fw_id': fw_id})

        if not fw_dict:
            raise ValueError('No Firework exists with id: {}'.format(fw_id))
            # recreate launches from the launch collection

        fw_dict['launches'] = list(self.launches.find(
                    {'launch_id': {"$in": fw_dict['launches']}}))

        fw_dict['archived_launches'] = list(self.launches.find(
                    {'launch_id': {"$in": fw_dict['archived_launches']}}))

        return Firework.from_dict(fw_dict)