{% import "_nc_tables.html" as t -%} {% import "_nav.html" as navm -%} {% macro snippet(id, title, text) -%}

{{ title }}

{%- endmacro -%} {{ title }}

{{ title }}

{{ "draft" if draft else "conversion" }}

{{ title }}generated {{ generated_at }}

{{ navm.page_nav(page_nav) }}
{%- for label, value in masthead_meta %}
{{ label }}
{{ value }}
{%- endfor %}
seagliderOG1
{%- if draft %}

Draft: converted with no mission config, so platform, contributor and institution metadata are absent or UNK and this is not an OG1 file (amber: every draft page carries this line). It shows what the basestation files hold and what the conversion does to them; write the config with seagliderOG1 init --raw-dir …, then seagliderOG1 process.

{%- endif %} {%- if draft_snippets %}

Suggested mission.yaml lines

What this draft read from the basestation files, as lines to paste into a mission.yaml (start one with seagliderOG1 init, or use <id>_draft_mission.yaml written beside this page, which also has raw_dir). Only values the files carry are filled; null is yours to fill.

{%- for s in draft_snippets %} {{ snippet("snippet-" ~ loop.index, s.title, s.text) }} {%- endfor %}
{%- endif %} {%- if config_suggestions %}

mission.yaml against the data

Lines for the mission.yaml this conversion was given, where it and the output disagree or fall short: the requested dives against the dives that reached the file; platform fields set in the config against the values the files carry (the config wins by design, e.g. a local nickname for PLATFORM_SERIAL_NUMBER, so a pair is a value to check, not an error); platform fields written as UNK or omitted; institution ids the registry resolved; and missing ACDD globals. Only checks that find something are shown.

{%- for s in config_suggestions %} {%- set block = loop.index %}

{{ s.title }}

{{ s.note }}

{%- for b in s.boxes %} {{ snippet("config-" ~ block ~ "-" ~ loop.index, b.label, b.text) }} {%- endfor %}
{%- endfor %}
{%- endif %}

1. Before → after

What the conversion read and what it wrote. The basestation column is read from the conversion record beside the file{% if not record_present %}, which was not found, so its cells show "—"{% endif %}. "same" means the quantity is unchanged by conversion.

{%- for r in summary_rows %} {{ r.quantity }} {%- endfor %}
QuantityBasestation input{{ "Draft output" if draft else "OG1 output" }}
{{ r.input }}{{ r.output }}

{% for c in verdict_clauses %}{{ c.text }}{% if not loop.last %} · {% endif %}{% endfor %}

1b. Unit corrections

What the conversion did to each variable's units. Label corrected: the basestation label was wrong for the magnitude, so only the label was fixed and the value left unchanged. Converted: the values were scaled by the factor shown to reach the OG1 units. OG1 label adopted: the basestation file carried no units, so the OG1 label was taken (the value is unchanged, assumed to be in those units). A pure spelling rewrite with no value change is not listed; the Unit mapping docs page carries the full spelling view. Only variables whose units were corrected, converted, or adopted are shown.

{%- if unit_corrections_rows %} {%- for r in unit_corrections_rows %} {%- endfor %}
VariableLabel as writtenUnits writtenWhat happened
{{ r.name }}{{ r.original }}{{ r.written }}{{ r.action }}
{%- else %}

Not applicable to this file: no variable's units were corrected, converted, or adopted.

{% endif %}

2. {{ "What an OG1 file would hold" if draft else "The OG1 file" }}

The output read by what OG1 says it must and may contain, not by where it came from — the view that answers "where did the elements of my OG1 file come from". Orig var names the basestation variable (or how the converter built it) and Orig dim its basestation dimension.

Required by OG1

{{ og1_required_caption }}. The list is the upstream checker's (ioos/cc-plugin-og); amber: a required variable or the required dimension is absent.

{%- for r in og1_required %} {%- endfor %}
RequiredOrig varOrig dimDimsUnitsValid %
{{ r.name }} {{ r.orig_var }}{{ r.orig_dim }}{{ r.dims }}{{ r.units }}{{ r.valid }}

Sensors named by OG1 (not required)

{%- if og1_sensors %}

{{ og1_sensors|length }} SENSOR_* variables, from the basestation calibration comments and config/OG1_sensor_attributes.yaml. Used by lists the variables whose sensor attribute names the sensor. Amber: the serial number or calibration date is a placeholder (empty, or every digit zero), so the basestation configuration did not record it; or two sensors share a serial number, which usually means a calibration comment was copied from another instrument. Both come from the basestation sg_calib_constants; check them against the calibration sheets.

