Hi,
This is a good idea. These tests could be separate from other ones and
only informative for non essential dependencies such as ModelFree4.
The output of the test-suite could be something like :
==========
###################################
# Summary of the relax test suite #
###################################
Required dependencies .............................. [ OK ]
minfx .............................. ( ok )
python ............................. ( ok )
etc.
Optional dependencies .............................. [ OK ]
dasha .............................. ( ok )
modelfree4 ......................... ( ok )
etc.
System/functional tests ............................ [ OK ]
Unit tests ......................................... [ OK ]
Synopsis ........................................... [ OK ]
==========
instead of the actual :
==========
###################################
# Summary of the relax test suite #
###################################
System/functional tests ............................ [ OK ]
Unit tests ......................................... [ OK ]
Synopsis ........................................... [ OK ]
==========
I think this would be really informative to the user which would see all
required and optional programs at once.
Regards,
Séb
Edward d'Auvergne wrote:
> Hi,
>
> There could still be a better way of doing this, although I'm not sure
> how it could be implemented. The problem is that all may seem fine to
> the user (or to me) but due to the improper set up of the modelfree4
> program, the test passes but is silent. Maybe a way that this could
> be done to properly inform the person running the test-suite would be
> to add another category of test (on top of the system/functional test
> framework and the unit test framework) which would check for both for
> python dependencies and for the presence (and maybe proper execution)
> of external programs. I'll have to think about this one for a while.
>
> Regards,
>
> Edward
>
>
> On Tue, Jul 29, 2008 at 3:00 PM, Sébastien Morin
> <[EMAIL PROTECTED]> wrote:
>
>> Hi Ed,
>>
>> I agree with what you propose here. It is important that installation of
>> ModelFree4 stays a possibility, not an obligation, while, for those with
>> an installed program, the tools in relax should be tested to see if they
>> work.
>>
>> I think your approach in r7017
>> (http://svn.gna.org/viewcvs/relax?rev=7017&view=rev) is really perfect
>> for this purpose and has the advantage of leaving complete flexibility
>> for the user.
>>
>> Regards,
>>
>>
>> Séb
>>
>>
>>
>>
>> Edward d'Auvergne wrote:
>>
>>> Hi,
>>>
>>> This is a difficult question. At the moment, I think the simplest
>>> solution would be to use the relax_io.test_binary() function to see if
>>> these binaries are located in the system path and are executable and
>>> if not skip the test (essentially just return without executing the
>>> main part of the test, hence the test counts as a pass). I'll add
>>> this to your new Modelfree4 system test to see if it works. Ideally
>>> though, the system tests should report that this test could not be run
>>> as the binary could not be found, but still the system tests should
>>> pass. Otherwise the failing system test will make users think that
>>> they need to install Modelfree4, which is not possible on all
>>> platforms.
>>>
>>> Additionally in this test, a temporary directory should be given to
>>> Modelfree4 to dump it's output into. This directory would then be
>>> destroyed by the tearDown() method, no matter what happens in the
>>> test.
>>>
>>> Regards,
>>>
>>> Edward
>>>
>>>
>>> On Mon, Jul 28, 2008 at 10:06 PM, Sébastien Morin
>>> <[EMAIL PROTECTED]> wrote:
>>>
>>>
>>>> Hi Ed (and others)
>>>>
>>>> I don't know what you think about this... as some people might not have
>>>> ModelFree4 installed and could not be interested in the features related
>>>> to it... On the other hand, we most have system tests for interaction
>>>> with ModelFree4 stuff...
>>>>
>>>> The same applies for Dasha...
>>>>
>>>> What do you think ?
>>>>
>>>> Regards,
>>>>
>>>>
>>>> Séb
>>>>
>>>>
>>>>
>>>> [EMAIL PROTECTED] wrote:
>>>>
>>>>
>>>>> Author: semor
>>>>> Date: Mon Jul 28 21:36:19 2008
>>>>> New Revision: 6993
>>>>>
>>>>> URL: http://svn.gna.org/viewcvs/relax?rev=6993&view=rev
>>>>> Log:
>>>>> Started to add system tests for model-free analysis using Modelfree4.
>>>>>
>>>>>
>>>>> Added:
>>>>> 1.3/test_suite/system_tests/palmer.py
>>>>> 1.3/test_suite/system_tests/scripts/palmer.py
>>>>> Modified:
>>>>> 1.3/test_suite/system_tests/__init__.py
>>>>>
>>>>> Modified: 1.3/test_suite/system_tests/__init__.py
>>>>> URL:
>>>>> http://svn.gna.org/viewcvs/relax/1.3/test_suite/system_tests/__init__.py?rev=6993&r1=6992&r2=6993&view=diff
>>>>> ==============================================================================
>>>>> --- 1.3/test_suite/system_tests/__init__.py (original)
>>>>> +++ 1.3/test_suite/system_tests/__init__.py Mon Jul 28 21:36:19 2008
>>>>> @@ -41,6 +41,7 @@
>>>>> from model_selection import Modsel
>>>>> from n_state_model import N_state_model
>>>>> from nmrview import NMRView
>>>>> +from palmer import Palmer
>>>>> from pipe_create import Pipe_create
>>>>> from relax_fit import Relax_fit
>>>>> from results import Results
>>>>> @@ -57,6 +58,7 @@
>>>>> 'model_selection',
>>>>> 'n_state_model',
>>>>> 'nmrview',
>>>>> + 'palmer',
>>>>> 'pipe_create',
>>>>> 'relax_fit',
>>>>> 'results',
>>>>> @@ -89,6 +91,7 @@
>>>>>
>>>>> suite_array.append(TestLoader().loadTestsFromTestCase(Load_spins))
>>>>> suite_array.append(TestLoader().loadTestsFromTestCase(Mf))
>>>>> suite_array.append(TestLoader().loadTestsFromTestCase(Modsel))
>>>>> + suite_array.append(TestLoader().loadTestsFromTestCase(Palmer))
>>>>> suite_array.append(TestLoader().loadTestsFromTestCase(Relax_fit))
>>>>> suite_array.append(TestLoader().loadTestsFromTestCase(Results))
>>>>> suite_array.append(TestLoader().loadTestsFromTestCase(Sequence))
>>>>>
>>>>> Added: 1.3/test_suite/system_tests/palmer.py
>>>>> URL:
>>>>> http://svn.gna.org/viewcvs/relax/1.3/test_suite/system_tests/palmer.py?rev=6993&view=auto
>>>>> ==============================================================================
>>>>> --- 1.3/test_suite/system_tests/palmer.py (added)
>>>>> +++ 1.3/test_suite/system_tests/palmer.py Mon Jul 28 21:36:19 2008
>>>>> @@ -1,0 +1,39 @@
>>>>> +###############################################################################
>>>>> +#
>>>>> #
>>>>> +# Copyright (C) 2008 Sebastien Morin
>>>>> #
>>>>> +#
>>>>> #
>>>>> +# This file is part of the program relax.
>>>>> #
>>>>> +#
>>>>> #
>>>>> +# relax is free software; you can redistribute it and/or modify
>>>>> #
>>>>> +# it under the terms of the GNU General Public License as published by
>>>>> #
>>>>> +# the Free Software Foundation; either version 2 of the License, or
>>>>> #
>>>>> +# (at your option) any later version.
>>>>> #
>>>>> +#
>>>>> #
>>>>> +# relax is distributed in the hope that it will be useful,
>>>>> #
>>>>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>>>>> #
>>>>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>>>>> #
>>>>> +# GNU General Public License for more details.
>>>>> #
>>>>> +#
>>>>> #
>>>>> +# You should have received a copy of the GNU General Public License
>>>>> #
>>>>> +# along with relax; if not, write to the Free Software
>>>>> #
>>>>> +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
>>>>> USA #
>>>>> +#
>>>>> #
>>>>> +###############################################################################
>>>>> +
>>>>> +# Python module imports.
>>>>> +import sys
>>>>> +from unittest import TestCase
>>>>> +
>>>>> +
>>>>> +class Palmer(TestCase):
>>>>> + """Class for testing various aspects specific to model-free analysis
>>>>> using the program
>>>>> + 'Modelfree4'.
>>>>> + """
>>>>> +
>>>>> + def test_palmer_stage_1(self):
>>>>> + """Test a complete model-free analysis using the program
>>>>> 'Modelfree4'."""
>>>>> +
>>>>> + # Execute the script.
>>>>> + self.relax.interpreter.run(script_file=sys.path[-1] +
>>>>> '/test_suite/system_tests/scripts/palmer.py')
>>>>> +
>>>>> +
>>>>>
>>>>> Added: 1.3/test_suite/system_tests/scripts/palmer.py
>>>>> URL:
>>>>> http://svn.gna.org/viewcvs/relax/1.3/test_suite/system_tests/scripts/palmer.py?rev=6993&view=auto
>>>>> ==============================================================================
>>>>> --- 1.3/test_suite/system_tests/scripts/palmer.py (added)
>>>>> +++ 1.3/test_suite/system_tests/scripts/palmer.py Mon Jul 28 21:36:19 2008
>>>>> @@ -1,0 +1,136 @@
>>>>> +# Script for model-free analysis using the program 'Modelfree4'.
>>>>> +
>>>>> +# Python module imports.
>>>>> +import sys
>>>>> +
>>>>> +# The RelaxError system.
>>>>> +from relax_errors import RelaxError
>>>>> +
>>>>> +# Set the stage of analysis.
>>>>> +#
>>>>> +# The three stages in this script are:
>>>>> +# Stage 1: Initial model-free minimisation.
>>>>> +# Stage 2: Model-free model selection.
>>>>> +# Stage 3: Final optimisation of diffusion tensor parameters together
>>>>> with model-free parameters.
>>>>> +
>>>>> +
>>>>> +# Functions.
>>>>> +
>>>>> +def exec_stage_1(runs):
>>>>> + """Stage 1 function.
>>>>> +
>>>>> + Initial model-free minimisation.
>>>>> + """
>>>>> +
>>>>> + # Loop over the runs.
>>>>> + for name in runs:
>>>>> + # Create the run.
>>>>> + print "\n\n# " + name + " #"
>>>>> + pipe.create(name, 'mf')
>>>>> +
>>>>> + # Load the sequence.
>>>>> + sequence.read(sys.path[-1] +
>>>>> '/test_suite/system_tests/data/jw_mapping/noe.dat')
>>>>> +
>>>>> + # PDB.
>>>>> + #structure.read_pdb(name, 'Ap4Aase_new_3.pdb')
>>>>> +
>>>>> + # Load the relaxation data.
>>>>> + relax_data.read('R1', '600', 600.0 * 1e6, sys.path[-1] +
>>>>> '/test_suite/system_tests/data/jw_mapping/R1.dat')
>>>>> + relax_data.read('R2', '600', 600.0 * 1e6, sys.path[-1] +
>>>>> '/test_suite/system_tests/data/jw_mapping/R2.dat')
>>>>> + relax_data.read('NOE', '600', 600.0 * 1e6, sys.path[-1] +
>>>>> '/test_suite/system_tests/data/jw_mapping/noe.dat')
>>>>> +
>>>>> + # Setup other values.
>>>>> + diffusion_tensor.init(1e-8)
>>>>> + value.set(NUCLEI, 'heteronucleus')
>>>>> + value.set(1.02 * 1e-10, 'bond_length')
>>>>> + value.set(-172 * 1e-6, 'csa')
>>>>> +
>>>>> + # Select the model-free model.
>>>>> + model_free.select_model(model=name)
>>>>> +
>>>>> + # Create the Modelfree4 files.
>>>>> + palmer.create(force=True, sims=0)
>>>>> +
>>>>> + # Run Modelfree4.
>>>>> + palmer.execute(force=True)
>>>>> +
>>>>> + # Save the program state.
>>>>> + state.save('stage1.save', force=True)
>>>>> +
>>>>> +
>>>>> +def exec_stage_2(runs):
>>>>> + """Stage 2 function.
>>>>> +
>>>>> + Model-free model selection.
>>>>> + """
>>>>> +
>>>>> + # Load the saved state from stage 1.
>>>>> + state.load('stage1.save')
>>>>> +
>>>>> + # Print out.
>>>>> + print "\n\nLoading all the Modelfree 4 data."
>>>>> +
>>>>> + # Extract the Modelfree4 data from the 'mfout' files.
>>>>> + for name in runs:
>>>>> + palmer.extract()
>>>>> +
>>>>> + # Print out.
>>>>> + print "\n\nModel selection."
>>>>> +
>>>>> + # Create the model selection run.
>>>>> + name = 'aic'
>>>>> + pipe.create(name, 'mf')
>>>>> +
>>>>> + # Model selection.
>>>>> + model_selection(method='AIC', modsel_run=name)
>>>>> +
>>>>> + # Write the results.
>>>>> + results.write(file='results', force=True)
>>>>> +
>>>>> + # Save the program state.
>>>>> + state.save('stage2.save', force=True)
>>>>> +
>>>>> +
>>>>> +def exec_stage_3():
>>>>> + """Stage 3 function.
>>>>> +
>>>>> + Final optimisation of diffusion tensor parameters together with
>>>>> model-free parameters.
>>>>> + """
>>>>> +
>>>>> + # Load the saved state from stage 2.
>>>>> + state.load('stage2.save')
>>>>> +
>>>>> + # Set the run name.
>>>>> + name = 'aic'
>>>>> +
>>>>> + # Let the diffusion tensor parameters be optimised.
>>>>> + fix(name, 'diff', 0)
>>>>> +
>>>>> + # Create the Modelfree4 files (change sims as needed, see below).
>>>>> + palmer.create(dir='final', force=True, sims=0)
>>>>> +
>>>>> + # Run Modelfree4.
>>>>> + palmer.execute(dir='final', force=True)
>>>>> +
>>>>> + # Extract the Modelfree4 data from the 'mfout' file.
>>>>> + palmer.extract(dir='final')
>>>>> +
>>>>> + # Save the program state.
>>>>> + state.save('stage3.save', force=True)
>>>>> +
>>>>> +
>>>>> +# Main section of the script.
>>>>> +#############################
>>>>> +
>>>>> +# Nuclei type.
>>>>> +NUCLEI = '15N'
>>>>> +
>>>>> +# Set the run name (also the name of a preset model-free model).
>>>>> +runs = ['m1', 'm2', 'm3']
>>>>> +
>>>>> +# Run the stages.
>>>>> +exec_stage_1(runs)
>>>>> +exec_stage_2(runs)
>>>>> +exec_stage_3()
>>>>> +
>>>>> +# Either repeat all the above with the optimised diffusion tensor or run
>>>>> Monte Carlo simulations on the final results.
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> relax (http://nmr-relax.com)
>>>>>
>>>>> This is the relax-commits 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-commits
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>> _______________________________________________
>>>> relax (http://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://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