Exemple #1
0
    def __init__(self,
                 absorbing_atom,
                 structure,
                 feff_input_set="XANES",
                 edge="K",
                 radius=10.0,
                 name="XAS spectroscopy",
                 feff_cmd="feff",
                 override_default_feff_params=None,
                 db_file=None,
                 parents=None,
                 metadata=None,
                 **kwargs):
        """
        Write the input set for FEFF-XAS spectroscopy, run FEFF and insert the absorption
        coefficient to the database (or dump to a json file if db_file=None).

        Args:
            absorbing_atom (str): absorbing atom symbol
            structure (Structure): input structure
            feff_input_set (str or FeffDictSet subclass): The inputset for setting params. If string
                then either the entire path to the class or spectrum type must be provided
                e.g. "pymatgen.io.feff.sets.MPXANESSet" or "XANES"
            edge (str): absorption edge
            radius (float): cluster radius in angstroms
            name (str)
            feff_cmd (str): path to the feff binary
            override_default_feff_params (dict): override feff tag settings.
            db_file (str): path to the db file.
            parents (Firework): Parents of this particular Firework. FW or list of FWS.
            metadata (dict): meta data
            **kwargs: Other kwargs that are passed to Firework.__init__.
        """
        override_default_feff_params = override_default_feff_params or {}

        feff_input_set = get_feff_input_set_obj(feff_input_set,
                                                absorbing_atom,
                                                structure,
                                                edge=edge,
                                                radius=radius,
                                                **override_default_feff_params)
        spectrum_type = feff_input_set.__class__.__name__[2:-3]

        t = [
            WriteFeffFromIOSet(absorbing_atom=absorbing_atom,
                               structure=structure,
                               radius=radius,
                               feff_input_set=feff_input_set),
            RunFeffDirect(feff_cmd=feff_cmd),
            PassCalcLocs(name=name),
            SpectrumToDbTask(absorbing_atom=absorbing_atom,
                             structure=structure,
                             db_file=db_file,
                             spectrum_type=spectrum_type,
                             edge=edge,
                             output_file="xmu.dat",
                             metadata=metadata)
        ]

        super(XASFW, self).__init__(t,
                                    parents=parents,
                                    name="{}-{}".format(
                                        structure.composition.reduced_formula,
                                        name),
                                    **kwargs)
Exemple #2
0
    def __init__(self,
                 absorbing_atom,
                 structure,
                 feff_input_set="ELNES",
                 edge="K",
                 radius=10.,
                 name="EELS spectroscopy",
                 beam_energy=100,
                 beam_direction=None,
                 collection_angle=1,
                 convergence_angle=1,
                 user_eels_settings=None,
                 feff_cmd="feff",
                 override_default_feff_params=None,
                 db_file=None,
                 parents=None,
                 metadata=None,
                 **kwargs):
        """
        Write the input set for FEFF-EELSS spectroscopy, run feff and insert the core-loss spectrum
        to the database(or dump to a json file if db_file=None).

        Args:
            absorbing_atom (str): absorbing atom symbol
            structure (Structure): input structure
            feff_input_set (str or FeffDictSet subclass): The inputset for setting params. If string
                then the entire path to the class or the spectrum type must be provide
                e.g. "pymatgen.io.feff.sets.MPELNESSet" or "ELNES"
            edge (str): absorption edge
            radius (float): cluster radius in angstroms
            name (str)
            beam_energy (float): Incident beam energy in keV
            beam_direction (list): Incident beam direction. If None, the cross section will be averaged.
            collection_angle (float): Detector collection angle in mrad.
            convergence_angle (float): Beam convergence angle in mrad.
            user_eels_settings (dict): override default EELS config. See MPELNESSet.yaml for supported keys.
            feff_cmd (str): path to the feff binary
            override_default_feff_params (dict): override feff tag settings.
            db_file (str): path to the db file.
            parents (Firework): Parents of this particular Firework. FW or list of FWS.
            metadata (dict): meta data
            **kwargs: Other kwargs that are passed to Firework.__init__.
        """
        override_default_feff_params = override_default_feff_params or {}

        feff_input_set = get_feff_input_set_obj(
            feff_input_set,
            absorbing_atom,
            structure,
            edge,
            radius,
            beam_energy,
            beam_direction,
            collection_angle,
            convergence_angle,
            user_eels_settings=user_eels_settings,
            **override_default_feff_params)
        spectrum_type = feff_input_set.__class__.__name__[2:-3]

        t = [
            WriteFeffFromIOSet(absorbing_atom=absorbing_atom,
                               structure=structure,
                               radius=radius,
                               feff_input_set=feff_input_set),
            RunFeffDirect(feff_cmd=feff_cmd),
            PassCalcLocs(name=name),
            SpectrumToDbTask(absorbing_atom=absorbing_atom,
                             structure=structure,
                             db_file=db_file,
                             spectrum_type=spectrum_type,
                             edge=edge,
                             output_file="eels.dat",
                             metadata=metadata)
        ]

        super(EELSFW, self).__init__(t,
                                     parents=parents,
                                     name="{}-{}".format(
                                         structure.composition.reduced_formula,
                                         name),
                                     **kwargs)