{%- for r in og1_sensors %} {%- endfor %}
SensorTypeMakerModelSerialCalibrationUsed by
{{ r.name }}{{ r.type }}{{ r.maker }}{{ r.model }}{{ r.serial }}{% if r.shared %} (shared){% endif %}{{ r.calibration }}{{ r.n_used }}: {{ r.used_by }}
{%- else %}

Not applicable to this file: no SENSOR_* variables.

{% endif %}

Named by OG1 (not required)

{%- if og1_named %}

{{ og1_named|length }} variables OG1 has a defined name and meaning for, present but not required — the science payload, phase and profile variables, and QC flags (the sensors are in the table above).

{%- for r in og1_named %} {%- endfor %}
VariableOrig varOrig dimDimsUnitsValid %
{{ r.name }}{{ r.orig_var }}{{ r.orig_dim }}{{ r.dims }}{{ r.units }}{{ r.valid }}
{%- else %}

Not applicable to this file: no OG1-named variables beyond the required ones.

{% endif %} {%- for g in og1_candidate_groups %}

Candidate for OG1 — {{ g.label }}

{{ g.n_present }} of {{ g.n_total }} present. Variables the project proposes to canonise (not yet in the OG1 vocabulary); recorded in vocabularies.OG1_CANDIDATE_VARS. An absent candidate (amber) is informational — a file may predate it.

{%- for r in g.rows %} {%- endfor %}
CandidateOrig varOrig dimDimsUnitsValid %
{{ r.name }} {{ r.orig_var }}{{ r.orig_dim }}{{ r.dims }}{{ r.units }}{{ r.valid }}
{%- endfor %}

Carried through (not OG1)

{%- if og1_carried %}

Basestation variables kept so the conversion loses nothing, summarised by family; expand a row to list its variables.

{%- for f in og1_carried %} {%- endfor %}
FamilyCountWhat they areVariables
{{ f.family }}{{ f.count }}{{ f.what }}
list{{ f.names }}
{%- else %}

Not applicable to this file: every variable is required or OG1-named.

{% endif %}

Same quantity, more than once

{%- if duplicate_groups %}

Where more than one output variable encodes the same quantity (shared standard_name, not matched by name). The reference row (first, from the OG1-required or OG1-named member) sets the baseline; each other row is that variable minus the reference (mean offset, RMSD and max |diff|), over the samples both carry, in the reference's units. "not comparable" where the unit alias table relates no conversion; the difference-against-depth figure is a deferred follow-up.

{%- for g in duplicate_groups %}

{{ g.standard_name }} — reference {{ g.reference }} ({{ g.reference_units }})

{%- for r in g.rows %} {%- endfor %}
VariableUnitsN overlapMean offset (var − ref)RMSDMax |diff|Note
{{ r.name }}{{ r.units }}{{ r.n_overlap }}{{ r.offset }}{{ r.rmsd }}{{ r.max_abs }}{{ r.note }}
{%- endfor %} {%- else %}

Not applicable to this file: no quantity appears under more than one variable.

{% endif %}

3. Reconciliation — where the variables went

{{ reconciliation_caption }}

{%- for label, count, meaning in reconciliation[:-1] %} {%- endfor %}
FateCountMeaning
{{ label }}{{ count }}{{ meaning }}
{{ reconciliation[-1][0] }}{{ reconciliation[-1][1] }}
{%- if fate_histogram %}
Bar chart of the variable counts per fate {%- if show_source and fate_histogram_source %}
source: {{ fate_histogram_source }}
{% endif %}
{%- endif %}

4. Presence across dives

{%- if presence_rows %}

{{ presence_summary }}. The converter works from the union of the input files' variables.

One row per pattern: the dives a group of variables has values in (Valid in) and the dives it exists in at all (Present in), each with its share of the input dives. Amber: a Valid % below 100 — has values on fewer than every input dive (a sensor switched on or off mid-mission, a quantity only computed after the first dive, or an occasional log entry). Each % is the share of the input dives.

