Open main menu

Changes

Relax 3.3.2

6,400 bytes added, 15:30, 14 November 2014
Extensive links to the API documentation.
* Added example surface &chi;<sup>2</sup> values for plots. [https://gna.org/task/index.php?7826 Task #7826: Write an python class for the repeated analysis of dispersion data].
* Added example save state for more surface plotting.
* Added boolean argument to [http://www.nmr-relax.com/manual/dx.map() .html dx.map user function], to specify the creation of a parameter and associated &chi;<sup>2</sup> values file. For very very special situations, the creation of this file is not desired.* Modified that structure of points in [http://www.nmr-relax.com/manual/dx.map.html dx.map() ] is always a list of numpy arrays with 3 values.* When issuing [http://www.nmr-relax.com/manual/dx.map.html dx.map() user function ] with points, implemented the writing out of parameter file, with associated calculated &chi;<sup>2</sup> values.
* Improved the feedback in the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.test_user_functions.User_functions-class.html#test_structure_add_atom User_functions.test_structure_add_atom GUI test]. It is now clearer what the input and output data is.
* The devel_scripts/python_multiversion_test_suite.py script now runs relax with the --time flag. This is for quicker identification of failure points. It will also force the sys.stdout buffer to be flushed more often on Python 2.5 so that it does not appear as if the tests have frozen.
* Added better figure control of &chi;<sup>2</sup> values on z-axis for surface plots.
* Narrowed in dx_map in [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.relax_disp.Relax_disp-class.html#test_dx_map_clustered_create_par_file system test Relax_disp.test_dx_map_clustered_create_par_file]. This is to illustrate the failure of relax finding the global minimum. It seems there is a shallow barrier, which relax failed to climb over, in order to find the minimum value.
* Added the verbosity argument to the [http://www.nmr-relax.com/api/3.3/pipe_control.minimise-module.html#reset_min_stats pipe_control.minimise.reset_min_stats() function]. All of the minimisation code which calls this now send in their verbosity arguments. This allows the text "Resetting the minimisation statistics." to be suppressed.* Added the verbosity argument to the [http://www.nmr-relax.com/api/3.3/pipe_control.value-module.html#set pipe_control.value.set() function]. This is passed into the [http://www.nmr-relax.com/api/3.3/pipe_control.minimise-module.html#reset_min_stats pipe_control.minimise.reset_min_stats() function ] so its printouts can be silenced.* The pipe_control.opendx space mapping code now calls the [http://www.nmr-relax.com/api/3.3/pipe_control.value-module.html#set value.set() function ] with verbosity=0. This is to silence the very repetitive statistics resetting messages when executing the [http://www.nmr-relax.com/manual/dx_map.html dx.map user function].* Added more checks to the [http://www.nmr-relax.com/api/3.3/auto_analyses.dauvergne_protocol.dAuvergne_protocol-class.html#determine_rnd determine_rnd() of the dauvergne_protocol model-free auto-analysis]. This is to try to catch bizarre situations such as [https://gna.org/bugs/?22730 bug #22730, model-free auto-analysis - relax stops and quits at the polate step]. The following additional fatal conditions are now checked for: A file with the same name as the base model directory already exists; The base model directory is not readable; The base model directory is not writable. The last two could be caused by file system corruptions. In addition, the presence of the base model directory is checked for using os.path.isdir() rather than catching errors coming out of the os.listdir() function. These changes should make the analysis more robust in the presence of 'strangeness'.* Added an additional check to [http://www.nmr-relax.com/api/3.3/auto_analyses.dauvergne_protocol.dAuvergne_protocol-class.html#determine_rnd determine_rnd() of the dauvergne_protocol model-free auto-analysis]. This is to try to catch bizarre situations such as [https://gna.org/bugs/?22730 bug #22730, model-free auto-analysis - relax stops and quits at the polate step]. The additional check is that if the base model directory is not executable, a RelaxError is raised.* Added printouts to the [http://www.nmr-relax.com/api/3.3/auto_analyses.dauvergne_protocol.dAuvergne_protocol-class.html#determine_rnd determine_rnd() function of the dauvergne_protocol model-free auto-analysis]. This is for better user feedback in the log files as to what is happening. It may help in debugging [https://gna.org/bugs/?22730 bug #22730: Model-free auto-analysis - relax stops and quits at the polate step].* Alphabetical ordering of imports in the [http://www.nmr-relax.com/api/3.3/auto_analyses.dauvergne_protocol-module.html dauvergne_protocol model-free auto-analysis].* Changed the model-free single spin optimisation title printouts. The [http://www.nmr-relax.com/api/3.2/specific_analyses.model_free.optimisation-module.html#spin_print specific_analyses.model_free.optimisation.spin_print() function ] has been deleted. It has instead been replaced by a call to [http://www.nmr-relax.com/api/3.3/lib.text.sectioning-module.html#subtitle lib.text.sectioning.subtitle()]. This is to match the grid search setup title printouts and to differentiate these titles from those printed out by [https://gna.org/projects/minfx/ minfx] being underlined by '~' characters.* Added extensive sectioning printouts to the [http://www.nmr-relax.com/api/3.3/auto_analyses.dauvergne_protocol-module.html dauvergne_protocol model-free auto-analysis]. The [http://www.nmr-relax.com/api/3.3/lib.text.sectioning-module.html lib.text.section sectioning] functions title() and subtitle() are now used to mark out all parts of the auto-analysis. This will allow for a much better understanding of the log files produced by this auto-analysis.
* Complete redesign of the following of text in the relax controller window in the GUI. The current design for some reason no longer worked very often, and there would be many situations where the scrolling to follow the text output would stop and could never be recovered. Therefore this feature has been redesigned. In the LogCtrl element of the relax controller, which displays the relax output messages, the at_end class boolean variable has been introduced. It defaults to True. The following events will turn it off: Arrow keys, Home key, End key, Ctrl-Home key, Mouse button clicks, Mouse wheel scrolling, Window thumbtrack scrolling (the side scrollbar), finding text, the pop up menu 'Go to start', and Select all (menu or Ctrl-A). It will only be turned on in two cases: The pop up menu 'Go to end', and if the caret is on the final line (caused by Ctrl-End, Mouse wheel scrolling, Page Down, Down arrow, Window thumbtrack scrolling, etc.). Three new methods have been introduced to handle certain events: capture_mouse() for mouse button clicks, capture_mouse_wheel() for mouse wheel scrolling, and capture_scroll for window thumbtrack scrolling.
* Improvements for selecting all text in the relax controller window. Selecting text using the pop up menu or [Ctrl-A] now shifted the caret to line 1 before selecting all text. This deactivates the following of the end of text, if active, as the text following feature causes the text selection to be lost.
* Modified the behaviour of the relax controller window so that pressing escape closes the window. This involves setting the initial focus on the LogCtrl, and catching the ESC key press in the LogCtrl as well as all relax controller read only wx.Field elements and calling the parent [http://www.nmr-relax.com/api/3.3/gui.controller.Controller-class.html#handler_close controller handle_close() method].* Replaced the hardcoded integer keycodes in the relax controller with the wx variables. This is for the [http://www.nmr-relax.com/api/3.3/gui.controller.LogCtrl-class.html#capture_keys LogCtrl.capture_keys() handler method for dealing with key presses].
* Improvement for all wizards and user functions in the relax GUI. The focus is now set on the currently displayed page of the wizard. This allows the keyboard to be active without requiring a mouse click. Now text can be instantly input into the first text control and the tab key can jump between elements. As the GUI user functions are wizards with a single page, this is a significant usability improvement for the GUI.
* The ESC character now closes all wizards and user functions in the relax GUI. By using an accelerator table set to the entire wizard window to catch the ESC keyboard event, the ESC key will cause the [http://www.nmr-relax.com/api/3.3/gui.wizards.wiz_objects.Wiz_window-class.html#_handler_escape _handler_escape() method ] to be called which then calls the windows Close() method to close the window.* Changed the logic for how the new analysis wizard in the GUI is destroyed. This relates to [https://gna.org/bugs/?22818 bug #22818, the GUI test suite failures in MS Windows - PyAssertionError: C++ assertion "Assert failure"]. The [http://www.nmr-relax.com/api/3.3/gui.analyses.wizard.Analysis_wizard-class.html#Destroy Destroy() method has been added to the Analysis_wizard class ] to properly close all elements of the wizard. This is now called from the [http://www.nmr-relax.com/api/3.3/gui.analyses.Analysis_controller-class.html#menu_new menu_new() method of the Analysis_controller class], which is the target of the menu item and toolbar button. To allow the test suite to use this, the menu_new() method now accepts the destroy boolean argument. The test suite can set this to False and then access the GUI elements after calling the method (however the Destroy() method must be called by the test suite).
* Resign of how the new analysis wizard is handled in the GUI tests. This relates to [https://gna.org/bugs/?22818 bug #22818, the GUI test suite failures in MS Windows - PyAssertionError: C++ assertion "Assert failure"]. The GUI test base class method new_analysis_wizard() has been created to simplify the process. When a new analysis is desired, this method should be called. It will return the analysis page GUI element for use in the test. The method standardises the execution of the new analysis wizard and sets up the analysis in the GUI. It also properly destroys the wizard to avoid the memory leaking issues such as [https://gna.org/bugs/?22818 bug #22818]. All GUI tests have been converted to use new_analysis_wizard(). This allows the GUI tests to pass on MS Windows. However there are still significant sources of memory leaks (the USER Objects count) visible in the Windows Task Manager.
* Fix for the [http://www.nmr-relax.com/api/3.3/gui.fonts-module.html gui.fonts module ] to allow it to be used outside of the GUI.
* Updated all of the scripts in devel_scripts/gui/. These have been non-functional since the merger of the relax bieri_gui branch back in January 2011.
* The [http://www.nmr-relax.com/api/3.3/gui.misc-module.html#bitmap_setup gui.misc.bitmap_setup() function ] can now be used outside of the GUI.* Fix for the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes.GuiTestCase-class.html#new_analysis_wizard GUI test base class new_analysis_wizard() method ] for relaxation dispersion analyses.* Modified the [http://www.nmr-relax.com/api/3.3/pipe_control.pipes-module.html#get_bundle pipe_control.pipes.get_bundle() function ] to operate when no pipe is supplied. In this case, the pipe bundle that the current data pipe belongs to will be returned.* Created the [http://www.nmr-relax.com/api/3.3/lib.periodic_table.Periodic_table-class.html#has_element Periodic_table.has_element() method ] for the [http://www.nmr-relax.com/api/3.3/lib.periodic_table -module.html lib.periodic_table module]. This is used to simply check if a given symbol exists as an atom in the periodic table.* Added 4 unit tests to the _lib.test_periodic_table module for the [http://www.nmr-relax.com/api/3.3/lib.periodic_table.Periodic_table-class.html#has_element Periodic_table.has_element() method].* Modified the internal structural object backend for the [http://www.nmr-relax.com/manual/structure_read_pdb.html structure.read_pdb user function]. The [http://www.nmr-relax.com/api/3.3/lib.structure.internal.molecules.MolContainer-class.html#_det_pdb_element MolContainer._det_pdb_element() method ] for handling PDB files with missing element information has been updated to use the [http://www.nmr-relax.com/api/3.3/lib.periodic_table.Periodic_table-class.html#has_element Periodic_table.has_element() method ] to check if the PDB atom name corresponds to any atoms in the periodic table. This allows for far greater support for HETATOMS and all of the metals.
* Created the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_load_spins_multi_mol Structure.test_load_spins_multi_mol system test]. This is to test yet to be implemented functionality of the [http://www.nmr-relax.com/manual/structure_load_spins.html structure.load_spins user function]. This is the loading of spin information similar, but not necessarily identical molecules all loaded into the same structural model. For this, the from_mols argument will be added.
* Fixes for the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_load_spins_multi_mol Structure.test_load_spins_multi_mol system test]. The call to the [http://www.nmr-relax.com/manual/structure_load_spins.html structure.load_spins user function] has also been modified so that all 3 spins are loaded at the same time.
* Implemented the multiple molecule merging functionality of the [http://www.nmr-relax.com/manual/structure_load_spins.html structure.load_spins user function]. The argument has been added to the user function frontend and a description added for this new functionality. In the backend, the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#load_spins pipe_control.structure.main.load_spins() function ] will now call the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#load_spins_multi_mol load_spins_multi_mol() function ] if from_mols is supplied. This alternative function is required to handle missing atoms and differential atom numbering.* Modified the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.n_state_model.N_state_model-class.html#test_populations N_state_model.test_populations system test] to test the grid search code paths. This performs a grid search of one increment after minimisation, then switches to the 'fixed' N-state model and performs a second grid search of one increment. This now tests currently untested code paths in the [http://www.nmr-relax.com/api/3.3/specific_analyses.n_state_model.api.N_state_model-class.html#grid_search grid_search() API method ] behind the [http://www.nmr-relax.com/manual/minimise_grid_search.html minimise.grid_search user function]. The test demonstrates a bug in the N-state model which was not uncovered in the test suite.
* Created the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.n_state_model.N_state_model-class.html#test_CaM_IQ_tensor_fit N_state_model.test_CaM_IQ_tensor_fit system test]. This is for catching [https://gna.org/bugs/?22849 bug #22849, the failure of the N-state model analysis when optimising only alignment tensors using RDCs and/or PCSs]. This new test checks code paths unchecked in the rest of the test suite, and is therefore of high value.
* Modified the atomic position handling in [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_load_spins_multi_mol pipe_control.structure.main.load_spins_multi_mol()]. The multiple molecule merging functionality of the [http://www.nmr-relax.com/manual/structure_load_spins.html structure.load_spins user function] now handles missing atomic positions differently. The aim is that the length of the spin container position variable is fixed for all spins to the number of structures, as the N-state model analysis assumes this equal length for all spins. When data is missing, the atomic position for that structure is now set to None. This will require other modifications in relax to support this new design.
* Modified the [http://www.nmr-relax.com/manual/interatom_unit_vectors.html interatom.unit_vectors user function] backend to handle missing atomic positions. This is to match the [http://www.nmr-relax.com/manual/structure_load_spins.html structure.load_spins user function] change whereby missing atomic positions are now set to the value of None.
* Fix for the atomic position handling in [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_load_spins_multi_mol pipe_control.structure.main.load_spins_multi_mol()]. The dimensionality of the position structure returned by the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#atom_loop structural object atom_loop() method ] needed to be reduced.
* The [http://www.nmr-relax.com/manual/structure_load_spins.html structure.load_spins user function] now stores the number of states in cdp.N. This is to help the specific analyses which handle ensembles of structures. With the introduction of the from_mols argument to the [http://www.nmr-relax.com/manual/structure_load_spins.html structure.load_spins user function], the number of states is now not equal to the number of structural models, as the states can now come from different structures of the same model. Therefore the user function will now explicitly set cdp.N to the number of states depending on how the spins were loaded.
* Clean up and speed up of the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.n_state_model.N_state_model-class.html#test_CaM_IQ_tensor_fit N_state_model.test_CaM_IQ_tensor_fit system test]. All output files are now set to 'devnull' so that the system test no longer creates any files within the relax source directories. And the optimisation settings have been decreased to hugely speed up the system test.
* Expanded the [http://www.nmr-relax.com/api/3.3/lib.arg_check-module.html#is_float_matrix lib.arg_check.is_float_matrix() function ] by adding the none_elements argument. This matches a number of the other module functions, and allows for entire rows of the matrix to be None.* Lists of lists containing rows of None are now better supported by the [http://www.nmr-relax.com/api/3.3/lib.xml -module.html lib.xml] functions. The [http://www.nmr-relax.com/api/3.3/lib.xml-module.html#object_to_xml object_to_xml() function ] will now convert the float parts to IEEE-754 byte arrays, and the None parts will be stored as None in the <ieee_754_byte_array> list node. The matching [http://www.nmr-relax.com/api/3.3/lib.xml-module.html#xml_to_object xml_to_object() method function] has also been modified to read in this new node format. This affects the [http://www.nmr-relax.com/manual/results_write.html results.write] and [http://www.nmr-relax.com/manual/state_save.html state.save] user functions (as well as the [http://www.nmr-relax.com/manual/results_read.html results.read] and [http://www.nmr-relax.com/manual/state_load.html state.load] user functions).
* Added spacing after the [http://www.nmr-relax.com/manual/minimise_grid_search.html minimise.grid_search user function] setup printouts. This is for better spacing for the next messages from the specific analysis.
* Speed up of the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.n_state_model.N_state_model-class.html#test_CaM_IQ_tensor_fit N_state_model.test_CaM_IQ_tensor_fit system test]. This test is however still far too slow.
* Added printouts to [http://www.nmr-relax.com/api/3.3/pipe_control.pcs-module.html#return_pcs_data pipe_control.pcs.return_pcs_data() ] and [http://www.nmr-relax.com/api/3.3/pipe_control.rdc-module.html#return_rdc_data pipe_control.rdc.return_rdc_data()]. These functions now accept the verbosity argument which if greater than 0 will activate printouts of how many RDCs or PCSs have been assembled for each alignment. This will be useful for user feedback as the spin verses interatomic data container selections can be difficult to understand.* The verbosity argument for the N-state model optimisation is now propagated for more printouts. The argument for the [http://www.nmr-relax.com/api/3.3/specific_analyses.n_state_model.api.N_state_model-class.html#calculate calculate() ] and [http://www.nmr-relax.com/api/3.3/specific_analyses.n_state_model.api.N_state_model-class.html#minimise minimise() ] API methods is now sent into [http://www.nmr-relax.com/api/3.3/specific_analyses.n_state_model.optimisation-module.html#target_fn_setup specific_analyses.n_state_model.optimisation.target_fn_setup()], and from there into the [http://www.nmr-relax.com/api/3.3/pipe_control.pcs-module.html#return_pcs_data pipe_control.pcs.return_pcs_data() ] and [http://www.nmr-relax.com/api/3.3/pipe_control.rdc-module.html#return_rdc_data pipe_control.rdc.return_rdc_data() ] functions. That way the number of RDCs and PCSs used in the N-state model is reported back to the user for better feedback.
* Updated the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.n_state_model.N_state_model-class.html#test_CaM_IQ_tensor_fit N_state_model.test_CaM_IQ_tensor_fit system test] so it operates correctly as a GUI test. All user functions are now executed through the special self._execute_uf() method to allow either the prompt interpreter or the GUI to execute the user function.
* Modified the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.n_state_model.N_state_model-class.html#test_CaM_IQ_tensor_fit N_state_model.test_CaM_IQ_tensor_fit system/GUI test] for implementing a new feature. The 'spin_selection' argument has been added to the [http://www.nmr-relax.com/manual/interatom_define.html interatom.define user function]. This will be used to carry the spin selections over into the interatomic data containers.
* Changed the spin_selection argument default in the [http://www.nmr-relax.com/manual/interatom_define.html interatom.define user function] backend. This now defaults to False to allow other parts of relax which call this function to operate as previously. The default for the [http://www.nmr-relax.com/manual/interatom_define.html interatom.define user function] is however still True.
* Modified the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_load_spins_multi_mol Structure.test_load_spins_multi_mol system test] for the spin.pos variable changes. The atomic position for an ensemble of structures is now set to None rather than being missing, so the system test has been updated to check for this.
* The [http://www.nmr-relax.com/manual/align_tensor_display.html align_tensor.display user function] now has more consistent section formatting. The section() and subsection() functions of the [http://www.nmr-relax.com/api/3.3/lib.text.sectioning-module.html lib.text.sectioning module ] are now being used to standardise these custom printouts with the rest of relax.
* Modifications to the new [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.n_state_model.N_state_model-class.html#test_CaM_IQ_tensor_fit N_state_model.test_CaM_IQ_tensor_fit system test]. The system test now checks all of the optimised values to make sure the correct values have been found. That will block any future regressions in this N-state model code path. The system test is now also faster. And the [http://www.nmr-relax.com/manual/pcs_structural_noise.html pcs.structural_noise user function] RMSD value has been set to 0.0 so that the test no longer has a random component affecting the final optimised values.
* Added printouts for the [http://www.nmr-relax.com/manual/rdc_calc_q_factors.html rdc.calc_q_factors] and [http://www.nmr-relax.com/manual/pcs_calc_q_factors.html pcs.calc_q_factors] user functions. These are activated by the new verbosity user function argument which defaults to 1. If the value is greater than 0, then the backend will print out all the calculated Q factors.
* Created the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_bug_22860_CoM_after_deletion Structure.test_bug_22860_CoM_after_deletion system test]. This is to catch [https://gna.org/bugs/?22860 bug #22860, the failure of the structure.com user function after calling structure.delete].
* Fix for the checks in the new [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_load_spins_multi_mol Structure.test_load_spins_multi_mol system test]. A spin index was incorrect.
* Fix for the [http://www.nmr-relax.com/manual/structure_load_spins.html structure.load_spins user function] when the from_mols argument is used. The [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#load_spins_multi_mol load_spins_multi_mol() function ] of the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main -module .html pipe_control.structure.main module] was incorrectly handling the atomic position returned by the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#atom_loop internal structural object atom_loop() method]. This position is a list of lists when multiple models are present. But when only a single model is present, it returns a simple list.
* Modified the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_bug_22860_CoM_after_deletion Structure.test_bug_22860_CoM_after_deletion system test] to expect a RelaxNoPdbError. This tests that the [http://www.nmr-relax.com/manual/structure_com.html structure.com user function] raises RelaxNoPdbError after deleting all of the structural information from the current data pipe.
* The mol_name argument is now exposed in the [http://www.nmr-relax.com/manual/structure_add_atom.html structure.add_atom user function]. This has been added as the first argument of the user function to allow new molecules to be created or to allow the atom to be placed into a specific molecule container. The functionality was already implemented in the backend, so it has been exposed by simply adding a new argument definition to the user function.
* Expanded the Python 2 to 3 conversion document to list the 2to3 command individually.
* The ImportErrors in unit tests are now correctly handled by the relax test suite. If an ImportError occurred, this was previously killing the entire test suite.
* The [http://www.nmr-relax.com/api/3.3/target_functions.relax_fit-module.html target_function.relax_fit module ] unit tests are now skipped if the C module is not compiled.
* Expanded the Python 2 to 3 conversion document.
* Small update to the 2to3_checklist document - the print statement conversion has been added.
* The [http://www.nmr-relax.com/api/3.3/lib.errors -module .html lib.errors module] is now importing lib.compat.pickle for better Python 2 and 3 support. This shifts the compatibility code from lib.errors into [http://www.nmr-relax.com/api/3.3/lib.compat-module.html lib.compat ] so that the 2to3 program will not touch the [http://www.nmr-relax.com/api/3.3/lib.errors-module.html lib.errors module].
* Better Python 3 compatibility in some test suite shared data profiling scripts. These changes invert the logic, importing the Python 3 builtins module and aliasing xrange() to range(), and passing if an ImporError occurs. The code will now no longer be modified by the 2to3 program.
* Unicode fixes for the "\u" string in "\usepackage" in the module docstring. This requires escaping as "\\usepackage" to avoid the unicode character '\u'.
* The [http://www.nmr-relax.com/api/3.3/lib.check_types-module.html lib.check_types module] now imports io.IOBase from the [http://www.nmr-relax.com/api/3.3/lib.compat-module.html lib.compat module]. This is to shift more Python 2 vs. 3 compatibility into lib.compat and out of all other modules.* Python 3 improvements - changed how the Python 3 absent builtins.unicode() function is handled. The aliased builtins.str() function is now referenced as lib.compat.unicode(). The Python 2 __builtin__.unicode() function is also aliased to lib.compat.unicode(). The GUI using this function now import it from [http://www.nmr-relax.com/api/3.3/lib.compat-module.html lib.compat].* Removed the [http://www.nmr-relax.com/api/3.3/auto_analyses.dauvergne_protocol-pysrc.html#dAuvergne_protocol.determine_rnd writable base directory check in the dauvergne_protocol auto-analysis]. This check was causing the system test to fail if the user does not have write access to the installed relax directory.
* Expanded the Mac_framework_build_3way document to include matplotlib.
* Important bug fix for racing causing the GUI to freeze. This is really only seen in the GUI tests on MS Windows systems, as a user could never be fast enough with the mouse. The [http://www.nmr-relax.com/api/3.3/gui.interpreter.Interpreter-class.html#flush GUI interpreter flush() method ] for ensuring that all user functions in the queue have been cleared now calls wx.Yield() to force all wxPython events to also be flushed. This change will avoid random freezing of the relax test suite.* Bug fix for the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.model_free.Mf-class.html#test_bug_21615_incomplete_setup_failure Mf.test_bug_21615_incomplete_setup_failure GUI test] on MS Windows systems. The [http://www.nmr-relax.com/api/3.3/gui.interpreter.Interpreter-class.html#flush GUI interpreter flush() method ] needs to be called between the two [http://www.nmr-relax.com/manual/structure_load_spins.html structure.load_spins user function] calls. Without this, the test will freeze on MS Windows. The freezing behaviour is however not 100% reproducible and is dependent on the Windows version and wxPython version.
* Shifted a number of wx.NewId() calls to the module namespace to conserve IDs. These are for the menus in the main window and in the spin view window.
* Shifted the wx.NewId() calls for the spectrum list GUI element to the module namespace. These IDs are used for the pop up menus. The change avoids repetitive calls to wx.NewId() every time a right click occurs, conserving wx IDs so that they are not exhausted when running the test suite or running the GUI for a long time.
* Shifted the main GUI window toolbar button wx IDs to the module namespace. This has no effect apart from better organising the code.
* Shifted the relax controller window popup menu wx IDs to the module namespace. This is simply to better organise the code to match the other GUI module changes.
* Menus created by the [http://www.nmr-relax.com/api/3.3/gui.components.menu-module.html#build_menu_item gui.components.menu.build_menu_item() ] now default to the wx ID of -1. This is to conserve wx IDs. If the calling code does not provide the ID, there is no need to grab one from the small pool of IDs.* Shifted the [http://www.nmr-relax.com/api/3.3/gui.spin_viewer.tree-module.html spin viewer GUI window toolbar button wx IDs to the module namespace]. This should conserve wx IDs as the window is created and destroyed, as only 2 IDs will be taken from the small pool for the entire lifetime of the program.* Shifted all of the [http://www.nmr-relax.com/api/3.3/gui.analyses.wizard-module.html wx.NewId() calls for the new analysis wizard into the module namespace]. This will hugely save the number of wx IDs used by the GUI, especially in the test suite. Instead of grabbing 8 IDs from the small pool every time the new analysis wizard is created, only 8 IDs for the lifetime of the program will be used.
* Another large wx ID saving change. The ID associated with the special accelerator table that allows the ESC button to close relax wizards is now initialised once in the module namespace, and not each time a wizard is created.
* A small wx ID conserving change - the 'Execute' button in the analysis tabs now uses the ID of -1. A unique ID is not necessary and is unused.
* The user function class menus no longer have unique wx IDs, as these are unnecessary. This conserves the small pool of unique wx IDs, as the spin viewer window is created and destroyed.
* Bug fix for the [http://www.nmr-relax.com/manual/structure_load_spins.html structure.load_spins user function] new from_mols argument. This was incorrectly using the [http://www.nmr-relax.com/api/3.3/pipe_control.pipes-module.html#pipe_names pipe_control.pipes.pipe_names() function ] to obtain its default values in the GUI (although this is not currently uesd). The result was a non-fatal error message on Mac OS X systems of "Python[1065:1d03] *** __NSAutoreleaseNoPool(): Object 0x3a3944c of class NSCFString autoreleased with no pool in place - just leaking".
* Added a debugging Python version check to the devel_scripts/memory_leak_test_relax_fit.py script. This prevents the script from being executed with a normal Python binary.
* Created the blacklisted [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.noe.Noe-class.html#test_noe_analysis_memory_leaks Noe.test_noe_analysis_memory_leaks GUI test]. This long test can be manually run to help chase down memory leaks. This can be monitored using the MS Windows task manager, once the 'USER Objects' column is shown. If the USER Objects count reaches 10,000 in Windows, then no more GUI elements can be created and the user will see errors.
* Added a printout to the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.noe.Noe-class.html#test_noe_analysis_memory_leaks Noe.test_noe_analysis_memory_leaks GUI test] to help with debugging.
* Improved debugging printouts for the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.noe.Noe-class.html#test_noe_analysis_memory_leaks Noe.test_noe_analysis_memory_leaks GUI test].
* Small fix for the [http://www.nmr-relax.com/api/3.3/gui.analyses.Analysis_controller-class.html#delete_analysis GUI analysis deletion method ] to prevent racing in the GUI tests.* Redesigned how wizards are destroyed in the GUI. The [http://www.nmr-relax.com/api/3.3/gui.wizards.wiz_objects.Wiz_window-class.html#Destroy relax wizard Destroy() method ] is now overridden. This allows the buttons in the wizard to be properly destroyed, as well as all wizard pages. This should remove a lot of GUI memory leaks.
* Created the [http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.general.General-class.html#test_new_analysis_wizard_memory_leak General.test_new_analysis_wizard_memory_leak blacklisted GUI test]. This will be used to check for memory leaks in the new analysis wizard.
* Removed an unused dictionary from the GUI wizard object.
* Added a wx.Yield() before destroying the new analysis wizard via [http://www.nmr-relax.com/api/3.3/gui.analyses.Analysis_controller-class.html#menu_new menu_new()]. This is to avoid racing which can be triggered in the test suite.
<section end=changes/>
* Removal the use of OrderedDict(). OrderedDict is first available in python 2.7, and is not essential functionality. The functionality is replaced with looping over a list of dictionary keys instead, which is picked up under analysis. [https://gna.org/bugs/?22798 Bug #22798: Failure of relax to start due to an OrderedDict ImportError on Python 2.6 and earlier].
* Fix for the find next bug in the relax controller window. This is [https://gna.org/bugs/?22815 bug #22815, the failure of find next using F3 (or Ctrl-G on Mac OS X) in the relax controller window if search text has already been set]. The fix was simple, as the required flags are in the self.find_data class object (an instance of wx.FindReplaceData).
* Fix for find dialog in the relax controller window. This is for [https://gna.org/bugs/?22816 bug #22816, the find functionality of the relax controller window does not find text when using wxPython >= 2.9]. The find wxPython events are now bound to the find dialog rather than the [http://www.nmr-relax.com/api/3.3/gui.controller.LogCtrl-class.html relax controller window LogCtrl element for displaying the relax messages]. This works on all wxPython versions.
* Bug fix for the [http://www.nmr-relax.com/manual/structure_align.html structure.align user function] for when no data pipes are supplied.
* Bug fix for the N-state model grid search when only alignment tensor parameters are optimised. The algorithm for splitting up the grid search to optimise each tensor separately, hence massively collapsing the dimensionality of the problem, was being performed incorrectly. The [http://www.nmr-relax.com/api/3.3/specific_analyses.n_state_model.api.N_state_model-class.html#grid_search grid_search() API method ] inc, lower, and upper arguments are lists of lists, but were only being treated as lists.* Final fix for [https://gna.org/bugs/?22849 bug #22849, the failure of the N-state model analysis when optimising only alignment tensors using RDCs and/or PCSs]. The alignment tensor is no longer initialised to zero values. This is to allow the skip_preset argument for the [http://www.nmr-relax.com/manual/minimise_grid_search.html minimise.grid_search user function] to be operational for the N-state model, a feature introduced with the zooming grid search. The solution was to check for the uninitialised tensor in the [http://www.nmr-relax.com/api/3.3/specific_analyses.n_state_model.optimisation-module.html#minimise_setup_fixed_tensors minimise_setup_fixed_tensors() method ] of the [http://www.nmr-relax.com/api/3.3/specific_analyses.n_state_model.optimisation -module.html specific_analyses.n_state_model.optimisation module].* Bug fix for the [http://www.nmr-relax.com/api/3.3/lib.arg_check-module.html#is_float_matrix lib.arg_check.is_float_matrix() function]. The check for a numpy.ndarray data structure type was incorrect so that lists of numpy arrays were failing in this function. Rank-2 arrays were not affected.
* Fix for the [http://www.nmr-relax.com/manual/structure_com.html structure.com user function]. This fixes [https://gna.org/bugs/?22860 bug #22860, the failure of the structure.com user function after calling structure.delete]. The number of models in cdp.structure is now counted and if set to zero, RelaxNoPdbError will be raised.
* The [http://www.nmr-relax.com/manual/structure_write_pdb.html structure.write_pdb user function] can now handle empty molecules. This fixes [https://gna.org/bugs/?22861 bug #22861, the chain IDs in the structure.write_pdb user function PDB files are incorrect after calling structure.delete]. To handle this consistently, the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.models.ModelContainer-class.html#mol_loop internal structural object ModelContainer.mol_loop() generator method ] has been created. This loops over the molecules, yielding those that are not empty. The [http://www.nmr-relax.com/api/3.3/lib.structure.internal.molecules.MolContainer-class.html#is_empty MolContainer.is_empty() method ] has been fixed by not checking for the molecule name, as that remains after the [http://www.nmr-relax.com/manual/structure_delete.html structure.delete user function] call while all other information has been removed. And finally the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#write_pdb write_pdb() structural object method ] has been modified to use the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.models.ModelContainer-class.html#mol_loop mol_loop() method ] rather than performing the loop itself.
* Fix for the [http://www.nmr-relax.com/manual/structure_delete.html structure.delete user function] for molecule metadata once no more data exists. This relates to [https://gna.org/bugs/?22861 bug #22861, the chain IDs in the structure.write_pdb user function PDB files are incorrect after calling structure.delete]. The metadata, when it exists, is now deleted for the molecule once no more data is present.
* Fix for [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.relax_disp.Relax_disp-class.html#test_bug_atul_srivastava system test Relax_disp.test_bug_atul_srivastava]. The call to the expected RelaxError needed to be performed differently for erlier python versions that 2.7.
Trusted, Bureaucrats
4,228

edits