Exemple #3
0
    def __init__(self,
                 absorbing_atom,
                 structure,
                 paths,
                 degeneracies=None,
                 edge="K",
                 radius=10.0,
                 name="EXAFS Paths",
                 feff_input_set="pymatgen.io.feff.sets.MPEXAFSSet",
                 feff_cmd="feff",
                 override_default_feff_params=None,
                 parents=None,
                 filepad_file=None,
                 labels=None,
                 metadata=None,
                 **kwargs):
        """
        Write the input set for FEFF-EXAFS spectroscopy with customized scattering paths, run feff,
        and insert the scattering amplitude output files(feffNNNN.dat files) to filepad.

        Args:
            absorbing_atom (str): absorbing atom symbol
            structure (Structure): input structure
            paths (list): list of paths. A path = list of site indices that defines the path legs.
            degeneracies (list): degeneracy of each path.
            edge (str): absorption edge
            radius (float): cluster radius in angstroms
            name (str)
            feff_input_set (FeffDictSet)
            feff_cmd (str): path to the feff binary
            override_default_feff_params (dict): override feff tag settings.
            parents (Firework): Parents of this particular Firework. FW or list of FWS.
            filepad_file (str): path to the filepad config file.
            labels (list): list of label used to tag the files inserted into filepad.
            metadata (dict): meta data
            **kwargs: Other kwargs that are passed to Firework.__init__.
        """
        override_default_feff_params = override_default_feff_params or {}
        override_default_feff_params.update({
            "user_tag_settings": {
                "CONTROL": "0 0 0 0 1 1",
                "PRINT": "0 0 0 1 0 3"
            }
        })

        feff_input_set = get_feff_input_set_obj(feff_input_set,
                                                absorbing_atom,
                                                structure,
                                                edge=edge,
                                                radius=radius,
                                                **override_default_feff_params)

        t = [
            CopyFeffOutputs(calc_loc=True),
            WriteFeffFromIOSet(absorbing_atom=absorbing_atom,
                               structure=structure,
                               radius=radius,
                               feff_input_set=feff_input_set),
            WriteEXAFSPaths(feff_input_set=feff_input_set,
                            paths=paths,
                            degeneracies=degeneracies),
            RunFeffDirect(feff_cmd=feff_cmd),
            AddPathsToFilepadTask(filepad_file=filepad_file,
                                  labels=labels,
                                  metadata=metadata)
        ]

        super(EXAFSPathsFW,
              self).__init__(t,
                             parents=parents,
                             name="{}-{}".format(
                                 structure.composition.reduced_formula, name),
                             **kwargs)