Hi Edward

I have also attached the original files I modified. Maybe you have to 
use them? Otherwise I will check tomorrow.

Cheers


Edward d'Auvergne wrote:
> Hi Michael,
>
> I'm having a problem with this patch.  Did you run 'svn up' before
> making it?  Here is some of my output:
>
> [edw...@localhost relax-1.3]$ svn info
> Path: .
> URL: svn+ssh://[email protected]/svn/relax/1.3
> Repository Root: svn+ssh://[email protected]/svn/relax
> Repository UUID: b7916896-f9f9-0310-9fe5-b3996d8957d5
> Revision: 11184
> Node Kind: directory
> Schedule: normal
> Last Changed Author: bugman
> Last Changed Rev: 11175
> Last Changed Date: 2010-05-03 01:05:30 +0200 (Mon, 03 May 2010)
>
> [edw...@localhost relax-1.3]$ patch -p0 < patch
> patching file auto_analyses/relax_fit.py
> patching file auto_analyses/dauvergne_protocol.py
> Hunk #4 FAILED at 229.
> 1 out of 16 hunks FAILED -- saving rejects to file
> auto_analyses/dauvergne_protocol.py.rej
> patching file auto_analyses/noe.py
> [edw...@localhost relax-1.3]$
>
>
> As this says, there is problem with the patching of
> auto_analyses/dauvergne_protocol.py.  Any ideas?
>
>
> I'll make some comments about and review the patch anyway as it is not
> up to standard yet.  Warning, I have a lot here ;)  Ok, here we go:
>
> -    def __init__(self, pipe_name='rx', seq_args=None,
> file_names=None, relax_times=None, int_method='height', mc_num=500):
> +    def __init__(self, filename='rx', pipe_name='rx', seq_args=None,
> directory = None, file_names=None, relax_times=None,
> int_method='height', mc_num=500, pdb_file=None,
> unresolved='unresolved', view_plots=True, heteronuc = 'N', proton =
> 'H', inc = '11'):
>
> The 'filename' arg is confusing - compare to 'file_names'.  This would
> better called 'output_file' or something along those lines.  Same with
> 'directory', this could be called 'output_dir'.  They should also both
> be towards the end of the argument list.  Next, the spacing around '='
> is not to standard.
>
>          @keyword seq_args:      The sequence data (file name, dir,
> mol_name_col, res_num_col, res_name_col, spin_num_col, spin_name_col,
> sep).  These are the arguments to the  sequence.read() user function,
> for more information please see the documentation for that function.
> +        @keyword directory:     The directory, where results files are saved.
> +        @type directory:        str
>          @type seq_args:         list of lists of [str, None or str,
> None or int, None or int, None or int, None or int, None or int, None
> or int, None or int, None or str]
>
> The directory epydoc text has been placed in the middle of the
> seq_args text.  The 'view_plots' flag should also be last, as boolean
> flags should always be the very last function args in Python.
>
>          # Load the sequence.
> -        self.interpreter.sequence.read(file=self.seq_args[0],
> dir=self.seq_args[1], mol_name_col=self.seq_args[2],
> res_num_col=self.seq_args[3], res_name_col=self.seq_args[4],
> spin_num_col=self.seq_args[5], spin_name_col=self.seq_args[6],
> sep=self.seq_args[7])
> +        if self.pdb_file:   # load PDB File
> +            self.interpreter.structure.read_pdb(self.pdb_file)
> +            generic_fns.structure.main.load_spins(spin_id='@N')
>
> +        else:
> +            self.interpreter.sequence.read(file=self.seq_args[0],
> dir=self.seq_args[1], mol_name_col=self.seq_args[2],
> res_num_col=self.seq_args[3], res_name_col=self.seq_args[4],
> spin_num_col=self.seq_args[5], spin_name_col=self.seq_args[6],
> sep=self.seq_args[7])
> +
> +
>
> This is good, allowing the sequence loading from a PDB file.  However
> this code is not acceptable, as you have hardcoded the '@N' atom name.
>  No hardcoded variables will be accepted into relax - or for that
> matter any software project!
>
>          # Deselect unresolved spins.
> -        self.interpreter.deselect.read(file=self.unresolved)
> -
> +        selection.desel_read(file=self.unresolved, dir=None,
> spin_id_col=None, mol_name_col=None, res_num_col=1, res_name_col=None,
> spin_num_col=None, spin_name_col=None, sep=None, spin_id=None,
> boolean='AND', change_all=None)
> +        print 'relax> deselect.read(selected residues)'
> +
>
> There is another way of doing this - allowing file objects to be
> accepted by the user function.  The print statement is not good - what
> if the user function is renamed in the future?  No one will know what
> this means or where it comes from.  In the prompt code, instead of:
>
> arg_check.is_str(file, 'file name')
>
> we just use:
>
> arg_check.is_str_or_inst(file, 'file name')
>
> Then the original self.interpreter.deselect.read(file=self.unresolved)
> code can be used for file objects.
>
>          # Save the relaxation rates.
> -        self.interpreter.value.write(param='rx', file='rx.out', force=True)
> +        self.interpreter.value.write(param='rx',
> file=self.filename+'.out', dir=self.directory, force=True)
>
> Here the '.out' should be added by the calling code, and not added
> here.  This is basic API logic.  The calling code says the output file
> is 'xyz', therefore the API should provide 'xyz' and not 'xyz.out'.
> The GUI should add the '.out', as this is a nightmare for the
> scripting UI.
>
>          # Save the program state.
> -        self.interpreter.state.save('rx.save', force=True)
> +        self.interpreter.state.save(self.filename+'.save',
> dir=self.directory, force=True)
>
> This needs a check that self.directory is not None.
>
> +from generic_fns import selection
>
> These imports are not needed.  See my comments above about modifying
> the user functions themselves to allow for file objects.
>
> -    def __init__(self, diff_model=None, mf_models=['m0', 'm1', 'm2',
> 'm3', 'm4', 'm5', 'm6', 'm7', 'm8', 'm9'], local_tm_models=['tm0',
> 'tm1', 'tm2', 'tm3', 'tm4', 'tm5', 'tm6', 'tm7', 'tm8', 'tm9'],
> pdb_file=None, seq_args=None, het_name=None, relax_data=None,
> unres=None, exclude=None, bond_length=None, csa=None, hetnuc=None,
> proton='1H', grid_inc=11, min_algor='newton', mc_num=500,
> user_fns=None, conv_loop=True):
> +    def __init__(self, save_dir=None, diff_model=None,
> mf_models=['m0', 'm1', 'm2', 'm3', 'm4', 'm5', 'm6', 'm7', 'm8',
> 'm9'], local_tm_models=['tm0', 'tm1', 'tm2', 'tm3', 'tm4', 'tm5',
> 'tm6', 'tm7', 'tm8', 'tm9'], pdb_file=None, seq_args=None,
> het_name=None, relax_data=None, unres=None, exclude=None,
> bond_length=None, csa=None, hetnuc=None, proton='1H', grid_inc=11,
> min_algor='newton', mc_num=500, user_fns=None, conv_loop=True):
>
> The 'save_dir' arg should be to the end (but before the boolean args).
>  It also is not described in the epydoc text - this is quite important
> in this API.
>
> +        # Project directory (i.e. directory containing the model-free
> model results and the newly generated files)
> +        if save_dir:
> +            self.save_dir = save_dir+sep
> +        else:
> +            self.save_dir = ''
> +
>
> I like this!  It's a very good flexibility addition.
>
>          # Unresolved and exclude files.
> -        if self.unres and not isinstance(self.unres, str):
> -            raise RelaxError("The unres user variable '%s' is
> incorrectly set.  It should either be a string or None." % self.unres)
> +
> +        # FIXME: This is switched off as the GUI uses a relax dummy file.
> +        #if self.unres and not isinstance(self.unres, str):
> +        #    raise RelaxError("The unres user variable '%s' is
> incorrectly set.  It should either be a string or None." % self.unres)
>
> See arg_check.is_str_or_inst() for the correct way of checking for the
> file or DummyFileObject objects.
>
> +            # Files are in same directory / no directory specified
> +            if self.save_dir =='':
> +                dir_list = listdir(getcwd()+sep+model)
> +
> +            # Directory is specified
> +            else:
> +                dir_list = listdir(self.save_dir+model)
>
> Here:
>
> +            if self.save_dir =='':
>
> should be replaced by "if not self.save_dir:"
>
> -            self.interpreter.results.write(file='results', dir=dir, 
> force=True)
> +            self.interpreter.results.write(file=self.save_dir+'results',
> dir=dir, force=True)
>
> This is a bug!  self.save_dir should be the first part of the 'dir' arg.
>
> -                self.interpreter.deselect.read(file=self.unres)
> +                selection.desel_read(file=self.unres, dir=None,
> spin_id_col=None, mol_name_col=None, res_num_col=1, res_name_col=None,
> spin_num_col=None, spin_name_col=None, sep=None, spin_id=None,
> boolean='AND', change_all=None)
> +                print 'relax> deselect.read(selected residues)'
>
> The user function should be modified instead.
>
> -            self.interpreter.value.set(self.hetnuc, 'heteronucleus')
> -            self.interpreter.value.set(self.proton, 'proton')
>
> +            # Convert hetero nucleus.
> +            if self.hetnuc == 'N':
> +                hetnuc = '15N'
> +            if self.hetnuc == 'C':
> +                hetnuc = '13C'
> +            self.interpreter.value.set(hetnuc,'heteronucleus')
> +            self.interpreter.value.set('1H', 'proton')
> +
>
> This code is not acceptable.  The 'hetnun' arg is defined as "The
> heteronucleus type, i.e. '15N', '13C', etc.", therefore 'N' should not
> be passed in by the calling code.  The proton type is also passed in,
> as it may not alway be 1H ;)
>
>  class NOE_calc:
> -    def __init__(self, pipe_name='noe', noe_ref = None, noe_ref_rmsd
> = None, noe_sat = None, noe_sat_rmsd = None, freq = '', unresolved =
> None, pdb_file = None, results_folder = None, int_method='height',
> mc_num=500):
> +    def __init__(self, filename='noe', seq_args=None,
> pipe_name='noe', noe_ref=None, noe_ref_rmsd=None, noe_sat=None,
> noe_sat_rmsd=None, unresolved=None, pdb_file=None,
> results_folder=None, int_method='height', heteronuc = 'N', proton =
> 'H'):
>
> The 'filename' arg could be called 'output_file' and be to the end.
> The spacing around '=' is also not correct.  And why is 'mc_num'
> deleted?  This is a bug!
>
> -        @keyword mc_num:        The number of Monte Carlo simulations
> to be used for error analysis at the end of the analysis.
> -        @type mc_num:           int
> +        @type heteronuc:        str
> +        @keyword proton:        Label of proton.
> +        @type proton:           str
>          """
>
> Epydoc compilation '$ scons api_manual_html' fails here as there is no
> '@keyword heteronuc'.
>
> +        if self.pdb_file:   # load PDB File
>              self.interpreter.structure.read_pdb(self.pdb_file)
>              generic_fns.structure.main.load_spins(spin_id='@N')
>
> The '@N' needs to go - it should be an API arg.  'N' is not standard
> in protein structures in the PDB, and we need support for the Trp
> indole NH, RNA, DNA, sugars, and small molecules.
>
>          # Deselect unresolved spins.
> -        if self.unresolved == '':
> -            print ''
> -        else:
> -            self.interpreter.deselect.read(file='unresolved') #
> FIXME. relax should read the list without creating a file
> +        selection.desel_read(file=self.unresolved, dir=None,
> spin_id_col=None, mol_name_col=None, res_num_col=1, res_name_col=None,
> spin_num_col=None, spin_name_col=None, sep=None, spin_id=None,
> boolean='AND', change_all=None)
> +        print 'relax> deselect.read(selected residues)'
>
> Again this requires user function modification instead.
>
>          # Save the NOEs.
> -        self.interpreter.value.write(param='noe',
> file='noe_'+str(self.frq)+'.out', dir = self.results_folder,
> force=True)
> +        self.interpreter.value.write(param='noe',
> file=self.filename+'.out', dir = self.results_folder, force=True)
>
> The '.out' needs to be added by the caller, and not be performed behind the 
> API.
>
>
> Ok, that's it for the comments.  These suggestions are very important
> as these changes will affect all relax users.  As there are so many
> issues that will hurt current users, I would very, very strongly
> recommend looking at each change one by one, making one patch per
> change, and sending that in.  It cannot be accepted otherwise.  If an
> RNA person sends in a bug report about a fatal regression, then I need
> to revert (permanently remove) the offending patch.  Can you imagine
> if I deleted every single change here because of one or two offending
> lines?
>
> Most of the changes here are quite useful, and many are required by
> the GUI.  So the way to get this in is to pick an idea - i.e. the
> output files and directories and make just those changes to a clean
> 1.3 line copy.  Then send that as a patch.  After I check it and apply
> it, you can then make the next change, and so on.  We can get this
> code integrated, but this patch is far too damaging for me to accept
> it in its current form.
>
> Regards,
>
> Edward
>
>
>
>
>
>
>
>
>
> On 10 May 2010 08:14, Michael Bieri <[email protected]> wrote:
>   
>> Follow-up Comment #49, task #6847 (project relax):
>>
>> Description for major patch:
>> ============================
>>
>>
>> This is a major patch for the automatic analysis protocols noe.py,
>> relax_fit.py and dauvergne_protocol.py. The need for these changes is the
>> smooth integration of the GUI and the other interfaces with automatic
>> protocols.
>>
>> Changes include:
>> - Project directory can be specified.
>> - Unresolved residues/spins are also handled using relax dummy objects.
>> - Sequence is either loaded from a pdb file or a sequence file. Standard is a
>> sequence file, but if a PDB file is available, it will be used.
>> - optimized for parameter and global settings import of different
>> interfaces.
>> - Automatic display of Grace files after noe and Rx calculations can be
>> blocked.
>> - additionally, some minor bugs are fixed.
>>
>> (file #9142)
>>    _______________________________________________________
>>
>> Additional Item Attachment:
>>
>> File name: patch                          Size:24 KB
>>
>>
>>    _______________________________________________________
>>
>> Reply to this item at:
>>
>>  <http://gna.org/task/?6847>
>>
>> _______________________________________________
>>  Nachricht geschickt von/durch Gna!
>>  http://gna.org/
>>
>>
>> _______________________________________________
>> 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

Reply via email to