def _get_exp_design(path, _val=namedtuple('_val', 'ligand_name ligand_concentration time ' 'antibody_0 antibody_1 coords'.split())): # _key=namedtuple('_key', ('plate', 'well'))): ret = NoClobberDict() ks = [] ret = defaultdict(dict) for record in read_exp_design(path): plate = record.plate row = record.row column = record.column well = '%s%02d' % (row.upper(), int(column)) # key = _key(plate, well) ks.append((plate, well)) time = record.time__min_ ligand_name = record.ligand ligand_concentration = record.concentration__ng_ml_ ab0 = parse_antibody_string(record.primary_body1) ab1 = parse_antibody_string(record.primary_body2) ret[plate][well] = _val(ligand_name, ligand_concentration, time, ab0, ab1, plate + well) assert len(ks) == len(set(ks)) return dict(ret)
def _get_exp_design(path, _val=namedtuple(u'_val', u'treatment info'), _treatment=namedtuple(u'_treatment', u'ligand_name ligand_conc' u'entration time antibodies'), _antibody=namedtuple(u'_antibody', u'target species wavelength'), _info=namedtuple(u'_info', u'replicate coords zone')): # _key=namedtuple('_key', ('plate', 'well'))): ks = [] replicate = defaultdict(int) platemap = defaultdict(lambda: defaultdict(dict)) for record in read_exp_design(path): plate = record.plate try: well = record.well.upper() column = well[1:] except AttributeError: row = record.row column = record.column well = '%s%02d' % (row.upper(), int(column)) # key = _key(plate, well) coords = (plate, well) zone = (plate if plate.startswith('GF') else plate + ('-L' if (int(column) - 1) < 6 else '-R')) ks.append(coords) time_ = record.time__min_ ligand_name = record.ligand ligand_conc = record.concentration__ng_ml_ primary_abs = (parse_antibody_string(record.primary_body1), parse_antibody_string(record.primary_body2)) secondary_abs = (parse_antibody_string(record.secondary_body1), parse_antibody_string(record.secondary_body2)) abs_ = [] ws = set() for primary, secondary in zip(primary_abs, secondary_abs): ab_target, ab_species = primary assert ab_species == secondary[0] wavelength = secondary[2] assert wavelength not in ws ws.add(wavelength) abs_.append((wavelength, _antibody(*(primary + (wavelength,))))) treatment = _treatment(ligand_name, ligand_conc, time_, tuple(abs_)) repl = replicate[treatment] replicate[treatment] += 1 info = _info(repl, coords, zone) try: assert repl == int(record.replicate) except AttributeError: pass assert well not in platemap[plate] platemap[plate][well] = _val(treatment, info) assert len(ks) == len(set(ks)) return dict(platemap)