Difference between revisions of "Relax 3.3.6"

From relax wiki
Jump to navigation Jump to search
(API documentation links.)
(Extensive links to the API documentation.)
Line 100: Line 100:
 
* Updated the Structure system tests for the [http://www.nmr-relax.com/manual/structure_align.html structure.align] and [http://www.nmr-relax.com/manual/structure_superimpose.html structure.superimpose] user function merger.
 
* Updated the Structure system tests for the [http://www.nmr-relax.com/manual/structure_align.html structure.align] and [http://www.nmr-relax.com/manual/structure_superimpose.html structure.superimpose] user function merger.
 
* Fix for the [http://www.nmr-relax.com/manual/structure_sequence_alignment.html structure.sequence_alignment user function].  The alignment data should be stored in ds.sequence_alignments rather than ds.sequence_alignment.
 
* Fix for the [http://www.nmr-relax.com/manual/structure_sequence_alignment.html structure.sequence_alignment user function].  The alignment data should be stored in ds.sequence_alignments rather than ds.sequence_alignment.
* Sequence alignments can now be retrieved without supplying the algorithm settings.  This is in the data_store.seq_align.Sequence_alignments.find_alignment() method.  The change allows for the retrieval of pre-existing sequence alignments at any stage.
+
* Sequence alignments can now be retrieved without supplying the algorithm settings.  This is in the [http://www.nmr-relax.com/api/3.3/data_store.seq_align.Sequence_alignments-class.html#find_alignment data_store.seq_align.Sequence_alignments.find_alignment() method].  The change allows for the retrieval of pre-existing sequence alignments at any stage.
* Added a function for assemble the common atomic coordinates taking sequence alignments into account.  This is the new pipe_control.structure.main.assemble_structural_coordinates() function.  It takes the sequence alignment logic out of the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html#assemble_coord_array lib.structure.internal.coordinates.assemble_coord_array() function] so that sequence alignments in the relax data store can be used.  The logic has also been redefined as:  1, use a sequence alignment from the relax data store if present;  2, use no sequence alignment if coordinates only come from structural models;  3, fall back to a residue number based alignment.  The residue number based alignment is yet to be implemented.  As a consequence, the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html#assemble_coord_array lib.structure.internal.coordinates.assemble_coord_array() function] has been greatly simplified.  It no longer handles sequence alignments, but instead expects the residue skipping data structure, built from the alignment, as an argument.  The seq_info_flag argument has also been eliminated in this function as well as the pipe_control.structure.main module.
+
* Added a function for assemble the common atomic coordinates taking sequence alignments into account.  This is the new [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_structural_coordinates pipe_control.structure.main.assemble_structural_coordinates() function].  It takes the sequence alignment logic out of the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html#assemble_coord_array lib.structure.internal.coordinates.assemble_coord_array() function] so that sequence alignments in the relax data store can be used.  The logic has also been redefined as:  1, use a sequence alignment from the relax data store if present;  2, use no sequence alignment if coordinates only come from structural models;  3, fall back to a residue number based alignment.  The residue number based alignment is yet to be implemented.  As a consequence, the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html#assemble_coord_array lib.structure.internal.coordinates.assemble_coord_array() function] has been greatly simplified.  It no longer handles sequence alignments, but instead expects the residue skipping data structure, built from the alignment, as an argument.  The seq_info_flag argument has also been eliminated in this function as well as the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html pipe_control.structure.main module].
* Updated the [http://www.nmr-relax.com/manual/structure_displacement.html structure.displacement user function] for the changed atomic assembly logic.  This now uses the assemble_structural_coordinates() function of the pipe_control.structure.main module to obtain the common coordinates based on pre-existing sequence alignments, no-alignment, or the default of a residue number based alignment.
+
* Updated the [http://www.nmr-relax.com/manual/structure_displacement.html structure.displacement user function] for the changed atomic assembly logic.  This now uses the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_structural_coordinates assemble_structural_coordinates() function] of the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html pipe_control.structure.main module] to obtain the common coordinates based on pre-existing sequence alignments, no-alignment, or the default of a residue number based alignment.
* Updated the [http://www.nmr-relax.com/manual/structure_find_pivot.html structure.find_pivot user function] for the changed atomic assembly logic.  This now uses the assemble_structural_coordinates() function of the pipe_control.structure.main module to obtain the common coordinates based on pre-existing sequence alignments, no-alignment, or the default of a residue number based alignment.
+
* Updated the [http://www.nmr-relax.com/manual/structure_find_pivot.html structure.find_pivot user function] for the changed atomic assembly logic.  This now uses the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_structural_coordinates assemble_structural_coordinates() function] of the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html pipe_control.structure.main module] to obtain the common coordinates based on pre-existing sequence alignments, no-alignment, or the default of a residue number based alignment.
* Updated the [http://www.nmr-relax.com/manual/structure_atomic_fluctuations.html structure.atomic_fluctuations user function] for the changed atomic assembly logic.  This now uses the assemble_structural_coordinates() function of the pipe_control.structure.main module to obtain the common coordinates based on pre-existing sequence alignments, no-alignment, or the default of a residue number based alignment.
+
* Updated the [http://www.nmr-relax.com/manual/structure_atomic_fluctuations.html structure.atomic_fluctuations user function] for the changed atomic assembly logic.  This now uses the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_structural_coordinates assemble_structural_coordinates() function] of the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html pipe_control.structure.main module] to obtain the common coordinates based on pre-existing sequence alignments, no-alignment, or the default of a residue number based alignment.
* Updated the [http://www.nmr-relax.com/manual/structure_rmsd.html structure.rmsd user function] for the changed atomic assembly logic.  This now uses the assemble_structural_coordinates() function of the pipe_control.structure.main module to obtain the common coordinates based on pre-existing sequence alignments, no-alignment, or the default of a residue number based alignment.
+
* Updated the [http://www.nmr-relax.com/manual/structure_rmsd.html structure.rmsd user function] for the changed atomic assembly logic.  This now uses the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_structural_coordinates assemble_structural_coordinates() function] of the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html pipe_control.structure.main module] to obtain the common coordinates based on pre-existing sequence alignments, no-alignment, or the default of a residue number based alignment.
* Updated the [http://www.nmr-relax.com/manual/structure_web_of_motion.html structure.web_of_motion user function] for the changed atomic assembly logic.  This now uses the assemble_structural_coordinates() function of the pipe_control.structure.main module to obtain the common coordinates based on pre-existing sequence alignments, no-alignment, or the default of a residue number based alignment.
+
* Updated the [http://www.nmr-relax.com/manual/structure_web_of_motion.html structure.web_of_motion user function] for the changed atomic assembly logic.  This now uses the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_structural_coordinates assemble_structural_coordinates() function] of the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html pipe_control.structure.main module] to obtain the common coordinates based on pre-existing sequence alignments, no-alignment, or the default of a residue number based alignment.
 
* Fix for the [http://www.nmr-relax.com/manual/structure_superimpose.html structure.superimpose user function] if no data pipes are supplied.  This reintroduces the pipes list construction.
 
* Fix for the [http://www.nmr-relax.com/manual/structure_superimpose.html structure.superimpose user function] if no data pipes are supplied.  This reintroduces the pipes list construction.
* Fix for the new pipe_control.structure.main.assemble_structural_coordinates() function.  The atom_id argument is now passed into the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html#assemble_atomic_coordinates assemble_atomic_coordinates() function] of the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html lib.structure.internal.coordinates module] so that atom subsets are once again recognised.
+
* Fix for the new [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_structural_coordinates pipe_control.structure.main.assemble_structural_coordinates() function].  The atom_id argument is now passed into the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html#assemble_atomic_coordinates assemble_atomic_coordinates() function] of the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html lib.structure.internal.coordinates module] so that atom subsets are once again recognised.
* Another fix for the new pipe_control.structure.main.assemble_structural_coordinates() function.  The logic for determining if only models will be superimposed was incorrect.
+
* Another fix for the new [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_structural_coordinates pipe_control.structure.main.assemble_structural_coordinates() function].  The logic for determining if only models will be superimposed was incorrect.
* Implemented the residue number based alignment in the atomic assembly function.  This is in the new pipe_control.structure.main.assemble_structural_coordinates() function.  The code for creating the residue skipping data structure is now shared between the three sequence alignment options.
+
* Implemented the residue number based alignment in the atomic assembly function.  This is in the new [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_structural_coordinates pipe_control.structure.main.assemble_structural_coordinates() function].  The code for creating the residue skipping data structure is now shared between the three sequence alignment options.
* Implemented the multiple sequence alignment method based on residue numbers.  This is the new msa_residue_numbers() function in the lib.sequence_alignment.msa module.  The logic is rather basic in that the alignment is based on a residue number range from the lowest residue number to the highest - i.e. it does not take into account gaps in common between all input sequences.
+
* Implemented the multiple sequence alignment method based on residue numbers.  This is the new [http://www.nmr-relax.com/api/3.3/lib.sequence_alignment.msa-module.html#msa_residue_numbers msa_residue_numbers() function] in the [http://www.nmr-relax.com/api/3.3/lib.sequence_alignment.msa-module.html lib.sequence_alignment.msa module].  The logic is rather basic in that the alignment is based on a residue number range from the lowest residue number to the highest - i.e. it does not take into account gaps in common between all input sequences.
* The residue number based sequence alignment is now executed when assembling atomic coordinates.  This is in the assemble_structural_coordinates() function of the pipe_control.structure.main module.
+
* The residue number based sequence alignment is now executed when assembling atomic coordinates.  This is in the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_structural_coordinates assemble_structural_coordinates() function] of the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html pipe_control.structure.main module].
* Modified the internal structural object one_letter_codes() method.  This now validates the models to make sure all models match, and the method requires the selection object so that residue subsets can be handled.
+
* Modified the internal structural object [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#one_letter_codes one_letter_codes() method].  This now validates the models to make sure all models match, and the method requires the selection object so that residue subsets can be handled.
* The [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html#assemble_atomic_coordinates assemble_atomic_coordinates() function] now calls one_letter_codes() with the selection object.  This is the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html lib.structure.internal.coordinates module] function.
+
* The [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html#assemble_atomic_coordinates assemble_atomic_coordinates() function] now calls [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#one_letter_codes one_letter_codes()] with the selection object.  This is the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html lib.structure.internal.coordinates module] function.
* Fix for the residue number based sequence alignment when assembling structural coordinates.  This is in the assemble_structural_coordinates() function of the pipe_control.structure.main module. The sequences of the different molecules can be of different lengths.
+
* Fix for the residue number based sequence alignment when assembling structural coordinates.  This is in the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_structural_coordinates assemble_structural_coordinates() function] of the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html pipe_control.structure.main module]. The sequences of the different molecules can be of different lengths.
* Shifted the residue skipping data structure construction into the relax library.  The code was originally in pipe_control.structure.main.assemble_structural_coordinates() but has been shifted into the new lib.sequence_alignment.msa.msa_residue_skipping() function.  This will also for greater code reuse.  The lib.sequence_alignment.msa module is also a better location for such functionality.
+
* Shifted the residue skipping data structure construction into the relax library.  The code was originally in [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_structural_coordinates pipe_control.structure.main.assemble_structural_coordinates()] but has been shifted into the new [http://www.nmr-relax.com/api/3.3/lib.sequence_alignment.msa-module.html#msa_residue_skipping lib.sequence_alignment.msa.msa_residue_skipping() function].  This will also for greater code reuse.  The [http://www.nmr-relax.com/api/3.3/lib.sequence_alignment.msa-module.html lib.sequence_alignment.msa module] is also a better location for such functionality.
* Renamed the Structure.test_sequence_alignment_molecules system test.  The new name is Structure.test_sequence_alignment_central_star_nw70_blosum62, to better reflect what the test is doing.
+
* Renamed the Structure.test_sequence_alignment_molecules system test.  The new name is [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_sequence_alignment_central_star_nw70_blosum62 Structure.test_sequence_alignment_central_star_nw70_blosum62], to better reflect what the test is doing.
* Modified the Structure.test_sequence_alignment_central_star_nw70_blosum62 system test.  Some residues are now deleted so that the sequences are not identical.
+
* Modified the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_sequence_alignment_central_star_nw70_blosum62  Structure.test_sequence_alignment_central_star_nw70_blosum62 system test].  Some residues are now deleted so that the sequences are not identical.
* Created the Structure.test_sequence_alignment_residue_number system test.  This will be used to test the [http://www.nmr-relax.com/manual/structure_sequence_alignment.html structure.sequence_alignment user function] together with the 'residue number' MSA algorithm.  This is simply a copy of the Structure.test_sequence_alignment_central_star_nw70_blosum62 system test with a few small changes.
+
* Created the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_sequence_alignment_residue_number Structure.test_sequence_alignment_residue_number system test].  This will be used to test the [http://www.nmr-relax.com/manual/structure_sequence_alignment.html structure.sequence_alignment user function] together with the 'residue number' MSA algorithm.  This is simply a copy of the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_sequence_alignment_central_star_nw70_blosum62 Structure.test_sequence_alignment_central_star_nw70_blosum62 system test] with a few small changes.
* Corrections and simplifications for the Structure.test_sequence_alignment_residue_number system test.
+
* Corrections and simplifications for the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_sequence_alignment_residue_number Structure.test_sequence_alignment_residue_number system test].
 
* Modified the [http://www.nmr-relax.com/manual/structure_sequence_alignment.html structure.sequence_alignment user function] arguments.  The pairwise_algorithm and matrix arguments can no be None, and they default to None.
 
* Modified the [http://www.nmr-relax.com/manual/structure_sequence_alignment.html structure.sequence_alignment user function] arguments.  The pairwise_algorithm and matrix arguments can no be None, and they default to None.
 
* Updated the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_align_CaM_BLOSUM62 Structure.test_align_CaM_BLOSUM62 system test] script.  The MSA algorithm and pairwise alignment algorithms are now specified in the [http://www.nmr-relax.com/manual/structure_sequence_alignment.html structure.sequence_alignment user function] calls.
 
* Updated the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_align_CaM_BLOSUM62 Structure.test_align_CaM_BLOSUM62 system test] script.  The MSA algorithm and pairwise alignment algorithms are now specified in the [http://www.nmr-relax.com/manual/structure_sequence_alignment.html structure.sequence_alignment user function] calls.
* Creation of the lib.sequence_alignment.msa.msa_general() function.  This consists of code from the [http://www.nmr-relax.com/manual/structure_sequence_alignment.html structure.sequence_alignment user function] backend function pipe_control.structure.main.sequence_alignment() for selecting between the different sequence alignment methods.
+
* Creation of the [http://www.nmr-relax.com/api/3.3/lib.sequence_alignment.msa-module.html#msa_general lib.sequence_alignment.msa.msa_general() function].  This consists of code from the [http://www.nmr-relax.com/manual/structure_sequence_alignment.html structure.sequence_alignment user function] backend function [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#sequence_alignment pipe_control.structure.main.sequence_alignment()] for selecting between the different sequence alignment methods.
 
* The [http://www.nmr-relax.com/manual/structure_sequence_alignment.html structure.sequence_alignment user function] now sets some arguments to None before storage.  This is for all arguments not used in the sequence alignment.  For example the residue number based alignment does not use the gap penalties, pairwise alignment algorithm or the substitution matrices.
 
* The [http://www.nmr-relax.com/manual/structure_sequence_alignment.html structure.sequence_alignment user function] now sets some arguments to None before storage.  This is for all arguments not used in the sequence alignment.  For example the residue number based alignment does not use the gap penalties, pairwise alignment algorithm or the substitution matrices.
* Fix for the lib.sequence_alignment.msa.msa_residue_skipping() function.  The sequences argument for passing in the one letter codes has been removed.  The per molecule loop should be over the alignment strings rather than one letter codes, otherwise the loop will be too short.
+
* Fix for the [http://www.nmr-relax.com/api/3.3/lib.sequence_alignment.msa-module.html#msa_residue_skipping lib.sequence_alignment.msa.msa_residue_skipping() function].  The sequences argument for passing in the one letter codes has been removed.  The per molecule loop should be over the alignment strings rather than one letter codes, otherwise the loop will be too short.
* Fix for the internal structural object atomic coordinate assembly function.  This is the pipe_control.structure.main.assemble_structural_coordinates() function.  The case of no sequence alignment being required as only models are being handled is now functional.  The strings and gaps data structures passed into the lib.sequence_alignment.msa.msa_residue_skipping() function for generating the residue skipping data structure are now set to the one letter codes and an empty structure of zeros respectively.
+
* Fix for the internal structural object atomic coordinate assembly function.  This is the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_structural_coordinates pipe_control.structure.main.assemble_structural_coordinates() function].  The case of no sequence alignment being required as only models are being handled is now functional.  The strings and gaps data structures passed into the [http://www.nmr-relax.com/api/3.3/lib.sequence_alignment.msa-module.html#msa_residue_skipping lib.sequence_alignment.msa.msa_residue_skipping() function] for generating the residue skipping data structure are now set to the one letter codes and an empty structure of zeros respectively.
 
* Test data directory renaming.  The test_suite/shared_data/diffusion_tensor/spheroid directory has been renamed to spheroid_prolate. This is in preparation for creating oblate spheroid diffusion relaxation data.
 
* Test data directory renaming.  The test_suite/shared_data/diffusion_tensor/spheroid directory has been renamed to spheroid_prolate. This is in preparation for creating oblate spheroid diffusion relaxation data.
* Creation of oblate spheroid diffusion relaxation data.  This will be used in the Structure.test_create_diff_tensor_pdb_oblate system test.
+
* Creation of oblate spheroid diffusion relaxation data.  This will be used in the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_create_diff_tensor_pdb_oblate Structure.test_create_diff_tensor_pdb_oblate system test].
 
* Fix for the oblate spheroid diffusion relaxation data.  The diffusion parameters are constrained as D<sub>x</sub> &le; D<sub>y</sub> &le; D<sub>z</sub>.
 
* Fix for the oblate spheroid diffusion relaxation data.  The diffusion parameters are constrained as D<sub>x</sub> &le; D<sub>y</sub> &le; D<sub>z</sub>.
* More fixes for the Structure.test_create_diff_tensor_pdb_oblate system test.  The initial Diso value is now set to the real final Diso, and the PDB file contents have been updated for the fixed oblate spheroidal diffusion relaxation data.
+
* More fixes for the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_create_diff_tensor_pdb_oblate Structure.test_create_diff_tensor_pdb_oblate system test].  The initial Diso value is now set to the real final Diso, and the PDB file contents have been updated for the fixed oblate spheroidal diffusion relaxation data.
* Updates for many of the Diffusion_tensor system tests.  This is due to the changed directory names in test_suite/shared_data/diffusion_tensor/.  The ds.diff_dir variable has been introduced to point to the correct data directory.
+
* Updates for many of the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.diffusion_tensor.Diffusion_tensor-class.html Diffusion_tensor system tests].  This is due to the changed directory names in test_suite/shared_data/diffusion_tensor/.  The ds.diff_dir variable has been introduced to point to the correct data directory.
* Large improvement for the GUI test tearDown() clean up method, fixing the tests on wxPython 2.8.  The user function window destruction has been shifted into a new clean_up_windows() method which is executed via wx.CallAfter() to avoid racing conditions.  In addition, the spin viewer window is destroyed between tests.  The spin viewer window change allows the GUI tests to pass on wxPython 2.8 again.  This also allows the GUI tests to progress much further on Mac OS X systems before they crash again for some other reason.  This could simply be hiding a problem in the spin viewer window.  However it is likely to be a racing problem only triggered by the super fast speed of the GUI tests and a normal user would never be able to operate the GUI on the millisecond timescale and hence may never see it.
+
* Large improvement for the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown GUI test tearDown() clean up method], fixing the tests on wxPython 2.8.  The user function window destruction has been shifted into a new [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#clean_up_windows clean_up_windows() method] which is executed via wx.CallAfter() to avoid racing conditions.  In addition, the spin viewer window is destroyed between tests.  The spin viewer window change allows the GUI tests to pass on wxPython 2.8 again.  This also allows the GUI tests to progress much further on Mac OS X systems before they crash again for some other reason.  This could simply be hiding a problem in the spin viewer window.  However it is likely to be a racing problem only triggered by the super fast speed of the GUI tests and a normal user would never be able to operate the GUI on the millisecond timescale and hence may never see it.
 
* Reverted the wxPython 2.8 warning printout when starting relax, introduced in [[relax 3.3.5]].
 
* Reverted the wxPython 2.8 warning printout when starting relax, introduced in [[relax 3.3.5]].
 
* Reverted the skipping of the GUI tests on wxPython 2.8, introduced in [[relax 3.3.5]].
 
* Reverted the skipping of the GUI tests on wxPython 2.8, introduced in [[relax 3.3.5]].
* Reverted the General.test_bug_23187_residue_delete_gui GUI test disabling, introduced in [[relax 3.3.5]].  The 'Bus Error' on Mac OS X due to this test is no longer an issue, as the spin viewer window is now destroyed after each GUI test.
+
* Reverted the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.general.General-class.html#test_bug_23187_residue_delete_gui General.test_bug_23187_residue_delete_gui GUI test] disabling, introduced in [[relax 3.3.5]].  The 'Bus Error' on Mac OS X due to this test is no longer an issue, as the spin viewer window is now destroyed after each GUI test.
* Created a special Destroy() method for the spin viewer window.  This is for greater control of the spin viewer window destruction.  First the methods registered with the observer objects are unregistered, then the children of the spin viewer window are destroyed, and finally the main spin viewer window is destroyed.  This change saves a lot of GUI resources in the GUI tests (there is a large reduction in 'User Objects' and 'GDI Objects' used on MS Windows systems, hence an equivalent resource reduction on other operating systems).
+
* Created a special [http://www.nmr-relax.com/api/3.3/gui.spin_viewer.frame.Spin_view_window-class.html#Destroy Destroy() method for the spin viewer window].  This is for greater control of the spin viewer window destruction.  First the methods registered with the observer objects are unregistered, then the children of the spin viewer window are destroyed, and finally the main spin viewer window is destroyed.  This change saves a lot of GUI resources in the GUI tests (there is a large reduction in 'User Objects' and 'GDI Objects' used on MS Windows systems, hence an equivalent resource reduction on other operating systems).
* Fix for the GUI test clean_up_windows() method called from tearDown(). The user function window (Wiz_window) must be closed before the user function page (Uf_page), so that the Wiz_window._handler_close() can still operate the methods of the Uf_page. This avoids a huge quantity of these errors:  Traceback (most recent call last): __getattr__ wx._core.PyDeadObjectError: The C++ part of the Uf_page object has been deleted, attribute access no longer allowed.
+
* Fix for the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#clean_up_windows GUI test clean_up_windows() method] called from [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown tearDown()].  The user function window ([http://www.nmr-relax.com/api/3.3/gui.wizards.wiz_objects.Wiz_window-class.html Wiz_window]) must be closed before the user function page ([http://www.nmr-relax.com/api/3.3/gui.uf_objects.Uf_page-class.html Uf_page]), so that the [http://www.nmr-relax.com/api/3.3/gui.wizards.wiz_objects.Wiz_window-class.html#_handler_close Wiz_window._handler_close()] can still operate the methods of the [http://www.nmr-relax.com/api/3.3/gui.uf_objects.Uf_page-class.html Uf_page]This avoids a huge quantity of these errors:  Traceback (most recent call last): __getattr__ wx._core.PyDeadObjectError: The C++ part of the Uf_page object has been deleted, attribute access no longer allowed.
* Simplification of the Dead_uf_pages.test_mol_create GUI test. The RelaxError cannot be caught from the GUI user function window, therefore the try statement has been eliminated.
+
* Simplification of the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.dead_uf_pages.Dead_uf_pages-class.html#test_mol_create Dead_uf_pages.test_mol_create GUI test]The RelaxError cannot be caught from the GUI user function window, therefore the try statement has been eliminated.
* More memory saving improvements for the GUI test suite tearDown() methodThe clean_up_windows() method now loops through all top level windows (frames, dialogs, panels, etc.) and calls their Destroy() method.
+
* More memory saving improvements for the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown GUI test suite tearDown() method].  The [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#clean_up_windows clean_up_windows() method] now loops through all top level windows (frames, dialogs, panels, etc.) and calls their Destroy() method.
* Created the gui.uf_objects.Uf_object.Destroy() method. This will be used to cleanly destroy the user function object.
+
* Created the [http://www.nmr-relax.com/api/3.3/gui.uf_objects.Uf_object-class.html#Destroy gui.uf_objects.Uf_object.Destroy() method].  This will be used to cleanly destroy the user function object.
* Modified the GUI test suite _execute_uf() methodThis user function execution method now calls the user function GUI object Destroy() method to clean up all GUI objects. This should save memory for GUI objects in the GUI test suite.
+
* Modified the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#_execute_uf GUI test suite _execute_uf() method]This user function execution method now calls the [http://www.nmr-relax.com/api/3.3/gui.uf_objects.Uf_object-class.html#Destroy user function GUI object Destroy() method] to clean up all GUI objects.  This should save memory for GUI objects in the GUI test suite.
* Modified the GUI test suite tearDown() method.  The clean_up_windows() method called by tearDown() now prints out a lost of all of the living windows instead of trying to destroy them (which causes the running of the GUI tests in the GUI to cause the GUI to be destroyed). The printouts will be used for debugging purposes.
+
* Modified the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown GUI test suite tearDown() method]The [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#clean_up_windows clean_up_windows() method] called by [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown tearDown()] now prints out a lost of all of the living windows instead of trying to destroy them (which causes the running of the GUI tests in the GUI to cause the GUI to be destroyed).  The printouts will be used for debugging purposes.
* Fixes for the custom Wiz_window.Destroy() method.  This will now first close the wizard window via the Close() method to make sure all of the wizard pages are properly updatedIn the end the wizard DestroyChildren() method is called to clean up all child wx objects, and finally Destroy() is called to eliminate the wizard GUI object.
+
* Fixes for the custom [http://www.nmr-relax.com/api/3.3/gui.wizards.wiz_objects.Wiz_window-class.html#Destroy Wiz_window.Destroy() method].  This will now first close the wizard window via the Close() method to make sure all of the wizard pages are properly updatedIn the end the wizard DestroyChildren() method is called to clean up all child wx objects, and finally Destroy() is called to eliminate the wizard GUI object.
* The GUI test suite tearDown() method now calls the user function GUI wizard Destroy() methodThis is for better handling of user function elimination.
+
* The [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown GUI test suite tearDown() method] now calls the [http://www.nmr-relax.com/api/3.3/gui.wizards.wiz_objects.Wiz_window-class.html#Destroy user function GUI wizard Destroy() method].  This is for better handling of user function elimination.
* Fixes for the user function GUI object Destroy() method. This matches the code just deleted in the GUI test suite tearDown() method for handing the user function page object.
+
* Fixes for the [http://www.nmr-relax.com/api/3.3/gui.uf_objects.Uf_object-class.html#Destroy user function GUI object Destroy() method]This matches the code just deleted in the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown GUI test suite tearDown() method] for handing the user function page object.
* More fixes for the user function GUI object Destroy() method. This page GUI object is destroyed by the wizard window Destroy() method, so destroying again causes wxPython runtime errors.
+
* More fixes for the [http://www.nmr-relax.com/api/3.3/gui.uf_objects.Uf_object-class.html#Destroy user function GUI object Destroy() method].  This page GUI object is destroyed by the [http://www.nmr-relax.com/api/3.3/gui.wizards.wiz_objects.Wiz_window-class.html#Destroy wizard window Destroy() method], so destroying again causes wxPython runtime errors.
* Spacing printout for the list of still open GUI window elements.  This is for the GUI test tearDown() method.
+
* Spacing printout for the list of still open GUI window elements.  This is for the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown GUI test tearDown() method].
* Shifted the printouts from the GUI tests suite clean_up_windows() method to the tearDown() methodThis change means that the printouts are not within a wx.CallAfter() call, but rather at the end of the tearDown() method just prior to starting the next test.
+
* Shifted the printouts from the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#clean_up_windows GUI tests suite clean_up_windows() method] to the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown tearDown() method].  This change means that the printouts are not within a wx.CallAfter() call, but rather at the end of the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown tearDown() method] just prior to starting the next test.
* Simplification of the GUI analysis post_reset() method.  This now uses the delete_all() and hence delete_analysis() methods to clean up the GUIThe reset argument has been added to skip the manipulation of relax data store data, as the data store is empty after a reset.  However the calling of the delete_analysis() method now ensures that the analysis specific delete() method is now called so that the GUI elements can be properly destroyed.
+
* Simplification of the [http://www.nmr-relax.com/api/3.3/gui.analyses.Analysis_controller-class.html#post_reset GUI analysis post_reset() method].  This now uses the [http://www.nmr-relax.com/api/3.3/gui.analyses.Analysis_controller-class.html#delete_all delete_all()] and hence [http://www.nmr-relax.com/api/3.3/gui.analyses.Analysis_controller-class.html#delete_analysis delete_analysis()] methods to clean up the GUI.  The reset argument has been added to skip the manipulation of relax data store data, as the data store is empty after a reset.  However the calling of the delete_analysis() method now ensures that the analysis specific delete() method is now called so that the GUI elements can be properly destroyed.
* Proper destruction of the peak analysis wizard of the NOE GUI analysis. The peak wizard's Destroy() method is now called and the self.peak_wizard object deleted in the NOE GUI analysis delete() method.
+
* Proper destruction of the peak analysis wizard of the NOE GUI analysis.  The peak wizard's Destroy() method is now called and the self.peak_wizard object deleted in the [http://www.nmr-relax.com/api/3.3/gui.analyses.auto_noe.Auto_noe-class.html#delete NOE GUI analysis delete() method].
* Improved memory management in the NOE GUI analysis peak_wizard_launch() method. This method was just overwriting the self.peak_wizard object with a new object.  However this does not destroy the wxPython window. Now if a peak wizard is detected, its Destroy() method is called before overwriting the object.
+
* Improved memory management in the [http://www.nmr-relax.com/api/3.3/gui.analyses.auto_noe.Auto_noe-class.html#peak_wizard_launch NOE GUI analysis peak_wizard_launch() method].  This method was just overwriting the self.peak_wizard object with a new object.  However this does not destroy the wxPython window.  Now if a peak wizard is detected, its Destroy() method is called before overwriting the object.
* Improved GUI clean up when terminating GUI tests. The clean_up_windows() method, called from tearDown(), now also destroys the pipe editor window, the results viewer window, and the prompt window. This ensures that all of the major relax windows are destroyed between GUI tests.
+
* Improved GUI clean up when terminating GUI tests.  The [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#clean_up_windows clean_up_windows() method], called from [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown tearDown()], now also destroys the pipe editor window, the results viewer window, and the prompt window.  This ensures that all of the major relax windows are destroyed between GUI tests.
* Improved memory management in the relaxation curve-fitting GUI analysis. The peak intensity loading wizard is now properly destroyed.  This is both via the delete() function for terminating the analysis calling the wizard Delete() method, and in the peak_wizard_launch() method calling the wizard Delete() method prior to overwriting the self.peak_wizard object with a new GUI wizard.
+
* Improved memory management in the relaxation curve-fitting GUI analysis.  The peak intensity loading wizard is now properly destroyed.  This is both via the [http://www.nmr-relax.com/api/3.3/gui.analyses.auto_rx_base.Auto_rx-class.html#delete delete() function] for terminating the analysis calling the wizard Delete() method, and in the [http://www.nmr-relax.com/api/3.3/gui.analyses.auto_rx_base.Auto_rx-class.html#peak_wizard_launch peak_wizard_launch() method] calling the wizard Delete() method prior to overwriting the self.peak_wizard object with a new GUI wizard.
* Improved memory management in the model-free GUI analysis. The dipole-dipole interaction wizard is now properly destroyed.  This is both via the delete() function for terminating the analysis calling the wizard Delete() method, and in the setup_dipole_pair() method calling the wizard Delete() method prior to overwriting the self.dipole_wizard object with a new GUI wizard.
+
* Improved memory management in the model-free GUI analysis.  The dipole-dipole interaction wizard is now properly destroyed.  This is both via the [http://www.nmr-relax.com/api/3.3/gui.analyses.auto_model_free.Auto_model_free-class.html#delete delete() function] for terminating the analysis calling the wizard Delete() method, and in the [http://www.nmr-relax.com/api/3.3/gui.analyses.auto_model_free.Auto_model_free-class.html#setup_dipole_pair setup_dipole_pair() method] calling the wizard Delete() method prior to overwriting the self.dipole_wizard object with a new GUI wizard.
* Improved memory management in the model-free GUI analysis. The analysis mode selection window (a wx.Dialog) is now being destroyed in the analysis delete() method.  This appears to work on Linux, Windows, and Mac systems.
+
* Improved memory management in the model-free GUI analysis.  The analysis mode selection window (a wx.Dialog) is now being destroyed in the [http://www.nmr-relax.com/api/3.3/gui.analyses.auto_model_free.Auto_model_free-class.html#delete analysis delete() method].  This appears to work on Linux, Windows, and Mac systems.
* Improved memory management in the model-free GUI analysis. The local tm and model-free model windows are now destroyed in the GUI analysis delete() method.
+
* Improved memory management in the model-free GUI analysis.  The local tm and model-free model windows are now destroyed in the [http://www.nmr-relax.com/api/3.3/gui.analyses.auto_model_free.Auto_model_free-class.html#delete GUI analysis delete() method].
* Improved termination of the GUI tests.  The clean_up_windows() method now calls the results viewer and pipe editor window handler_close() methods.  This ensures that all observer objects are cleared out so that the methods of the dead windows can no longer be called.
+
* Improved termination of the GUI tests.  The [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#clean_up_windows clean_up_windows() method] now calls the results viewer and pipe editor window handler_close() methods.  This ensures that all observer objects are cleared out so that the methods of the dead windows can no longer be called.
 
* Fix for the previous commit, calls to wx.Yield() are required to flush the calls on the observer objects after unregisteristing them and deleting the results and pipe editor windows.
 
* Fix for the previous commit, calls to wx.Yield() are required to flush the calls on the observer objects after unregisteristing them and deleting the results and pipe editor windows.
* Improved memory management in the relaxation dispersion GUI analysis.  The peak intensity loading wizard is now properly destroyed.  This is both via the delete() function for terminating the analysis calling the wizard Delete() method, and in the peak_wizard_launch() method calling the wizard Delete() method prior to overwriting the self.peak_wizard object with a new GUI wizard.
+
* Improved memory management in the relaxation dispersion GUI analysis.  The peak intensity loading wizard is now properly destroyed.  This is both via the [http://www.nmr-relax.com/api/3.3/gui.analyses.auto_relax_disp.Auto_relax_disp-class.html#delete delete() function] for terminating the analysis calling the wizard Delete() method, and in the [http://www.nmr-relax.com/api/3.3/gui.analyses.auto_relax_disp.Auto_relax_disp-class.html#peak_wizard_launch peak_wizard_launch() method] calling the wizard Delete() method prior to overwriting the self.peak_wizard object with a new GUI wizard.
* Created custom Destroy() methods for the pipe editor and results viewer GUI windows.
+
* Created custom Destroy() methods for the [http://www.nmr-relax.com/api/3.3/gui.relax_prompt.Prompt-class.html#Destroy pipe editor] and results viewer GUI windows.
* Improved memory management in the relaxation dispersion GUI analysis.  The dispersion model list window is now destroyed in the GUI analysis delete() method.
+
* Improved memory management in the relaxation dispersion GUI analysis.  The dispersion model list window is now destroyed in the [http://www.nmr-relax.com/api/3.3/gui.analyses.auto_relax_disp.Auto_relax_disp-class.html#delete GUI analysis delete() method].
 
* Fixes for the custom Destroy() methods for the pipe editor and results viewer GUI windows.  The event argument is now a keyword argument which defaults to None.  This allows the Destroy() methods to be called without arguments.
 
* Fixes for the custom Destroy() methods for the pipe editor and results viewer GUI windows.  The event argument is now a keyword argument which defaults to None.  This allows the Destroy() methods to be called without arguments.
 
* Temporary disablement of the results viewer window destruction in the GUI tests.  This currently, for some unknown reason, causes segfault crashes of the GUI tests on Linux systems.
 
* Temporary disablement of the results viewer window destruction in the GUI tests.  This currently, for some unknown reason, causes segfault crashes of the GUI tests on Linux systems.
* Changes for how the main GUI windows are destroyed by the GUI test tearDown() method.  These changes revert some of the code of previous commits.  The recently introduced pipe editor and results viewer windows Delete() methods have been deleted.  Instead the Close() methods are called in the tearDown() method to unregister the windows from the observer objects, followed by a wx.Yield() call to flush the wx events, and then the clean_up_windows() GUI test base method is called within a wx.CallAfter() call.  This avoids the racing induced segfaults in the GUI tests.
+
* Changes for how the main GUI windows are destroyed by the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown GUI test tearDown() method].  These changes revert some of the code of previous commits.  The recently introduced pipe editor and results viewer windows Delete() methods have been deleted.  Instead the Close() methods are called in the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown tearDown() method] to unregister the windows from the observer objects, followed by a wx.Yield() call to flush the wx events, and then the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#clean_up_windows clean_up_windows() GUI test base method] is called within a wx.CallAfter() call.  This avoids the racing induced segfaults in the GUI tests.
* Improved memory management in the spin viewer window.  The spin loading wizard is now destroyed in the Destroy() method as well as before reinitialising the wizard in the load_spins_wizard() method.
+
* Improved memory management in the spin viewer window.  The spin loading wizard is now destroyed in the [http://www.nmr-relax.com/api/3.3/gui.spin_viewer.frame.Spin_view_window-class.html#Destroy Destroy() method] as well as before reinitialising the wizard in the [http://www.nmr-relax.com/api/3.3/gui.spin_viewer.frame.Spin_view_window-class.html#load_spins_wizard load_spins_wizard() method].
* The GUI tests tearDown() method now prints out the Wizard windows title, if not destroyed.
+
* The [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown GUI tests tearDown() method] now prints out the Wizard windows title, if not destroyed.
 
* The Wizard window title is now being stored as a class instance variable.
 
* The Wizard window title is now being stored as a class instance variable.
* Improved memory management in the relaxation data list GUI element, as well as the base list object.  The relaxation data loading wizard is now destroyed in the Base_list.delete() method, or any wizard for that matter.  In addition, the relaxation data loading wizard is destroyed before reinitialising the wizard in the wizard_exec() method.
+
* Improved memory management in the relaxation data list GUI element, as well as the base list object.  The relaxation data loading wizard is now destroyed in the [http://www.nmr-relax.com/api/3.3/gui.components.base_list.Base_list-class.html#delete Base_list.delete() method], or any wizard for that matter.  In addition, the relaxation data loading wizard is destroyed before reinitialising the wizard in the [http://www.nmr-relax.com/api/3.3/gui.components.relax_data.Relax_data_list-class.html#wizard_exec wizard_exec() method].
* Better memory management for the missing data dialog in the GUI analyses.  The dialog is now stored as the class variable missing_data, and then is destroyed in the analysis delete() method.  Without this, the wxPython dialog would remain in memory for the lifetime of the program.
+
* Better memory management for the [http://www.nmr-relax.com/api/3.3/gui.message.Missing_data-class.html missing data dialog in the GUI analyses].  The dialog is now stored as the class variable missing_data, and then is destroyed in the analysis delete() method.  Without this, the wxPython dialog would remain in memory for the lifetime of the program.
* Improved memory management for the Sequence and Sequence_2D input GUI elements.  These are mainly used in the user function GUI windows.  The dialogs are now destroyed before a second is opened.
+
* Improved memory management for the [http://www.nmr-relax.com/api/3.3/gui.input_elements.sequence.Sequence-class.html Sequence] and [http://www.nmr-relax.com/api/3.3/gui.input_elements.sequence_2D.Sequence_2D-class.html Sequence_2D] input GUI elements.  These are mainly used in the user function GUI windows.  The dialogs are now destroyed before a second is opened.
* Improved memory management for the GUI user function windows.  The Destroy() method will now destroy any Sequence or Sequence_2D windows used for the user function arguments.
+
* Improved memory management for the GUI user function windows.  The [http://www.nmr-relax.com/api/3.3/gui.uf_objects.Uf_object-class.html#Destroy Destroy() method] will now destroy any [http://www.nmr-relax.com/api/3.3/gui.input_elements.sequence.Sequence-class.html Sequence] or [http://www.nmr-relax.com/api/3.3/gui.input_elements.sequence_2D.Sequence_2D-class.html Sequence_2D] windows used for the user function arguments.
* The relax prompt window is now being destroyed by the GUI test suite tearDown() method.  The window is first closed in the tearDown() method and then destroyed in the clean_up_windows() method.
+
* The [http://www.nmr-relax.com/api/3.3/gui.relax_prompt.Prompt-class.html relax prompt window] is now being destroyed by the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown GUI test suite tearDown() method].  The window is first closed in the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown tearDown() method] and then destroyed in the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#clean_up_windows clean_up_windows() method].
* Added memory management checking to the GUI test suite tearDown() method.  If any top level windows are present, excluding the main GUI window and the relax controller, then a RelaxError will be raised.  Such a check will significantly help in future GUI coding, as now there will be feedback if not all windows are properly destroyed.
+
* Added memory management checking to the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown GUI test suite tearDown() method].  If any top level windows are present, excluding the main GUI window and the relax controller, then a RelaxError will be raised.  Such a check will significantly help in future GUI coding, as now there will be feedback if not all windows are properly destroyed.
 
* Popup menus are now properly destroyed in the GUI tests.  In many instances, the wx.Menu.Destroy() method was only being called when the GUI is shown.  This causes memory leaking in the GUI tests.
 
* Popup menus are now properly destroyed in the GUI tests.  In many instances, the wx.Menu.Destroy() method was only being called when the GUI is shown.  This causes memory leaking in the GUI tests.
 
* Changed the title for the user function GUI windows.  To better help identify what the window is, the title is now the user function name together with text saying that it is a user function.
 
* Changed the title for the user function GUI windows.  To better help identify what the window is, the title is now the user function name together with text saying that it is a user function.
* Removed the wx.CallAfter() call in the GUI tests tearDown() method.  This was used to call the clean_up_windows() method.  However the value of wx.Thread_IsMain() shows that the tearDown() method executes in the main GUI thread.  Therefore the wx.CallAfter() call for avoiding racing conditions is not needed.
+
* Removed the wx.CallAfter() call in the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown GUI tests tearDown() method].  This was used to call the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#clean_up_windows clean_up_windows() method].  However the value of wx.Thread_IsMain() shows that the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown tearDown() method] executes in the main GUI thread.  Therefore the wx.CallAfter() call for avoiding racing conditions is not needed.
* Fix for the GUI tests clean_up_windows() tearDown method.  After destroying all of the main GUI windows, a wx.Yield() call is made to flush the wxPython event queue.  This seems to help with the memory management.
+
* Fix for the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#clean_up_windows GUI tests clean_up_windows() tearDown method].  After destroying all of the main GUI windows, a wx.Yield() call is made to flush the wxPython event queue.  This seems to help with the memory management.
* Temporary disabling of the memory management check in the GUI tests tearDown() method.  For some reason, it appears as if it is not possible to destroy wx Windows on MS Windows.
+
* Temporary disabling of the memory management check in the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#tearDown GUI tests tearDown() method].  For some reason, it appears as if it is not possible to destroy wx Windows on MS Windows.
* Created the relax GUI prompt Destroy() method.  This is used to cleanly destroy the GUI prompt by first unregistering with the observer objects, destroying then deleting the wx.py.shell.Shell instance, and finally destroying the window.
+
* Created the [http://www.nmr-relax.com/api/3.3/gui.relax_prompt.Prompt-class.html#Destroy relax GUI prompt Destroy() method].  This is used to cleanly destroy the GUI prompt by first unregistering with the observer objects, destroying then deleting the wx.py.shell.Shell instance, and finally destroying the window.
 
* Modified the manual_c_module.py developer script so that the path can be supplied on the command line.
 
* Modified the manual_c_module.py developer script so that the path can be supplied on the command line.
 
* Removed some unused imports, as found by devel_scripts/find_unused_imports.py.
 
* Removed some unused imports, as found by devel_scripts/find_unused_imports.py.
Line 190: Line 190:
 
* Removal of unused imports from the GUI user function memory testing scripts.
 
* Removal of unused imports from the GUI user function memory testing scripts.
 
* Created a script for testing the memory management when calling the time GUI user function.
 
* Created a script for testing the memory management when calling the time GUI user function.
* Large memory management improvement for the relax GUI wizards and GUI user functions.  The pympler.muppy based memory management scripts in devel_scripts/memory_management for testing the GUI user function windows was showing that for each GUI user function call, 28 wx._core.BoxSizer elements were remaining in memory.  This was traced back to the gui.wizards.wiz_objects.Wiz_window class, specifically the self._page_sizers and self._button_sizers lists storing wx.BoxSizer instances.  The problem was that 16 page sizers and 16 button sizers were initialised each time for later use, however the add_page() method only added a small subset of these to the self._main_sizer wx.BoxSizer object.  But the Destroy() method was only capable of destroying the wx.BoxSizer instances associated with another wxPython object.  The fix was to add all page and button sizers to the self._main_sizer object upon initialisation.  This will solve many memory issues in the GUI, especially in the GUI tests on Mac OS X systems causing 'memory error' or 'bus error' messages and on MS Windows due to 'USER Object' and 'GDI object' limitations.
+
* Large memory management improvement for the relax GUI wizards and GUI user functions.  The pympler.muppy based memory management scripts in devel_scripts/memory_management for testing the GUI user function windows was showing that for each GUI user function call, 28 wx._core.BoxSizer elements were remaining in memory.  This was traced back to the [http://www.nmr-relax.com/api/3.3/gui.wizards.wiz_objects.Wiz_window-class.html gui.wizards.wiz_objects.Wiz_window class], specifically the self._page_sizers and self._button_sizers lists storing wx.BoxSizer instances.  The problem was that 16 page sizers and 16 button sizers were initialised each time for later use, however the [http://www.nmr-relax.com/api/3.3/gui.wizards.wiz_objects.Wiz_window-class.html#add_page add_page() method] only added a small subset of these to the self._main_sizer wx.BoxSizer object.  But the Destroy() method was only capable of destroying the wx.BoxSizer instances associated with another wxPython object.  The fix was to add all page and button sizers to the self._main_sizer object upon initialisation.  This will solve many memory issues in the GUI, especially in the GUI tests on Mac OS X systems causing 'memory error' or 'bus error' messages and on MS Windows due to 'USER Object' and 'GDI object' limitations.
 
* The maximum number of pages in the GUI wizard is no longer hardcoded.  The max_pages argument has been added to allow this value to be changed.
 
* The maximum number of pages in the GUI wizard is no longer hardcoded.  The max_pages argument has been added to allow this value to be changed.
* Fix for GUI wizards and GUI user functions.  The recent memory management changes caused the wizard windows to have an incorrect layout so that the wizard pages were not visible.  Reperforming a layout of the GUI elements did not help.  The solution is to not initialise sets of max_pages of wx.BoxSizer elements in the wizard __init__() method, but to generate and append these dynamically via the add_page() method.  The change now means that there are no longer multiple unused wx.BoxSizer instances generated for each wizard window created.
+
* Fix for GUI wizards and GUI user functions.  The recent memory management changes caused the wizard windows to have an incorrect layout so that the wizard pages were not visible.  Reperforming a layout of the GUI elements did not help.  The solution is to not initialise sets of max_pages of wx.BoxSizer elements in the [http://www.nmr-relax.com/api/3.3/gui.wizards.wiz_objects.Wiz_window-class.html#__init__ wizard __init__() method], but to generate and append these dynamically via the [http://www.nmr-relax.com/api/3.3/gui.wizards.wiz_objects.Wiz_window-class.html#add_page add_page() method].  The change now means that there are no longer multiple unused wx.BoxSizer instances generated for each wizard window created.
* Fix for the GUI wizard _go_next() method.  The way to determine if there are no more pages needs to be changed, as there are now no empty list elements at the end of the wizard storage objects.
+
* Fix for the [http://www.nmr-relax.com/api/3.3/gui.wizards.wiz_objects.Wiz_window-class.html#_go_next GUI wizard _go_next() method].  The way to determine if there are no more pages needs to be changed, as there are now no empty list elements at the end of the wizard storage objects.
* Another fix for the now variable sized wizard page list.  This time the fix is in the GUI user function __call__() method.
+
* Another fix for the now variable sized wizard page list.  This time the fix is in the [http://www.nmr-relax.com/api/3.3/prompt.uf_objects.Uf_object-class.html#__call__ GUI user function __call__() method].
* Created the Relax_fit.test_bug_23244_Iinf_graph system test.  This is to catch [https://gna.org/bugs/?23244 bug #23244].
+
* Created the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.relax_fit.Relax_fit-class.html#test_bug_23244_Iinf_graph Relax_fit.test_bug_23244_Iinf_graph system test].  This is to catch [https://gna.org/bugs/?23244 bug #23244].
 
<section end=changes/>
 
<section end=changes/>
  
Line 202: Line 202:
 
<section begin=bugfixes/>
 
<section begin=bugfixes/>
 
* Bug fix for the [http://www.nmr-relax.com/manual/structure_align.html structure.align user function].  The addition of the molecule name to the displacement ID is now correctly performed.
 
* Bug fix for the [http://www.nmr-relax.com/manual/structure_align.html structure.align user function].  The addition of the molecule name to the displacement ID is now correctly performed.
* Fix for the new Internal_selection.count_atoms() internal structural object selection method.  The method was previously returning the total number of molecules, not the total number of atoms in the selection.
+
* Fix for the new [http://www.nmr-relax.com/api/3.3/lib.structure.internal.selection.Internal_selection-class.html#count_atoms Internal_selection.count_atoms() internal structural object selection method].  The method was previously returning the total number of molecules, not the total number of atoms in the selection.
 
* Printout fix for the backend of the [http://www.nmr-relax.com/manual/structure_translate.html structure.translate] and [http://www.nmr-relax.com/manual/structure_rotate.html structure.rotate] user functions.  Model numbers of zero were not correctly identified.  This also affects the [http://www.nmr-relax.com/manual/structure_align.html structure.align] and [http://www.nmr-relax.com/manual/structure_superimpose.html structure.superimpose] user functions which uses this backend code.
 
* Printout fix for the backend of the [http://www.nmr-relax.com/manual/structure_translate.html structure.translate] and [http://www.nmr-relax.com/manual/structure_rotate.html structure.rotate] user functions.  Model numbers of zero were not correctly identified.  This also affects the [http://www.nmr-relax.com/manual/structure_align.html structure.align] and [http://www.nmr-relax.com/manual/structure_superimpose.html structure.superimpose] user functions which uses this backend code.
* Another fix for the Internal_selection.count_atoms() internal structural object selection method.
+
* Another fix for the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.selection.Internal_selection-class.html#count_atoms Internal_selection.count_atoms() internal structural object selection method].
 
* Small fix for the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html#assemble_coord_array lib.structure.internal.coordinates.assemble_coord_array() function].  The termination condition for determining the residues in common between all structures was incorrect.
 
* Small fix for the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html#assemble_coord_array lib.structure.internal.coordinates.assemble_coord_array() function].  The termination condition for determining the residues in common between all structures was incorrect.
* The Structure.test_create_diff_tensor_pdb_oblate now uses oblate diffusion relaxation data.  This fixes [https://gna.org/bugs/?23232 bug #23232, the failure of this system test on Mac OS X]. The problem was that the system test was previously using relaxation data for prolate spheroidal diffusion and fitting an oblate tensor to that data.  This caused the solution to be slightly different on different CPUs, operating systems, Python versions, etc. and hence the PDB file representation of the diffusion would be slightly different.
+
* The [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_create_diff_tensor_pdb_oblate Structure.test_create_diff_tensor_pdb_oblate system test] now uses oblate diffusion relaxation data.  This fixes [https://gna.org/bugs/?23232 bug #23232, the failure of this system test on Mac OS X]. The problem was that the system test was previously using relaxation data for prolate spheroidal diffusion and fitting an oblate tensor to that data.  This caused the solution to be slightly different on different CPUs, operating systems, Python versions, etc. and hence the PDB file representation of the diffusion would be slightly different.
* Big bug fix for the GUI tests on MS Windows systems.  On MS Windows systems, the GUI tests were unable to complete without crashing.  This is because each GUI element requires one 'User object', and MS Windows has a maximum limit of 10,000 of these objects.  The GUI tests were taking more than 10,000 and then Windows would say - relax, you die now.  The solution is that after each GUI test, all user function windows are destroyed.  The user function page is a wx.Panel object, so this requires a Destroy() call.  But the window is a Uf_page instance which inherits from Wiz_page which inherits from wx.Dialog.  Calling Destroy() on MS Windows and Linux works fine, but is fatal on Mac OS X systems.  So the solution is to call Close() instead.
+
* Big bug fix for the GUI tests on MS Windows systems.  On MS Windows systems, the GUI tests were unable to complete without crashing.  This is because each GUI element requires one 'User object', and MS Windows has a maximum limit of 10,000 of these objects.  The GUI tests were taking more than 10,000 and then Windows would say - relax, you die now.  The solution is that after each GUI test, all user function windows are destroyed.  The user function page is a wx.Panel object, so this requires a Destroy() call.  But the window is a [http://www.nmr-relax.com/api/3.3/gui.uf_objects.Uf_page-class.html Uf_page instance] which inherits from [http://www.nmr-relax.com/api/3.3/gui.wizards.wiz_objects.Wiz_page-class.html Wiz_page] which inherits from wx.Dialog.  Calling Destroy() on MS Windows and Linux works fine, but is fatal on Mac OS X systems.  So the solution is to call Close() instead.
* Fix for the default grid_inc argument for the relaxation curve-fitting auto-analysis.  This needs to be an integer.
+
* Fix for the default grid_inc argument for the [http://www.nmr-relax.com/api/3.3/auto_analyses.relax_fit-module.html relaxation curve-fitting auto-analysis].  This needs to be an integer.
* Fix for [https://gna.org/bugs/?23244 bug #23244].  The relaxation curve-fitting auto-analysis now outputs text files and Grace graphs for the I<sub>0</sub> parameter and the I<sub>&infin;</sub> parameter if it exists.
+
* Fix for [https://gna.org/bugs/?23244 bug #23244].  The [http://www.nmr-relax.com/api/3.3/auto_analyses.relax_fit-module.html relaxation curve-fitting auto-analysis] now outputs text files and Grace graphs for the I<sub>0</sub> parameter and the I<sub>&infin;</sub> parameter if it exists.
* Fixes for the package checking unit tests on MS Windows for the target_functions package.  The compiled relaxation curve-fitting file is called target_functions\relax_fit.pyd on MS Windows. The package checking was only taking into account *.so compiled files and not *.pyd file.
+
* Fixes for the package checking unit tests on MS Windows for the [http://www.nmr-relax.com/api/3.3/target_functions-module.html target_functions package].  The compiled relaxation curve-fitting file is called target_functions\relax_fit.pyd on MS Windows. The package checking was only taking into account *.so compiled files and not *.pyd file.
 
<section end=bugfixes/>
 
<section end=bugfixes/>
  

Revision as of 08:26, 5 February 2015


Description

This is a minor feature and bugfix release. It includes the addition of the new structure.sequence_alignment user function which can use the 'Central Star' multiple sequence alignment algorithm or align based on residue numbers, saving the results in the relax data store. The assembly of structural coordinates used by the structure.align, structure.atomic_fluctuations, structure.com, structure.displacement, structure.find_pivot, structure.mean, structure.rmsd, structure.superimpose and structure.web_of_motion user functions has been redesigned around this new user function. It will use any pre-existing sequence alignments for the molecules of interest, but default to a residue number based alignment if the structure.sequence_alignment user function has not been used. This version also fixes a system test failure on Mac OS X and I parameter text files and Grace graphs are produced by the relaxation curve-fitting auto-analysis for the inversion recovery and saturation recovery experiment types.


Download

The new relax versions can be downloaded from http://www.nmr-relax.com/download.html. If binary distributions are not yet available for your platform and you manage to compile the binary modules, please consider contributing these to the relax project (described in section 3.6 of the relax manual, http://www.nmr-relax.com/manual/relax_distribution_archives.html).


CHANGES file

Version 3.3.6
(4 February 2015, from /trunk)
http://svn.gna.org/svn/relax/tags/3.3.6


Features

  • The Needleman-Wunsch sequence alignment algorithm now calculates an alignment score.
  • Implementation of the central star multiple sequence alignment (MSA) algorithm.
  • Implementation of a reside number based multiple sequence alignment (MSA) algorithm.
  • Large speed up of the molecule, residue, and spin selection object, affecting all parts of relax.
  • Sequence alignments are now saved in the relax data store.
  • Important formatting improvement for the description in the GUI user function windows, removing excess empty lines after lists.
  • Creation of the structure.sequence_alignment user function. The MSA algorithm can be set to either 'Central Star' or 'residue number', the pairwise sequence alignment algorithm to 'NW70' for the Needleman-Wunsch algorithm, and the substitution matrix to one of 'BLOSUM62', 'PAM250', or 'NUC 4.4'.
  • More advanced support for different numpy number types in the lib.xml relax library module. This allows numpy int16, int32, float32, and float64 objects to be saved in the relax data store and retrieved from relax XML save and results files.
  • Merger of structure.align into the structure.superimpose user function.
  • The assembly of common atomic coordinates by the structure user functions now takes sequence alignments into account. The logic is to first use a sequence alignment from the relax data store if present, use no sequence alignment if coordinates only come from structural models, or fall back to a residue number based alignment. This affects the structure.align, structure.atomic_fluctuations, structure.com, structure.displacement, structure.find_pivot, structure.mean, structure.rmsd, structure.superimpose and structure.web_of_motion user functions.
  • Large improvements in the memory management for all parts of the GUI.


Changes


Bugfixes


Links

For reference, the announcement for this release can also be found at following links:

Softpedia also has information about the newest relax releases:


Announcements

If you would like to receive announcements about new relax versions, please subscribe to the relax announcement mailing list. This list only receives ~10 emails per year. It is archived at the SourceForge archives and in The Mail Archive.


See also