Seb,

I've had a close look at the changes of this revision and noticed a few
important bugs introduced.  Please see below.


On Fri, 2008-04-11 at 14:46 +0000, [EMAIL PROTECTED] wrote:
> Author: semor
> Date: Fri Apr 11 16:46:39 2008
> New Revision: 5587
> 
> URL: http://svn.gna.org/viewcvs/relax?rev=5587&view=rev
> Log:
> Aliased the current data pipe and removed the run arguments.
> 
> 
> Modified:
>     1.3/generic_fns/palmer.py
> 
> Modified: 1.3/generic_fns/palmer.py
> URL: 
> http://svn.gna.org/viewcvs/relax/1.3/generic_fns/palmer.py?rev=5587&r1=5586&r2=5587&view=diff
> ==============================================================================
> --- 1.3/generic_fns/palmer.py (original)
> +++ 1.3/generic_fns/palmer.py Fri Apr 11 16:46:39 2008
> @@ -34,6 +34,7 @@
>  
>  # relax module imports.
>  from data import Data as relax_data_store
> +from generic_fns.selection import exists_mol_res_spin_data, spin_loop
>  from relax_errors import RelaxDirError, RelaxFileError, 
> RelaxFileOverwriteError, RelaxNoPdbError, RelaxNoPipeError, 
> RelaxNoSequenceError, RelaxNucleusError, RelaxProgFailError
>  
> 
> @@ -48,7 +49,7 @@
>          self.relax = relax
>  
> 
> -    def create(self, run, dir, force, binary, diff_search, sims, sim_type, 
> trim, steps, constraints, nucleus, atom1, atom2):
> +    def create(self, dir, force, binary, diff_search, sims, sim_type, trim, 
> steps, constraints, nucleus, atom1, atom2, spin_id=None):
>          """Function for creating the Modelfree4 input files.

This spin_id argument could come in handy!


>          The following files are created:
> @@ -59,29 +60,24 @@
>              dir/run.sh
>          """
>  
> -        # Test if the run exists.
> -        if not run in relax_data_store.run_names:
> -            raise RelaxNoPipeError, run

This test should be replaced rather than deleted.  For example see line
442 of specific_fns/consistency_tests.py (1.3 line, r5603).


> +        # Alias the current data pipe.
> +        cdp = relax_data_store[relax_data_store.current_pipe]
>  
>          # Test if sequence data is loaded.
> -        if not relax_data_store.res.has_key(run):
> -            raise RelaxNoSequenceError, run
> +        if not exists_mol_res_spin_data():
> +            raise RelaxNoSequenceError
>  
>          # Test if the PDB file is loaded (for the spheroid and ellipsoid).
> -        if not relax_data_store.diff[run].type == 'sphere' and not 
> relax_data_store.pdb.has_key(run):
> -            raise RelaxNoPdbError, run
> -
> -        # Test if the nucleus type has been set.
> -        if not hasattr(relax_data_store, 'gx'):
> -            raise RelaxNucleusError
> +        if not cdp.diff.type == 'sphere' and not cdp.pdb.has_key:
> +            raise RelaxNoPdbError

Here an important bug has been introduced.  has_key() is a method of the
Python dictionary to determine if the dictionary has the key.  The two
data structures have also been renamed.  It gets a bit more complicated
because of the possible absence of the structures.  So the line should
actually be:

if hasattr(cdp, 'diff_tensor') and not cdp.diff_tensor.type == 'sphere'
and not hasattr(cdp, 'structure'):


>  
>          # Directory creation.
>          if dir == None:
> -            dir = run
> +            dir = pipe
>          self.relax.IO.mkdir(dir, verbosity=0)
>  
>          # Place the arguments into 'self'.
> -        self.run = run
> +        self.pipe = pipe
>          self.dir = dir
>          self.force = force
>          self.binary = binary
> @@ -98,14 +94,14 @@
>          # Number of field strengths and values.
>          self.num_frq = 0
>          self.frq = []
> -        for i in xrange(len(relax_data_store.res[self.run])):
> -            if hasattr(relax_data_store.res[self.run][i], 'num_frq'):
> -                if relax_data_store.res[self.run][i].num_frq > self.num_frq:
> +        for spin in spin_loop(spin_id):
> +            if hasattr(cdp.res[i], 'num_frq'):
> +                if cdp.res[i].num_frq > self.num_frq:

Here is another bug.  To fix, simply replace 'cdp.res[i]' with 'spin'.


>                      # Number of field strengths.
> -                    self.num_frq = relax_data_store.res[self.run][i].num_frq
> +                    self.num_frq = cdp.res[i].num_frq

Same fix.

 
>                      # Field strength values.
> -                    for frq in relax_data_store.res[self.run][i].frq:
> +                    for frq in cdp.res[i].frq:

