def load_formatted_data(self): """ Loads S from an hdf file. @return: object of type SData. """ data = self._clerk.load(list_of_datasets=["data"], list_of_attributes=["filename", "order_of_quantum_events"]) if self._quantum_order_num > data["attributes"]["order_of_quantum_events"]: raise ValueError("User requested a larger number of quantum events to be included in the simulation " "then in the previous calculations. S cannot be loaded from the hdf file.") if self._quantum_order_num < data["attributes"]["order_of_quantum_events"]: self._report_progress(""" User requested a smaller number of quantum events than in the previous calculations. S Data from hdf file which corresponds only to requested quantum order events will be loaded.""") temp_data = {"frequencies": data["datasets"]["data"]["frequencies"]} # load atoms_data n_atom = len([key for key in data["datasets"]["data"].keys() if "atom" in key]) for i in range(n_atom): temp_data["atom_%s" % i] = {"s": dict()} for j in range(AbinsModules.AbinsConstants.FUNDAMENTALS, self._quantum_order_num + AbinsModules.AbinsConstants.S_LAST_INDEX): temp_val = data["datasets"]["data"]["atom_%s" % i]["s"]["order_%s" % j] temp_data["atom_%s" % i]["s"].update({"order_%s" % j: temp_val}) # reduce the data which is loaded to only this data which is required by the user data["datasets"]["data"] = temp_data s_data = AbinsModules.SData(temperature=self._temperature, sample_form=self._sample_form) s_data.set(items=data["datasets"]["data"]) return s_data
def _calculate_s_powder_1d(self, powder_data=None): """ Calculates 1D S for the powder case. @param powder_data: object of type PowderData with mean square displacements and Debye-Waller factors for the case of powder @return: object of type SData with 1D dynamical structure factors for the powder case """ s_data = AbinsModules.SData(temperature=self._temperature, sample_form=self._sample_form) self._powder_atoms_data = powder_data.extract() data = self._calculate_s_powder_over_atoms() data.update({"frequencies": self._frequencies}) s_data.set(items=data) return s_data
def _calculate_s_powder_1d(self): """ Calculates 1D S for the powder case. :returns: object of type SData with 1D dynamical structure factors for the powder case """ # calculate data data = self._calculate_s_powder_over_k() data.update({"frequencies": self._frequencies}) # put data to SData object s_data = AbinsModules.SData(temperature=self._temperature, sample_form=self._sample_form) s_data.set_bin_width(width=self._bin_width) s_data.set(items=data) return s_data