#' duplicate $constriant for panel and the $form_inf is modified accordingly
#' note that the $constraint$content must contain only one panel information in order to
#' duplicate
#'
#' @param lpObj
#' the LP object
#'
#' @return
#' The updated LP object
#'
#' @export
do_panel = function (lp_obj) {
# the content table must specify only one panel if exists so
# this function can duplicate panels based on
# the number of panels specified through lp_obj$mst$n_panel
content = NULL
# The number of panel that can be found from the content must be 1
if ("content" %in% names(lp_obj$constraint)) {
content = lp_obj$constraint$content
n_panel_in_content = get_n_panel_from_content(content)
if (n_panel_in_content > 1) {
warning("number of existing panels in content table is greater than 1! ")
return (lp_obj)
}
}
n_panel = lp_obj$mst$n_panel
n_form = lp_obj$test_inf$n_form
if (n_panel <= 1) return (lp_obj)
# duplicate constraint
# 1. duplicate constraint$content
if (!is.null(content)) {
n_content_row = nrow(content)
for (p in 2:n_panel) {
to_add_content = lp_obj$constraint$content
# change FORM_IND for the panel p
to_add_content$FORM_IND = lapply(to_add_content$FORM_IND, function (i)
i = i + n_form * (p-1) )
# change CONS_ID
to_add_content$CONS_ID = ((p-1) * n_content_row + 1):(p * n_content_row)
# change CLUSTER (later)
# change NOTE
to_add_content$NOTE = paste0(to_add_content$NOTE, " P", p)
content = bind_rows(content, to_add_content)
}
}
# 2. duplicate constraint$tcc
tcc = NULL
if ("tcc" %in% names(lp_obj$constraint)) {
tcc = lp_obj$constraint$tcc
n_tcc_row = nrow(tcc)
for (p in 2:n_panel) {
to_add_tcc = lp_obj$constraint$tcc
# change FORM_IND for the panel p
to_add_tcc$FORM_IND = lapply(to_add_tcc$FORM_IND, function (i)
i = i + n_form * (p-1) )
# change TCC_ID
to_add_tcc$TCC_ID = as.character(((p-1) * n_tcc_row + 1):(p * n_tcc_row))
# change NOTE
to_add_tcc$NOTE = paste0(to_add_tcc$NOTE, " P", p)
tcc = bind_rows(tcc, to_add_tcc)
}
}
# 3. duplicate constraint$tif
tif = NULL
if ("tif" %in% names(lp_obj$constraint)) {
tif = lp_obj$constraint$tif
n_tif_row = nrow(tif)
for (p in 2:n_panel) {
to_add_tif = lp_obj$constraint$tif
# change FORM_IND for the panel p
to_add_tif$FORM_IND = lapply(to_add_tif$FORM_IND, function (i)
i = i + n_form * (p-1) )
# change TIF_ID
to_add_tif$TIF_ID = as.character(((p-1) * n_tif_row + 1):(p * n_tif_row))
# change NOTE
to_add_tif$NOTE = paste0(to_add_tif$NOTE, " P", p)
tif = bind_rows(tif, to_add_tif)
}
}
if (!is.null(content)) lp_obj$constraint$content = content
if (!is.null(tcc)) lp_obj$constraint$tcc = tcc
if (!is.null(tif)) lp_obj$constraint$tif = tif
# modify $test_inf
lp_obj$test_inf$n_form = lp_obj$test_inf$n_form * n_panel
lp_obj$test_inf$n_panel = n_panel
# modify $form_inf
form_inf = lp_obj$form_inf
n_form_inf_row = nrow(form_inf)
for (p in 2:n_panel) {
to_add_form_inf = lp_obj$form_inf
# change form_ind for the panel p
to_add_form_inf$form_ind = ((p-1) * n_form_inf_row + 1):(p * n_form_inf_row)
# change form_name
to_add_form_inf$form_name = paste0(to_add_form_inf$form_name, "_P", p)
form_inf = bind_rows(form_inf, to_add_form_inf)
}
lp_obj$form_inf = form_inf
# modify mst if exists
mst = lp_obj$mst
if (!is.null(mst)) {
n_form_in_a_panel = lp_obj$test_inf$n_form / lp_obj$test_inf$n_panel
if (!is.null(mst$path)) {
for (p in 2:n_panel) {
to_add_path = lp_obj$mst$path
to_add_path = lapply(to_add_path, function (i) i+n_form_in_a_panel)
mst$path = c(mst$path, to_add_path)
}
names(mst$path) = paste0("p", 1:length(mst$path))
}
if (!is.null(mst$overlap_form)) {
for (p in 2:n_panel) {
to_add_overlap_form = lp_obj$mst$overlap_form
to_add_overlap_form = to_add_overlap_form + (n_form_in_a_panel) * (p-1)
mst$overlap_form = c(mst$overlap_form, to_add_overlap_form)
}
}
lp_obj$mst = mst
}
return (lp_obj)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.