<section begin=description/>
This is a minor feature and bugfix release. It includes the addition of the [http://www.nmr-relax.com/manual/error_analysis_covariance_matrix.html error_analysis.covariance_matrix], [http://www.nmr-relax.com/manual/structure_align.html structure.align], and [http://www.nmr-relax.com/manual/structure_mean.html structure.mean ] user functions and expanded functionality for the [http://www.nmr-relax.com/manual/structure_com.html structure.com ] and [http://www.nmr-relax.com/manual/structure_delete.html structure.delete ] user functions. Many operations involving the internal structural object are now orders of magnitude faster, with the [http://www.nmr-relax.com/manual/interatom_define.html interatom.define user function ] showing the greatest speed ups. There are also improvements for helping to upgrade relax scripts to newer relax versions. The numdifftools package is now bundled with relax for allowing numerical gradient, Hessian and Jacobian matrices to be calculated. And the release includes the start of a new protocol for iteratively analysing repetitive relaxation dispersion experiments.
<section end=description/>
* Addition of the docs/user_function_changes.txt file which documents all user function changes from relax 1.0.1 to 3.3.1 to help with upgrading scripts to newer relax versions.
* Updated the translation table used to identify no longer existing user functions and explain what the new user function is called for all relax versions from 1.3.1 to 3.3.1.
* The [http://www.nmr-relax.com/manual/structure_delete.html structure.delete user function can now delete individual models as well as select atoms in individual models].* Addition of the [http://www.nmr-relax.com/manual/error_analysis_covariance_matrix.html error_analysis.covariance_matrix user function for determining parameter errors via the covariance matrix]. This is currently only implemented for the relaxation curve-fitting analysis.
* Bundling of the Numdifftools 0.6.0 package with relax (https://code.google.com/p/numdifftools/) for numerically testing implementations of gradients, Hessians, and Jacobians.
* Implementation of the internal structural object collapse_ensemble() method to allow for all but one model to be deleted.
* Massive speed up of the internal structural object by pre-processing the atom ID string into a special atom selection object. This speeds up the [http://www.nmr-relax.com/manual/interatom_define.html interatom.define], [http://www.nmr-relax.com/manual/structure_delete.html structure.delete], [http://www.nmr-relax.com/manual/structure_rotate.html structure.rotate], [http://www.nmr-relax.com/manual/structure_translate.html structure.translate ] and many other user functions which loop over structural data.* Many orders of magnitude speed up of the [http://www.nmr-relax.com/manual/structure_add_model.html structure.add_model user function].* Implementation of the [http://www.nmr-relax.com/manual/structure_mean.html structure.mean user function to calculate the mean structure from the atomic coordinates of all loaded models].* Implementation of the [http://www.nmr-relax.com/manual/structure_align.html structure.align user function for aligning and superimposing different but related structures]. This is similar to the [http://www.nmr-relax.com/manual/structure_superimpose.html structure.superimpose user function ] but allows for missing atomic information or small sequence changes. Only atoms with the same residue name and number and atom name are used in the superimposition.* Expanded the [http://www.nmr-relax.com/manual/structure_com.html structure.com user function to accept the atom_id argument to allow the centre of mass of a subset of atoms to be determined].
* Improvements for the running of the relax test suite.
<section end=features/>
* Added a script and log file for comparing relax user function differences between versions.
* Created a document for relax users which follows the changes to the user function names.
* For the [http://www.nmr-relax.com/manual/spin_display.html spin.display user function], added the print out of spin ID and status for selection. This is to help with showing the spin ID string for selection, and the current status of selection. [https://gna.org/task/?7826 Task #7826: Write a Python class for the repeated analysis of dispersion data].
* To the back-end of display pipes, added functionality to sort the pipe names before printing. Also added the return of the list of pipes, with its associated information about pipe type, and pipe_bundle. This is to help with getting a better overview for multiple pipes in data store. [https://gna.org/task/?7826 Task #7826: Write a Python class for the repeated analysis of dispersion data].
* Parsed the force flag from front end of [http://www.nmr-relax.com/manual/value_set.html value.set ] to back end. [https://gna.org/bugs/?22598 Bug #22598]. Back end of [http://www.nmr-relax.com/manual/value_set.html value.set ] does not respect force=False flag.
* Broke optimisation function into smaller functions. This is to help selecting spins, do particular grid search and minimise. [https://gna.org/task/?7826 Task #7826: Write a Python class for the repeated analysis of dispersion data].
* Modified system test to follow the new functions in the auto analysis. [https://gna.org/task/?7826 Task #7826: Write a Python class for the repeated analysis of dispersion data].
* Changed the organisation of the files in the docs/ directory. A new docs/devel directory has been created and the 2to3_checklist, Mac_framework_build_3way, package_layout, and prompt_screenshot.txt documents shifted into it. This is to hide or abstract away the development documents so that relax users do not see them when looking into docs/. This should make the directory less intimidating.
* Shifted the Release_Checklist document into docs/devel/ to hide it from users.
* Correction for the [http://www.nmr-relax.com/manual/noe_read.html noe.read ] to [http://www.nmr-relax.com/manual/spectrum_read_intensities.html spectrum.read_intensities user function ] change. This is for the translation table used to catch old user function calls.
* Initial try to implement plotting in the repeated auto analysis protocol. [https://gna.org/task/?7826 Task #7826: Write a Python class for the repeated analysis of dispersion data].
* Small improvement of the matplotlib plotting of data in the repeated analysis protocol. [https://gna.org/task/?7826 Task #7826: Write a Python class for the repeated analysis of dispersion data].
* Implemented a method to automatically find duplicates of spectrum in exponential fit. This is to ease the user intervention for error analysis, if this has been forgotten.
* Implemented the writing out of a "grace2images.py" script file, when performing auto analysis of exponential fits.
* Created the Structure.test_delete_model system test. This is in preparation for extending the [http://www.nmr-relax.com/manual/structure_delete.html structure.delete user function ] to be able to delete individual structural models. The test will only pass once this functionality is in place.
* Expanded the wiki instructions in the release checklist document. This includes a number of steps for significantly improving the release notes: External links to the Gna! trackers with full descriptions, external links to the HTML user manual for all user functions, internal links to release notes of other relax versions, internal links to wiki pages for all models from all theories, and HTML formatting of all symbols/parameters/etc.
* Introduction of the model argument to the [http://www.nmr-relax.com/manual/structure_delete.html structure.delete user function]. This argument is passed all the way into the internal structural object, but is not used yet.* The model argument in the [http://www.nmr-relax.com/manual/structure_delete.html structure.delete user function ] is now operational. In the internal object, it has two functions. When the atom_id argument is none, then new ModelList.delete_model() function is being called to remove the entire model from the list of structural models. When the atom_id argument is supplied, then only the corresponding atoms in the given model will be deleted.
* Expanded the checking in the Structure.test_delete_model system test. Now a number of structural model loading and deletion scenarios are tested.
* Implemented back-end function to estimate Rx and I0 errors from Jacobian matrix. This is to prepare for user function in relax_fit, to estimate errors.
* Implemented [http://www.nmr-relax.com/manual/error_analysis_covariance_matrix.html user function relax_fit.rx_err_estimate ] in relax_fit to estimate Rx and I0 errors from the Jacobian Co-variance matrix.
* Extended system test Relax_fit.test_curve_fitting_height_estimate_error() to test the error estimation method from the Co-variance matrix. The results seems very similar, if increasing to 2000 Monte Carlo simulations.
* Renamed the pipe_control.monte_carlo module to pipe_control.error_analysis. This is in preparation for the module to handle all error analysis techniques: Monte Carlo simulations, covariance matrix, Jackknife simulations, Bootstrapping (which is currently via the Monte Carlo functions), etc. All current functions are now prepended with 'monte_carlo_*()'.
* Fix for the old relax 1.2 model-free results file reading. This is due to the pipe_control.monte_carlo to pipe_control.error_analysis module renaming.
* Implemented the pipe_control.error_analysis.covariance_matrix() function. This follows from http://thread.gmane.org/gmane.science.nmr.relax.scm/23526/focus=7096. It will be used by a new [http://www.nmr-relax.com/manual/error_analysis_covariance_matrix.html error_analysis.covariance_matrix user function]. And it calls the specific API methods model_loop(), covariance_matrix(), and set_error() and the relax library lib.statistics.multifit_covar() function do to most of the work.* Modified the Relax_fit.test_curve_fitting_height_estimate_error system test. The call to relax_fit.rx_err_estimate has been replaced by the yet-to-be implemented [http://www.nmr-relax.com/manual/error_analysis_covariance_matrix.html error_analysis.covariance_matrix user function].* Creation of the [http://www.nmr-relax.com/manual/error_analysis_covariance_matrix.html error_analysis.covariance_matrix user function]. This is simply a code rearrangement. The relax_fit user function module was duplicated and [http://www.nmr-relax.com/manual/error_analysis_covariance_matrix.html relax_fit.rx_err_estimate ] renamed to [http://www.nmr-relax.com/manual/error_analysis_covariance_matrix.html error_analysis.covariance_matrix]. References to the specific analysis have been removed.
* Created the specific analysis base API method covariance_matrix(). This defines the arguments required and what is returned by the method. It raises the RelaxImplementError for all analyses which do not implement this method.
* Modified pipe_control.error_analysis.covariance_matrix(). The call to the API covariance_matrix() method now has the model_info argument passed into it. For the relaxation curve-fitting, this allows the loop over spin systems to be skipped.
* Imported the Numdifftools 0.6.0 package into the relax source tree. This package is extremely useful for testing the implementation of gradients, Hessians, and Jacobians for all relax target functions. The numerical values from numdifftools can be compared to the directly calculated values. And for analysis types where the partial derivatives with respect to each model parameter are too complicated to calculated, or the derivatives are very complicated and hence slow, numdifftools can be used to provide a numerical estimate for direct use in the optimisation. The Numdifftools package is from https://pypi.python.org/pypi/Numdifftools and https://code.google.com/p/numdifftools/. The current version 0.6.0 has been placed into extern/numdifftools. This is only the numdifftools package within the official distribution files and the Python package setup.py file and associated files and directories have not been included. The package uses the New BSD licence (the revised licence with no advertising clause) which is compatible with the GPL v3 licence.
* Reordered functions in repeated analysis protocol. [https://gna.org/task/?7826 Task #7826: Write a Python class for the repeated analysis of dispersion data].
* Added more check of methods to the system test Relax_disp.test_repeat_cpmg(). This actually shows, that [http://www.nmr-relax.com/manual/relax_disp_r20_from_min_r2eff.html user function relax_disp.r20_from_min_r2eff ] maybe is broken. [https://gna.org/task/?7826 Task #7826: Write a Python class for the repeated analysis of dispersion data].
* Fix for the testing of method is finished when called. [https://gna.org/task/?7826 Task #7826: Write a Python class for the repeated analysis of dispersion data].
* Turned on minimisation in system test Relax_disp.test_repeat_cpmg(). [https://gna.org/task/?7826 Task #7826: Write a Python class for the repeated analysis of dispersion data].
* Added a few more checks to the Structure.test_get_model system test.
* Created the Structure.test_collapse_ensemble system test. This is used to test a planned feature of the internal structural object. The collapse_ensemble() method will be created to remove all but one model in the structural ensemble.
* Modified the Structure.test_collapse_ensemble system test to check the initial values. This is for sanity reasons as the test coverage of the [http://www.nmr-relax.com/manual/structure_add_atom.html structure.add_atom user function ] is poor.
* Implemented the internal structural object collapse_ensemble() method. This allows the Structure.test_collapse_ensemble system test to pass.
* Created a basic text based progress meter in the new lib.text.progress module. This is taken from the script test_suite/shared_data/frame_order/cam/generate_base.py.
* Modifications to the User_functions.test_structure_add_atom GUI test. As lists of lists are now accepted by the [http://www.nmr-relax.com/manual/structure_add_atom.html structure.add_atom user function], the operation in the GUI is now significantly different. Therefore many checks have been removed from the GUI test.
* Updated the minimum minfx dependency version number from 1.0.9 to 1.0.11 in the dep_check module. This newest version handles infinite target function values preventing optimisation from continuing forever (https://gna.org/forum/forum.php?forum_id=2477). The 1.0.10 version is also useful as there is full support for gradients and Hessians in the log-barrier constraint algorithm (https://gna.org/forum/forum.php?forum_id=2475).
* Shifted the specific_analyses.relax_disp.variables module into lib.dispersion. This is both to minimise circular dependencies, as previously the specific_analyses.relax_disp modules import from target_functions.relax_disp and vice-versa, and to allow the relax library functions to have access to these variables. This follows from a similar change to the frame order analysis in the frame_order_cleanup branch.
* Converted the rotate() and translate() structural object methods to use the new selection object. The atom_id arguments have been replaced with selection arguments. Therefore all parts of relax which call these methods must first call selection() to obtain the Internal_selection instance.
* Created the structural object Internal_selection.mol_loop() method. This is to simply quickly loop over all molecule indices of the selection object.
* Converted all structural object methods to use the selection object rather that atom ID strings. This should have a significant impact on the speed of certain operations within relax. The most obvious effect will be a huge speed up of the [http://www.nmr-relax.com/manual/interatom_define.html interatom.define user function]. There should be speed ups with a number of other user functions relating to structural information. All parts of relax have been updated for the change.
* Implemented the sampling sparseness instead of NI on the graph axis. [https://gna.org/task/?7826 Task #7826: Write a Python class for the repeated analysis of dispersion data].
* Massive speed up of the internal structural object add_model() method. This speeds up the [http://www.nmr-relax.com/manual/structure_add_model.html structure.add_model user function], as well as many internal relax operations on the structural object. Instead of using the copy.deepcopy() function to duplicate an already existing structural model, now new molecule container objects are created and then the individual elements of the original molecule container data lists are copied one by one. This avoids copying a lot of internal Python junk and hence the copying operation is now orders of magnitude faster.
* Created the new --no-skip relax command line option. This is a debugging option specifically designed for relax developers. It allows all blacklisted tests to be executed, i.e. all blacklists are ignored. These tests would normally be skipped, however this option enables them.
* Fix for the test suite summary printout function for the new --no-skip option. The relax status object was clashing with a variable of the same name.
* Reactivated the Relax_disp.test_m61b_data_to_m61b system test, but blacklisted it. This will allow the test to be executed if the --no-skip command line option is used.
* Created the Bmrb.test_bug_22703_display_empty system and GUI test. This system test catches [https://gna.org/bugs/?22703 bug #22703, the failure of the [http://www.nmr-relax.com/manual/bmrb_display.html bmrb.display user function ] with an AttributeError when no data is present]. It is simultaneously a system and GUI test, as the GUI test class inherits directly from the system test class.
* Created the pipe_control.spectrometer.check_setup() function. This follows the design on the wiki page http://wiki.nmr-relax.com/Relax_source_design. This is for checking if spectrometer information has been set up.
* Created the RelaxNoFrqWarning warning class for warning that no spectrometer information is present.
* Modified the grid search limits for parameter "k_AB" to be between 0.1 and 20.0 rad.s^-1. This is for the TSMFK01 model, where values much above 10/20 is not expected.
* Implemented counting of outliers for statistics. This is to get a better feeling why some statistics are very much different between NI. [https://gna.org/task/?7826 Task #7826: Write a Python class for the repeated analysis of dispersion data].
* Created the Structure.test_mean system test. This is to test the functionality of a planned new feature, the [http://www.nmr-relax.com/manual/structure_mean.html structure.mean user function]. This is an analysis aid that will calculate the mean structure from all loaded models.* Implemented the [http://www.nmr-relax.com/manual/structure_mean.html structure.mean user function ] frontend. The backend is currently just a stub function.
* Fixes and simplifications for the pipe_control.pipes.check_pipe() checking object. One of the RelaxError classes were not initialised and the docstring was incorrect.
* Created the pipe_control.structure.main.check_structure() checking object. This will be used for providing much more detailed feedback for when structural information is missing.
* Converted all of the pipe_control.structure.main functions to use the check_structure() object. This standardises and improves all of the checks.
* Some fixes and additional checks for the Structure.test_mean system test.
* Implemented the backend of the [http://www.nmr-relax.com/manual/structure_mean.html structure.mean user function]. This primarily occurs within the internal structural object in the new mean() method. The pipe_control.structure.main.mean() function simply checks if the current data pipe is correctly set up and then calls the structural object mean() method.* Created the Structure.test_align system test. This will be used to test the yet to be implemented [http://www.nmr-relax.com/manual/structure_align.html structure.align user function]. This user function will be similar to the [http://www.nmr-relax.com/manual/structure_superimpose.html structure.superimpose user function ] but will be designed so that structures with different primary and atomic sequences can be superimposed.* Created the frontend of the [http://www.nmr-relax.com/manual/structure_align.html structure.align user function]. This is almost the same as that of the [http://www.nmr-relax.com/manual/structure_superimpose.html structure.superimpose user function ] except that the pipes argument has been added and the titles and description changed to indicate the differences.* Registered the new user function argument type 'int_list_of_lists' in the prompt UI. This is to allow for lists of lists of integers, as used for the model argument in the new [http://www.nmr-relax.com/manual/structure_align.html structure.align user function].
* Modified the lib.arg_check.is_int_list() function to accept the list_of_lists Boolean argument. This updates the function to have the same functionality as is_str_list(), allows for lists of lists of int to be checked.
* Extended the Structure.test_align system test to throughly check the structural data. This includes changing the [http://www.nmr-relax.com/manual/structure_align.html structure.align user function ] call to use 'fit to first' and carefully checking the new atomic coordinates.* Modified the Structure.test_align system test so that translations and rotations match the algorithm. This allows the output of the [http://www.nmr-relax.com/manual/structure_align.html structure.align user function ] to be checked to see if the rotation matrix and translation vector found match that used to shift the original structures.* Implemented the [http://www.nmr-relax.com/manual/structure_align.html structure.align user function ] backend. This is similar to the [http://www.nmr-relax.com/manual/structure_superimpose.html structure.superimpose user function], however the coordinate data structure only contains atoms which are in common to all structures.* The pipe_control.structure.main functions translate() and rotate() now accept the pipe_name argument. This is used to translate and rotate structures in different data pipes, as required by the [http://www.nmr-relax.com/manual/structure_align.html structure.align user function].
* The pipe_control.structure.main.check_structure() checking object now accepts the pipe_name argument. This allows structural data to be checked for in different data pipes without having to switch to them.
* Modified the Structure.test_align system test to call the [http://www.nmr-relax.com/manual/structure_write_pdb.html structure.write_pdb user function]. This sets the file name to sys.stdout so that the original structure and the final aligned structures are output to STDOUT for debugging purposes.* Created the Structure.test_delete_atom system test. This is used to test the deletion of a single atom using the [http://www.nmr-relax.com/manual/structure_delete.html structure.delete user function].* Expanded the Structure.test_delete_atom system test. This is to show that the [http://www.nmr-relax.com/manual/structure_write_pdb.html structure.write_pdb user function ] fails after a call to the [http://www.nmr-relax.com/manual/structure_delete.html structure.delete user function ] to delete individual atoms.* Fix for the new [http://www.nmr-relax.com/manual/structure_align.html structure.align user function]. The translation and rotation of the structures at the end to the aligned positions was being incorrectly performed.
* Loosened some checks in the Structure.test_align system test to allow it to pass. Some self.assertEqual() checks for the atomic coordinates have been replaced by self.assertAlmostEqual() to allow for small machine precision differences.
* Modified the lib.arg_check.is_str_or_inst() to handle cStringIO objects. This allows sys.stdout to be used as a file object in the relax test suite.
* Print out of the number of all R2eff points, if they are different between analysis. This can become an issue if a single intensity point has slipped into noise, due to low quality of spectrum reconstruction. [https://gna.org/task/?7826 Task #7826: Write a Python class for the repeated analysis of dispersion data].
* Implemented statistics for R2eff values. [https://gna.org/task/?7826 Task #7826: Write a Python class for the repeated analysis of dispersion data].
* Added data checks and printouts to the [http://www.nmr-relax.com/manual/structure_align.html structure.align user function]. The data checks are to prevent the user from attempting an alignment with differently named molecules, as this will not work.
* Implemented writing out intensity and error correlations plot. [https://gna.org/task/?7826 Task #7826: Write a Python class for the repeated analysis of dispersion data].
* Implemented writing out of intensity statistics. [https://gna.org/task/?7826 Task #7826: Write a Python class for the repeated analysis of dispersion data].
* Expanded the [http://www.nmr-relax.com/manual/structure_com.html structure.com user function ] to accept the atom_id argument. This allows the centre of mass (CoM) calculation to be restricted to a certain subset of atoms. The backend already had support for this feature, but now it is exposed in the frontend. The user function docstring has been slightly modified as well.
* Skipping of intensity calculation, if the intensity pipe does not exists. [https://gna.org/task/?7826 Task #7826: Write a Python class for the repeated analysis of dispersion data].
* Added example CPMG data, which could possibly be sent for BMRB submission. The data is un-published CPMG data, related to the paper: Webb H, Tynan-Connolly BM, Lee GM, Farrell D, O'Meara F, Soendergaard CR, Teilum K, Hewage C, McIntosh LP, Nielsen JE (2011). Remeasuring HEWL pK(a) values by NMR spectroscopy: methods, analysis, accuracy, and implications for theoretical pK(a) calculations. Proteins: Struct., Funct., Bioinf. 79(3), 685-702, DOI 10.1002/prot.22886. [https://gna.org/task/?7858 Task #7858: Make it possible to submit CPMG experiments for BMRB].
* Removed the showing of Matplotlib figures in the test suite. [https://gna.org/task/?7826 Task #7826: Write a Python class for the repeated analysis of dispersion data].
* Implemented system test Relax_disp.test_dx_map_clustered to cath the missing creation of a point file. [https://gna.org/bugs/?22753 Bug #22753: dx.map does not work when only 1 point is used].
* Inserted a check in system test Relax_disp.test_dx_map_clustered, that a call to [http://www.nmr-relax.com/manual/minimise.calculate.html minimise.calculate ] should be the same as the file stored with the clustered chi2 value. [https://gna.org/bugs/?22754 Bug #22754: The minimise.calculate user function does not calculate χ<sup>2</sup> value for clustered residues].
* Made initial preparation to loop over clustered spins and IDs for the minimise.calculate user function call. [https://gna.org/bugs/?22754 Bug #22754: The minimise.calculate user function does not calculate χ<sup>2</sup> value for clustered residues].
* Implemented looping over spin-clusters when issuing a minimise.calculate(). [https://gna.org/bugs/?22754 Bug #22754: The minimise.calculate user function does not calculate χ<sup>2</sup> value for clustered residues].
* Fix for two-point calculation of exponential curve with corrupted data. The two-point calculation is now also skipped, if the measured intensity is 0. This can happen for corrupted intensity files.
* Fix for the internal structural object get_model() method - it now actually returns the model.
* Fixes for the [http://www.nmr-relax.com/manual/structure_add_atom.html structure.add_atom user function ] to allow for list of lists for the atomic position. This allows different coordinates to be supplied for each model.
* Added safety checks for NaN values to the lib.structure.pdb_write module. This is within the _record_validate() function. The check prevents the creation of invalid PDB files.
* Fix for the experimental information data pipe object when converting to XML state and results files. This is a partial fix for [https://gna.org/bugs/?22704 bug #22704, the corrupted relax state files after setting the relax references via the bmrb.software, bmrb.display, or bmrb.write user functions]. The names and descriptions for the software, citation and script list objects were incorrectly set. These have been fixed so that the name of the data structure and the real description is present in the XML state or results file instead of <relax_list desc='relax list container'>.
* Fix for the cdp.exp_info.software data structure setup. This is a partial fix for [https://gna.org/bugs/?22704 bug #22704, the corrupted relax state files after setting the relax references via the bmrb.software, bmrb.display, or bmrb.write user functions]. The Element data container name was being replaced by the software name, making it impossible to restore from the XML.
* Implemented the cdp.exp_info.from_xml() method to correctly restore the experimental info structure. This fixes [https://gna.org/bugs/?22704 bug #22704, the corrupted relax state files after setting the relax references via the bmrb.software, bmrb.display, or bmrb.write user functions]. This custom ExpInfo.from_xml() method is required to properly recreate the software, script and citation list data structures of the cdp.exp_info data structure, as these are special RelaxListType objects populated by Element objects (both from data_store.data_classes).
* Bug fix for the [http://www.nmr-relax.com/manual/structure_delete.html structure.delete user function]. When individual atoms are deleted, the bonded atom data structure is no correctly updated to remove the now non-existent atom.* Another bug fix for the [http://www.nmr-relax.com/manual/structure_delete.html structure.delete user function ] when deleting individual atoms. The bonded atom data structure consisting of indices requires all indices after the deleted atom to be decremented by 1.* Bug fix for the CONECT records created by the [http://www.nmr-relax.com/manual/structure_write_pdb.html structure.write_pdb user function]. The atom numbers inside the structural object were being used for the CONECT records rather than the atom numbers used within the PDB file.
* Fix for writing out point files, when only one point is used. The code was testing for > 1 points to be present, before writing out point files. [https://gna.org/bugs/?22753 Bug #22753: dx.map does not work when only 1 point is used].
* Fix for [https://gna.org/bugs/?22563 bug #22563, the NS MMQ 2-site dispersion model running at 32-bit precision and not 64-bit as it should be]. The numpy.complex64 32-bit types have been replaced by numpy.complex128 in the lib.dispersion.ns_mmq_2site module.