Hi Edward.

Thank you for your suggestion.
I will keep this possibility in mind. :-)

I think I aim at exporting to a flat text files.
Here the value.write function actually fulfil my needs.

The loading and saving of state files is to slow for me, and I prefer to
also be able to inspect text files quickly. :-)

This seems to be a good way to handle the value.write files:

-----------------
# Importing this to prepare for python 3.x
#from __future__ import print_function

# Import other
import os, re
import itertools
import numpy as np
import matplotlib.pyplot as plt

# Loop through methods.
METHODS = ['XXX']

for METHOD in METHODS:
    # Open pipe names file
    pipes_r2eff_filename = 'pipes_r2eff_%s.txt'%(METHOD)
    pipes_r2eff_file = open(pipes_r2eff_filename,'r')
    pipes_r2eff_filelines = pipes_r2eff_file.readlines()
    pipes_r2eff_file.close()

    # Extract pipe names
    setup_pipe_bundle = "%s"%pipes_r2eff_filelines[0].strip()
    state_save_name = "%s.bz2"%pipes_r2eff_filelines[1].strip()

    # Extract which to compare to
    compare_ni_pipe_name_r2eff = pipes_r2eff_filelines[2].strip()

    # Get index of file
    with open(os.path.join('r2eff', compare_ni_pipe_name_r2eff), 'r') as f:
        for line in f:
            if line.startswith('# mol_name'):
                fileindex = line.split()[1:]
    # Remove not allowed letters
    fileindex = [w.replace('(', '') for w in fileindex]
    fileindex = [w.replace(')', '') for w in fileindex]
    fileindex = [w.replace('.', '') for w in fileindex]
    # Prepare to define what file exist of
    fdtype="S20,i,S3,i,S5"
    for item in fileindex[5:]:
        fdtype += ",f8"

    print fdtype

    data = np.genfromtxt(fname=os.path.join('r2eff',
compare_ni_pipe_name_r2eff), dtype=fdtype, names=fileindex)
    print(data.dtype)
    print(data.dtype.names)
    print data['%s'%fileindex[0]]
    print data['%s'%fileindex[6]]





2014-02-14 14:21 GMT+01:00 Edward d'Auvergne <edw...@nmr-relax.com>:

> Hi,
>
> This is a difficult question as efficiency changes with any change to
> the pipe_control.mol_res_spin module, as well as the data set up and
> specific questions you have.  You should browse the functions in that
> module to see what you have access to:
>
> $ grep "def " pipe_control/mol_res_spin.py
>
> You may even find that implementing your own custom function in that
> module would be the best.  I think for your purposes though, that the
> spin_index_loop() function is what you need.  This loops over the
> molecule, residue, and spin indices.  From what I understand of your
> aims, you will have the same sequence data for all the data pipes you
> would like to compare.  Is this correct?  If this is the case, then
> the molecule, residue, and spin indices will be the same for all
> pipes.  So you could use code in your script such as:
>
> # relax module imports.
> from pipe_control.mol_res_spin import spin_index_loop
> from pipe_control.pipes import get_pipe
>
> # Get the two pipes.
> dp1 = get_pipe('first pipe')
> dp2 = get_pipe('second pipe')
>
> # Loop over the sequence data.
> for mol_index, res_index, spin_index in spin_index_loop():
>     # Alias the spins for the two pipes.
>     spin1 = dp1.mol[mol_index].res[res_index].spin[spin_index]
>     spin2 = dp2.mol[mol_index].res[res_index].spin[spin_index]
>
>     # Sanity check.
>     if spin1.x != spin2.x:
>         raise RelaxError("X is not X?!?")
>
>
> That should be the absolute fastest implementation.  But have a look
> at the code to get a better idea.  As I know you are after the fastest
> possible solution to be able to scan lots of data, looking at the
> relax code would give you an idea of what the best solution is.  You
> may find inefficiencies that can be fixed in the relax code too.
>
> Regards,
>
> Edward
>
>
>
> On 14 February 2014 12:50, Troels Emtekær Linnet <tlin...@nmr-relax.com>
> wrote:
> > Hi,
> >
> > I need an efficient way to compare spin.X values between pipes.
> > Here X could be:
> >
> > - spin.r2eff
> > - spin.chi2
> > - spin.kex
> > etc.
> >
> > I have tried implementing the following:
> >
> > for spin, mol_name, res_num, res_name, spin_id in
> spin_loop(full_info=True,
> > return_id=True, skip_desel=True):
> >     cur_r2eff = spin.r2eff[index_str]
> >
> > The problem is that r2eff is a saved as a dictionary, with a current name
> > convention of:
> > sq_cpmg_599.%8f_0.000_100.000
> > sq_cpmg_599.%8f_0.000_133.333
> > sq_cpmg_599.%8f_0.000_133.%3f
> >
> > This naming convention is likely to change pattern.
> >
> > Do there exist a efficient way to compare data values between two pipes?
> >
> > I would need to compare one pipe to about 50 other pipes, where each
> > pipe contains about 80 spins recorded at 10-15 v_cpmg frequencies.
> >
> > The difference between pipe data would undergo standard statistics as RMS
> > etc.
> >
> > Best
> > Troels
> >
> > _______________________________________________
> > relax (http://www.nmr-relax.com)
> >
> > This is the relax-users mailing list
> > relax-users@gna.org
> >
> > 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-users
> >
>
_______________________________________________
relax (http://www.nmr-relax.com)

This is the relax-users mailing list
relax-users@gna.org

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-users

Reply via email to