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

