GX-TXT Replicate Curve Analysis v15.2 — Complete Manual

Indice

Module ID: curve.replicate_analysis
Display name: Replicate Curve Analysis
Module version: 15.2
Target framework: GX-TXT 0.9.8.10-dev-031
Module type: Analysis
Dependencies: math.numeric, plot.dataset
License: GPL-3.0-or-later


1. What this module does

curve.replicate_analysis statistically characterizes repeated measurements or repeated digitizations of an X/Y curve.

Its main purpose is to turn repeated curve data into:

The module can combine:

The module does not perform physical-model fitting.

It does not estimate Koren, diode, transistor, SPICE or other physical-model parameters. Its output can be passed to a separate fitting module such as curvefit.family_global.


2. Scientific question answered by the module

The module addresses questions such as:

If the same curve has been measured or digitized more than once, what is the best empirical consensus curve?

How much do repeats differ from each other?

How much variation occurs inside one source/session and how much variation occurs between sources/sessions?

Over which X interval are all repetitions actually comparable?

Which consensus points should be passed to the next fitting stage without letting denser digitizations automatically receive more weight?

The module therefore sits between raw repeated curves and a subsequent scientific model fit.


3. Important non-goals

The module deliberately does not attempt to estimate:

Its uncertainty outputs are empirical statistics of the supplied repeated data.


Part I — Input data model

4. Required bindings

The module exposes four bindings:

Binding Required Meaning
Independent X yes independent coordinate
Family / sweep variable no physical family/sweep value
Measured Y yes measured dependent variable
Curve / replicate ID no explicit identity of one repeated curve

The normal binding pattern is:

X         = primary.x
Family    = primary.family_value
Y         = primary.y
Replicate = auto

If no Family variable exists, leave Family blank.

If the Dataset already contains a true curve identifier such as curve_id, you may bind it explicitly, but in normal use the Replicate binding can remain blank/automatic.


5. The Family variable

The Family variable identifies a physical sweep member.

Examples:

grid voltage
anode current
temperature
concentration
frequency
bias voltage
sample condition encoded numerically

Example Dataset:

Va_V,Vg_V,Ia_mA,curve_id
50,-5,2.1,c01
75,-5,5.2,c01
100,-5,8.8,c01
50,-4,4.0,c02
75,-4,8.3,c02
100,-4,13.9,c02

Possible bindings:

X      = Va_V
Family = Vg_V
Y      = Ia_mA

The current module requires the Family variable to be numeric.

Do not use a textual curve label as Family when a numeric physical family variable exists.

For example:

Wrong:
Family = curve_label

Correct:
Family = family_value

A textual label may still exist as metadata, but the statistical family variable should represent the actual physical sweep value.


6. The Replicate variable

A true replicate identifier tells the module which rows belong to one original curve.

Typical names automatically recognized include:

replicate_id
replicate
curve_id
curve
trace_id
trace
rep_id
rep

The identifier may be numeric or textual.

Examples:

curve_001
curve_002
run_A
run_B
1
2

Replicate ID and Family are different concepts.

Example:

Family = -5 V
Replicate = digitization_1

Family = -5 V
Replicate = digitization_2

Family = -4 V
Replicate = digitization_1

7. Multiple Analysis Sources

The module uses the GX-TXT Analysis Source Map.

The descriptor declares:

[analysis_sources]
api_version=1
ids=primary
dynamic=1

Therefore the normal multi-source workflow is:

  1. select a primary Dataset;
  2. click + Add source;
  3. add each additional canonical Dataset;
  4. keep the same scientific X/Y/Family meaning across sources.

The module deduplicates identical Dataset IDs. If the same Dataset is selected twice, the duplicate source is ignored and a warning is recorded.


8. Dataset access

Version 15.2 does not read scientific Datasets directly from CSV paths.

Input data are accessed using:

Analysis Source Dataset ID
stable Variable ID
TABLE_STREAM_API_v3

This means the module is not conceptually tied to CSV storage.

The scientific input path is:

Analysis Source
    ↓
Dataset ID
    ↓
Variable IDs
    ↓
Table Stream API v3
    ↓
module numerical code

The module may write CSV files as its own output products, but it does not use filesystem paths as the identity of an input GX-TXT Dataset.


Part II — Repeated-data modes

9. replicate_handling

The configuration field Repeated-data handling has three modes:

automatic
one_curve_per_source_family
legacy_ordered_rows

The recommended default is:

automatic

10. Automatic mode

Automatic mode is order-independent.

The module first looks for a common replicate/curve ID variable across the configured sources.

If one is found:

automatic
    -> explicit replicate grouping

If none is found:

automatic
    -> unlabelled repeated-point cloud

Automatic mode does not guess a replicate count from the number of points.

That distinction is fundamental.

A curve digitized 300 times along X is not automatically 300 replicates.

Sampling density and replicate count are different quantities.


11. Automatic mode with explicit replicate IDs

If a replicate ID is present, rows are grouped by:

source
+ family
+ replicate ID

CSV row order is ignored.

For each accepted trace:

  1. X and Y are extracted;
  2. rows are normalized by X;
  3. duplicate X coordinates inside the same trace are collapsed;
  4. their Y values are averaged;
  5. the trace is stored in ascending unique X order.

This path is the strongest statistical mode because the actual repeated curves are known.


12. Unlabelled repeated-point-cloud mode

If automatic mode finds no replicate ID, the module does not invent r1, r2, r3, etc.

Instead, each:

source + family

becomes one unlabelled repeated-point cloud.

All valid points are preserved.

Exact duplicate X coordinates are retained.

CSV row order is ignored.

The point cloud is used to estimate:

This mode is designed for cases such as repeated manual digitization where:


13. one_curve_per_source_family

This mode explicitly tells the module:

Treat all rows from one source and one family as one curve.

Row order is still ignored.

Duplicate X values are collapsed by averaging Y.

Use this mode when each source really contains one curve per family and no internal repeat structure is intended.

Important limitation

With one curve per source/family, within-source variance is generally not identifiable because there are no repeated curves inside a source.

This mode is useful for source-to-source comparison, but it cannot magically reconstruct within-source repeatability.


14. legacy_ordered_rows

This mode exists for old datasets whose row sequence intentionally contains consecutive curves.

Only this mode treats row order as meaningful.

Curve boundaries are detected from:

The reset condition is based on:

threshold =
max(
    reset_step_factor × typical |dX|,
    reset_span_fraction × current X span
)

Default values:

reset_step_factor = 5
reset_span_fraction = 0.35

A reset is recognized only when X jumps substantially in the opposite direction from the current trace direction.

Use this mode only when necessary

Do not enable legacy_ordered_rows just because a CSV visually contains repeated sweeps.

If a true replicate ID exists, use it.

If replicate boundaries are unknown, use automatic unlabelled point-cloud mode.


Part III — Input cleaning

15. Invalid rows

The module skips rows where required bound values are unusable.

A row is rejected when:

A warning reports the number of skipped rows per Analysis Source.

If no usable rows remain, analysis stops with an error.


