smps.ModulairPM#

class smps.ModulairPM(**kwargs)#

The QuantAQ MODULAIR-PM.

QuantAQ’s MODULAIR-PM sensors use the Alphasense OPC-N3, a consumer-grade optical particle counter that uses a 658 nm red laser to count and size individual particles. It can count particles between 380-40,000 nm. Read more here.

ATTRIBUTES

dddlogdp#

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

dlogdp#

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

dn#

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

dndlogdp#

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

ds#

Surface area per bin.

dsdlogdp#

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

dv#

Volume per bin.

dvdlogdp#

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

midpoints#

Midpoint particle diameter in each bin.

s_multiplier#

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

scan_stats#

Return the non-binned data.

v_multiplier#

Per particle volume representing the mean particle in each bin.

METHODS

__init__(**kwargs)#
copy()#

Return a copy of the GenericParticleSizer.

Examples

>>> obj = GenericParticleSize(data=df)
>>> cpy = obj.copy()
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")
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")
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)
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)