NLL

Struct NLL 

Source
pub struct NLL {
    pub data_evaluator: Evaluator,
    pub accmc_evaluator: Evaluator,
}
Expand description

An extended, unbinned negative log-likelihood evaluator.

Fields§

§data_evaluator: Evaluator

The internal Evaluator for data

§accmc_evaluator: Evaluator

The internal Evaluator for accepted Monte Carlo

Implementations§

Source§

impl NLL

Source

pub fn minimize( &self, settings: MinimizationSettings<Self>, ) -> Result<MinimizationSummary, LadduError>

Minimize the NLL with the algorithm given in the MinimizationSettings.

§Errors

This method may return an error if there was any problem constructing thread pools or evaluating the underlying model.

Source

pub fn mcmc( &self, settings: MCMCSettings<Self>, ) -> Result<MCMCSummary, LadduError>

Run an MCMC sampling algorithm over the NLL with the given MCMCSettings.

§Errors

This method may return an error if there was any problem constructing thread pools or evaluating the underlying model.

Source§

impl NLL

Source

pub fn new( model: &Model, ds_data: &Arc<Dataset>, ds_accmc: &Arc<Dataset>, ) -> Box<Self>

Construct an NLL from a Model and two Datasets (data and Monte Carlo). This is the equivalent of the Model::load method, but for two Datasets and a different method of evaluation.

Source

pub fn to_stochastic( &self, batch_size: usize, seed: Option<usize>, ) -> StochasticNLL

Create a new StochasticNLL from this NLL.

Source

pub fn activate<T: AsRef<str>>(&self, name: T) -> Result<(), LadduError>

Activate an Amplitude by name.

Source

pub fn activate_many<T: AsRef<str>>( &self, names: &[T], ) -> Result<(), LadduError>

Activate several Amplitudes by name.

Source

pub fn activate_all(&self)

Activate all registered Amplitudes.

Source

pub fn deactivate<T: AsRef<str>>(&self, name: T) -> Result<(), LadduError>

Dectivate an Amplitude by name.

Source

pub fn deactivate_many<T: AsRef<str>>( &self, names: &[T], ) -> Result<(), LadduError>

Deactivate several Amplitudes by name.

Source

pub fn deactivate_all(&self)

Deactivate all registered Amplitudes.

Source

pub fn isolate<T: AsRef<str>>(&self, name: T) -> Result<(), LadduError>

Isolate an Amplitude by name (deactivate the rest).

Source

pub fn isolate_many<T: AsRef<str>>(&self, names: &[T]) -> Result<(), LadduError>

Isolate several Amplitudes by name (deactivate the rest).

Source

pub fn project_local( &self, parameters: &[Float], mc_evaluator: Option<Evaluator>, ) -> Vec<Float>

Project the stored Model over the events in the Dataset stored by the Evaluator with the given values for free parameters to obtain weights for each Monte-Carlo event (non-MPI version).

§Notes

This method is not intended to be called in analyses but rather in writing methods that have mpi-feature-gated versions. Most users will want to call NLL::project instead.

Source

pub fn project( &self, parameters: &[Float], mc_evaluator: Option<Evaluator>, ) -> Vec<Float>

