def _prepare_cif(self, trajectory_index=None): """ Write the given trajectory to a string of format CIF. """ import CifFile from aiida.orm.data.cif \ import ase_loops, cif_from_ase, pycifrw_from_cif cif = "" indices = range(self.numsteps) if trajectory_index is not None: indices = [trajectory_index] for idx in indices: structure = self.get_step_structure(idx) ciffile = pycifrw_from_cif(cif_from_ase(structure.get_ase()), ase_loops) cif = cif + ciffile.WriteOut() return cif
def _prepare_cif(self, trajectory_index=None, main_file_name=""): """ Write the given trajectory to a string of format CIF. """ import CifFile from aiida.orm.data.cif \ import ase_loops, cif_from_ase, pycifrw_from_cif from aiida.common.utils import HiddenPrints cif = "" indices = range(self.numsteps) if trajectory_index is not None: indices = [trajectory_index] for idx in indices: structure = self.get_step_structure(idx) ciffile = pycifrw_from_cif(cif_from_ase(structure.get_ase()), ase_loops) with HiddenPrints(): cif = cif + ciffile.WriteOut() return cif.encode('utf-8'), {}
def add_metadata_inline(what, node=None, parameters=None, args=None): """ Add metadata of original exported node to the produced TCOD CIF. :param what: an original exported node. :param node: a :py:class:`aiida.orm.data.cif.CifData` instance. :param parameters: a :py:class:`aiida.orm.data.parameter.ParameterData` instance, produced by the same calculation as the original exported node. :param args: a :py:class:`aiida.orm.data.parameter.ParameterData` instance, containing parameters for the control of metadata collection and inclusion in the produced :py:class:`aiida.orm.data.cif.CifData`. :return: dict with :py:class:`aiida.orm.data.cif.CifData` :raises ValueError: if tags present in ``args.get_dict()['additional_tags']`` are not valid CIF tags. .. note:: can be used as inline calculation. """ from aiida.orm.data.cif import pycifrw_from_cif CifData = DataFactory('cif') if not node: node = what calc = _get_calculation(what) datablocks = [] loops = {} dataname = node.values.keys()[0] datablock = dict() for tag in node.values[dataname].keys(): datablock[tag] = node.values[dataname][tag] datablocks.append(datablock) for loop in node.values[dataname].loops: loops[loop.keys()[0]] = loop.keys() # Unpacking the kwargs from ParameterData kwargs = {} additional_tags = {} datablock_names = None if args: kwargs = args.get_dict() additional_tags = kwargs.pop('additional_tags', {}) datablock_names = kwargs.pop('datablock_names', None) tags = _collect_tags(what, calc, parameters=parameters, **kwargs) loops.update(tcod_loops) for datablock in datablocks: for k, v in dict(tags.items() + additional_tags.items()).iteritems(): if not k.startswith('_'): raise ValueError("Tag '{}' does not seem to start with " "an underscode ('_'): all CIF tags must " "start with underscores".format(k)) datablock[k] = v values = pycifrw_from_cif(datablocks, loops, names=datablock_names) cif = CifData(values=values) return {'cif': cif}