- Updated
airsis_identifyMonitorType()
to handle a new data format.
- Updated
wrcc_identifyMonitorType()
to handle a new data format. - Updated
wrcc_EBAMQualityControl()
to support two different flow rates.
Documentation and other fixes to deal with CRAN check issues.
- Updated various URLs in function documentation.
- Put all internet connected examples inside a
try({ ... })
block to fail gracefully when resources are not available. - Updated many examples to use the
Camp_Fire
dataset. - Updated the "Introduction to PWFSLSmoke" vignette to use package data rather than downloading data from the internet.
- Added
Camp_Fire
dataset. - Moved dataset documentation to separate
data.R
file.
- Support for parsing AIRSIS "EBAM MULTI2_B" format.
- Fixed a cropping issue in
staticmap_getEsrimapBrick()
which resulted in image boundaries that didn't exactly match the requested boundaries.
- Updated all EBAM QC
valid_RHi
thresholds from 45 -> 50.
- Updated
docker/
files to use R 3.6.3.
- Updated support for parsing AIRSIS "ESAM Multi" format.
CRAN manual review suggestions:
- Use
find.package()
instead of the much slowerinstalled.packages()
to determine if a package is installed. - When using
par()
to set graphical parameters, always use save the previously set parameters and thenon.exit(par(opar))
as the very next line. - Ensure that
tempdir()
ortempfile()
are used in all examples, tests and vignettes so that no files are written to user directories. - Changed many examples from
\dontrun{}
to\donttest{}
.
- Tweaks for CRAN submission.
- Removed logging setup from
initializeMazamaSpatialutils()
.
- Added support for parsing AIRSIS "ESAM Multi" format.
- Updated
test-timeinfo.R
to avoid CRAN Check errors.
- Added support for parsing AIRSIS "EBAM Plus Multi" format.
- Documentation tweaks.
- Removed
app/
directory with example web service. - Updated vignettes.
- New vignette: "Example: Save Data as CSV"
- Added support for parsing AIRSIS "EBAM Multi 2" format.
- Replaced
PWFSLSmoke::loadDataFile()
withMazamaCoreUtils::loadDataFile()
.
- docker version bump
- documentation typos
- Ran
MazamaCoreUtils::lintFunctionArgs()
withtimezoneLintRules
and included explicit timezones wherever they are allowed. PWFSLSmoke::parseDatetime()
has been internally replaced withMazamaCoreUtils::parseDatetime()
with explicit timezone argument
- Fix bug in
monitor_load()
which wouldn't load data when the specified time range was in the last 10 days.
- Version bump for CRAN release.
This patch restores some of the ESRI mapping functionality by providing a
function to download, stitch and crop images from ESRI tile services. The
new staticmap_getRasterBrick()
provides a generalized API for generating
basemaps from the two tiling services currently being supported: ESRI and Stamen.
- Added
monitor_staticmap()
,staticmap_getRasterBrick()
andstaticmap_getEsrimapBrick()
. - Reordered arguments in
staticmap_getStamenmapBrick()
.
- Fixes for website documentation
- Docker image now includes
optparse
package so that executable scripts can be run inside themazamascience/pwfslsmoke
image. - Fixed error-generating bug in
debug.trace(...)
statement while processing AirNow data.
This patch release deals with the AirNow's recent inclusion in their data feeds of US Embassy data. Some Embassy sites are in time zones with fractional offset from UTC. The PWFSLSmoke data model requires that all monitoring data align on hour boundaries. All non-conforming AirNow monitors (mostly in South Asia) are now removed during the early stages of processing.
- Improved support for non-Olson timezones in
timeInfo()
. - Corrected
timeInfo()
creation oflocalSstandardTime_UTC
.
- Updated
wrcc_createRawDataframe()
to use the proper WRCC url.
- Updated the
WRCC
dataset with unitIDs added to thecache
in 2018 and 2019. - Updated WRCC processing functions to handle a slightly modified header format.
This patch release deals with the loss of the free basemap generation service
utilized by esriMap_getMap()
. An authentication token is now required and
this patch provides a workaround by using free tiles provided by
Stamen and ggmap::get_stamenmap()
.
The following new functions are provided:
monitor_stamenmap()
-- replacement formonitor_esriMap()
staticmap_getStamenmapBrick()
staticmap_plotRasterBrick()
The use of monitor_esriMap()
has been purged from all examples and vignettes.
The goal is to get to the point of having at least minimal capabilities for
generating static maps and resubmitting the package to CRAN.
- removed
monitor_map()
examples because ESRI map downloads are disabled - added
createEmptyMonitor()
- fixes for
monitor_getCurrentStatus()
:- properly handling transitions between daylight savings and standard time
- properly handling days with insufficient data to calculate an average
- CRAN submission fixes
- added an introductory vignette
Version 1.2.x marks the official release for the 2019 fire season.
monitor_leaflet()
now visibly returns a leaflet object which can be further customized by the user.- code refactoring and cleanup unrelated to functionality -- .e.g. indentation
- logging changes in data processing functions:
- internal logging statements use
TRACE
level (previously, many wereDEBUG
) - entering a function will generate a
DEBUG
level statement with the function name
- internal logging statements use
- bug fix for
monitor_getCurrentStatus()
monitor_getCurrentStatus()
- Argument
EndTime
now defaults to the most recent time in the givenws_monitor
. - Ordering of columns in the output table have changed.
- Argument
monitor_getCurrentStatus()
:- Code has been refactored to be more independent of prior steps.
- Logging statements have been added.
- Fixed bug in parsing of arb2 monitors in "ebamMulti" format. (unitID 1048)
- Fixed bug in
monitor_leaflet()
which didn't properly assign colors when some monitors had all missing data. monitor_leaflet()
now displays monitors with all missing values as light gray.monitor_leaflet()
now invisibly returns a leaflet object which can be further customized by the user.
- Now using the geosphere package to greatly improve the speed of distance
calculations in
distance()
. - Fixed bug when calling
timeInfo(..., timezone = "UTC")
. monitor_dailyStatistic()
now uses the most common timezone when multiple timezones are encountered. (It previously just picked the first one.)monitor_getDailyMean()
now works with multiple-monitor ws_monitor objects and returns a dataframe of daily means
Improved documentation and harmonization of monitor_writeCSV()
and
monitor_print()
.
Minor cleanup in preparation for CRAN submission.
This release adds functions for working with generic data.
generic_downloadData()
- Reads data files as a string of data
generic_parseData()
- Parses data based on a customizable configuration list
- fixed bug in
monitor_load()
where the incorrect year was used in requests for archival data
- lowered logging level inside
esriMap_getMap()
fromINFO
toTRACE
- eliminated section from "Maps and Timeseries Plots" vignette that used
now defunct
monitor_currentData()
monitor_writeCurrentGeoJSON()
has been removedmonitor_currentData()
has been removed
monitor_writeCurrentStatusGeoJSON()
- This function is equivalent to
monitor_writeCurrentGeoJSON()
, but internally usesmonitor_getCurrentStatus()
- This function is equivalent to
This release enhances monitor_getCurrentStatus()
.
- Added 'summary' columns for previous times to match last times
- Renamed
yesterdayAQI
column toyesterday_pm25_24hr
for better fit with the column naming scheme - Added
last_validLocalTimestamp
andprevious_validLocalTimestamp
columns, which are strings showing the local time at a monitor
This release refactors functions prefixed with monitorPlot_*
to instead start
with monitor_*
, keeping in line with other functions accepting a ws_monitor
object as their first argument.
The affected functions are:
Old Name | New Name |
---|---|
monitorPlot_dailyBarplot() |
monitor_dailyBarplot() |
monitorPlot_hourlyBarplot() |
monitor_hourlyBarplot() |
monitorPlot_noData() |
monitor_noDataPlot() |
monitorPlot_rollingMean() |
monitor_rollingMeanPlot() |
monitorPlot_timeseries() |
monitor_timeseriesPlot() |
In addition, monitorPlot_timeOfDaySpaghetti()
has been marked as defunct,
with no replacement.
- added
tidy_toMonitor()
Added new function monitor_getCurrentStatus()
, which returns a data frame
containing meta information as well as current status information given a
ws_monitor_ object.
- added additional logging to
EsriMap_getMap()
- added PWFSL monitoring site "mv4" AQI colors
monitor_currentData()
bug fix
- spell check
Add convenience functions monitor_extractData()
and monitor_extractMeta()
,
which return the dataframes inside a ws_monitor
object.
- added for
pch
argument tomonitor_map()
This release refactors functions so that all functions accepting a ws_monitor
object as their first parameter include the monitor_
prefix in their name.
The affected functions are:
Old Name | New Name |
---|---|
monitorDygraph() |
monitor_dygraph() |
monitorEsriMap() |
monitor_esriMap() |
monitorLeaflet() |
monitor_leaflet() |
monitorMap() |
monitor_map() |
monitorMap_performance() |
monitor_performanceMap() |
In addition, monitorGoogleMap()
has been deprecated in favor of
monitor_esriMap()
.
montor_collapse()
now returns aws_monitor
object with a full 'meta' dataframe that retains any metadata that is shared- added
monitor_timeInfo()
convenience wrapper - added
localStandardTime_UTC
anddaylightSavings
columns to the dataframe returned bytimeInfo()
Moving all base plot related code from PWFSLSmokePlot to PWFSLSmoke so that all functionality in the former is purely ggplot2 based.
- added
addPolygon()
,addWindBarb() and
addWindBarbs()` - added
aqiPalette()
- added
monitor_getDailyMean()
airnow_load()
callsairnow_loadAnnual()
and will is pre-deprecatedairsis_load()
callsairsis_loadAnnual()
and will is pre-deprecatedwrcc_load()
callswrcc_loadAnnual()
and will is pre-deprecated- renamed
loadData()
tomonitor_load()
- new dependency on MazamaCoreUtils
- removed code associated with
DUMP
files - corrected spelling from
heidike
toheidke
in allskill
related functions
%>%
is now exported- added new
monitor_download~()
functions to download local copies of PWFSL monitor data files. - added new
monitor_loadLatest()
,monitor_loadDaily()
andmonitor_loadAnnual()
functions - refactored
airnow
,airsis
,epa
andwrcc
~_load~()
functions to include adataDir
parameter to allow data loading from a local directory rather than always from the internet. theairsis
andwrcc
functions now support the (unused)parameter
argument to match theairnow
function signature
- added
loadData()
to load monitoring data covering any time period within a single year - fixed
monitor_join()
to skip over monitorIDs that are not found in either of the monitor objects being joined together
- actual parsing done by
lubridate::parse_date_time
- vectorized for inputs
- handle any format of Ymd[HMS] (including multiple formats within same input)
- new parameter
expectAll
, which controls how strict the parsing should be about accepting failures - added unit tests
- add
testthat
framework to package
- tweaks for CRAN submission
- cleanup recommended by goodpractice package
- removed non-functioning
monitorGooglMap()
and updated examples to usemonitorEsriMap()
instead - additional logging in
esriMap_getMap()
- added logging functionality to
esriMap_getMap()
- removed dependence on
zoo
package in favor oftidyr
for filling data
- added linting configuration and suggest
lintr
package - added
PWFSLSmoke.Rproj
for consistent development - added Travis-CI configuration
- version bump
- updated docker/ to use mazamascience/spatialutils:0.5.4 which is based off of rocker/tidyverse:3.5.1
- tweaks for CRAN submission
- new
monitor_toTidy()
function to convertws_monitor
objects into tidyverse 'tidy-formatted' data (see more here) - new
monitor_isTidy()
function to check if given data is in a 'tidy' format
- bug fix for "negative subscripts" error from
monitor_writeCurrentGeoJSON()
* - modified
Maps_and_Timeseries_Plots
vignette to use ESRI maps instead of Google maps.
- added support for parsing for AIRSIS ARB2 EBAM-Multi file format (ARB2 unitIDs 1044-1049)
- updated
monitor_nowcast()
algorithm to returnNA
when monitor data re missing. (See the NowCast vignette.)
- support for
datetime
parameter inmonitor_writeCurrentGeoJSON()
andmonitor_currentData()
- added
monitor_writeCurrentGeoJSON()
function monitor_currentData()
returns metadata in addition to current data- added
monitor_writeCSV()
function - enabled
monitor_print()
quietly=TRUE
- added
monitor_currentData()
function
- added package environment with
googleApiKey
,esriApiKey
and getter/setter functions for each - added
addEsriAddress()
function
airsis_createMonitorObject()
andwrcc_createMonitorObject()
now both accept argumentsexistingMeta
with a default value ofNULL
andaddGoogleMeta
andaddEsriMeta
with default values ofFALSE
airsis_createMetaDataframe()
andwrcc_createMetaDataframe()
now both accept argumentsexistingMeta
with a default value ofNULL
andaddGoogleMeta
andaddEsriMeta
with default values ofFALSE
- removed deprecated
addGoogleMetadata()
- new
aqiColors()
function to simplify creation of color vectors for use in maps and plots - new
monitor_print()
function to generate human readable CSV files - fixed bug in
monitor_dailyStatistic()
which did not return the first daily average - fixed bug in
monitor_subsetByDistance()
which failed when no monitors were found within the radius - fixed bug in
monitor_subsetBy()
which failed when a filter used variables defined within a calling function
- fixed bug in
monitor_join()
which failed when a monitorID was missing from one of the ws_monitor objects being joined
- removed errant TAB character from AQI_es$names
- tweaks for CRAN submission
- fixed bug in
esriMap_getMap()
whenwidth != height
- fixed single-digit month parsing in
airnow_load()
- capitalized
AQI$names
: 'Good', 'Moderate', ... - added
addAQIStackedBars()
function - added example test for
monitor_load()
which then testsmonitor_combine()
- shrunk legend in
monitorDygraph()
- changed
monitorDygraph()
to default to UTC when more than one timezone is present - added
AQI$actions
-- text with suggested actions to protect health - added language specific versions of
AQI
:AQI_en
andAQI_es
- added
monitor_isMonitor()
to validate the structure of a ws_monitor object - updated example code in all functions
- turning off grid lines with
~Lwd=0
inmonitorPlot_timeseries()
now works on Windows monitorPlot_dailyBarplot()
acceptstlim
argument of classPOSIXct
- fixed newly introduced bug in
monitor_combine()
- new
loadLatest()
andloadDaily
() functions
- tweaks for CRAN submission
- fixed chronological ordering bug in
monitor_combine()
wrcc_downloadData()
now usesparseDatetime()
like other functionsmonitorID
argument is no longer required inmonitor_join()
. Defaults to joining all shared monitorIDs.
- corrected
baseUrl
argument inwrcc_loadLatest()
andwrcc_loadDaily()
- fixed bug in
monitor_dailyStatistics()
that ignored the last full day. Thanks to jmatchett for the fix.
- changed
daily_avg
todailyAvg
inmonitor_dailyStatistics()
argumentextraColumns
- new
monitor_asDataframe()
function - fixed bug in
monitor_dailyStatistics()
that appeared when the host computer runs in the UTC timezone
- tweaks for CRAN submission
- tweaks for CRAN submission
- removed dependency on xml2 and rvest packages
- removed dependency on RCurl package
- internal
WRCC
object with unitIDs is now a list of lists - more consistent error handling and logging during WRCC data processing
- updated
airnow_loadLatest()
function to access real-time, last 10 day files - new
airnow_loadDaily()
function to access daily-updated, last 45 day files - new
wrcc_load()
function to access pre-generated annual .RData files - updated
wrcc_loadLatest()
function to access real-time, last 10 day files - new
wrcc_loadDaily()
function to access daily-updated, last 45 day files
- more consistent error handling and logging during AIRSIS data processing
- new
airsis_load()
function to access pre-generated annual .RData files
- consistent use of log levels during AirNow data processing
- updated
airnow_load()
function to access pre-generated monthly .RData files - properly closing connections in
epa_load()
andairnow_load()
- tweak to
localExecutables/epa_createAnnualDataframes_exec.R
- removed
logger
statements frommonitor_combine()
andmonitor_join()
- fixed bug in
monitor_join()
when averaging overlapping measurements
- fixed vignette typos
- new
epa_load()
function accesses pre-generated annual .RData files - fixed bug in
monitorPlot_timeseries()
when usingstyle="aqidots"
- tweaks for CRAN submission
- fixed bug in
monitor_subsetBy()
when filtering on metadata columns withNAs
present
monitor~
functions now test for empty ws_monitor objects- new Github
localNotebooks/
directory contains detailed examples
- fixed bug in
monitor_dailyStatistic()
that didn't test forminHours
properly
- changed the non-guaranteed columns in
ws_monitor$meta
ws_monitor$meta$monitorID
is now a combination of new metadata columnssiteID
andinstrumentID
- added
initializeMazamaSpatialUtils()
convenience function - new
US_52
vector of all US state codes includingDC
andPR
- upgraded all
~_createMetaDataframes()
to produce v1.0 metadata airnow_createMetaDataframes()
filters incoming sites forcountryCode %in% c('CA','MX','US')
, discarding sites associated with other countriesmonitorPlot_timeseries()
argumentaqiDots
renamed toaqidots
- new
airnow_createMonitorObjects()
function - new
addUSGSElevation()
function - deprecating
addGoogleMetadata()
in favor of new functionsaddGoogleElevation()
andaddGoogleAddress()
- removed all
openaq_~
data download and processing functions - added
zeroMinimum
parameter to data ingest functions to specify whether negative values should be converted to zero - renamed
airnow_downloadData()
toairnow_downloadParseData()
- new
monitor_join()
function allows you to merge the data of ws_monitor objects with shared monitorIDs - renamed
CarmelValley
dataset toCarmel_Valley
- converted all uses of
GMT
toUTC
- new
createEmptyMetaDataframe()
function monitor_subset~()
functions now return 'meta' dataframes with zero rows and 'data' dataframes with a singledatetime
column rather thanNULL
when no monitors exist in the subset.
- fixed bugs in
airsis_availableUnits()
- export of
AIRSIS
object containing a list of understoodunitTypes
(primarily for internal use) - new
examples/airsis_2017.R
demonstrating creation of an AIRSIS monitoring dataset for 2017.
- removed auto-execution of examples in
monitor_dailyStatistic()
andmonitor_dailyThreshold()
to avoid CRAN test timeouts
- removed extraneous file for CRAN upload
- handling for additional 'UnitID' column in AIRSIS output
- tweaked esriMap_~ examples for CRAN upload
- tweaked NowCast vignette for CRAN upload
- refactored
esriMap_getMap()
to usehttr
package - added NowCast vignette
- new
airsis_availableUnits()
function - new
AIRSIS
object with available monitor types - fix to
esriMap_getMap()
to ensure that projected maps are the correct size esriMap_getMap()
arguments changed to:bboxString
- functions for ESRI Maps added:
esriMap_getMap()
,esriMap_plotOnStaticMap()
,monitorEsriMap()
- new
addMarker()
function to add a marker to a plot
monitor_reorder()
now includesdropMonitors=FALSE
default
- corrected
monitor_nowcast()
now calculates values after the first 2 valid measurements - new
monitor_aqi()
algorithm - changed EBAM and E-Sampler QC pm25 threshold to accept as valid any pm25 value up to 5000 ug/m3
- avoid using Google elevation service whenever monitor metadata is already present
- more detailed logging output
- avoid using Google address service whenever monitor metadata is already present
- bug fix for monitor assignment issues in WRCC and AIRSIS monitors that move
- correction to
monitor_nowcast()
algorithm - updated vignettes to use package datasets
- added support for parsing of BAM1020 data from AIRSIS
- bug fix in quality control processing to handle monitors with no PM2.5 measurements
- bug fix in parsing of E-Sampler data from AIRSIS
- bug fix in
monitorPlot_dailyBarplot()
time axis
- bug fix in creation of temporary monitors
- monitorID now uses
monitorName
anddeploymentID
- improved use of
DEBUG
andINFO
logging statements during AIRSIS and WRCC data processing - new
deploymentID
for temporary monitors based onlon_lat
rather than cluster ID - reset to zero any negative pm25 values in that make it through QC (AIRSIS and WRCC only)
- fixed duplicate hour flagging bug during QC
- added
flagAndKeep
capability toairsis_createRawDataframe()
andwrcc_createRawDataframe()
raw_enhance()
now handles AIRSIS EBAM files
- refactored
airsisDump_createMonitorObject()
which was previously applying QC before splitting by monitorID - fixed WRCC E-Sampler multiplication bug in
raw_enhance()
- fixed bug in
monitor_combine()
so that it now works whenmonitorList
contains a single ws_monitor object - fixed bugs in
wrccDump_parseData()
andairsisDump_parseData()
which failed when a monitor had a single record of data
- 'gnats' style timeseries plots now plotting squares to speed things up
- maps now work when meta$stateCode is missing
parseDatetime()
returns POSIXct unmodifiedmonitor_subsetBy()
drops monitors when filter evaluates to NA- all parameters now called
longitude
andlatitude
instead oflon
andlat
- new
monitor_scaleData()
function - fixed
monitorMap_performance()
issue with legend colors
- added docker/ directory showing how to create a docker image
- added app/ directory showing how to create a jug based web service
- added
epa_~()
data processing functions - added example datasets: Northwest_Megafires, CarmelValley
- refactored many examples to use example datasets and run during
R CMD check
[ - removed rowname creation for 'data' dataframe
- renamed
addLegend()
->addAQILegend()
- added
addAQILines()
- lots of documentation fixes
monitorMap()
no longer creates legendsmonitorGoogleMap()
no longer creates legendsmonitorGoogleMap()
acceptscenterLon
andcenterLat
argumentsmonitorPlot_dailyBarplot()
acceptslabels_x_nudge
andlabels_y_nudge
argumentsmonitorPlot_hourlyBarplot()
acceptslabels_x_nudge
andlabels_y_nudge
arguments- fixed s
tyle="gnats"
inmonitorPlot_timeseries()
- new Mapping vignette
- new AIRSIS_Raw_Data vignette
- new
airnow_loadLatest()
function monitor_collapse()
now hasna.rm=TRUE
argument
- renamed vignette to AIRSIS_Data_Handling and updated content
- removed unused minCount parameter from
addClustering()
- improved documentation in
raw_enhance()
- renamed
addShadedNights()
to addShadedNight()` addBullseye()
accepts more arguments and works with RgoogleMaps map objectsmonitorDygraph()
now acceptstlim
argument instead ofdateWindow
- cleaned up various examples
- removed localDNR/ and localData/ directories
- removed unused test code from localExamples/
- new
addIcon()
function adds icons to maps and RgoogleMaps map objects
- First alpha release with functionality for downloading and processing PM2.5 monitoring data from AirNow, AIRSIS and WRCC.
- improved
airsis_downloadHourlyData()
now usesreadr::read_delim()
monitor_combine()
now accepts a list of monitors instead of just two.- New
df_timeOfDaySpaghettiPlot()
for working with "df_" data (raw "engineering" data but cleaned up and augmented). - New
df_getHighlightDates()
function to find dates with unusual values in the "engineering" data.
- All new AIRSIS data processing
- Cleanup and regularization of plotting functions.
- Plotting functions added.
- Removed AQI breaks for 1-3 hr and 8hr. Now only using 24-hr, daily avg. breaks. The package now only supports 24-hour AQI breaks.
- Modified function signatures for
monitor_timeseriesPlot()
,monitor_map()
andmonitor_leaflet()
to remove/modify their use of theAQIStyle
argument. - Updated localExamples/Washington_August_2015.R
- Added data model vignette.
- Documentation improvements.
- New example in localExamples directory.
- Initial extraction/refactoring of base code from wildfireSmoke package.