def compile_day_metadata(aux_dir, day):
    """ Compile experiment day metadata from wormsorter and hydra rig metadata for a given day in 
        'AuxiliaryFiles' directory 
        
        Parameters
        ----------
        aux_dir : str
            Path to "AuxiliaryFiles" containing metadata  
        day : str, None
            Experiment day folder in format 'YYYYMMDD'
            
        Returns
        -------
        compiled_day_metadata : pandas.DataFrame
            Compiled metadata dataframe for given imaging date
    """

    day_dir = Path(aux_dir) / str(day)
    wormsorter_meta = day_dir / (str(day) + '_wormsorter.csv')
    hydra_meta = day_dir / (str(day) + '_manual_metadata.csv')

    # expand wormsorter metadata to have separate row for each well
    plate_metadata = populate_96WPs(wormsorter_meta)

    day_metadata = get_day_metadata(complete_plate_metadata=plate_metadata,
                                    hydra_metadata_file=hydra_meta,
                                    merge_on=['imaging_plate_id'],
                                    n_wells=96,
                                    run_number_regex='run\\d+_',
                                    saveto=None,
                                    del_if_exists=False,
                                    include_imgstore_name=True,
                                    raw_day_dir=None)

    return day_metadata
Example #2
0
    print('Calculating metadata for {} days of experiments'.format(
        len(day_root_dirs)))

    for count, day in enumerate(day_root_dirs):
        exp_date = re.findall(date_regex, str(day))[0]
        manualmetadata_file = list(day.rglob('*_manual_metadata.csv'))[0]
        assert (exp_date in str(manualmetadata_file))
        wormsorter_file = list(day.rglob('*_wormsorter.csv'))[0]
        assert (exp_date in str(wormsorter_file))
        bad_wells_file = list(day.rglob('*_robot_bad_imaging_wells.csv'))[0]
        assert (exp_date in str(bad_wells_file))

        print('Collating wormsorter files: {}'.format(wormsorter_file))

        plate_metadata = populate_96WPs(wormsorter_file,
                                        del_if_exists=True,
                                        saveto='default')

        bad_wells_df = convert_bad_wells_lut(bad_wells_file)

        plate_metadata = pd.merge(plate_metadata,
                                  bad_wells_df,
                                  on=['imaging_plate_id', 'well_name'],
                                  how='outer')
        plate_metadata['is_bad_well'].fillna(False, inplace=True)
        metadata_file = day / '{}_day_metadata_test.csv'.format(exp_date)

        print('Generating day metadata: {}'.format(metadata_file))

        try:
            day_metadata = get_day_metadata(plate_metadata,
Example #3
0
def compile_day_metadata(aux_dir,
                         day,
                         n_wells=96,
                         from_source_plate=False,
                         from_robot_runlog=False):
    """ Compile experiment day metadata from wormsorter and hydra rig metadata for a given day in 
        'AuxiliaryFiles' directory 
        
        Parameters
        ----------
        aux_dir : str
            Path to "AuxiliaryFiles" containing metadata  
        day : str, None
            Experiment day folder in format 'YYYYMMDD'
        from_source_plate : bool
            Compile day metadata using source plate metadata ('source_plate.csv') and mapping for 
            each imaging plate ID ('source2imaging.csv')
        from_robot_runlog : bool
            Compile plate metadata from OpenTrons run log files (eg. for randomised plates)
            
        Returns
        -------
        day_metadata : pandas.DataFrame
            Compiled day metadata
    """
    from tierpsytools.hydra.compile_metadata import (
        populate_6WPs,
        populate_24WPs,
        populate_96WPs,
        get_day_metadata,
        get_source_metadata,
        merge_basic_and_source_meta,
        #merge_robot_metadata,
        #merge_robot_wormsorter,
        number_wells_per_plate,
        day_metadata_check)

    day_dir = Path(aux_dir) / str(day)

    wormsorter_meta = day_dir / (str(day) + '_wormsorter.csv')
    hydra_meta = day_dir / (str(day) + '_manual_metadata.csv')

    # Expand wormsorter metadata to have separate row for each well (96-well or 6-well plate format)
    if n_wells == 6:
        plate_metadata = populate_6WPs(wormsorter_meta)
    elif n_wells == 24:
        plate_metadata = populate_24WPs(wormsorter_meta)
    elif n_wells == 96:
        plate_metadata = populate_96WPs(wormsorter_meta)
    else:
        raise ValueError("Please choose n_wells from: [6, 24, 96]")

    from_source_plate = True if from_robot_runlog else from_source_plate

    if from_source_plate:
        source_plate_meta = day_dir / 'source_plates.csv'

        plate_mapping_meta = day_dir / 'source2plate.csv'

        source_metadata = get_source_metadata(
            sourceplates_file=source_plate_meta,
            imaging2source_file=plate_mapping_meta)

        plate_metadata = merge_basic_and_source_meta(
            plate_metadata,
            source_metadata,
            merge_on=['imaging_plate_id', 'well_name'],
            saveto=None,
            del_if_exists=False)


# =============================================================================
#     if from_robot_runlog:
#         robot_runlog_meta = day_dir / 'robot_runlog.csv'
#
#         drug_metadata = merge_robot_metadata(robot_runlog_meta,
#                                              randomized_by='column',
#                                              saveto=None,
#                                              drug_by_column=True,
#                                              compact_drug_plate=False,
#                                              del_if_exists=False)
#
#         plate_metadata = merge_robot_wormsorter(day_dir,
#                                                 drug_metadata,
#                                                 plate_metadata,
#                                                 bad_wells_csv=None,
#                                                 merge_on=['imaging_plate_id', 'well_name'],
#                                                 saveto=None,
#                                                 del_if_exists=False)
# =============================================================================

    day_metadata = get_day_metadata(complete_plate_metadata=plate_metadata,
                                    hydra_metadata_file=hydra_meta,
                                    merge_on=['imaging_plate_id'],
                                    n_wells=n_wells,
                                    run_number_regex='run\\d+_',
                                    saveto=None,
                                    del_if_exists=False,
                                    include_imgstore_name=True,
                                    raw_day_dir=None)

    day_metadata_check(day_metadata,
                       day_dir)  # check day metadata is correct dimension
    print(number_wells_per_plate(day_metadata, day_dir))

    return day_metadata