Title: | Estimate Aerosol Particle Collection Through Sample Lines |
---|---|
Description: | Estimate ideal efficiencies of aerosol sampling through sample lines. Functions were developed consistent with the approach described in Hogue, Mark; Thompson, Martha; Farfan, Eduardo; Hadlock, Dennis, (2014), "Hand Calculations for Transport of Radioactive Aerosols through Sampling Systems" Health Phys 106, 5, S78-S87, <doi:10.1097/HP.0000000000000092>. |
Authors: | Mark Hogue |
Maintainer: | Mark Hogue <[email protected]> |
License: | GPL-3 |
Version: | 0.2.0 |
Built: | 2025-03-04 03:47:33 UTC |
Source: | https://github.com/markhogue/aerosampler |
This package provides a method to estimate sampling efficiency of sampling systems drawing aerosol particles through tubing.
Functions were developed consistent with the approach described in Hogue, Mark; Thompson, Martha; Farfan, Eduardo; Hadlock, Dennis, (2014), "Hand Calculations for Transport of Radioactive Aerosols through Sampling Systems" Health Phys 106, 5, S78-S87, <doi:10.1097/HP.0000000000000092>.
To learn how to use AeroSampleR, start with the vignette: 'browseVignettes(package = "AeroSampleR")'
In order to run this function, first produce a particle distribution with the 'particle_dist' function, then produce a parameter set with the 'set_params' function. Both of these results must be stored as per examples described in the help set with each.
bend_eff(df, params, method, bend_angle, bend_radius, elnum)
bend_eff(df, params, method, bend_angle, bend_radius, elnum)
df |
is the particle data set (data frame) established with the 'particle_dist' function |
params |
is the parameter data set for parameters that are not particle size-dependent |
method |
choice of models: Pui, McFarland, or Zhang |
bend_angle |
bend angle in degrees |
bend_radius |
bend radius in m |
elnum |
element number to provide unique column names |
data frame containing original particle distribution with added data for this element
A. R. McFarland, H. Gong, A. Muyshondt, W. B. Wente, and N. K. Anand Environmental Science & Technology 1997 31 (12), 3371-3377 <doi:10.1021/es960975c>
Pusheng Zhang, Randy M. Roberts, André Bénard, Computational guidelines and an empirical model for particle deposition in curved pipes using an Eulerian-Lagrangian approach, Journal of Aerosol Science, Volume 53, 2012, Pages 1-20,ISSN 0021-8502, <doi:10.1016/j.jaerosci.2012.05.007>
David Y. H. Pui, Francisco Romay-Novas & Benjamin Y. H. Liu (1987) Experimental Study of Particle Deposition in Bends of Circular Cross Section, Aerosol Science and Technology, 7:3, 301-315, <doi:10.1080/02786828708959166>
df <- particle_dist() # set up particle distribution params <- set_params_1("D_tube" = 2.54, "Q_lpm" = 100, "T_C" = 25, "P_kPa" = 101.325) #example system parameters df <- set_params_2(df, params) #particle size-dependent parameters df <- probe_eff(df, params, orient = 'h') #probe orientation - horizontal df <- bend_eff(df, params, method='Zhang', bend_angle=90, bend_radius=0.1, elnum=3) head(df)
df <- particle_dist() # set up particle distribution params <- set_params_1("D_tube" = 2.54, "Q_lpm" = 100, "T_C" = 25, "P_kPa" = 101.325) #example system parameters df <- set_params_2(df, params) #particle size-dependent parameters df <- probe_eff(df, params, orient = 'h') #probe orientation - horizontal df <- bend_eff(df, params, method='Zhang', bend_angle=90, bend_radius=0.1, elnum=3) head(df)
This data was created by running the readme script. It is needed for simple plot examples.
dat_for_plots
dat_for_plots
A data.frame
particle diameter in micrometers
probability density
either log_norm or discrete
Cunningham slip correction factor
particle terminal velocity
Reynold's number for particle
Stokes' number for particle
aspiration efficiency for probe
transport efficiency for the second component, a bend
transport efficiency for the third component, a straight tube
Needed as a first step in estimating system efficiency. Make the data frame that will be used to estimate efficiency of variously sized aerosol particles' transport through the sampling system. To create your data, save this data to the global environment as shown in the examples.
particle_dist( AMAD = 5, log_norm_sd = 2.5, log_norm_min = 5e-04, log_norm_max = 100, discrete_vals = c(1, 5, 10) )
particle_dist( AMAD = 5, log_norm_sd = 2.5, log_norm_min = 5e-04, log_norm_max = 100, discrete_vals = c(1, 5, 10) )
AMAD |
default is 5 based on ICRP 66 |
log_norm_sd |
default is 2.5 based on ICRP 66 |
log_norm_min |
default is 0.0005 based on ICRP 66 |
log_norm_max |
default is 100 based on ICRP 66 |
discrete_vals |
default is c(1, 5, 10) |
All inputs are in micron AMAD, meaning: the aerodynamic diameter of a particle is the diameter of a standard density (1000 kg/m3) sphere that has the same gravitational settling velocity as the particle in question.
a data frame containing a lognormally distributed set of particles and discrete particle sizes
df <- particle_dist() # default df <- particle_dist(AMAD = 4.4, log_norm_sd = 1.8) head(df)
df <- particle_dist() # default df <- particle_dist(AMAD = 4.4, log_norm_sd = 1.8) head(df)
In order to run this function, first produce a particle distribution with the 'particle_dist' function, then produce a parameter set with the 'set_params' function. Both of these results must be stored as per examples described in the help set with each.
probe_eff(df, params, orient = "u", method = "blunt pipe")
probe_eff(df, params, orient = "u", method = "blunt pipe")
df |
is the particle data set (data frame) established with the 'particle_dist' function |
params |
is the parameter data set for parameters that are not particle size-dependent |
orient |
orientation of the probe. Options are 'u' for up, 'd' for down, and 'h' for horizontal |
method |
is the model for the probe efficiency. Default is 'blunt pipe', based on Su WC and Vincent JH, Towards a general semi-empirical model for the aspiration efficiencies of aerosol samplers in perfectly calm air, Aerosol Science 35 (2004) 1119-1134 |
data frame containing original particle distribution with added data for this element
df <- particle_dist() # set up particle distribution params <- set_params_1("D_tube" = 2.54, "Q_lpm" = 100, "T_C" = 25, "P_kPa" = 101.325) #example system parameters df <- set_params_2(df, params) #particle size-dependent parameters df <- probe_eff(df, params, orient = 'u') #probe orientation - draws upward head(df)
df <- particle_dist() # set up particle distribution params <- set_params_1("D_tube" = 2.54, "Q_lpm" = 100, "T_C" = 25, "P_kPa" = 101.325) #example system parameters df <- set_params_2(df, params) #particle size-dependent parameters df <- probe_eff(df, params, orient = 'u') #probe orientation - draws upward head(df)
In order to run a report, first produce a model of each individual element. Start with producing a particle distribution with the 'particle_dist' function, then produce a parameter set with the 'set_params' function. Both of these results must be stored as per examples described in the help set with each. Next, add elements in the sample system until all are complete.
report_basic(df, params, dist)
report_basic(df, params, dist)
df |
is the particle data set (data frame) established with the 'particle_dist' function |
params |
is the parameter data set for parameters that are not particle size-dependent |
dist |
selects the distribution for the report. Options are 'discrete' for discrete particle sizes or 'log' for the log-normal distribution of particles that were started with the 'particle_dist' function. |
report of system efficiency
df <- particle_dist() # set up particle distribution params <- set_params_1("D_tube" = 2.54, "Q_lpm" = 100, "T_C" = 25, "P_kPa" = 101.325) #example system parameters df <- set_params_2(df, params) #particle size-dependent parameters df <- probe_eff(df, params, orient = 'h') #probe orientation - horizontal df <- bend_eff(df, params, method='Zhang', bend_angle=90, bend_radius=0.1, elnum=3) df <- tube_eff(df, params, L = 100, angle_to_horiz = 90, elnum = 3) report_basic(df, params, dist = 'discrete')
df <- particle_dist() # set up particle distribution params <- set_params_1("D_tube" = 2.54, "Q_lpm" = 100, "T_C" = 25, "P_kPa" = 101.325) #example system parameters df <- set_params_2(df, params) #particle size-dependent parameters df <- probe_eff(df, params, orient = 'h') #probe orientation - horizontal df <- bend_eff(df, params, method='Zhang', bend_angle=90, bend_radius=0.1, elnum=3) df <- tube_eff(df, params, L = 100, angle_to_horiz = 90, elnum = 3) report_basic(df, params, dist = 'discrete')
In order to run a report, first produce a model of each individual element. Start with producing a particle distribution with the 'particle_dist' function, then produce a parameter set with the 'set_params' function. Both of these results must be stored as per examples described in the help set with each. Next, add elements in the sample system until all are complete.
report_cum_plots(df, micron)
report_cum_plots(df, micron)
df |
is the particle data set - after transport analysis by element |
micron |
selects the particle size (aerodynamic mass activity diameter in micrometers). This must be selected from the original distribution of particles that were started with the 'particle_dist' function. |
A plot of cumulative transport efficiencies is generated in a plot window
report_cum_plots(dat_for_plots, micron = 10)
report_cum_plots(dat_for_plots, micron = 10)
This function shows the entire table of results by particle diameter.
report_log_mass(df)
report_log_mass(df)
df |
is the particle data set - after transport analysis by element |
data frame containing mass-based particle fractions in ambient location and in distribution delivered through the system.
df <- particle_dist() # set up particle distribution params <- set_params_1("D_tube" = 2.54, "Q_lpm" = 100, "T_C" = 25, "P_kPa" = 101.325) #example system parameters df <- set_params_2(df, params) #particle size-dependent parameters df <- probe_eff(df, params, orient = 'h') #probe orientation - horizontal df <- bend_eff(df, params, method='Zhang', bend_angle=90, bend_radius=0.1, elnum=3) df <- tube_eff(df, params, L = 100, angle_to_horiz = 90, elnum = 3) report_log_mass(df)
df <- particle_dist() # set up particle distribution params <- set_params_1("D_tube" = 2.54, "Q_lpm" = 100, "T_C" = 25, "P_kPa" = 101.325) #example system parameters df <- set_params_2(df, params) #particle size-dependent parameters df <- probe_eff(df, params, orient = 'h') #probe orientation - horizontal df <- bend_eff(df, params, method='Zhang', bend_angle=90, bend_radius=0.1, elnum=3) df <- tube_eff(df, params, L = 100, angle_to_horiz = 90, elnum = 3) report_log_mass(df)
In order to run a report, first produce a model of each individual element. Start with producing a particle distribution with the 'particle_dist' function, then produce a parameter set with the 'set_params' function. Both of these results must be stored as per examples described in the help set with each. Next, add elements in the sample system until all are complete.
report_plots(df, dist)
report_plots(df, dist)
df |
is the particle data set - after transport analysis by element |
dist |
selects the distribution for the report. Options are 'discrete' for discrete particle sizes or 'log' for the log-normal distribution of particles that were started with the 'particle_dist' function. |
A plot of transport efficiencies is generated in a plot window
report_plots(dat_for_plots, dist = 'discrete')
report_plots(dat_for_plots, dist = 'discrete')
Make a set of parameters that will be used throughout this package. 'set_params_1' sets all single parameters. 'set_params_2' adds particle-size-dependent parameters to the particle distribution
set_params_1(D_tube_cm, Q_lpm, T_C = 20, P_kPa = 101.325)
set_params_1(D_tube_cm, Q_lpm, T_C = 20, P_kPa = 101.325)
D_tube_cm |
Inside diameter of tubing in cm, no default |
Q_lpm |
System flow in lpm, no default |
T_C |
System temperature in Celsius |
P_kPa |
System pressure in kPa (Pa is the MKS unit) |
All parameters are to be in MKS units, except as noted.
a data frame with singular parameters
examples params <- set_params_1("D_tube" = 2.54, "Q_lpm" = 100, "T_C" = 25, "P_kPa" = 101.325) t(params)
This set of parameters will be used for evaluation of transport efficiency for particle-size-dependent parameters.
set_params_2(df, params)
set_params_2(df, params)
df |
is the particle data set (data frame) established with the 'particle_dist' function |
params |
is the parameter data set for parameters that are not particle size-dependent |
No user-selected arguments are needed. Parameters are used in efficiency functions. For each particle diameter, an entry is made in the data frame for the Cunningham slip correction factor, the particle terminal velocity, the particle Reynold's number, and the Stokes factor.
'set_params_1' sets all single parameters. 'set_params_2' adds particle size-dependent parameters to the particle distribution
a data frame starting with the submitted particle distribution with additional columns for particle-size-dependent parameters
df <- particle_dist() params <- set_params_1("D_tube" = 2.54, "Q_lpm" = 100, "T_C" = 25, "P_kPa" = 101.325) df <- set_params_2(df, params) head(df)
df <- particle_dist() params <- set_params_1("D_tube" = 2.54, "Q_lpm" = 100, "T_C" = 25, "P_kPa" = 101.325) df <- set_params_2(df, params) head(df)
Computation is consistent with the approach described in Hogue, Mark; Thompson, Martha; Farfan, Eduardo; Hadlock, Dennis, (2014), "Hand Calculations for Transport of Radioactive Aerosols through Sampling Systems" Health Phys 106, 5, S78-S87, <doi:10.1097/HP.0000000000000092>, with the exception that the diffusion deposition mechanism is included.
tube_eff(df, params, L_cm, angle_to_horiz, elnum)
tube_eff(df, params, L_cm, angle_to_horiz, elnum)
df |
is the particle data set (data frame) established with the 'particle_dist' function |
params |
is the parameter data set for parameters that are not particle size-dependent |
L_cm |
tube length, cm |
angle_to_horiz |
angle to horizontal in degrees |
elnum |
element number to provide unique column names |
In order to run this function, first produce a particle distribution with the 'particle_dist' function, then produce a parameter set with the 'set_params' function. Both of these results must be stored as per examples described in the help set with each.
data frame containing original particle distribution with added data for this element
# Example output is a sample of the full particle data set. # laminar flow (Reynolds number < 2100) df <- particle_dist() # distribution params <- set_params_1("D_tube" = 2.54, "Q_lpm" = 20, "T_C" = 25, "P_kPa" = 101.325) #example system parameters df <- set_params_2(df, params) #particle size-dependent parameters df <- probe_eff(df, params, orient = 'h') #probe orientation - horizontal df <- tube_eff(df, params, L_cm = 100, angle_to_horiz = 90, elnum = 2) (df[sort(sample(1:1000, 10)), ]) # turbulent flow (Reynolds number > 4000) df <- particle_dist() # distribution params <- set_params_1("D_tube" = 2.54, "Q_lpm" = 100, "T_C" = 25, "P_kPa" = 101.325) #example system parameters df <- set_params_2(df, params) #particle size-dependent parameters df <- probe_eff(df, params, orient = 'h') #probe orientation - horizontal df <- tube_eff(df, params, L_cm = 100, angle_to_horiz = 90, elnum = 2) (df[sort(sample(1:1000, 10)), ]) # midrange flow (Reynolds number > 2100 and < 4000) df <- particle_dist() # distribution params <- set_params_1("D_tube" = 2.54, "Q_lpm" = 60, "T_C" = 25, "P_kPa" = 101.325) #example system parameters df <- set_params_2(df, params) #particle size-dependent parameters df <- probe_eff(df, params, orient = 'h') #probe orientation - horizontal df <- tube_eff(df, params, L_cm = 100, angle_to_horiz = 90, elnum = 2) (df[sort(sample(1:1000, 10)), ])
# Example output is a sample of the full particle data set. # laminar flow (Reynolds number < 2100) df <- particle_dist() # distribution params <- set_params_1("D_tube" = 2.54, "Q_lpm" = 20, "T_C" = 25, "P_kPa" = 101.325) #example system parameters df <- set_params_2(df, params) #particle size-dependent parameters df <- probe_eff(df, params, orient = 'h') #probe orientation - horizontal df <- tube_eff(df, params, L_cm = 100, angle_to_horiz = 90, elnum = 2) (df[sort(sample(1:1000, 10)), ]) # turbulent flow (Reynolds number > 4000) df <- particle_dist() # distribution params <- set_params_1("D_tube" = 2.54, "Q_lpm" = 100, "T_C" = 25, "P_kPa" = 101.325) #example system parameters df <- set_params_2(df, params) #particle size-dependent parameters df <- probe_eff(df, params, orient = 'h') #probe orientation - horizontal df <- tube_eff(df, params, L_cm = 100, angle_to_horiz = 90, elnum = 2) (df[sort(sample(1:1000, 10)), ]) # midrange flow (Reynolds number > 2100 and < 4000) df <- particle_dist() # distribution params <- set_params_1("D_tube" = 2.54, "Q_lpm" = 60, "T_C" = 25, "P_kPa" = 101.325) #example system parameters df <- set_params_2(df, params) #particle size-dependent parameters df <- probe_eff(df, params, orient = 'h') #probe orientation - horizontal df <- tube_eff(df, params, L_cm = 100, angle_to_horiz = 90, elnum = 2) (df[sort(sample(1:1000, 10)), ])