relax 3.3.5
Description
This is a major feature and bugfix release. It fixes an important bug in the Monte Carlo simulation error analysis in the relaxation dispersion analysis. Features include improvements to the NMR spectral noise error analysis, expansion of the grace.write user function to handle both first and last point normalisation for reasonable R1 curves in saturation recovery experiments, the implementation of Needleman-Wunsch pairwise sequence alignment algorithm using the BLOSUM62, PAM250 and NUC 4.4 substitution matrices for more advanced 3D structural alignments via the structure.align and structure.superimpose user functions as well as any of the other structure user functions dealing with multiple molecules, conversion of the structure.displacement, structure.find_pivot, structure.rmsd, structure.superimpose and structure.web_of_motion user functions to a new pipes/models/molecules/atom_id design to allow the user functions to operate on different data pipes, different structural models and different molecules, addition of the displace_id argument to the structure.align and structure.superimpose user functions to allow finer control over which atoms are translated and rotated by the algorithm, large improvement for the PDB molecule identification code affecting the structure.read_pdb user function, creation of the lib.plotting package for assembling all of the data plotting capabilities of relax, implementation of the new structure.atomic_fluctuations user function for creating text output or Gnuplot graphs of the correlation matrix of interatomic distance, angle or parallax shift fluctuations, the implementation of ordinary least squares fitting, and improvements for the pcs.corr_plot and rdc.corr_plot user functions. 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.5
(27 January 2015, from /trunk)
http://svn.gna.org/svn/relax/tags/3.3.5
Features
- Improvements to the NMR spectral noise error analysis.
- Addition of the new spectrum.error_analysis_per_field user function to quickly perform a per-NMR field spectrum error analysis.
- Added spectrum.sn_ratio user function to calculate the signal to noise ration for all spins, and introduced the per-spin sn_ratio parameter for the NOE, relaxation curve-fitting and relaxation dispersion analyses.
- Added the new select.sn_ratio and deselect.sn_ratio user functions to change the selection status of spins according to their signal to noise ratio.
- Expansion of the grace.write user function to handle both first and last point normalisation for reasonable R1 curves in saturation recovery experiments.
- Conversion of the structure.align, structure.displacement, structure.find_pivot, structure.rmsd, structure.superimpose and structure.web_of_motion user functions to a standardised pipes/models/molecules/atom_id argument design to allow the user functions to operate on different data pipes, different structural models and different molecules simultaneously and to restrict operation to a subset of all spins. This is also used by the new structure.atomic_fluctuations user function.
- Addition of the displace_id argument to the structure.align and structure.superimpose user functions to allow finer control over which atoms are translated and rotated by the algorithm independently of the align_id atom ID for selecting atoms used in the superimposition.
- Large improvement for the PDB molecule identification code affecting the structure.read_pdb user function allowing discontinuous ATOM and HETATM records with the same chain ID to be loaded as the same molecule.
- Creation of the lib.plotting package for assembling all of the data plotting capabilities of relax into a unified software independent API.
- Implementation of the new structure.atomic_fluctuations user function for creating text output or Gnuplot graphs of the correlation matrix of interatomic distance, angle or parallax shift fluctuations, measured as sample standard deviations, between different molecules.
- The implementation of ordinary least squares fitting.
- Improvements for the pcs.corr_plot and rdc.corr_plot user functions.
- The implementation of Needleman-Wunsch pairwise sequence alignment algorithm using the BLOSUM62, PAM250 and NUC 4.4 substitution matrices for more advanced 3D structural alignments via the structure.align user function. The Needleman-Wunsch algorithm is implemented as in the EMBOSS software to allow for gap opening and extension penalties as well as end penalties. This is also used in all the other structure user functions dealing with multiple molecules - structure.atomic_fluctuations, structure.displacement, structure.find_pivot, structure.rmsd, structure.superimpose, structure.web_of_motion.
- Improved support for PDB secondary structure metadata for the structure.read_pdb and structure.write_pdb user functions.
Changes
- Added a sentence to the start of the citation chapter about http://www.nmr-relax.com links. This is to convince people to more freely use this URL. In that way, the relax search engine ranking should be significantly increased. And it will be easier for new users to get into relax.
- Removing the automatic function for error analysis per field in the relaxation dispersion auto-analysis. This function is moved into pipe_control/spectrum.py.
- Added the function pipe_control.error_analysis_per_field(), as an automatic way of submitting subset IDs per field for error analysis.
- For the pipe_control.spectrum.error_analysis_per_field(), added additional printout of subset IDs used for error analysis.
- In the auto_analysis.relax_disp module, used the new spectrum.error_analysis_per_field user function to calculate the peak intensity errors.
- Reinserted the error_analysis() function in the auto class of relaxation dispersion. This function only checks if the error analysis has not been be performed before, and then decides to call the spectrum.error_analysis_per_field user function. The implementation can be tested with the Relax_disp.test_estimate_r2eff_err_auto system test.
- In pipe_control.spectrum.error_analysis_per_field() removed the checks which would stop the calculation of the errors. This function will now always run, which will make it possible for the user to try different error calculations.
- Copy of the system test script peak_lists.py to spectrum.py. This is for the implementation of calculation of signal to noise ratio, selection and deselection.
- Initialised first test in the Spectrum system test class. This is simply loading some intensity data, and checks data. The system test test Spectrum.test_signal_noise_ratio will be expanded to test the calculation of the signal to noise ratio.
- Added the Spectrum system test class to the init file, so these system tests can be executed.
- Added the pipe_control.spectrum.signal_noise_ratio() backend function, for calculation of the signal to noise ratio per spin.
- Added system test Spectrum.test_grace_int, to test plotting the intensity per residue. This is to prepare for a grace plotting of the signal to noise level per residue. Also added additional tests for signal to noise ratio calculation in the system test Spectrum.test_signal_noise_ratio.
- Added system test Spectrum.test_grace_sn_ratio to help implement plotting the signal to noise ratio per residue.
- Added the common API Parameter structure 'sn_ratio' in parameter_object.
- For the specific analysis of "noe", "relax_disp", and "relax_fit", initialised the sn_ratio parameter structure.
- Added float around values in signal_noise_ratio() function.
- Made the spectrum.sn_ratio user function smaller.
- Added two new system tests Spectrum.test_deselect_sn_ratio_all and Spectrum.test_deselect_sn_ratio_any. These test the deselect.sn_ratio user function, to deselect spins with a signal to noise ratio lower than the specified ratio.
- Added function in pipe_control.spectrum.sn_ratio_deselection(), a function to deselect spins according to the signal to noise ratio. The function is flexible, since it possible to use different comparison operators. And the function can be switched, so a selection is made instead.
- Added the new deselect.sn_ratio user function to deselect spins according to their signal to noise ratio.
- Added new backend function in pipe_control.spectrum.sn_ratio_selection. This is to select spins with a signal to noise ratio, higher or lower than the specified ratio.
- Added two new system tests Spectrum.test_select_sn_ratio_all and Spectrum.test_select_sn_ratio_any. These test the select.sn_ratio user function.
- Added the new select.sn_ratio user function to select spins with signal to noise ratio above a specified ratio. The default ratio for signal to noise selection is 10.0. But should probably be 50-100 instead. The default of 'all_sn' is True, meaning that all signal to noise ratios for the spins needs to pass the test.
- Small fix for standard values in deselect.sn_ratio user function. The standard values will deselect spins which have at least one signal to noise ratio which is lower than 10.0.
- Small fix for the backend of spectrum sn_ratio_selection() and sn_ratio_deselection(). The standard values have been changed.
- Fix for the window size in dx.map user function. The size of the windows was not compatible with the latest change.
- Documentation fix in the manual for the lower and upper bonds for parameters in the grid search.
- Documentation fix in the manual for the lower and upper bonds for parameters in the minimisation.
- Documentation fix in the manual for the scaling values of parameters in the minimisation. The scaling helps the minimisers to make the same step size for all parameters when moving in the χ2 space.
- Added a devel script which can quickly convert oxygen icons to the desired sizes.
- Extended the devel script image size converter.
- Adding new oxygen icon in all needed sizes.
- Comment fix in user function select.sn_ratio and deselect.sn_ratio.
- Important fix for the spectrum.error_analysis_per_field user function. This is for the compilation of the user manual. The possessive apostrophe should not be used in the text "spectrum ID's". This grammar error triggers an unfortunate bug in the docstring fetching script docs/latex/fetch_docstrings.py whereby the script thinks that ' is the start of a quote.
- Added a compressed EPS version of the 128x128/actions/document-preview-archive Oxygen icon. The EPS bounding box was manually changed to 0 0 18 18 in a text editor. The scanline translation parameters were also fixed by changing them all to 18 as well. This allows the icon to be used in the relax manual.
- Fix for the blacklist objects in data_store.data_classes.Element.to_xml(). The class blacklist variable was not being taken into account.
- Added the norm_type argument to the grace.write user function. This is in response to http://thread.gmane.org/gmane.science.nmr.relax.devel/7392/focus=7438. This norm_type argument can either be 'first' or 'last' to allow different points of the plot to be the normalisation factor. The default of 'first' preserves the old behaviour of first point normalisation.
- The relax_fit_saturation_recovery.py system test script now sets the norm_type argument. This is for testing out this new option for the grace.write user function.
- The new grace.write user function norm_type argument has been activated. The argument is now passed from pipe_control.grace.write into the write_xy_data() function of the lib.software.grace module, and is used to select which point to use for the normalisation.
- The relaxation exponential curve-fitting auto-analysis now sets the normalisation type. This is for the new grace.write user function. If the model for all spins is set to 'sat', then the norm_type will be set to 'last'. This allows for reasonable normalised curves for the saturation recovery R1 experiment types.
- Change for norm_type variable in the relaxation exponential curve-fitting auto-analysis. This is now set to 'last', not only for the saturation recovery, but now also for the inversion recovery experiment types. This ensures that the normalisation point is the steady state magnetisation peak intensity.
- Cleared the list of blacklisted objects for the cdp.exp_info data structure. The data_store.exp_info.ExpInfo class blacklist variable had previously not been used. But after recent changes, the list was now active. As all the contents of the container were blacklisted, the container was being initialised as being empty when reading the XML formatted state or results files. Therefore the blacklist is now set to an empty list.
- Improvements for all of the tables of the relaxation dispersion chapter of the manual. The captions are now the full width (or height for rotated tables) of the page in the PDF version of the manual. The \latex{} command from the latex2html package has been used to improve the HTML versions of the tables by deactivating the landscape environment, the cmidrule command, and the caption width commands. This results in properly HTML formatted tables, rather than creating a PNG image for the whole table. These should significantly improve the tables in the webpages http://www.nmr-relax.com/manual/Comparison_of_dispersion_analysis_software.html, http://www.nmr-relax.com/manual/The_relaxation_dispersion_auto_analysis.html, and http://www.nmr-relax.com/manual/Dispersion_model_summary.html.
- Created the Structure.test_align_molecules system test. This will be used to extend the functionality of the structure.align user function to be able to align different molecules in the same data pipe, rather than requiring either models or identically named structures in different data pipes.
- Modified the Structure.test_align_molecules system test. This now simultaneously checks both the pipes and molecules arguments to the structure.align user function.
- More changes for the new Structure.test_align_molecules system test.
- Some more fixes for the Structure.test_align_molecules system test.
- Change to the Structure.test_align system test. The molecules argument for the structure.align user function has been changed to match the models argument, in that it now needs to be a list of lists with the first dimension matching the pipes argument. This change is to help with the implementation of the new structure.align functionality.
- Implemented the new molecules argument for the structure.align user function. In addition to accepting the new argument, the user function backend has been redesigned for flexibility. The assembly of coordinates and final rotations and translations now consist of three loops over desired data pipes, all models, and all molecules. If the models or molecules arguments are supplied, then the models or molecules in the loop which do not match are skipped. This logic simplifies and cleans up the backend.
- Created the Structure.test_rmsd_molecules system test. This will be used to implement a new molecules argument for the structure.rmsd user function so that the RMSD between different molecules rather than different models can be calculated.
- Implemented the new molecules argument for the structure.rmsd user function. This allows the RMSD between different molecules rather than different models to be calculated, extending the functionality of this user function.
- Created the Structure.test_displacement_molecules system test. This will be used to implement the new molecules argument for the structure.displacement user function.
- Implemented the molecules argument for the structure.displacement user function. This allows the displacements (translations and rotations) to be calculated between different molecules rather than different models. This information is stored in the dictionaries of the cdp.structure.displacement object with the keys set to the molecule list indices.
- Created the Structure.test_find_pivot system test. This is to check the structure.find_pivot user function as this algorithm is currently not being checked in the test suite.
- Created the Structure.test_find_pivot_molecules system test. This will be used to implement support for a molecules argument in the structure.find_pivot user function so that different molecules rather than different models can be used in the analysis.
- Increased the precision of pivot optimisation in the Structure.test_find_pivot_molecules system test.
- Implemented the molecules argument for the structure.find_pivot user function. This allows the motional pivot optimisation between different molecules rather than different models.
- Shifted the atomic assembly code from the structure.align user function into its own function. The new function assemble_coordinates() of the pipe_control.structure.main module will be used to standardise the process of assembling atomic coordinates for all of the structure user functions. This will improve the support for comparing different molecules rather than different models as missing atoms or divergent primary sequence are properly handled, and it has multi-pipe support.
- Changed the argument order for the structure.align user function. The standardised order will now be pipes, models, molecules, atom_id, etc.
- Converted the structure.find_pivot user function to the new pipes/models/molecules/atom_id design. This allows the motional pivot algorithm to work on atomic coordinates from different data pipes, different structural models, and different molecules. The change allows the Structure.test_find_pivot_molecules system test to now pass, as missing atomic data is now correctly handled. The user function backend uses the new pipe_control.structure.main.assemble_coordinates() function. The Structure.test_find_pivot and Structure.test_find_pivot_molecules system tests have been updated for the user function argument changes.
- Shift of the atomic coordinate assembly code into the relax library. Most of the pipe_control.structure.main.assemble_coordinates() function has been shifted into the assemble_coord_array() function of the new lib.structure.internal.coordinates module. The pipe_control function now only checks the arguments and assembles the structural objects from the relax data store, and then calls assemble_coord_array() to do all of the work. This code abstraction increases the usefulness of the atomic coordinate assembly and allows it to be significantly expanded in the future, for example by being able to take sequence alignments into consideration.
- Tooltip standardisation for the structure.align and structure.find_pivot user functions.
- The coordinate assembly function now returns list of unique IDs. This is for each structural object, model and molecule.
- Changed the structure ID strings returned by the assemble_coord_array() function. This is from the lib.structure.internal.coordinates module. The structural object name is only included if more than one structural object has been supplied.
- More improvements for the structure ID strings returned by the assemble_coord_array() function.
- Converted the internal structural displacement object to use unique IDs rather than model numbers. This allows the object to be much more flexible in what types of structures it can handle. This is in preparation for a change in the structure.displacement user function.
- Converted the structure.displacement user function to the new pipes/models/molecules/atom_id design. This allows the displacements to be calculated between atomic coordinates from different data pipes, different structural models, and different molecules. The user function backend has been hugely simplified as it now uses the new pipe_control.structure.main.assemble_coordinates() function. The Structure.test_displacement system test has been updated for the user function argument changes.
- Another refinement for the structure ID strings returned by the assemble_coord_array() function.
- Updated the Structure.test_displacement_molecules system test. This is for the changes to the structure.displacement user function.
- Docstring spelling fixes for the steady-state NOE and relaxation curve-fitting auto-analyses.
- Converted the structure.rmsd user function to the new pipes/models/molecules/atom_id design. This allows the RMSD 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_coordinates() function. The Structure.test_rmsd_molecules system test has been updated for the user function argument changes.
- Created the internal structural object model_list() method. This is to simplify the assembly of a list of all current models in the structural object.
- Converted the structure.superimpose user function to the new pipes/models/molecules/atom_id design. The user function arguments have not changed, however the backend now uses the new pipe_control.structure.main.assemble_coordinates() function. This is to simply decrease the number of failure points possible in the structure user functions. The change has no effect on the user function use or results.
- Documentation fix for the assemble_coord_array() function. The return values for lib.structure.internal.coordinates.assemble_coord_array() were incorrectly documented.
- Modified the Structure.test_bug_22070_structure_superimpose_after_deletion system test. This now calls the structure.align user function after calling the structure.superimpose user function to better test a condition that can trigger bugs.
- Fixes for the structure.superimpose and structure.align user functions. The fit_to_mean() and fit_to_first() functions of lib.structure.superimpose where being incorrectly called, in that they expect a list of elements and not lists of lists.
- Code refactorisation for the structure.align user function backend. The looping over data pipes, model numbers, and molecule names, skipping those that don't match the function arguments, has been shifted into the new structure_loop() generator function of the pipe_control.structure.main module. This function assembles the data from the data store and then calls the new loop_coord_structures() generator function of the lib.structure.internal.coordinates module which does all of the work.
- Some docstring expansions for the pipe_control.structure.main module functions.
- Refactored the descriptions of a number of structure user functions. This includes the structure.align, structure.displacement, structure.find_pivot, structure.rmsd and structure.superimpose user functions. The paragraph_multi_struct and paragraph_atom_id module strings have been created and are shared as two paragraphs for each of these user function descriptions. This standardises the pipe/model/molecule/atom_id descriptions. The user function wizard page sizes have been updated for these changes.
- Changed the design of the lib.structure.internal.coordinates.assemble_coord_array() function. The elements_flag argument has been renamed to seq_info_flag. If this is set, then in addition to the atomic elements, the molecule name, residue name, residue number, and atom name is now assembled and returned. This information is now the common information between the structures, hence the return values for the elements are a list of str rather than list of lists. All of the code in pipe_control.structure.main has been updated for the change.
- Fix for the structure.align user function if no data pipes are supplied. The pipes list was no longer being created as it was shifted to the assemble_coordinates() function, however it is required for the translation and rotation function calls.
- Converted the structure.web_of_motion user function to the new pipe/model/molecule/atom_id design. This allows the web of motion representation 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_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 the new web of motion PDB file. Therefore the entire backend has been rewritten. The Structure.test_web_of_motion_12, Structure.test_web_of_motion_13, and Structure.test_web_of_motion_all system tests have all been updated for the changed structure.web_of_motion user function arguments. In addition, the system tests Structure.test_web_of_motion_12_molecules, Structure.test_web_of_motion_13_molecules and Structure.test_web_of_motion_all_molecules have been created as a copy of the other tests but with the 3 structures loaded as different molecules.
- Fix for the IDs returned by lib.structure.internal.coordinates.assemble_coord_array(). The list of unique structure IDs was being incorrectly constructed if multiple molecules are present but the molecules argument was not supplied. It would be of a different size to the coordinate data structure.
- Fix for the Structure.test_displacement system test for the assemble_coord_array() function bugfix.
- Modified the Structure.test_align system test to show a failure of the structure.align user function. The alignment causes all atoms in the structural object to be translated and rotated, whereas it should only operate on the atoms of the atom_id argument.
- Modified the Structure.test_superimpose_fit_to_mean system test. This is also to demonstrate a bug, this time in the structure.superimpose user function, in which the algorithm causes a translation and rotation of all atoms rather than just those selected by the atom_id argument.
- Modified some system tests of the structure.align and structure.superimpose user functions. The displace_id argument has been introduced for both of these user functions for finer control over which atoms are translated and rotated by the algorithm. This allows, for example, to align structures based on a set of backbone heavy atoms while the protons and side chains are displaced by default. Or if a domain is aligned, then just that domain can be displaced.
- Added the displace_id argument to the structure.align and structure.superimpose user functions. This gives both of these user functions finer control over which atoms are translated and rotated by the algorithm. This allows, for example, to align structures based on a set of backbone heavy atoms while the protons and side chains are displaced by default. Or if a domain is aligned, then just that domain can be displaced.
- Fixes for the Structure.test_superimpose_fit_to_mean system test for the displace_id argument.
- Modified the Structure.test_align_molecules system test to catch a bug. This is the failure of the displace_id argument of the structure.align user function when the molecules argument is supplied - all atoms are being displaced instead of a subset.
- Fix for the displace_id and molecules arguments of the structure.align user function. The atom ID used for the translations and rotations is now properly constructed from the molecule names in the molecules list and the displace_id string.
- Changes for water in the PDB file created by the structure.write_pdb user function. The waters with the residue name 'HOH' are no longer output to HET records.
- Improvement for the structure.read_pdb user function. The helix and sheet secondary structure reading now takes the real_mol argument into account to avoid reading in too much information.
- Improvement for the merge argument of the structure.read_pdb user function. This argument is now overridden if the molecule to merge to does not exist. This allows the merge flag to be used together with read_mol and set_mol_name set to lists.
- Fix for the selective secondary structure reading of the structure.read_pdb user function. The molecule index needs to incremented by 1 to be the molecule number.
- Large improvement for the PDB molecule identification code. This affects the structure.read_pdb user function. Now the chain ID code, if present in the PDB file, is being used to determine which ATOM and HETATM records belong to which molecule. All of the records for each molecule are stored until the end, when they are all yielded. This allows for discontinuous chain IDs throughout the PDB file, something which occurs often with the HETATM records.
- Expanded the displace_id argument for the structure.align user function. This can now be a list of atom IDs, so that any atoms can be rotated together with the structure being aligned. This is useful if the molecules argument is supplied.
- Fix for the Noe.test_bug_21562_noe_replicate_fail system test. This is for the changed behaviour of the structure.read_pdb user function. The problem is that the PDB file read in this test has the chain ID set to X. This broken PDB causes molecule numbering problems.
- Expanded the description of the structure.rmsd user function.
- Changed the paragraph ordering in the documentation of a number of the structure user functions. This includes the structure.align, structure.displacement, and structure.find_pivot user functions.
- Fix for the prompt examples documentation for the structure.align user function.
- Improved the sizing layout of the structure.align user function GUI dialog.
- Improved the sizing layout of the structure.superimpose user function GUI dialog.
- Created the Structure.test_atomic_fluctuations system test. This will be used to implement the idea of the structure.atomic_fluctuations user function.
- Implemented the structure.atomic_fluctuations user function. This is loosely based on the structure.web_of_motion user function and is related to it. The user function will write to file a correlation matrix of interatomic distance fluctuations.
- Created 4 unit tests for the lib.io.swap_extension function. This is in preparation for implementing the function.
- Implemented the lib.io.swap_extension() function. This is confirmed to be fully functional by its four unit tests.
- Created the empty lib.plotting package. This follows from the thread at http://thread.gmane.org/gmane.science.nmr.relax.devel/7444. The package will be used for assembling all of the data plotting capabilities of relax. It will make support for different plotting software - Grace, OpenDX, matplotlib, gnuplot, etc - more coherent. This will be used to create a software independent API for plotting in relax. I.e. the plotting software is chosen by the user and then the data output by the user function passes into the lib.plotting API which is then passed into the software dependent backend in lib.plotting.
- Created the Structure.test_atomic_fluctuations_gnuplot system test. This checks the operation of the structure.atomic_fluctuations user function when the output format is set to 'gnuplot'. This will be used to implement this option. The current gnuplot script expected by this test is just a very basic starting script for now.
- Created the lib.plotting API function correlation_matrix(). This is the lib.plotting.api.correlation_matrix() function. It will be used for the visualisation of rank-2 correlation matrices. The current basic API design here uses a dictionary of backend functions (currently empty) for calling the backend.
- Implemented a very basic gnuplot backend for the correlation_matrix() plotting API function. This is in the new lib.plotting.gnuplot module. It creates an incredibly basic gnuplot script for visualising the correlation matrix, assuming a text file has already been created.
- Enabled the gnuplot format for the structure.atomic_fluctuations user function. This uses the plotting API correlation_matrix() function for visualisation. The change allows the Structure.test_atomic_fluctuations_gnuplot system test to pass.
- Shifted the matrix output of the structure.atomic_fluctuations user function into lib.plotting.text. The new lib.plotting.text module will be used by the relax library plotting API to output data into plain text format. The current correlation_matrix() function, which has been added to the API correlation_matrix() function dictionary, simply has the file writing code of the structure.atomic_fluctuations user function. This significantly simplifies the user function.
- More simplifications for the structure.atomic_fluctuations user function backend.
- Fix for the structure.atomic_fluctuations user function backend. The pipe_control.structure.main.atomic_fluctuations() function no longer opens the output file.
- The gnuplot correlation_matrix() plotting API function now creates a text file of the data. The lib.plotting.gnuplot.correlation_matrix() function now calls the lib.plotting.text.correlation_matrix() function prior to creating the gnuplot script.
- Significantly expanded the gnuplot script from via the correlation_matrix() plotting API function. This is for the structure.atomic_fluctuations user function. The output terminal is now set to EPS, the colour map changed from the default to a blue-red map, labels have been added, the plot is now square, and comments are now included throughout the script to help a user hand modify it after creation.
- Improvement in the comments from the gnuplot correlation_matrix() plotting API function.
- Updated the Structure.test_atomic_fluctuations_gnuplot system test. This is for the gnuplot correlation_matrix() plotting API changes which affect the structure.atomic_fluctuations user function.
- Docstring fixes for the Structure.test_atomic_fluctuations_gnuplot system test. This was pointing to the structure.rmsd user function instead of structure.atomic_fluctuations.
- Fixes and improvements for the gnuplot correlation_matrix() plotting API function. This is for the structure.atomic_fluctuations user function. The "pm3d map" plot type is incorrect for such data type, so instead of using 'splot', 'plot' is being used instead. The resultant EPS file is now much smaller. The colour map has also been changed to one of the inbuilt ones for higher contrast.
- Forced the gnuplot correlation_matrix plot to be square. This is for the correlation_matrix() plotting API function used by the new structure.atomic_fluctuations user function.
- Updated the Structure.test_atomic_fluctuations_gnuplot system test. This is for the changes of the gnuplot correlation_matrix() plotting API function used by the structure.atomic_fluctuations user function.
- Docstring fix for the Structure.test_atomic_fluctuations system test.
- Another docstring fix for the Structure.test_atomic_fluctuations system test.
- Created the Structure.test_atomic_fluctuations_angle system test. This will be used to implement the mapping of inter-atomic vector angular fluctuations between structures via a new 'measure' keyword argument for the structure.atomic_fluctuations user function.
- Implemented angular fluctuations for the structure.atomic_fluctuations user function. This adds the measure argument to the user function to allow either the default of 'distance' or the 'angle' setting to be chosen. The implementation is confirmed by the Structure.test_atomic_fluctuations_angle system test which now passes.
- Clean ups and speed ups of the structure.atomic_fluctuations user function. Duplicate calculations are now avoided, as the SD matrix is symmetric.
- Description improvements and GUI layout fixes for the structure.atomic_fluctuations user function.
- Added the 'parallax shift' measure to the structure.atomic_fluctuations user function. The parallax shift is defined as the length of the average vector minus the interatomic vector. It is similar to the angle measure however, importantly, it is independent of the distance between the two atoms.
- Updated the gnuplot scripts to be executable. These are the scripts created by the gnuplot specific correlation_matrix() plotting API function. The file is made executable and the script now starts with "#!/usr/bin/env gnuplot".
- Created the Structure.test_atomic_fluctuations_parallax system test. This is to demonstrate that the parallax shift fluctuations are not implemented correctly.
- Fix for the Structure.test_atomic_fluctuations_parallax system test. The distance shifts need to be numbers, not vectors.
- Proper implementation of the 'parallax shift' for the structure.atomic_fluctuations user function.
- Improved the structure.atomic_fluctuations user function documentation. The fluctuation categories are now better explained. And the 'parallax shift' option is now available in the GUI.
- Fix for the parallax shift description in the structure.atomic_fluctuations user function. The parallax shift is not quite orthogonal to the distance fluctuations.
- Implemented ordinary_least_squares function the repeated auto-analysis. Inspection of statistics books, shows that several authors does not recommend using regression through the origin (RTO). From Joseph G. Eisenhauer, Regression through the Origin: RTO residuals will usually have a nonzero mean, because forcing the regression line through the origin is generally inconsistent with the best fit; R square measures (for RTO) the proportion of the variability in the dependent variable "about the origin" explained by regression. This cannot be compared to R square for models which include an intercept. From "Experimental design and data analysis for biologists", G. P. Quinn, M. J. Keough: Minimum observed xi rarely extends to zero, and forcing our regression line through the origin not only involves extrapolating the regression line outside our data range but also assuming the relationship is linear outside this range (Cade & Terrell 1997, Neter et al. 1996); We recommend that it is better to have a model that fits the observed data well than one that goes through the origin but provides a worse fit to the observed data; residuals from the no-intercept model no longer sum to zero; usual partition of SSTotal into SSRegression and SSResidual does not work.
- Added save state for test of bug 23186. Bug #23186: Error calculation of individual parameter δω from Monte-Carlo, is based on first spin.
- Added the system test Relax_disp.test_bug_23186_cluster_error_calc_dw which shows the failure of Monte Carlo simulations error calculations. Bug #23186: Error calculation of individual parameter δω from Monte-Carlo, is based on first spin.
- Added additional test for the r2a parameter. Bug #23186: Error calculation of individual parameter δω from Monte-Carlo, is based on first spin.
- Attempt to implement the GUI test General.test_bug_23187_residue_delete_gui. This will NOT catch the error. Bug #23187: Deleting residue in GUI, and then open spin viewer crashes relax.
- Added test for spin independent error of kAB. Bug #23186: Error calculation of individual parameter δω from Monte-Carlo, is based on first spin.
- Fix for the showing of the spin viewer window in the GUI tests. The show_tree() method of the main GUI window class was not calling the custom self.spin_viewer.Show() method, as required to set up the observer objects required to keep the spin viewer window updated. The value of status.show_gui was blocking this. Instead the show argument of this Show() method is being set to status.show_gui to allow the method to always be executed.
- Updated the main relax copyright notices for 2015.
- The copyright notice in the GUI now uses the info box object. This is for the status bar at the bottom of the GUI window. This removes one place where copyright notices needs to be updated each year. This status text will then be updated whenever the info.py file has been updated.
- Updated the copyright notice for 2015 in the GUI splash screen graphic.
- Racing fixes for the General.test_bug_23187_residue_delete_gui GUI test. Some GUI interpreter flush() calls have been added to avoid racing in the GUI. The GUI tests are so quick that the asynchronous user function call will be processed at the same time as the spin viewer window is being created, causing fatal segmentation faults in the test suite.
- More robustness for the spin viewer GUI window prune_*() methods. When no spin data exists, the self.tree.GetItemPyData(key) call can return None. This is now being checked for and such None values are being skipped in the prune_mol(), prune_res() and prune_spin() methods. The problem was found in the Mf.test_bug_20479_gui_final_pipe system test when running the command: for i in {1..10}; do ./relax --gui-tests --time -d &>> gui_tests.log; done
- More robustness for the spin viewer GUI window update_*() methods. When no spin data exists, the self.tree.GetItemPyData(key) call can return None. This is now being checked for and such None values are being skipped in the update_mol(), update_res() and update_spin() methods. The problem was found in the Mf.test_bug_20479_gui_final_pipe system test when running the command: for i in {1..10}; do ./relax --gui-tests --time -d &>> gui_tests.log; done
- More robustness for the spin viewer GUI window prune_*() methods. The data returned from the self.tree.GetItemPyData(key) call can in rare racing cases not contain the 'id' key. This is now being checked for and are being skipped in the prune_mol(), prune_res() and prune_spin() methods. The problem was found in the Mf.test_bug_20479_gui_final_pipe system test when running the command: for i in {1..10}; do ./relax --gui-tests --time -d &>> gui_tests.log; done
- More robustness for the spin viewer GUI window update_*() methods. The data returned from the self.tree.GetItemPyData(key) call can in rare racing cases not contain the 'id' key. This is now being checked for and are being skipped in the update_mol(), update_res() and update_spin() methods. The problem was found in the Mf.test_bug_20479_gui_final_pipe system test when running the command: for i in {1..10}; do ./relax --gui-tests --time -d &>> gui_tests.log; done
- Created a development document for catching segfaults and other errors in the GUI tests. This is needed as not all wxPython errors can be caught in the Python unittest framework.
- Small whitespace formatting fix for the titles printed by the align_tensor.display user function.
- Improvements for the plots created by the pcs.corr_plot user function. The axes now have labels, and have the range and number of ticks set to reasonable values.
- Improvements for the pcs.corr_plot user function - the plot range is now determined by the data.
- Improvements for the rdc.corr_plot user function - the plot range is now determined by the data.
- Added save state for testing implementation of error analysis. Task #7882: Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
- Simplification of system test Relax_disp.test_task_7882_monte_carlo_std_residual, to just test the creation of Monte-Carlo data where errors are drawn from the reduced χ2 distribution. Task #7882: Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
- Extension of the monte_carlo.create_data user function to draw errors from the reduced χ2 Gauss distribution as found by best fit. Task #7882: Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
- Adding to backend of pipe_control.error_analysis(), to modify data point as error drawn from the reduced χ2 Gauss distribution. Task #7882: Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
- Adding empty API method to return errors from the reduced χ2 distribution. Task #7882: Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
- Added API function in relaxation dispersion to return error structure from the reduced χ2 distribution. Task #7882: Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
- Temporary test of making a confidence interval as described in fitting guide. This is system test Relax_disp.x_test_task_7882_kex_conf, which is not activated by default. Running the test, interestingely shows, there is a possibility for a lower global kex. But the value only differ from kex=1826 to kex=1813. Task #7882: Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
- Change to system test Relax_disp.x_test_task_7882_kex_conf(). This is just a temporary system test, to check for local minima. This is method in regression book of Graphpad: http://www.graphpad.com/faq/file/Prism4RegressionBook.pdf Page: 109-111. Task #7882: Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
- Raising an error, if the R2eff model is used, and drawing errors from the fit. Task #7882: Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
- To system test Relax_disp.test_task_7882_monte_carlo_std_residual(), adding test for raise of errors, if the R2eff model is selected. Task #7882: Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
- Added test of argument "distribution" in pipe_control.error_analysis.monte_carlo_create_data(). This is to make sure that a wrong argument is not passed into the function. Task #7882: Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
- Extended the monte_carlo.create_data user function, to allow for the definition of the STD to use in Gauss distribution. This is for creation of Monte-Carlo simulations, where one has perhaps gained information about the expected errors of the data points, which is not measured. Task #7882: Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
- In backend pipe_control.error_analysis.monte_carlo_create_data() added the argument 'fixed_error' to allow for fixed input of error to the Gauss distribution. Inserted a range of checks, to make sure function behaves as expected. Task #7882: Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
- Added to pipe_control.error_analysis.monte_carlo_create_data() the creation of data points for a fixed distribution. Task #7882: Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
- To system test Relax_disp.test_task_7882_monte_carlo_std_residual(), added tests for creation of Monte-Carlo data by different methods. Task #7882: Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
- In pipe_control.error_analysis.monte_carlo_create_data(), if data is of list type or ndarray, then modify the data point according to the fixed error if the distribution is set to 'fixed'. Task #7882: Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
- Expanded the STD acronym, to the meaning of standard deviation. This is in the monte_carlo.create_data user function. Task #7882: Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
- Added a RelaxWarning printout to the dep_check module if wxPython 2.8 or less is encountered. This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/7502. The warning text is simply written to STDERR as relax starts.
- Updated the wxPython version in the relax manual to be 2.9 or higher. This is in the section http://www.nmr-relax.com/manual/Dependencies.html.
- The GUI tests are now skipped for wxPython version <= 2.8 due to bugs causing fatal segfaults. This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/7502. These wxPython versions are simply too buggy.
- Fix for the Relax_disp.test_bug_23186_cluster_error_calc_dw system test on 32-bit and Python <= 2.5 systems.
- Better error handling in the structure.align user function. If no common atoms can be found between the structures, a RelaxError is now raised for better user feedback.
- Created an empty lib.sequence_alignment relax library package. This may be used in the future for implementing more advanced structural alignments (the current method is simply to skip missing atoms, sequence numbering changes are not handled).
- Added the sequence_alignment package to the lib package __all__ list.
- Added the unit testing infrastructure for the new lib.sequence_alignment package.
- Implementation of the Needleman-Wunsch sequence alignment algorithm. This is located in the lib.sequence_alignment.needleman_wunsch module. This is implemented as described in the Wikipedia article https://en.wikipedia.org/wiki/Needleman%E2%80%93Wunsch_algorithm.
- Created a unit test for checking the Needleman-Wunsch sequence alignment algorithm. This uses the DNA data from the example in the Wikipedia article at https://en.wikipedia.org/wiki/Needleman%E2%80%93Wunsch_algorithm. The test shows that the implementation of the lib.sequence_alignment.needleman_wunsch.needleman_wunsch_align() function is correct.
- Created the lib.sequence_alignment.substitution_matrices module. This is for storing substitution matrices for use in sequence alignment. The module currently only includes the BLOSSUM62 matrix.
- Corrected the spelling of the BLOSUM62 matrix in lib.sequence_alignment.substitution_matrices.
- Fix for the lib.sequence_alignment.substitution_matrices.BLOSUM62_SEQ string.
- Modification of the Needleman-Wunsch sequence alignment algorithm implementation. This is in the lib.sequence_alignment.needleman_wunsch functions. Scoring matrices are now supported, as well as a user supplied non-integer gap penalty. The algorithm for walking through the traceback matrix has been fixed for a bug under certain conditions.
- Created the lib.sequence_alignment.align_protein module for the sequence alignment of proteins. This general module currently implements the align_pairwise() function for the pairwise alignment of protein sequences. It provides the infrastructure for specifying gap starting and extension penalties, choosing the alignment algorithm (currently only the Needleman-Wunsch sequence alignment algorithm as 'NW70'), and choosing the substitution matrix (currently only BLOSUM62). The function provides lots of printouts for user feedback.
- Created a unit test for lib.sequence_alignment.align_protein.align_pairwise(). This is to test the pairwise alignment of two protein sequences using the Needleman-Wunsch sequence alignment algorithm, BLOSUM62 substitution matrix, and gap penalty of 10.0.
- Added more printouts to the Test_align_protein.test_align_pairwise unit test. This is the test of the module _lib._sequence_alignment.test_align_protein.
- Fix for the Needleman-Wunsch sequence alignment algorithm when the substitution matrix is absent.
- The lib.sequence_alignment.align_protein.align_pairwise() function now returns data. This includes both alignment strings as well as the gap matrix.
- Annotated the BLOSUM62 substitution matrix with the amino acid codes for easy reading.
- Updated the gap penalties in the Test_align_protein.test_align_pairwise unit test. This is from the unit test module _lib._sequence_alignment.test_align_protein.
- Modified the Needleman-Wunsch sequence alignment algorithm. The previous attempt was buggy. The algorithm has been modified to match the logic of the GPL licenced EMBOSS software (http://emboss.sourceforge.net/) to allow for gap opening and extension penalties, as well as end penalties. No code was copied, rather the algorithm for creating the scoring and penalty matrices, as well as the traceback matrix.
- Added a DNA similarity matrix to lib.sequence_alignment.substitution_matrices.
- Added sanity checks to the Needleman-Wunsch sequence alignment algorithm. The residues of both sequences are now checked in needleman_wunsch_align() to make sure that they are present in the substitution matrix.
- Added the NUC 4.4 nucleotide substitution matrix from ftp://ftp.ncbi.nih.gov/blast/matrices/. Uracil was added to the table as a copy to T.
- Added the header from ftp://ftp.ncbi.nih.gov/blast/matrices/BLOSUM62. This is to document the BLOSUM62 substitution matrix.
- Added the PAM 250 amino acid substitution matrix. This was taken from ftp://ftp.ncbi.nih.gov/blast/matrices/PAM250 and added to lib.sequence_alignment.substitution_matrices.PAM250.
- Modified the Test_needleman_wunsch.test_needleman_wunsch_align_DNA unit test to pass. This is from the unit test module _lib._sequence_alignment.test_needleman_wunsch. The DNA sequences were simplified so that the behaviour can be better predicted.
- Created the Test_needleman_wunsch.test_needleman_wunsch_align_NUC_4_4 unit test. This is in the unit test module _lib._sequence_alignment.test_needleman_wunsch. This tests the Needleman-Wunsch sequence alignment for two DNA sequences using the NUC 4.4 matrix.
- Created a unit test for demonstrating a failure in the Needleman-Wunsch sequence alignment algorithm. The test is Test_needleman_wunsch.test_needleman_wunsch_align_NUC_4_4b from the _lib._sequence_alignment.test_needleman_wunsch module. The problem is that the start of the alignment is truncated if any gaps are present.
- Fix for the Needleman-Wunsch sequence alignment algorithm. The start of the sequences are no longer truncated when starting gaps are encountered.
- The needleman_wunsch_align() function now accepts the end gap penalty arguments. These are passed onto the needleman_wunsch_matrix() function.
- Added the end gap penalty arguments to lib.sequence_alignment.align_protein.align_pairwise().
- Created the Structure.test_align_CaM_BLOSUM62 system test. This will be used for expanding the functionality of the structure.align user function to perform true sequence alignment via the new lib.sequence_alignment package. The test aligns 3 calmodulin (CaM) structures from different organisms, hence the sequence numbering is different and the current structure.align user function design fails. The structure.align user function has been expanded in the test to include a number of arguments for advanced sequence alignment.
- Added support for the PAM250 substitution matrix to the protein pairwise sequence alignment function. This is the function lib.sequence_alignment.align_protein.align_pairwise().
- Bug fix for the Needleman-Wunsch sequence alignment algorithm. Part of the scoring system was functioning incorrectly when the gap penalty scores were non-integer, as some scores were being stored in an integer array. Now the array is a float array.
- Created the Test_align_protein.test_align_pairwise_PAM250 unit test. This is in the unit test module _lib._sequence_alignment.test_align_protein. It checks the protein alignment function lib.sequence_alignment.align_protein.align_pairwise() together with the PAM250 substitution matrix.
- Small docstring expansion for lib.sequence_alignment.align_protein.align_pairwise().
- Added the sequence alignment arguments to the structure.align user function front end. This includes the 'matrix', 'gap_open_penalty', 'gap_extend_penalty', 'end_gap_open_penalty', and 'end_gap_extend_penalty' arguments. The 'algorithm' argument has not been added to save room, as there is only one choice of 'NW70'. A paragraph has been added to the user function description to explain the sequence alignment part of the user function.
- Added the sequence alignment arguments to the back end of the structure.align user function. This is to allow the code in trunk to be functional before the sequence alignment before superimposition has been implemented.
- Removed the 'algorithm' argument from the Structure.test_align_CaM_BLOSUM62 system test script. This is for the structure.align user function. The argument has not been implemented to save room in the GUI, and as 'NW70' is currently the only choice.
- The sequence alignment arguments are now passed all the way to the internal structural object backend. These are the arguments of the structure.align user function.
- Created the lib.sequence.aa_codes_three_to_one() function. The lib.sequence module now contains the AA_CODES dictionary which is a translation table for the 3 letter amino acid codes to the one letter codes. The new aa_codes_three_to_one() function performs the conversion.
- Implemented the internal structural object MolContainer.loop_residues() method. This generator method is used to quickly loop over all residues of the molecule.
- Implemented the internal structural object one_letter_codes() method. This will create a string of one letter residue codes for the given molecule. Only proteins are currently supported. This method uses the new lib.sequence.aa_codes_three_to_one() relax library function.
- Sequence alignment is now performed in lib.structure.internal.coordinates.assemble_coord_array(). This is a pairwise alignment to the first molecule of the list. The alignments are not yet used for anything. The assemble_coord_array() function is used by the structure.align user function, as well as a few other structure user functions.
- Fix for the lib.sequence.aa_codes_three_to_one() function. Non-standard residues are now converted to the '*' code. The value of 'X' prevents any type of alignment of a stretch of X residues as X to X in both the BLOSUM62 and PAM250 substitution matrices are set to -1.
- Modified the gap penalty arguments for the structure.align user function. These now must always be supplied, as None is not handled by the backend lib.sequence_alignment.needleman_wunsch module. The previous defaults of None are now set to 0.0.
- Updated the artificial diffusion tensor test suite data. This is the data in test_suite/shared_data/diffusion_tensor. The residues in the PDB files are now proper amino acids, so the HETATM records are now ATOM records, and the CONECT records have been eliminated.
- Another update for the artificial diffusion tensor test suite data. The number of increments on the sphere has been increased from 5 to 6, to make the vector distribution truly uniform. All PDB files and relaxation data has been updated.
- Changed the synthetic PDB for the artificial diffusion tensor test suite data. The nitrogen and proton positions are now shifted 10 Angstrom along the distribution vectors. This is to avoid having all nitrogens positioned at the origin which causes the internal structural object algorithm for determining which atoms are connected to fail.
- Reintroduced the CONECT PDB records into the artificial diffusion tensor test suite data. The uniform vector distributions have overlapping vectors. This causes the internal structural object atom connection determining algorithm to fail, as this is distance-based rather than using the PDB amino acid definitions for now.
- Updates for the Structure.test_create_diff_tensor_pdb_sphere system test. The test now uses the sphere synthetic relaxation data rather than the ellipsoid data, and the PDB checking has been updated for the new data.
- Updates for the Structure.test_create_diff_tensor_pdb_prolate system test. The test now uses the spheroid synthetic relaxation data rather than the ellipsoid data, and the PDB checking has been updated for the new data.
- Updates for the Structure.test_create_diff_tensor_pdb_oblate system test. The test now uses the spheroid synthetic relaxation data rather than the ellipsoid data, and the PDB checking has been updated for the new data. The oblate tensor is now forced in the system test script.
- Updates for the Structure.test_create_diff_tensor_pdb_ellipsoid system test. The PDB checking has been updated for the new data.
- Updated the Structure.test_delete_atom system test for the changed PDB structures. The test_suite/shared_data/diffusion_tensor/spheroid/uniform.pdb file now has more residues, and the atomic positions are different.
- Updated the Structure.test_align system testt for the changed PDB structures. The test_suite/shared_data/diffusion_tensor/spheroid/uniform.pdb file now has more residues, and the atomic positions are different.
- Updated the Structure.test_align_molecules system test for the changed PDB structures. The test_suite/shared_data/diffusion_tensor/spheroid/uniform.pdb file now has more residues, and the atomic positions are different.
- Python 3 fix for the lib.sequence module. The string.upper() function no longer exists.
- Python 3 fix for the lib.sequence_alignment.align_protein module. The string.upper() function no longer exists.
- Modified the generate_data.py diffusion tensor to relaxation data creation script. The NH vectors are no longer truncated to match the PDB.
- Python 3 fix for the generate_data.py diffusion tensor to relaxation data creation script. The string.upper() function no longer exists.
- Reintroduced the simulated PDB truncation into the artificial diffusion tensor test suite data. This is different to the previous implementation which was deleted recently. It now simulates the truncation of both the N and H positions in the PDB and reconstructs the expected vector.
- Updates for some of the Structure.test_create_diff_tensor_pdb_* system tests. This includes Structure.test_create_diff_tensor_pdb_ellipsoid, Structure.test_create_diff_tensor_pdb_oblate, and Structure.test_create_diff_tensor_pdb_prolate. The new simulated PDB truncation in the test data causes the PDB files created in these tests to be slightly different.
- The pairwise sequence alignment is now active in the structure.align user function. This is implemented in the lib.structure.internal.coordinates.assemble_coord_array() function for assembling atomic coordinates. It will also automatically be used by many of the structure user functions which operate on multiple structures. The atomic coordinate assembly logic has been completely changed. Instead of grouping atomic information by the molecule, it is now grouped per residue. This allows the residue based sequence alignments to find matching coordinate information. The assemble_coord_array() function will also handle the algorithm argument set to None and assume that the residue sequences are identical between the structures, but this should be avoided. A new function, common_residues() has been created as a work-around for not having a multiple sequence alignment implementation. It will take the pairwise sequence alignment information and construct a special data structure specifying which residues are present in all structures. The logic for skipping missing atoms remains in place, but it now operates on the residue rather than molecule level and simply uses the atom name rather than atom ID to identify common atoms.
- Changed the gap opening penalty to 10 in the N-state model structure_align.py system test script.
- Docstring update for the pipe_control.structure.main.assemble_coordinates() function. This is for the algorithm argument which can now be set to None.
- Fix for the sequence alignment for assembling atomic coordinates. This caused the Structure.test_superimpose_fit_to_mean system test to fail. The problem was in the new logic of the lib.structure.internal.coordinates.assemble_coord_array() function. The coordinate assembly now terminates when either the end of the first molecule or the current molecule is reached.
- Bug fixes for the new lib.structure.internal.coordinates.common_residues() function. This function for determining the common residues between multiple sets of pairwise alignments was failing in quite a number of cases. The logic has been updated to handle these.
- Another fix for the lib.structure.internal.coordinates.common_residues() function. The wrong index was being used to skip residues in the second sequence.
- Created the Structure.test_pdb_combined_secondary_structure system test. This is used to demonstrate a problem in the handling of secondary structure metadata when combining multiple PDB structures. It appears as if the chain ID is preserved as the original ID and is not updated to match the new IDs in the output PDB.
- Updated the Structure.test_metadata_xml system test for the changed PDB metadata handling. The helix and sheets IDs are now molecule indices.
- Disabled the General.test_bug_23187_residue_delete_gui GUI test. This is essential as a wxPython bug in Mac OS X systems causes this test to trigger a 'Bus Error' every time the GUI tests are run, killing relax.
Bugfixes
- Bug fix for the lib.arg_check.is_int_list() function for checking a list of lists. This is used to check user function arguments, but was causing a RelaxError to be raised for all integer list of lists user function arguments when a valid value is supplied. The function has been updated to match the is_str_list() function which does not suffer from this bug.
- Fix in dispersion API, to set error value for clustered values. Bug #23186: Error calculation of individual parameter δω from Monte-Carlo, is based on first spin.
- Fix for bug #23187, the problem whereby opening the spin viewer window, deleting a residue, and then reopening the spin viewer crashes relax. This change completes the spin viewer update_*() functions. The prune_list variable was initialised but not used. Now it is used to store the keys of the items to delete, and then the items are deleted at the end in a new loop so that the loop over the dictionary keys is not corrupted.
- Fix for the rdc.corr_plot user function. The Y-axis is now set to the measured RDC, as the RDC errors are plotted as dY errors. This matches the behaviour of the pcs.corr_plot user function.
- Bug fix for the printouts from the relax_data.read user function. This problem was introduced in the last relax release. The problem is that the spin ID in the loaded relaxation data printout is the same for all data, being the spin ID of the first spin. This has no effect on how relax runs, it is only incorrect feedback.
- Bug fix for the PDB secondary sheet handling when combining multiple PDB structures. The helix and sheet metadata now converts the original chain IDs into molecule indices, shifted to new values based on the currently loaded data, when the structure.read_pdb user function is executed. When the structure.write_pdb user function is executed, the molecule indices are converted into new chain IDs. This allows the chain IDs in the HELIX and SHEET records to match those of the ATOM and HETATOM records.
- Bug fix for the structure.read_pdb user function parsing of CONECT records. CONECT records pointing to ATOM records were not being read by the user function. As ATOM records should not require CONECT records by their definition, this is only a minor problem affecting synthetic edge cases.
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.