16. Minimum trace/cloud point count

Configuration:

min_trace_points

Default:

5

For an explicit trace:

For an unlabelled cloud:

Short traces/clouds are discarded and reported in warnings.


17. Duplicate X values

Explicit traces

Within an explicit trace:

same X → Y values averaged

The result is a unique ascending X sequence.

The output replicate_statistics.csv records:

original_points
duplicates_collapsed

Unlabelled clouds

Duplicate X values are retained.

They are legitimate repeated observations and can contribute to the local residual distribution.


Part IV — Common X domain and interpolation

18. Why a common domain is required

Repeated curves can cover different X ranges.

Example:

trace 1: 0 ... 100
trace 2: 10 ... 90
trace 3: 5 ... 95

The statistically comparable interval is:

10 ... 90

The module therefore uses the intersection:

\[ X_{\min}=\max_i(\min X_i) \]

\[ X_{\max}=\min_i(\max X_i) \]

No extrapolation is performed outside that common interval.

If:

Xmax <= Xmin

the family has no common domain and is excluded.


19. Internal common-grid modes

Configuration:

common_grid

Choices:

pooled_x
linspace

Default:

pooled_x

20. pooled_x

The common grid is built from all unique X coordinates of accepted traces/clouds that lie inside the common domain.

The endpoints of the common domain are guaranteed to be present.

Advantages:

Potential disadvantage:


21. linspace

The module builds a uniform common grid.

Configuration:

grid_points

Default:

200

Use this when:


22. Interpolation

The current supported interpolation method is:

linear

There is no extrapolation.

For explicit labelled traces, each trace is linearly interpolated to the family common grid.

If interpolation produces a non-finite value inside the valid common domain, the run stops because this indicates an inconsistent source/grid condition.


Part V — Statistics with explicit repeated traces

23. Consensus curve

At every common-grid X coordinate the module calculates:

y_mean
y_median

across the interpolated repeated traces.

The default consensus curve shown by the graph is mean.

The fit-ready CSV can use either mean or median through:

consensus_center = mean | median

24. Pointwise sample standard deviation

For \(n \ge 2\) repeated traces:

\[ y_{\mathrm{std}}(x) = \sqrt{ \frac{1}{n-1} \sum_{i=1}^n \left[y_i(x)-\bar y(x)\right]^2 } \]

For a single trace, the implementation writes:

y_std = 0

because no across-trace spread can be estimated.

Interpretation:

y_std is the observed pointwise dispersion among the accepted interpolated traces.

It is not automatically a complete metrological uncertainty budget.


25. Standard error

For labelled traces:

\[ y_{\mathrm{sem}}(x) = \frac{y_{\mathrm{std}}(x)}{\sqrt n} \]

Interpretation:

y_sem describes the standard error of the empirical mean under the usual independent-repeat interpretation.

It should not be confused with the scatter of individual curves.


26. Source-based variance decomposition

When repeated traces come from multiple sources, the module attempts to separate:

within-source variation
between-source variation

The source is the Analysis Source / Dataset source index.

At each X coordinate, the module performs an unequal-count one-way random-effects decomposition.

Let:

Within-source sum of squares:

\[ SS_W = \sum_j \sum_i (y_{ij}-\bar y_j)^2 \]

Degrees of freedom:

\[ df_W=N-k \]

Mean square:

\[ MS_W = \frac{SS_W}{df_W} \]

Between-source sum of squares:

\[ SS_B = \sum_j n_j(\bar y_j-\bar y)^2 \]

\[ MS_B = \frac{SS_B}{k-1} \]

Unequal-count correction coefficient:

\[ n_0 = \frac{ N-\frac{\sum_j n_j^2}{N} }{ k-1 } \]

Between-source variance component:

\[ \tau^2 = \max\left(0,\frac{MS_B-MS_W}{n_0}\right) \]

Reported components:

\[ \sigma_{\mathrm{within}} = \sqrt{MS_W} \]

\[ \sigma_{\mathrm{between}} = \sqrt{\tau^2} \]

\[ \sigma_{\mathrm{total}} = \sqrt{ \sigma_{\mathrm{within}}^2+ \sigma_{\mathrm{between}}^2 } \]


27. When variance decomposition is identifiable

The implementation requires:

at least 2 sources
and
within-source degrees of freedom > 0

That means at least one source must contain more than one accepted trace.

Examples:

Identifiable

Source A: 3 traces
Source B: 2 traces

Not identifiable

Source A: 5 traces

Only one source exists, so between-source variance cannot be estimated.

Not identifiable

Source A: 1 trace
Source B: 1 trace
Source C: 1 trace

There are several sources, but no within-source degrees of freedom.

When decomposition is not identifiable:

sigma_within  = NaN
sigma_between = NaN
sigma_total   = NaN

and a warning is written.

y_std and y_sem may still exist because those are different statistics.


Part VI — Statistics for unlabelled point clouds

28. Why a different estimator is required

When discrete replicate identities are absent, it would be statistically misleading to split points into arbitrary curves.

The module therefore treats each source/family as one repeated-point cloud.

For every common-grid X position, it estimates:

  1. the local source consensus;
  2. local source residual dispersion.

The result is then combined across sources.


29. Local neighbourhood size

For a point cloud containing \(n\) points, the local neighbourhood size is:

\[ k \approx 1.5\sqrt{n} \]

rounded and constrained to:

minimum 10
maximum 25
never more than n

This neighbourhood is deterministic and depends on the point cloud, not row order.


30. Local quadratic regression

For one requested X coordinate \(x_0\), the nearest points are selected by distance.

Define:

\[ z_i=x_i-x_0 \]

The local model is:

\[ y_i = \beta_0+ \beta_1z_i+ \beta_2z_i^2+ \epsilon_i \]

The design matrix is:

[1  z  z²]

A tricube-like distance weight is used:

\[ u_i=\min\left(1,\frac{|z_i|}{d_{\max}}\right) \]

\[ w_i=(1-u_i^3)^3 \]

with a small positive lower floor.

The local predicted source consensus at \(x_0\) is:

\[ \mu(x_0)=\beta_0 \]

when the quadratic fit is well conditioned.


31. Fallback for ill-conditioned local regression

If the local quadratic fit:

the module falls back to a weighted local mean.

This avoids treating a numerically unstable quadratic fit as physical information.


32. Local residual dispersion

Residuals are:

\[ r_i=y_i-\hat y_i \]

The effective sample size is:

\[ n_{\mathrm{eff}} = \frac{(\sum_i w_i)^2}{\sum_i w_i^2} \]

The residual variance is adjusted for local fitted parameters.

The module reports a local source residual sigma.

This local sigma is interpreted as empirical within-source repeatability of the unlabelled digitized cloud after removing local curve slope/curvature.

It is not an inferred number of repeated curves.


33. Combining several point-cloud sources

For each source, the local estimator produces a source consensus curve.

Across sources:

y_mean   = mean of source consensus predictions
y_median = median of source consensus predictions

If at least two sources exist and all local residual sigmas are finite:

