---
title: "Preparing your input file"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Preparing your input file}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  message = FALSE,
  warning = FALSE,
  fig.width = 7,
  fig.height = 4.5,
  out.width = "100%"
)
```

```{r setup}
library(ambre)
set.seed(2024)
```

Every `ambre` analysis starts from one Excel file describing your reuse
scenario. Get that file right and the rest of the pipeline just runs; get a
label wrong and `create_scenario()` stops with an error. This vignette is the
reference for building that file: the nine columns, their allowed values, and
the traps to avoid. If you have not seen a run yet, read
`vignette("a-get-started", package = "ambre")` first.

## Anatomy of the file

The file has **ten columns**, one row per situation you want to assess. Here is
a bundled two-row example -- use it as a template:

```{r template}
readxl::read_excel(
  system.file("input_1culture_2pop.xlsx", package = "ambre")
) |>
  knitr::kable()
```

| Column | Meaning |
|---|---|
| `CropName` | the crop being irrigated |
| `Area` | irrigated area, in hectares |
| `PopulationName` | the exposed population for this crop |
| `nb_population` | how many people are exposed |
| `PathName` | the exposure pathway (how the water reaches the population exposed) |
| `STEPtreatmentName` | the Wastewater Treatment Plant (WWTP) process |
| `CollectiveTreatmentName` | additional treatment after the WWTP, common to all crop|
| `InitialProcessName` | individual process (equipment or practice) step currently in place |
| `SupplementaryProcessName` | individual process (equipment or practice) step of a new scenario to evaluate |
| `nb_decay` | an on-field barrier (equipment or practice) |

Each row is one **crop x population x pathway** combination. A scenario with two
crops, each exposing three populations, is six rows.

## Validity bounds and empty cells

Two numeric columns are range-checked when you build the scenario:

- `Area` must be **greater than 0 and below 10000** hectares;
- `nb_population` must be **greater than 0 and below 5000**.

The four barrier columns (`STEPtreatmentName`, `CollectiveTreatmentName`,
`InitialProcessName`, `SupplementaryProcessName`) may be left **empty
(`NA`)** when a scheme does not use that slot -- for instance a row with a plant
step and a field barrier but no collective treatment. On the other hand, a cell 
may contain **several processes separated by commas** (i.e. "P.9 - Peeling, P.8 - Drying").
The name columns, by contrast, **must** match a known value exactly 
(indicated in `instruction` sheet), 
and that is what the rest of this vignette is about.

## The allowed values

The names you type are resolved against `config_ambre`, the bundled database.
Printing the catalogs straight from that object guarantees this list stays true
to the package you actually have installed.

**Crops** -- the `CropName` column:

```{r crops}
config_ambre$crop[, c("CropName", "CropDescription", "CropHeight")]
```

**Populations** -- the `PopulationName` column:

```{r populations}
dplyr::distinct(
  config_ambre$path$description[, c("PopulationID", "PopulationName")]
)
```

**Exposure pathways** -- the `PathName` column must match exactly a `PathDescription`
listed below:

```{r paths}
config_ambre$path$description[, c("PathID", "PathDescription", "PopulationName")] |>
  knitr::kable()
```

**Barriers and treatments** -- any of the `STEPtreatmentName`,
`CollectiveTreatmentName`, `InitialProcessName` or
`SupplementaryProcessName` cells must be one or more of these names, separated 
by a **comma* (Q. = treatment, E. = equipment, P. = practice):

```{r barriers}
sort(unique(config_ambre$treatment$processes$TreatmentName))
```

The pathogens you simulate are *not* set in the Excel file -- you pass them to
`run_qmra_intial_situation()` / `run_qmra_supplementary_process()`. 
The 6 that can be simulated are :

```{r pathogen}
library(dplyr)

pathogen <- config_ambre$health %>%
  filter(!if_else(is.na(infection_to_illness) & is.na(dalys_per_case), TRUE, infection_to_illness == dalys_per_case, missing = FALSE))
pathogen$PathogenName

```
More pathogen are available in `config_ambre$health` but parameters 
`nfection_to_illness` and `dalys_per_case` are not yet available.

## Known pitfalls

- **Spelling is exact and unforgiving.** `PathName` must reproduce a
  `PathDescription` exactly, including case and punctuation; `CropName` must be
  `Potato`, `Corn seed`, etc. A stray "s" is enough to fail. Even a bundled
  example, `input_cas_apprentissage_complet.xlsx`, is worth cross-checking:

  ```{r check-complet}
  vals <- readxl::read_excel(
    system.file("input_cas_apprentissage_complet.xlsx", package = "ambre")
  )$CropName
  setdiff(unique(vals), config_ambre$crop$CropName)   # crop names with no match
  ```

  Anything returned here is a label the database will not recognise. 
  To help you complete the Excel file without making any mistakes, use the 
  ‘instructions’ table, where you will find the names to use.

- **`PathName` implies its population.** Each pathway is tied to a population in
  the database, so keep `PopulationName` consistent with the `PathName` you
  choose.

## Validate your file

The check is simply to build the scenario. On a good file it returns a tibble
with one row per input row and the resolved integer IDs:

```{r validate}
scenario <- create_scenario(
  system.file("input_1culture_2pop.xlsx", package = "ambre")
)
scenario[, c("CropName", "CropID", "PopulationName", "PopulationID",
             "PathName", "PathID")]
```

If a name is missing or misspelled, `create_scenario()` stops rather than
guessing. Fix the offending cell against the catalogs above and try again. Once
the scenario builds, you are ready to run the assessment -- see
`vignette("a-get-started", package = "ambre")` -- and to inspect or extend the
database behind these names in `vignette("h-config-ambre", package = "ambre")`.