Again the same fix.


>                          if frq not in self.frq:
>                              self.frq.append(frq)
>  
> @@ -120,8 +116,8 @@
>          mfpar = self.open_file('mfpar')
>  
>          # Loop over the sequence.
> -        for i in xrange(len(relax_data_store.res[self.run])):
> -            if hasattr(relax_data_store.res[self.run][i], 'num_frq'):
> +        for spin in spin_loop(spin_id):
> +            if hasattr(cdp.res[i], 'num_frq'):

Here too.


>                  # The 'mfdata' file.
>                  if not self.create_mfdata(i, mfdata):
>                      continue
> @@ -138,9 +134,9 @@
>          mfpar.close()
>  
>          # The 'run.sh' script.
> -        run = self.open_file('run.sh')
> -        self.create_run(run)
> -        run.close()
> +        pipe = self.open_file('run.sh')
> +        self.create_pipe(pipe)
> +        pipe.close()

This should not have changed.  The run here means one execution of
Modelfree, not the runs of the relax data store.


>          chmod(self.dir + '/run.sh', 0755)
>  
> 
> @@ -148,7 +144,7 @@
>          """Create the Modelfree4 input file 'mfmodel'."""
>  
>          # Spin title.
> -        file.write("\nspin     " + relax_data_store.res[self.run][i].name + 
> "_" + `relax_data_store.res[self.run][i].num` + "\n")
> +        file.write("\nspin     " + cdp.res[i].name + "_" + `cdp.res[i].num` 
> + "\n")

Same bug as above.  I won't point out all the positions where
'cdp.res[i]' should be changed to 'spin'.


>          # Data written flag.
>          written = 0
> @@ -159,24 +155,24 @@
>              r1, r2, noe = None, None, None
>  
>              # Loop over the relevant relaxation data.
> -            for k in xrange(relax_data_store.res[self.run][i].num_ri):
> -                if self.frq[j] != 
> relax_data_store.res[self.run][i].frq[relax_data_store.res[self.run][i].remap_table[k]]:
> +            for k in xrange(cdp.res[i].num_ri):
> +                if self.frq[j] != cdp.res[i].frq[cdp.res[i].remap_table[k]]:
>                      continue
>  
>                  # Find the corresponding R1.
> -                if relax_data_store.res[self.run][i].ri_labels[k] == 'R1':
> -                    r1 = relax_data_store.res[self.run][i].relax_data[k]
> -                    r1_err = relax_data_store.res[self.run][i].relax_error[k]
> +                if cdp.res[i].ri_labels[k] == 'R1':
> +                    r1 = cdp.res[i].relax_data[k]
> +                    r1_err = cdp.res[i].relax_error[k]
>  
>                  # Find the corresponding R2.
> -                elif relax_data_store.res[self.run][i].ri_labels[k] == 'R2':
> -                    r2 = relax_data_store.res[self.run][i].relax_data[k]
> -                    r2_err = relax_data_store.res[self.run][i].relax_error[k]
> +                elif cdp.res[i].ri_labels[k] == 'R2':
> +                    r2 = cdp.res[i].relax_data[k]
> +                    r2_err = cdp.res[i].relax_error[k]
>  
>                  # Find the corresponding NOE.
> -                elif relax_data_store.res[self.run][i].ri_labels[k] == 'NOE':
> -                    noe = relax_data_store.res[self.run][i].relax_data[k]
> -                    noe_err = 
> relax_data_store.res[self.run][i].relax_error[k]
> +                elif cdp.res[i].ri_labels[k] == 'NOE':
> +                    noe = cdp.res[i].relax_data[k]
> +                    noe_err = cdp.res[i].relax_error[k]
>  
>              # Test if the R1 exists for this frequency, otherwise skip the 
> data.
>              if r1:
> @@ -205,24 +201,24 @@
>          """Create the Modelfree4 input file 'mfin'."""
>  
>          # Set the diffusion tensor specific values.
> -        if relax_data_store.diff[self.run].type == 'sphere':
> +        if cdp.diff.type == 'sphere':

here it should be 'cdp.diff_tensor.type'.


>              diff = 'isotropic'
>              algorithm = 'brent'
> -            tm = relax_data_store.diff[self.run].tm / 1e-9
> +            tm = cdp.diff.tm / 1e-9

here too, etc.


