* Addition of the displace_id argument to the [http://www.nmr-relax.com/manual/structure_align.html structure.align] and [http://www.nmr-relax.com/manual/structure_superimpose.html 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 [http://www.nmr-relax.com/manual/structure_read_pdb.html 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 [http://www.nmr-relax.com/api/3.3/lib.plotting-module.html lib.plotting package ] for assembling all of the data plotting capabilities of relax into a unified software independent API.
* Implementation of the new [http://www.nmr-relax.com/manual/structure_atomic_fluctuations.html 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.
<section begin=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 [http://www.nmr-relax.com/api/3.3/pipe_control.spectrum-module.html pipe_control/spectrum.py].* Added the function [http://www.nmr-relax.com/api/3.3/pipe_control.spectrum-module.html#error_analysis_per_field pipe_control.spectrum.error_analysis_per_field()], as an automatic way of submitting subset IDs per field for error analysis.* For the [http://www.nmr-relax.com/api/3.3/pipe_control.spectrum-module.html#error_analysis_per_field pipe_control.spectrum.error_analysis_per_field()], added additional printout of subset IDs used for error analysis.* In the [http://www.nmr-relax.com/api/3.3/auto_analyses.relax_disp-module.html auto_analysis.relax_disp module], used the new [http://www.nmr-relax.com/manual/spectrum_error_analysis_per_field.html spectrum.error_analysis_per_field user function] to calculate the peak intensity errors.* Reinserted the [http://www.nmr-relax.com/api/3.3/auto_analyses.relax_disp.Relax_disp-class.html#error_analysis 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 [http://www.nmr-relax.com/manual/spectrum_error_analysis_per_field.html spectrum.error_analysis_per_field user function]. The implementation can be tested with the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.relax_disp.Relax_disp-class.html#test_estimate_r2eff_err_auto Relax_disp.test_estimate_r2eff_err_auto system test].* In [http://www.nmr-relax.com/api/3.3/pipe_control.spectrum-module.html#error_analysis_per_field 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.spectrum.Spectrum-class.html#test_signal_noise_ratio 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 [http://www.nmr-relax.com/api/3.3/pipe_control.spectrum-module.html#signal_noise_ratio pipe_control.spectrum.signal_noise_ratio() backend function], for calculation of the signal to noise ratio per spin.* Added [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.spectrum.Spectrum-class.html#test_grace_int 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.spectrum.Spectrum-class.html#test_grace_sn_ratio 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 [http://www.nmr-relax.com/api/3.3/specific_analyses.parameter_object-module.html parameter_object].
* For the specific analysis of "noe", "relax_disp", and "relax_fit", initialised the sn_ratio parameter structure.
* Added float around values in [http://www.nmr-relax.com/api/3.3/pipe_control.spectrum-module.html#signal_noise_ratio signal_noise_ratio() function].
* Made the [http://www.nmr-relax.com/manual/spectrum_sn_ratio.html spectrum.sn_ratio user function] smaller.
* Added two new system tests [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.spectrum.Spectrum-class.html#test_deselect_sn_ratio_all Spectrum.test_deselect_sn_ratio_all ] and [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.spectrum.Spectrum-class.html#test_deselect_sn_ratio_anySpectrum.test_deselect_sn_ratio_any]. These test the [http://www.nmr-relax.com/manual/deselect_sn_ratio.html deselect.sn_ratio user function], to deselect spins with a signal to noise ratio lower than the specified ratio.* Added function in [http://www.nmr-relax.com/api/3.3/pipe_control.spectrum-module.html#sn_ratio_deselection 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 [http://www.nmr-relax.com/manual/deselect_sn_ratio.html deselect.sn_ratio user function] to deselect spins according to their signal to noise ratio.
* Added new backend function in [http://www.nmr-relax.com/api/3.3/pipe_control.spectrum-module.html#sn_ratio_selection 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.spectrum.Spectrum-class.html#test_select_sn_ratio_all Spectrum.test_select_sn_ratio_all ] and [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.spectrum.Spectrum-class.html#test_select_sn_ratio_any Spectrum.test_select_sn_ratio_any]. These test the [http://www.nmr-relax.com/manual/select_sn_ratio.html select.sn_ratio user function].
* Added the new [http://www.nmr-relax.com/manual/select_sn_ratio.html 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 [http://www.nmr-relax.com/manual/deselect_sn_ratio.html 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 [http://www.nmr-relax.com/api/3.3/pipe_control.spectrum-module.html#sn_ratio_selection spectrum sn_ratio_selection() ] and [http://www.nmr-relax.com/api/3.3/pipe_control.spectrum-module.html#sn_ratio_deselection sn_ratio_deselection()]. The standard values have been changed.
* Fix for the window size in [http://www.nmr-relax.com/manual/dx_map.html 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.
* Important fix for the [http://www.nmr-relax.com/manual/spectrum_error_analysis_per_field.html 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 [http://www.nmr-relax.com/api/3.3/data_store.data_classes.Element-class.html#to_xml data_store.data_classes.Element.to_xml()]. The class blacklist variable was not being taken into account.
* Added the norm_type argument to the [http://www.nmr-relax.com/manual/grace_write.html 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 [http://www.nmr-relax.com/manual/grace_write.html grace.write user function].
* The new [http://www.nmr-relax.com/manual/grace_write.html grace.write user function] norm_type argument has been activated. The argument is now passed from [http://www.nmr-relax.com/api/3.3/pipe_control.grace-module.html#write pipe_control.grace.write] into the [http://www.nmr-relax.com/api/3.3/lib.software.grace-module.html#write_xy_data write_xy_data() function ] of the [http://www.nmr-relax.com/api/3.3/lib.software.grace-module.html lib.software.grace module], and is used to select which point to use for the normalisation.* The [http://www.nmr-relax.com/api/3.3/auto_analyses.relax_fit-module.html relaxation exponential curve-fitting auto-analysis ] now sets the normalisation type. This is for the new [http://www.nmr-relax.com/manual/grace_write.html 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 R<sub>1</sub> experiment types.* Change for norm_type variable in the [http://www.nmr-relax.com/api/3.3/auto_analyses.relax_fit-module.html 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 [http://www.nmr-relax.com/api/3.3/data_store.exp_info.ExpInfo-class.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_align_molecules Structure.test_align_molecules system test]. This will be used to extend the functionality of the [http://www.nmr-relax.com/manual/structure_align.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_align_molecules Structure.test_align_molecules system test]. This now simultaneously checks both the pipes and molecules arguments to the [http://www.nmr-relax.com/manual/structure_align.html structure.align user function].* More changes for the new [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_align_molecules Structure.test_align_molecules system testtes]t.* Some more fixes for the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_align_molecules Structure.test_align_molecules system test].* Change to the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_align Structure.test_align system test]. The molecules argument for the [http://www.nmr-relax.com/manual/structure_align.html 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 [http://www.nmr-relax.com/manual/structure.align .html structure.align] functionality.
* Implemented the new molecules argument for the [http://www.nmr-relax.com/manual/structure_align.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_rmsd_molecules Structure.test_rmsd_molecules system test]. This will be used to implement a new molecules argument for the [http://www.nmr-relax.com/manual/structure_rmsd.html 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 [http://www.nmr-relax.com/manual/structure_rmsd.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_displacement_molecules Structure.test_displacement_molecules system test]. This will be used to implement the new molecules argument for the [http://www.nmr-relax.com/manual/structure_displacement.html structure.displacement user function].
* Implemented the molecules argument for the [http://www.nmr-relax.com/manual/structure_displacement.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_find_pivot Structure.test_find_pivot system test]. This is to check the [http://www.nmr-relax.com/manual/structure_find_pivot.html structure.find_pivot user function] as this algorithm is currently not being checked in the test suite.* Created the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_find_pivot_molecules Structure.test_find_pivot_molecules system test]. This will be used to implement support for a molecules argument in the [http://www.nmr-relax.com/manual/structure_find_pivot.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_find_pivot_molecules Structure].test_find_pivot_molecules system test.
* Implemented the molecules argument for the [http://www.nmr-relax.com/manual/structure_find_pivot.html 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 [http://www.nmr-relax.com/manual/structure_align.html structure.align user function] into its own function. The new function [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_coordinates assemble_coordinates() ] of the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html 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 [http://www.nmr-relax.com/manual/structure_align.html structure.align user function]. The standardised order will now be pipes, models, molecules, atom_id, etc.
* Converted the [http://www.nmr-relax.com/manual/structure_find_pivot.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_find_pivot_molecules 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 [[http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_coordinates pipe_control.structure.main.assemble_coordinates() function]. The Structure.test_find_pivot and [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_find_pivot_molecules 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 [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_coordinates pipe_control.structure.main.assemble_coordinates() function ] has been shifted into the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html#assemble_coord_array assemble_coord_array() function ] of the new [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html 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 [http://www.nmr-relax.com/manual/structure_align.html structure.align] and [http://www.nmr-relax.com/manual/structure_find_pivot.html 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 [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html#assemble_coord_array 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 [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html#assemble_coord_array 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 [http://www.nmr-relax.com/manual/structure_displacement.html structure.displacement user function].
* Converted the [http://www.nmr-relax.com/manual/structure_displacement.html 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 [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_coordinates pipe_control.structure.main.assemble_coordinates() ] function. The [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_displacement Structure.test_displacement system test ] has been updated for the user function argument changes.* Another refinement for the structure ID strings returned by the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html#assemble_coord_array assemble_coord_array() function].* Updated the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_displacement_molecules Structure.test_displacement_molecules system test]. This is for the changes to the [http://www.nmr-relax.com/manual/structure_displacement.html structure.displacement user function].
* Docstring spelling fixes for the steady-state NOE and relaxation curve-fitting auto-analyses.
* Converted the [http://www.nmr-relax.com/manual/structure_rmsd.html 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 [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_coordinates pipe_control.structure.main.assemble_coordinates() function]. The [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_rmsd_molecules Structure.test_rmsd_molecules system test ] has been updated for the user function argument changes.* Created the [http://www.nmr-relax.com/api/3.3/lib.structure.internal structural .object model_list.Internal-class.html#model_list 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 [http://www.nmr-relax.com/manual/structure_superimpose.html 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 [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_coordinates 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[http://www. The return values for libnmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html#assemble_coord_array assemble_coord_array() were incorrectly documented.* Modified the Structure.test_bug_22070_structure_superimpose_after_deletion system testfunction]. This now calls The return values for lib.structure.internal.coordinates.assemble_coord_array() were incorrectly documented.* Modified the [http://www.nmr-relax.com/manualapi/structure_align3.3/test_suite.system_tests.structure.Structure-class.html structure#test_bug_22070_structure_superimpose_after_deletion Structure.align user functiontest_bug_22070_structure_superimpose_after_deletion system test] after calling . This now calls the [http://www.nmr-relax.com/manual/structure_superimposestructure_align.html structure.align user function] after calling the [http://www.nmr-relax.com/manual/structure_superimpose.html structure.superimpose user function] to better test a condition that can trigger bugs.* Fixes for the [http://www.nmr-relax.com/manual/structure_superimpose.html structure.superimpose] and [http://www.nmr-relax.com/manual/structure_align.html structure.align] user functions. The fit_to_mean() and fit_to_first() functions of [http://www.nmr-relax.com/api/3.3/lib.structure.superimpose where being incorrectly called, in that they expect a list of elements -module.html#fit_to_mean fit_to_mean()] and not lists of lists.* Code refactorisation for the [[http://www.nmr-relax.com/manualapi/3.3/structure_alignlib.html structure.align user function] backendsuperimpose-module. 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_controlhtml#fit_to_first fit_to_first()] functions of [http://www.nmr-relax.com/api/3.structure.main module. This function assembles the data from the data store and then calls the new loop_coord_structures() generator function of the 3/lib.structure.internal.coordinates superimpose-module which does all of the work.* Some docstring expansions for the pipe_controlhtml lib.structure.main module functions.superimpose] where being incorrectly called, in that they expect a list of elements and not lists of lists.* Refactored Code refactorisation for the descriptions of a number of structure user functions. This includes the [[http://www.nmr-relax.com/manual/structure_align.html structure.alignuser function]backend. The looping over data pipes, [http://www.nmr-relax.com/manual/structure_displacement.html structure.displacement]model numbers, and molecule names, [http://www.nmr-relax.com/manual/structure_find_pivot.html structure.find_pivot]skipping those that don't match the function arguments, has been shifted into the new [http://www.nmr-relax.com/manualapi/3.3/structure_rmsdpipe_control.html structure.rmsdmain-module.html#structure_loop structure_loop() generator function] and of the [http://www.nmr-relax.com/manualapi/structure_superimpose3.3/pipe_control.structure.main-module.html pipe_control.html structure.superimposemain module] user functions. The paragraph_multi_struct This function assembles the data from the data store and paragraph_atom_id module strings have been created and are shared as two paragraphs for each of these user function descriptions. This standardises then calls the pipenew [http://www.nmr-relax.com/modelapi/molecule3.3/atom_id descriptions. The user function wizard page sizes have been updated for these changes.* Changed the design of the liblib.structure.internal.coordinates-module.assemble_coord_arrayhtml#loop_coord_structures loop_coord_structures() generator function] of the [http://www.nmr-relax. 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 returnedcom/api/3. This information is now 3/lib.structure.internal.coordinates-module.html lib.structure.internal.coordinates module] which does all of the common information between the structures, hence the return values work.* Some docstring expansions for the elements are a list of str rather than list of lists[http://www.nmr-relax.com/api/3. All of the code in 3/pipe_control.structure.main has been updated for the change-module.html pipe_control.structure.main module] functions.* Fix for Refactored the descriptions of a number of structure user functions. This includes the [http://www.nmr-relax.com/manual/structure_align.html structure.align user function] if no data pipes are supplied, [http://www.nmr-relax. The pipes list was no longer being created as it was shifted to the assemble_coordinates() functioncom/manual/structure_displacement.html structure.displacement], however it is required for the translation and rotation function calls.* Converted the [http:[http://www.nmr-relax.com/manual/structure_web_of_motionstructure_find_pivot.html structure.web_of_motion user functionfind_pivot] to the new pipe, [http://modelwww.nmr-relax.com/moleculemanual/atom_id designstructure_rmsd.html structure. This allows the web of motion representation to work on atomic coordinates from different data pipes, different structural models, and different moleculesrmsd] and [http://www. The user function backend uses the new pipe_controlnmr-relax.com/manual/structure_superimpose.html structure.mainsuperimpose] user functions.assemble_coordinates() function to assemble the common atom coordinates, molecule names, residue names, residue numbers, atom names and elements The [http://www. All this information is then used to construct the new web of motion PDB filenmr-relax. Therefore the entire backend has been rewrittencom/api/3. The Structure3/user_functions.test_web_of_motion_12, Structurestructure-module.test_web_of_motion_13, html#paragraph_multi_struct paragraph_multi_struct] and Structure.test_web_of_motion_all system tests have all been updated for the changed [http://www.nmr-relax.com/manualapi/3.3/structure_web_of_motionuser_functions.html structure-module.web_of_motion user functionhtml#paragraph_atom_id paragraph_atom_id] 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 module strings have been created and are shared as a copy two paragraphs for each of the other tests but with the 3 structures loaded as different moleculesthese user function descriptions.* Fix for This standardises the IDs returned by lib.structure.internal.coordinates.assemble_coord_array()pipe/model/molecule/atom_id descriptions. The list of unique structure IDs was being incorrectly constructed if multiple molecules are present but user function wizard page sizes have been updated for these changes.* Changed the molecules argument was not supplied. It would be design of a different size to the coordinate data structurethe [http://www.nmr-relax.* Fix for the Structurecom/api/3.3/lib.structure.internal.coordinates-module.html#assemble_coord_array lib.structure.internal.coordinates.test_displacement system test for the assemble_coord_array() function bugfix].* Modified the Structure The elements_flag argument has been renamed to seq_info_flag.test_align system test If this is set, then in addition to show a failure of the [http://www.nmr-relax.com/manual/structure_align.html structure.align user function]atomic elements, the molecule name, residue name, residue number, and atom name is now assembled and returned. The alignment causes all atoms in This information is now the common information between the structural object to be translated and rotatedstructures, whereas it should only operate on hence the atoms of return values for the atom_id argumentelements are a list of str rather than list of lists.* Modified All of the Structurecode in [http://www.test_superimpose_fit_to_mean system nmr-relax.com/api/3.3/pipe_control.structure.main-module.html pipe_control.structure.main] has been updated for the change.* Fix for the [http://www.nmr-relax.com/manual/structure_align.html structure.align user function] if no data pipes are supplied. The pipes list was no longer being created as it was shifted to the [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_coordinates assemble_coordinates() function], however it is required for the translation and rotation function calls.* Converted the [http://www.nmr-relax.com/manual/structure_web_of_motion.html 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 [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_coordinates 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_web_of_motion_12 Structure.test_web_of_motion_12], [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_web_of_motion_13 Structure.test_web_of_motion_13], and [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_web_of_motion_all Structure.test_web_of_motion_all] system tests have all been updated for the changed [http://www.nmr-relax.com/manual/structure_web_of_motion.html structure.web_of_motion user function] arguments. In addition, the system tests [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_web_of_motion_12_molecules Structure.test_web_of_motion_12_molecules], [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_web_of_motion_13_molecules Structure.test_web_of_motion_13_molecules] and [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_web_of_motion_all_molecules 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 [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html#assemble_coord_array 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_displacement Structure.test_displacement system test] for the [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html#assemble_coord_array assemble_coord_array() function] bugfix.* Modified the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_align Structure.test_align system test] to show a failure of the [http://www.nmr-relax.com/manual/structure_align.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_superimpose_fit_to_mean Structure.test_superimpose_fit_to_mean system test]. This is also to demonstrate a bug, this time in the [http://www.nmr-relax.com/manual/structure_superimpose.html 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 [http://www.nmr-relax.com/manual/structure_align.html structure.align] and [http://www.nmr-relax.com/manual/structure_superimpose.html 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 [http://www.nmr-relax.com/manual/structure_align.html structure.align] and [http://www.nmr-relax.com/manual/structure_superimpose.html 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 [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_superimpose_fit_to_mean Structure.test_superimpose_fit_to_mean system test ] for the displace_id argument.* Modified the [http://www.nmr-relax.com/api/3.3/test_suite.system_tests.structure.Structure-class.html#test_align_molecules Structure.test_align_molecules system test ] to catch a bug. This is the failure of the displace_id argument of the [http://www.nmr-relax.com/manual/structure_align.html 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 [http://www.nmr-relax.com/manual/structure_align.html 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 [http://www.nmr-relax.com/manual/structure_write_pdb.html structure.write_pdb user function]. The waters with the residue name 'HOH' are no longer output to HET records.
* 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 [http://www.nmr-relax.com/api/3.3/lib.structure.internal.coordinates-module.html#assemble_coord_array 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 [http://www.nmr-relax.com/manual/structure_align.html 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 [http://www.nmr-relax.com/manual/structure_align.html 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.
* 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 [http://www.nmr-relax.com/manual/structure_align.html structure.align user function]. This is implemented in 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 ] 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 [http://www.nmr-relax.com/api/3.3/pipe_control.structure.main-module.html#assemble_coordinates 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 [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 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.