def extractdata(paths, param):

    wanted = param.features
    ncrmode = param.ncrmode
    # TODO: this dependency on the "antibody" parameter is entirely
    # superfluous at this point, and should be factored out
    antibody = param.antibody

    rawdata = sdc_extract._extract_wells_data(paths, wanted)

    warnings = None
    if ncrmode:
        ks = rawdata.keys()
        vs = rawdata.values()

        def _cull_zeros(d):
            assert d.shape[1] == 2
            ret = d[d[:, 1] > 0.]
            return ret, len(d) - len(ret)

        cvs, nculled = zip(*map(_cull_zeros, vs))
        tot = sum(nculled)
        if tot > 0:
            ss = ' + '.join(map(str, nculled))
            warnings = ['data for %s = %d cells had to be culled '
                        'to prevent division by zero' % (ss, tot)]

        nvs = [d[:, 0]/d[:, 1] for d in cvs]
        data = dict(zip(ks, nvs))
    else:
        data = rawdata

    return (dict([(k + (antibody,), v.reshape((v.size, 1)))
                  for k, v in data.items()]), warnings)
def get_rawdata(sdc_paths, wanted_features):
    d = _extract_wells_data(sdc_paths, wanted_features)
    return np.vstack([v for k, v in sorted(d.items())])