\[ \sigma_{\mathrm{within}} = \sqrt{ \mathrm{mean}_j \left[ \sigma_{j,\mathrm{local}}^2 \right] } \]

\[ \sigma_{\mathrm{between}} = \mathrm{sampleSD} \left[ \mu_j(x) \right] \]

\[ \sigma_{\mathrm{total}} = \sqrt{ \sigma_{\mathrm{within}}^2+ \sigma_{\mathrm{between}}^2 } \]

For this mode:

y_std = sigma_total

when components are identifiable.


34. Why y_sem is unavailable for unlabelled clouds

The number of raw points is not the number of statistically independent repeats.

Therefore:

y_sem = NaN

in unlabelled point-cloud mode.

This is intentional.

The module does not invent an effective replicate count from point density.


35. Point-cloud mode with too few sources

If there is only one source:

sigma_within  = unavailable as a full source-combined component
sigma_between = unavailable
sigma_total   = unavailable

The implementation writes the variance components as non-identifiable.

If two or more source consensus curves exist but local component decomposition is unavailable, y_std may still contain the sample SD of source consensus predictions.

Always inspect:

statistics_mode
variance_components_identifiable
n_sources

before interpreting uncertainty fields.


Part VII — Fit-ready output grid

36. Why the fit output grid is separate

The internal statistical common grid and the grid sent to a fitting module serve different purposes.

A dense digitization should not automatically produce more fitting points simply because somebody clicked more often.

Therefore the module creates a separate consensus_for_fitting.csv.


37. fit_output_grid

Choices:

reference_grid
uniform_grid

Default:

reference_grid

38. reference_grid

For labelled traces, the module selects a real accepted trace as the reference grid.

Preference:

  1. a trace from the primary source, when primary is included;
  2. otherwise the first deterministic available trace.

Only reference X values within the valid common domain are used.

The common-domain endpoints are added when necessary.

The consensus curve is linearly interpolated onto this X grid.

This preserves one real sampling pattern while keeping the consensus Y.


39. uniform_grid

A fixed uniform grid is generated across:

x_min ... x_max

with:

fit_output_grid_points

Default:

200

40. Automatic fallback for unlabelled clouds

An unlabelled point cloud has no individual reference trace.

Therefore:

fit_output_grid = reference_grid

automatically falls back to:

uniform fixed-N grid

using:

fit_output_grid_points

This is expected behavior.


41. consensus_center

Choices:

mean
median

This setting controls the Y values written to:

consensus_for_fitting.csv

Important:

consensus_center=median changes the fit-ready CSV, but the default consensus graph Series still uses the published mean variable unless the user changes that Graph Series to median.

The profile Dataset always publishes both mean and median.


Part VIII — Configuration reference

42. include_primary_dataset

Default:

1

Meaning:

Include the primary Analysis Source as one of the statistical sources.

If disabled, only additional configured sources are used.

Normally leave enabled.


43. replicate_handling

Default:

automatic

Recommended for normal use.

Use explicit alternatives only when the data semantics really require them.


44. min_trace_points

Default:

5

Controls the minimum accepted trace/cloud size.

Increasing it:

Decreasing it:


45. reset_step_factor

Default:

5

Used only in legacy ordered-row segmentation.

It scales the typical local X step when deciding whether a reverse X jump is a new trace.

It has no role in normal explicit-ID or point-cloud operation.


46. reset_span_fraction

Default:

0.35

Used only in legacy ordered-row segmentation.

A reverse jump must be substantial relative to the current trace span before it is accepted as a trace reset.


47. common_grid

Default:

pooled_x

Use linspace only when a fixed bounded internal grid is desirable.


48. grid_points

Default:

200

Used only when:

common_grid=linspace

It does not control the fit-ready CSV unless fit_output_grid also uses a uniform grid.


49. fit_output_grid

Default:

reference_grid

Controls the X coordinates of consensus_for_fitting.csv.

It does not change the internal statistical calculation grid.


50. fit_output_grid_points

Default:

200

Used by:

fit_output_grid=uniform_grid

and by the automatic point-cloud fallback when reference_grid is requested but no discrete reference trace exists.


51. interpolation

Current supported value:

linear

No spline/PCHIP/cubic option exists in v15.2.


52. consensus_center

Default:

mean

Choices:

mean
median

Controls fit-ready consensus Y values.


Part IX — Output files

53. consensus_for_fitting.csv

Purpose:

Compact consensus Dataset intended for later model fitting.

With Family:

X,Family,Y

Without Family:

X,Y

The actual column names preserve the bound variable names.

Example:

Va_V,Vg_V,Ia_mA

The number of rows is controlled by the fit-output grid, not by raw point density.


54. uncertainty_profile.csv

Contains the full statistical profiles.

Columns include:

X
Family                if present
y_mean
y_median
y_std
y_sem
n
n_sources
sigma_within
sigma_between
sigma_total
statistics_mode
n_raw_points

n

In labelled-trace mode:

number of repeated traces

In point-cloud mode it reflects the number of source/family cloud columns used internally, but the module explicitly marks replicate count as unknown in its summary. Do not reinterpret this as a discrete replicate count.

n_sources

Number of distinct Analysis Sources represented in the group.

statistics_mode

Typical values:

labelled_traces_anova
unlabelled_point_cloud

Always inspect this field before interpreting uncertainty.


55. replicate_statistics.csv

One row per accepted trace or accepted source/family cloud.

Columns:

source
source_path
family
replicate_id
replicate_index
n_points
x_min
x_max
y_mean
y_std
original_points
duplicates_collapsed
direction
representation

source_path

In current API-neutral operation this is a logical trace provenance marker such as:

dataset:<dataset-id>

It should not be interpreted as a direct filesystem path.

representation

Typical values:

trace
unlabelled_cloud

direction

For normal labelled traces:

ascending_normalized

For point clouds:

order_independent_cloud

56. source_statistics.csv

Summarizes each source relative to the overall consensus for each family.

Columns:

source
family
n_replicates
n_points
n_grid
mean_bias
rms_deviation
max_abs_deviation
statistics_mode

mean_bias

Mean source-consensus deviation from the overall consensus.

Positive means the source tends to lie above the overall consensus.

Negative means it tends to lie below it.

rms_deviation

RMS deviation of the source consensus from the global consensus.

This measures typical magnitude of source-specific departure.

max_abs_deviation

Largest absolute source departure over the common X grid.


57. replicate_analysis_summary.txt

Human-readable run report.

It records:

When debugging unexpected results, this is the first output file to inspect.


58. render_cache.mat

Contains the numerical analysis state required for cache-only rerender.

It includes, among other state:

render_traces
render_results
published Dataset references
binding names
configuration metadata
warnings
fit outputs

A rerender can therefore update presentation without repeating the full scientific calculation.

Do not edit this file manually.


Part X — Published GX-TXT Datasets

59. curve.replicate.traces

Long-form Dataset containing all accepted trace/cloud points.

Variables:

Variable Meaning
x independent coordinate
y measured value
trace_index internal accepted trace/cloud identity
source_index Analysis Source index
replicate_index replicate index within source/family
family_value numeric family value

