Exemple #1
0
def action(args):
    qadata = qa_from_csv(qafile)

    if args.qa_file:
        print(path.abspath(qafile))
    elif args.variables:
        _, d = qadata.popitem()
        print('\n'.join(d.keys()))
    elif args.names:
        cmpnd_codes = dict(COMPOUND_CODES)
        writer = csv.writer(sys.stdout, quoting=csv.QUOTE_NONNUMERIC)
        writer.writerow(['id', 'code', 'name'])
        for compound_id, d in qadata.items():
            writer.writerow(
                [compound_id, cmpnd_codes[compound_id], d['qa_compound']])
    elif args.compound_id:
        try:
            for k, v in qadata[args.compound_id].items():
                print('%s = %s' % (k, v))
        except KeyError:
            print(
                '"%s" is not a valid compound id; try listing compounds using the "-n/--names" option'
                % args.compound_id)
            sys.exit(1)
    elif args.list_calculations:
        for name, description in all_checks.items():
            print '%-20s %s' % (name, description)
    elif args.show_calculation:
        fun = getattr(calculations, args.show_calculation)
        print ''.join(inspect.getsourcelines(fun)[0])
    elif args.controls:
        for row in CONTROL_NAMES:
            print '%s\t%s' % row
    elif args.algorithm:
        print ''.join(inspect.getsourcelines(calculations.results)[0])
Exemple #2
0
def action(args):

    controls, sample_groups = get_input(args.infile, split_description=args.split_desc)
    qadata = qa_from_csv(qafile)
    matrix = read_matrix(matrix_file)

    style = "screen" if args.outfile == sys.stdout else "file"
    outfile = get_outfile(args, label="qa", ext="csv")

    if args.calculate_ion_ratios:
        qadata = add_ion_ratios(qadata, controls)

    # if a single compound is specified, define lambda cond to use as
    # a filter
    if args.compound_id:
        cond = lambda c: c["COMPOUND_id"] == args.compound_id
    else:
        cond = lambda c: True

    # controls
    compounds = [Compound(c, matrix, **qadata[c["COMPOUND_id"]]) for c in flatten(controls.values()) if cond(c)]
    display_controls(compounds, outfile=outfile, show_all=args.show_all, message=not args.outcomes_only, style=style)

    compounds = [Compound(c, matrix, **qadata[c["COMPOUND_id"]]) for c in flatten(sample_groups.values()) if cond(c)]
    display_specimens(compounds, outfile=outfile, show_all=args.show_all, message=not args.outcomes_only, style=style)

    if args.outfile is None:
        outfile.close()
Exemple #3
0
def action(args):
    qadata = qa_from_csv(qafile)
    
    if args.qa_file:
        print(path.abspath(qafile))
    elif args.variables:
        _, d = qadata.popitem()
        print('\n'.join(d.keys()))
    elif args.names:
        cmpnd_codes = dict(COMPOUND_CODES)
        writer = csv.writer(sys.stdout, quoting=csv.QUOTE_NONNUMERIC)
        writer.writerow(['id', 'code', 'name'])
        for compound_id, d in qadata.items():
            writer.writerow([compound_id,
                             cmpnd_codes[compound_id],
                             d['qa_compound']])
    elif args.compound_id:
        try:
            for k,v in qadata[args.compound_id].items():
                print('%s = %s' % (k,v))
        except KeyError:
            print('"%s" is not a valid compound id; try listing compounds using the "-n/--names" option' % args.compound_id)
            sys.exit(1)
    elif args.list_calculations:
        for name, description in all_checks.items():
            print '%-20s %s' % (name, description)
    elif args.show_calculation:
        fun = getattr(calculations, args.show_calculation)
        print ''.join(inspect.getsourcelines(fun)[0])
    elif args.controls:
        for row in CONTROL_NAMES:
            print '%s\t%s' % row
    elif args.algorithm:
        print ''.join(inspect.getsourcelines(calculations.results)[0])