>              dratio = 1
>              theta = 0
>              phi = 0
> -        elif relax_data_store.diff[self.run].type == 'spheroid':
> +        elif cdp.diff.type == 'spheroid':
>              diff = 'axial'
>              algorithm = 'powell'
> -            tm = relax_data_store.diff[self.run].tm / 1e-9
> -            dratio = relax_data_store.diff[self.run].Dratio
> -            theta = relax_data_store.diff[self.run].theta * 360.0 / (2.0 * 
> pi)
> -            phi = relax_data_store.diff[self.run].phi * 360.0 / (2.0 * pi)
> -        elif relax_data_store.diff[self.run].type == 'ellipsoid':
> +            tm = cdp.diff.tm / 1e-9
> +            dratio = cdp.diff.Dratio
> +            theta = cdp.diff.theta * 360.0 / (2.0 * pi)
> +            phi = cdp.diff.phi * 360.0 / (2.0 * pi)
> +        elif cdp.diff.type == 'ellipsoid':
>              diff = 'anisotropic'
>              algorithm = 'powell'
> -            tm = relax_data_store.diff[self.run].tm / 1e-9
> +            tm = cdp.diff.tm / 1e-9
>              dratio = 0
>              theta = 0
>              phi = 0
> @@ -233,7 +229,7 @@
>          file.write("search          grid\n\n")
>  
>          # Diffusion type.
> -        if relax_data_store.diff[self.run].fixed:
> +        if cdp.diff.fixed:
>              algorithm = 'fix'
>  
>          file.write("diffusion       " + diff + " " + self.diff_search + 
> "\n\n")
> @@ -294,12 +290,15 @@
>      def create_mfmodel(self, i, file):
>          """Create the Modelfree4 input file 'mfmodel'."""
>  
> +        # Alias the current data pipe.
> +        cdp = relax_data_store[relax_data_store.current_pipe]
> +
>          # Spin title.
> -        file.write("\nspin     " + relax_data_store.res[self.run][i].name + 
> "_" + `relax_data_store.res[self.run][i].num` + "\n")
> +        file.write("\nspin     " + cdp.res[i].name + "_" + `cdp.res[i].num` 
> + "\n")
>  
>          # tloc.
>          file.write('%-3s%-6s%-6.1f' % ('M1', 'tloc', 0))
> -        if 'tm' in relax_data_store.res[self.run][i].params:
> +        if 'tm' in cdp.res[i].params:
>              file.write('%-4i' % 1)
>          else:
>              file.write('%-4i' % 0)
> @@ -324,7 +323,7 @@
>  
>          # S2f.
>          file.write('%-3s%-6s%-6.1f' % ('M1', 'Sf2', 1))
> -        if 'S2f' in relax_data_store.res[self.run][i].params:
> +        if 'S2f' in cdp.res[i].params:
>              file.write('%-4i' % 1)
>          else:
>              file.write('%-4i' % 0)
> @@ -338,7 +337,7 @@
>  
>          # S2s.
>          file.write('%-3s%-6s%-6.1f' % ('M1', 'Ss2', 1))
> -        if 'S2s' in relax_data_store.res[self.run][i].params or 'S2' in 
> relax_data_store.res[self.run][i].params:
> +        if 'S2s' in cdp.res[i].params or 'S2' in cdp.res[i].params:
>              file.write('%-4i' % 1)
>          else:
>              file.write('%-4i' % 0)
> @@ -352,7 +351,7 @@
>  
>          # te.
>          file.write('%-3s%-6s%-6.1f' % ('M1', 'te', 0))
> -        if 'te' in relax_data_store.res[self.run][i].params or 'ts' in 
> relax_data_store.res[self.run][i].params:
> +        if 'te' in cdp.res[i].params or 'ts' in cdp.res[i].params:
>              file.write('%-4i' % 1)
>          else:
>              file.write('%-4i' % 0)
> @@ -366,7 +365,7 @@
>  
>          # Rex.
>          file.write('%-3s%-6s%-6.1f' % ('M1', 'Rex', 0))
> -        if 'Rex' in relax_data_store.res[self.run][i].params:
> +        if 'Rex' in cdp.res[i].params:
>              file.write('%-4i' % 1)
>          else:
>              file.write('%-4i' % 0)
> @@ -382,15 +381,18 @@
>      def create_mfpar(self, i, file):
>          """Create the Modelfree4 input file 'mfpar'."""
>  
> +        # Alias the current data pipe.
> +        cdp = relax_data_store[relax_data_store.current_pipe]
> +
>          # Spin title.
> -        file.write("\nspin     " + relax_data_store.res[self.run][i].name + 
> "_" + `relax_data_store.res[self.run][i].num` + "\n")
> +        file.write("\nspin     " + cdp.res[i].name + "_" + `cdp.res[i].num` 
> + "\n")
>  
>          file.write('%-14s' % "constants")
> -        file.write('%-6i' % relax_data_store.res[self.run][i].num)
> +        file.write('%-6i' % cdp.res[i].num)
>          file.write('%-7s' % self.nucleus)
> -        file.write('%-8.4f' % (relax_data_store.gx / 1e7))
> -        file.write('%-8.3f' % (relax_data_store.res[self.run][i].r * 1e10))
> -        file.write('%-8.3f\n' % (relax_data_store.res[self.run][i].csa * 
> 1e6))
> +        file.write('%-8.4f' % (cdp.gx / 1e7))
> +        file.write('%-8.3f' % (cdp.res[i].r * 1e10))
> +        file.write('%-8.3f\n' % (cdp.res[i].csa * 1e6))

