[][src]Trait ndhistogram::axis::Axis

pub trait Axis {
    type Coordinate;
    type BinInterval;
    pub fn index(&self, coordinate: &Self::Coordinate) -> Option<usize>;
pub fn numbins(&self) -> usize;
pub fn bin(&self, index: usize) -> Option<Self::BinInterval>; pub fn indices(&self) -> Box<dyn Iterator<Item = usize>> { ... }
pub fn iter(
        &self
    ) -> Box<dyn Iterator<Item = (usize, Self::BinInterval)> + '_> { ... }
pub fn bins(&self) -> Box<dyn Iterator<Item = Self::BinInterval> + '_> { ... } }

An binned axis coresponding to one dimension of an N-dimensional Histogram.1

An Axis is composed of a map from some coordinate space to linear bin number, and the inverse map. For examples see Uniform, UniformNoFlow, Category and CategoryNoFlow. Most use cases should be covered by the builtin Axis implementations. However, you may implement the Axis trait if you have specialist needs.

Examples

Parity Axis

Imagine we wanted a

use ndhistogram::axis::Axis;
use ndhistogram::{ndhistogram, Histogram};
enum Parity {
    Even,
    Odd
}

struct ParityAxis {}

impl Axis for ParityAxis {
    type Coordinate = i32;

    type BinInterval = Parity;

    fn index(&self, coordinate: &Self::Coordinate) -> Option<usize> {
        if coordinate % 2 == 0 { Some(0) } else { Some(1) }
    }

   fn numbins(&self) -> usize {
        2
    }

