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])
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()
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])
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()))
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)
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()
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()
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))
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))
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)
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):
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):