Skip to content
Sign in
ALARA validation — a tool with no data to check against

Validation of the work planning calculator

This calculator uses no nuclear data, no empirical fit and no standard's constants, so there is nothing published to compare it against. What can be done instead is to derive every expression, turn its one assumption into a number a planner can use, and enumerate every input for which there is no answer.

Subject
The work planning calculator at /calc/alara/ and the engine module src/engine/alara.ts.
Report date
2026-09-19
Source revision
09c0347
Archived source
10.5281/zenodo.22794265
Checks performed
544
Acceptance criteria
Geometry and arithmetic: relative difference below 1e-12. Worked cases: below 1e-9. No accuracy criterion applies to the point-source assumption; its cost is measured instead.
Not established
5 items, listed at the end
Result
All checks pass.

Scope, and why this report has no comparison table

The other five reports on this site all end up comparing against something: a definition, an evaluated data file, a published constant, a worked example in a standard. This one cannot, and saying so plainly is more useful than manufacturing a comparison.

The inverse square law is geometry. Stay time is a division. Collective dose is a sum. The half-value layer is a rearrangement of the exponential. None of them has a reference value to look up, because none of them contains a measured quantity — everything on this screen is either entered by the user or follows from the four operations.

That changes what validation means here. A tool with no data cannot be wrong about data; it can be wrong about where its assumption stops holding, and about what it does with inputs that have no answer. Those are the two things this report spends its length on, and they are where all nine defects it found were.

The expressions, derived

A-U-01 — The inverse square law from solid angle

In the code: inverseSquare in src/engine/alara.ts

  1. A point source emits the same number of particles per second in every direction.
  2. At distance d those particles are spread over a sphere of area 4πd². Nothing is created or destroyed in between, so the number crossing unit area falls as 1/d².
  3. Dose rate is proportional to that fluence rate, so it falls the same way: Ḋ(d₂) = Ḋ(d₁)·(d₁/d₂)².
  4. No property of the source, the radiation or the material enters. That is why this is the one relation on the screen that needs no data at all.
  5. It is also why it is the first control a radiation protection plan reaches for: doubling the distance costs nothing and removes three quarters of the dose.

A-U-02 — What the point-source assumption costs, as a function of distance

In the code: the scope of inverseSquare

  1. The derivation above needs the source to be a point. Real sources have extent, and the honest question is not whether the assumption is exact — it never is — but how far away it stops mattering.
  2. That question has a closed-form answer for a uniform line source of length L. Integrating 1/(d² + l²) along the line gives a dose rate proportional to (2/(L·d))·arctan(L/(2d)) at perpendicular distance d from the midpoint.
  3. Dividing by the point-source expression A/d² leaves arctan(x)/x with x = L/(2d), which is less than one for every finite distance and tends to one as d grows.
  4. So the point approximation always OVERESTIMATES the dose rate from an extended source. For planning that is the safe direction, which is worth knowing as well.
  5. The report tabulates the overestimate against d/L and solves for the distance at which it falls below 10%, 5%, 1% and 0.1%. That turns a caveat into a number a planner can use.
  6. Two things this does not cover: air attenuation, which reduces the rate further at long distance, and scatter from floors and walls, which increases it. Neither is in this calculator.

A-U-03 — Stay time, and the difference between zero and unknown

In the code: stayTime in src/engine/alara.ts

  1. A dose budget divided by a dose rate is a time. There is nothing more to it when the rate is a positive number.
  2. The interesting cases are the others. A rate of exactly zero means the budget is never spent, so the stay time is unbounded — that answer is correct and useful.
  3. A rate that is missing, not-a-number, negative or infinite means something different: there is no answer. Reporting unbounded there would tell a worker they may stay indefinitely because the field was left blank.
  4. The screen must therefore distinguish three outcomes, not two, and the engine returns a not-a-number for the third so that the screen can.
  5. This case exists because the distinction was got wrong twice — see the refusals.

A-U-04 — Collective dose adds, and must not cancel

In the code: collectiveDose in src/engine/alara.ts

  1. Collective dose is the sum over tasks of workers × hours × dose rate, in person-millisieverts.
  2. It is a plain sum, so it is exactly additive: splitting a task into two halves changes nothing.
  3. What matters is what happens to a bad row. A negative number of workers, or a negative rate, produces a negative contribution that silently cancels part of a legitimate task, and the total still looks like a total.
  4. So a single invalid row makes the whole sum unanswerable rather than being absorbed into it.

