Hi Sven, Sorry for not getting back to you earlier, I have been extremely busy lately. Please see below: On 25 April 2017 at 14:52, Sven Wernersson <sven.wernersson@xxxxxxxxx> wrote:
Hi again, It seems that the tutorial you linked only applies for supporting data from new experiments to dispersion analysis and not for model-free analysis? Is adding experiments for model-free analysis done in a similar fashion?
For the model-free analysis, adding new models is more complicated. The reason for this is because the code is highly optimised to avoid repetitive calculations, and it is not as modular as the relaxation dispersion code. Another reason is because I started this code back in 2001, back when I was first learning how to code in Python, so it's design was not as advanced as the relaxation dispersion side of relax. Also, you will be using the same models as already implemented, but the input data will be different.
As for your listed requirements, I have experimental data and I can rather easily generate synthetic data. The eta_xy equation is number (2) in: Longitudinal and Transverse 1H−15N Dipolar/15N Chemical Shift Anisotropy Relaxation Interference: Unambiguous Determination of Rotational Diffusion Tensors and Chemical Exchange Effects in Biological Macromolecules Christopher D. Kroenke,†, J. Patrick Loria,†, Larry K. Lee,†, Mark Rance,*,‡ and, and Arthur G. Palmer, III*,† Journal of the American Chemical Society 1998 120 (31), 7905-7915 DOI: 10.1021/ja980832l
If you would like to develop new code here, which shouldn't be difficult if you can handle complex Matlab code, I would suggest we create a new development branch in the repository. You should learn how to develop for relax by reading the "relax development" chapter of the manual: http://www.nmr-relax.com/manual/relax_development.html This explains the procedure for becoming a relax developer. We could then grant you commit access on the condition of only modifying your development branch. That way you can experiment in this sandbox as you wish, and it can be abandoned and a new branch created if you don't like your initial tests. The very first step in implementing a new model/analysis in relax is to create a system/functional test. From the information you provide, it looks like you could create two or more tests. One would be synthetic data where you know the model-free parameters and you hand calculate the relaxation data (to 64-bit machine precision). The second would be taking some of the Kroenke et al. published data where you know the relaxation data and model-free result. With the synthetic data, you could create a number of tests later on to cover corner cases and hard to optimise cases. Once you have the relaxation data, you create a relax script to analyse this data. This is then placed into a test which runs the script and then checks the optimised model-free parameter values. See the code in test_suite/system_tests/ for plenty of such examples. Obviously these tests will fail at the start, but once the Python code for the eta_xy data is in place and correct, the tests will pass. After the tests have been added, then I can help point you in the right direction with the model-free target function code. There was one abortive effort to handle anisotropic chemical shift tensors and multiple dipolar relaxation data, which as later merged for archival purposes into the CST branch of relax (see https://marc.info/?t=135070783800002&r=2&w=2). This was by Pavel Kaderavek and Petr Novak back in 2008: https://mail.gna.org/public/relax-devel/2008-12/msg00046.html This might be worth having a look at as some of the concepts might be similar. The 'cst_1.2.10' branch might be the most informative, as the 'cst' branch was a failed attempt to keep this code up to date with the relax trunk. Note though that the code developed there was not ideal as the model-free code was simply replicated 6 times for the different data types. Instead I would like to help you so that the input data structure for the model-free functions are modified, and the model-free functional code is reused for all data types. For eta_xy data, do we need the full chemical shift tensor as an input? Regards, Edward P. S. As for implementing the eta_xy data, have you thought of eta_z data as well? If you implement eta_xy support, adding eta_z support in addition should be relatively easy.