Exemple #4
0
def action(args):

    qadata = qa_from_csv(qafile)
    matrix = read_matrix(matrix_file)
    
    # first get an ungrouped list of samples
    tree = xml.etree.ElementTree.ElementTree(file=args.infile)
    compound_ids = [d['qa_id'] for d in qadata.values()]
    samples = [list(parse_sample(elem, compound_ids)) \
                   for elem in tree.getiterator('SAMPLELISTDATA')[0].findall('SAMPLE')]

    compound_keys = set(['COMPOUND_id', 'COMPOUND_name',
    'CONFIRMATIONIONPEAK1_area', 'ISPEAK_area', 'PEAK_analconc',
    'PEAK_area', 'PEAK_foundrrt', 'PEAK_signoise', 'SAMPLE_desc',
    'SAMPLE_id'])
    
    for sample in samples:
        descriptions = set(compound['SAMPLE_desc'] for compound in sample)
        assert len(descriptions) == 1
        desc = descriptions.pop() 

        # are all elements present?
        for compound in sample:
            if compound_keys - set(compound.keys()):
                print 'sample %(SAMPLE_desc)s compound %(COMPOUND_id)s is missing' % compound,
                print 'element(s)', ''.join(compound_keys - set(compound.keys()))
Exemple #5
0
    def test01(self):
        with open('testfiles/oct24.json') as f:
            controls, sample_groups = json.load(f)
        qadata = qa_from_csv(qafile)

        qd = add_ion_ratios(qadata, controls)
        for d in qd.values():
            self.assertTrue('ion_ratio_avg_calc' in d)
Exemple #6
0
 def test01(self):
     with open('testfiles/oct24.json') as f:
         controls, sample_groups = json.load(f)
     qadata = qa_from_csv(qafile)
     
     qd = add_ion_ratios(qadata, controls)
     for d in qd.values():
         self.assertTrue('ion_ratio_avg_calc' in d)
Exemple #7
0
def action(args):

    controls, sample_groups = get_input(args.infile, split_description = args.split_desc)
    qadata = qa_from_csv(qafile)
    matrix = read_matrix(matrix_file)

    style = 'screen' if args.outfile == sys.stdout else 'file'
    outfile = get_outfile(args, label = 'results', ext = 'csv')
    
    if args.calculate_ion_ratios:
        qadata = add_ion_ratios(qadata, controls)

    samples = get_samples(controls, sample_groups, qadata, matrix)
    display_results(samples, outfile, style = style, grouped = args.grouped)

    if args.outfile is None:
        outfile.close()
Exemple #8
0
def action(args):

    controls, sample_groups = get_input(args.infile,
                                        split_description=args.split_desc)
    qadata = qa_from_csv(qafile)
    matrix = read_matrix(matrix_file)

    style = 'screen' if args.outfile == sys.stdout else 'file'
    outfile = get_outfile(args, label='qa', ext='csv')

    if args.calculate_ion_ratios:
        qadata = add_ion_ratios(qadata, controls)

    # if a single compound is specified, define lambda cond to use as
    # a filter
    if args.compound_id:
        cond = lambda c: c['COMPOUND_id'] == args.compound_id
    else:
        cond = lambda c: True

    # controls
    compounds = [
        Compound(c, matrix, **qadata[c['COMPOUND_id']])
        for c in flatten(controls.values()) if cond(c)
    ]
    display_controls(compounds,
                     outfile=outfile,
                     show_all=args.show_all,
                     message=not args.outcomes_only,
                     style=style)

    compounds = [
        Compound(c, matrix, **qadata[c['COMPOUND_id']])
        for c in flatten(sample_groups.values()) if cond(c)
    ]
    display_specimens(compounds,
                      outfile=outfile,
                      show_all=args.show_all,
                      message=not args.outcomes_only,
                      style=style)

    if args.outfile is None:
        outfile.close()
Exemple #9
0
def action(args):
    nullchar = "." if args.outfile == sys.stdout else ""
    fmt = lambda s: "%.2f" % s if isinstance(s, float) else (s or nullchar)

    controls, sample_groups = get_input(args.infile)
    qadata = qa_from_csv(qafile)

    outfile = get_outfile(args, label="ion_ratios", ext="csv")

    std_ids, std_names = zip(*[(i, n) for i, n in CONTROL_NAMES if n.startswith("std")])

    headers = ["qa_id", "qa_compound"] + list(std_names) + ["ion_ratio_avg_calc", "ion_ratio_avg"]
    writer = csv.DictWriter(outfile, fieldnames=headers, extrasaction="ignore")

    ion_ratios = mean_ion_ratios(controls, set(std_ids))
    for compound_id, d in ion_ratios.items():
        if compound_id == min(ion_ratios.keys()):
            writer.writerow(dict(zip(headers, headers)))

        d.update(qadata[compound_id])
        writer.writerow(dict((k, fmt(d.get(k))) for k in headers))
