Skip to content

Commit d1c89c4

Browse files
crystal: Exported has_label to Pattern
1 parent 347a9f0 commit d1c89c4

File tree

4 files changed

+35
-32
lines changed

4 files changed

+35
-32
lines changed

tests/t_labels.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def test_has_label(self):
2222
self.assertTrue(not self.empty_experiment.has_label(label_type=LabelType.lattice))
2323

2424
self.assertTrue(self.full_experiment.has_label(label_type=LabelType.lattice))
25-
self.assertTrue(self.full_experiment.has_label(label_type=LabelType.atom_coords))
25+
self.assertTrue(self.full_experiment.has_label(label_type=LabelType.basis))
2626
self.assertTrue(self.full_experiment.has_label(label_type=LabelType.spg))
2727

2828

xrdpattern/crystal/components/crystal.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ def __post_init__(self):
3030
if not self.phase_fraction is None:
3131
if not 0 <= self.phase_fraction <= 1:
3232
raise ValueError(f'Phase fraction must be between 0 and 1. Got {self.phase_fraction}')
33+
if not len(self.basis) == 0:
34+
self.calculate_properties()
3335

3436
@classmethod
3537
def from_cif(cls, cif_content : str) -> CrystalStructure:

xrdpattern/xrd/data.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
from xrdpattern.crystal import CrystalStructure
1313
from xrdpattern.serialization import Serializable
14-
from xrdpattern.xrd.experiment import PowderExperiment
14+
from xrdpattern.xrd.experiment import PowderExperiment, LabelType
1515
from xrdpattern.xrd.metadata import Metadata
1616

1717

@@ -107,3 +107,32 @@ def angular_resolution(self):
107107
@property
108108
def is_simulated(self) -> bool:
109109
return self.powder_experiment.is_simulated
110+
111+
@property
112+
def is_labeled(self) -> bool:
113+
return any(self.has_label(label_type=lt) for lt in LabelType.get_main_labels())
114+
115+
def has_label(self, label_type: LabelType) -> bool:
116+
powder_experiment = self.powder_experiment
117+
if label_type == LabelType.primary_wavelength:
118+
return not powder_experiment.xray_info.primary_wavelength is None
119+
if label_type == LabelType.secondary_wavelength:
120+
return not powder_experiment.xray_info.secondary_wavelength is None
121+
122+
if len(powder_experiment.phases) == 0:
123+
return False
124+
125+
if label_type == LabelType.lattice:
126+
return True
127+
elif label_type == LabelType.spg:
128+
return powder_experiment.phases[0].spacegroup is not None
129+
elif label_type == LabelType.composition:
130+
return powder_experiment.phases[0].chemical_composition is not None
131+
elif label_type == LabelType.temperature:
132+
return powder_experiment.temp_K is not None
133+
elif label_type == LabelType.crystallite_size:
134+
return powder_experiment.crystallite_size_nm is not None
135+
elif label_type == LabelType.basis:
136+
return len(powder_experiment.phases[0].basis.atom_sites) > 0
137+
else:
138+
raise ValueError(f'Label type {label_type} is not supported.')

xrdpattern/xrd/experiment.py

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -68,34 +68,6 @@ def from_cif(cls, cif_content : str) -> PowderExperiment:
6868
# ---------------------------------------------------------
6969
# properties
7070

71-
72-
def has_label(self, label_type: LabelType) -> bool:
73-
if label_type == LabelType.primary_wavelength:
74-
return not self.xray_info.primary_wavelength is None
75-
if label_type == LabelType.secondary_wavelength:
76-
return not self.xray_info.secondary_wavelength is None
77-
78-
if len(self.phases) == 0:
79-
return False
80-
81-
if label_type == LabelType.lattice:
82-
return True
83-
elif label_type == LabelType.spg:
84-
return self.phases[0].spacegroup is not None
85-
elif label_type == LabelType.composition:
86-
return self.phases[0].chemical_composition is not None
87-
elif label_type == LabelType.temperature:
88-
return self.temp_K is not None
89-
elif label_type == LabelType.crystallite_size:
90-
return self.crystallite_size_nm is not None
91-
elif label_type == LabelType.atom_coords:
92-
return len(self.phases[0].basis.atom_sites) > 0
93-
else:
94-
raise ValueError(f'Label type {label_type} is not supported.')
95-
96-
def is_labeled(self) -> bool:
97-
return any(self.has_label(label_type=lt) for lt in LabelType.get_main_labels())
98-
9971
def __eq__(self, other : PowderExperiment):
10072
return self.to_str() == other.to_str()
10173

@@ -147,7 +119,7 @@ class LabelType(Enum):
147119
lattice = "lattice"
148120
lengths = "lengths"
149121
angles = "angles"
150-
atom_coords = "atom_coords"
122+
basis = "basis"
151123
spg = "spg"
152124
crystallite_size = 'crystallite_size'
153125
temperature = 'temperature'
@@ -159,4 +131,4 @@ class LabelType(Enum):
159131

160132
@classmethod
161133
def get_main_labels(cls) -> list[LabelType]:
162-
return [LabelType.lattice, LabelType.spg, LabelType.atom_coords, LabelType.composition]
134+
return [LabelType.lattice, LabelType.spg, LabelType.basis, LabelType.composition]

0 commit comments

Comments
 (0)