Description
This is a major feature and bugfix release. New features include the statistics.aic and statistics.model user functions, plotting API advancements, huge speed ups for the assembly of atomic coordinates from a large number of structures, the sorting of sequence data in the internal structural object for better structural consistency, conversion of the structure.mean user function to the new pipe/model/molecule/atom_id design, and improvements to the rdc.copy and pcs.copy user functions. Bugs fixed include the incorrect pre-scanning of old scripts identifying the minimise.calculate user function as the old minimise user function, Python 3 fixes, and the failure in reading CSV files in the sequence.read user function. Many more features and bugfixes are listed below.
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.7
(13 March 2015, from /trunk)
http://svn.gna.org/svn/relax/tags/3.3.7
Features
- Creation of the statistics.aic and statistics.model user functions for calculating and printing out different statistics.
- Addition of new infrastructure for future support for plotting data using Veusz.
- Huge speed up for the assembly of atomic coordinates from a large number of structures.
- Sequence data in the internal structural object can now be sorted for better structural consistency.
- The structure.read_pdb user function now skips water molecules, avoiding the creation of hundreds of new molecules when reading X-ray structures.
- Conversion of the structure.mean user function to the new pipes/models/molecules/atom_id design and the addition of the set_mol_name and set_model_num arguments to allow the mean structure to be stored alongside the other molecules.
- The monte_carlo.setup user function now raises a RelaxError if the number of simulations is less than 3, avoiding subsequent errors.
- Expanded the functionality of the rdc.copy and pcs.copy user functions, allowing for the operation on two data pipes with different spin sequences, skipping deselected spins and interatomic data containers, printing out all copied data for better feedback, and copying all alignment metadata.
- The sequence.attach_protons user function now lists all the newly created spins.
- Clarification of the RDC and PCS Q factors with the printouts and XML file variable names modified to indicate if the normalisation is via the tensor size (2Da2(4 + 3R)/5) or via the sum of data squared to allow for clearer RDC vs. PCS comparisons.
- Expansion of the align_tensor.copy user function to allow all tensors to be copied between different data pipes.
- Huge speed up for loading results and state files with Monte Carlo simulation alignment tensors.
- Improvements for the rdc.weight and pcs.weight user functions. The spin_id argument can now be set to None to allow all spins or interatomic data containers to be set.
- Improvements for the pcs.structural_noise user function. The check for the presence of PCS data for points to skip now includes checking for PCS values of None. And the output Grace file now also includes the spin ID string as a string or comment value which can be displayed in the plot when desired.
Changes
- Created the N_state_model.test_statistics system test. This system test will be used to implement the new statistics user function class consisting of the statistics.model and statistics.aic user functions for calculating and storing the [chi2, n, k] parameters and Akaike's Information Criterion statistic respectively.
- Added the structure.align user function to the renaming translation table. This is so relax identifies structure.align user functions in scripts to raise an error saying that the structure.superimpose user function should be used instead.
- Added the office-chart-pie set of Oxygen icons for use in the new statistics user function class.
- Created the empty statistics user function class. This adds the infrastructure for creating the statistics user functions.
- Small fix for the structure.add_model user function description.
- Created the frontend for the statistics.model user function.
- Created a wizard graphic for the statistics user functions. This is based on a number of Oxygen icons, as labelled in the SVG layer names.
- The statistics.model user function now uses the new statistics wizard graphic.
- Created the empty pipe_control.statistics module. This will be used for the backend of all of the statistics user functions.
- Fixes for the EPS versions of some Oxygen icons used in the relax manual. This is the actions.document-preview-archive and actions.office-chart-pie Oxygen icons used for the user function icons. The files were not created correctly in the Gimp. The export to EPS requires the width and height to be both set to 6 mm, and the X and Y offsets to zero. This allows the icon bounding boxes and sizes to match the other EPS icons.
- Implemented the backend of the statistics.model user function. The implementation heavily uses the specific analysis API, calling the calculate(), model_loop(), print_model_title(), model_statistics() and get_model_container() methods to do all of the work. The last of these API methods is yet to be implemented.
- Fix for the statistics.model user function backend. The API methods are now called with the model_info argument set to a keyword argument so that it is always passed in as the correct argument.
- Fix for the specific analysis API _print_model_title_global() common method. This method was horribly broken, as it was never used. The new statistics.model user function together with the N-state model uncovers this breakage.
- Defined the get_model_container() specific analysis API method. This base method raises a RelaxImplementError, therefore each analysis type must implement its own method (or use an API common method).
- Implemented the specific analysis API _get_model_container_cdp() commmon method. This is to be used for the get_model_container() for returning the current data pipe object as the model container. This is for the global models where the model information is stored in the pipe object rather than in spin containers.
- The N-state model now uses the _get_model_container_cdp() method. This is aliased as the get_model_container() specific analysis API method.
- Fix for the N_state_model.test_statistics system test - the probabilities were missing from k.
- Expanded the printouts from the statistics.model user function to include the statistics.
- Updated the N-state model num_data_points() function to use more modern integer incrementation.
- Fix for the N_state_model.test_statistics system test. The deselected spins and interatomic data containers are now taken into account for the RDC and PCS data point counts.
- Implementation of the statistics.aic user function. This is very similar to the statistics.model user function - the code was copied and only slightly modified. The new user function will calculate the current chi-squared value per model, obtain the model statistics, calculate the AIC value per model, and store the AIC value, chi-squared value and number of parameters in the appropriate location for the model in the relax data store.
- Created the empty lib.plotting.veusz module for graphing using Veusz.
- Shifted the lib.software.grace module to lib.plotting.grace. This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/7532 and http://thread.gmane.org/gmane.science.nmr.relax.devel/7536.
- Created XY-data functions for the plotting API of the relax library. These are currently copies of the heads of the lib.plotting.grace functions write_xy_data() and write_xy_header(). These lib.plotting.api functions (write_xy_data() and write_xy_header()) are set up to use the grace functions.
- Converted all of the Grace plotting in relax to use the plotting API of the relax library.
- Shifted the pipe_control.grace.write() function. This is now the format independent pipe_control.plotting.write_xy() function. The format argument has been added and this defaults to 'grace'. The grace.write user function has been updated to use the new backend.
- Updated the pcs.structural_noise user function to use the relax library plotting API.
- Fixes for the new pipe_control.plotting.write_xy() function. This includes missing imports which should have moved from pipe_control.grace, as well as shifting the axis_setup() function from the pipe_control.grace module into the pipe_control.plotting module.
- The rdc.corr_plot user function backend now uses the relax library plotting API. The write_xy_data() and write_xy_header() functions from lib.plotting.api are now uses instead of the equivalent pipe_control.grace functions which no longer exist.
- More import fixes for the new pipe_control.plotting.write_xy() function.
- Fix for the backend of the relax_disp.plot_disp_curves user function. The lib.plotting.api functions write_xy_data() and write_xy_header() require the format argument.
- Updated the relative stereochemistry auto-analysis to use the relax library plotting API.
- Huge speed up for the assembly of atomic coordinates from a large number of structures. The internal structural object validate_models() method was being called once for each structure when assembling the atomic coordinates. This resulted in the _translate() internal structural object method, which converts all input data to formatted strings, being called hundreds of millions of times. The problem was in lib.structure.internal.coordinates.assemble_atomic_coordinates(), in that the one_letter_codes() method, which calls validate_models(), was called for each molecule encountered. The solution was not to validate models in one_letter_codes().
- Huge speed up of the internal structural object validate_models() method. The string formatting to create pseudo-PDB records and the large number of calls to the _translate() method for atomic information string formatting has been shifted to only be called when atomic information does not match. Instead the structural information is directly compared within a large if-else statement.
- Created the Structure.test_atomic_fluctuations_no_match system test. This demonstrates a failure in the operation of the structure.atomic_fluctuations user function when the supplied atom ID matches no atoms.
- Fix for the Structure.test_atomic_fluctuations_no_match system test. The structure.atomic_fluctuations user function will now raise a RelaxError when no data corresponding to the atom ID can be found, so the test now checks for this.
- Created the unit test infrastructure for the lib.structure.internal.object module.
- Created the Test_object.test_add_atom_sort unit test. This is from the _lib._structure._internal.test_object unit test module. The test will be used to implement the sorting of input data by residue number in the add_atom() internal structural object method. This will mean that added atoms will be placed in residue sequence order, so that output PDB files are correctly ordered.
- Implementation of methods for sorting sequence data in the internal structural object. The information is sorted in the molecule container level using the new MolContainer._sort() private method. This uses the _sort_key() helper method which determines what the new order should be. This is used as the 'key' argument for the Python sort() method. Instead of list shuffling, new lists in the correct order are created. Although not memory efficient, this might be faster than shuffling.
- The loading of structural data now sorts the data if the merge flag is True. The pack_structs() method for sorting the data will now call the new MolContainer._sort() function is the data is being merged. This is to ensure that the final structural data is correctly ordered.
- Fixes for a number of Structure system tests for the sorted structural data changes.
- Modified the structure.read_pdb user function backend to skip water molecules. All residues with the name 'HOH' are now skipped when loading PDB files. This is implemented in the MolContainer.fill_object_from_pdb() method, and a RelaxWarning is printed listing the residue numbers of all skipped waters.
- Modified the Structure.test_read_pdb_1UBQ system test for the new water skipping feature. As the structure.read_pdb user function will now skip waters, the last atom in the structural object will now be the last ubiquitin atom and not the last water atom.
- Modified the Test_object.test_add_atom_sort unit test to check atom connectivities. This is from the _lib._structure._internal.test_object unit test module. The problem is that the MolContainer._sort() method for sorting the structural data currently does not correctly update the bonded data structure.
- Completed the implementation of the sorting of structural data in the internal structural object. The MolContainer._sort() private method now changes the connect atom indices in the bonded data structure to the new sorted indices.
- Created new system tests for implementing new functionality for the structure.mean user function. This includes the Structure.test_mean_models and Structure.test_mean_molecules. The idea is to convert the user function to the new pipes/models/molecules/atom_id design. This will allow molecules with non-identical sequences and atomic compositions to be averaged. The set_mol_name and set_model_num arguments from the structure.read_pdb, structure.read_gaussian, and structure.read_xyz user functions will also be implemented to allow the mean structure to be stored alongside the other molecules.
- Some fixes for the checks in the Structure.test_mean_molecules system test.
- Fix for the structure.mean user function call in the Structure.test_mean_models system test.
- Expanded the checking in all the Structure.test_mean* system tests to cover all atomic information. This includes the Structure.test_mean, Structure.test_mean_models, and Structure.test_mean_molecules system tests. All structural data is now carefully checked to make sure that the structure.mean user function operates correctly.
- Converted the structure.mean user function to the new pipe/model/molecule/atom_id design. This allows the average structure calculation to work on atomic coordinates from different data pipes, different structural models, and different molecules. The user function backend uses the new pipe_control.structure.main.assemble_structural_coordinates() function to assemble the common atom coordinates, molecule names, residue names, residue numbers, atom names and elements. All this information is then used to construct a new molecule container for storing the average structure in the internal structural object. To allow for the averaged structural data to be stored, the internal structural object method add_coordinates() has been created. This is modelled on the PDB, Gaussian, and XYZ format loading methods. The internal structural object mean() method is no longer used, but remains for anyone who might have interest in the future (though as it is untested, bit-rot will be a problem).
- Small correction for the structure.read_pdb user function description.
- Created the Structure.test_read_merge_simultaneous system test. This is to demonstrate a failure in the structure.read_pdb user function when merging multiple molecules from one file into one molecule simultaneously with a single user function call.
- Added some error checking for the monte_carlo.setup user function. A RelaxError is now raised if the number of simulations is less than 3. This prevents Python errors when later calling the monte_carlo.error_analysis user function.
- Test suite fixes for the error checking in the monte_carlo.setup user function. The number of simulations has been increased from either 1 or 2 in all tests to the minimal number of simulations (3).
- Created the Structure.test_bug_23293_missing_hetatm system test. This is to catch bug #23293, the PDB HETATM loading error whereby the last HETATM record is sometimes not read from the PDB file.
- Small fix for the chain IDs in the Structure.test_bug_23293_missing_hetatm system test.
- Created the Structure.test_multi_model_and_multi_molecule system test. This is used to check the loading and writing of a multi-model and multi-molecule PDB file. The test shows that this functions correctly.
- Modified the Structure.test_multi_model_and_multi_molecule test to check for model consistency. This is just for better test suite coverage of the handling of PDB structural data.
- Created the Structure.test_bug_23294_multi_mol_automerge system test. This is used to catch bug #2329, the automatic merging of PDB molecules resulting in an IndexError. It reads in the 'in.pdb' PDB file attached to the bug report, now named 'bug_23294_multi_mol_automerge.pdb', to show the IndexError. The test also checks the structure.write_pdb user function to make sure that the output PDB file contains a single merged molecule.
- Added the PDB file to the repository for the Structure.test_bug_23294_multi_mol_automerge system test.
- Fix for the Structure.test_bug_23294_multi_mol_automerge system test. The MASTER PDB record has been added to the data to check for, as this will be produced by the structure.write_pdb user function.
- Improved the RelaxWarning for missing atom numbers in the PDB CONECT records. This is for the structure.read_pdb user function. Now only one warning is given for the entire PDB file listing all of the missing atom numbers rather than one warning per missing atom. This can significantly compact the warnings, removing a lot of repetition.
- Improved the quality of the printouts from the structure.read_pdb user function. This also affects the structure.read_gaussian and structure.read_xyz user functions. The messages about adding new molecules or merging with existing molecules has been significantly improved. The text with the model information is now only printed if the model number is present in the PDB file or has been supplied by the user.
- Fixes for all of the PDB documentation HTML links in the docstrings. The PDB have shifted their documentation from http://www.wwpdb.org/documentation/format33/v3.3.html to http://www.wwpdb.org/documentation/file-format/format33/v3.3.html, stupidly without redirects. This will create dead links in the relax API documentation at http://www.nmr-relax.com/api/3.3/, as well as the older API documentation (http://www.nmr-relax.com/api/2.2/, http://www.nmr-relax.com/api/3.0/, http://www.nmr-relax.com/api/3.1/, http://www.nmr-relax.com/api/3.2/).
- Created the Structure.test_bug_23295_ss_metadata_merge system test. This is to catch bug #23295, the PDB secondary structure HELIX and SHEET records not updated when merging molecules. This uses the '2BE6_secondary_structure.pdb' structure file and 'test.py' relax script contents as the test, checking the HELIX and SHEET records.
- Added one more check to the Structure.test_bug_23295_ss_metadata_merge system test. The test would pass if no HELIX or SHEET records were to be written to the PDB file.
- Fix for the Structure.test_bug_23295_ss_metadata_merge system test and additional printouts.
- Fix for the Structure.test_pdb_combined_secondary_structure system test. The SHEET PDB record check was incorrect and was checking for the improperly formatted atom name field, which has now been fixed in relax.
- Large speed up of the structure.web_of_motion user function. With the introduction of the _sort() internal structural object method and it being called by the add_atom(), the structure.web_of_motion user function was now painfully slow. As sorting the structural data is unnecessary for the backend of this user function, the add_atom() boolean argument 'sort' has been added to turn the sorting on and off, and the structure.web_of_motion backend now sets this to False.
- Fix for the internal structural object unit test Test_object.test_add_atom_sort. This test of the _lib._structure._internal.test_object unit test module now requires the sort argument set to True when calling the add_atom() method.
- Improvement for a RelaxError message when assembling structural data but no coordinates can be found.
- Created a series of unit tests for implementing a new internal structural object feature. These tests check a new 'inv' argument for the selection() structural object method for allowing all atoms not matching the atom ID string to be selected.
- Implemented the new 'inv' argument for the selection() structural object method. This allows for all atoms not matching the atom ID string to be selected. The unit tests for this argument now all pass, validating the implementation.
- Improvement for the structure.mean user function. This can now be used to store an averaged structure in an empty data pipe. Previously structural data needed to be present in the current data pipe for the user function to work.
- Created a system test to show a limitation of the rdc.copy user function. Currently, it cannot work when spin systems in two data pipes are different. The system test will be used to implement the support.
- Simplification of the new Rdc.test_rdc_copy_different_spins system test. This no longer tests the deletion of interatomic data containers by the spin.delete user function, something which is not implemented.
- Some more fixes for the Rdc.test_rdc_copy_different_spins system test. The residue.delete and not spin.delete user function is required to delete the sequence data.
- Another small fix for the new Rdc.test_rdc_copy_different_spins system test. The rdc.copy user function requires the pipe_to argument to be supplied in this case.
- Expansion of the Rdc.test_rdc_copy_different_spins system test. The interatomic data containers are now defined via the interatom.define user function, which requires the spin.element user function to set up the element information. A printout has also been added to demonstrate a failure in the pipe_control.interatomic.interatomic_loop() function in handling the correct data pipe.
- Some more modifications for the Rdc.test_rdc_copy_different_spins system test. One of the interatomic data containers does not have RDC data, as it is not present in the original data pipe, hence this is checked for. And the printouts have more formatting.
- Expanded the functionality of the rdc.copy user function. The user function will now operate on two data pipes with different spin sequences. If the interatomic data container is missing from the target data pipe, a warning is given. And if the interatomic data container is not present in the source data pipe, nothing will be copied.
- Modified the rdc.copy user function to printout all copied RDC values and errors.
- Created the Rdc.test_rdc_copy_back_calc system test. This will be used to implement the back_calc Boolean argument for the rdc.copy user function to allow not only measured, but also back-calculated RDC values to be copied.
- Modified the rdc.copy printout of RDCs to occur for each alignment ID.
- Implemented the back_calc argument for the rdc.copy user function. This allows the back-calculated RDCs to be additionally copied together with the real value and error.
- Small formatting change for the rdc.copy user function printouts.
- Created the Pcs.test_pcs_copy_different_spins system test. This will be used to show a limitation of the pcs.copy user function in that it cannot copy data between two data pipes with different molecule, residue, and spin sequences.
- Added a printout of the alignment ID for the pcs.copy user function. This is to match the rdc.copy user function.
- Created the Pcs.test_pcs_copy_back_calc system test. This will be used to implement the back_calc Boolean argument for the pcs.copy user function to allow not only measured, but also back-calculated PCS values to be copied. It matches the equivalent Rdc.test_rdc_copy_back_calc system test.
- Implemented the back_calc argument for the pcs.copy user function. This allows the back-calculated PCSs to be additionally copied together with the real value and error. The implementation simply copies that of the rdc.copy user function.
- Added full per-alignment data printouts to the pcs.copy user function to match rdc.copy. The feedback is important to know what was actually copied.
- Modified the pcs.copy user function to handle different spin sequence between data pipes.
- Fixes for the Pcs.test_pcs_copy_different_spins and Pcs.test_pcs_copy_back_calc system tests.
- Fix for the pcs.copy user function for a recently introduced problem. The data pipe for the spin_loop() function must be supplied.
- The pcs.copy user function now skips deselected spins.
- Modified the N_state_model.test_data_copying system test to skip deselected spins.
- Added more checks to the three Pcs.test_pcs_copy* system tests.
- Added more checks to the three Rdc.test_rdc_copy* system tests.
- Created the Rdc.test_calc_q_factors_no_tensor system test. This is to demonstrate a failure in the rdc.calc_q_factors user function when no alignment tensor is present. In addition, the test is also triggering an earlier problem of spin isotope information being missing. However the isotope is not required if the tensor is absent.
- The Rdc.test_rdc_copy_* system tests now check for the 'rdc_data_types' data structure. This is in the Rdc.test_rdc_copy_different_spins and Rdc.test_rdc_copy_back_calc system tests and shows that the rdc.copy user function fails to duplicate this information.
- The Rdc.test_rdc_copy_* system tests now check for the 'absolute_rdc' data structure. This is in the Rdc.test_rdc_copy_different_spins and Rdc.test_rdc_copy_back_calc system tests and shows that the rdc.copy user function fails to duplicate this information as well.
- Expanded the rdc.copy user function to copy the RDC data type and absolute RDC flag information.
- Created the Rdc.test_corr_plot system test to check the rdc.corr_plot user function. This shows that this poorly tested function works correctly.
- Created the Pcs.test_corr_plot system test to check the pcs.corr_plot user function. This user function is poorly tested, and this test triggers a series of bugs.
- Added the 'title' and 'subtitle' arguments to the pcs.corr_plot user function. This problem was detected by the new Pcs.test_corr_plot system test. The pcs.corr_plot user function now matches the rdc.corr_plot user function in terms of arguments.
- Completed the Pcs.test_corr_plot system test. The file contents are now known and have been carefully checking in Grace.
- Clarification of the RDC and PCS Q factors. This affects the rdc.calc_q_factors and pcs.calc_q_factors user functions, as well as all other operations involving the calculation of Q factors. The printouts have been modified to clarify if the normalisation is via the tensor size (2Da2(4 + 3R)/5) or via the sum of data squared, and the separation of the two is now clearer. This allows for better RDC vs. PCS comparisons. In addition, the data pipe variable names have been updated to reflect the normalisation, so it is instantly known when looking at the XML contents of results or save files which was used. The backwards compatibility hooks have been modified to support the data pipe variable name changes.
- The align_tensor.copy user function 'tensor_from' argument can now be None. This is to enable the copying of all alignment tensors from one data pipe to another.
- Created the Align_tensor.test_copy_pipes system test. This is to show a problem in the align_tensor.copy user function when copying all tensors between data pipes.
- Modified the pipe_control.align_tensor.align_data_exists() function to handle no tensor IDs. If no tensor ID is supplied, this will then return True if any alignment data exists.
- Improvement for the align_tensor.copy user function. The user function has been modified to allow all alignment tensors to be copied between two data pipes. This allows the Align_tensor.test_copy_pipes system test to pass.
- Fixes for the align_tensor.copy user function argument unit tests. The tensor_from and tensor_to arguments can now be None.
- Created the Align_tensor.test_copy_pipes_sims system test. This demonstrates a failure of the align_tensor.copy user function when Monte Carlo simulated tensors are present.
- Deleted the data_store.align_tensor.AlignTensorSimList.append() method. This replacement list method was proving fatal when copy.deepcopy() is called on the alignment tensor object. The change allows the Align_tensor.test_copy_pipes_sims system test to pass.
- Huge speed up for loading results and state files with Monte Carlo simulation alignment tensors. The reading of the alignment tensor component of XML formatted results and state files has been modified. Previously the data_store.align_tensor.AlignTensorData._update_object() method for updating the alignment tensor object (for values, errors, simulations) was being called once for each Monte Carlo simulation. Now is it called only once for all simulations. In one test, the reading of the save file with 500 simulations dropped from 253.7 to 10.0 seconds.
- Added an extra check for the assembly of RDC data. This is in the pipe_control.rdc.return_rdc_data() function and the check is for any unit vectors set to None, which is a fatal condition.
- Improved the RelaxError message from the RDC assembly function when unit vectors are None.
- Added a new warning to the interatom.unit_vectors user function if data is missing. This is to aid in detecting problems earlier before unit vectors of None are encountered by other parts of relax.
- Modified the rdc.corr_plot user function to skip deselected interatomic data containers. This would normally happen as no back-calculated data is normally present. However, if data has been copied from elsewhere, this may not always be the case.
- Created the Sequence.test_bug_23372_read_csv system test. This is to catch bug #23372, the sequence.read failure with CSV files. It uses a truncated version of the CSV data file attached to sr #3219.
- Converted the lib.sequence.validate_sequence() to the checking function design. This is the checking function design documented at Relax_source_design#The_check_.2A.28.29_functions. The validate_sequence() function has been renamed to check_sequence_func() and the checking object is called check_sequence. It removes the string processing hack to convert RelaxErrors to RelaxWarnings in the lib.sequence.read_spin_data() function, avoiding strange messages such at "RelaxWarning: ror: The sequence data in the line..." as seen in the Sequence.test_bug_23372_read_csv system test.
- Small typo fix for the Sequence.test_bug_23372_read_csv system test.
- Added the raise_flag argument to the lib.sequence.read_spin_data() function. This is to allow the missing data RelaxError to be deactivated.
- Modified the spectrum.read_intensities user function backend to be more robust. This affects the generic formatted peak lists, via the lib.spectrum.peak_list.intensity_generic() function. The peak list reading will now continue reading the file after corrupted lines have been encountered.
- Python 3 improvement for the rdc.corr_plot and pcs.corr_plot user functions. The world view is now set in floating point numbers. In Python 2, the math.ceil() and math.floor() functions return floats, whereas in Python 3 these functions return integers. The behaviour is now consistent in both Python versions, fixing a few system tests.
- Modified the internal formatting of the data section of the Grace 2D graph files. This affects the lib.plotting.grace.write_xy_data() function. The formatting is now more consistent, with the X value now set to a fixed number of decimal places, and hence will no longer change between Python 2 and 3. The data is now all right justified as well, for easier reading. All affected system tests have been updated for the new format.
- Epydoc documentation fix for the lib.structure.pdb_write._handle_atom_name() function.
Bugfixes
- Big bug fix for the N-state model num_data_points() function. This is from the specific_analyses.n_state_model.data module. This code was very much out of date. It was expecting an ancient behaviour where the spin container 'pcs' variable and interatomic data container 'rdc' where lists of floats. However these were converted many years ago to dictionaries with keys set to the alignment IDs. The result was that no RDCs nor PCSs were counted as a base data point, so the function would in most cases return a value of zero.
- Fixes for the printout from the pipe_control.pcs.return_pcs_data() function. The number of PCSs printed out was including values of None when data was missing for one alignment. These values of None are no longer counted.
- Fixes for the printout from the pipe_control.rdc.return_rdc_data() function. The number of RDCs printed out was including values of None when data was missing for one alignment. These values of None are no longer counted.
- More fixes for the RDC and PCS count printouts from the corresponding data assembly functions. Sometimes the RDC or PCS value could be present as None. This is now detected and the count is not incremented.
- More fixes for the PCS count printout from the pipe_control.pcs.return_pcs_data() function. The check for None values was incorrect.
- Fixes for the N-state model num_data_points() function. The deselected interatomic data containers are no longer used for counting RDC data. And the skipping of deselected spin containers for the PCS is now via the spin_loop() skip_desel argument.
- Fix for bug #23259, the broken user functions in the prompt UI with the RelaxError: The user function 'X' has been renamed to 'Y'. The problem was that the only the first part of the user function name, for example 'minimise' from 'minimise.calculate' was being checked in the user function name translation table. As the minimise user function has been renamed to minimise.execute, 'minimise' is in the translation table and hence minimise.calculate was being identified as the minimise user function. Now the full user function name is reconstructed before checking the translation table.
- Fixes for the lib.structure.internal.coordinates.assemble_coord_array() function. The problem was uncovered by the Structure.test_atomic_fluctuations_no_match system test. The function can now handle no data being passed in.
- Fixes for the pipe_control.structure.main.assemble_structural_coordinates() function. The function will now raise a RelaxError if no structural data matching the atom ID can be found. The problem was uncovered by the Structure.test_atomic_fluctuations_no_match system test. The fix affects the structure.atomic_fluctuations, structure.displacement, structure.find_pivot, structure.rmsd, structure.superimpose, and structure.web_of_motion user functions.
- Fix for bug #23265, the failure of the edit buttons in the user function GUI windows. The problem was that the column titles of the window opened by the edit button were being incorrectly handled if the dimensions of the window were not supplied.
- Fix for bug #23288, the failure of the structure.read_pdb user function when simultaneously merging multiple molecules from one file. The set_mol_name and set_model_num arguments are now converted to lists equal to the length of the read_mol and read_model arguments simultaneously, if supplied.
- Small fix for the structure.write_pdb user function for handling old relax state and results files.
- Fix for bug #23293, the PDB HETATM loading error whereby the last HETATM record is sometimes not read from the PDB file. The problem was two-fold. Firstly the internal structural object _parse_mols_pdb() method for separating a PDB file into distinct molecules was terminating too early when a new molecule is found, so that the last PDB record is not appended to the records list for the molecule. Secondly the write_pdb() method was not handling the PDB sequential serial number correctly.
- Fix for bug #23294, the automatic merging of PDB molecules resulting in an IndexError. Now if only a single molecule name is supplied, this will be used for all molecules in the PDB file. The result is that the structural data will all be automatically merged into a single molecule. This merging is communicated to the user via the current printouts.
- Bug fix for the SHEET PDB records created by the structure.write_pdb user function. The current and previous atom parts of the record were not being correctly formatted. This was simply using the %4s formatting string. However the PDB atom format is rather more complicated. To handle this, the new _handle_atom_name() helper function has been added to the lib.structure.pdb_write module. This is now used in the atom() and sheet() functions for consistently formatting the atom name field.
- Fix for bug #23295, the PDB secondary structure HELIX and SHEET records not updating when merging molecules. The problem was that the algorithm for changing the molecule numbers for the helix and sheet metadata when calling the structure.read_pdb user function was far too simplistic. Therefore the logic has been completely rewritten. Now the helix and sheet metadata are stored in temporary data structures in the _parse_pdb_ss() method. As the molecules are being read from the PDB records, new data structures containing the original molecule numbers and new molecule numbers are created. The helix and sheet metadata is then stored in the internal structural object via the pack_structs() method, and the molecule indices of the metadata changed based on the two molecule number remapping data structures.
- Python 3 fix for the new internal structural object MolContainer._sort() method. The list() builtin function is required to convert the output of the range() function into a true list in Python 3, so that the list.sort() method can be accessed.
- Python 3 fix for the Test_msa.test_central_star unit test. This is from the _lib._sequence_alignment.test_msa unit test module. The logic of range() + range() does not work in Python 3, so the range function calls are now wrapped in list() function calls to convert to the correct data structure type.
- Python 3 fix for the internal structural object MolContainer._sort_key() method. This method is used as the key for the sort() function. However in Python 3, the key cannot be None. So now if the residue number is None, the value of 0 is returned instead.
- Python 3 fix for the pipe_control.structure.main.assemble_structural_coordinates() function. This affects most of the structure user functions. This was another case of requiring the list() built in function to create a list object from an iterator.
- Another Python 3 list() fix for the structure user functions. This time the problem was in the pipe_control.structure.main.sequence_alignment() function.
- Fix for a RelaxError message from the internal structural object when validating models.
- Bug fix for the results.write user function when loading relax state files. The results.write user function can load not only the results file consisting of a single data pipe, but also relax state files if only a single pipe is present. However this was causing the current data pipe and other pipe-independent data (sequence alignments and the GUI) to be overwritten, just as when loading a state file. Now only the data from the data pipe will be loaded and the pipe independent data in the state file will be ignored.
- Fix for the rdc.write user function. The check for the missing rdc_data_types variable in the interatomic containers is now more comprehensive and checks for the presence of the alignment ID.
- Big bug fix for the pipe_control.interatomic.interatomic_loop() function. This was identified in the Rdc.test_rdc_copy_different_spins system test. The problem was that the pipe argument was being ignored when looking up the spin containers. Hence if the pipe being worked on was not the current data pipe, and the spin sequences were not identical, the function would fail. This mainly affects the rdc.copy user function.
- Fix for the pcs.read user function. The problem was caught by the new Pcs.test_pcs_copy_different_spins system test. If the spin system does not exist in the current data pipe, but data for it is present in the PCS file, the pcs.read user function would terminate in a TypeError.
- Fixes for the rdc.calc_q_factors user function for when no alignment tensor is present. This was caught by the Rdc.test_calc_q_factors_no_tensor system test. Now if no tensor is present, a warning is given and the 2Da2(4 + 3R)/5 normalised Q factor is skipped. Also, if present but no spin isotope information is present, then RelaxSpinTypeError errors are raised.
- Fix for the pcs.corr_plot user function when the spin containers have no element information.
- Fix for bug #23372, the sequence.read failure with CSV files. The problem was that the sep argument was not being passed all the way to the backend lib.io.extract_data() function.
- Fix for the lib.sequence.check_sequence checking object. Although rarely used, the check for the spin number was incorrect and half of the checks were instead for the residue number. This is a classic copy and paste error where the residue name and number checks were copied but not completely converted to spin name and numbers.
Links
For reference, the announcement for this release can also be found at following links:
- Official release notes on the relax wiki.
- Gna! news item.
- Gmane mailing list archive.
- The Mail Archive.
- Local archives.
- Mailing list ARChives (MARC).
Softpedia also has information about the newest relax releases:
- Softpedia page for relax on GNU/Linux.
- Softpedia page for relax on MS Windows.
- Softpedia page for relax on Mac OS X.
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
- The combined release notes for all relax versions (warning, this is very large).
- The combined release descriptions for all relax versions.
- The combined release metadata for all relax versions.
- The combined release features for all relax versions.
- The combined release changes for all relax versions (warning, this is very large).
- The combined release bugfixes for all relax versions.
- The combined release announcement links for all relax versions.