veg.tools
← Blog

The Lovex line, two data audits, and the day we widened our own error bars

This update is mostly about powders — the Explosia Lovex line that European handloaders (and, under the Shooters World label, American ones) have been asking about — and about what happened when we pointed our own referee at our own reference data. One number in this release got worse on purpose, and that is the part we are proudest of.

The Lovex line: 23 powders, most of them arriving already fitted

beforenow
Powders210233
Reference loads (fit corpus)462910
Fitted (Provisional) powders5266

Lovex is Explosia’s canister line from the Czech Republic — the D-series double-base and S-series single-base powders sold in the US as Shooters World (Clean Shot, Auto Pistol, Tactical Rifle, Match Rifle…). The catalog now carries all 23, under both names at once: “Lovex D032 / SW Clean Shot”, the same convention we already use for HP-38 / Win 231.

Every spec came from the maker’s own documents — the 2023 Propellants Catalogue for chemistry, grain form and bulk densities, the Lovex Reloading Guide for the burn-rate chart and the maker’s own “similar to” placements — and every stream was then re-checked by an adversarial verifier whose only job was to find the error. The verifiers earned their keep again: they caught a bulk-density transcription swap between S070 and S071 and two chart-row misreadings before any of it shipped.

The bigger story is the load data. The Lovex guide states its CIP test barrels per cartridge, which is exactly what our fitting procedure needs — so 438 published charge→velocity rows entered the corpus, and 11 of the 23 powders arrive with a Provisional grade (fitted to published data) instead of a chart estimate. Two of them — D032 and S020 — sit precisely in the fast-pistol region where our chart estimator has always been noisiest. More on that below.

Rejections are part of the product, as always: a .45 Colt misprint in the guide’s own start/max columns, two cells that contradict each other across guide editions, every Shooters World table that states no test barrel, and a cast-lead special-purpose table all stayed out, each with its reason written down.

When a powder cannot be fitted, audit the data, not the model

Two Vectan powders — GM3 and Sp 2 — have refused to fit for months. Our fit gate rejects any powder whose cross-validated error exceeds 6%, and both kept failing it. The lazy move would be loosening the gate. The audit found the real story, and it is two different stories:

GM3’s rows are gone. GM3 turns out to be a Nobel Sport Italia powder — it is not in the French Vectan tables at all — and its only data source, the official NSI datasheet, prints load rows whose implied ballistic efficiency is physically impossible. A datasheet that contradicts physics cannot anchor a fit, no matter how official the letterhead. GM3 now honestly wears a chart estimate.

Sp 2’s rows were replaced, and now it fits. The live vectan.fr tables verify most of Sp 2’s data digit for digit — so it kept a corpus, rebuilt from the current tables. But every .40 S&W row was excluded: one loads a bullet weight that does not exist commercially in .400”, and the 180 gr entry appears twice with velocities 25% apart at nearly the same charge. When a source contradicts itself, we carry neither reading. On the cleaned 17-row corpus, Sp 2 fits within ~72 fps holdout across 7 cartridges — Estimated → Provisional, the honest way.

The rule both cases teach: a transcription error can be fixed by re-reading the source; a source-side artifact can only be excluded. A powder that “cannot be fitted” is a data audit waiting to happen, not a tolerance waiting to be loosened.

The error bar that got wider

Our Uncalibrated predictions — powders with no fitted data — carry an interval measured by leave-one-out testing: hide each fitted powder’s data, predict it from the burn-rate chart alone, and record how wrong that gets. With the corpus doubled, the pistol-side answer changed: the new fitted pistol anchors put much more of the hard fast-pistol region under test, and the honest p90 error there is 24.8%, not the 12.9% the old, thinner measurement showed.

So the Uncalibrated pistol interval widened from ±18% to ±25%. Nobody enjoys shipping a wider error bar. But an interval narrower than its own measurement is not precision, it is a lie with confident typography — and the whole point of this tool is that the bars mean something. (Rifle stayed at ±20%, still wider than its measured 17%.)

The estimator now screens its own anchors

For unfitted powders, predictions come from interpolating the fitted powders (“anchors”) along the published burn-rate chart. One anchor — Hodgdon Longshot — fits about 1.7× off its neighbors’ trend, and until now it was excluded from anchor duty by name, on a hand-maintained list. A hand list is a judgment the estimator should be making from the data.

