Hi Edward. Thanks for the lengthy explanation, and I hope that I can honor your effort in explaining. :-)
I would be interested to get these things to work in relax, which we most often use in our lab: - off-resonance T1rho - CPMG -- Fast (Meiboom) -- slow/intermediate (Richard-Carver<http://dx.doi.org.ep.fjernadgang.kb.dk/10.1016/0022-2364(72)90090-X> ) -- very slow (Tollinger/Kay equation <http://dx.doi.org/10.1021/ja011300z>) So I will go for the Tollinger, since that is the "easiest" next to the fast. I would need to do the code development at my Windows machine, and I checked out the relax-disp branch yesterday. Should I/How do I compile with scons under windows? Or should I install the pre-compiled Windows binaries, and replace the files? Best Troels Troels Emtekær Linnet Ved kløvermarken 9, 1.th 2300 København S Mobil: +45 60210234 2013/5/7 Edward d'Auvergne <[email protected]> > Hi again, > > Just for reference in the mailing list archives, the sub-thread has > appeared as a new thread at > http://thread.gmane.org/gmane.science.nmr.relax.devel/3835. > > Regards, > > Edward > > > > > On 7 May 2013 11:36, Edward d'Auvergne <[email protected]> wrote: > > Hi Troels, > > > > This sub-thread (which will appear at > > http://thread.gmane.org/gmane.science.nmr.relax.devel/3833) will > > hopefully be a mini-tutorial covering the development of the > > relax_disp branch. Before you can be accepted as a relax developer > > with commit access to the source code repository, you should first > > submit changes as patches. This takes longer initially, but it allows > > the other relax developers to see how you code and if you are > > following the coding conventions as described in the development > > chapter of the relax manual > > (http://www.nmr-relax.com/manual/relax_development.html). I can give > > you feedback as you go as to how to improve the code to fit into > > relax. We, the relax developers, will after a few patches have a > > private vote to accept you as a relax developer. This is standard > > practice in an open source project. The full procedure for becoming a > > developer is detailed in the 'Committers' section of the manual > > (http://www.nmr-relax.com/manual/Committers.html). The PDF version of > > the manual is easier to read > > (http://download.gna.org/relax/manual/relax.pdf). Patches can be > > posted to the patch tracker (https://gna.org/patch/?group=relax). > > > > relax development begins and ends with the test suite. The idea is > > that, before any code is present, a relax system test must be created. > > This allows you to develop the ideas for how the UI should work with > > the analysis - i.e. which new user functions will need to be created > > and which ones will need to be expanded. A script is added to > > test_suite/system_tests/scripts/relax_disp/ and then a test added to > > test_suite/system_tests/relax_disp.py which executes the script and > > then checks the data and results. For example see the script > > 'test_suite/system_tests/scripts/relax_disp/hansen_data.py' and the > > function test_hansen_cpmg_data_fast_2site() in the file > > 'test_suite/system_tests/relax_disp.py'. This is obviously not > > complete as only the script is executed - the results are not yet > > checked (as we do not know what the result for the optimised model > > should be yet). This individual test can be executed with the > > command: > > > > $ relax -s Relax_disp.test_hansen_cpmg_data_fast_2site > > > > This test, as well as the other Relax_disp tests, were created by > > Sebastien Morin when he started the development of the relax_disp > > branch. I have renamed everything since he added it, and will > > probably do so again soon. It is best to develop for the script UI > > first - the GUI will later be modified around the graphical versions > > of the user functions, or directly accessing the back end of the user > > function. Due to the advanced state of the relax_disp branch, you > > probably do not need to worry about new user functions. This may be > > needed if you would like to expand the analysis to new types of data > > (for example off-resonance R1rho where R1 data need to be measured and > > used in the analysis, H/D exchange, etc.). > > > > The test suite is one area which can be expanded to handle the > > different CPMG models. The testing is currently not very extensive. > > For example before a new dispersion model is added to relax, it would > > be good if synthetic data were to be created in an external program (a > > Python script, Matlab, Mathematica, Maxima, etc.). It is very > > important that relax is not used to create the data. Synthetic data > > is very important for making sure that relax obtains the correct > > result, as you know what the result should be. With measured data you > > can never really know what the true result is - this is the entire > > point of the mathematical field of modelling (this field makes that of > > NMR look very, very small). Synthetic data is also useful for double > > checking results against other relaxation dispersion software (for > > reference: NESSY - http://home.gna.org/nessy/; CPMGFit - > > http://www.palmer.hs.columbia.edu/software/cpmgfit.html; ShereKhan - > > http://sherekhan.bionmr.org/; CATIA - > > http://www.biochem.ucl.ac.uk/hansen/catia/). Data could also be taken > > from Art Palmer's CPMGFit manual > > (http://www.palmer.hs.columbia.edu/software/cpmgfit_manual.html). > > This would need to be converted into peak intensities in a peak list > > file, but that is easy enough by simply picking random I0 values for > > the exponential curves. The data could be passed quickly through each > > of the models of the CPMGFit program and results noted. Then the > > results would be added to the checks of different relax system tests. > > > > Each different data set used in the testing process should be located > > in its own directory in test_suite/shared_data/dispersion/. That > > directory can include the data and all scripts used to generate the > > data and, for reference, it can also contain subdirectories for > > holding the input and output for different programs (as long as the > > files are not too big). > > > > The current state of the branch is that all of the user functions are > > pretty close to complete. The user function consists of a front end > > definition in user_functions/, and a backend either in pipe_control/ > > or specific_analyses/. The relaxation dispersion target function > > setup for optimisation is close to complete. You can see this in the > > minimise() method of the specific_analyses/relax_disp/__init__.py > > file, and then the __init__() method of the class in > > target_functions/relax_disp.py. As you will see in the model_loop() > > method of the specific_analyses/relax_disp/__init__.py code, > > clustering of spin systems is already part of this design - everything > > handles a group of spins assuming the same parameter values. One > > missing feature that I might work on soon is the handling of missing > > input data, as this affects my current work. This is a problem > > currently caught by the > > test_suite/shared_data/dispersion/Hansen/relax_disp.py script, as > > residue :71 is missing data at one field strength. But once the > > dispersion tests have been expanded, this can be tested properly by > > deleting data for single points on the exponential curves, deleting > > entire exponential curves (or dispersion points for the two-point > > analysis type), or all data from a single spectrometer field strength > > for a single spin. > > > > So I would suggest that you pick one of the dispersion models you are > > interested in and try to implement that. I am working on the Luz and > > Meiboom, 1963 model, but all of the other models are safe to work on. > > Just say which you are interested in so that we don't both change the > > same code. The system test data would come first. The formula can be > > taken, a set of parameters for 2-3 spins chosen, and a simple script > > written to generate the R2eff data, importantly at multiple magnetic > > field strengths. That data can then be converted into a generic peak > > list for different time periods on a basic 2-parameter exponential > > curve. See the 'File formats' section of the > > spectrum.read_intensities user function docstring, for example by > > typing help(spectrum.read_intensities) in the prompt UI. In the same > > script the creation of input files for other programs could be added, > > possibly at a later stage, and the data quickly run through CPMGFit, > > for example, for a sanity check. > > > > If you do test the other programs, you may encounter a severe bug in > > one of their models. No software is bug free. In such a case, we > > should communicate with the authors in private and they can decide > > what to do. You can see that I did this with Art Palmer's Modelfree > > program at > http://biochemistry.hs.columbia.edu/labs/palmer/software/modelfree.html. > > Versions 4.16 and 4.20 consist of patches that I send to Art to fix > > compilation issues and other bugs (I pointed out the grid search > > problem due to the singular matrix failure of the Levenberg-Marquardt > > algorithm and Art made that change himself). > > > > Once some data has been created and files attached to the patch > > tracker (https://gna.org/patch/?group=relax), then the relax script > > can be written and added to > > test_suite/system_tests/scripts/relax_disp/. The best way would > > probably be for one of the current scripts to be copied (by me to > > start with) in the repository and then you make small changes to it > > and send the patches created with: > > > > $ svn diff > patch > > > > Then the script execution and data and parameter checking code can be > > added to test_suite/system_tests/relax_disp.py - again you can look at > > the other methods in that file and create a new one by copying how an > > old method operates. In that system test you would check that the > > original parameters have been found. > > > > At this stage, the test should run fine up to the grid_search user > > function, and then fail (or possibly at the relax_disp.select_model > > user function call in the script depending on whether you use the > > auto-analysis code in auto_analyses.relax_disp or not). This is the > > point where the model can be implemented. Then you would take the > > following steps: > > > > - Add a description of the new model with the equation and reference > > to the user_functions.relax_disp module. > > > > - Add the model and its parameters to the _select_model() method of > > the specific_analyses/relax_disp/__init__.py file. > > > > - Add any new parameter definitions to the top of the > > specific_analyses/relax_disp/__init__.py file in the __init__() method > > as needed. If new parameters are needed, then there are various > > places in the specific_analyses.relax_disp package where support will > > be needed, mainly in the specific_analyses.relax_disp.parameters > > module. > > > > - Create a new module in the lib.dispersion package for the model > > function. This module will eventually hold the model function, the > > gradient (each partial derivative with respect to each parameter would > > be in a different function), and the Hessian (the matrix of second > > partial derivatives). Having the gradient and Hessian will allow for > > the more powerful optimisation algorithms to be used. > > > > - Add a new method to target_functions/relax_disp.py which uses the > > new code in lib.dispersion to calculate R2eff values, combine this > > with the chi2 function, and return the chi-squared value (see the > > current func_LM63() method for how to do this). > > > > - Finally, see if the system test passes. If not, then it is time to > debug. > > > > During these steps, the unit test part of the test suite can be used > > to make sure that individual functions and methods behave correctly. > > This is useful as users will always find a way to break your code. > > Once the system test passes, then you will know that the > > implementation is complete and fully functional. > > > > > > If your interest is in the numerical integration of the > > Bloch-McConnell equations, then the procedure might be slightly > > different. We would have to discuss this in more detail, with paper > > references and the necessary equations. But I think that all of this > > can be handled in a module of the lib.dispersion package, and the rest > > of the above detailed procedure would be the same. I hope this post > > wasn't too long for you! > > > > Regards, > > > > Edward > > > > > > > > > > On 6 May 2013 21:14, Troels Emtekær Linnet <[email protected]> wrote: > >> Hi Edward. > >> > >> When you have completed your ideas of change to the > >> disp branch, could you send me a notits? > >> > >> And maybe a script file, how to launch the code? > >> > >> Then I could try to figure out where I should extend new code. > >> > >> Best > >> Troels > >> > >> > >> _______________________________________________ > >> relax (http://www.nmr-relax.com) > >> > >> This is the relax-devel mailing list > >> [email protected] > >> > >> To unsubscribe from this list, get a password > >> reminder, or change your subscription options, > >> visit the list information page at > >> https://mail.gna.org/listinfo/relax-devel > >> >
_______________________________________________ relax (http://www.nmr-relax.com) This is the relax-devel mailing list [email protected] To unsubscribe from this list, get a password reminder, or change your subscription options, visit the list information page at https://mail.gna.org/listinfo/relax-devel

