Skip to content

Commit 765559e

Browse files
committed
Crystal: fix test for _3d_widget attribute
MonteCarlo: fix tests & add Optimize() function
1 parent bb862bb commit 765559e

File tree

3 files changed

+20
-24
lines changed

3 files changed

+20
-24
lines changed

src/pyobjcryst/crystal.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,12 @@ def UpdateDisplay(self):
6868
# test for _3d_widget is a bit ugly, but to correctly implement this we'd need an
6969
# __init__ function which overrides the 3 different Crystal constructors which
7070
# could be messy as well.
71-
if self.__getattribute__("_3d_widget") is not None:
71+
try:
7272
if self._3d_widget is not None:
7373
self._widget_update()
74+
except AttributeError:
75+
# self._3d_widget does not exist
76+
pass
7477

7578
def _display_cif(self, xmin=0, xmax=1, ymin=0, ymax=1, zmin=0, zmax=1, enantiomer=False,
7679
full_molecule=True, only_independent_atoms=False):

src/pyobjcryst/globaloptim.py

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,29 +26,23 @@
2626

2727
class MonteCarlo(MonteCarlo_orig):
2828

29-
def MultiRunOptimize(self, nb_run: int, nb_step: int, final_cost=0, max_time=-1):
30-
# Fix parameters that should not be optimised in a MonterCarlo run
31-
self.SetParIsFixed(refpartype_unitcell, True);
32-
self.SetParIsFixed(refpartype_scattdata_scale, True);
33-
self.SetParIsFixed(refpartype_scattdata_profile, True);
34-
self.SetParIsFixed(refpartype_scattdata_corr, True);
35-
self.SetParIsFixed(refpartype_scattdata_background, True);
36-
self.SetParIsFixed(refpartype_scattdata_radiation, True);
29+
def Optimize(self, nb_step: int, final_cost=0, max_time=-1):
30+
self._fix_parameters_for_global_optim()
31+
super().Optimize(int(nb_step), True, final_cost, max_time)
3732

33+
def MultiRunOptimize(self, nb_run: int, nb_step: int, final_cost=0, max_time=-1):
34+
self._fix_parameters_for_global_optim()
3835
super().MultiRunOptimize(int(nb_run), int(nb_step), True, final_cost, max_time)
3936

4037
def RunSimulatedAnnealing(self, nb_step: int, final_cost=0, max_time=-1):
41-
# Fix parameters that should not be optimised in a MonterCarlo run
42-
self.SetParIsFixed(refpartype_unitcell, True);
43-
self.SetParIsFixed(refpartype_scattdata_scale, True);
44-
self.SetParIsFixed(refpartype_scattdata_profile, True);
45-
self.SetParIsFixed(refpartype_scattdata_corr, True);
46-
self.SetParIsFixed(refpartype_scattdata_background, True);
47-
self.SetParIsFixed(refpartype_scattdata_radiation, True);
48-
38+
self._fix_parameters_for_global_optim()
4939
super().RunSimulatedAnnealing(int(nb_step), True, final_cost, max_time)
5040

5141
def RunParallelTempering(self, nb_step: int, final_cost=0, max_time=-1):
42+
self._fix_parameters_for_global_optim()
43+
super().RunParallelTempering(int(nb_step), True, final_cost, max_time)
44+
45+
def _fix_parameters_for_global_optim(self):
5246
# Fix parameters that should not be optimised in a MonterCarlo run
5347
self.SetParIsFixed(refpartype_unitcell, True);
5448
self.SetParIsFixed(refpartype_scattdata_scale, True);
@@ -57,7 +51,6 @@ def RunParallelTempering(self, nb_step: int, final_cost=0, max_time=-1):
5751
self.SetParIsFixed(refpartype_scattdata_background, True);
5852
self.SetParIsFixed(refpartype_scattdata_radiation, True);
5953

60-
super().RunParallelTempering(int(nb_step), True, final_cost, max_time)
6154

6255
def UpdateDisplay(self):
6356
if self.IsOptimizing():

src/pyobjcryst/tests/testglobaloptim.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,28 +74,28 @@ def test_mc_optim(self):
7474
mc.AddRefinableObj(self.c)
7575
mc.AddRefinableObj(self.d)
7676
mc.RandomizeStartingConfig()
77-
mc.Optimize(nbSteps=1000, silent=True)
77+
mc.Optimize(nb_step=1000)
7878

7979
def test_mc_optim_multi(self):
8080
mc = MonteCarlo()
8181
mc.AddRefinableObj(self.c)
8282
mc.AddRefinableObj(self.d)
8383
mc.RandomizeStartingConfig()
84-
mc.MultiRunOptimize(nbCycle=2, nbSteps=1000, silent=True)
84+
mc.MultiRunOptimize(nb_run=2, nb_step=1000)
8585

8686
def test_mc_sa(self):
8787
mc = MonteCarlo()
8888
mc.AddRefinableObj(self.c)
8989
mc.AddRefinableObj(self.d)
9090
mc.RandomizeStartingConfig()
91-
mc.RunSimulatedAnnealing(nbSteps=1000, silent=True)
91+
mc.RunSimulatedAnnealing(nb_step=1000)
9292

9393
def test_mc_pt(self):
9494
mc = MonteCarlo()
9595
mc.AddRefinableObj(self.c)
9696
mc.AddRefinableObj(self.d)
9797
mc.RandomizeStartingConfig()
98-
mc.RunParallelTempering(nbSteps=1000, silent=True)
98+
mc.RunParallelTempering(nb_step=1000)
9999

100100
# TODO: this is experimental and leads to segfault if testcrystal:testDummyAtom() has been run before (?!)
101101
# def test_mc_lsq(self):
@@ -113,9 +113,9 @@ def test_mc_set_algo(self):
113113
mc.AddRefinableObj(self.d)
114114
mc.RandomizeStartingConfig()
115115
mc.SetAlgorithmSimulAnnealing(AnnealingSchedule.SMART, 1000.0, 1.0)
116-
mc.Optimize(nbSteps=1000, silent=True)
116+
mc.Optimize(nb_step=1000)
117117
mc.SetAlgorithmParallTempering(AnnealingSchedule.SMART, 1000.0, 1.0)
118-
mc.Optimize(nbSteps=1000, silent=True)
118+
mc.Optimize(nb_step=1000)
119119

120120

121121
if __name__ == "__main__":

0 commit comments

Comments
 (0)