Beispiel #1
0
    def __init__(self, parent=None, name="Lorentzian", value=None):
        super().__init__(parent=parent, name=name)
        self._value = value

        # TODO: Implement these for variable broadening.
        self.energies = BaseItem(self, "Energies")
        self.fwhms = BaseItem(self, "FWHM")
Beispiel #2
0
class Lorentzian(Broadening):
    MINIMUM = 0.01

    def __init__(self, parent=None, name="Lorentzian", value=None):
        super().__init__(parent=parent, name=name)
        self._value = value

        # TODO: Implement these for variable broadening.
        self.energies = BaseItem(self, "Energies")
        self.fwhms = BaseItem(self, "FWHM")

    @property
    def value(self):
        return self._value

    @value.setter
    def value(self, value):
        if value is None:
            return
        if value < self.MINIMUM:
            raise ValueError(
                f"The Lorentzian broadening cannot be smaller than {self.MINIMUM}."
            )
        self._value = value
        self.dataChanged.emit(1)

    @property
    def replacements(self):
        replacements = dict()

        if self.ancestor.experiment.isTwoDimensional:
            # Energy dependent Lorentzian broadening of 2D spectra is not supported
            # in Quanty, so we use the value set for the Lorentzian broadening
            # as Gamma.
            replacements["Gamma"] = self.value
        else:
            axis = self.parent()
            start = axis.start.value
            stop = axis.stop.value

            points = [(start, self.value), (stop, self.value)]
            replacement = "{"
            for i, (energy, fwhm) in enumerate(points):
                replacement += f"{{{energy}, {fwhm}}}"
                if i != len(points) - 1:
                    replacement += ", "
                else:
                    replacement += "}"
            replacements["Lorentzian"] = replacement
            replacements["Gamma"] = self.MINIMUM

        return replacements

    def copyFrom(self, item):
        super().copyFrom(item)
        self.energies.copyFrom(item.energies)
        self.fwhms.copyFrom(item.fwhms)
Beispiel #3
0
    def __init__(self, parent=None, name="Ligands Hybridization"):
        super().__init__(parent=parent, name=name)

        ligandsName = "L2" if "MLCT" in self.name else "L1"

        names = list()
        if self.block == "d":
            if self.symmetry.value == "Oh":
                names = ("Δ", "Veg", "Vt2g", "10Dq")
            elif self.symmetry.value == "D4h":
                names = ("Δ", "Va1g", "Vb1g", "Vb2g", "Veg", "10Dq", "Ds", "Dt")
            # elif self.symmetry.value == "Td":
            #     names = ("Δ", "Ve", "Vt2", "10Dq")
            else:
                raise ValueError("Unknown symmetry.")
        elif self.block == "f":
            if self.symmetry.value == "Oh":
                names = ("Δ", "Va2u", "Vt2u", "Vt1u", "Ea2u", "Et1u", "Et2u")
            else:
                raise ValueError("Unknown symmetry.")

        for hamiltonianName, _ in self.hamiltonianNames:
            hamiltonian = BaseItem(self, hamiltonianName)
            for parameterName in names:
                if parameterName in ("10Dq", "Ds", "Dt", "Ea2u", "Et1u", "Et2u"):
                    suffix = f"({ligandsName})"
                else:
                    suffix = f"({self.subshell},{ligandsName})"
                # Extend the name to include the suffix.
                parameterName = parameterName + suffix
                HamiltonianParameter(hamiltonian, parameterName, 0.0, None)
Beispiel #4
0
    def __init__(self, parent=None, name="Crystal Field"):
        super().__init__(parent=parent, name=name)

        names = list()
        if self.block == "d":
            if self.symmetry.value == "Oh":
                names, values = ("10Dq",), (1.0,)
            elif self.symmetry.value == "Td":
                names, values = ("10Dq",), (0.5,)
            elif self.symmetry.value == "D4h":
                names, values = ("10Dq", "Ds", "Dt"), (1.0, 0.0, 0.0)
            elif self.symmetry.value == "D3h":
                names, values = ("Dμ", "Dν"), (0.1, -0.1)
            elif self.symmetry.value == "C3v":
                names, values = ("10Dq", "Dσ", "Dτ"), (1.0, 0.0, 0.0)
            else:
                raise ValueError("Unknown symmetry.")
        elif self.block == "f":
            names, values = ("Ea2u", "Et1u", "Et2u"), (-1.8, 0.3, 0.3)
        else:
            raise ValueError("Unknown symmetry.")

        for hamiltonianName, _ in self.hamiltonianNames:
            hamiltonian = BaseItem(self, hamiltonianName)
            for parameterName, value in zip(names, values):
                # Extend the parameterName to include the subshell.
                parameterName = parameterName + f"({self.subshell})"
                HamiltonianParameter(hamiltonian, parameterName, value, None)

        self._checkState = Qt.Checked
Beispiel #5
0
    def __init__(self, parent=None, name="Exchange Field"):
        super().__init__(parent=parent, name=name)

        for hamiltonianName, _ in self.hamiltonianNames:
            hamiltonian = BaseItem(self, hamiltonianName)
            for parameterName in ("Hx", "Hy", "Hz"):
                HamiltonianParameter(hamiltonian, parameterName, 0.0, None)

        self._checkState = Qt.Unchecked
Beispiel #6
0
    def __init__(self, parent=None, name="Magnetic Field"):
        super().__init__(parent=parent, name=name)

        for hamiltonianName, _ in self.hamiltonianNames:
            hamiltonian = BaseItem(self, hamiltonianName)
            for parameterName in ("Bx", "By", "Bz"):
                HamiltonianParameter(hamiltonian, parameterName, 0.0, None)

        self._checkState = Qt.Checked
Beispiel #7
0
 def generateParameters(hamiltonianName, names):
     hamiltonian = BaseItem(self, hamiltonianName)
     for name in names:
         if name in ("ζ(", "G1(1s,"):
             name = name + "4p)"
         else:
             name = name + f"({self.subshell},4p)"
         value = 0.0
         scaleFactor = self.scaleFactorFromName(name)
         HamiltonianParameter(hamiltonian, name, value, scaleFactor)
Beispiel #8
0
    def __init__(self, parent=None, name="Atomic"):
        super().__init__(parent=parent, name=name)

        path = resourceAbsolutePath(
            os.path.join("quanty", "parameters", f"{self.element.symbol}.h5")
        )

        with h5py.File(path, "r") as h5:
            for configuration, (hamiltonianName, _) in zip(
                self.configurations, self.hamiltonianNames
            ):
                hamiltonian = BaseItem(self, hamiltonianName)
                parameters = h5[f"{configuration}/{self.name}"]
                for parameterName, value in parameters.items():
                    value = float(value[()])
                    scaleFactor = self.scaleFactorFromName(parameterName)
                    HamiltonianParameter(hamiltonian, parameterName, value, scaleFactor)

        self._checkState = Qt.Checked