relax 3.1.4

From relax wiki
Jump to: navigation, search

Official relax releases
relax logo
relax version 3.1.4
Previous version Next version
← relax 3.1.3 relax 3.1.5 →

Keywords Structural data
Release type Minor feature and bugfix
Release date 31 January 2014

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


This is a minor feature and bugfix release which has improvements for the handling of structural data involving multiple molecules or models and improved support in the NOE analysis for replicated spectra. Included are fixes for the failure of the structure.create_diff_tensor_pdb user function for non-spherical diffusion tensors when no Monte Carlo simulations are present and for the failure of the rdc.write user function for back calculated RDC data. Full details are given below.


The new relax versions can be downloaded from 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,


Version 3.1.4
(31 January 2014, from /trunk)


  • The structure.write_pdb user function now supports multiple molecules being present.
  • Large speed optimisations for the internal structural object when multiple models are present.
  • Improved support for replicated spectra in the NOE analysis.


  • Created the Frame_order.test_generate_rotor2_distribution system test. This is to test the Frame Order distribution generating base script, used for creating the synthetic Frame Order test data, and to demonstrate a failure in handling back-calculated RDC data. To implement this, the test_suite/shared_data/frame_order/cam/ path has been converted into a Python package (with the addition of the files). The base data generation script test_suite/shared_data/frame_order/cam/ has also been modified to use the absolute path for the data files and its run() method now accepts the save_path argument to allow the files to be saved into a temporary directory.
  • Fixes for the Frame_order.test_generate_rotor2_distribution system test. The test_suite/shared_data/frame_order/cam/ script now saves the program state files into the self.save_path directory, preventing the system test from attempting to save files into the relax test suite directories.
  • Another fix for the Frame_order.test_generate_rotor2_distribution system test. The test_suite/shared_data/frame_order/cam/ script no longer prints its progress indicator to sys.__stderr__ but to sys.stderr instead. This avoids the progress text from appearing during the relax test suite execution.
  • Created the Structure.test_bug_21522_master_record_atom_count system test. This is designed to catch bug #21522, the structure.write_pdb user function creating an incorrect MASTER record. This hence also catches bug #21520, the failure of the structure.write_pdb user function when creating the MASTER record due to too many ATOM and HETATM records being present. The test simply creates two structural models, adds one atom, and writes out a PDB file, checking its contents.
  • The structure.write_pdb user function can now handle a file instance for the file argument. This is for the Structure.test_bug_21522_master_record_atom_count system test, to allow a dummy file object to be used. This can also be useful for power users.
  • Created the lib.geometry.vectors.unit_vector_from_2point() function. This is used to quickly calculate the unit vector between two points.
  • The lib.structure.represent.rotor.rotor_pdb() function can now handle multiple rotors. Previously this function would fail if called twice with the same structural object.
  • Added the has_molecule() method to the relax internal structural object. This is used to quickly check if a molecule name already exists in the structural object.
  • More improvements for handling multiple rotors in the lib.structure.represent.rotor.rotor_pdb() function. The atom numbering is now better handled.
  • Better support for the writing out of multiple molecules by the structure.write_pdb user function. This is for the internal structural object write_pdb() method. Now each molecule is assigned a different chain ID in the PDB file, and the chain IDs loaded into the structural object are ignored. The chain IDs should however be preserved when using structure.read_pdb followed by structure.write_pdb, without storing the ID. A number of the Structure system tests had to be updated, as now the relax generated PDB files will always write out a chain ID.
  • Large speed up for the internal structural object for when many models are present. The new ModelList.current_models object keeps track of all the models already present in the structural object. This simplifies the checks of the pack_structs() internal structural object method by removing expensive looping. This allows the loading of PDB files to continue to be fast even with many tens or hundreds of thousands of models already loaded.
  • More speed ups for the internal structural object when huge numbers of models are present. Another loop over the structural_data object has been eliminated from the PDB reading load_pdb() method.
  • Another optimisation for the internal structural object for large numbers of models. The ModelList.add_item() method no longer loops over all models to check if a model is already present, instead using the new current_models list.
  • Yet more optimisation for handling large quantities of models in the internal structural model. Now when adding new models to the object, the model_indices and model_list objects are no longer created. This saves much time as the large model_list is now not sorted. A number of structural object methods have been updated to handle the change by switching to the model_loop() method for looping over the models, rather than using the model_indices and model_list objects.
  • The frame order matrix printing function can now output the matrix to any precision. The lib.frame_order.format.print_frame_order_2nd_degree() function now accepts the 'places' argument which allows for higher precision printouts.
  • The behaviour of the rdc.write user function has been changed to output spin ID strings in single quotes. This is to avoid problems with the '#' molecule identifier and the '#' comment character.
  • Fix for the diffusion_tensor.init user function reference in the intro chapter of the manual. This was using a very old and now non-functional syntax.
  • Created the Diffusion_tensor.test_bug_21561_tensor_pdb_failure system test. This is to catch bug #21561, failure of the structure.create_diff_tensor_pdb user function for non-spherical diffusion tensors when no Monte Carlo simulations are present, as reported by Martin Ballaschk.
  • Added the truncated data for creating a system test to catch bug #21562, the failure of the NOE analysis when spectra are replicated. This bug was reported by Dhanas Muthu. This consists of the Sparky peak lists attached to the bug report and the modified 2AT7 PDB file. The data has been truncated to only include residues :12, :13, and :14.
  • Shifted the NOE system test script into the new 'noe' directory.
  • Created the Noe.test_bug_21562_noe_replicate_fail system test. This is to catch bug #21562, the failure of the NOE analysis when spectra are replicated, reported by Dhanas Muthu. This uses the truncated data taken from the files attached to the bug report. The NOE output file is checked to see if the contents are correct.
  • Better support for replicated spectra in the NOE analysis. The saturated and reference peak intensity and error are now properly averaged. Previously averaging was not used as the number of replicates N are cancelled in the ratios used for the NOE and error calculation. However this fails when the number of replicates for the saturated spectrum does not match the number of replicates for the reference spectrum. Now any data combination is possible.
  • Another fix for the NOE analysis for when replicated spectra have been collected. Variance averaging rather than error averaging is now used for the peak intensity errors. This is important if the errors for each replicated spectra are different - a case which is rarely encountered as the replicates are almost always used to determine one error for all the replicates.



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

Softpedia also has information about the newest relax releases:


If you would like to receive announcements about new relax versions, please subscribe to the relax-announce mailing list using the relax-announce info page. This list only receives ~10 emails per year. It is archived at Gmane (thread, blog, NNTP, RSS), in the local archives, in The Mail Archive, and in the MARC (Mailing list ARChives).

See also