smps.models.GenericParticleSizer#

class smps.models.GenericParticleSizer(data, bins, **kwargs)

The base class for a Generic Size-Resolving Particle Instrument.

Parameters
datapd.DataFrame

A dataframe containing the binned particle data, timestamp column, and optional metadata columns.

binsarray-like

A 3xn array defining the left, mid, and right boundaries for each particle size bin.

dp_unitsstr, deafult=’um’

Define the units of particle bin sizes - one of (‘um’, ‘nm’)

metadict, default=None

An optional dictionary containing meta information about the instrument.

weightstr, default=’number’

The moment of the model. One of (‘number’, ‘surface’, ‘volume’).

unitsstr, default=’dw/dlogdp’

The default data format in AIM-compatible string format.

bin_weightsarray-like, default=ones

An optional array to set bin weights (e.g., counting efficiency). By default, all bin weights are 1.

bin_prefixstr, default=’bin’

An optional kwarg to name the bins if not already named.

fmtstr, default=’dn’

Optional kwarg describing the default data format. One of (‘dn’, ‘dndlogdp’).

Examples

Initialize a base object with data and bins:

>>> obj = smps.models.GenericParticleSizer(data=df, bins=bins)
copy()

Return a copy of the GenericParticleSizer.

Examples

>>> obj = GenericParticleSize(data=df)
>>> cpy = obj.copy()
property dddlogdp

Can otherwise be represented as \(dD/dlogD_p\).

property dlogdp

Log difference between the upper and lower bound of each bin.

property dn

The number concentration per bin. Can otherwise be represented as \(dN/dD_p\). Units are pp/cm3.

property dndlogdp

The log normalized number concentration per bin. Can otherwise be represented as \(dN/dlogD_p\). Units are pp/cm3.

property ds

Surface area per bin.

property dsdlogdp

Log normalized surface area per bin. Otherwise represented as \(dS/dlogDp\). Units are: µm2/cm3.

dump(filepath)

Save a copy of the model to disk.

Parameters
filepathstr

The filepath to save the file at.

Returns
filepathlist

The list of filepaths where data was saved.

Examples

>>> model.dump(filepath="path-to-file.sav")
property dv

Volume per bin.

property dvdlogdp

Log normalized volume per bin. Can otherwise be represented as \(dV/dlogDp\). Units are µm3/cm3.

integrate(weight='number', dmin=0.0, dmax=1.0, **kwargs)

Integrate by weight for each record in time.

Compute the total number of particles, surface area, volume, or mass between any two particle diameters. Correct for hygroscopic growth by defining a hygroscopic growth factor, kappa.

Parameters
weightstr, default=’number’

The moment/variable to integrate. One of (‘number’, ‘surface’, ‘volume’, ‘mass’).

dminfloat, default=0.0

The minimum particle diameter in µm.

dmaxfloat, default=1.

The maximum particle diameter in µm.

rhofloat or callable

The density as a float or a callable function which takes particle diameter as its only argument and returns the density at that diameter.

kappafloat or callable

The kappa growth factor as a float or a callable function which takes particles diameter as its only argument and returns the kappa value at that diameter.

rhstr

If kappa is defined, rh is the column of data corresponding to the relative humidity which is required to correct for hygroscopic growth.

Returns
datapd.Series

A series containing the integrated values.

Examples

Compute the total particle concentration under 1 µm:

>>> obj.integrate(weight='number', dmin=0., dmax=1.)

Compute PM1

>>> obj.integrate(weight='mass', dmin=0., dmax=1.)

Compute PM2.5 assuming a kappa=0.3

>>> obj.integrate(weight='mass', dmin=0., dmax=2.5, kappa=0.3, rh="sample_rh")
property midpoints

Midpoint particle diameter in each bin.

resample(rs, inplace=False)

Resample the data to a new time base.

Parameters
rsstr

The resample period using normal pandas convention. Examples include ‘1h’, ‘1d’, ‘15min’, etc.

inplacebool, default=False

If True, modify the data inplace, otherwise return.

Returns
datapd.DataFrame or None

If inplace=False, return the dataframe with the resampled data.

Examples

Resample to 1h and modify in place

>>> obj.resample('1h', inplace=True)
property s_multiplier

Per particle surface area representing the mean particle in each bin.

property scan_stats

Return the non-binned data.

slice(start=None, end=None, inplace=False)

Slice the data between two datetimes.

Parameters
startstr

The timestamp (as a string) to begin the slice.

endstr

The timestamp (as a string) to end the slice.

inplacebool, default=False

If True, replace the data with the specified slice of the data, otherwise return a copy of the sliced data.

Returns
datapd.DataFrame or None

If inplace=False, return the dataframe with the sliced data.

Examples

>>> obj.slice(start="2023-01-01", end="2023-02-15")
stats(weight='number', dmin=0.0, dmax=1000.0, rho=1.65, **kwargs)

Compute and return the aerosol size distribution statistics.

Calculate the total number of particles, surface area, volume, mass, arithmetic mean particle diameter, geometric mean particle diameter, and geometric standard deviation between any two particle diameters.

Parameters
weight: str, default=’number’

The moment to use to compute the statistics. Should be one of (‘number’, ‘surface’, ‘volume’, ‘mass’).

dminfloat, default=0.0

The minimum particle diameter to consider. Units are in µm.

dmaxfloat, default=1000.0

The maximum particle diameter to consider. Units are in µm.

rhofloat, default=1.65

The particle density in units of g/cm3.

Returns
datapd.DataFrame

A dataframe containing the computed statistics at each point in time.

Examples

Compute the number-weighted stats

>>> obj.stats(weight='number')

Compute the volume-weighted stats for PM2.5

>>> obj.stats(weight='volume', dmin=0, dmax=2.5)
property v_multiplier

Per particle volume representing the mean particle in each bin.