Skip to content

Feature/sof-8050 Feat: 1st implementation of Experimental data [WIP] - #429

Open
VsevolodX wants to merge 13 commits into
devfrom
feature/SOF-8050
Open

Feature/sof-8050 Feat: 1st implementation of Experimental data [WIP]#429
VsevolodX wants to merge 13 commits into
devfrom
feature/SOF-8050

Conversation

@VsevolodX

Copy link
Copy Markdown
Member

No description provided.

VsevolodX and others added 12 commits September 3, 2026 22:09
…esis-loop properties

Experimental data on the platform (AlphaFilm). A sample is a physical specimen at a
fixed position on a substrate, with no crystal structure of its own; a measurement is
one procedure applied to one or more samples by an instrument, recorded once finished
— the analogues of material and job, kept as their own schemas so nothing that derives
formula, lattice or hash ever sees a sample.

- schema/sample.json, schema/measurement.json: composed from
  in_memory_entity/named_defaultable_has_metadata like job/base.json; the measurement
  embeds workflow.json as job.json does and takes its status enum from job/base.json by
  fragment reference. No _project: visibility comes from owner/sharing, not projects.
- core/reference/external.json mirrors exabyte.json (measurementId, sampleId, unitId);
  property/holder.json source.info becomes a oneOf over the two reference kinds, so a
  property can name a measurement and the sample it is about. exabyteId stays required
  and is [] for experimental properties until a sample is matched to a material.
- properties_directory: hysteresis_loop (2d_plot, x = bias, y = the measured channel,
  shape of band_structure) and five scalars shaped like pressure — imprint,
  coercive_voltage, loop_width, loop_height, remanent_response — with a field (on/off)
  enum and, where a branch is read, branch (rising/falling). definitions/units.json
  gains voltage.
- examples copied from UTK run 20260901_171601_alscn_01448 (pad r0c00, the run
  header, off-field loop parameters of site00_step0_pt00). The hysteresis_loop example
  follows separately: its 198-point arrays live in a file not yet in hand.
- tests/js/entityGraph.tests.ts pins updated: 573 nodes (+9), 943 edges; the holder's
  source.info oneOf turns its one contains edge into two variant edges (51 edges, 50
  variants: 48 on data, 2 on info). plan/context/2026-08-16-schema-graph-measurements.md
  kept in step as the test's comment requires.

Regenerated Python modules follow in a separate commit.
Output of the JS build (data/examples.py, data/properties.py, data/schemas.py) and of
datamodel-codegen 0.28.5 with the options from .pre-commit-config.yaml, run against
dist/js/schema after 697af87. Nine new models (sample, measurement,
core/reference/external, hysteresis_loop and the five scalars); the 84 touched files
are the generator's unstable enum-suffix renumbering (NameN, UnitsN, SlugifiedEntryOrSlugN),
which .cursor/rules/resolve-generated-merge-conflicts.mdc says never to hand-merge.
…n_01448

In-field amplitude loop of site00_step0_pt00: 198 bias steps (bias_on.npy) against the
segment-averaged Amp channel (Amp_on.npy) from UTK's loops folder, values to six
significant digits. schemasWithExample 217 -> 218 and the measurements doc in step.
…etadata, status description

- example/sample.json: metadata is {} — siteIndex is a run-local id (ONTOLOGY §1) and does
  not belong on the durable sample.
- core/reusable/field_condition.json and loop_branch.json replace the six inline copies of the
  field enum and the two of branch (README §3.1: core/reusable exists to avoid duplication).
- hysteresis_loop.json: drop the yAxis.units block that only restated axis.json.
- measurement.json: status keeps a description through allOf, the literature.json pages idiom,
  so the generated model no longer documents it as "job status".
- enum_options: loop_* before lumo_energy; units.json: voltage after length_atomic;
  manifest: entries filed under SCALAR / NON-SCALAR, no provenance header.
- entity-graph pins: 575 nodes, 951 edges (extends 381, contains 392, variant 178), reusable 33;
  measurements doc in step. Declined: anyOf for source.info — oneOf rejecting a payload that
  names both a job and a measurement is the intended constraint.
…de, legend per series; loop scalars removed

The platform stores one property per pad: the hysteresis loop of that pad, with the
parameters read from it. The per-loop scalars were the wrong grain — they made 20-odd
property documents per pad and left the combining to the viewer.

- properties_directory/non-scalar/hysteresis_loop.json: yAxis is the response and only
  the response; legend carries the field condition of each yDataSeries entry (the `field`
  discriminator is gone — a document holds both conditions); parameters.on/off hold the
  loop parameters and loopCount how many loops each series combines. Units stay on the
  axes: parameter voltages read in xAxis.units, responses in yAxis.units.
- core/reusable/combined_value.json: the {value, uncertainty, count} leaf — mean, spread
  and how many repeats it was taken over — built on core/primitive/scalar as
  scalar_with_accuracy_levels is, and used by every parameter leaf.
  core/reusable/hysteresis_loop_parameters.json holds imprint, coerciveVoltage,
  loopWidth, loopHeight and remanentResponse, the branch now a key rather than an enum.
- removed: properties_directory/scalar/{imprint,coercive_voltage,loop_width,loop_height,
  remanent_response}.json with their examples, holder data.oneOf entries, ScalarPropertyEnum
  entries and manifest entries; core/reusable/loop_branch.json, unused once the branch is
  a key. field_condition.json stays — the legend values — and so does the voltage units key.
- example: pad r0c01 of run 20260901_171601_alscn_01448, its eight loops combined by the
  importer (bias identical across loops, response averaged point-wise, parameters as
  mean/std/n).
- entity-graph pins recomputed from buildEntityGraph(): 571 nodes, 939 edges (377 extends,
  389 contains, 173 variant), reusable 34, directory 157, 213 examples; the holder's data
  variants drop from 48 to 43. plan/context/2026-08-16-schema-graph-measurements.md in step.

Regenerated Python modules follow in a separate commit.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…op property

datamodel-codegen 0.28.5 over dist/js/schema, per .pre-commit-config.yaml, with
--output ./src/py/mat3ra/esse/models (dist/py, the documented symlink, does not exist
in a fresh worktree). The six models whose schemas are gone — the five loop scalars
and core/reusable/loop_branch — are removed by hand: the generator only writes.
The rest is the usual renumbering of generated enum and model suffixes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…se units pinned, rising/falling defined once, loopCount dropped, descriptions survive $ref

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…op property review round

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…mple measurement

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@netlify

netlify Bot commented Sep 6, 2026

Copy link
Copy Markdown

Deploy Preview for mat3ra-esse failed. Why did it fail? →

Name Link
🔨 Latest commit 1edcdfd
🔍 Latest deploy log https://app.netlify.com/projects/mat3ra-esse/deploys/6a9cc4e580d841000702bdbd

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant