|
| 1 | +import numbers |
| 2 | +import pkg_resources |
| 3 | + |
| 4 | +from afmformats import meta |
| 5 | +from PyQt5 import uic, QtWidgets |
| 6 | + |
| 7 | + |
| 8 | +class TabInfo(QtWidgets.QWidget): |
| 9 | + def __init__(self, *args, **kwargs): |
| 10 | + super(TabInfo, self).__init__(*args, **kwargs) |
| 11 | + path_ui = pkg_resources.resource_filename("pyjibe.fd", |
| 12 | + "tab_info.ui") |
| 13 | + uic.loadUi(path_ui, self) |
| 14 | + |
| 15 | + def update_info(self, fdist): |
| 16 | + text = [] |
| 17 | + keys = list(fdist.metadata.keys()) |
| 18 | + |
| 19 | + text.append("<b>Dataset</b>") |
| 20 | + data_keys = ["path", "enum"] |
| 21 | + for kk in data_keys: |
| 22 | + text.append(get_string_rep(kk, fdist.metadata)) |
| 23 | + for kk in keys: |
| 24 | + if kk in meta.DEF_DATA and kk not in data_keys: |
| 25 | + text.append(get_string_rep(kk, fdist.metadata)) |
| 26 | + |
| 27 | + if set(keys) & set(meta.DEF_EXPERIMENT.keys()): |
| 28 | + text.append("") |
| 29 | + text.append("<b>Experiment:</b>") |
| 30 | + text_meta = [] |
| 31 | + for kk in keys: |
| 32 | + if kk in meta.DEF_EXPERIMENT: |
| 33 | + text_meta.append(get_string_rep(kk, fdist.metadata)) |
| 34 | + text += sorted(text_meta) |
| 35 | + |
| 36 | + if set(keys) & set(meta.DEF_QMAP.keys()): |
| 37 | + text.append("") |
| 38 | + text.append("<b>QMap:</b>") |
| 39 | + text_meta = [] |
| 40 | + for kk in keys: |
| 41 | + if kk in meta.DEF_QMAP: |
| 42 | + text_meta.append(get_string_rep(kk, fdist.metadata)) |
| 43 | + text += sorted(text_meta) |
| 44 | + |
| 45 | + if set(keys) & set(meta.DEF_ANALYSIS.keys()): |
| 46 | + text.append("") |
| 47 | + text.append("<b>Analysis:</b>") |
| 48 | + text_meta = [] |
| 49 | + for kk in keys: |
| 50 | + if kk in meta.DEF_ANALYSIS: |
| 51 | + text_meta.append(get_string_rep(kk, fdist.metadata)) |
| 52 | + text += sorted(text_meta) |
| 53 | + |
| 54 | + textstring = "<br>".join(text) |
| 55 | + |
| 56 | + self.info_text.setText(textstring) |
| 57 | + |
| 58 | + |
| 59 | +def get_string_rep(key, metadata): |
| 60 | + """Return a nice string representation for a key in metadata""" |
| 61 | + value = metadata[key] |
| 62 | + desc, unit, validator = meta.DEF_ALL[key] |
| 63 | + |
| 64 | + value = validator(value) |
| 65 | + |
| 66 | + if unit == "m": |
| 67 | + unit = "µm" |
| 68 | + value *= 1e6 |
| 69 | + |
| 70 | + if isinstance(value, numbers.Integral): |
| 71 | + pass |
| 72 | + elif isinstance(value, numbers.Real): |
| 73 | + if abs(value) > 1: |
| 74 | + value = "{:.2f}".format(value) |
| 75 | + elif abs(value) > 1e-2: |
| 76 | + value = "{:.5f}".format(value) |
| 77 | + else: |
| 78 | + value = "{:.3e}".format(value) |
| 79 | + |
| 80 | + rep = "{}: {}".format(desc, value) |
| 81 | + if unit: |
| 82 | + rep += " {}".format(unit) |
| 83 | + return rep |
0 commit comments