def main(argv):
    """

    :param argv:
    """
    directory = util.get_directory_from_command_line(argv, os.path.basename(__file__))

    for filename in util.gen_img_paths(directory):
        path = os.path.join(directory, filename)

        # Open with Bioformats
        im = pims.Bioformats(path + '.tif')

        # Set scale
        micron_per_pixel = im.calibration

        # Calculate size range
        min_size = max(0.3 / micron_per_pixel, 3)
        max_size = min(2.0 / micron_per_pixel, im.frame_shape[0] * 0.5)

        im = im[0][:-64]
        im = np.flipud(im)

        # Locate and refine circles
        finder = pf.ParticleFinder(im)
        f = finder.locate_particles(size_range=(min_size, max_size))

        # Save fit images
        plot.save_fits(f, im, path)

        # Generate data files and save
        report.save_circles_to_csv(f, path, micron_per_pixel)
        report.save_circles_to_csv_grouped(f, path, micron_per_pixel)
示例#2
0
def main(argv):
    """

    :param argv:
    """
    directory = util.get_directory_from_command_line(argv, os.path.basename(__file__))

    # Open all .tif's in the directory
    for filename in util.gen_img_paths(directory):
        path = os.path.join(directory, filename)

        # Open with Bioformats
        im = pims.Bioformats(path + '.tif')

        # Set scale
        micron_per_pixel = im.calibration

        im = im[0][:-64]
        im = np.flipud(im)

        # Report filename
        report_file = os.path.abspath(
            os.path.normpath(directory + os.path.sep + 'report' + os.path.sep + filename + '_frame.csv'))
        if not os.path.isfile(report_file):
            continue

        checker = usercheckfits.UserCheckFits(report_file, micron_per_pixel)
        f = checker.user_check_fits(im)

        # Remove old csv files
        summary_file = os.path.abspath(
            os.path.normpath(directory + os.path.sep + 'report' + os.path.sep + filename + '_summary.csv'))
        if os.path.isfile(summary_file):
            os.remove(summary_file)
        os.remove(report_file)

        # Remove old grouped files
        file_path_grouped = os.path.abspath(
            os.path.normpath(directory + os.path.sep + 'report' + os.path.sep + re.sub("_\d+$", "", filename)))
        report_file_grouped = file_path_grouped + '_grouped_report.csv'
        summary_file_grouped = file_path_grouped + '_grouped_summary.csv'
        if os.path.isfile(report_file_grouped):
            os.remove(report_file_grouped)
        if os.path.isfile(summary_file_grouped):
            os.remove(summary_file_grouped)

        # Remove old fit .tif file
        fits_directory = os.path.abspath(os.path.normpath(directory + os.path.sep + 'fits'))
        fit_file = os.path.abspath(os.path.normpath(fits_directory + os.path.sep + filename)) + '_fit.tif'
        if os.path.isfile(fit_file):
            os.remove(fit_file)

        # Save fit images
        plot.save_fits(f, im, path)

        # Generate data files and save
        report.save_circles_to_csv(f, path, micron_per_pixel)
        report.save_circles_to_csv_grouped(f, path, micron_per_pixel, suffix='_grouped_checked')
示例#3
0
def main_only_plot(argv):
    """

    :param argv:
    """
    directory = util.get_directory_from_command_line(argv, os.path.basename(__file__))
    path = os.path.join(directory, 'plot.pdf')
    filepath = os.path.join(directory, 'errors.csv')
    errors = pandas.DataFrame.from_csv(filepath)
    plot_frame(errors, round(errors['runs'][0]), path)
示例#4
0
def main(argv):
    """

    :param argv:
    """
    directory = util.get_directory_from_command_line(argv, os.path.basename(__file__))
    path = os.path.join(directory, 'plot.pdf')
    filepath = os.path.join(directory, 'errors.csv')
    errors = pandas.DataFrame(
        columns=['r', 'runs', 'num_diff', 'r_diff', 'x_diff', 'y_diff', 'r_diff_std', 'x_diff_std', 'y_diff_std'])
    radii = numpy.arange(5.0, 31.0, 1.0)
    width = 1024
    height = 943
    runs = 10

    set_latex_params()

    for index, r in enumerate(radii):
        for run in numpy.arange(0, runs, 1):
            num = round(min([height / r, 100]))

            test = TestImage(num, r, noise=0.3, shape=(width, height))
            generated_image = test.image()

            finder = particlefinder.ParticleFinder(generated_image)
            fits = finder.locate_particles(n=test.number * 1.5, size_range=(
                int(numpy.ceil(0.5 * min(radii))), int(numpy.ceil(2.0 * max(radii)))))

            coords_df = test.get_coords_dataframe(True)

            unmatched, value_diff = test.check_frames_difference(fits, expected=coords_df)

            errors = errors.append({
                'runs': runs,
                'r': r,
                'num_diff': float(len(coords_df['r']) - unmatched) / float(len(coords_df['r'])),
                'r_diff': numpy.mean(value_diff['r']) / r,
                'x_diff': numpy.mean(value_diff['x']),
                'y_diff': numpy.mean(value_diff['y']),
                'r_diff_std': numpy.std(value_diff['r']) / r,
                'x_diff_std': numpy.std(value_diff['x']),
                'y_diff_std': numpy.std(value_diff['y'])
            }, ignore_index=True)
            print str(float(index * runs + run) / float(len(radii) * runs) * 100.0) + '%'

    # Save
    errors.to_csv(filepath, encoding='utf-8')
    plot_frame(errors, runs, path)