The gyromagnetic ratios don't exist anymore.  See
https://mail.gna.org/public/relax-devel/2008-04/msg00055.html
(Message-id: <[EMAIL PROTECTED]>).


>  
>          file.write('%-10s' % "vector")
>          file.write('%-4s' % self.atom1)
> @@ -400,23 +402,29 @@
>      def create_run(self, file):
>          """Create the script 'run.sh' for the execution of Modelfree4."""
>  
> +        # Alias the current data pipe.
> +        cdp = relax_data_store[relax_data_store.current_pipe]
> +
>          file.write("#! /bin/sh\n")
>          file.write(self.binary + " -i mfin -d mfdata -p mfpar -m mfmodel -o 
> mfout -e out")
> -        if relax_data_store.diff[self.run].type != 'sphere':
> +        if cdp.diff.type != 'sphere':
>              # Copy the pdb file to the model directory so there are no 
> problems with the existance of *.rotate files.
> -            system('cp ' + relax_data_store.pdb[self.run].file_name + ' ' + 
> self.dir)
> -            file.write(" -s " + 
> relax_data_store.pdb[self.run].file_name.split('/')[-1])
> +            system('cp ' + cdp.pdb.file_name + ' ' + self.dir)
> +            file.write(" -s " + cdp.pdb.file_name.split('/')[-1])

'cdp.pdb' is now 'cdp.structure'.  Note that this structure has
completely changed because of the recent structural API I have been
constructing, so 'cdp.structure.file_name' may need to be replaced in
the future.  It's not something you need to worry about though.


>          file.write("\n")
>  
> 
> -    def execute(self, run, dir, force, binary):
> +    def execute(self,pipe,  dir, force, binary):

The pipe argument should be axed.


>          """Function for executing Modelfree4.
>  
>          BUG:  Control-C during execution causes the cwd to stay as dir.
>          """
>  
> +        # Alias the current data pipe.
> +        cdp = relax_data_store[relax_data_store.current_pipe]
> +
>          # Arguments.
> -        self.run = run
> +        self.pipe = pipe
>          self.dir = dir
>          self.force = force
>          self.binary = binary
> @@ -426,7 +434,7 @@
>  
>          # The directory.
>          if dir == None:
> -            dir = run
> +            dir = pipe
>          if not access(dir, F_OK):
>              raise RelaxDirError, ('Modelfree4', dir)
>  
> @@ -452,8 +460,8 @@
>                  raise RelaxFileError, ('mfpar input', 'mfpar')
>  
>              # Test if the 'PDB' input file exists.
> -            if relax_data_store.diff[run].type != 'sphere':
> -                pdb = relax_data_store.pdb[self.run].file_name.split('/')[-1]
> +            if cdp.diff.type != 'sphere':
> +                pdb = cdp.pdb.file_name.split('/')[-1]
>                  if not access(pdb, F_OK):
>                      raise RelaxFileError, ('PDB', pdb)
>              else:
> @@ -493,19 +501,22 @@
>          chdir(orig_dir)
>  
> 
> -    def extract(self, run, dir):
> +    def extract(self, pipe, dir):

Again the pipe arg should not exist.


>          """Function for extracting the Modelfree4 results out of the 'mfout' 
> file."""
>  
> +        # Alias the current data pipe.
> +        cdp = relax_data_store[relax_data_store.current_pipe]
> +
>          # Arguments.
> -        self.run = run
> +        self.pipe = pipe
>  
>          # Test if sequence data is loaded.
> -        if not relax_data_store.res.has_key(self.run):
> -            raise RelaxNoSequenceError, self.run
> +        if not exists_mol_res_spin_data():
> +            raise RelaxNoSequenceError
>  
>          # The directory.
>          if dir == None:
> -            dir = run
> +            dir = pipe
>          if not access(dir, F_OK):
>              raise RelaxDirError, ('Modelfree4', dir)
>  
> @@ -531,9 +542,9 @@
>  
>          # Loop over the sequence.
>          pos = 0
> -        for i in xrange(len(relax_data_store.res[self.run])):
> +        for i in xrange(len(cdp.res)):

This requires the spin_loop().


>              # Reassign the data structure.
> -            data = relax_data_store.res[self.run][i]
> +            data = cdp.res[i]

This can be deleted and from the spin_loop() down, the 'data' object can
be replaced by the 'spin' SpinContainer.

Cheers,

Edward


_______________________________________________
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