This Dataset drives the overlay graph.


60. curve.replicate.profiles

Long-form Dataset containing all consensus and uncertainty profiles.

Variables:

x
family_index
family_value
mean
median
std
sem
sigma_within
sigma_between
sigma_total
lower_std
upper_std
lower_sem
upper_sem
lower_sigma_total
upper_sigma_total

The lower/upper variables are absolute band endpoints.

Examples:

\[ lower\_std = mean - std \]

\[ upper\_std = mean + std \]

These fields allow plot.dataset to render bands without private vector drawing.


61. curve.replicate.family_summary

Contains one summary row per family for families whose variance decomposition is identifiable.

Variables:

family_index
family_value

x_within
x_between
x_total

within_rms
between_rms
total_rms

within_mean
between_mean
total_mean

within_max
between_max
total_max

The x_* variables are small offsets around an artificial numeric family index and are used to place grouped summary bars.

The visible tick labels are the actual family values.


62. Why summary X is an index

The summary graph contains three bars per family.

For family index \(i\):

within bar  → i - 0.25
between bar → i
total bar   → i + 0.25

This gives side-by-side numeric-X bars.

The physical Family value is used as the axis label, not as the exact internal bar X coordinate.

Consequence for Select Region

Region Selection on the family-summary graph operates in the plotted numeric index coordinate.

The visible tick text represents the physical family value, but the selected X coordinate is fundamentally the summary bar position.


Part XI — Graph 1: Replicate overlay

63. Purpose

Graph:

curve.replicate.overlay

File:

01_replicate_overlay.png

Scientific purpose:

Show all accepted repeated curves/cloud representations before consensus compression.

Use it to inspect:


64. Default data source

The graph uses:

curve.replicate.traces

Default Series scientific bindings:

X      = x
Y      = y
Family = trace_index

The Series editor may be used to inspect or alter the standard Graph Series state.


65. How to interpret the overlay

A tight bundle of traces suggests high repeatability.

A vertical spread that grows with X suggests heteroscedastic repeat variation.

A whole group displaced upward or downward can indicate:

Crossing traces can indicate shape variation rather than a simple offset.


66. Overlay controls

Graph-specific controls:

title
x_label
y_label
family_filter
marker_size
legend_mode

family_filter accepts semicolon-separated physical family values.

Example:

25;50;100

Blank means all.


67. Marker-size caveat

The default overlay representation is:

line

Therefore marker size has no visible effect until the Series representation uses markers, such as:

line_marker
scatter

This is expected.


68. Legend-content limitation

The current bridge distinguishes:

legend_mode = none

from visible standard Series legend content.

source_replicate and family are retained as graph configuration choices, but the current delegated Plot Dataset implementation does not reconstruct the complete historical source/replicate-specific legend semantics.

Therefore use the standard Series labels/legend editor as the authoritative visible legend presentation in v15.2.

This is a presentation limitation, not a statistical limitation.


Part XII — Graph 2: Consensus and uncertainty

69. Purpose

Graph:

curve.replicate.consensus_uncertainty

File:

02_consensus_uncertainty.png

Purpose:

Show the consensus curve and a selected uncertainty envelope for every family.

Default Series:

Dataset = curve.replicate.profiles
X       = x
Y       = mean
Family  = family_value

70. Band choices

Configuration:

band

Choices:

y_std
y_sem
sigma_total
none

71. y_std band

Default.

Uses:

lower_std
upper_std

For labelled traces:

mean ± sample standard deviation of traces

For identifiable point-cloud mode:

mean ± sigma_total

because in that mode y_std = sigma_total.

Use this band to visualize observed repeat dispersion around the mean.


72. y_sem band

Uses:

lower_sem
upper_sem

For labelled traces:

mean ± standard error

This band is narrower than y_std when several repeats exist.

It describes uncertainty of the empirical mean under the repeat-independence assumption, not the spread of individual curves.

Point-cloud warning

In unlabelled point-cloud mode:

y_sem = NaN

because the independent replicate count is unknown.

Therefore y_sem is not a meaningful band for that mode.

Use y_std or sigma_total instead.


73. sigma_total band

Uses:

lower_sigma_total
upper_sigma_total

This shows:

\[ mean \pm \sqrt{ \sigma_{\mathrm{within}}^2+ \sigma_{\mathrm{between}}^2 } \]

Use it when the source-based decomposition is identifiable and you specifically want the combined empirical source/replicate component.

If decomposition is not identifiable, the band variables contain non-finite values and the graph cannot provide a meaningful total-component band.


74. Mean versus median

The default graph plots:

mean

even if:

consensus_center=median

was selected for the fit-ready CSV.

To visualize the median instead, change the graph’s Y Series from:

mean

to:

median

using the standard Series editor.


75. Family bands are explicitly expanded

plot.dataset does not permit an uncertainty band directly on an implicitly family-grouped Series.

The module therefore expands the consensus into one filtered PlotSpec Series per family at render time.

Each expanded Series receives:

family filter
mean/median Y
its lower variable
its upper variable
band

This is an internal rendering transformation.

The producer Graph Series stored in the Session remains compact and family-aware.


Part XIII — Graph 3: Uncertainty components

76. Purpose

Graph:

curve.replicate.uncertainty_components

File:

03_uncertainty_components.png

Default Series:

sigma_within
sigma_between
sigma_total

from:

curve.replicate.profiles

Each is family-grouped by family_value.


77. sigma_within

Interpretation:

Variation estimated inside sources.

For labelled traces:

sqrt(MS_within)

For identifiable point-cloud mode:

RMS local source residual sigma across sources

A large sigma_within suggests repeatability inside the same acquisition/digitization source is poor.


78. sigma_between

Interpretation:

Additional source-to-source variability.

For labelled traces it is the non-negative random-effect variance component.

For point clouds it is the sample SD of source consensus curves.

A large sigma_between with small sigma_within suggests each source is internally repeatable but different sources disagree.

Possible causes include:

The module does not determine the physical cause.


79. sigma_total

Defined as:

\[ \sigma_{\mathrm{total}} = \sqrt{ \sigma_{\mathrm{within}}^2+ \sigma_{\mathrm{between}}^2 } \]

It represents the combined empirical component when both components are identifiable.

It is not automatically equivalent to a full expanded measurement uncertainty.


80. Reading component shapes

If sigma_within rises only in one X region:

If sigma_between dominates everywhere:

If both rise together:

A spike near the common-domain edges should be inspected carefully because fewer effective local constraints may exist there, especially in point-cloud mode.


Part XIV — Graph 4: Family uncertainty summary

81. Purpose

Graph:

curve.replicate.family_summary

File:

04_family_uncertainty_summary.png

Purpose:

Reduce each family uncertainty curve to one scalar per component for quick comparison.

Default components:

within-source
between-source
total

82. Summary statistics

Configuration:

summary_statistic

Choices:

rms
mean
max

RMS

\[ \sqrt{\mathrm{mean}(\sigma^2)} \]

Good general measure of typical uncertainty magnitude while giving more weight to larger regions.

