From a raw tensor to an inspectable result
Open a saved example or import a finite, nonnegative n × n × n tensor. Every coordinate must be present, including repeated indices. Missing-cell masks and structural-zero constraints are not implemented. An observed zero is treated as a measured zero and receives the same 0.5 pseudocount as every other voxel.
Press Run all three normalizers. The three calculations begin separately with A = raw + 0.5. Their final weights are scaled to full-cube arithmetic mean 1. A value of 2 means twice this common reference level; it is not a contact probability.
Square-root Darrow–Huntley
Compute all fiber and plane sums from the current W. With total T, pair sums P, Q, R, and plane sums U, V, Z, form D = T·P·Q·R/(U·V·Z). Update W ← mean_one(W/√D). The square root applies to the entire divisor.
Balanced log ANOVA
Project log(A) onto its three-way interaction by subtracting all lower-order log terms. Exponentiate. Then balance fibers sequentially along i, j, and k until the arithmetic fiber sums agree across all orientations.
Repaired binomial pair
Requires symmetry under coordinate permutations and the actual snapshot/exposure count S, with 0 ≤ raw ≤ S. Fit a symmetric pair logistic background using Newton-CG. Remove fitted odds with an outer objective-decrease line search. A globally reduced numerical probability scale keeps trial probabilities feasible. It never clips individual voxels or substitutes another normalizer.
For chromosome 21 examples, S is the supplied number of canonical read triples, not a count of simulation snapshots. The normalized output remains a relative-weight tensor. The original-scale probability feasibility check appears in the result metadata.
What “converged” means
At the chosen tolerance, the maximum relative voxel update, the pooled fiber ratio minus 1, and the pooled plane ratio minus 1 must all pass for three consecutive updates. An initially balanced binomial input can return immediately. An iteration cap, failed line search, or tiny step with unresolved imbalance is displayed as a failure or an unfinished run.
What the components mean
Let B = log(A) − log(W). Decompose B into a constant cₗ, three centered single-axis vectors, and three doubly centered pair matrices using ordinary log-ANOVA means. Exponentiating gives the multiplicative factors in the Components view. This centering convention removes the arbitrary transfer of constants between factors.
The overall factor c = exp(cₗ) is not generally the arithmetic mean of A. Both are retained. For symmetric data there is effectively one shared vector and one shared pair matrix, but all three copies are exported to preserve the actual calculation.
The small three-way remainder of B measures numerical reconstruction error and is exported explicitly. Including exp(remainder) in the product makes the factorization recover A to floating-point accuracy. Subtracting 0.5 recovers raw.
W has balanced arithmetic fiber sums. H(log A) is a signed three-way log interaction, and is separately available as a slice table and in the exports. These are different representations. Neither a remaining peak nor agreement of methods identifies the physical source of a three-body signal.
Input and export formats
- NPY: one cubic numeric array. C or Fortran order and common integer/float dtypes are supported.
- NPZ: array
raw and optional scalar snapshots. Extra reference arrays are ignored. Masks are rejected. - JSON:
{"shape":[n,n,n],"raw":[…],"snapshots":S}, a nested cube, or a complete exported session. Flat arrays use C order: k changes fastest. - CSV/TSV: header
i,j,k,value, zero-based coordinates, every voxel exactly once. Missing coordinates and duplicates are rejected. - Full data ZIP: original raw and smoothed arrays, every result, text summary, metadata, histories, component factors, log interactions, reconstruction remainders, and all fiber/plane sums. Arrays are NPY; tables use CSV.
- Offline app: the complete software and raw examples. Open it in a browser and run the normalizers; no server is needed. Reimporting result JSON uses its original raw tensor and recalculates.
Browser limits: side length ≤128; input files ≤150 MiB. Dense arrays scale as n³. Cancel stops the worker. For larger cubes or scripted processing, use the included Python runner with NumPy and SciPy.
The four demos contain saved raw tensors from the latest Tensor_Normalization_Explorer_Complete.zip: chromosome 21 at 1 Mb, moving loops, patchwork chain, and sticky hubs. Clicking Run recomputes normalization. The physical trajectories are not resimulated. Source and validation records are included in the software package.