|
Did you know...
This is a collection of all of the bugfix lists for each released relax version.
Version 4 of relax
relax 4.0 series
- Fix for bug #24723. This is the bug that the mean RMSD from the structure.rmsd user function is incorrectly calculated - it should be a quadratic mean. The quadratic mean and quadratic standard deviation are now correctly calculated, and the structure.test_rmsd, structure.test_rmsd_molecules, and structure.test_rmsd_ubi system tests have been updated for the fix.
- Bug fix for the inversion recovery equations sr #3345. The inversion recovery experiment was incorrectly implemented as I(t) = I∞ - I0e-R1t whereas it should be I(t) = I∞ - (I∞ - I0)e-R1t.
- Fix for bug #24218, the incorrect labelling of alignment tensors by the align_tensor.matrix_angles user function when a subset of tensors is specified. The logic for the labels was expanded from being only for all tensors to handling subsets.
- Bug fix for the structure.read_pdb user function bug #24300, when the merge flag is True, and both multiple structures and multiple models are present, the structure.read_pdb user function would fail with a RelaxError. The problem was that the molecule index was simply not being updated correctly.
- Fix for bug #24601, the failure of the optimisation of the R2eff dispersion model when peaks are missing from one spectrum, as reported by Petr Padrta. To handle the missing data, the peak intensity keys are now checked for in the spin container peak_intensities data structure. This is both for the R2eff model optimisation as well as the data back-calculation. A warning is given when the key is missing. The relaxation dispersion base_data_loop() method has been modified to now yield the spin ID string, as this is used in the warnings. In addition, the Grace plotting code in the relax library was also modified. When peak intensity keys are missing, some of the Grace plots will have no data. The code will now generate a plot for that data set, but detect the missing data and allow an empty plot to be created.
- Replicated titles in the HTML version of the relax manual, and hence replicated HTML file names overwriting earlier sections, have been eliminated.
- Fix for bug #23933, the "NameError: global name 'ids' is not defined" problem when loading relaxation data. The bug was introduced back in November 2014, and is due to some incomplete error handling code. The problem is that the spin type that the relaxation data belongs to (@N vs. @H) has not been specified. Now the correct
RelaxMultiSpinIDError is raised. The ids variable did not exist - it was code that was planned to be added, but never was and was forgotten.
- Fix for the CSA constant equation in the model-free chapter of the manual. This was spotted by Christina Möller and reported on the relax-users mailing list.
- Bug fix for the storage of the XML structural object in the state and results files. Previously any objects added to
cdp.structure (or any structure object) would not be saved by the structural object to_xml() method unless the function is explicitly modified to store that object. Now all objects present will be converted to XML.
- Fix for the relaxation dispersion analysis in the GUI, as caught by the Relax_disp.test_paul_schanda_nov_2015 GUI test. When loading from a script state file, the value of
None can be present. This is now set to the standard values.
- Fix for running relax at a server with no graphical display and using matplotlib. The error was found with the Relax_disp.test_repeat_cpmg system test. And the error generated was:
QXcbConnection: Could not connect to display. Aborted (core dumped) . The backend of matplotlib has to be changed. This is for example described in: http://stackoverflow.com/questions/2766149/possible-to-use-pyplot-without-display and http://stackoverflow.com/questions/8257385/automatic-detection-of-display-availability-with-matplotlib.
- Modified the behaviour of the bmrb.write user function backend for a model-free analysis (fix for bug #24131). This is in the bmrb_write() method of the model-free analysis API. Deselected spins are now skipped and a check has been added to be sure that spin data has been assembled.
- Another fix for bug #24131, the BMRB export failure when the SpinContainer object has no S2 attribute. Now no data is stored in the BMRB file if a model-free model has not been set up for the spin. This allows the test suite to pass.
- Bug fix to allow the Mf.test_bug_24131_missing_interaction system test to pass. This is part of bug #24131, the BMRB export failure with the SpinContainer object having no S2 value. The problem was when assembling the diffusion tensor data. The spin_loop() function was being called, as the diffusion tensor is reported for all residues. Therefore the
skip_desel=True has been added to match the model-free part.
- Fix for the alignment tensor MC simulation objects in the data store for Python 3.1. The sim_indices object was sometimes created with the range() method, however the returned iterator does not possess an index() function in Python 3.1. Therefore it was converted to a standard list.
- Cosmetic bug fix for the running of the test suite in the GUI. The list of skipped tests in the status object was not being reinitialised for each run of the test suite. This only affects the GUI where the tests can be run multiple times. The result was that the list of skipped tests was always being printed out, even if no tests were skipped.
- Fix for the numpy version number checking in the dep_check module. The version_comparison() function is now being used to compare numbers, replacing the previous hack.
Version 3 of relax
relax 3.3 series
- Resized all fixed-sized GUI wizards to fit on 1024x768 pixel wide displays. The problem was reported by Lora Picton in the thread starting at http://thread.gmane.org/gmane.science.nmr.relax.user/1813. Both the spin loading wizard of the spin viewer window and the relaxation data loading wizard used currently in the model-free analysis tab and BMRB export page were fixed. These both had the y-dimension set to 800 pixels, hence parts of the window would be out of view.
- Big bug fix for the N-state model num_data_points() function. This is from the specific_analyses.n_state_model.data module. This code was very much out of date. It was expecting an ancient behaviour where the spin container 'pcs' variable and interatomic data container 'rdc' where lists of floats. However these were converted many years ago to dictionaries with keys set to the alignment IDs. The result was that no RDCs nor PCSs were counted as a base data point, so the function would in most cases return a value of zero.
- Fixes for the printout from the pipe_control.pcs.return_pcs_data() function. The number of PCSs printed out was including values of None when data was missing for one alignment. These values of None are no longer counted.
- Fixes for the printout from the pipe_control.rdc.return_rdc_data() function. The number of RDCs printed out was including values of None when data was missing for one alignment. These values of None are no longer counted.
- More fixes for the RDC and PCS count printouts from the corresponding data assembly functions. Sometimes the RDC or PCS value could be present as None. This is now detected and the count is not incremented.
- More fixes for the PCS count printout from the pipe_control.pcs.return_pcs_data() function. The check for None values was incorrect.
- Fixes for the N-state model num_data_points() function. The deselected interatomic data containers are no longer used for counting RDC data. And the skipping of deselected spin containers for the PCS is now via the spin_loop() skip_desel argument.
- Fix for bug #23259, the broken user functions in the prompt UI with the RelaxError: The user function 'X' has been renamed to 'Y'. The problem was that the only the first part of the user function name, for example 'minimise' from 'minimise.calculate' was being checked in the user function name translation table. As the minimise user function has been renamed to minimise.execute, 'minimise' is in the translation table and hence minimise.calculate was being identified as the minimise user function. Now the full user function name is reconstructed before checking the translation table.
- Fixes for the lib.structure.internal.coordinates.assemble_coord_array() function. The problem was uncovered by the Structure.test_atomic_fluctuations_no_match system test. The function can now handle no data being passed in.
- Fixes for the pipe_control.structure.main.assemble_structural_coordinates() function. The function will now raise a RelaxError if no structural data matching the atom ID can be found. The problem was uncovered by the Structure.test_atomic_fluctuations_no_match system test. The fix affects the structure.atomic_fluctuations, structure.displacement, structure.find_pivot, structure.rmsd, structure.superimpose, and structure.web_of_motion user functions.
- Fix for bug #23265, the failure of the edit buttons in the user function GUI windows. The problem was that the column titles of the window opened by the edit button were being incorrectly handled if the dimensions of the window were not supplied.
- Fix for bug #23288, the failure of the structure.read_pdb user function when simultaneously merging multiple molecules from one file. The set_mol_name and set_model_num arguments are now converted to lists equal to the length of the read_mol and read_model arguments simultaneously, if supplied.
- Small fix for the structure.write_pdb user function for handling old relax state and results files.
- Fix for bug #23293, the PDB HETATM loading error whereby the last HETATM record is sometimes not read from the PDB file. The problem was two-fold. Firstly the internal structural object _parse_mols_pdb() method for separating a PDB file into distinct molecules was terminating too early when a new molecule is found, so that the last PDB record is not appended to the records list for the molecule. Secondly the write_pdb() method was not handling the PDB sequential serial number correctly.
- Fix for bug #23294, the automatic merging of PDB molecules resulting in an IndexError. Now if only a single molecule name is supplied, this will be used for all molecules in the PDB file. The result is that the structural data will all be automatically merged into a single molecule. This merging is communicated to the user via the current printouts.
- Bug fix for the SHEET PDB records created by the structure.write_pdb user function. The current and previous atom parts of the record were not being correctly formatted. This was simply using the %4s formatting string. However the PDB atom format is rather more complicated. To handle this, the new _handle_atom_name() helper function has been added to the lib.structure.pdb_write module. This is now used in the atom() and sheet() functions for consistently formatting the atom name field.
- Fix for bug #23295, the PDB secondary structure HELIX and SHEET records not updating when merging molecules. The problem was that the algorithm for changing the molecule numbers for the helix and sheet metadata when calling the structure.read_pdb user function was far too simplistic. Therefore the logic has been completely rewritten. Now the helix and sheet metadata are stored in temporary data structures in the _parse_pdb_ss() method. As the molecules are being read from the PDB records, new data structures containing the original molecule numbers and new molecule numbers are created. The helix and sheet metadata is then stored in the internal structural object via the pack_structs() method, and the molecule indices of the metadata changed based on the two molecule number remapping data structures.
- Python 3 fix for the new internal structural object MolContainer._sort() method. The list() builtin function is required to convert the output of the range() function into a true list in Python 3, so that the list.sort() method can be accessed.
- Python 3 fix for the Test_msa.test_central_star unit test. This is from the _lib._sequence_alignment.test_msa unit test module. The logic of range() + range() does not work in Python 3, so the range function calls are now wrapped in list() function calls to convert to the correct data structure type.
- Python 3 fix for the internal structural object MolContainer._sort_key() method. This method is used as the key for the sort() function. However in Python 3, the key cannot be None. So now if the residue number is None, the value of 0 is returned instead.
- Python 3 fix for the pipe_control.structure.main.assemble_structural_coordinates() function. This affects most of the structure user functions. This was another case of requiring the list() built in function to create a list object from an iterator.
- Another Python 3 list() fix for the structure user functions. This time the problem was in the pipe_control.structure.main.sequence_alignment() function.
- Fix for a RelaxError message from the internal structural object when validating models.
- Bug fix for the results.write user function when loading relax state files. The results.write user function can load not only the results file consisting of a single data pipe, but also relax state files if only a single pipe is present. However this was causing the current data pipe and other pipe-independent data (sequence alignments and the GUI) to be overwritten, just as when loading a state file. Now only the data from the data pipe will be loaded and the pipe independent data in the state file will be ignored.
- Fix for the rdc.write user function. The check for the missing rdc_data_types variable in the interatomic containers is now more comprehensive and checks for the presence of the alignment ID.
- Big bug fix for the pipe_control.interatomic.interatomic_loop() function. This was identified in the Rdc.test_rdc_copy_different_spins system test. The problem was that the pipe argument was being ignored when looking up the spin containers. Hence if the pipe being worked on was not the current data pipe, and the spin sequences were not identical, the function would fail. This mainly affects the rdc.copy user function.
- Fix for the pcs.read user function. The problem was caught by the new Pcs.test_pcs_copy_different_spins system test. If the spin system does not exist in the current data pipe, but data for it is present in the PCS file, the pcs.read user function would terminate in a TypeError.
- Fixes for the rdc.calc_q_factors user function for when no alignment tensor is present. This was caught by the Rdc.test_calc_q_factors_no_tensor system test. Now if no tensor is present, a warning is given and the 2Da2(4 + 3R)/5 normalised Q factor is skipped. Also, if present but no spin isotope information is present, then RelaxSpinTypeError errors are raised.
- Fix for the pcs.corr_plot user function when the spin containers have no element information.
- Fix for bug #23372, the sequence.read failure with CSV files. The problem was that the sep argument was not being passed all the way to the backend lib.io.extract_data() function.
- Fix for the lib.sequence.check_sequence checking object. Although rarely used, the check for the spin number was incorrect and half of the checks were instead for the residue number. This is a classic copy and paste error where the residue name and number checks were copied but not completely converted to spin name and numbers.
- Bug fix for the structure.align user function. The addition of the molecule name to the displacement ID is now correctly performed.
- Fix for the new Internal_selection.count_atoms() internal structural object selection method. The method was previously returning the total number of molecules, not the total number of atoms in the selection.
- Printout fix for the backend of the structure.translate and structure.rotate user functions. Model numbers of zero were not correctly identified. This also affects the structure.align and structure.superimpose user functions which uses this backend code.
- Another fix for the Internal_selection.count_atoms() internal structural object selection method.
- Small fix for the lib.structure.internal.coordinates.assemble_coord_array() function. The termination condition for determining the residues in common between all structures was incorrect.
- The Structure.test_create_diff_tensor_pdb_oblate system test now uses oblate diffusion relaxation data. This fixes bug #23232, the failure of this system test on Mac OS X. The problem was that the system test was previously using relaxation data for prolate spheroidal diffusion and fitting an oblate tensor to that data. This caused the solution to be slightly different on different CPUs, operating systems, Python versions, etc. and hence the PDB file representation of the diffusion would be slightly different.
- Big bug fix for the GUI tests on MS Windows systems. On MS Windows systems, the GUI tests were unable to complete without crashing. This is because each GUI element requires one 'User object', and MS Windows has a maximum limit of 10,000 of these objects. The GUI tests were taking more than 10,000 and then Windows would say - relax, you die now. The solution is that after each GUI test, all user function windows are destroyed. The user function page is a wx.Panel object, so this requires a Destroy() call. But the window is a Uf_page instance which inherits from Wiz_page which inherits from wx.Dialog. Calling Destroy() on MS Windows and Linux works fine, but is fatal on Mac OS X systems. So the solution is to call Close() instead.
- Fix for the default grid_inc argument for the relaxation curve-fitting auto-analysis. This needs to be an integer.
- Fix for bug #23244. The relaxation curve-fitting auto-analysis now outputs text files and Grace graphs for the I0 parameter and the I∞ parameter if it exists.
- Fixes for the package checking unit tests on MS Windows for the target_functions package. The compiled relaxation curve-fitting file is called target_functions\relax_fit.pyd on MS Windows. The package checking was only taking into account *.so compiled files and not *.pyd file.
- 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.
- Bug fix for the pymol.view user function for when no PDB file exists. The user function would fail with an AttributeError when the currently loaded data does not exist as a PDB file. This is now caught and the non-existent PDB is no longer displayed. A better solution might be to dump all the current structural data into a temporary file and load that, all within a try-finally statement to be sure to delete the temporary file. This solution may not be what the user is interested in anyway.
- Simple fix for bug #23017, the multidimensional numpy arrays are not being stored as IEEE 754 arrays in the XML state and results files. The problem was a relatively recent regression caused by a change to the is_float_matrix() function of the lib.arg_check module. It was simply that the default dims keyword argument value was changed from None to (3, 3). Therefore any call to the function without supplying the dims argument would fail if the matrix was not of the (3, 3) shape.
- Fix for bug #22961, the failure of relaxation data loading with the message "IndexError: list index out of range". The bug was found by Julien Orts. It is triggered by loading relaxation data from a file containing spin name information and supplying the spin ID using the spin name to restrict data loading to a spin subset. To solve the problem, the pipe_control.relax_data.pack_data() function has been redesigned. Now the selection union concept of Chris MacRaild's selection object is being used by joining the spin ID constructed from the data file and the user supplied spin ID with '&', and using this to isolate the correct spin system.
- Big Python 3 bug fix for the dep_check module for the detection of the NMRPipe showApod software. The showApod program was falsely detected as always not being present when using Python 3. This is because the output of the program was being tested using string comparisons. However the output from programs obtained from the subprocess module is no longer strings but rather byte-arrays in Python 3. Therefore the byte-array is not being converted to text if Python 3 is being used, allowing the showApod software to be detected.
- Python 3 bug fix for the lib.spectrum.nmrpipe.show_apod_extract() function. The subprocess module output from the showApod program, or any software, is a byte array in Python 3 rather than text. This is now detected and the byte array converted to text before any processing.
- Bug fix for the lib.structure.angles.angles_*() functions for odd increments. This affects the PDB representations of the diffusion tensor and frame order when the number of increments in the respective user functions is set to an odd number. It really only affects the frame_order.pdb_model user function, as the number of increments cannot be set in any of the other user functions (structure.create_diff_tensor_pdb, structure.create_rotor_pdb, structure.create_vector_dist, n_state_model.cone_pdb).
=== relax 3.3.2 ..→
|
|
|
Random screenshots
The analysis selection wizard
Steady-state NOE analysis
|
|