A neighbourhood is a hypothesis
Worth reading first: How far a primordium reaches · The level was doing the ordering · A window that makes a pattern.
The placement rule on this site has one line that decides everything and one line nobody wrote down as a decision. The first is the rule itself: put the next primordium where the repulsion from the ones already there is least. The second is the sum that “the ones already there” runs over — because a real sum has to stop.
The earlier work discovered what that stopping place is worth. At an inverse first power the rule produces no lattice at all when it can see far enough — the divergence angle wanders over forty degrees, which is the wandering of an arbitrary sequence. Cut the neighbourhood at three spacings and the same rule produces a clean 8/13 at 137.62° with 0.58° of scatter: a pattern that passes every test this collection has, including the ones that ask whether a figure is drawn correctly, and disappears the moment the window is widened.
That result was recorded as truncation manufactures a pattern, and it was recorded with a repair attached that the work did not have room to make. The repair is the subject here, and it is one sentence long: the neighbourhood is a parameter of the model rather than of the loop.
What the loop was actually doing
The code is worth being exact about, because the defect is invisible in the mathematics and obvious in the program.
grow() places node i by sweeping a candidate azimuth around the cylinder and
computing, at each candidate, the total repulsion from a set of neighbours. The
set was the most recent reach/√h nodes. That is a cut in recency: a node
is in the sum because it was placed lately, not because it is nearby.
Two things follow, and the second is the one that matters.
The first is that the cut has no physical reading at all. On a cylinder the most-recent nodes are the ones nearest the top, so a recency window is roughly a band of rows below the tip — but only roughly. A node placed forty steps ago sits somewhere on a circle whose circumference is the whole stem, so some of it is close to the candidate and some of it is half a turn away, and the window keeps all of it equally. Meanwhile a node placed a hundred steps ago that happens to lie directly below the candidate is discarded. Nothing about a growing apex works that way. If inhibition falls off with distance, it falls off with distance.
The second is that the recency cut is smooth in the one variable the rule minimises over. As the candidate azimuth sweeps around the circle, the set of neighbours in the sum does not change: it was chosen once, before the sweep began. So the energy profile the rule sees is a continuous function of azimuth, whatever the window is.
That is not a small property. It is the reason the truncated rule produces a beautiful lattice rather than nonsense, and it is why the obvious repair — cut at a distance instead — turns out to be a different thing entirely rather than a tidier version of the same thing. That comparison has an essay of its own; what belongs here is why the repair was attempted in the first place.
Why nobody noticed
It is worth asking how a decision of this size stayed invisible through four rounds of work, because the answer generalises past this site.
A loop bound does not look like a modelling choice. It looks like an efficiency measure — the kind of line written while thinking about something else, with a comment saying keep the last few hundred, the rest contribute nothing. That comment is even true for the exponent the model was built at: at an inverse cube the far field really does contribute nothing, and a window of any generous size gives the same answer as no window at all. The bound was introduced when it was harmless and was still there when it was not.
What made it harmful was a different round of work asking a different question. Varying the falloff exponent is the natural thing to do to a rule whose exponent came from a ferrofluid experiment rather than from a plant, and at the long-ranged end of that sweep the window stopped being generous and started being the model. Nothing warned anybody. Every gate was green; the figures were beautiful; the counts were Fibonacci.
There is a general shape here and this collection has now met it three times. A parameter that is not binding reports the same number however it is varied, and the same number however it is varied reads as robustness. That earlier work’s first sweep varied the window and found the answer perfectly stable, because at the rises involved the window was not the binding constraint and every column of the table was the same run. A robustness check that varies the wrong quantity is worse than no robustness check, because it is evidence for the wrong conclusion.
A cut-off, and what makes it a hypothesis
The change is small. Instead of choosing a set of neighbours and summing over it, multiply every neighbour’s contribution by a weight that falls with distance:
where is a stated width and is a stated falloff. The sum still runs over a finite set of nodes, because a program has to stop somewhere — but now the stopping place is chosen to be irrelevant: the window runs to four widths, where an exponential weight has fallen to , about one part in fifty-five, and a gaussian to .
The distinction between those two stopping places is the whole content of this
change, and it is worth stating plainly. The old window decided the answer. The
new one is required not to. That requirement is a check rather than a hope:
assertTheWindowIsNotTheCutOff runs the same cut-off over twice as many
neighbours and requires the settled divergence to move by less than a third of a
degree. It does; the two agree to two decimal places.
What the change buys is that is now a claim about a plant. Inhibition from a primordium falls to half its strength at about two cell diameters is a sentence a biologist could argue with, could measure against, and could be wrong about. The loop stops after forty-seven nodes is a sentence about a program.
Three shapes, and why the third is here
The library carries three falloffs, and it is worth being explicit that only two of them are hypotheses.
Exponential, , is the steady-state concentration of a substance that is produced at a source, diffuses, and decays at a constant rate. It is what the standard account of auxin depletion actually implies: a primordium acts as a sink, the depleted region around it has an exponential profile, and the next primordium forms where the concentration recovers. Of the three, this is the one with a mechanism behind it.
Gaussian, , is what a briefly-produced signal’s profile looks like as it spreads by diffusion alone, with no decay. It is the other standard shape and it describes a different story about the same chemistry.
Hard, one inside the width and zero outside, is not a physical claim about anything. It is in the library because it is what a truncated loop amounts to once it is written down as a function — that earlier work’s accident, converted into an explicit hypothesis so that it can be compared with the ones made on purpose. It turns out to behave completely differently from both smooth shapes, and that difference is the sharpest result of this thread.
The unit the widths have to be read in
There is a trap in comparing shapes that this essay walked into and that the figures now exist to prevent.
Ask for “a cut-off at three spacings” and the three shapes give three different rules. At spacings with , the exponential is at and the gaussian is at too — they agree there by construction — but at the exponential is at 0.61 and the gaussian at 0.78, and at the exponential is at 0.14 and the gaussian at 0.018. Nominally the same width, and one of them keeps four times as much of its far field.
The consequence, measured before it was understood: the two shapes disagreed about where the lattice ends, and the disagreement was reported as a property of the shapes when part of it was a property of the axis. The repair is a unit. Every range in this thread is stated as a half-weight radius — the distance at which the weight has fallen to a half — which is for a gaussian and for an exponential.
That does not make the disagreement go away. It shrinks it, and what is left is real, and the essay that follows this one is about what the residue turns out to be. But the unit had to exist before the question could be asked, and the general form is one this collection keeps rediscovering: a comparison between two models is a comparison between two parameterisations until somebody names the quantity both are being read in — which is the same correction a half-weight radius makes to a hard edge.
Why an inverse first power needs a cut-off and an inverse cube does not
The boundary at four half-weights is a measurement, and there is an argument that says which exponents can have one at all — which turns the cut-off from a fitted width into a hypothesis with a domain.
What decides the placement is not the repulsion but its variation around the circumference, since an argmin is blind to a constant. On a cylinder the number of nodes at distance r grows in proportion to r, and each contributes a variation falling as one over r to the power p plus one. So a shell at r contributes variation going as 1/r^p, and the whole far field is a sum of that over shells.
That sum converges for p greater than one and diverges — logarithmically — at exactly p equal to one. Every shell of an inverse first-power rule contributes the same amount however far away it is, so there is no distance past which the far field stops mattering, and the divergence angle has nothing to settle on. Cut the sum and the divergence appears; widen the cut and it goes again.
An inverse-cube rule is the opposite case and this collection has measured it from the other side: its shells fall as one over r cubed, the far field beyond about four spacings is a few per cent of the near field, and widening the neighbourhood changes nothing at all — zero placements differ between four spacings and twelve.
So four spacings is the same number twice, and the exponent decides what happens there. At an inverse cube the far field beyond four spacings is negligible; at an inverse first power it is decisive. A cut-off is a hypothesis for rules of the first kind and an irrelevance for rules of the second.
It also makes a prediction that has not been tested here. An inverse-square rule sits between them with a convergent sum, so it should have a lattice with no cut-off — and a cut-off width that changes nothing, like the inverse cube. If an inverse-square rule turns out to need a width, the shell argument is wrong and the boundary is somewhere other than where the arithmetic puts it.
What the cut-off makes
With all of that in place, the prediction the earlier work recorded can be tested. It had three parts. A physical cut-off at three spacings would reproduce the manufactured lattice; it would be as fragile as the manufactured one; and the width would become a hypothesis with a critical value.
The first part holds, closely. The truncated loop settles at 137.62° with 0.58° of scatter and counts 8/13. An exponential cut-off at the same range settles at 137.58° with 0.50°, and counts 8/13. Four hundredths of a degree apart, on a quantity whose branches are three degrees apart — the two are the same pattern by any reading.
The third part holds too, and it is what makes the change worth making. Widen the cut-off and the lattice stops: past about four half-weights the exponential rule has no divergence angle either, which is the state the uncut rule was in all along. So there is a boundary, it is at a stated width, and the width is a number about inhibition rather than about a loop. A hypothesis that excludes something is the only kind worth having.
The second part fails, and it fails in the most useful direction available. That has an essay of its own as well.
What a width would mean on a plant
It is worth spending a paragraph on what the number actually refers to, because a model parameter with no units attached is a model parameter nobody can refute.
The local spacing on a cylindrical apex of unit circumference gaining one node per rise is — each node holds an area of , and the distance between neighbours is the root of it. On a real shoot apical meristem that spacing is the distance between adjacent primordia at the moment of their formation, which is measured in tens of micrometres and is a few cell diameters across. So a cut-off at two half-weight radii is a claim that a forming primordium’s influence has fallen to half strength about two primordium-spacings away, and to a twentieth by five.
That is a claim about the reach of whatever is doing the inhibiting. If the inhibitor is auxin depletion, the reach is set by how far auxin diffuses before the transporters move it back — a length that can be estimated from transport rates and that mutants change. If the inhibiting signal is mechanical, the reach is set by the stiffness of the tissue and is a completely different length. The two hypotheses predict different widths, and a width is now the kind of thing the model has an opinion about.
None of that is measured here. What is measured is that the model has the opinion — that the width matters, that there is a value beyond which the pattern stops, and that below it the pattern is the one plants show. Before this change, the model had no opinion at all, because the quantity was a loop bound and loop bounds do not have units.
What this does not fix
Two limits, both of which the rest of this thread runs into.
The cut-off does not make the p = 1 rule’s lattice real. It makes the claim that the lattice depends on a stated neighbourhood into an explicit one. A pattern that exists at a range of two spacings and not at six is a pattern conditional on a measurement nobody has made, and writing the condition down is progress rather than resolution. The honest summary of the whole thread is that that earlier work’s manufactured lattice has been converted from an artefact into a prediction — which is better, and is not the same as being true.
And the range, on its own, decides nothing. Two shapes read in the same unit still disagree about where the lattice ends by half. Something else is the invariant, and it was measured earlier here for a different reason. That is the next essay.
What is left
The earlier work asked for a repair and this is the repair. It changed one line of the placement rule, added a check that the loop bound is not the answer, and gave the neighbourhood a unit. What it found is that the accident it was built to remove reproduces exactly when it is stated on purpose — and that stating it on purpose changes something else, which nobody predicted, and which the next two essays are about.
The line that is now written down is worth reading once more as the thing it is:
the interaction falls to half its strength at R local spacings, with a stated falloff shape
Two numbers and a functional form, where before there was a loop bound. Neither number has been measured on a plant. Both could be.
What links here
Computed from the collection, not written here: the essays that point at this one.
Shares its objects with
Essays that name at least two of the same things, and that neither author linked.
- The organ that guards the second slot — both name artefact, discretisation, lattice offset, the placement rule, repulsion, rise
- A removal that changes nothing — both name artefact, discretisation, the range of the interaction, neighbourhood, the placement rule
- The exponent that barely matters — both name meristem, the placement rule, repulsion, rise, untested claim
- The response with a hole in it — both name artefact, discretisation, lattice offset, the placement rule, rise
- When the second wall is free — both name artefact, discretisation, the range of the interaction, lattice offset, rise
- Where the model stops — both name discretisation, the range of the interaction, meristem, repulsion, truncation
Named objects
A flat tag is an object no other essay names yet.
ArtefactCut-offDiscretisationThe range of the interactionLattice offsetMeristemModel scopeNeighbourhoodThe placement rulePrimordiumRepulsionRiseTruncationUntested claim