   fn bin(&self, index: usize) -> Option<Self::BinInterval> {
        if index == 0 { Some(Parity::Even) } else { Some(Parity::Odd) }
    }
}

let mut hist = ndhistogram!(ParityAxis{}; i32);
hist.fill(&1);
hist.fill_weight(&2, 4);
assert_eq!(hist.value(&1), Some(&1));
assert_eq!(hist.value(&2), Some(&4));

Associated Types

type Coordinate[src]

The type representing a location on this axis.

type BinInterval[src]

The type of an interval representing the set of Coordinates that correspond to a histogram bin

Loading content...

Required methods

pub fn index(&self, coordinate: &Self::Coordinate) -> Option<usize>[src]

Map from coordinate to bin number. Returns an option as not all valid coordinates are necessarily contained within a bin.

pub fn numbins(&self) -> usize[src]

The number of bins in this axis, including underflow and overflow.

pub fn bin(&self, index: usize) -> Option<Self::BinInterval>[src]

Map from bin number to axis to the interval covering the range of coordinates that this bin contains. Returns an option in case an index >= Axis::numbins is given.

Loading content...

Provided methods

pub fn indices(&self) -> Box<dyn Iterator<Item = usize>>[src]

An iterator over bin numbers

pub fn iter(&self) -> Box<dyn Iterator<Item = (usize, Self::BinInterval)> + '_>[src]

An iterator over bin numbers and bin intervals

pub fn bins(&self) -> Box<dyn Iterator<Item = Self::BinInterval> + '_>[src]

An iterator over bin intervals.

Loading content...

Implementations on Foreign Types

impl<X: Axis, Y: Axis, Z: Axis, T: Axis, D4: Axis, D5: Axis, D6: Axis, D7: Axis, D8: Axis, D9: Axis, D10: Axis, D11: Axis, D12: Axis, D13: Axis, D14: Axis, D15: Axis, D16: Axis, D17: Axis, D18: Axis, D19: Axis, D20: Axis> Axis for (X, Y, Z, T, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20)[src]

type Coordinate = (X::Coordinate, Y::Coordinate, Z::Coordinate, T::Coordinate, D4::Coordinate, D5::Coordinate, D6::Coordinate, D7::Coordinate, D8::Coordinate, D9::Coordinate, D10::Coordinate, D11::Coordinate, D12::Coordinate, D13::Coordinate, D14::Coordinate, D15::Coordinate, D16::Coordinate, D17::Coordinate, D18::Coordinate, D19::Coordinate, D20::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval, Z::BinInterval, T::BinInterval, D4::BinInterval, D5::BinInterval, D6::BinInterval, D7::BinInterval, D8::BinInterval, D9::BinInterval, D10::BinInterval, D11::BinInterval, D12::BinInterval, D13::BinInterval, D14::BinInterval, D15::BinInterval, D16::BinInterval, D17::BinInterval, D18::BinInterval, D19::BinInterval, D20::BinInterval)

impl<X: Axis, Y: Axis, Z: Axis, T: Axis, D4: Axis, D5: Axis, D6: Axis, D7: Axis, D8: Axis, D9: Axis, D10: Axis, D11: Axis, D12: Axis, D13: Axis, D14: Axis, D15: Axis, D16: Axis, D17: Axis, D18: Axis, D19: Axis> Axis for (X, Y, Z, T, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19)[src]

type Coordinate = (X::Coordinate, Y::Coordinate, Z::Coordinate, T::Coordinate, D4::Coordinate, D5::Coordinate, D6::Coordinate, D7::Coordinate, D8::Coordinate, D9::Coordinate, D10::Coordinate, D11::Coordinate, D12::Coordinate, D13::Coordinate, D14::Coordinate, D15::Coordinate, D16::Coordinate, D17::Coordinate, D18::Coordinate, D19::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval, Z::BinInterval, T::BinInterval, D4::BinInterval, D5::BinInterval, D6::BinInterval, D7::BinInterval, D8::BinInterval, D9::BinInterval, D10::BinInterval, D11::BinInterval, D12::BinInterval, D13::BinInterval, D14::BinInterval, D15::BinInterval, D16::BinInterval, D17::BinInterval, D18::BinInterval, D19::BinInterval)

impl<X: Axis, Y: Axis, Z: Axis, T: Axis, D4: Axis, D5: Axis, D6: Axis, D7: Axis, D8: Axis, D9: Axis, D10: Axis, D11: Axis, D12: Axis, D13: Axis, D14: Axis, D15: Axis, D16: Axis, D17: Axis, D18: Axis> Axis for (X, Y, Z, T, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15, D16, D17, D18)[src]

type Coordinate = (X::Coordinate, Y::Coordinate, Z::Coordinate, T::Coordinate, D4::Coordinate, D5::Coordinate, D6::Coordinate, D7::Coordinate, D8::Coordinate, D9::Coordinate, D10::Coordinate, D11::Coordinate, D12::Coordinate, D13::Coordinate, D14::Coordinate, D15::Coordinate, D16::Coordinate, D17::Coordinate, D18::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval, Z::BinInterval, T::BinInterval, D4::BinInterval, D5::BinInterval, D6::BinInterval, D7::BinInterval, D8::BinInterval, D9::BinInterval, D10::BinInterval, D11::BinInterval, D12::BinInterval, D13::BinInterval, D14::BinInterval, D15::BinInterval, D16::BinInterval, D17::BinInterval, D18::BinInterval)

impl<X: Axis, Y: Axis, Z: Axis, T: Axis, D4: Axis, D5: Axis, D6: Axis, D7: Axis, D8: Axis, D9: Axis, D10: Axis, D11: Axis, D12: Axis, D13: Axis, D14: Axis, D15: Axis, D16: Axis, D17: Axis> Axis for (X, Y, Z, T, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15, D16, D17)[src]

type Coordinate = (X::Coordinate, Y::Coordinate, Z::Coordinate, T::Coordinate, D4::Coordinate, D5::Coordinate, D6::Coordinate, D7::Coordinate, D8::Coordinate, D9::Coordinate, D10::Coordinate, D11::Coordinate, D12::Coordinate, D13::Coordinate, D14::Coordinate, D15::Coordinate, D16::Coordinate, D17::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval, Z::BinInterval, T::BinInterval, D4::BinInterval, D5::BinInterval, D6::BinInterval, D7::BinInterval, D8::BinInterval, D9::BinInterval, D10::BinInterval, D11::BinInterval, D12::BinInterval, D13::BinInterval, D14::BinInterval, D15::BinInterval, D16::BinInterval, D17::BinInterval)

impl<X: Axis, Y: Axis, Z: Axis, T: Axis, D4: Axis, D5: Axis, D6: Axis, D7: Axis, D8: Axis, D9: Axis, D10: Axis, D11: Axis, D12: Axis, D13: Axis, D14: Axis, D15: Axis, D16: Axis> Axis for (X, Y, Z, T, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15, D16)[src]

type Coordinate = (X::Coordinate, Y::Coordinate, Z::Coordinate, T::Coordinate, D4::Coordinate, D5::Coordinate, D6::Coordinate, D7::Coordinate, D8::Coordinate, D9::Coordinate, D10::Coordinate, D11::Coordinate, D12::Coordinate, D13::Coordinate, D14::Coordinate, D15::Coordinate, D16::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval, Z::BinInterval, T::BinInterval, D4::BinInterval, D5::BinInterval, D6::BinInterval, D7::BinInterval, D8::BinInterval, D9::BinInterval, D10::BinInterval, D11::BinInterval, D12::BinInterval, D13::BinInterval, D14::BinInterval, D15::BinInterval, D16::BinInterval)

impl<X: Axis, Y: Axis, Z: Axis, T: Axis, D4: Axis, D5: Axis, D6: Axis, D7: Axis, D8: Axis, D9: Axis, D10: Axis, D11: Axis, D12: Axis, D13: Axis, D14: Axis, D15: Axis> Axis for (X, Y, Z, T, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15)[src]

type Coordinate = (X::Coordinate, Y::Coordinate, Z::Coordinate, T::Coordinate, D4::Coordinate, D5::Coordinate, D6::Coordinate, D7::Coordinate, D8::Coordinate, D9::Coordinate, D10::Coordinate, D11::Coordinate, D12::Coordinate, D13::Coordinate, D14::Coordinate, D15::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval, Z::BinInterval, T::BinInterval, D4::BinInterval, D5::BinInterval, D6::BinInterval, D7::BinInterval, D8::BinInterval, D9::BinInterval, D10::BinInterval, D11::BinInterval, D12::BinInterval, D13::BinInterval, D14::BinInterval, D15::BinInterval)

impl<X: Axis, Y: Axis, Z: Axis, T: Axis, D4: Axis, D5: Axis, D6: Axis, D7: Axis, D8: Axis, D9: Axis, D10: Axis, D11: Axis, D12: Axis, D13: Axis, D14: Axis> Axis for (X, Y, Z, T, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14)[src]

type Coordinate = (X::Coordinate, Y::Coordinate, Z::Coordinate, T::Coordinate, D4::Coordinate, D5::Coordinate, D6::Coordinate, D7::Coordinate, D8::Coordinate, D9::Coordinate, D10::Coordinate, D11::Coordinate, D12::Coordinate, D13::Coordinate, D14::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval, Z::BinInterval, T::BinInterval, D4::BinInterval, D5::BinInterval, D6::BinInterval, D7::BinInterval, D8::BinInterval, D9::BinInterval, D10::BinInterval, D11::BinInterval, D12::BinInterval, D13::BinInterval, D14::BinInterval)

impl<X: Axis, Y: Axis, Z: Axis, T: Axis, D4: Axis, D5: Axis, D6: Axis, D7: Axis, D8: Axis, D9: Axis, D10: Axis, D11: Axis, D12: Axis, D13: Axis> Axis for (X, Y, Z, T, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13)[src]

type Coordinate = (X::Coordinate, Y::Coordinate, Z::Coordinate, T::Coordinate, D4::Coordinate, D5::Coordinate, D6::Coordinate, D7::Coordinate, D8::Coordinate, D9::Coordinate, D10::Coordinate, D11::Coordinate, D12::Coordinate, D13::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval, Z::BinInterval, T::BinInterval, D4::BinInterval, D5::BinInterval, D6::BinInterval, D7::BinInterval, D8::BinInterval, D9::BinInterval, D10::BinInterval, D11::BinInterval, D12::BinInterval, D13::BinInterval)

impl<X: Axis, Y: Axis, Z: Axis, T: Axis, D4: Axis, D5: Axis, D6: Axis, D7: Axis, D8: Axis, D9: Axis, D10: Axis, D11: Axis, D12: Axis> Axis for (X, Y, Z, T, D4, D5, D6, D7, D8, D9, D10, D11, D12)[src]

type Coordinate = (X::Coordinate, Y::Coordinate, Z::Coordinate, T::Coordinate, D4::Coordinate, D5::Coordinate, D6::Coordinate, D7::Coordinate, D8::Coordinate, D9::Coordinate, D10::Coordinate, D11::Coordinate, D12::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval, Z::BinInterval, T::BinInterval, D4::BinInterval, D5::BinInterval, D6::BinInterval, D7::BinInterval, D8::BinInterval, D9::BinInterval, D10::BinInterval, D11::BinInterval, D12::BinInterval)

impl<X: Axis, Y: Axis, Z: Axis, T: Axis, D4: Axis, D5: Axis, D6: Axis, D7: Axis, D8: Axis, D9: Axis, D10: Axis, D11: Axis> Axis for (X, Y, Z, T, D4, D5, D6, D7, D8, D9, D10, D11)[src]

type Coordinate = (X::Coordinate, Y::Coordinate, Z::Coordinate, T::Coordinate, D4::Coordinate, D5::Coordinate, D6::Coordinate, D7::Coordinate, D8::Coordinate, D9::Coordinate, D10::Coordinate, D11::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval, Z::BinInterval, T::BinInterval, D4::BinInterval, D5::BinInterval, D6::BinInterval, D7::BinInterval, D8::BinInterval, D9::BinInterval, D10::BinInterval, D11::BinInterval)

impl<X: Axis, Y: Axis, Z: Axis, T: Axis, D4: Axis, D5: Axis, D6: Axis, D7: Axis, D8: Axis, D9: Axis, D10: Axis> Axis for (X, Y, Z, T, D4, D5, D6, D7, D8, D9, D10)[src]

type Coordinate = (X::Coordinate, Y::Coordinate, Z::Coordinate, T::Coordinate, D4::Coordinate, D5::Coordinate, D6::Coordinate, D7::Coordinate, D8::Coordinate, D9::Coordinate, D10::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval, Z::BinInterval, T::BinInterval, D4::BinInterval, D5::BinInterval, D6::BinInterval, D7::BinInterval, D8::BinInterval, D9::BinInterval, D10::BinInterval)

impl<X: Axis, Y: Axis, Z: Axis, T: Axis, D4: Axis, D5: Axis, D6: Axis, D7: Axis, D8: Axis, D9: Axis> Axis for (X, Y, Z, T, D4, D5, D6, D7, D8, D9)[src]

type Coordinate = (X::Coordinate, Y::Coordinate, Z::Coordinate, T::Coordinate, D4::Coordinate, D5::Coordinate, D6::Coordinate, D7::Coordinate, D8::Coordinate, D9::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval, Z::BinInterval, T::BinInterval, D4::BinInterval, D5::BinInterval, D6::BinInterval, D7::BinInterval, D8::BinInterval, D9::BinInterval)

impl<X: Axis, Y: Axis, Z: Axis, T: Axis, D4: Axis, D5: Axis, D6: Axis, D7: Axis, D8: Axis> Axis for (X, Y, Z, T, D4, D5, D6, D7, D8)[src]

type Coordinate = (X::Coordinate, Y::Coordinate, Z::Coordinate, T::Coordinate, D4::Coordinate, D5::Coordinate, D6::Coordinate, D7::Coordinate, D8::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval, Z::BinInterval, T::BinInterval, D4::BinInterval, D5::BinInterval, D6::BinInterval, D7::BinInterval, D8::BinInterval)

impl<X: Axis, Y: Axis, Z: Axis, T: Axis, D4: Axis, D5: Axis, D6: Axis, D7: Axis> Axis for (X, Y, Z, T, D4, D5, D6, D7)[src]

type Coordinate = (X::Coordinate, Y::Coordinate, Z::Coordinate, T::Coordinate, D4::Coordinate, D5::Coordinate, D6::Coordinate, D7::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval, Z::BinInterval, T::BinInterval, D4::BinInterval, D5::BinInterval, D6::BinInterval, D7::BinInterval)

impl<X: Axis, Y: Axis, Z: Axis, T: Axis, D4: Axis, D5: Axis, D6: Axis> Axis for (X, Y, Z, T, D4, D5, D6)[src]

type Coordinate = (X::Coordinate, Y::Coordinate, Z::Coordinate, T::Coordinate, D4::Coordinate, D5::Coordinate, D6::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval, Z::BinInterval, T::BinInterval, D4::BinInterval, D5::BinInterval, D6::BinInterval)

impl<X: Axis, Y: Axis, Z: Axis, T: Axis, D4: Axis, D5: Axis> Axis for (X, Y, Z, T, D4, D5)[src]

type Coordinate = (X::Coordinate, Y::Coordinate, Z::Coordinate, T::Coordinate, D4::Coordinate, D5::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval, Z::BinInterval, T::BinInterval, D4::BinInterval, D5::BinInterval)

impl<X: Axis, Y: Axis, Z: Axis, T: Axis, D4: Axis> Axis for (X, Y, Z, T, D4)[src]

type Coordinate = (X::Coordinate, Y::Coordinate, Z::Coordinate, T::Coordinate, D4::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval, Z::BinInterval, T::BinInterval, D4::BinInterval)

impl<X: Axis, Y: Axis, Z: Axis, T: Axis> Axis for (X, Y, Z, T)[src]

type Coordinate = (X::Coordinate, Y::Coordinate, Z::Coordinate, T::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval, Z::BinInterval, T::BinInterval)

impl<X: Axis, Y: Axis, Z: Axis> Axis for (X, Y, Z)[src]

type Coordinate = (X::Coordinate, Y::Coordinate, Z::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval, Z::BinInterval)

impl<X: Axis, Y: Axis> Axis for (X, Y)[src]

type Coordinate = (X::Coordinate, Y::Coordinate)

type BinInterval = (X::BinInterval, Y::BinInterval)

impl<X: Axis> Axis for (X,)[src]

type Coordinate = X::Coordinate

type BinInterval = X::BinInterval

Loading content...

Implementors

impl<T> Axis for Variable<T> where
    T: PartialOrd + Copy
[src]

type Coordinate = T

type BinInterval = BinInterval<T>

impl<T: PartialOrd + Copy> Axis for VariableNoFlow<T>[src]

type Coordinate = T

type BinInterval = BinInterval<T>

impl<T: Float> Axis for Uniform<T>[src]

type Coordinate = T

type BinInterval = BinInterval<T>

impl<T: Float> Axis for UniformNoFlow<T>[src]

type Coordinate = T

type BinInterval = BinInterval<T>

impl<T: Value> Axis for Category<T>[src]

type Coordinate = T

type BinInterval = SingleValueBinInterval<T>

impl<T: Value> Axis for CategoryNoFlow<T>[src]

type Coordinate = T

type BinInterval = SingleValueBinInterval<T>

Loading content...