Skip to main content

ResolutionFunction

Enum ResolutionFunction 

Source
pub enum ResolutionFunction {
    Gaussian(ResolutionParams),
    Tabulated(Arc<TabulatedResolution>),
    IkedaCarpenter(Arc<IkedaCarpenter>),
}
Expand description

Resolution function: analytical Gaussian, tabulated from Monte Carlo, or analytical Ikeda–Carpenter moderator model.

The Tabulated and IkedaCarpenter variants wrap an Arc so that cloning (e.g., per-pixel in spatial mapping) is a cheap reference-count bump rather than a deep copy.

IkedaCarpenter synthesizes a TabulatedResolution at construction and is applied through the same per-call convolution path as Tabulated (broaden / broaden_presorted / plan) — only the kernel source differs (analytic IC pulse vs Monte-Carlo file). This keeps the three-way resolution cross-validation (Gaussian | tabulated-UDR | Ikeda–Carpenter) fair on the reference broadening path. Note: IkedaCarpenter does not opt into the spatial-map surrogate fast-paths (the scalar/cubature plans gate on Tabulated); it falls back to the general path, which is correct but unoptimized — see the resolution-calibration notes for the W6 follow-up.

Variants§

§

Gaussian(ResolutionParams)

Analytical Gaussian resolution from instrument parameters.

§

Tabulated(Arc<TabulatedResolution>)

Tabulated resolution from Monte Carlo instrument simulation.

§

IkedaCarpenter(Arc<IkedaCarpenter>)

Analytical Ikeda–Carpenter moderator resolution model.

Implementations§

Source§

impl ResolutionFunction

Source

pub fn grid_bounds_ev(&self, energies: &[f64]) -> (f64, f64)

The energies a working grid for the data window energies has to span, as (low, high) in eV with low ≤ e_min and high ≥ e_max: SAMMY’s Wdsint limits at the two ends for a Gaussian, the extremes of TabulatedResolution::gather_bounds_ev over the grid for a sampled kernel. Returns (0.0, 0.0) for an empty grid.

Source

pub fn flight_path_m(&self) -> f64

Flight path used to map true neutron energy to detector time.

Source

pub fn with_flight_path( &self, flight_path_m: f64, ) -> Result<Self, ResolutionParseError>

The same resolution function read against a different flight path.

A fit that frees L_scale evaluates the theory on an energy grid built with L·L_scale. The kernel has to be read against the same flight path or its width is wrong by that factor — on every family, since all three convert between energy and detector time through L. No variant resynthesizes: the flight path is not part of what the kernel IS, only of the map it is applied through.

§Errors

Returns ResolutionParseError::InvalidFormat if flight_path_m is not positive and finite.

Source

pub fn detector_bin_probabilities( &self, true_energy_ev: f64, detector_time_edges_us: &[f64], timing_offset_us: f64, ) -> Result<Vec<f64>, ResolutionParseError>

Probability that one neutron of known true energy is recorded in each supplied detector-time bin.

The tabulated and Ikeda–Carpenter variants are evaluated directly in detector time. In particular, the analytical IC variant does not pass through its legacy synthesized TabulatedResolution broadening table. The older Gaussian energy-broadening model has no physical detector-time probability law and is therefore rejected rather than silently treated as one.

timing_offset_us is convention-dependent and NOT transferable between variants: a mode-centred tabulated (UDR) kernel places its pulse mode at the nominal arrival, so the offset must absorb the calibrated moderator mean delay, while the causal Ikeda–Carpenter pulse rises from the nominal arrival onward and its offset is a pure clock/detector shift. Swapping response models under one calibrated offset shifts every bin systematically.

Trait Implementations§

Source§

impl Clone for ResolutionFunction

Source§

fn clone(&self) -> ResolutionFunction

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ResolutionFunction

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more