Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

using readonly instead of user_editability; enabling injesting multip… #486

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/pynxtools/nomad/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -513,7 +513,7 @@ def parse(
if archive.metadata.entry_type is None:
archive.metadata.entry_type = app_def
archive.metadata.domain = "nexus"
archive.metadata.user_editable = False
archive.metadata.readonly = True

# Normalise element info
if archive.results is None:
Expand Down
72 changes: 63 additions & 9 deletions src/pynxtools/nomad/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
InstrumentReference,
Measurement,
)
from nomad.datamodel.metainfo.workflow import Link, Task, Workflow
from nomad.metainfo import (
Attribute,
Bytes,
Expand Down Expand Up @@ -105,8 +106,8 @@
"NXsample": [CompositeSystem],
"NXsample_component": [Component],
"NXidentifier": [EntityReference],
"NXentry": [ActivityStep],
"NXprocess": [ActivityStep],
"NXentry": [ActivityStep], # , Task],
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove comment here if not used

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should eventually becomes its own workflow (nested in the workflow of the whole nxs file) containing its own Tasks. But fine for now

"NXprocess": [ActivityStep], # , Task],
"NXdata": [ActivityResult],
# "object": BaseSection,
}
Expand Down Expand Up @@ -139,7 +140,44 @@ def normalize(self, archive, logger):
self.method = self.m_def.name + " Experiment"
except (AttributeError, TypeError):
pass
super(NexusMeasurement, self).normalize(archive, logger)
super(basesections.Activity, self).normalize(archive, logger)

if archive.results.eln.methods is None:
archive.results.eln.methods = []
if self.method:
archive.results.eln.methods.append(self.method)
else:
archive.results.eln.methods.append(self.m_def.name)
Comment on lines +145 to +150
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we actually want to fill the results.eln.methods section? Is that needed in any way? If not, I suggest we remove it here.

if archive.workflow2 is None:
archive.workflow2 = Workflow(name=self.name)
# steps to tasks
act_array = archive.workflow2.tasks
existing_items = {(task.name, task.section) for task in act_array}
new_items = [
item.to_task()
for item in self.steps
if (item.name, item) not in existing_items
]
act_array.extend(new_items)
# samples to inputs
act_array = archive.workflow2.inputs
existing_items = {(link.name, link.section) for link in act_array}
new_items = [
Link(name=item.name, section=item.reference)
for item in self.samples
if (item.name, item.reference) not in existing_items
]
act_array.extend(new_items)

# results to outputs
act_array = archive.workflow2.outputs
existing_items = {(link.name, link.section) for link in act_array}
new_items = [
Link(name=item.name, section=item)
for item in self.results
if (item.name, item) not in existing_items
]
act_array.extend(new_items)


VALIDATE = False
Expand Down Expand Up @@ -952,7 +990,7 @@ def normalize_sample(self, archive, logger):
"""Normalizer for sample section."""
current_cls = __section_definitions[__rename_nx_for_nomad("NXsample")].section_cls
self.name = self.__dict__["nx_name"] + (
"(" + self.name__field + ")" if self.name__field else ""
" (" + self.name__field + ")" if self.name__field else ""
)
# one could also copy local ids to identifier for search purposes
super(current_cls, self).normalize(archive, logger)
Expand All @@ -964,12 +1002,18 @@ def normalize_entry(self, archive, logger):
if self.start_time__field:
self.start_time = self.start_time__field
self.name = self.__dict__["nx_name"] + (
"(" + self.title__field + ")" if self.title__field is not None else ""
" (" + self.title__field + ")" if self.title__field is not None else ""
)
# one could also copy local ids to identifier for search purposes
super(current_cls, self).normalize(archive, logger)


# def to_task_itself(self):
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove if not needed

# """takes advantage if an object itself is also a Task"""
# self.section=self
# return self


def normalize_process(self, archive, logger):
"""Normalizer for Process section."""
current_cls = __section_definitions[__rename_nx_for_nomad("NXprocess")].section_cls
Expand Down Expand Up @@ -998,7 +1042,7 @@ def create_Entity(lab_id, archive, f_name):
data=entitySec,
m_context=archive.m_context,
metadata=EntryMetadata(
entry_type="identifier", domain="nexus"
entry_type="identifier", domain="nexus", readonly=True
), # upload_id=archive.m_context.upload_id,
)
with archive.m_context.raw_file(f_name, "w") as f_obj:
Expand Down Expand Up @@ -1039,8 +1083,14 @@ def get_entry_reference(archive, f_name):
__rename_nx_for_nomad("NXsample"): normalize_sample,
__rename_nx_for_nomad("NXsample_component"): normalize_sample_component,
__rename_nx_for_nomad("NXidentifier"): normalize_identifier,
__rename_nx_for_nomad("NXentry"): normalize_entry,
__rename_nx_for_nomad("NXprocess"): normalize_process,
__rename_nx_for_nomad("NXentry"): {
"normalize": normalize_entry,
# "to_task": to_task_itself,
},
__rename_nx_for_nomad("NXprocess"): {
"normalize": normalize_process,
# "to_task": to_task_itself,
},
__rename_nx_for_nomad("NXdata"): normalize_data,
}

Expand All @@ -1053,4 +1103,8 @@ def get_entry_reference(archive, f_name):

# Append the normalize method from a function
if normalize_func:
section.section_cls.normalize = normalize_func
if isinstance(normalize_func, dict):
for key, value in normalize_func.items():
setattr(section.section_cls, key, value)
else:
section.section_cls.normalize = normalize_func
Loading