Пример #1
0
def apply_extract_features_cp(well_tile,filepattern):
    wildcards = {'well':well_tile[0],'tile':well_tile[1]}
    filepattern.update(wildcards)
    stacked = read_hdf_image(name(filepattern))
    nuclei = read(name(filepattern,subdir='process_ph',tag='nuclei',ext='tif'))
    cells = read(name(filepattern,subdir='process_ph',tag='cells',ext='tif'))
    df_result = Snake._extract_phenotype_cp(data_phenotype=stacked,
                                            nuclei=nuclei,
                                            cells=cells,
                                            wildcards=wildcards,
                                            nucleus_channels=[0,1,2,3],
                                            cell_channels=[0,1,2,3],
                                            channel_names=['dapi','tubulin','gh2ax','phalloidin']
                                           )
    df_result.to_csv(name(filepattern,subdir='process_ph',tag='cp_phenotype',ext='csv'))
Пример #2
0
def export_nd2(f,
               iter_axes='v',
               project_axes=False,
               slicer=slice(None),
               f_description=None,
               split=False,
               backend='ND2SDK',
               **kwargs):
    if f_description is None:
        f_description = parse_nd2_filename(f)

    if backend == 'ND2SDK':
        reader = ND2_Reader
        axes = list('mtzcyx')
    elif backend == 'python':
        reader = ND2Reader
        axes = list('vtzcyx')
    else:
        raise ValueError('Only "ND2SDK" and "python" backends are available.')

    with reader(f) as nd2:
        nd2.iter_axes = iter_axes
        nd2.bundle_axes = [
            ax for ax in axes if (ax in nd2.axes) & (ax != iter_axes)
        ]
        if project_axes:
            g = lambda x: x.max(axis=nd2.bundle_axes.index(project_axes))
            axes.remove(project_axes)
        else:
            g = lambda x: x

        if split:
            axes.remove(nd2.iter_axes[0])
            axes = [ax in nd2.bundle_axes for ax in axes]
            axes = axes[axes.index(True):]
            for site, data in enumerate(nd2[slicer]):
                data = g(data)
                save(name(f_description, site=site, ext='tif'),
                     data[tuple([slice(None) if ax else None for ax in axes])],
                     **kwargs)
        else:
            axes = [ax in nd2.axes for ax in axes]
            axes = axes[axes.index(True):]
            data = np.array([g(data) for data in nd2[slicer]])
            save(name(f_description, ext='tif'),
                 data[tuple([slice(None) if ax else None for ax in axes])],
                 **kwargs)
Пример #3
0
def build_file_table(f_nd2, f_template, wells):
    """
    Example:
    
    wells = 'A1', 'A2', 'A3', 'B1', 'B2', 'B3'
    f_template = 'input/10X_Hoechst-mNeon/10X_Hoechst-mNeon_A1.live.tif'
    build_file_table(f_nd2, f_template, wells)
    """
    rename = lambda x: name(parse(f_template), **x)

    get_well = lambda x: wells[int(re.findall('Well(\d)', x)[0]) - 1]
    df_files = (common.extract_nd2_metadata_sdk(
        f_nd2,
        progress=tqdn).assign(well=lambda x: x['file'].apply(get_well)).assign(
            site=lambda x: x['m']).assign(
                file_=lambda x: x.apply(rename, axis=1)))

    return df_files
Пример #4
0
def extract_nd2_metadata_py(
        f,
        variables=['frames', 'x_data', 'y_data', 'z_data', 't_data'],
        f_description=None):
    if f_description is None:
        f_description = parse_nd2_filename(f)

    with ND2Reader(f) as nd2:
        df = pd.DataFrame({
            key: val
            for key, val in nd2.metadata.items() if key in variables
        })
        if 'z_data' in variables:
            df = pd.concat([
                df,
                pd.DataFrame(np.array(df['z_data'].tolist()),
                             columns=[
                                 'z_' + str(level)
                                 for level in nd2.metadata['z_levels']
                             ])
            ],
                           axis=1)
            df = df.drop(columns='z_data')
        if 't_data' in variables:
            t_data = np.array(nd2.timesteps).reshape(
                -1, len(nd2.metadata['z_levels']))
            df = pd.concat([
                df,
                pd.DataFrame(t_data,
                             columns=[
                                 't_' + str(step)
                                 for step in range(t_data.shape[1])
                             ])
            ],
                           axis=1)
        if 'v' in nd2.axes:
            df['site'] = nd2.metadata['fields_of_view']
        else:
            df = df.assign(site=f_description['site'])

    (df.assign(well=f_description['well']).to_pickle(
        name(f_description, ext='pkl')))
Пример #5
0
def export_nd2(f,
               iter_axes='v',
               project_axes=False,
               slicer=slice(None),
               f_description=None,
               split=False,
               backend='ND2SDK',
               **kwargs):
    if f_description is None:
        f_description = parse_nd2_filename(f)

    if backend == 'ND2SDK':
        reader = ND2Reader_SDK
        axes = list('mtzcyx')
        iter_axes = 'm' if iter_axes == 'v' else iter_axes
    elif backend == 'python':
        reader = ND2Reader
        axes = list('vtzcyx')
        iter_axes = 'v' if iter_axes == 'm' else iter_axes
    else:
        raise ValueError('Only "ND2SDK" and "python" backends are available.')

    if not iter_axes in axes:
        raise ValueError(
            f'Supplied iter_axes \'{iter_axes}\' not in axes options for backend \'{backend}\' ({axes})'
        )

    with reader(f) as nd2:
        if split:
            nd2.iter_axes = iter_axes
            nd2.bundle_axes = [
                ax for ax in axes if (ax in nd2.axes) & (ax != iter_axes)
            ]
            if project_axes:
                g = lambda x: x.max(axis=nd2.bundle_axes.index(project_axes))
                axes.remove(project_axes)
            else:
                g = lambda x: x
            print(axes)
            axes.remove(nd2.iter_axes[0])
            # preserve inner singleton dimensions
            axes = [ax in nd2.bundle_axes for ax in axes]
            axes = axes[axes.index(True):]
            for site, data in enumerate(nd2[slicer]):
                data = g(data)
                save(name(f_description, site=site, ext='tif'),
                     data[tuple([slice(None) if ax else None for ax in axes])],
                     **kwargs)
        else:
            axes_exist = [ax for ax in axes if ax in nd2.axes]
            nd2.iter_axes = axes_exist[0]
            nd2.bundle_axes = axes_exist[1:]
            if project_axes:
                data = np.max(nd2, axis=axes_exist.index(project_axes))
                axes_exist.remove(project_axes)
            # preserve inner singleton dimensions
            axes = [ax in axes_exist for ax in axes]
            axes = axes[axes.index(True):]
            save(name(f_description, ext='tif'),
                 data[tuple([slice(None) if ax else None for ax in axes])],
                 **kwargs)