---
title: "AeroEvapR_Tutorial"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{AeroEvapR_Tutorial}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

```{r setup}
library(AeroEvapR)
```

## Introduction
The purpose of this tutorial is to help users get started with the `AeroEvapR` package. This package was developed based on the Python package authored by researchers at the Desert Research Institute (DRI) (https://github.com/WSWUP/AeroEvap).

```{r}
## Step 1: Load libraries and data

# Load in necessary libraries
library(dplyr)
library(ggplot2)
library(lubridate)
library(data.table)
library(AeroEvapR)

# Read in data
file_path <- system.file("extdata", "PadreBay_QAQC_2019_Sep_Oct.csv", package = "AeroEvapR")
df <- read.csv(file_path)

# View data and column names
str(df)
```

```{r}
## Step 2: Clean up and format the data for the function

# Select the variables needed for the calculation
old_var_names = c('SkinT_C_Corr_Avg', 'Wind_Speed_ms_Avg', 
                            'BP_kPa_Avg', 'AirT_C_Avg',
                            'RH_Avg', 'date')
# List the new variables that correspond to the function requirements
new_var_names <- c('T_skin', 'WS', 'P', 'T_air', 'RH', 'date')

# Replace names column names with names required for package
setnames(df, old = old_var_names, new = new_var_names)
  
# Convert date to datetime objects
df$date <- as.POSIXct(df$date, format = "%m/%d/%Y %H:%M")

str(df)
```


## Run aero_calc
```{r}
# This data is 30-minute data. Therefore timestep = 1800 (1800 seconds in 30 minutes)
# Run aero_calc
evap = suppressWarnings(aero_calc(df=df, sensor_height=2, timestep=1800, out_file_format='csv',
          out_file_name = 'testing', 
          verbose = FALSE))
```

## Plot input variables and output variables
```{r}
# View dataframe with new values 
str(evap)
```

```{r my-plot, dev = "png", fig.width=7, fig.height=5}
# Plot evaporation rate calculated from aero_calc function
plot(evap$date,evap$E,type='l',col='cadetblue3',
     ylab='Evaporation (mm/30-minute)',
     xlab = 'Date',axes=T)
```

## Sum 30-minute data to hourly and daily
```{r}
# Hourly
evap_hourly <- evap %>%
  mutate(hour = floor_date(date, unit = "hour")) %>%
  group_by(hour) %>%
  summarise(across(where(is.numeric), \(x) sum(x, na.rm = TRUE)))

# Daily 
evap_daily <- evap %>%
  mutate(day = floor_date(date, unit = "day")) %>%
  group_by(day) %>%
  summarise(across(where(is.numeric), \(x) sum(x, na.rm = TRUE)))

```

## Plot 30-minute, hourly, and daily on the same figure
```{r my-plot2, dev = "png", fig.width=7, fig.height=5}
old_par <- par(no.readonly = TRUE)
on.exit(par(old_par), add = TRUE)
par(mfrow = c(3, 1), mar = c(4, 4, 2, 1))
# Plot 30-minute
plot(evap$date,evap$E,type='l',col='cadetblue3',
     ylab='Evap (mm/30-min)',
     xlab = '',axes=T)
# Plot hourly
plot(evap_hourly$hour,evap_hourly$E,type='l',col='lightpink',
     ylab='Evap (mm/hr)',
     xlab = '',axes=T)
# Plot daily
plot(evap_daily$day,evap_daily$E,type='l',col='darkgreen',
     ylab='Evap (mm/day)',
     xlab = 'Date',axes=T)
```
