diff --git a/mcmala/montecarlo/markovchain.py b/mcmala/montecarlo/markovchain.py index 4e5d7ba..8af53ec 100644 --- a/mcmala/montecarlo/markovchain.py +++ b/mcmala/montecarlo/markovchain.py @@ -172,8 +172,8 @@ def run(self, steps_to_evolve, print_energies=False, metadata = { "id": self.id, "temperature": self.temperatureK, - "configuration type": type(self.configuration).__name__, - "configuration suggester": type(self.configuration_suggester).__name__, + "configuration_suggester": self.configuration_suggester.get_info(), + "configuration_type": type(self.configuration).__name__, "evaluator": type(self.evaluator).__name__, "start_time": start_time, "end_time": end_time, @@ -186,7 +186,13 @@ def __save_run(self, metadata): self.observables} with open(self.id+".json", "w", encoding="utf-8") as f: json.dump(save_dict, f, ensure_ascii=False, indent=4) - pass + try: + from mala import ASECalculator + if isinstance(self.evaluator, ASECalculator): + print("Saving MALA parameters.") + self.evaluator.params.save(self.id+"_mala_params.pkl") + except: + pass def __check_acceptance(self, deltaE): if self.ensemble == "nvt": diff --git a/mcmala/simulation/atom_displacer.py b/mcmala/simulation/atom_displacer.py index 1573853..282c330 100644 --- a/mcmala/simulation/atom_displacer.py +++ b/mcmala/simulation/atom_displacer.py @@ -84,3 +84,18 @@ def suggest_new_configuration(self, old_configuration: Atoms): new_configuration = AtomDisplacer._enforce_pbc(new_configuration) return new_configuration + def get_info(self): + """ + Access a dictionary with identifying information. + + Returns + ------- + info : dict + + """ + info = {} + info["name"] = type(self).__name__ + info["maximum_displacement"] = self.maximum_displacement + info["enforce_pbc"] = self.enforce_pbc + return info + diff --git a/mcmala/simulation/configuration_suggester.py b/mcmala/simulation/configuration_suggester.py index 43e2fa7..8f42019 100644 --- a/mcmala/simulation/configuration_suggester.py +++ b/mcmala/simulation/configuration_suggester.py @@ -26,3 +26,14 @@ def suggest_new_configuration(self, old_configuration): """ pass + + @abstractmethod + def get_info(self): + """ + Access a dictionary with identifying information. + + Returns + ------- + info : dict + + """ diff --git a/mcmala/simulation/ising_model.py b/mcmala/simulation/ising_model.py index 14be46c..78b3069 100644 --- a/mcmala/simulation/ising_model.py +++ b/mcmala/simulation/ising_model.py @@ -205,3 +205,15 @@ def suggest_new_configuration(self, old_configuration: IsingGrid): new_configuration.lattice[x_to_flip, y_to_flip] *= -1 return new_configuration + def get_info(self): + """ + Access a dictionary with identifying information. + + Returns + ------- + info : dict + + """ + info = {} + info["name"] = type(self).__name__ + return info