Now it does: every anchor is judged against the robust local trend of all the others, and one sitting more than 1.5× off loses its anchor role automatically. It still predicts its own powder perfectly well — fitted data always beats estimates — it just can’t bend its neighbors anymore.

The screen caught Longshot, as designed. It also caught something the hand list had missed: Vectan AS was quietly inflating estimates across the fast-shotgun/pistol ranks. Dropping it moved 13 powders’ estimates down 5–30%, and the corpus agreed — out-of-sample error on the affected powders improved (Lovex S015 from 11.9% to 7.4%, Trail Boss from 13.6% to 11.2%), and nothing anywhere regressed.

The audit that mostly said “the data was fine”

Encouraged by the Sp 2 result, we pointed the same audit at the other three Vectan powders our fit gate keeps rejecting — Ba 10, A1 and A0 — expecting more corrupted rows. That is not what came back, and honesty cuts both ways: 14 of our 16 rows verified digit-for-digit against the live vectan.fr tables and the 2014 booklet, including the one row we were most suspicious of (a .308 Winchester entry for A0, a pistol-rate powder — which turns out to be a real published reduced load with a cast Lyman bullet).

The audit still earned its keep: two bullet-weight transcription slips fixed (90 gr, not 88; 125, not 124), one mutually-contradictory duplicated row pair excluded (the same disease Sp 2 had, one table over), and a policy applied consistently at last — cast-bullet rows no longer enter the fit corpus, because the model’s friction assumptions are jacketed and the maker’s tables mix the two freely. The three powders’ corpora were rebuilt from the live tables, jacketed rows only, with per-row provenance.

And the referee answered: on the cleaned corpora, A0 and Ba 10 now fit (54 and 49 fps holdout — Estimated → Provisional), while A1 still declines at 7.7% cross-validated error. Two out of three is what the data supports, so two out of three is what ships.

The VMD chart you have bookmarked is not manufacturer data

While we were at it, we tried to close a quieter gap: only 96 of 233 powders carried a published bulk density (the number behind the case-fill readout — everything else falls back to an estimate). We went hunting for maker-published densities for the other 137, with a hard rule: the manufacturer’s own documents, or nothing.

The results were not what the internet believes:

  • Western Powders publishes. Accurate and Ramshot product pages carry real bulk densities — 31 powders gained published values.
  • Nobel Sport Italia publishes for part of the Vectan range — 3 more, plus one Hodgdon value (High Gun) that lives in an article on Hodgdon’s own site.
  • Hodgdon, IMR, Winchester and Alliant publish nothing. Every accessible Hodgdon annual manual, basic manual and burn-rate chart back to 2010 was opened: rank-only, no densities. Alliant’s own SDS sheets say “Not available”. The widely-mirrored “Burn Rate / VMD chart” that every forum links? Its own footer says it was compiled from vendor websites and user comments in 2007. It is a community artifact, not manufacturer data, and it does not meet our bar.

So: 35 powders now carry maker-published densities (96 → 131), and for 102 we can tell you honestly that no published figure exists — the case-fill readout for those says “estimated”, and now we know it must. A verified absence is also data.

What we tried and refused to ship

The referee gets pointed at our own ideas too. Two of them died this release, in the open:

  • A “smarter” smoothing estimator. Replacing exact chart interpolation with robust local regression looked elegant and measured worse — it blurs real curvature in the well-anchored rifle regions (rifle p90 went 17.1% → 18.6%). We kept the screen, kept the exact interpolation, and rejected the smoothing.
  • A case-fill correction for the pistol model. The residual pistol error looks fill-dependent — until you measure it. Within-powder slopes split 12 negative to 9 positive, within-cartridge the same both ways. No function of fill can carry both signs; it would trade half the corpus against the other half. Not built, and the measurement is recorded in the code so nobody “discovers” this idea again in six months.

An idea that dies in measurement costs a day. An idea that ships without one costs users.

Where the numbers stand

The accuracy page is regenerated from the shipped catalog, as always — 910 published loads, split honestly into in-sample (the data the fits saw) and out-of-sample (genuine predictions). Out-of-sample now stands at 7.9% mean error over 215 rows — more rows and harder rows than the 81 we reported last time, because most of what the corpus gained was exactly the difficult pistol data. The in-sample numbers stay flattering (2.9%), and the page still tells you why you should care about the other number.