Mean

\[ \mathrm{mean}(\sigma) \]

Simple average uncertainty magnitude across X.

Max

\[ \max(\sigma) \]

Shows the worst pointwise uncertainty in the family.


83. Which families appear

The family summary is meaningful only when variance components are identifiable.

The published summary is built from families where:

variance_components_identifiable = true

If the decomposition is not identifiable, do not interpret zero/placeholder summary bars as a valid uncertainty result.

Inspect:

replicate_analysis_summary.txt
uncertainty_profile.csv

for the identifiability status.


84. Choosing RMS, mean or max

Use RMS for a compact overall comparison.

Use mean if a simple average is required.

Use max when the worst local uncertainty dominates the engineering decision.

Do not compare a family summarized by one statistic with another family summarized by a different statistic.


Part XV — Shared graph functionality

85. Rendering architecture

The module contains no private result renderer.

The path is:

numerical analysis
    ↓
derived canonical Datasets
    ↓
module-owned Graph Series
    ↓
PlotSpec v2
    ↓
PLOT_DATASET_API_v3
    ↓
plot.dataset renderer
    ↓
producer-owned graph PNG

The visible graph still belongs to:

curve.replicate_analysis

while plot.dataset acts as the rendering backend.


86. Graphics inheritance

Default graphical properties come from GX-TXT Graphics inheritance.

This includes:

width
height
DPI
fonts
background
default line width
grid defaults
legend defaults

The module does not have a graph-level default line_width control.

This is intentional.

Precedence is:

Global Graphics
    ↓
Module Graphics
    ↓
explicit Series override

87. Per-Series presentation

The Series editor extension exposes:

Representation
Color
Line style
Line width
Marker
Marker size
Marker fill
Opacity

Line width

Blank means:

use Graphics inheritance

Only enter a numeric line width when you intentionally want that Series to override Module/Global Graphics.

This distinction is important.


88. Representation choices

Per-Series representation choices include:

inherit
line
scatter
line_marker
step
bar

The defaults are chosen to match the scientific graph.

Advanced representation changes can produce combinations that are visually or semantically inappropriate.

For example, converting an uncertainty-band consensus Series to an unrelated representation may be rejected by plot.dataset or may no longer communicate the intended scientific meaning.

Use the default representation unless there is a clear reason to change it.


89. Axes and grid

Use the common GX-TXT Axes/Grid controls for:

manual X range
manual Y range
tick step
tick formatting
display units
grid

Do not look for separate module-specific X/Y min/max controls.

The module deliberately delegates generic axis state to the common framework.


90. Plot layout

Use the common Plot layout controls for:

automatic/manual layout
left margin
right margin
top margin
bottom margin
panel gap
Y-label spacing

The producer graph layout state is projected into the hidden plot.dataset backend before rendering.


91. Legend

Use the standard Legend editor for:

inside
above
below
left
right
manual

row
stacked
wrapped

alignment
columns
font
border
background
manual position

Legend presentation is framework-owned.

Graph-specific legend_mode controls only the intended scientific legend content, and none suppresses it.


92. Level Scale

The standard Level Scale API is supported.

Examples:

linear
dB
dBFS
FS

This is a display transform.

It does not modify the published canonical Dataset values.

Use Level Scale only when its physical interpretation is meaningful for the plotted Y quantity.


93. Annotations

All four graphs support standard GX-TXT annotations:

text
line
arrow
rectangle
ellipse

Annotations are presentation state and do not alter the scientific Datasets.


94. Select Region

All four graph types declare:

supports_region_selection=1
region_selection=rectangle

The standard Plot Region Selection workflow is supported.

The module copies the renderer-generated:

.gxtxt_plotmeta

sidecar with the visible producer PNG so GX-TXT can convert preview pixels into data coordinates.

Important

Select Region is a graph interaction tool.

It does not automatically rerun the statistical analysis on only the selected region unless another workflow explicitly consumes that region.


95. Variants / Clone

All four graphs support Plot Variants with:

variant_data_model=series

A variant may therefore have independent:

Use a variant when you want an alternative view without replacing the base graph.


96. USE / NON USE

The graph USE state controls whether the graph participates in scheduled output generation.

This is separate from:

Disabling USE does not delete scientific Datasets.


97. Rerender

A rerender uses:

render_cache.mat

and the public plot.dataset rerender path.

Presentation-only changes can therefore be applied without recomputing the scientific analysis.

Examples:

line width
colors
legend
axis range
display units
layout
annotations
Level Scale

If the scientific bindings or numerical Dataset content change, run the full analysis again.


Part XVI — Recommended workflows

98. Workflow A — One Dataset with explicit replicate IDs

Dataset:

x,family_value,y,curve_id
...

Configure:

X         = x
Family    = family_value
Y         = y
Replicate = auto
Handling  = automatic

Expected mode:

labelled_traces_anova

This is the preferred input structure.


99. Workflow B — Several sessions, each containing repeated curves

Add all session Datasets as Analysis Sources.

Requirements:

The module can estimate:

within-source
between-source
total

when enough repeats exist inside at least some sources.


100. Workflow C — Repeated digitization without saved trace IDs

Example:

Several independent Dataset sources each contain many clicked points for each family, but the clicks were merged and original repeat boundaries are unavailable.

Configure:

Replicate = blank/auto
Handling  = automatic

Expected mode:

unlabelled_point_cloud

Interpret:

y_sem unavailable

Do not try to force a replicate count.


101. Workflow D — One curve per source/family

Use:

Handling = one_curve_per_source_family

when each source intentionally contains one curve for each family.

This allows consensus across sources.

Do not expect within/between random-effects decomposition unless the data contain enough within-source repeats.


102. Workflow E — Historical ordered CSV

Use:

Handling = legacy_ordered_rows

only if row order genuinely encodes consecutive curves.

Inspect warnings and replicate_statistics.csv carefully.

If a newer preprocessing step can assign explicit curve_id values, that is preferable.


Part XVII — Common mistakes

103. Wrong Family binding

Symptom

The Family field is bound to a text label or unrelated numeric column.

Consequences

Prevention

Bind the physical numeric sweep variable.


104. Using Family as Replicate

Wrong:

Family = Vg
Replicate = Vg

This tells the module each family value is also a replicate identity.

Correct:

Family = Vg
Replicate = curve_id

or Replicate blank/auto.


105. Using point count as repeat count

A trace with 500 points is not 500 repeats.

Do not calculate SEM manually as:

std / sqrt(number_of_points)

for an unlabelled point cloud.

The module intentionally refuses to do this.


106. Selecting y_sem in point-cloud mode

y_sem is undefined because independent repeat count is not known.

Use:

y_std

or, when identifiable:

sigma_total

for the uncertainty graph.


107. Interpreting sigma_total when decomposition is not identifiable

Always verify:

variance_components_identifiable

in the summary.

If false, sigma_total is not a valid source-decomposition result.


108. Expecting extrapolation

The module deliberately uses the X intersection of all relevant traces/clouds.

It will not extrapolate the consensus into an X region not supported by every accepted member of the group.

