Exemplo n.º 1
0
    def test_measure_focus(self):
        """
        Test MeasureFocus
        """
        data = hdf5.read_data(os.path.dirname(__file__) + "/grid_10x10.h5")
        C, T, Z, Y, X = data[0].shape
        data[0].shape = Y, X
        input = data[0]

        prev_res = autofocus.MeasureSEMFocus(input)
        for i in range(1, 10, 1):
            blur = ndimage.gaussian_filter(input, sigma=i)
            res = autofocus.MeasureSEMFocus(blur)
            self.assertGreater(prev_res, res)
            prev_res = res
def read_timelapse(infn, emfn, fmfn):
    """
    infn (str): pattern for input filename
    emfn: sem output filename
    fmfn: fluorescence output filename
    """

    infiles = sorted(glob.glob(infn))

    if not infiles:
        raise ValueError("No file fitting '%s'" % (infn, ))

    emdata = {}  # timestamp -> tuple of info (X/Y, overlay X/Y)
    fmdata = {}  # timestamp -> tuple of info (X/Y)
    emda_prev = emda0 = fmda_prev = fmda0 = None
    for i, infl in enumerate(infiles):
        logging.info("Processing %s (%d/%d)", infl, i + 1, len(infiles))

        try:
            # Read the file
            reader = dataio.find_fittest_converter(infl)
            das = reader.read_data(infl)

            # Read the metadata (we expect one fluo image and one SEM image)
            fmpos = empos = emda = fmda = fmfoc = emfoc = None
            for da in das:
                if model.MD_IN_WL in da.metadata:  # Fluo image
                    fmpos = da.metadata[
                        model.
                        MD_POS]  # this one has the overlay translation included
                    fmdate = da.metadata[model.MD_ACQ_DATE]
                    fmda = da
                    fmpxs = da.metadata[model.MD_PIXEL_SIZE]
                    fmfoc = autofocus.MeasureOpticalFocus(da)
                else:  # SEM
                    empos = da.metadata[model.MD_POS]
                    emdate = da.metadata[model.MD_ACQ_DATE]
                    emda = da
                    empxs = da.metadata[model.MD_PIXEL_SIZE]
                    emfoc = autofocus.MeasureSEMFocus(da)

            # Overlay translation
            ovlpos = fmpos[0] - empos[0], fmpos[1] - empos[1]

            # Compute drift from first image and previous image
            if i == 0:
                emda0 = emda
                fmda0 = fmda
                emdriftm = 0, 0
                empdriftm = 0, 0
                fmdriftm = 0, 0
                fmpdriftm = 0, 0
            else:
                emdrift = drift.CalculateDrift(emda0, emda, 10)  # in pixels
                emdriftm = emdrift[0] * empxs[0], emdrift[1] * empxs[1]
                logging.info("Computed total EM drift of %s px = %s m",
                             emdrift, emdriftm)

                empdrift = drift.CalculateDrift(emda_prev, emda,
                                                10)  # in pixels
                empdriftm = empdrift[0] * empxs[0], empdrift[1] * empxs[1]
                logging.info("Computed previous EM drift of %s px = %s m",
                             empdrift, empdriftm)

                fmdrift = drift.CalculateDrift(fmda0, fmda, 10)  # in pixels
                fmdriftm = fmdrift[0] * fmpxs[0], fmdrift[1] * fmpxs[1]
                logging.info("Computed total FM drift of %s px = %s m",
                             fmdrift, fmdriftm)

                fmpdrift = drift.CalculateDrift(fmda_prev, fmda,
                                                10)  # in pixels
                fmpdriftm = fmpdrift[0] * fmpxs[0], fmpdrift[1] * fmpxs[1]
                logging.info("Computed previous FM drift of %s px = %s m",
                             fmpdrift, fmpdriftm)

            emdata[emdate] = (empos[0], empos[1], ovlpos[0], ovlpos[1],
                              emdriftm[0], emdriftm[1], empdriftm[0],
                              empdriftm[1], emfoc)
            fmdata[fmdate] = (fmpos[0], fmpos[1], fmdriftm[0], fmdriftm[1],
                              fmpdriftm[0], fmpdriftm[1], fmfoc)

            emda_prev = emda
            fmda_prev = fmda
        except KeyboardInterrupt:
            logging.info("Closing after only %d images processed", i)
            return
        except Exception:
            logging.exception("Failed to read %s", infl)

    # export the data
    logging.info("Exporting the data...")
    export_csv(
        emdata, emfn,
        "timestamp, posx, posy, overlay x, overlay y, total drift x, total drift y, prev drift x, prev drift y, focus level\n"
    )
    export_csv(
        fmdata, fmfn,
        "timestamp, posx, posy, total drift x, total drift y, prev drift x, prev drift y, focus level\n"
    )

    return 0