A-U-05 — Half-value and tenth-value layers are definitions

In the code: hvlFromMu and tvlFromMu in src/engine/alara.ts

  1. Narrow-beam attenuation is I = I₀·e^(−µx). Setting I/I₀ = 1/2 gives x = ln2/µ, and 1/10 gives x = ln10/µ.
  2. These follow from the exponential and nothing else, so they are exact for any µ the user supplies.
  3. Their ratio is therefore ln10/ln2 = log₂10 = 3.3219…, independent of µ and of the material — which is checked as an identity.
  4. A µ of zero has no half-value layer: the beam is not attenuated at all. Returning an infinite thickness reads as “a very thick shield works”, when the truth is that no thickness of that material works.

Turning “assume a point source” into a distance

Every inverse-square calculator carries a caveat that the source must be small compared with the distance. As a sentence it is useless: a planner needs to know whether three metres from a one-metre weld is close enough. That question has an exact answer, and no external data is needed to get it.

For a uniform line source of length L, integrating along the line gives a dose rate proportional to (2/(L·d))·arctan(L/(2d)) at perpendicular distance d from the midpoint. Dividing by the point-source expression leaves arctan(x)/x with x = L/(2d), which is below one everywhere and rises to one as the distance grows.

Distance
[source lengths]
Exact ÷
point source
Point source
overestimates by
0.5 0.785398 27.324%
1 0.927295 7.841%
2 0.979915 2.050%
3 0.990892 0.919%
5 0.996687 0.332%
10 0.999168 0.083%
20 0.999792 0.021%

Read the other way round, that is a rule a planner can apply:

To keep the overestimate understand at least
10.0% 0.88 source lengths
5.0% 1.27 source lengths
1.0% 2.88 source lengths
0.1% 9.13 source lengths

Two things follow. One source length away is not enough — the error there is 7.8%. And the error is always in the safe direction: the point approximation reports more dose than an extended source actually delivers, so a plan built on it is conservative. Neither statement is in the tool's caveat text, and both are more useful than the caveat.

This holds for a line, which covers a pipe run or a weld. A disc or a volume gives a different answer, and only the line is computed here — it is listed at the end among what this report does not establish, along with air attenuation and scatter, which work in opposite directions and so do not cancel.

Identities

Each is checked across a grid of 4 dose rates, 4 distances and 4 attenuation coefficients — 512 comparisons in total, worst difference 2.67e-16 (A-ID-04 @rate=0.01, d=0.1, µ=37).

IdentityHandToolWorst
difference
Doubling the distance quarters the dose rate A-ID-01 2.5×10⁻¹ 2.5×10⁻¹ 0
Solving for distance inverts the rate calculation A-ID-02 1×10⁰ 1×10⁰ 0
The dose rate scales linearly with the source strength A-ID-03 3×10⁰ 3×10⁰ 1.48e-16
A tenth-value layer is log₂10 half-value layers A-ID-04 3.32192809489×10⁰ 3.32192809489×10⁰ 2.67e-16
Doubling µ halves both layers A-ID-05 5×10⁻¹ 5×10⁻¹ 0
Halving the dose rate doubles the stay time A-ID-06 2×10⁰ 2×10⁰ 0
Splitting a task in two changes nothing A-ID-07 1×10⁰ 1×10⁰ 0
Doubling the crew doubles the collective dose A-ID-08 2×10⁰ 2×10⁰ 0
Derivations of the identities

A-ID-01 — Doubling the distance quarters the dose rate

  1. The defining consequence of the inverse square law, and the reason distance is the first control.
  2. It is exactly 0.25 at any starting distance and any rate, so it is checked across a grid of both.
  3. A tool that had squared only one of the two distances would still be monotonic and would fail here.

A-ID-02 — Solving for distance inverts the rate calculation

  1. Asking for the distance that yields a target rate, then asking for the rate at that distance, must return the target.
  2. The two are separate expressions in the engine, one with a square and one with a square root, so nothing forces them to agree.
  3. Checked over a grid of reference rates, reference distances and targets.

A-ID-03 — The dose rate scales linearly with the source strength

  1. Geometry does not care how strong the source is: tripling the reference rate triples the rate at every distance.
  2. This separates the geometric factor from the source term, which is what makes the reference-rate input meaningful.
  3. It also means the tool never needs to know what the source is: a measured rate at a known distance carries everything, which is why this calculator asks for a reading rather than an activity.

A-ID-04 — A tenth-value layer is log₂10 half-value layers

  1. ln10/ln2 = 3.3219…, with no dependence on µ or on the material.
  2. It is the cleanest check that both expressions come from the same exponential.
  3. The residual is not exactly zero in floating point — the report prints what it measures rather than claiming zero.

A-ID-05 — Doubling µ halves both layers

  1. Both thicknesses are inversely proportional to µ, so a material twice as absorbing needs half the thickness.
  2. Checked for the half-value and tenth-value layer separately, since they are separate expressions.
  3. It is the identity that fixes the units: µ in inverse centimetres gives a thickness in centimetres, and a coefficient entered per metre would pass every other check here and give an answer a hundred times wrong.

A-ID-06 — Halving the dose rate doubles the stay time

  1. Stay time is the budget divided by the rate, so it is exactly inverse in the rate.
  2. It is the identity behind the two figures the screen shows next to the answer: at twice the distance, and behind one half-value layer.
  3. Both of those are this identity with the rate reduced by a factor from the geometry or the shielding.

A-ID-07 — Splitting a task in two changes nothing

  1. Two rows of half the hours each must give the same collective dose as one row of the full hours.
  2. Additivity is the whole content of the quantity, and it is what makes person-millisieverts comparable between plans.
  3. Checked with an uneven split as well as an even one, so that a symmetric error would not cancel.

A-ID-08 — Doubling the crew doubles the collective dose

  1. Collective dose counts people, so twice the crew for the same work is twice the total — even though each person receives the same.
  2. That is the tension the quantity exists to expose: a job done by fewer people for longer has the same collective dose but a higher individual one.
  3. The calculator reports the total; the individual figure is the stay time above.
  4. Neither number is a judgement. Which plan is better depends on the individual limit as well as the total, and the tool supplies neither limit.

Worked cases

CaseBy handToolDifference
Backing off from one metre to four A-W-01 1.25×10⁻¹ mSv/h 1.25×10⁻¹ mSv/h 0
How far to reach a working limit A-W-02 1×10¹ m 1×10¹ m 0
Stay time on a one-millisievert budget A-W-03 8×10⁰ h 8×10⁰ h 0
Collective dose for a two-task job A-W-04 5×10⁰ person·mSv 5×10⁰ person·mSv 0
Half-value layer from a measured attenuation coefficient A-W-05 5.7762265047×10⁻¹ cm 5.7762265047×10⁻¹ cm 5.85e-12
Tenth-value layer from the same coefficient A-W-06 1.9188209108×10⁰ cm 1.9188209108×10⁰ cm 1.48e-11

A-W-01 — Backing off from one metre to four

  1. The reference is 2 mSv/h at 1 m.
  2. Ḋ(4 m) = 2 × (1/4)² = 2/16 = 0.125 mSv/h.
  3. Three metres of floor removed 93.75% of the dose rate and cost nothing.
  4. If the source is a line 1 m long, the point approximation overstates this by about 2% at 4 m — see A-E-01.

A-W-02 — How far to reach a working limit

  1. From 2 mSv/h at 1 m, the distance at which the rate is 0.02 mSv/h is d = 1 × √(2/0.02).
  2. √100 = 10, so d = 10 m.
  3. Check: 2 × (1/10)² = 0.02 mSv/h. The two expressions agree, which is identity A-ID-02.
  4. A hundredfold reduction in rate needs a tenfold increase in distance — the square root is why distance stops being cheap eventually.

A-W-03 — Stay time on a one-millisievert budget

  1. At the 4 m position from A-W-01 the rate is 0.125 mSv/h.
  2. A task budget of 1 mSv gives 1/0.125 = 8 hours.
  3. At 1 m it would have been 0.5 hours. The same job, the same budget, sixteen times the working time.
  4. This is a task budget set by the planner, not a regulatory limit; the calculator does not supply dose limits.

A-W-04 — Collective dose for a two-task job

  1. Task one: 3 workers × 2 h × 0.5 mSv/h = 3 person·mSv.
  2. Task two: 2 workers × 4 h × 0.25 mSv/h = 2 person·mSv.
  3. Total 5 person·mSv.
  4. The two tasks contribute unequally despite the second taking more worker-hours, because the rate differs — which is the comparison the quantity is for.