{%- for r in presence_rows %} {{ r.valid_pct }} {%- endfor %}
PatternValid inValid %Present inPresent %Variables
{{ r.label }}{{ r.valid }}{{ r.present }}{{ r.present_pct }} {{ r.n }}
list{{ r.variables }}
{%- if presence_strips %}
Strips of the dives each variable pattern is present in and has values in {%- if show_source and presence_strips_source %}
source: {{ presence_strips_source }}
{% endif %}
{%- endif %} {%- else %}

Presence across dives: conversion record not found ({{ record_name }}). The variables are the union over the input files; which dives carried which is not recorded in the file.

{%- endif %}

5. Dimensions

Amber: dimension skipped — no variable from it reaches this file. Fate is read from the output: backbone — the dimension whose samples define N_MEASUREMENTS; merged — its samples are added to N_MEASUREMENTS at their own times; skipped — not in the file. Samples in is that dimension's length summed over the input files ("—" when the conversion record is absent).

{%- for d in dimensions %} {{ d.fate }} {%- endfor %}
Original dimensionFateVariablesSamples inDimension after conversion
{{ d.dimension }}{{ d.n }}
list{{ d.variables }}
{{ d.samples_in }} {{ d.ended_on }}

6. Derived variables

Variables the converter built rather than renamed. Sources names the basestation variables consumed, or "(computed)" when built from other OG1 variables, vocabulary or global attributes.

{%- if derived_rows %} {{ t.thead(("Variable", "Sources", "Attributes"), nosort=("Attributes",)) }} {%- for r in derived_rows %} {{ t.name_cell(r) }} {%- endfor %}
{{ r.sources }}{{ t.attr_disclosure(r.attrs) }}
{%- else %}

Not applicable to this file: no derived variables.

{% endif %}

7. Dropped and removed variables

Dropped on request (keep_variables)

{%- if dropped %}

Recorded here because nothing in the file carries them.

{%- else %}

Not applicable to this file: no variables were dropped on request.

{% endif %}

Removed by the converter (package drop list)

{%- if removed %}

Basestation variables the converter always removes; recorded here because they leave no trace in the file.

{%- else %}

Not applicable to this file: the package drop list is empty, so every basestation variable is retained.

{% endif %}

8. By basestation origin (variables grouped by original dimension)

The same output variables read the other way — what became of each dive file's variables, grouped by the basestation dimension they came from.

{%- for b in variable_blocks %} {{ t.variables_tables([(b.title, b.rows)], source=(variables_source if loop.last else None), numbered=True, optional=("units", "minmax", "attrs", "stdname"), caption=b.caption) }} {%- endfor %}
{%- if draft %}

9. Basestation global attributes

For an OG1 file, mission.yaml must supply what is missing here — {{ requirement_text }}

{%- if basestation_rows %}

The input files' own global attributes, before any OG1 enrichment; the value is the first file's. Amber: the attribute differs between files or is missing from some.

{%- for r in basestation_rows %} {{ r.status }}{% if r.distinct %}
values{{ r.distinct|join(" · ") }}
{% endif %}
{%- endfor %}
AttributeValue (first file)In
{{ r.name }}{{ r.value }}
{%- else %}

Basestation global attributes: not in the conversion record ({{ record_name }}); convert again with this version to record them.

{%- endif %} {%- else %}

9. Global attributes

{{ requirement_text }}

{{ t.globals_tables(global_groups, computed=coverage_computed, source=globals_source, coverage_note="amber: the file's stated bound differs from the value recomputed from the data by more than the tolerance.") }} {%- endif %}

Conventions claims {{ conventions.claim or "(none)" }}. What the file holds against it (presence only; amber when any count is short):

Not a compliance check: run cc-plugin-og (OG1) or the IOOS compliance-checker (CF, ACDD) on the file.

History

{{ t.properties_table(history_rows, header=("#", "History")) }}

10. Scalar parameters

Split by whether the converter renamed the scalar to an OG1 name, then by basestation prefix. A per-dive scalar's Value shows the decoded per-dive values; its raw JSON serialization stays in the Attributes disclosure. The renamed group is open; expand the others as needed.

{%- for g in scalar_groups %}
{% if g.mono %}{{ g.title }}{% else %}{{ g.title }}{% endif %} ({{ g.rows|length }}) {{ t.scalars_table(g.rows, source=(scalar_source if loop.last else None), optional=("units", "attrs", "stdname"), caption="amber: a numeric parameter with no units attribute") }}
{%- endfor %}
{{ js_sort_tables | safe }} {%- if draft_snippets or config_suggestions %} {%- endif %} {{ js_top_links | safe }}