If a family loses a large region, inspect raw coverage rather than forcing extrapolation.


109. Using an excessively large pooled grid

pooled_x may become large when many traces contain very dense, non-aligned X grids.

Symptoms:

Possible solution:

common_grid = linspace
grid_points = suitable fixed value

Do not reduce grid density so far that scientifically important structure is lost.


110. Setting a Series line width and then changing Module Graphics

If a Series has an explicit line width, that Series override wins.

To restore Module/Global Graphics authority:

Series line width = blank

111. Expecting graph rerender to recompute statistics

Rerender changes presentation.

It does not:

Use full analysis when scientific configuration or source data change.


112. Treating the summary graph as primary evidence

The summary graph compresses an entire X-dependent curve to one scalar.

Always inspect the full uncertainty-component graph when the shape across X matters.

A family with moderate RMS but a severe local maximum can look harmless in RMS summary.


Part XVIII — Errors and troubleshooting

113. X and Y bindings are required

Cause:

One or both required bindings are empty.

Fix:

Select valid X and Y variables.


114. no populated Analysis Source Dataset IDs are configured

Cause:

No Analysis Source contains a selected Dataset.

Fix:

Select the primary Dataset and/or add sources through the framework.


115. source ... has no variable metadata

Cause:

The Analysis Source runtime does not expose Variable Schema metadata.

Possible reasons:

Fix:

Inspect the Dataset in GX-TXT and verify stable variables exist.


116. variable ... is not numeric

Cause:

A numeric role such as X, Y or Family was bound to text data.

Fix:

Select a numeric variable.

The module may automatically correct a non-numeric binding only when exactly one unambiguous semantic numeric candidate exists.


117. no usable Dataset rows

Cause:

All rows were rejected because required bound values are missing/non-finite.

Fix:

Inspect:

X
Y
Family
Replicate

in the source Dataset.


118. no valid traces remain after segmentation

Possible causes:

Fix:

Inspect warnings and replicate_statistics.csv from a previous successful run if available.


119. no family/single-curve group has a valid common X domain

Cause:

Repeated members do not overlap in X.

Example:

trace 1: 0–10
trace 2: 20–30

There is no domain on which they can be compared without extrapolation.

Fix:

Correct source selection or accept that the curves cannot form one consensus group.


120. interpolation produced non-finite values inside common domain

Cause:

An accepted trace cannot provide valid interpolation over the computed common grid.

This should be unusual after normalization.

Check:


121. variance decomposition is not identifiable

This is normally a warning, not a software error.

Common situations:

only one source
or
one trace per source only

Interpret y_std separately from source variance components.


122. family grouping does not accept band

This error was addressed in v15.2.

The module now expands family-grouped band Series into one filtered Series per family before rendering.

If it reappears:


123. empty Plot Dataset bridge response

Version 15.1+ uses the framework persistent bridge reader.

If this occurs:

  1. inspect the immediately preceding Tcl stderr message;
  2. confirm the v15.2 bridge is installed;
  3. confirm plot.dataset public APIs are present;
  4. verify the Session is writable;
  5. verify the derived Datasets were published before render.

Do not interpret this automatically as a Dataset-read error.


124. Plot exists but line width ignores Graphics

Check the Series editor.

If:

Line width = numeric value

that is an explicit override.

Set it blank to inherit Graphics.

Also confirm the process command contains the expected:

GXTXT_PLOT_LINE_WIDTH

125. Plot layout controls do not affect the graph

In v15.2 the producer layout state is projected to the hidden backend before rendering.

If layout still appears unchanged:

  1. confirm v15.2 is active;
  2. rerender the selected producer graph;
  3. ensure you edited the same graph/variant;
  4. inspect the graph-specific runtime axis.<graph-id> section;
  5. verify no stale older plugin is being loaded.

126. Select Region does not map coordinates

Check:

analysis/curve.replicate_analysis/.gxtxt_plotmeta/

A matching metadata file should exist for the visible PNG.

If the PNG was manually copied or replaced outside GX-TXT, the metadata may no longer match.

Rerender the graph through GX-TXT.


Part XIX — Interpretation examples

127. Example: high within-source, low between-source

Observed:

sigma_within  large
sigma_between small

Interpretation:

Different repeats inside the same source vary substantially, but source means agree.

Possible scientific concerns:


128. Example: low within-source, high between-source

Observed:

sigma_within  small
sigma_between large

Interpretation:

Each source is internally repeatable, but different sources are systematically displaced.

Possible causes include:


129. Example: y_std large but y_sem small

This occurs when many labelled repeats exist.

Interpretation:

Individual repeats are dispersed, but the estimated mean is much more stable.

Choose the plotted band according to the scientific question:


130. Example: component curves rise at one edge

Possible interpretations:

Do not automatically conclude the physical phenomenon itself becomes more uncertain without checking source coverage.


Part XX — Limitations

131. Family must be numeric

The module currently normalizes Family as a numeric variable.

Text-only categorical Family variables are not the intended statistical input.


132. Only one X and one Y role per analysis run

The module characterizes one scientific X/Y response at a time.

For another Y quantity, configure another analysis run.


133. Linear interpolation only

Version 15.2 supports:

linear

No PCHIP, spline or cubic interpolation is exposed.


134. No X uncertainty

The module does not estimate an independent \(\sigma_x\).

If X uncertainty is scientifically important, it must come from separate measurement information or another model.


135. No covariance model

The current uncertainty outputs are pointwise.

The module does not publish an X-by-X covariance matrix describing correlation of errors along a curve.

Therefore downstream fitting that needs correlated-error weighting requires additional methodology.


136. No robust outlier rejection

The module does not automatically delete traces merely because they differ strongly.

This is intentional.

Automatic rejection could remove real source variability.

Inspect the overlay and source statistics, then decide scientifically whether a source/trace is invalid.


137. No automatic physical weighting for model fitting

consensus_for_fitting.csv contains consensus X/Y points.

The module does not automatically assign fit weights from:

y_std
y_sem
sigma_total

The fitting stage must choose an appropriate statistical model.


138. y_sem assumes known independent traces

For labelled mode:

y_sem = y_std / sqrt(n)

This assumes the accepted traces can be treated as independent repeated observations for this purpose.

If repeats are strongly correlated, SEM may overstate precision.


139. Between-source component is descriptive, not causal

A large sigma_between does not tell you why sources differ.

It quantifies the source-level component in the supplied data.

Causal interpretation requires experimental knowledge.


140. Point-cloud local sigma is model-dependent

The local residual sigma depends on:

It is a deterministic empirical repeatability estimator, not a unique statistically mandated decomposition.

It should not be described as a recovered hidden replicate count.


141. Common-domain intersection can discard edge data

This is a deliberate consequence of avoiding extrapolation.

If one trace has much narrower coverage, it can shrink the valid consensus domain for the entire family.

Inspect the overlay and source coverage.


142. Family summary loses X dependence

RMS/mean/max are scalar reductions.

Two families can have the same RMS uncertainty but very different uncertainty shapes.

