fairmd.lipids.quality module

Accumulate functions required for major evaluate_quality script.

TODO: add proper tests

class fairmd.lipids.quality.QualSimulation(s: System)[source]

Bases: System

static load_all_paired() list[QualSimulation][source]

Load simulations with experimental pairings.

class fairmd.lipids.quality.QualityEvaluator(simulation: QualSimulation, experiments: ExperimentCollection)[source]

Bases: ABC

Interface for quality evaluation of simulation.

abstractmethod evaluate_one() bool[source]

Evaluate quality for one simulation.

abstractmethod save_results() None[source]

Save quality evaluation results.

static prob_2_within_trustinterval(xv: ArrayLike, xerr: ArrayLike, yv: ArrayLike, yerr: ArrayLike) ArrayLike[source]

Compute the probability of two vals being a part of one distribution.

Used quality value from experimental and simulation OP data. Probability is computed using Eq. (3) [10.1038/s41467-024-45189-z].

NOTE: Computing the probability taking into account small values using scipy.special.log1p is not required if sd is above 1e-5, which is currently the case for all OP data. It is also not required if we are not going to bring values to log-scale.

Parameters:
  • xv – Experimental OP value (all float/arrays)

  • xerr – Experimental error

  • yv – Simulated OP value

  • yerr – Standard deviation from simulation

Returns:

float/ndarray

Return type:

probability value(s) or nans

class fairmd.lipids.quality.OPQualityEvaluator(simulation: QualSimulation, experiments: ExperimentCollection)[source]

Bases: QualityEvaluator

Evaluate quality of order parameter data.

evaluate_one() bool[source]

Evaluate quality for one simulation.

save_results() None[source]

Save quality evaluation results.

classmethod atomic_quality(exp_op_data: dict, sim_op_data: dict) dict[source]

Calculate quality for a molecule (times their weights in exp data).

Parameters:
  • exp_op_data – dictionary of type {op_uname: [op_value]}.

  • sim_op_data – dictionary of type {op_uname: [op_value, op_sigma, op_sd]}.

Returns:

dictionary of type {“nC nH”: quality value}.

classmethod get_fragments_coverage(fragments: dict, q_data: dict) dict[source]

Calculate the coverage in data of each fragment.

The coverage is implemented as the percent of non-nans.

Parameters:
  • fragments – Dictionary of type {fragment: lists of unames}.

  • q_data – Dictionary of type {op_uname: quality value}.

Returns:

Dictionary of type {fragment: percentage of evaluated OPs}

classmethod atomic2fragment_quality(atomic_qual_dict: dict, fragments: dict) dict[source]
classmethod fragment_quality_unite_multexp(fragment_qual_dict: dict) dict[source]

Condition fragment qualities.

The second-layer function.

Parameters:

fragment_qual_perexp – dictionary of type {expid: {fragment: quality value}}.

Returns:

dictionary of type {fragment: average quality value}.

system_quality_gather_lipids() dict[source]

Gather fragment qualities for each lipid in a system and compute system-wide quality.

Returns:

dictionary of type {macrofragment: quality} where macrofragmetn is headgroup|tails|total.

class fairmd.lipids.quality.FFQualityEvaluator(simulation: QualSimulation, experiments: ExperimentCollection)[source]

Bases: QualityEvaluator

Evaluate quality of form factor data.

evaluate_one() bool[source]

Evaluate quality for one simulation.

save_results() None[source]

Save quality evaluation results.

static calc_ff_quality(ffd_sim: ndarray, ffd_exp: ndarray) float[source]

Calculate form factor quality.

Quality calculation is performed as defined by Kučerka et al. 2010, doi:10.1007/s00232-010-9254-5

Parameters:
  • ffd_sim – Simulation FF data (float 2D list)

  • ffd_exp – Experiment FF data (float 2D list)

Returns:

Quality value.