A-W-05 — Half-value layer from a measured attenuation coefficient

  1. A measured linear attenuation coefficient of 1.2 per centimetre.
  2. HVL = ln2/µ = 0.693 147 180 6 / 1.2 = 0.577 622 650 47 cm.
  3. This is narrow-beam: a real broad beam has scatter reaching the detector, so the observed thickness for half is larger.

A-W-06 — Tenth-value layer from the same coefficient

  1. TVL = ln10/µ = 2.302 585 093 / 1.2 = 1.918 820 910 8 cm.
  2. TVL/HVL = 1.918 820 910 8 / 0.577 622 650 47 = 3.321 928 094 9, which is log₂10.
  3. The ratio carries no µ, so it is the same for every material and every energy — identity A-ID-04.

Where the calculator must refuse — all nine were open

In a tool with no data, this is where the defects are. Every one of the nine below returned a number that looked like an answer.

One of them is worth dwelling on. On 14 September the stay time was fixed so that a missing dose rate no longer reported “unlimited” — the guard had asked whether the rate was greater than zero, and a not-a-number fails that test, so it fell through to the unbounded branch. A negative rate fails the same test for the same reason, and it was still falling through five days later. Half the defect was fixed and half was left.

The lesson has been written into the engine: when a guard is repaired for one bad input, every other input that reaches the same branch has to be counted at the same time. Here the branch is reached by not-a-number, by negatives and by infinities alike, and the correct behaviour differs only for exactly zero — which genuinely does mean unbounded.

InputWhy there is no answerRefused
A negative reference dose rate A-R-01 Returned −2.5 mSv/h. A negative dose rate has no meaning and would flow into a negative stay time. yes
A negative reference distance A-R-02 Returned −22.36 m. Only the target was checked for sign; the reference distance was not. yes
A reference rate of zero when solving for distance A-R-03 Returned 0 m, which reads as “stand against the source”. The truth is the opposite: with no source there is no constraint and every distance satisfies it. A number that means the reverse of the truth is worse than none. yes
A negative dose rate when computing stay time A-R-04 Returned infinity, which the screen renders as “unlimited”. The not-a-number case of this same guard was fixed on 2026-09-14, but a negative value falls down the same branch — a comparison with a negative is false for the same reason a comparison with a not-a-number is. Half the defect was fixed and half was left. yes
A negative dose budget A-R-05 Returned −20 hours. A negative time is not a refusal; it is an answer that looks like one. yes
A negative number of workers A-R-06 Returned −6 person·mSv. Worse than the sign alone: inside a list of several tasks a negative row silently cancels part of a legitimate one, and the total still looks like a total. yes
A not-a-number in one task of several A-R-07 One unanswerable row makes the sum unanswerable. This one already behaved correctly and is kept so that it stays that way. yes
A zero attenuation coefficient A-R-08 Returned an infinite half-value layer, which reads as “a very thick shield works”. The truth is that no thickness of a material that does not attenuate will halve the beam. yes
A negative attenuation coefficient A-R-09 Returned −0.693 cm. A negative coefficient would describe a beam that grows as it passes through matter. yes

And the one case that must not refuse: a dose rate of exactly zero gives an unbounded stay time, because the budget is never spent. The engine returns infinity there and not-a-number for every other non-positive value, which is what it does.

What this report does not establish

Not establishedWhy
Anything against measurement A-N-01 This calculator uses no nuclear data, no empirical fit and no standard's constants, so there is no published table or worked example to reproduce. Everything here is derived, and the report says so rather than implying an external check took place.
Air attenuation and scatter A-N-02 The inverse square law is applied in vacuum. Air absorption reduces the rate at long distances and scatter from floors, walls and equipment raises it; neither is modelled, and the two work in opposite directions so they do not cancel predictably.
Source geometries other than a line A-N-03 The distance at which the point approximation becomes adequate is derived here for a uniform line source, which is the common case for a pipe or a weld. A disc, a volume or a shielded container has a different answer, and only the line case is computed.
Dose limits A-N-04 The budget on this screen is the planner's own figure for a task. The calculator supplies no regulatory or recommended limit and does not check the number entered against one.
Broad-beam shielding A-N-05 The half-value and tenth-value layers follow from narrow-beam attenuation. Behind a real shield, scattered photons reach the detector and more thickness is needed than these figures give — the direction that matters, since it is the unsafe one.