コード例 #1
0
    def _calculate_powder(self):
        """
        Calculates powder data (a_tensors, b_tensors according to aCLIMAX manual).
        """
        # define container for powder data
        powder = AbinsModules.PowderData(num_atoms=self._num_atoms)

        k_indices = sorted(self._frequencies.keys(
        ))  # make sure dictionary keys are in the same order on each machine
        b_tensors = {}
        a_tensors = {}

        if PATHOS_FOUND:
            threads = AbinsModules.AbinsParameters.threads
            p_local = ProcessPool(nodes=threads)
            tensors = p_local.map(self._calculate_powder_k, k_indices)
        else:
            tensors = [self._calculate_powder_k(k=k) for k in k_indices]

        for indx, k in enumerate(k_indices):
            a_tensors[k] = tensors[indx][0]
            b_tensors[k] = tensors[indx][1]

        # fill powder object with powder data
        powder.set(dict(b_tensors=b_tensors, a_tensors=a_tensors))

        return powder
コード例 #2
0
    def load_formatted_data(self):
        """
        Loads mean square displacements.
        :returns: object of type PowderData with mean square displacements.
        """
        data = self._clerk.load(list_of_datasets=["powder_data"])
        k_pkt = AbinsModules.AbinsConstants.GAMMA_POINT
        powder_data = AbinsModules.PowderData(num_atoms=data["datasets"]["powder_data"]["b_tensors"][k_pkt].shape[0])
        powder_data.set(data["datasets"]["powder_data"])

        return powder_data