diff --git a/nomad/app_fastapi/optimade/elasticsearch.py b/nomad/app_fastapi/optimade/elasticsearch.py index 19210e9eceab76de60cee69e217d3dea202ad42f..6fae3014a0511eb73f1f27d3b0cb51e8a5bef69d 100644 --- a/nomad/app_fastapi/optimade/elasticsearch.py +++ b/nomad/app_fastapi/optimade/elasticsearch.py @@ -155,7 +155,10 @@ class ElasticsearchStructureCollection(EntryCollection): attrs['chemical_formula_hill'] = optimade_chemical_formula_hill( attrs['chemical_formula_hill']) attrs['chemical_formula_descriptive'] = attrs['chemical_formula_hill'] - dimension_types = attrs['dimension_types'] + dimension_types = attrs.get('dimension_types') + if dimension_types is None: + dimension_types = [0, 0, 0] + attrs['dimension_types'] = dimension_types if isinstance(dimension_types, int): attrs['dimension_types'] = [1] * dimension_types + [0] * (3 - dimension_types) attrs['nperiodic_dimensions'] = dimension_types diff --git a/nomad/normalizing/optimade.py b/nomad/normalizing/optimade.py index e281ea455fd59bbd2d3fec12b1639e78726305b1..fd7eb6664f11a42fec6f403b5d9fe61f13fdcc19 100644 --- a/nomad/normalizing/optimade.py +++ b/nomad/normalizing/optimade.py @@ -32,6 +32,10 @@ from nomad.datamodel.metainfo.public import section_system species_re = re.compile(r'^([A-Z][a-z]?)(\d*)$') +optimade_prop_names = [ + prop.name + for prop in OptimadeEntry.m_def.quantities + OptimadeEntry.m_def.sub_sections] + def transform_to_v1(entry: EntryMetadata) -> EntryMetadata: ''' @@ -42,7 +46,12 @@ def transform_to_v1(entry: EntryMetadata) -> EntryMetadata: if optimade is None: return entry - if optimade.chemical_formula_reduced is None or 'X' in optimade.chemical_formula_reduced: + for name in optimade_prop_names: + if getattr(optimade, name, None) is None: + entry.dft.m_remove_sub_section(DFTMetadata.optimade, -1) + return entry + + if optimade.chemical_formula_reduced and 'X' in optimade.chemical_formula_reduced: entry.dft.m_remove_sub_section(DFTMetadata.optimade, -1) return entry