Project the stored Model over the events in the Dataset stored by the Evaluator with the given values for free parameters to obtain weights for each Monte-Carlo event. This method takes the real part of the given expression (discarding the imaginary part entirely, which does not matter if expressions are coherent sums wrapped in Expression::norm_sqr. Event weights are determined by the following formula:

\text{weight}(\vec{p}; e) = \text{weight}(e) \mathcal{L}(e) / N_{\text{MC}}

Note that $N_{\text{MC}}$ will always be the number of accepted Monte Carlo events, regardless of the mc_evaluator.

Source

pub fn project_gradient_local( &self, parameters: &[Float], mc_evaluator: Option<Evaluator>, ) -> (Vec<Float>, Vec<DVector<Float>>)

Project the stored Model over the events in the Dataset stored by the Evaluator with the given values for free parameters to obtain weights and gradients of those weights for each Monte-Carlo event (non-MPI version).

§Notes

This method is not intended to be called in analyses but rather in writing methods that have mpi-feature-gated versions. Most users will want to call NLL::project_gradient instead.

Source

pub fn project_gradient( &self, parameters: &[Float], mc_evaluator: Option<Evaluator>, ) -> (Vec<Float>, Vec<DVector<Float>>)

Project the stored Model over the events in the Dataset stored by the Evaluator with the given values for free parameters to obtain weights and gradients of those weights for each Monte-Carlo event. This method takes the real part of the given expression (discarding the imaginary part entirely, which does not matter if expressions are coherent sums wrapped in Expression::norm_sqr. Event weights are determined by the following formula:

\text{weight}(\vec{p}; e) = \text{weight}(e) \mathcal{L}(e) / N_{\text{MC}}

Note that $N_{\text{MC}}$ will always be the number of accepted Monte Carlo events, regardless of the mc_evaluator.

Source

pub fn project_with_local<T: AsRef<str>>( &self, parameters: &[Float], names: &[T], mc_evaluator: Option<Evaluator>, ) -> Result<Vec<Float>, LadduError>

Project the stored Model over the events in the Dataset stored by the Evaluator with the given values for free parameters to obtain weights for each Monte-Carlo event. This method differs from the standard NLL::project in that it first isolates the selected Amplitudes by name, but returns the NLL to its prior state after calculation (non-MPI version).

§Notes

This method is not intended to be called in analyses but rather in writing methods that have mpi-feature-gated versions. Most users will want to call NLL::project_with instead.

Source

pub fn project_with<T: AsRef<str>>( &self, parameters: &[Float], names: &[T], mc_evaluator: Option<Evaluator>, ) -> Result<Vec<Float>, LadduError>

Project the stored Model over the events in the Dataset stored by the Evaluator with the given values for free parameters to obtain weights for each Monte-Carlo event. This method differs from the standard NLL::project in that it first isolates the selected Amplitudes by name, but returns the NLL to its prior state after calculation.

This method takes the real part of the given expression (discarding the imaginary part entirely, which does not matter if expressions are coherent sums wrapped in Expression::norm_sqr. Event weights are determined by the following formula:

\text{weight}(\vec{p}; e) = \text{weight}(e) \mathcal{L}(e) / N_{\text{MC}}

Note that $N_{\text{MC}}$ will always be the number of accepted Monte Carlo events, regardless of the mc_evaluator.

Source

pub fn project_gradient_with_local<T: AsRef<str>>( &self, parameters: &[Float], names: &[T], mc_evaluator: Option<Evaluator>, ) -> Result<(Vec<Float>, Vec<DVector<Float>>), LadduError>

Project the stored Model over the events in the Dataset stored by the Evaluator with the given values for free parameters to obtain weights and gradients of those weights for each Monte-Carlo event. This method differs from the standard NLL::project_gradient in that it first isolates the selected Amplitudes by name, but returns the NLL to its prior state after calculation (non-MPI version).

§Notes

This method is not intended to be called in analyses but rather in writing methods that have mpi-feature-gated versions. Most users will want to call NLL::project_with instead.

Source

pub fn project_gradient_with<T: AsRef<str>>( &self, parameters: &[Float], names: &[T], mc_evaluator: Option<Evaluator>, ) -> Result<(Vec<Float>, Vec<DVector<Float>>), LadduError>

Project the stored Model over the events in the Dataset stored by the Evaluator with the given values for free parameters to obtain weights and gradients of those weights for each Monte-Carlo event. This method differs from the standard NLL::project_gradient in that it first isolates the selected Amplitudes by name, but returns the NLL to its prior state after calculation.

This method takes the real part of the given expression (discarding the imaginary part entirely, which does not matter if expressions are coherent sums wrapped in Expression::norm_sqr. Event weights are determined by the following formula:

\text{weight}(\vec{p}; e) = \text{weight}(e) \mathcal{L}(e) / N_{\text{MC}}

Note that $N_{\text{MC}}$ will always be the number of accepted Monte Carlo events, regardless of the mc_evaluator.

Trait Implementations§

Source§

impl Clone for NLL

Source§

fn clone(&self) -> NLL

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 CostFunction<MaybeThreadPool, LadduError> for NLL

Source§

fn evaluate( &self, parameters: &DVector<Float>, args: &MaybeThreadPool, ) -> Result<Float, LadduError>

The evaluation of the function at a point x with the given arguments/user data. Read more
Source§

impl Gradient<MaybeThreadPool, LadduError> for NLL

Source§

fn gradient( &self, parameters: &DVector<Float>, args: &MaybeThreadPool, ) -> Result<DVector<Float>, LadduError>

The evaluation of the gradient at a point x with the given arguments/user data. Read more
Source§

fn hessian( &self, x: &Matrix<f64, Dyn, Const<1>, VecStorage<f64, Dyn, Const<1>>>, args: &U, ) -> Result<Matrix<f64, Dyn, Dyn, VecStorage<f64, Dyn, Dyn>>, E>

The evaluation of the hessian at a point x with the given arguments/user data. Read more
Source§

impl LikelihoodTerm for NLL

Source§

fn parameters(&self) -> Vec<String>

Get the list of parameter names in the order they appear in the NLL::evaluate method.

Source§

fn evaluate(&self, parameters: &[Float]) -> Float

Evaluate the stored Model over the events in the Dataset stored by the Evaluator with the given values for free parameters. This method takes the real part of the given expression (discarding the imaginary part entirely, which does not matter if expressions are coherent sums wrapped in Expression::norm_sqr. The result is given by the following formula:

NLL(\vec{p}) = -2 \left(\sum_{e \in \text{Data}} \text{weight}(e) \ln(\mathcal{L}(e)) - \frac{1}{N_{\text{MC}_A}} \sum_{e \in \text{MC}_A} \text{weight}(e) \mathcal{L}(e) \right)
Source§

fn evaluate_gradient(&self, parameters: &[Float]) -> DVector<Float>

Evaluate the gradient of the stored Model over the events in the Dataset stored by the Evaluator with the given values for free parameters. This method takes the real part of the given expression (discarding the imaginary part entirely, which does not matter if expressions are coherent sums wrapped in Expression::norm_sqr.

Source§

fn update(&self)

A method called every step of any minimization/MCMC algorithm.
Source§

impl LogDensity<MaybeThreadPool, LadduError> for NLL

Source§

fn log_density( &self, parameters: &DVector<Float>, args: &MaybeThreadPool, ) -> Result<Float, LadduError>

The log of the evaluation of the density function at a point x with the given arguments/user data. Read more

Auto Trait Implementations§

§

impl Freeze for NLL

§

impl !RefUnwindSafe for NLL

§

impl Send for NLL

§

impl Sync for NLL

§

impl Unpin for NLL

§

impl !UnwindSafe for NLL

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> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

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

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
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> TransformExt for T

Source§

fn compose<T2>(self, t2: T2) -> Compose<Self, T2>

Compose a transform with another. 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.