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

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

```{r setup}
 # CRAN limite CPU usage
data.table::setDTthreads(2)
library(antaresEditObject)
```


First let's create a new study with some areas and clusters:

```{r}
path <- tempdir()
createStudy(path = path, study_name = "my-study")

# Set number of Monte-Carlo scenarios
updateGeneralSettings(nbyears = 10)

# First area
createArea("earth")
createCluster(area = "earth", cluster_name = "america", add_prefix = FALSE)
createCluster(area = "earth", cluster_name = "africa", add_prefix = FALSE)
createCluster(area = "earth", cluster_name = "europe", add_prefix = FALSE)

# Second one
createArea("moon")
createCluster(area = "moon", cluster_name = "tranquility", add_prefix = FALSE)
createCluster(area = "moon", cluster_name = "serenety", add_prefix = FALSE)

# More areas
createArea("titan")
createArea("ceres")

# Some links
createLink("earth", "moon")
createLink("moon", "titan")
createLink("moon", "ceres")

# Check what we have created
getAreas()
readClusterDesc()
```


We can read scenario builder data with:

```{r}
readScenarioBuilder()
```


Currently it's empty. We need to create rules before updating data:

```{r}
# All areas
scenarioBuilder(n_scenario = 3)
scenarioBuilder(n_scenario = 5)
# Specific area
scenarioBuilder(n_scenario = 3, areas = "earth")
# Specify an area for which to use random values
scenarioBuilder(n_scenario = 3, areas_rand = "earth")
```

Now we can update the scenario builder data:

```{r}
my_scenario <- scenarioBuilder(n_scenario = 3)

# for load serie
updateScenarioBuilder(ldata = my_scenario, series = "load")

# equivalent as
updateScenarioBuilder(ldata = list(l = my_scenario))
```

Here we update data for serie `load` only. To update several series at once you can do:

* with same scenario data:

```{r}
my_scenario <- scenarioBuilder(n_scenario = 3)

updateScenarioBuilder(
  ldata = my_scenario, 
  series = c("load", "hydro", "solar")
)
```

* with differents scenario:

```{r}
load_scenario <- scenarioBuilder(n_scenario = 3)
hydro_scenario <- scenarioBuilder(n_scenario = 4)
solar_scenario <- scenarioBuilder(n_scenario = 5)

updateScenarioBuilder(ldata = list(
  l = load_scenario,
  h = hydro_scenario,
  s = solar_scenario
))
```


If you read scenario builder now, wet got:

```{r}
readScenarioBuilder()
```


For thermal and renewables series, default behavior is to set rules to each clusters in the area :

```{r}
my_scenario <- scenarioBuilder(n_scenario = 3)

updateScenarioBuilder(
  ldata = my_scenario, 
  series = "thermal"
)

readScenarioBuilder()$t
```

We can specify specific clusters with:

```{r}
updateScenarioBuilder(
  ldata = my_scenario, 
  series = "thermal",
  clusters_areas = data.table::data.table(
    area = c("earth", "earth"),
    cluster = c("africa", "europe")
  )
)
readScenarioBuilder()$t
```


For NTC serie (Antares >= 8.2.0), it writes the scenario for all links :

```{r}
updateScenarioBuilder(
  ldata = my_scenario, 
  series = "ntc"
)
readScenarioBuilder()$ntc
```

For writing scenario for a specific link you can do:

```{r}
updateScenarioBuilder(
  ldata = my_scenario, 
  series = "ntc",
  links = "moon%ceres"
)
readScenarioBuilder()$ntc
```




Finally, you can remove all scenarios from a ruleset with:

```{r}
clearScenarioBuilder()
```


```{r, echo=FALSE}
unlink(file.path(path, "my-study"), recursive = TRUE)
```