Always retain the full profile for scientific interpretation.


143. Summary Region Selection X is an index coordinate

The family-summary graph uses numeric bar positions around family indices.

Select Region on this graph should therefore be interpreted as selecting plotted summary positions, not a continuous physical Family axis.


Part XXI — Performance considerations

144. Table Stream input

Input Datasets are read in chunks of:

65536 rows

through Table Stream API.

This avoids requiring the module to parse the complete source file directly.

The final accepted arrays are still assembled in memory for the numerical analysis.


145. Published Dataset chunk size

Derived Dataset publication uses chunks of approximately:

50000 rows

through Dataset Publication API v2.


146. Large pooled grids

The potentially largest numerical object in labelled mode is:

Y = common_grid_points × number_of_traces

A very large pooled grid multiplied by many traces can consume significant memory.

Use linspace when required.


147. Point-cloud computational cost

Point-cloud mode performs a local fit for every:

source × family × common-grid X

with neighbourhoods up to 25 points.

Large pooled grids therefore also increase point-cloud computation time.


Part XXII — Diagnostics checklist

148. Before running

Verify:


149. After running

Inspect in this order:

  1. replicate_analysis_summary.txt
  2. Replicate overlay
  3. replicate_statistics.csv
  4. Consensus + uncertainty graph
  5. Uncertainty components graph
  6. source_statistics.csv
  7. Family uncertainty summary
  8. consensus_for_fitting.csv

This order helps detect bad grouping before interpreting compressed statistics.


150. Questions to ask when results look wrong

Are the curves grouped correctly?

Check Replicate IDs, Family and overlay.

Did one source shrink the X domain?

Check source/trace x_min, x_max.

Are variance components actually identifiable?

Check the summary.

Am I looking at std, sem or sigma_total?

These answer different questions.

Did an explicit Series style override Graphics?

Check Series presentation.

Did I rerender when I actually needed a new analysis?

Scientific changes require full analysis.


Part XXIII — Practical recommendations

151. Best input format

For the strongest and clearest analysis, import data in long-form structure containing:

X
Family
Y
Replicate ID

Example:

Va_V,Vg_V,Ia_mA,curve_id

This avoids reconstructing replicate structure later.


152. Preserve source identity

When several measurement sessions exist, import them as separate Analysis Sources instead of concatenating everything into one anonymous Dataset.

This allows the module to distinguish:

within-source
between-source

variation.


153. Keep point-cloud mode honest

If replicate boundaries were lost, do not recreate them by arbitrary row chunks or point counts.

Use the unlabelled mode and document its assumptions.


154. Use y_std for repeat spread, not automatically y_sem

For visualizing repeatability, y_std is usually the clearer quantity.

Use y_sem only when the scientific question is specifically about precision of the estimated mean and its assumptions are acceptable.


155. Use sigma_total only when source decomposition matters

If the study explicitly distinguishes:

repeatability within session
versus
session/source reproducibility

then sigma_within, sigma_between and sigma_total are appropriate outputs.

If all repeats come from one source, those components cannot be fully separated.


Part XXIV — Developer-facing architecture

156. Main runtime files

runtime/curve_replicate_analysis.m
runtime/curve_replicate_analysis_main.m
runtime/curve_replicate_publish.m
runtime/curve_replicate_render_public.m
runtime/curve_replicate_plot_v152_bridge.tcl
runtime/curve_replicate_rerender.m
runtime/curve_replicate_rerender_main.m
api/curve_replicate_graphics_api_v1.tcl

157. Numerical analysis responsibilities

curve_replicate_analysis_main.m owns:

It does not draw result figures.


158. Dataset publication responsibilities

curve_replicate_publish.m publishes:

curve.replicate.traces
curve.replicate.profiles
curve.replicate.family_summary

using Dataset Publication API v2.

These derived Datasets are the scientific plotting source.


159. Graphics extension responsibilities

curve_replicate_graphics_api_v1.tcl owns only provider-specific per-Series presentation:

kind
color
line_style
line_width
marker
marker_size
marker_fill
opacity

Core Graph Series remains authoritative for:

Dataset
X
Y
family
secondary variable
ordering
filters
axis
label
enable state
order

160. Rendering bridge responsibilities

curve_replicate_plot_v152_bridge.tcl:

  1. loads the current Session;
  2. loads producer Graph Series;
  3. builds PlotSpec v2;
  4. expands family+band combinations when required;
  5. activates PLOT_DATASET_API_v3;
  6. upserts a stable hidden plot.dataset backend Variant;
  7. projects axes/layout;
  8. projects legend state;
  9. projects Level Scale;
  10. projects effective Graphics;
  11. invokes the public render/rerender command;
  12. copies the result PNG;
  13. copies matching .gxtxt_plotmeta;
  14. removes the backend visible PNG so only the producer graph is shown.

161. Rerender architecture

curve_replicate_rerender_main.m loads render_cache.mat and requests:

operation=rerender

from the same delegated graphics path.

It does not repeat the scientific statistics.


Part XXV — Version 15.2 behavior summary

162. Input

Analysis Source Dataset IDs
+ stable Variable IDs
+ TABLE_STREAM_API_v3

No scientific Dataset path parsing.


163. Statistics

Two principal paths:

explicit labelled traces
    -> common-grid trace statistics
    -> unequal-count source random-effects decomposition

or:

unlabelled source/family point clouds
    -> local weighted quadratic/mean estimates
    -> empirical within-source local residual sigma
    -> between-source consensus spread

164. Outputs

Human/files:

consensus_for_fitting.csv
uncertainty_profile.csv
replicate_statistics.csv
source_statistics.csv
replicate_analysis_summary.txt
render_cache.mat

Canonical Datasets:

curve.replicate.traces
curve.replicate.profiles
curve.replicate.family_summary

Graphs:

Replicate overlay
Consensus + uncertainty
Uncertainty components
Family uncertainty summary

165. Core interpretation rule

The most important distinction in the module is:

raw point count ≠ replicate count

The second most important distinction is:

repeat spread (`y_std`)
≠
precision of the mean (`y_sem`)
≠
within-source component
≠
between-source component
≠
combined component (`sigma_total`)

Use each quantity only for the scientific question it actually answers.


Appendix A — Quick-reference table

Quantity Labelled traces Unlabelled cloud Meaning
y_mean mean of traces mean of source consensus curves consensus mean
y_median median of traces median of source consensus curves robust central curve
y_std sample SD of traces sigma_total if identifiable; otherwise source-consensus SD where possible empirical spread
y_sem y_std/sqrt(n) unavailable precision of empirical mean
sigma_within sqrt(MSwithin) RMS local residual sigma within-source component
sigma_between random-effect source component SD of source consensus curves source-to-source component
sigma_total quadrature sum quadrature sum combined empirical component

Appendix B — Recommended default settings

For normal modern Datasets:

include_primary_dataset = 1
replicate_handling      = automatic
min_trace_points        = 5
common_grid             = pooled_x
grid_points             = 200
fit_output_grid         = reference_grid
fit_output_grid_points  = 200
interpolation           = linear
consensus_center        = mean

