Hi Troels, What do you think about the 3D and 4D lists, especially the code such as "res_nums=[res_num1, res_num2, res_num1, res_num1]"? This seems to be a little counter to the algorithm you have implemented. Maybe you need to nest this so that if you get an residue number for the second dimension, then you should try to get the residue number for the 3rd and 4th dimensions, if 'dim' is set to that. It is probably safe to assume two formats. One where the residue name and number is only located in the first part, and the other where the residue name and number is found in each part for each dimension. But I don't have enough experience with 3D and 4D sparky peak lists to tell. Actually, according to the Sparky manual you can have 'C30CA-Q31N-H':
http://www.cgl.ucsf.edu/home/sparky/manual/images/assignlist.gif That really complicates things! That format is repeated here: http://www.nmr2.buffalo.edu/nesg.wiki/Sparky#Figure_5:_Sparky_peak_list >From these, maybe the res_num and res_name should be set to the 2nd dimension for the 3rd and 4th dimensions. Here is an example where the 3rd dimension matches the 1st: http://pine.nmrfam.wisc.edu/ADAPT-NMR/sparky_peak_list.htm That has a peak list which could be copied (duplicated below). But this has the residue number and name in the 3rd dimension to show this. So if the information is missing in the Nth dimension, it should probably match the dimension N-1. What do you think? Regards, Edward P. S. For reference, here are the peak lists from http://pine.nmrfam.wisc.edu/ADAPT-NMR/sparky_peak_list.htm, just in case that link disappears: a) Non-assigned peak list Assignment w1 w2 w3 ?-?-? 7.826 32.039 116.080 ?-?-? 9.324 29.130 116.029 ?-?-? 8.868 36.809 127.984 ?-?-? 8.372 58.423 118.945 ?-?-? 8.111 28.686 120.113 ?-?-? 8.136 32.232 119.999 ?-?-? 9.072 52.226 118.013 ?-?-? 6.581 40.419 111.959 ?-?-? 7.826 59.383 116.080 b) Assigned peak list Assignment w1 w2 w3 C16H-K15CB-C16N 7.826 32.039 116.080 N10H-E9CB-N10N 9.324 29.130 116.029 V7H-K6CB-V7N 8.868 36.809 127.984 C24H-Q23CA-C24N 8.372 58.423 118.945 K44H-E43CB-K44N 8.111 28.686 120.113 L30H-K29CB-L30N 8.136 32.232 119.999 E43H-D42CA-E43N 9.072 52.226 118.013 K32H-D31CB-K32N 6.581 40.419 111.959 C16H-K15CA-C16N 7.826 59.383 116.080 On 12 December 2013 11:02, <[email protected]> wrote: > Author: tlinnet > Date: Thu Dec 12 11:02:00 2013 > New Revision: 21949 > > URL: http://svn.gna.org/viewcvs/relax?rev=21949&view=rev > Log: > Implemented to read spins from a SPARKY list, when no intensity column is > present. > > Addition to Support Request #3044, (https://gna.org/support/index.php?3044) - > Load spins from SPARKY list. > > Modified: > trunk/lib/spectrum/sparky.py > trunk/test_suite/system_tests/peak_lists.py > > Modified: trunk/lib/spectrum/sparky.py > URL: > http://svn.gna.org/viewcvs/relax/trunk/lib/spectrum/sparky.py?rev=21949&r1=21948&r2=21949&view=diff > ============================================================================== > --- trunk/lib/spectrum/sparky.py (original) > +++ trunk/lib/spectrum/sparky.py Thu Dec 12 11:02:00 2013 > @@ -204,15 +204,29 @@ > except ValueError: > raise RelaxError("The peak intensity value from the line %s > is invalid." % line) > > - # Add the assignment to the peak list object. > - if dim == 1: > - peak_list.add(res_nums=[res_num1], res_names=[res_name1], > spin_names=[name1], shifts=[w1], intensity=intensity) > - elif dim == 2: > - peak_list.add(res_nums=[res_num1, res_num2], > res_names=[res_name1, res_name2], spin_names=[name1, name2], shifts=[w1, w2], > intensity=intensity) > - elif dim == 3: > - peak_list.add(res_nums=[res_num1, res_num2, res_num1], > res_names=[res_name1, res_name2, res_name1], spin_names=[name1, name2, > name3], shifts=[w1, w2, w3], intensity=intensity) > - elif dim == 4: > - peak_list.add(res_nums=[res_num1, res_num2, res_num1, res_num1], > res_names=[res_name1, res_name2, res_name1, res_name1], spin_names=[name1, > name2, name3, name4], shifts=[w1, w2, w3, w4], intensity=intensity) > + # Add the assignment to the peak list object. > + if dim == 1: > + peak_list.add(res_nums=[res_num1], res_names=[res_name1], > spin_names=[name1], shifts=[w1], intensity=intensity) > + elif dim == 2: > + peak_list.add(res_nums=[res_num1, res_num2], > res_names=[res_name1, res_name2], spin_names=[name1, name2], shifts=[w1, w2], > intensity=intensity) > + elif dim == 3: > + peak_list.add(res_nums=[res_num1, res_num2, res_num1], > res_names=[res_name1, res_name2, res_name1], spin_names=[name1, name2, > name3], shifts=[w1, w2, w3], intensity=intensity) > + elif dim == 4: > + peak_list.add(res_nums=[res_num1, res_num2, res_num1, > res_num1], res_names=[res_name1, res_name2, res_name1, res_name1], > spin_names=[name1, name2, name3, name4], shifts=[w1, w2, w3, w4], > intensity=intensity) > + > + # If no intensity column, for example when reading spins from a > spectrum list. > + elif int_col == None: > + warn(RelaxWarning(("The peak intensity value from the line %s is > invalid. The return value will be without intensity." % line))) > + > + # Add the assignment to the peak list object. > + if dim == 1: > + peak_list.add(res_nums=[res_num1], res_names=[res_name1], > spin_names=[name1], shifts=[w1]) > + elif dim == 2: > + peak_list.add(res_nums=[res_num1, res_num2], > res_names=[res_name1, res_name2], spin_names=[name1, name2], shifts=[w1, w2]) > + elif dim == 3: > + peak_list.add(res_nums=[res_num1, res_num2, res_num1], > res_names=[res_name1, res_name2, res_name1], spin_names=[name1, name2, > name3], shifts=[w1, w2, w3]) > + elif dim == 4: > + peak_list.add(res_nums=[res_num1, res_num2, res_num1, > res_num1], res_names=[res_name1, res_name2, res_name1, res_name1], > spin_names=[name1, name2, name3, name4], shifts=[w1, w2, w3, w4]) > > > def write_list(file_prefix=None, dir=None, res_names=None, res_nums=None, > atom1_names=None, atom2_names=None, w1=None, w2=None, data_height=None, > force=True): > > Modified: trunk/test_suite/system_tests/peak_lists.py > URL: > http://svn.gna.org/viewcvs/relax/trunk/test_suite/system_tests/peak_lists.py?rev=21949&r1=21948&r2=21949&view=diff > ============================================================================== > --- trunk/test_suite/system_tests/peak_lists.py (original) > +++ trunk/test_suite/system_tests/peak_lists.py Thu Dec 12 11:02:00 2013 > @@ -456,6 +456,76 @@ > # Read the spins from peak list. > self.interpreter.spectrum.read_spins(file="sparky2dim.list", > dir=status.install_path + > sep+'test_suite'+sep+'shared_data'+sep+'peak_lists', dim=1) > self.interpreter.spectrum.read_spins(file="sparky2dim.list", > dir=status.install_path + > sep+'test_suite'+sep+'shared_data'+sep+'peak_lists', dim=2) > + > + # Test some of the sequence. > + self.assertEqual(len(cdp.mol), 1) > + self.assertEqual(cdp.mol[0].name, None) > + self.assertEqual(len(cdp.mol[0].res), 7) > + > + # 1st residue. > + self.assertEqual(cdp.mol[0].res[0].num, 62) > + self.assertEqual(cdp.mol[0].res[0].name, 'W') > + self.assertEqual(len(cdp.mol[0].res[0].spin), 2) > + self.assertEqual(cdp.mol[0].res[0].spin[0].num, None) > + self.assertEqual(cdp.mol[0].res[0].spin[0].name, 'NE1') > + self.assertEqual(cdp.mol[0].res[0].spin[1].num, None) > + self.assertEqual(cdp.mol[0].res[0].spin[1].name, 'HE1') > + > + # 2nd residue. > + self.assertEqual(cdp.mol[0].res[1].num, 10) > + self.assertEqual(cdp.mol[0].res[1].name, 'L') > + self.assertEqual(len(cdp.mol[0].res[1].spin), 2) > + self.assertEqual(cdp.mol[0].res[1].spin[0].num, None) > + self.assertEqual(cdp.mol[0].res[1].spin[0].name, 'N') > + self.assertEqual(cdp.mol[0].res[1].spin[1].num, None) > + self.assertEqual(cdp.mol[0].res[1].spin[1].name, 'HN') > + > + # 3rd residue. > + self.assertEqual(cdp.mol[0].res[2].num, 6) > + self.assertEqual(cdp.mol[0].res[2].name, 'V') > + self.assertEqual(len(cdp.mol[0].res[2].spin), 2) > + self.assertEqual(cdp.mol[0].res[2].spin[0].num, None) > + self.assertEqual(cdp.mol[0].res[2].spin[0].name, 'N') > + self.assertEqual(cdp.mol[0].res[2].spin[1].num, None) > + self.assertEqual(cdp.mol[0].res[2].spin[1].name, 'HN') > + > + # 4th residue. > + self.assertEqual(cdp.mol[0].res[3].num, 2) > + self.assertEqual(cdp.mol[0].res[3].name, 'T') > + self.assertEqual(len(cdp.mol[0].res[3].spin), 2) > + self.assertEqual(cdp.mol[0].res[3].spin[0].num, None) > + self.assertEqual(cdp.mol[0].res[3].spin[0].name, 'N') > + self.assertEqual(cdp.mol[0].res[3].spin[1].num, None) > + self.assertEqual(cdp.mol[0].res[3].spin[1].name, 'HN') > + > + # 5th residue. > + self.assertEqual(cdp.mol[0].res[4].num, 3) > + self.assertEqual(cdp.mol[0].res[4].name, 'K') > + self.assertEqual(len(cdp.mol[0].res[4].spin), 1) > + self.assertEqual(cdp.mol[0].res[4].spin[0].num, None) > + self.assertEqual(cdp.mol[0].res[4].spin[0].name, 'N') > + > + # 6th residue. > + self.assertEqual(cdp.mol[0].res[5].num, 4) > + self.assertEqual(cdp.mol[0].res[5].name, 'A') > + self.assertEqual(len(cdp.mol[0].res[5].spin), 1) > + self.assertEqual(cdp.mol[0].res[5].spin[0].num, None) > + self.assertEqual(cdp.mol[0].res[5].spin[0].name, 'N') > + > + # 7th residue. > + self.assertEqual(cdp.mol[0].res[6].num, 5) > + self.assertEqual(cdp.mol[0].res[6].name, 'V') > + self.assertEqual(len(cdp.mol[0].res[6].spin), 1) > + self.assertEqual(cdp.mol[0].res[6].spin[0].num, None) > + self.assertEqual(cdp.mol[0].res[6].spin[0].name, 'N') > + > + > + def test_read_spins_peak_list_sparky_with_no_int_col(self): > + """Test the reading of spins from a Sparky peak list with no > intensity column.""" > + > + # Read the spins from peak list. > + self.interpreter.spectrum.read_spins(file="sparky_wo_int.list", > dir=status.install_path + > sep+'test_suite'+sep+'shared_data'+sep+'peak_lists', dim=1) > + self.interpreter.spectrum.read_spins(file="sparky_wo_int.list", > dir=status.install_path + > sep+'test_suite'+sep+'shared_data'+sep+'peak_lists', dim=2) > > # Test some of the sequence. > self.assertEqual(len(cdp.mol), 1) > > > _______________________________________________ > relax (http://www.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://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

