doseunif op• Data kinds: signal × signal × scalar × scalar → table
• Call: import fullseye as fs; fs.ledger.grind_time_for_dose_cv(t, d63, dose_mg: 'float', density: 'float', target_cv: 'float | None' = None, pass_probability: 'float | None' = None, law: 'str' = 'best', k_accept: 'float' = 2.4, limit_av: 'float' = 15.0, n_units: 'int' = 10, ref_range=(98.5, 101.5), n_mc: 'int' = 20000, seed: 'int' = 0) -> 'dict' (to call the implementation directly, import doseunif; doseunif.grind_time_for_dose_cv(t, d63, dose_mg: 'float', density: 'float', target_cv: 'float | None' = None, pass_probability: 'float | None' = None, law: 'str' = 'best', k_accept: 'float' = 2.4, limit_av: 'float' = 15.0, n_units: 'int' = 10, ref_range=(98.5, 101.5), n_mc: 'int' = 20000, seed: 'int' = 0) -> 'dict'; from the registry, opsdrive.get("grind_time_for_dose_cv"))
Fits a comminution law to the time course of the moment diameter D63 and back-calculates the grinding time needed for the content CV to fall to the target.
t: grinding time (a stand-in for energy, the convention of grind), d63: D63 at that time [µm] (d63 of dose_cv_from_sizes. D63 rather than D50 is used because the CV is determined by D63 alone and needs no assumption about the shape of the distribution —— fitting the comminution law to D63 is an assumption, just as fitting it to D50 would be).
Target: target_cv directly, or from pass_probability = probability of passing the first stage of 10 units (closed form via χ², an upper bound that ignores the mean offset) CV = (L1/k) √((n−1)/χ²_p(n−1)) / 100. If neither is given, L1/k/100 (= 0.0625, a rule of thumb "equivalent to AV ≤ 15", roughly half pass). The required D63 is (CV² D / c)^{1/3} (Poisson, c = πρ/6). The time is computed with all 3 laws (kick / bond / rittinger); law="best" picks the law with the smallest log rms, passing a name uses that law. The differences between laws are in t_req_by_law and t_req_spread (read as model uncertainty).
Returns: t_req, law, d63_req, target_cv, t_req_by_law, t_req_spread (min, max), extrapolated (t_req beyond the measured range) / extrap_ratio, already_met (already at or below target at the first point), cv_observed (CV at each point), pass_probability_chi2 (upper bound at the target CV) / pass_probability_mc (Monte Carlo including the mean-offset term, normal approximation), fits (summary of grind.comminution_law_fit). Raises ValueError: fewer than 3 points, non-positive values, length mismatch, both target and pass_probability, probability or CV out of range, misspelling.
• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).
• Operator provenance and references — the sources of the research/methods this op family came from.
• The canonical algorithm (author, year) and its uses are named in the family usage guide above.
• poc_dose_uniformity_from_grinding — py -3.11 examples/poc_dose_uniformity_from_grinding.py
table as input)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
doseunif)dose_cv_lognormal · dose_cv_from_sizes
*Provenance: doseunif.py — DRIVE operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.