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
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