Multiple events

MultipleEventExtractor

class apav.core.multipleevent.MultipleEventExtractor(roi, multiplicity, extents=((0, 200), (0, 200)))[source]

Handle extraction and access of multiple-event related data from an Roi

This class is responsible for extracting arbitrary multiple event data from Rois. The output is formatted in as pairs, i.e. a 6th order multiple event of the composition ABCDEF is formatted into the 15 ion pairs:

AB AC AD AE AF BC BD BE BF CD CE CF DE DF EF

The number of ion pairs generated from any nth order multiplicity can be calculated using pairs_per_multiplicity().

This class supports any multiplicity > 1, and also supports extracting the combined pairs all multiple events. For example, all of these are valid:

>>> roi = Roi.from_epos("path_to_epos_file.epos")
>>> mevents = MultipleEventExtractor(roi, multiplicity=2)  # Ion pairs from 2nd or multiple events
>>> mevents = MultipleEventExtractor(roi, multiplicity=11)  # Ion pairs from 11th or multiple events
>>> mevents = MultipleEventExtractor(roi, multiplicity="multiples")  # Ion pairs from all multiple events

The pairs can be access from

>>> mevents.pairs

More broadly, the indices of the pairs are accessed via

>>> mevents.pair_indices

Which allows for performing arbitrary analysis of multiple events on any data set attached to the Roi. For example, to form a plot of the difference in mass/charge ratio to distance between the ion pair in detector coordinates (to look at orientational properties of molecular dissociation):

>>> roi = Roi.from_epos("path_to_epos_file.epos")
>>> mevents = MultipleEventExtractor(roi, multiplicity="multiples")  # Use all multiple events
>>> mass = roi.mass[mevents.pair_indices]
>>> det_x = roi.misc["det_x"][mevents.pair_indices]
>>> det_y = roi.misc["det_y"][mevents.pair_indices]
>>> dx = np.diff(det_x)
>>> dy = np.diff(det_y)
>>> diff_det = np.linalg.norm([dx, dy], axis=0)
>>> diff_mass = np.diff(mass)
>>> plt.hist2d(diff_det, diff_mass, bins=100)
>>> plt.plot()
Parameters
  • roi – region of interest

  • multiplicity (Union[int, str]) – multiplicity order (int > 1 or “multiples”)

  • extents (Tuple[Tuple, Tuple]) – two dimensional range to extract events from (think correlation histograms)

property extents: Tuple[Tuple[numbers.Real, numbers.Real], Tuple[numbers.Real, numbers.Real]]

Get the 2-dimensional boundary that was used to extract the ion pairs

Return type

Tuple[Tuple[Real, Real], Tuple[Real, Real]]

property multiplicity: Union[int, str]

int>1 or “multiples

Type

Get the multiplicity of multiple events in the MultipleEventExtractor. Either

Return type

Union[int, str]

property n_pairs: int

Get the number of pairs extracted

Return type

int

property pair_indices: numpy.ndarray

Get the array of indices for the pairs. This is the same shape as MultipleEventExtractor.pairs() but this is used to index map ion pairs to other positional data in the Roi.

Return type

ndarray

property pairs: numpy.ndarray

Get the array of all ion pairs. These are ion pairs regardless of the multiplicity so the arrays is Mx2

Return type

ndarray

property roi: apav.core.roi.Roi

Get the Roi used in the MultipleEventExtractor

Return type

Roi

pairs_per_multiplicity

apav.core.multipleevent.pairs_per_multiplicity(multiplicity)[source]

The number of unique ion pairs produced from a single multiple event of given multiplicity.

A 6th-order multiple event composed of ions ABCDEF produces the 15 ion pairs:

AB AC AD AE AF BC BD BE BF CD CE CF DE DF EF

>>> pairs_per_multiplicity(6)
15
Parameters

multiplicity (int) – integer multiplicity order

get_mass_indices

apav.core.multipleevent.get_mass_indices(ipp, multiplicity)[source]

Get the array indices corresponding to multi-event events of a specific multiplicity

Parameters
  • ipp (ndarray) – array of ions per pulse

  • multiplicity (Union[int, str]) – vent multiplicity

Return type

ndarray

Returns

array of indices into ipp