---
title: 'Model Building'
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Model Building}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

***NOTE: This module is currently under active development and this documentation is a work in progress***

# Introduction

The model building module is constructed around the `{rxode2}` package. It allows you to load a base model from either the model catalog or a user-create file. Once loaded the user can modify a model (change the structure, parameter values, etc), make a copy, etc. You can upload a model in rxode2 format and also NONMEM format. The NONMEM file (control stream or listing output) will be converted after upload into rxode2 using the `{nonmem2rx}` package. 

# Model catalog

The model catalog is built from the sources field of the configuration file. It can include the models from the `{nlmixr2lib}` model library. You can also include user defined files. If they are specified but not found, they will be skipped. Edit the MB yaml file to to alter this. 

## User-defined models

User-defined models can be included in the catalog or uploaded into the app. These models can be specified in either NONMEM or rxode2 formats. For NONMEM models it can be a control stream (good), the listing output from an estimation (better), or the XML output from an estimation (best). To use an nlmixr2 model you simply need a function definition assigned to the object `my_fcn`. For examples see:

- `system.file(package="ruminate", "templates", "MB_model_rxode2.R")`
- `system.file(package="ruminate", "templates", "MB_model_NONMEM.ctl")`

Modules are specified in the `sources` section of the configuration file. The default configuration file will look in the working directory of the App for `user_model.R` and `user_model.ctl`.  So if you have a rxode2 model you can name it `user_model.R` and place it in the app directory to be included in the catalog.  Similarly if you have a NONMEM control stream you can name it `user_model.ctl`, and it will be included automatically. If these do not exist they will be skipped. You can create as many entries as you want. 

# Configuration File

```{r echo=FALSE, message=FALSE, warning=FALSE, eval=TRUE,  style="max-height: 100px;", comment=""}
library(ruminate)
#yaml= file.path(system.file(package="ruminate"), "templates", "MB.yaml")
cat(readLines(file.path(system.file(package="ruminate"), "templates", "MB.yaml")), sep="\n")
```