Leave legacy reset parameters at their defaults unless deliberately using:

legacy_ordered_rows

Appendix C — Minimal operating procedure

  1. Open the Session.
  2. Enable Replicate Curve Analysis.
  3. Select the primary Dataset.
  4. Add extra sources if required.
  5. Bind X.
  6. Bind numeric Family if present.
  7. Bind Y.
  8. Leave Replicate automatic unless a real ID needs explicit selection.
  9. Leave Repeated-data handling automatic.
  10. Run the analysis.
  11. Read the textual summary.
  12. Check the Replicate overlay.
  13. Check consensus and uncertainty.
  14. Confirm variance-component identifiability before using component graphs.
  15. Inspect source statistics.
  16. Use consensus_for_fitting.csv for downstream curve fitting.
  17. Use Rerender for presentation-only changes.
  18. Re-run full analysis when data, bindings or scientific configuration change.

Appendix D — When not to use this module

Do not use curve.replicate_analysis as the sole statistical tool when the scientific problem requires:

In those cases, use this module only as an exploratory/empirical characterization stage or use a more appropriate statistical model.


Parte II — Caso di studio: dalla figura 2D21 alla stima della ripetibilità

Questa seconda parte non sostituisce il manuale precedente. Mostra come le funzioni descritte nel manuale entrano in una Session reale: tre digitalizzazioni indipendenti della stessa famiglia di curve della valvola 2D21 Sylvania vengono pubblicate come Dataset distinti e analizzate insieme con curve.replicate_analysis.

Workflow del caso di studio 2D21
Dal datasheet alle pubblicazioni del Curve Digitizer, quindi alle Analysis Sources e ai risultati statistici.

1. La sorgente: una famiglia di curve nel datasheet

La sorgente è il grafico Average Grid Characteristics During Anode Conduction della 2D21 Sylvania. L'asse orizzontale rappresenta la tensione continua della control-grid; l'asse verticale la corrente continua della control-grid. Le curve sono parametrizzate dalla corrente anodica e comprendono i membri 25, 50, 100, 150, 200 e 300 mA.

Curva 2D21 digitalizzata con GX-TXT Curve Digitizer
Il Curve Digitizer dopo calibrazione degli assi. I punti colorati ricostruiscono i diversi membri della famiglia direttamente dalla figura del datasheet.

Il punto importante non è soltanto ottenere una tabella numerica. Il digitizer pubblica un vero Dataset GX-TXT con contract curve_family.table, Dataset ID stabile e SHA-256 della sorgente collegata. In questo modo l'immagine originale, la calibrazione e il risultato numerico rimangono parte della provenance della Session.

2. Perché sono state fatte tre digitalizzazioni

Una digitalizzazione manuale non è una misura perfettamente deterministica. Il posizionamento del cursore, la densità dei punti, lo spessore della linea stampata e le zone quasi verticali del grafico introducono una variabilità osservabile. Ripetere la digitalizzazione consente di descrivere questa variabilità invece di nasconderla dentro una sola traccia.

Le tre pubblicazioni restano separate:

primary = dig_2D21_Sylvania_during_conduction_1
source2 = dig_2D21_Sylvania_during_conduction_2
source3 = dig_2D21_Sylvania_during_conduction_3

Questa scelta è importante: la separazione fra sorgenti permette al modulo di distinguere il comportamento interno alle ripetizioni dal disaccordo fra sorgenti, quando l'informazione disponibile rende identificabili le due componenti.

3. Configurazione della Session

Replicate Curve Analysis configurato con tre Analysis Sources
Tre Dataset sorgente vengono associati allo stesso modulo senza fondere prematuramente i dati.

La configurazione mostrata usa automatic per il repeated-data handling, reference_grid per l'output fit-ready, pooled_x per la griglia statistica interna, media come centro del consenso e interpolazione lineare. I binding scientifici sono X, Family, Y e un replicate ID lasciato in automatico.

La variabile Family identifica il membro fisico della famiglia — per esempio 25 mA o 150 mA — mentre un eventuale Replicate ID identifica una ripetizione della stessa famiglia. Le due identità non sono intercambiabili.

4. Prima lettura: replicate overlay

Replicate overlay della Session 2D21
Le tracce accettate vengono sovrapposte prima di qualunque compressione statistica.

Questo è il grafico diagnostico iniziale. Permette di vedere immediatamente dove le digitalizzazioni concordano e dove divergono. Nel caso 2D21 la regione vicina alla conduzione più ripida è particolarmente sensibile: piccole differenze di posizione sull'immagine possono produrre differenze numeriche più evidenti.

L'overlay serve anche a verificare che le famiglie siano state interpretate correttamente, che nessuna sorgente sia accidentalmente scambiata per un'altra e che il dominio comune usato per il consenso abbia senso.

5. Dalle repliche alla curva di consenso

Curve di consenso e incertezza
Le ripetizioni vengono ridotte a una curva centrale per ciascun membro della famiglia, mantenendo l'informazione sulla dispersione.

La curva di consenso è ciò che consente di passare da più digitalizzazioni a un Dataset utilizzabile nei passaggi successivi. A seconda della configurazione la rappresentazione può essere accompagnata da dispersione, SEM o componente totale dell'incertezza, nei casi in cui quella quantità sia statisticamente definita.

Il risultato non va letto come “la curva vera” del dispositivo: è il consenso ottenuto dalle sorgenti incluse nella Session e secondo le scelte statistiche documentate nel run.

6. Dove nasce la dispersione

Componenti within-source, between-source e total
Le componenti vengono mostrate lungo X, permettendo di localizzare le regioni problematiche invece di ridurre subito tutto a un solo numero.

Quando identificabili, il modulo separa sigma_within, sigma_between e la loro combinazione sigma_total. Questo non attribuisce automaticamente una causa fisica: “between-source” significa soltanto che le sorgenti non concordano quanto ci si aspetterebbe dalla sola dispersione interna disponibile.

Nel contesto della digitalizzazione, una crescita localizzata dell'incertezza può essere coerente con una zona grafica difficile da leggere, ma questa interpretazione deve restare distinta dal risultato statistico prodotto dal modulo.

7. Confronto sintetico fra famiglie

Riepilogo dell'incertezza per famiglia
Il family summary condensa i profili d'incertezza in valori scalari per confronto rapido.

Il riepilogo permette di confrontare rapidamente membri diversi della famiglia, ma è volutamente una compressione. Per capire dove una famiglia diventa instabile bisogna tornare al profilo completo dell'incertezza lungo X.

8. Il passaggio successivo: dati fit-ready

Il modulo produce anche un output destinato al fitting. Questo consente di non adattare direttamente un modello fisico a una nuvola di punti la cui densità dipende da quanti click sono stati fatti durante la digitalizzazione. Il fitting riceve invece una griglia controllata e una curva centrale derivata esplicitamente dalle repliche.

Da qui la Session può proseguire verso Curve fitting, mantenendo separati due problemi diversi:

9. Cosa mostra questa Session di GX-TXT