Exemplo n.º 1
0
    def test_get_settings_from_file(self):
        settings = get_settings_from_file(SETTING_FILE)

        answers = [METADATA, ORIGINAL_METADATA, SCAN_SIZE_FILE]
        assert len(settings) == len(answers)
        for setting_read, answer in zip(settings, answers):
            np.testing.assert_equal(setting_read.as_dictionary(), answer)
def file_reader(filename: str, lazy: bool = False) -> List[dict]:
    """Reader electron backscatter patterns from .bmp files stored in a
    NORDIF project directory, their filenames listed in a text file.

    Parameters
    ----------
    filename
        File path to the NORDIF settings text file.
    lazy
        This parameter is not used in this reader.

    Returns
    -------
    scan : list of dicts
        Data, axes, metadata and original metadata.
    """
    # Get metadata from setting file
    ebsd_node = metadata_nodes("ebsd")
    md, omd, _ = get_settings_from_file(filename)
    dirname = os.path.dirname(filename)

    # Read static background image into metadata
    static_bg_file = os.path.join(dirname,
                                  "Background calibration pattern.bmp")
    try:
        md.set_item(ebsd_node + ".static_background", imread(static_bg_file))
    except FileNotFoundError:
        warnings.warn(
            f"Could not read static background pattern '{static_bg_file}', however it "
            "can be added using set_experimental_parameters().")

    # Set required and other parameters in metadata
    md.set_item("General.original_filename", filename)
    md.set_item("General.title", "Calibration patterns")
    md.set_item("Signal.signal_type", "EBSD")
    md.set_item("Signal.record_by", "image")

    scan = {}
    scan["metadata"] = md.as_dictionary()
    scan["original_metadata"] = omd.as_dictionary()

    coordinates = _get_coordinates(filename)

    data = _get_patterns(dirname=dirname, coordinates=coordinates)
    scan["data"] = data

    units = ["um"] * 3
    names = ["x", "dy", "dx"]
    scales = np.ones(3)
    scan["axes"] = [{
        "size": data.shape[i],
        "index_in_array": i,
        "name": names[i],
        "scale": scales[i],
        "offset": 0,
        "units": units[i],
    } for i in range(data.ndim)]

    return [scan]