Skip to main content

FlightTimeGrid

Struct FlightTimeGrid 

Source
pub struct FlightTimeGrid { /* private fields */ }
Expand description

Uniform flight-time grid over a window, with the probability that each grid point’s neutrons are counted in each bin.

Implementations§

Source§

impl FlightTimeGrid

Source

pub fn new( time_edges_us: &[f64], t0_us: f64, flight_path_m: f64, pulse: &DetectorPulse, ) -> Result<Self, FlightTimeGridError>

The grid for bins time_edges_us (µs) with timing offset t0_us, flight path flight_path_m and pulse. The step, half the pulse’s shorter rise at the two ends of the flight times whose neutrons can reach the bins, is a starting step: the counts are converged once Self::halved no longer changes them. The grid extends one step beyond those flight times at each end. For a storage fraction that rises with energy, the latest arrival that sets the earliest flight time takes the fraction at its largest over the energy span.

§Errors

See FlightTimeGridError.

Source

pub fn spanning( time_edges_us: &[f64], (t0_us, last_t0_us): (f64, f64), flight_path_m: f64, pulse: &DetectorPulse, ) -> Result<Self, FlightTimeGridError>

The grid of Self::new for every timing offset from t0_us to last_t0_us: its flight times are those whose neutrons can reach the bins at either, and Self::rows are at t0_us.

§Errors

See FlightTimeGridError.

Source

pub fn covers( &self, t0_us: f64, flight_path_m: f64, params: &IkedaCarpenterParams, ) -> Result<bool, FlightTimeGridError>

Whether the grid’s points, arriving as Self::rows_at places them, cover every flight time whose neutrons can reach the bins when the timing offset is t0_us, the flight path flight_path_m and the pulse’s laws params.

§Errors

As Self::new for that timing offset, flight path and pulse.

Source§

impl FlightTimeGrid

Source

pub fn halved(&self) -> Result<Self, FlightTimeGridError>

The same window at half the step.

§Errors

As Self::new, when the halved grid exceeds MAX_POINTS.

Source

pub fn rows_at( &self, t0_us: f64, flight_path_m: f64, params: &IkedaCarpenterParams, ) -> Result<Rows, FlightTimeGridError>

The probability that each grid point’s neutrons are counted in each bin when the timing offset is t0_us, the flight path flight_path_m and the pulse’s laws params, with the step each point then stands for. Neutrons from flight times the grid does not cover there are not counted.

§Errors

FlightTimeGridError::InvalidTimingOffset or FlightTimeGridError::InvalidFlightPath unless t0_us is finite and flight_path_m finite and positive; FlightTimeGridError::Pulse if the pulse cannot be evaluated there.

Source

pub fn arrival_slopes_at( &self, t0_us: f64, flight_path_m: f64, params: &IkedaCarpenterParams, ) -> Result<Rows, FlightTimeGridError>

The derivative of Self::rows_at’s probabilities with respect to each point’s arrival time, per µs, with the same step.

§Errors

As Self::rows_at.

Source

pub fn pulse_slopes_at( &self, t0_us: f64, flight_path_m: f64, params: &IkedaCarpenterParams, ) -> Result<[Rows; 4], FlightTimeGridError>

The derivatives of Self::rows_at’s probabilities with respect to α, β, R and the square of the triangle’s FWHM, each at its point’s energy, with the same step: IkedaCarpenterParams::bin_pulse_slopes_at for every point.

§Errors

As Self::rows_at.

Source

pub fn tail_slopes_at( &self, t0_us: f64, flight_path_m: f64, params: &IkedaCarpenterParams, ) -> Result<[Rows; 2], FlightTimeGridError>

The derivatives of Self::rows_at’s probabilities with respect to the detector tail’s f and τ_D, with the same step: IkedaCarpenterParams::bin_tail_slopes_at for every point.

§Errors

As Self::rows_at, and FlightTimeGridError::Pulse for a pulse without a detector tail.

Source

pub fn rows(&self) -> &Rows

The probabilities at the grid’s own timing offset, flight path and pulse.

Source

pub fn pulse(&self) -> &DetectorPulse

The pulse the grid was built at.

Source

pub fn t0_us(&self) -> f64

The timing offset in µs the grid was built at.

Source

pub fn flight_path_m(&self) -> f64

The flight path in m the grid was built at.

Source

pub fn range_us(&self) -> (f64, f64)

(u_lo, u_hi), the flight-time range in µs at the timing offset and flight path the grid was built at.

Source

pub fn step_us(&self) -> f64

The grid step in µs at the flight path the grid was built at.

Source

pub fn flight_times_us(&self) -> &[f64]

The grid’s flight times in µs, ascending.

Source

pub fn time_edges_us(&self) -> &[f64]

The time-bin edges in µs, ascending.

Source

pub fn energies_ev(&self) -> Vec<f64>

The energy, in eV, of each grid point, descending.

Source

pub fn predict(&self, values: &[f64]) -> Result<Vec<f64>, FlightTimeGridError>

step · Σ_j v_j P_k(u_j) for each bin k: the counts a beam of values[j] neutrons per µs at each grid point predicts, or, for any other per-point values, the same linear map. It differs from the trapezoid rule by half a step of the end points’ terms, where P_k is zero, or at most NEGLIGIBLE_ARRIVAL_PROBABILITY at the fast end for an unfolded pulse. Features of the values narrower than the step are not resolved.

§Errors

FlightTimeGridError::ValuesLength unless values has one entry per grid point.

Trait Implementations§

Source§

impl Clone for FlightTimeGrid

Source§

fn clone(&self) -> FlightTimeGrid

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 FlightTimeGrid

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