Difference between revisions of "Relax 3.3.7"

From relax wiki
Jump to navigation Jump to search
(→‎CHANGES file: Copied the release metadata from the CHANGES file.)
(Increased the sectioning depth.)
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
{{lowercase title}}
 
{{lowercase title}}
  
= Description =
+
{{infobox relax release
 +
| version = 3.3.7
 +
| prev    = 3.3.6
 +
| next    = 3.3.8
 +
| type    = Major feature and bugfix
 +
| date    = 13 March 2015
 +
| manual  = yes
 +
}}
 +
 
 +
== Description ==
  
 
<section begin=description/>
 
<section begin=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.
+
This is a major feature and bugfix release.  New features include the [http://www.nmr-relax.com/manual/statistics_aic.html statistics.aic] and [http://www.nmr-relax.com/manual/statistics_model.html 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 [http://www.nmr-relax.com/manual/structure_mean.html structure.mean user function] to the new pipe/model/molecule/atom_id design, and improvements to the [http://www.nmr-relax.com/manual/rdc_copy.html rdc.copy] and [http://www.nmr-relax.com/manual/pcs_copy.html pcs.copy] user functions.  Bugs fixed include the incorrect pre-scanning of old scripts identifying the [http://www.nmr-relax.com/manual/minimise_calculate.html minimise.calculate user function] as the old minimise user function, Python 3 fixes, and the failure in reading CSV files in the [http://www.nmr-relax.com/manual/sequence_read.html sequence.read user function].  Many more features and bugfixes are listed below.
 
<section end=description/>
 
<section end=description/>
  
= Download =
+
== Download ==
  
 
<section begin=download/>
 
<section begin=download/>
Line 13: Line 22:
 
<section end=download/>
 
<section end=download/>
  
= CHANGES file =
+
== CHANGES file ==
  
 
<section begin=metadata/>
 
<section begin=metadata/>
 
Version 3.3.7 <br/>
 
Version 3.3.7 <br/>
 
(13 March 2015, from /trunk) <br/>
 
(13 March 2015, from /trunk) <br/>
[http://svn.gna.org/svn/relax/tags/3.3.7]
+
http://svn.gna.org/svn/relax/tags/3.3.7
 
<section end=metadata/>
 
<section end=metadata/>
  
== Features ==
+
=== Features ===
  
 
<section begin=features/>
 
<section begin=features/>
 +
* Creation of the [http://www.nmr-relax.com/manual/statistics_aic.html statistics.aic] and [http://www.nmr-relax.com/manual/statistics_model.html statistics.model] user functions for calculating and printing out different statistics.
 +
* Addition of new infrastructure for future support for plotting data using [http://home.gna.org/veusz/ 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 [http://www.nmr-relax.com/manual/structure_read_pdb.html 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 [http://www.nmr-relax.com/manual/structure_mean.html 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 [http://www.nmr-relax.com/manual/monte_carlo_setup.html 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 [http://www.nmr-relax.com/manual/rdc_copy.html rdc.copy] and [http://www.nmr-relax.com/manual/pcs_copy.html 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 [http://www.nmr-relax.com/manual/sequence_attach_protons.html 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 (2D<sub>a</sub><sup>2</sup>(4 + 3R)/5) or via the sum of data squared to allow for clearer RDC vs. PCS comparisons.
 +
* Expansion of the [http://www.nmr-relax.com/manual/align_tensor_copy.html 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 [http://www.nmr-relax.com/manual/rdc_weight.html rdc.weight] and [http://www.nmr-relax.com/manual/pcs_weight.html 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 [http://www.nmr-relax.com/manual/pcs_structural_noise.html 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.
 
<section end=features/>
 
<section end=features/>
  
== Changes ==
+
=== Changes ===
  
 
<section begin=changes/>
 
<section begin=changes/>
 +
* Created the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.n_state_model.N_state_model-class.html#test_statistics N_state_model.test_statistics system test].  This system test will be used to implement the new [http://www.nmr-relax.com/api/3.3/user_functions.statistics-module.html statistics user function class] consisting of the [http://www.nmr-relax.com/manual/statistics_model.html statistics.model] and [http://www.nmr-relax.com/manual/statistics_aic.html statistics.aic] user functions for calculating and storing the [chi2, n, k] parameters and Akaike's Information Criterion statistic respectively.
 +
* Added the [http://www.nmr-relax.com/manual/structure_align.html structure.align user function] to the [http://www.nmr-relax.com/api/3.3/user_functions-module.html#uf_translation_table renaming translation table].  This is so relax identifies [http://www.nmr-relax.com/manual/structure_align.html structure.align user functions] in scripts to raise an error saying that the [http://www.nmr-relax.com/manual/structure_superimpose.html structure.superimpose user function] should be used instead.
 +
* Added the office-chart-pie set of Oxygen icons for use in the new [http://www.nmr-relax.com/api/3.3/user_functions.statistics-module.html statistics user function class].
 +
* Created the empty [http://www.nmr-relax.com/api/3.3/user_functions.statistics-module.html statistics user function class].  This adds the infrastructure for creating the statistics user functions.
 +
* Small fix for the [http://www.nmr-relax.com/manual/structure_add_model.html structure.add_model user function] description.
 +
* Created the frontend for the [http://www.nmr-relax.com/manual/statistics_model.html 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 [http://www.nmr-relax.com/manual/statistics_model.html statistics.model user function] now uses the new statistics wizard graphic.
 +
* Created the empty [http://www.nmr-relax.com/api/3.3/pipe_control.statistics-module.html 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 [http://www.nmr-relax.com/manual/statistics_model.html 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 [http://www.nmr-relax.com/manual/statistics_model.html 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 [http://www.nmr-relax.com/api/3.3/specific_analyses.api_common.API_common-class.html#_print_model_title_global specific analysis API _print_model_title_global() common method].  This method was horribly broken, as it was never used.  The new [http://www.nmr-relax.com/manual/statistics_model.html statistics.model user function] together with the N-state model uncovers this breakage.
 +
* Defined the [http://www.nmr-relax.com/api/3.3/specific_analyses.api_base.API_base-class.html#get_model_container 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 [http://www.nmr-relax.com/api/3.3/specific_analyses.api_common.API_common-class.html#_get_model_container_cdp specific analysis API _get_model_container_cdp() commmon method].  This is to be used for the [http://www.nmr-relax.com/api/3.3/specific_analyses.api_base.API_base-class.html#get_model_container 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 [http://www.nmr-relax.com/api/3.3/specific_analyses.api_common.API_common-class.html#_get_model_container_cdp _get_model_container_cdp() method].  This is aliased as the [http://www.nmr-relax.com/api/3.3/specific_analyses.api_base.API_base-class.html#get_model_container get_model_container() specific analysis API method].
 +
* Fix for the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.n_state_model.N_state_model-class.html#test_statistics N_state_model.test_statistics system test] - the probabilities were missing from k.
 +
* Expanded the printouts from the [http://www.nmr-relax.com/manual/statistics_model.html statistics.model user function] to include the statistics.
 +
* Updated the [http://www.nmr-relax.com/api/3.3/specific_analyses.n_state_model.data-module.html#num_data_points N-state model num_data_points() function] to use more modern integer incrementation.
 +
* Fix for the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.n_state_model.N_state_model-class.html#test_statistics 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 [http://www.nmr-relax.com/manual/statistics_aic.html statistics.aic user function].  This is very similar to the [http://www.nmr-relax.com/manual/statistics_model.html 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 [http://www.nmr-relax.com/api/3.3/lib.plotting.veusz-module.html lib.plotting.veusz module] for graphing using [http://home.gna.org/veusz/ Veusz].
 +
* Shifted the lib.software.grace module to [http://www.nmr-relax.com/api/3.3/lib.plotting.grace-module.html 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 [http://www.nmr-relax.com/api/3.3/lib.plotting.grace-module.html lib.plotting.grace] functions [http://www.nmr-relax.com/api/3.3/lib.plotting.grace-module.html#write_xy_data write_xy_data()] and [http://www.nmr-relax.com/api/3.3/lib.plotting.grace-module.html#write_xy_header write_xy_header()].  These [http://www.nmr-relax.com/api/3.3/lib.plotting.api-module.html lib.plotting.api] functions ([http://www.nmr-relax.com/api/3.3/lib.plotting.api-module.html#write_xy_data write_xy_data()] and [http://www.nmr-relax.com/api/3.3/lib.plotting.api-module.html#write_xy_header write_xy_header()]) are set up to use the grace functions.
 +
* Converted all of the Grace plotting in relax to use the [http://www.nmr-relax.com/api/3.3/lib.plotting.api-module.html plotting API of the relax library].
 +
* Shifted the pipe_control.grace.write() function.  This is now the format independent [http://www.nmr-relax.com/api/3.3/pipe_control.plotting-module.html#write_xy pipe_control.plotting.write_xy() function].  The format argument has been added and this defaults to 'grace'.  The [http://www.nmr-relax.com/manual/grace_write.html grace.write user function] has been updated to use the new backend.
 +
* Updated the [http://www.nmr-relax.com/manual/pcs_structural_noise.html pcs.structural_noise user function] to use the relax library plotting API.
 +
* Fixes for the new [http://www.nmr-relax.com/api/3.3/pipe_control.plotting-module.html#write_xy pipe_control.plotting.write_xy() function].  This includes missing imports which should have moved from [http://www.nmr-relax.com/api/3.3/pipe_control.grace-module.html pipe_control.grace], as well as shifting the [http://www.nmr-relax.com/api/3.3/pipe_control.plotting-module.html#axis_setup axis_setup() function] from the [http://www.nmr-relax.com/api/3.3/pipe_control.grace-module.html pipe_control.grace module] into the [http://www.nmr-relax.com/api/3.3/pipe_control.plotting-module.html pipe_control.plotting module].
 +
* The [http://www.nmr-relax.com/manual/rdc_corr_plot.html rdc.corr_plot user function] backend now uses the relax library plotting API.  The [http://www.nmr-relax.com/api/3.3/lib.plotting.api-module.html#write_xy_data write_xy_data()] and [http://www.nmr-relax.com/api/3.3/lib.plotting.api-module.html#write_xy_header write_xy_header()] functions from [http://www.nmr-relax.com/api/3.3/lib.plotting.api-module.html lib.plotting.api] are now uses instead of the equivalent [http://www.nmr-relax.com/api/3.3/pipe_control.grace-module.html pipe_control.grace functions] which no longer exist.
 +
* More import fixes for the new [http://www.nmr-relax.com/api/3.3/pipe_control.plotting-module.html#write_xy pipe_control.plotting.write_xy() function].
 +
* Fix for the backend of the [http://www.nmr-relax.com/manual/relax_disp_plot_disp_curves.html relax_disp.plot_disp_curves user function].  The [http://www.nmr-relax.com/api/3.3/lib.plotting.api-module.html lib.plotting.api] functions [http://www.nmr-relax.com/api/3.3/lib.plotting.api-module.html#write_xy_data write_xy_data()] and [http://www.nmr-relax.com/api/3.3/lib.plotting.api-module.html#write_xy_header write_xy_header()] require the format argument.
 +
* Updated the [http://www.nmr-relax.com/api/3.3/auto_analyses.stereochem_analysis-module.html relative stereochemistry auto-analysis] to use the [http://www.nmr-relax.com/api/3.3/lib.plotting.api-module.html relax library plotting API].
 +
* Huge speed up for the assembly of atomic coordinates from a large number of structures.  The internal structural object [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#validate_models validate_models() method] was being called once for each structure when assembling the atomic coordinates.  This resulted in the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#_translate _translate() internal structural object method], which converts all input data to formatted strings, being called hundreds of millions of times.  The problem was in [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html#assemble_atomic_coordinates lib.structure.internal.coordinates.assemble_atomic_coordinates()], in that the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#one_letter_codes one_letter_codes() method], which calls [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#validate_models validate_models()], was called for each molecule encountered.  The solution was not to validate models in [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#one_letter_codes one_letter_codes()].
 +
* Huge speed up of the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#validate_models internal structural object validate_models() method].  The string formatting to create pseudo-PDB records and the large number of calls to the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#_translate _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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_atomic_fluctuations_no_match Structure.test_atomic_fluctuations_no_match system test].  This demonstrates a failure in the operation of the [http://www.nmr-relax.com/manual/structure_atomic_fluctuations.html structure.atomic_fluctuations user function] when the supplied atom ID matches no atoms.
 +
* Fix for the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_atomic_fluctuations_no_match Structure.test_atomic_fluctuations_no_match system test].  The [http://www.nmr-relax.com/manual/structure_atomic_fluctuations.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.unit_tests._lib._structure._internal.test_object-module.html unit test infrastructure for the lib.structure.internal.object module].
 +
* Created the [http://www.nmr-relax.com/api/3.3/test_suite.unit_tests._lib._structure._internal.test_object.Test_object-class.html#test_add_atom_sort Test_object.test_add_atom_sort unit test].  This is from the [http://www.nmr-relax.com/api/3.3/test_suite.unit_tests._lib._structure._internal.test_object-module.html _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 [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#add_atom 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 [http://www.nmr-relax.com/api/3.3/lib.structure.internal.molecules.MolContainer-class.html#_sort MolContainer._sort() private method].  This uses the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.molecules.MolContainer-class.html#_sort_key _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 [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#pack_structs pack_structs() method] for sorting the data will now call the new [http://www.nmr-relax.com/api/3.3/lib.structure.internal.molecules.MolContainer-class.html#_sort 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 [http://www.nmr-relax.com/manual/structure_read_pdb.html 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 [http://www.nmr-relax.com/api/3.3/lib.structure.internal.molecules.MolContainer-class.html#fill_object_from_pdb MolContainer.fill_object_from_pdb() method], and a RelaxWarning is printed listing the residue numbers of all skipped waters.
 +
* Modified the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_read_pdb_1UBQ Structure.test_read_pdb_1UBQ system test] for the new water skipping feature.  As the [http://www.nmr-relax.com/manual/structure_read_pdb.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.unit_tests._lib._structure._internal.test_object.Test_object-class.html#test_add_atom_sort Test_object.test_add_atom_sort unit test] to check atom connectivities.  This is from the [http://www.nmr-relax.com/api/3.3/test_suite.unit_tests._lib._structure._internal.test_object-module.html _lib._structure._internal.test_object unit test module].  The problem is that the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.molecules.MolContainer-class.html#_sort 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 [http://www.nmr-relax.com/api/3.3/lib.structure.internal.molecules.MolContainer-class.html#_sort 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 [http://www.nmr-relax.com/manual/structure_mean.html structure.mean user function].  This includes the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_mean_models Structure.test_mean_models] and [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_mean_molecules 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 [http://www.nmr-relax.com/manual/structure_read_pdb.html structure.read_pdb], [http://www.nmr-relax.com/manual/structure_read_gaussian.html structure.read_gaussian], and [http://www.nmr-relax.com/manual/structure_read_xyz.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_mean_molecules Structure.test_mean_molecules system test].
 +
* Fix for the [http://www.nmr-relax.com/manual/structure_mean.html structure.mean user function] call in the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_mean_models 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_mean Structure.test_mean], [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_mean_models Structure.test_mean_models], and [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_mean_molecules Structure.test_mean_molecules] system tests.  All structural data is now carefully checked to make sure that the [http://www.nmr-relax.com/manual/structure_mean.html structure.mean user function] operates correctly.
 +
* Converted the [http://www.nmr-relax.com/manual/structure_mean.html 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 [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] 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 [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#add_coordinates internal structural object method add_coordinates()] has been created.  This is modelled on the PDB, Gaussian, and XYZ format loading methods.  The [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#mean 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 [http://www.nmr-relax.com/manual/structure_read_pdb.html structure.read_pdb user function] description.
 +
* Created the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_read_merge_simultaneous Structure.test_read_merge_simultaneous system test].  This is to demonstrate a failure in the [http://www.nmr-relax.com/manual/structure_read_pdb.html 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 [http://www.nmr-relax.com/manual/monte_carlo_setup.html 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 [http://www.nmr-relax.com/manual/monte_carlo_error_analysis.html monte_carlo.error_analysis user function].
 +
* Test suite fixes for the error checking in the [http://www.nmr-relax.com/manual/monte_carlo_setup.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_bug_23293_missing_hetatm Structure.test_bug_23293_missing_hetatm system test].  This is to catch [https://gna.org/bugs/?23293 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_bug_23293_missing_hetatm Structure.test_bug_23293_missing_hetatm system test].
 +
* Created the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_multi_model_and_multi_molecule 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_multi_model_and_multi_molecule 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_bug_23294_multi_mol_automerge Structure.test_bug_23294_multi_mol_automerge system test].  This is used to catch [https://gna.org/bugs/?23294 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 [http://www.nmr-relax.com/manual/structure_write_pdb.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_bug_23294_multi_mol_automerge Structure.test_bug_23294_multi_mol_automerge system test].
 +
* Fix for the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_bug_23294_multi_mol_automerge 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 [http://www.nmr-relax.com/manual/structure_write_pdb.html structure.write_pdb user function].
 +
* Improved the RelaxWarning for missing atom numbers in the PDB CONECT records.  This is for the [http://www.nmr-relax.com/manual/structure_read_pdb.html 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 [http://www.nmr-relax.com/manual/structure_read_pdb.html structure.read_pdb user function].  This also affects the [http://www.nmr-relax.com/manual/structure_read_gaussian.html structure.read_gaussian] and [http://www.nmr-relax.com/manual/structure_read_xyz.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_bug_23295_ss_metadata_merge Structure.test_bug_23295_ss_metadata_merge system test].  This is to catch [https://gna.org/bugs/?23295 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_bug_23295_ss_metadata_merge 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_bug_23295_ss_metadata_merge Structure.test_bug_23295_ss_metadata_merge system test] and additional printouts.
 +
* Fix for the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_pdb_combined_secondary_structure 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 [http://www.nmr-relax.com/manual/structure_web_of_motion.html structure.web_of_motion user function].  With the introduction of the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.molecules.MolContainer-class.html#_sort _sort() internal structural object method] and it being called by the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#add_atom add_atom()], the [http://www.nmr-relax.com/manual/structure_web_of_motion.html 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 [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#add_atom add_atom()] boolean argument 'sort' has been added to turn the sorting on and off, and the [http://www.nmr-relax.com/manual/structure.web_of_motion.html structure.web_of_motion] backend now sets this to False.
 +
* Fix for the [http://www.nmr-relax.com/api/3.3/test_suite.unit_tests._lib._structure._internal.test_object.Test_object-class.html#test_add_atom_sort internal structural object unit test Test_object.test_add_atom_sort].  This test of the [http://www.nmr-relax.com/api/3.3/test_suite.unit_tests._lib._structure._internal.test_object-module.html _lib._structure._internal.test_object unit test module] now requires the sort argument set to True when calling the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#add_atom 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 [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#selection selection() structural object method] for allowing all atoms not matching the atom ID string to be selected.
 +
* Implemented the new 'inv' argument for the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#selection 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 [http://www.nmr-relax.com/manual/structure_mean.html 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 [http://www.nmr-relax.com/manual/rdc_copy.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.rdc.Rdc-class.html#test_rdc_copy_different_spins Rdc.test_rdc_copy_different_spins system test].  This no longer tests the deletion of interatomic data containers by the [http://www.nmr-relax.com/manual/spin_delete.html spin.delete user function], something which is not implemented.
 +
* Some more fixes for the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.rdc.Rdc-class.html#test_rdc_copy_different_spins Rdc.test_rdc_copy_different_spins system test].  The [http://www.nmr-relax.com/manual/residue_delete.html residue.delete] and not [http://www.nmr-relax.com/manual/spin_delete.html spin.delete] user function is required to delete the sequence data.
 +
* Another small fix for the new [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.rdc.Rdc-class.html#test_rdc_copy_different_spins Rdc.test_rdc_copy_different_spins system test].  The [http://www.nmr-relax.com/manual/rdc_copy.html rdc.copy user function] requires the pipe_to argument to be supplied in this case.
 +
* Expansion of the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.rdc.Rdc-class.html#test_rdc_copy_different_spins Rdc.test_rdc_copy_different_spins system test].  The interatomic data containers are now defined via the [http://www.nmr-relax.com/manual/interatom_define.html interatom.define user function], which requires the [http://www.nmr-relax.com/manual/spin_element.html spin.element user function] to set up the element information.  A printout has also been added to demonstrate a failure in the [http://www.nmr-relax.com/api/3.3/pipe_control.interatomic-module.html#interatomic_loop pipe_control.interatomic.interatomic_loop() function] in handling the correct data pipe.
 +
* Some more modifications for the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.rdc.Rdc-class.html#test_rdc_copy_different_spins 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 [http://www.nmr-relax.com/manual/rdc_copy.html 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 [http://www.nmr-relax.com/manual/rdc_copy.html rdc.copy user function] to printout all copied RDC values and errors.
 +
* Created the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.rdc.Rdc-class.html#test_rdc_copy_back_calc Rdc.test_rdc_copy_back_calc system test].  This will be used to implement the back_calc Boolean argument for the [http://www.nmr-relax.com/manual/rdc_copy.html rdc.copy user function] to allow not only measured, but also back-calculated RDC values to be copied.
 +
* Modified the [http://www.nmr-relax.com/manual/rdc.copy.html rdc.copy] printout of RDCs to occur for each alignment ID.
 +
* Implemented the back_calc argument for the [http://www.nmr-relax.com/manual/rdc_copy.html 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 [http://www.nmr-relax.com/manual/rdc_copy.html rdc.copy user function] printouts.
 +
* Created the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.pcs.Pcs-class.html#test_pcs_copy_different_spins Pcs.test_pcs_copy_different_spins system test].  This will be used to show a limitation of the [http://www.nmr-relax.com/manual/pcs_copy.html 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 [http://www.nmr-relax.com/manual/pcs_copy.html pcs.copy user function].  This is to match the [http://www.nmr-relax.com/manual/rdc_copy.html rdc.copy user function].
 +
* Created the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.pcs.Pcs-class.html#test_pcs_copy_back_calc Pcs.test_pcs_copy_back_calc system test].  This will be used to implement the back_calc Boolean argument for the [http://www.nmr-relax.com/manual/pcs_copy.html pcs.copy user function] to allow not only measured, but also back-calculated PCS values to be copied.  It matches the equivalent [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.rdc.Rdc-class.html#test_rdc_copy_back_calc Rdc.test_rdc_copy_back_calc system test].
 +
* Implemented the back_calc argument for the [http://www.nmr-relax.com/manual/pcs_copy.html 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 [http://www.nmr-relax.com/manual/rdc_copy.html rdc.copy user function].
 +
* Added full per-alignment data printouts to the [http://www.nmr-relax.com/manual/pcs_copy.html pcs.copy user function] to match [http://www.nmr-relax.com/manual/rdc_copy.html rdc.copy].  The feedback is important to know what was actually copied.
 +
* Modified the [http://www.nmr-relax.com/manual/pcs_copy.html pcs.copy user function] to handle different spin sequence between data pipes.
 +
* Fixes for the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.pcs.Pcs-class.html#test_pcs_copy_different_spins Pcs.test_pcs_copy_different_spins] and [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.pcs.Pcs-class.html#test_pcs_copy_back_calc Pcs.test_pcs_copy_back_calc] system tests.
 +
* Fix for the [http://www.nmr-relax.com/manual/pcs_copy.html pcs.copy user function] for a recently introduced problem.  The data pipe for the [http://www.nmr-relax.com/api/3.3/pipe_control.mol_res_spin-module.html#spin_loop spin_loop() function] must be supplied.
 +
* The [http://www.nmr-relax.com/manual/pcs_copy.html pcs.copy user function] now skips deselected spins.
 +
* Modified the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.n_state_model.N_state_model-class.html#test_data_copying N_state_model.test_data_copying system test] to skip deselected spins.
 +
* Added more checks to the three [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.pcs.Pcs-class.html Pcs.test_pcs_copy* system tests].
 +
* Added more checks to the three [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.rdc.Rdc-class.html Rdc.test_rdc_copy* system tests].
 +
* Created the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.rdc.Rdc-class.html#test_calc_q_factors_no_tensor Rdc.test_calc_q_factors_no_tensor system test].  This is to demonstrate a failure in the [http://www.nmr-relax.com/manual/rdc_calc_q_factors.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.rdc.Rdc-class.html#test_rdc_copy_different_spins Rdc.test_rdc_copy_different_spins] and [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.rdc.Rdc-class.html#test_rdc_copy_back_calc Rdc.test_rdc_copy_back_calc] system tests and shows that the [http://www.nmr-relax.com/manual/rdc.copy.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.rdc.Rdc-class.html#test_rdc_copy_different_spins Rdc.test_rdc_copy_different_spins] and [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.rdc.Rdc-class.html#test_rdc_copy_back_calc Rdc.test_rdc_copy_back_calc] system tests and shows that the [http://www.nmr-relax.com/manual/rdc_copy.html rdc.copy user function] fails to duplicate this information as well.
 +
* Expanded the [http://www.nmr-relax.com/manual/rdc_copy.html rdc.copy user function] to copy the RDC data type and absolute RDC flag information.
 +
* Created the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.rdc.Rdc-class.html#test_corr_plot Rdc.test_corr_plot system test] to check the [http://www.nmr-relax.com/manual/rdc_corr_plot.html rdc.corr_plot user function].  This shows that this poorly tested function works correctly.
 +
* Created the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.pcs.Pcs-class.html#test_corr_plot Pcs.test_corr_plot system test] to check the [http://www.nmr-relax.com/manual/pcs_corr_plot.html 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 [http://www.nmr-relax.com/manual/pcs_corr_plot.html pcs.corr_plot user function].  This problem was detected by the new [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.pcs.Pcs-class.html#test_corr_plot Pcs.test_corr_plot system test].  The [http://www.nmr-relax.com/manual/pcs_corr_plot.html pcs.corr_plot user function] now matches the [http://www.nmr-relax.com/manual/rdc_corr_plot.html rdc.corr_plot user function] in terms of arguments.
 +
* Completed the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.pcs.Pcs-class.html#test_corr_plot 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 [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, 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 (2D<sub>a</sub><sup>2</sup>(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 [http://www.nmr-relax.com/manual/align_tensor_copy.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.align_tensor.Align_tensor-class.html#test_copy_pipes Align_tensor.test_copy_pipes system test].  This is to show a problem in the [http://www.nmr-relax.com/manual/align_tensor_copy.html align_tensor.copy user function] when copying all tensors between data pipes.
 +
* Modified the [http://www.nmr-relax.com/api/3.3/pipe_control.align_tensor-module.html#align_data_exists 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 [http://www.nmr-relax.com/manual/align_tensor_copy.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.align_tensor.Align_tensor-class.html#test_copy_pipes Align_tensor.test_copy_pipes system test] to pass.
 +
* Fixes for the [http://www.nmr-relax.com/manual/align_tensor_copy.html align_tensor.copy user function] argument unit tests.  The tensor_from and tensor_to arguments can now be None.
 +
* Created the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.align_tensor.Align_tensor-class.html#test_copy_pipes_sims Align_tensor.test_copy_pipes_sims system test].  This demonstrates a failure of the [http://www.nmr-relax.com/manual/align_tensor_copy.html align_tensor.copy user function] when Monte Carlo simulated tensors are present.
 +
* Deleted the [http://www.nmr-relax.com/api/3.3/data_store.align_tensor.AlignTensorSimList-class.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.align_tensor.Align_tensor-class.html#test_copy_pipes_sims 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 [http://www.nmr-relax.com/api/3.3/data_store.align_tensor.AlignTensorData-class.html#_update_object 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 [http://www.nmr-relax.com/api/3.3/pipe_control.rdc-module.html#return_rdc_data 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 [http://www.nmr-relax.com/manual/interatom_unit_vectors.html 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 [http://www.nmr-relax.com/manual/rdc_corr_plot.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.sequence.Sequence-class.html#test_bug_23372_read_csv Sequence.test_bug_23372_read_csv system test].  This is to catch [https://gna.org/bugs/?23372 bug #23372, the sequence.read failure with CSV files]. It uses a truncated version of the CSV data file attached to [https://gna.org/support/?3219 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 [http://www.nmr-relax.com/api/3.3/lib.sequence-module.html#check_sequence_func check_sequence_func()] and the [http://www.nmr-relax.com/api/3.3/lib.sequence-module.html#check_sequence checking object is called check_sequence].  It removes the string processing hack to convert RelaxErrors to RelaxWarnings in the [http://www.nmr-relax.com/api/3.3/lib.sequence-module.html#read_spin_data lib.sequence.read_spin_data() function], avoiding strange messages such at "RelaxWarning: ror: The sequence data in the line..." as seen in the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.sequence.Sequence-class.html#test_bug_23372_read_csv Sequence.test_bug_23372_read_csv system test].
 +
* Small typo fix for the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.sequence.Sequence-class.html#test_bug_23372_read_csv Sequence.test_bug_23372_read_csv system test].
 +
* Added the raise_flag argument to the [http://www.nmr-relax.com/api/3.3/lib.sequence-module.html#read_spin_data lib.sequence.read_spin_data() function].  This is to allow the missing data RelaxError to be deactivated.
 +
* Modified the [http://www.nmr-relax.com/manual/spectrum_read_intensities.html spectrum.read_intensities user function] backend to be more robust.  This affects the generic formatted peak lists, via the [http://www.nmr-relax.com/api/3.3/lib.spectrum.peak_list-module.html#intensity_generic 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 [http://www.nmr-relax.com/manual/rdc_corr_plot.html rdc.corr_plot] and [http://www.nmr-relax.com/manual/pcs_corr_plot.html 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 [http://www.nmr-relax.com/api/3.3/lib.plotting.api-module.html#write_xy_data 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 [http://www.nmr-relax.com/api/3.3/lib.structure.pdb_write-module.html#_handle_atom_name lib.structure.pdb_write._handle_atom_name() function].
 
<section end=changes/>
 
<section end=changes/>
  
== Bugfixes ==
+
=== Bugfixes ===
  
 
<section begin=bugfixes/>
 
<section begin=bugfixes/>
 +
* Big bug fix for the [http://www.nmr-relax.com/api/3.3/specific_analyses.n_state_model.data-module.html#num_data_points N-state model num_data_points() function].  This is from the [http://www.nmr-relax.com/api/3.3/specific_analyses.n_state_model.data-module.html 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 [http://www.nmr-relax.com/api/3.3/pipe_control.pcs-module.html#return_pcs_data 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 [http://www.nmr-relax.com/api/3.3/pipe_control.rdc-module.html#return_rdc_data 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 [http://www.nmr-relax.com/api/3.3/pipe_control.pcs-module.html#return_pcs_data pipe_control.pcs.return_pcs_data() function].  The check for None values was incorrect.
 +
* Fixes for the [http://www.nmr-relax.com/api/3.3/specific_analyses.n_state_model.data-module.html#num_data_points 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 [http://www.nmr-relax.com/api/3.3/pipe_control.mol_res_spin-module.html#spin_loop spin_loop() skip_desel argument].
 +
* Fix for [https://gna.org/bugs/?23259 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 [http://www.nmr-relax.com/manual/minimise_execute.html minimise.execute], 'minimise' is in the translation table and hence [http://www.nmr-relax.com/manual/minimise_calculate.html 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 [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 problem was uncovered by the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_atomic_fluctuations_no_match Structure.test_atomic_fluctuations_no_match system test].  The function can now handle no data being passed in.
 +
* Fixes for 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 function will now raise a RelaxError if no structural data matching the atom ID can be found. The problem was uncovered by the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_atomic_fluctuations_no_match Structure.test_atomic_fluctuations_no_match system test].  The fix affects the [http://www.nmr-relax.com/manual/structure_atomic_fluctuations.html structure.atomic_fluctuations], [http://www.nmr-relax.com/manual/structure_displacement.html structure.displacement], [http://www.nmr-relax.com/manual/structure_find_pivot.html structure.find_pivot], [http://www.nmr-relax.com/manual/structure_rmsd.html structure.rmsd], [http://www.nmr-relax.com/manual/structure_superimpose.html structure.superimpose], and [http://www.nmr-relax.com/manual/structure_web_of_motion.html structure.web_of_motion] user functions.
 +
* Fix for [https://gna.org/bugs/?23265 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 [https://gna.org/bugs/?23288 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 [http://www.nmr-relax.com/manual/structure_write_pdb.html structure.write_pdb user function] for handling old relax state and results files.
 +
* Fix for [https://gna.org/bugs/?23293 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 [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#_parse_mols_pdb 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 [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#write_pdb write_pdb() method] was not handling the PDB sequential serial number correctly.
 +
* Fix for [https://gna.org/bugs/?23294 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 [http://www.nmr-relax.com/manual/structure_write_pdb.html 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 [http://www.nmr-relax.com/api/3.3/lib.structure.pdb_write-module.html#_handle_atom_name _handle_atom_name() helper function] has been added to the lib.structure.pdb_write module.  This is now used in the [http://www.nmr-relax.com/api/3.3/lib.structure.pdb_write-module.html#atom atom()] and [http://www.nmr-relax.com/api/3.3/lib.structure.pdb_write-module.html#sheet sheet()] functions for consistently formatting the atom name field.
 +
* Fix for [https://gna.org/bugs/?23295 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 [http://www.nmr-relax.com/manual/structure_read_pdb.html 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 [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#_parse_pdb_ss _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 [http://www.nmr-relax.com/api/3.3/lib.structure.internal.object.Internal-class.html#pack_structs 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 [http://www.nmr-relax.com/api/3.3/lib.structure.internal.molecules.MolContainer-class.html#_sort 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 [http://www.nmr-relax.com/api/3.3/test_suite.unit_tests._lib._sequence_alignment.test_msa.Test_msa-class.html#test_central_star Test_msa.test_central_star unit test].  This is from the [http://www.nmr-relax.com/api/3.3/test_suite.unit_tests._lib._sequence_alignment.test_msa-module.html _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 [http://www.nmr-relax.com/api/3.3/lib.structure.internal.molecules.MolContainer-class.html#_sort_key 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 [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].  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 [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#sequence_alignment pipe_control.structure.main.sequence_alignment() function].
 +
* Fix for a RelaxError message from the internal structural object when validating models.
 +
* Bug fix for the [http://www.nmr-relax.com/manual/results_write.html results.write user function] when loading relax state files.  The [http://www.nmr-relax.com/manual/results_write.html 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 [http://www.nmr-relax.com/manual/rdc_write.html 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 [http://www.nmr-relax.com/api/3.3/pipe_control.interatomic-module.html#interatomic_loop pipe_control.interatomic.interatomic_loop() function].  This was identified in the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.rdc.Rdc-class.html#test_rdc_copy_different_spins 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 [http://www.nmr-relax.com/manual/rdc_copy.html rdc.copy user function].
 +
* Fix for the [http://www.nmr-relax.com/manual/pcs_read.html pcs.read user function].  The problem was caught by the new [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.pcs.Pcs-class.html#test_pcs_copy_different_spins 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 [http://www.nmr-relax.com/manual/pcs_read.html pcs.read user function] would terminate in a TypeError.
 +
* Fixes for the [http://www.nmr-relax.com/manual/rdc_calc_q_factors.html rdc.calc_q_factors user function] for when no alignment tensor is present.  This was caught by the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.rdc.Rdc-class.html#test_calc_q_factors_no_tensor Rdc.test_calc_q_factors_no_tensor system test].  Now if no tensor is present, a warning is given and the 2D<sub>a</sub><sup>2</sup>(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 [http://www.nmr-relax.com/manual/pcs_corr_plot.html pcs.corr_plot user function] when the spin containers have no element information.
 +
* Fix for [https://gna.org/bugs/?23372 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 [http://www.nmr-relax.com/api/3.3/lib.io-module.html#extract_data lib.io.extract_data() function].
 +
* Fix for the [http://www.nmr-relax.com/api/3.3/lib.sequence-module.html#check_sequence 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.
 
<section end=bugfixes/>
 
<section end=bugfixes/>
  
= Links =
+
== Links ==
  
 
<section begin=links/>
 
<section begin=links/>
Line 42: Line 222:
  
 
* [http://wiki.nmr-relax.com/Relax_3.3.7 Official release notes on the relax wiki].
 
* [http://wiki.nmr-relax.com/Relax_3.3.7 Official release notes on the relax wiki].
* [https://gna.org/forum/forum.php?forum_id=2493 Gna! news item].
+
* [https://gna.org/forum/forum.php?forum_id=2494 Gna! news item].
* [http://article.gmane.org/gmane.science.nmr.relax.announce/64 Gmane mailing list archive].
+
* [http://article.gmane.org/gmane.science.nmr.relax.announce/65 Gmane mailing list archive].
* [http://www.mail-archive.com/relax-announce%40gna.org/msg00055.html The Mail Archive].
+
* [http://www.mail-archive.com/relax-announce%40gna.org/msg00056.html The Mail Archive].
* [https://mail.gna.org/public/relax-announce/2015-02/msg00000.html Local archives].
+
* [https://mail.gna.org/public/relax-announce/2015-03/msg00000.html Local archives].
* [https://marc.info/?l=relax-announce&m=142326608230935&w=2 Mailing list ARChives (MARC)].
+
* [https://marc.info/?l=relax-announce&m=142628131518604&w=2 Mailing list ARChives (MARC)].
  
 
{{:Softpedia}}
 
{{:Softpedia}}
 
<section end=links/>
 
<section end=links/>
  
= Announcements =
+
== Announcements ==
  
 
{{:relax release announcements}}
 
{{:relax release announcements}}
  
  
= See also =
+
== See also ==
  
 
* [http://www.nmr-relax.com/api/3.3/ The relax 3.3 API documentation]
 
* [http://www.nmr-relax.com/api/3.3/ The relax 3.3 API documentation]
 
{{:relax release see also}}
 
{{:relax release see also}}
 
[[Category:Relaxation dispersion analysis]]
 
[[Category:Relaxation dispersion analysis]]

Revision as of 10:24, 3 November 2015


Official relax releases
relax logo
relax version 3.3.7
Previous version Next version
← relax 3.3.6 relax 3.3.8 →

Release type Major feature and bugfix
Release date 13 March 2015

The PDF version of the relax 3.3.7 user manual The relax 3.3.7 user manual

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


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