{% extends "base.html" %} {% import "_macros.html" as m %} {% block title %}{{ page_title }} — netCDF inventory{% endblock %} {% block masthead_title %}{{ meta.filename }}{% endblock %} {% block masthead_type %}netCDF inventory{% endblock %} {% block head_extra %} {% endblock %} {% block masthead_meta %}
File
{{ meta.filename }}
{% if meta.filesize %}
Size
{{ "%.1f"|format(meta.filesize / 1024) }} KB
{% endif %} {% if meta.dims %}
Dimensions
{% for d, n in meta.dims.items() %}{{ d }}={{ n }}{% if not loop.last %}, {% endif %}{% endfor %}
{% endif %} {% if meta.coords %}
Coordinates
{{ meta.coords|length }}
{% endif %} {% if meta.data_vars %}
Data variables
{{ meta.data_vars|length }}
{% endif %}
{% endblock %} {% block content %} {{ m.inventory_pills(inventory_pills, current_href) }} {% if meta.error %}

Could not read {{ meta.filename }}: {{ meta.error }}

{% else %} {% macro var_table(rows, with_length=false, show_type=true, show_units=true, show_minmax=true, show_valid=true) %} {% if with_length %}{% endif %}{% if show_type %}{% endif %}{% if show_units %}{% endif %} {% if show_minmax %}{% endif %}{% if show_valid %}{% endif %} {% for v in rows %} {% if with_length %}{% endif %} {% if show_type %}{% endif %} {% if show_units %}{% endif %} {% if show_minmax %}{% endif %} {% if show_valid %}{% endif %} {% endfor %}
VariableDimensionsLengthTypeUnitsStandard / long nameMinMaxValidAttributes
{{ v.name }} {{ v.dims }}{{ v.n }}{{ v.dtype }}{{ v.units }}{% if v.standard_name %}{{ v.standard_name }}{% endif %}{% if v.standard_name and v.long_name %}: {% endif %}{% if v.long_name %}{{ v.long_name }}{% endif %}{{ v.v_min }}{{ v.v_max }}{{ v.n_valid }}{% if v.n_valid < v.n %} / {{ v.n }}{% endif %} {% if v.attrs %}
{{ v.attrs|length }} attr{{ "s" if v.attrs|length != 1 }} {% for k, val in v.attrs.items() %}{% endfor %}
{{ k }}{{ val }}
{% else %}—{% endif %}
{% endmacro %} {# Build the numbered section list once, so the jump-nav and each heading share one "(N) Title" numbering (present sections only). #} {% set secs = [] %} {% if meta.qc_exclusion %}{% set _ = secs.append(("s-qc-drop", "QC exclusions")) %}{% endif %} {% if meta.rename_map %}{% set _ = secs.append(("s-rename", "Variable renaming")) %}{% endif %} {% set _ = secs.append(("s-coords", "Coordinates")) %} {% set _ = secs.append(("s-vars", "Data variables")) %} {% if meta.sensor_catalog %}{% set _ = secs.append(("s-sensor-catalog", "Sensor catalog")) %}{% endif %} {% if meta.sensor_linkage %}{% set _ = secs.append(("s-sensor-linkage", "Sensor linkage")) %}{% endif %} {% if meta.sensor_channel %}{% set _ = secs.append(("s-sensor-channel", "Sensor channels")) %}{% endif %} {% if meta.global_attrs %}{% set _ = secs.append(("s-global", "Global attributes")) %}{% endif %} {% set nums = {} %} {% for sid, title in secs %}{% set _ = nums.update({sid: loop.index}) %}{% endfor %}
{% for sid, title in secs %}{{ m.heading_text(loop.index, title) }} {% endfor %}
{% if meta.qc_exclusion %}

{{ m.heading_text(nums["s-qc-drop"], "QC exclusions") }}

Samples flagged QARTOD suspect (3) or fail (4) are dropped before pressure binning. The denominator is the count of finite input samples before binning, so the percentage is not distorted by binning's own reduction in point count.

A variable's exclusions are not all its own: the whole-cast soak / on-deck trim flags the same pre-descent and post-recovery scans on every variable, so a variable can be excluded here without its own gross-range or spike test having raised anything.

{% for r in meta.qc_exclusion %} {% endfor %}
VariableExcludedInput samples% excluded
{{ r.name }} {{ r.n_excluded }} {{ r.n_input }} {{ "%.2f"|format(r.pct) }}%
{% endif %} {% if meta.rename_map %}

{{ m.heading_text(nums["s-rename"], "Variable renaming") }}

Source → canonical name, from each variable's cnv_original_name attribute (written at read time) so the rename is reconstructable from the output alone.

{% for src, canon in meta.rename_map.items() %} {% endfor %}
Source nameCanonical name
{{ src }}{{ canon }}
{% endif %}

{{ m.heading_text(nums["s-coords"], "Coordinates") }}

{{ var_table(meta.coords, with_length=true) }}

{{ m.heading_text(nums["s-vars"], "Data variables") }}

Each row's Attributes cell expands to the full per-variable attribute set.

{{ var_table(meta.data_vars) }} {% if meta.sensor_catalog %}

{{ m.heading_text(nums["s-sensor-catalog"], "Sensor catalog") }}

One dimensionless variable per distinct physical sensor; all provenance lives in its Attributes (model, serial, calibration date, vocabularies). No data, so no type, units, or value range.

{{ var_table(meta.sensor_catalog, show_type=false, show_units=false, show_minmax=false, show_valid=false) }} {% endif %} {% if meta.sensor_linkage %}

{{ m.heading_text(nums["s-sensor-linkage"], "Sensor linkage") }}

Per profile, the catalog variable naming the sensor in each role. String-valued, so no units or numeric range.

{{ var_table(meta.sensor_linkage, show_units=false, show_minmax=false) }} {% endif %} {% if meta.sensor_channel %}

{{ m.heading_text(nums["s-sensor-channel"], "Sensor channels") }}

Per profile, the raw CNV acquisition channel of each role's sensor (integer; -1 where unused).

{{ var_table(meta.sensor_channel, show_type=false, show_units=false) }} {% endif %} {% if meta.global_attr_groups %}

{{ m.heading_text(nums["s-global"], "Global attributes") }}

Shown in the file's own write order, split into the canonical groups.

{% for grp in meta.global_attr_groups %}

{{ m.heading_text(nums["s-global"] ~ "." ~ loop.index, grp.title) }}

{% for k, val in grp.rows %}{% endfor %}
{{ k }}{{ val }}
{% endfor %} {% endif %} {% endif %} {{ js_top_links | safe }} {% endblock %}