This class performs basic ways to rank elements, show elements, calculate normed intensity, and etc.
| 74 | |
| 75 | |
| 76 | class ElementController(object): |
| 77 | """ |
| 78 | This class performs basic ways to rank elements, show elements, |
| 79 | calculate normed intensity, and etc. |
| 80 | """ |
| 81 | |
| 82 | def __init__(self): |
| 83 | self.element_dict = OrderedDict() |
| 84 | |
| 85 | def delete_item(self, k): |
| 86 | try: |
| 87 | del self.element_dict[k] |
| 88 | self.update_norm() |
| 89 | logger.debug("Item {} is deleted.".format(k)) |
| 90 | except KeyError: |
| 91 | pass |
| 92 | |
| 93 | def order(self, option="z"): |
| 94 | """ |
| 95 | Order dict in different ways. |
| 96 | """ |
| 97 | if option == "z": |
| 98 | self.element_dict = OrderedDict(sorted(self.element_dict.items(), key=lambda t: t[1].z)) |
| 99 | elif option == "energy": |
| 100 | self.element_dict = OrderedDict(sorted(self.element_dict.items(), key=lambda t: t[1].energy)) |
| 101 | elif option == "name": |
| 102 | self.element_dict = OrderedDict(sorted(self.element_dict.items(), key=lambda t: t[0])) |
| 103 | elif option == "maxv": |
| 104 | self.element_dict = OrderedDict( |
| 105 | sorted(self.element_dict.items(), key=lambda t: t[1].maxv, reverse=True) |
| 106 | ) |
| 107 | |
| 108 | def add_to_dict(self, dictv): |
| 109 | """ |
| 110 | This function updates the dictionary element if it already exists. |
| 111 | """ |
| 112 | self.element_dict.update(dictv) |
| 113 | logger.debug("Item {} is added.".format(list(dictv.keys()))) |
| 114 | self.update_norm() |
| 115 | |
| 116 | def update_norm(self, threshv=0.0): |
| 117 | """ |
| 118 | Calculate the normalized intensity for each element peak. |
| 119 | |
| 120 | Parameters |
| 121 | ---------- |
| 122 | threshv : float |
| 123 | No value is shown when smaller than the threshold value |
| 124 | """ |
| 125 | # Do nothing if no elements are selected |
| 126 | if not self.element_dict: |
| 127 | return |
| 128 | |
| 129 | max_dict = np.max([v.maxv for v in self.element_dict.values()]) |
| 130 | |
| 131 | for v in self.element_dict.values(): |
| 132 | v.norm = v.maxv / max_dict * 100 |
| 133 | v.lbd_stat = bool(v.norm > threshv) |