Exemple #10
0
def action(args):
    nullchar = '.' if args.outfile == sys.stdout else ''
    fmt = lambda s: '%.2f' % s if isinstance(s, float) else (s or nullchar)

    controls, sample_groups = get_input(args.infile)
    qadata = qa_from_csv(qafile)

    outfile = get_outfile(args, label='ion_ratios', ext='csv')

    std_ids, std_names = zip(*[(i, n) for i, n in CONTROL_NAMES
                               if n.startswith('std')])

    headers = ['qa_id', 'qa_compound'] + \
        list(std_names) + ['ion_ratio_avg_calc', 'ion_ratio_avg']
    writer = csv.DictWriter(outfile, fieldnames=headers, extrasaction='ignore')

    ion_ratios = mean_ion_ratios(controls, set(std_ids))
    for compound_id, d in ion_ratios.items():
        if compound_id == min(ion_ratios.keys()):
            writer.writerow(dict(zip(headers, headers)))

        d.update(qadata[compound_id])
        writer.writerow(dict((k, fmt(d.get(k))) for k in headers))
Exemple #11
0
def action(args):
    matrix = read_matrix(matrix_file)
    qadata = qa_from_csv(qafile)
    compound_ids, compound_codes = map(list, zip(*COMPOUND_CODES))

    writer = csv.DictWriter(
        args.outfile if hasattr(args.outfile, 'write') else open(args.outfile, 'w'),
        fieldnames = ['infile','label'] + compound_ids,
        extrasaction = 'ignore')

    # create headers for the first row
    d = dict(label = 'label', infile = 'infile')
    d.update(dict(COMPOUND_CODES))
    writer.writerow(d)

    counter = count(1)
    seen = defaultdict(list) # keep only the first instance of each accession
    for infile in args.infiles:    
        d = dict(infile = infile)
        controls, sample_groups = get_input(infile, split_description = args.split_desc)
        if args.calculate_ion_ratios:
            qadata = add_ion_ratios(qadata.copy(), controls)
            patient_samples = get_samples(controls, sample_groups, qadata, matrix, quantitative = True)
            
        for samples in patient_samples:
            samples = list(samples)
            # exclude any malformed samples
            if any(any(c.malformed for c in sample.compounds.values()) for sample in samples):
                log.warning('malformed samples in %s' % infile)
                continue
            # keep only the first instance of each sample
            if samples[0].row_label() not in seen:
                d['label'] = samples[0].row_label() if args.keep_phi else counter.next()
                d.update(dict((s.COMPOUND_id, s.result) for s in samples))
                writer.writerow(sanitize(d))
            seen[samples[0].row_label()].append(infile)
Exemple #12
0
import json
from collections import OrderedDict
from itertools import groupby

log = logging.getLogger(__name__)

from opiate.containers import Compound, Sample
from opiate.utils import flatten
from opiate.parsers import qa_from_csv, read_matrix
from opiate import qafile, matrix_file

import __init__ as config

## test data
# default qa values for this package
qadata = qa_from_csv(qafile)
matrix = read_matrix(matrix_file)

with open('testfiles/oct24.json') as f:
    controls, sample_groups = json.load(f)
expt_stda = controls['stdA']

# type 'misc'
misc_sample = sample_groups['Accession01']

# type 'patient'
patient_sample = sample_groups['Accession02']
compound1 = patient_sample[0]


class TestCompound(unittest.TestCase):
Exemple #13
0
import json
from itertools import chain

log = logging.getLogger(__name__)

from opiate import qafile, matrix_file
from opiate.calculations import all_checks
from opiate.parsers import qa_from_csv, read_matrix, get_samples
from opiate.display import display_specimens, display_results
from opiate.containers import Compound
from opiate.utils import flatten

import __init__ as config
from __init__ import TestCaseSuppressOutput

qadata = qa_from_csv(qafile)
matrix = read_matrix(matrix_file)
with open('testfiles/oct24.json') as f:
    controls, sample_groups = json.load(f)

class TestDisplayQA(TestCaseSuppressOutput):
    
    def test01(self):
        compounds = [Compound(c, matrix, **qadata[c['COMPOUND_id']]) for c in flatten(sample_groups.values())]     
        display_specimens(compounds, sys.stdout)

    def test02(self):
        compounds = [Compound(c, matrix, **qadata[c['COMPOUND_id']]) for c in flatten(sample_groups.values())]     
        display_specimens(compounds, sys.stdout, message = False)
        
class TestDisplayResults(TestCaseSuppressOutput):