Skip to content

NxData Seems valid, but cannot be displayed by any existing plot widget. #4439

@abmajith

Description

@abmajith

We have this function, basically getting some attributes from the list of grain and allocating in the attributes, but
i could not see the result in the silx view of the respective grain group, it does not throwed an error also

def create_nexus_grains_data_group(
    group_path: h5py.Group,
    grains: List[Grain],
) -> str:

    if not grains:
        raise ValueError("Grains list is empty!")

    grain_data_group = group_path.require_group("grains")
    grain_data_group.attrs["NX_class"] = "NXdata"
    num_grains = len(grains)

    ubi_matrices = grain_data_group.create_dataset(
        "UBI", shape=(num_grains, 3, 3), dtype=grains[0].ubi.dtype
    )
    translations = grain_data_group.create_dataset(
        "translation", shape=(num_grains, 3), dtype=grains[0].ubi.dtype
    )
    npks = grain_data_group.create_dataset("npks", shape=(num_grains,), dtype=np.int64)
    nuniq = grain_data_group.create_dataset(
        "nuniq", shape=(num_grains,), dtype=np.int64
    )
    names = grain_data_group.create_dataset(
        "name", shape=(num_grains,), dtype=h5py.string_dtype(encoding="utf-8")
    )
    intensity_infos = grain_data_group.create_dataset(
        "intensity_info", shape=(num_grains,), dtype=h5py.string_dtype(encoding="utf-8")
    )
    mean_intensity = grain_data_group.create_dataset(
        "mean_intensity", shape=(num_grains,), dtype=np.float64
    )

    for i, grain in enumerate(grains):
        ubi_matrices[i] = grain.ubi
        if hasattr(grain, "translation"):
            translations[i] = grain.translation
        if hasattr(grain, "npks"):
            npks[i] = grain.npks
        if hasattr(grain, "nuniq"):
            nuniq[i] = grain.nuniq
        if hasattr(grain, "name"):
            names[i] = grain.name
        if hasattr(grain, "intensity_info"):
            intensity_infos[i] = grain.intensity_info
            if "no peaks" in grain.intensity_info:
                mean_intensity[i] = 0
            else:
                mean_intensity[i] = float(
                    grain.intensity_info.split("mean = ")[1]
                    .split(" , ")[0]
                    .replace("'", "")
                )

    grain_data_group.create_dataset("x", data=translations[:, 0])
    grain_data_group.create_dataset("y", data=translations[:, 1])
    grain_data_group.create_dataset("z", data=translations[:, 2])

    grain_data_group.attrs["signal"] = "mean_intensity"
    grain_data_group.attrs["axes"] = ("x", "y", "z")
    grain_data_group.attrs["interpretation"] = "vertex"

    return grain_data_group.name

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions