## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.width = 7,
  fig.height = 5
)

## ----load-data----------------------------------------------------------------
library(bsocialv2)

# Read the consortia presence/absence matrix
consortia <- read.csv(
  system.file("extdata", "consortia.csv", package = "bsocialv2")
)
if (!"Consortia" %in% colnames(consortia)) colnames(consortia)[1] <- "Consortia"

# Read the curated (pre-processed) growth parameters
curated <- read.csv(
  system.file("extdata", "curated_MTBE.csv", package = "bsocialv2")
)
if (!"Consortia" %in% colnames(curated)) colnames(curated)[1] <- "Consortia"

head(consortia)
head(curated)

## ----create-object------------------------------------------------------------
obj <- new("bsocial")
obj@id_proyecto <- "MTBE_example"

# Strain names are all columns in consortia except "Consortia"
obj@cepas_seleccionadas <- setdiff(colnames(consortia), "Consortia")

# Populate the raw-data list
obj@datos_crudos <- list(
  consortia = consortia,
  curated   = curated
)

## ----transform-curated--------------------------------------------------------
obj <- transform_curated_data(obj)
head(obj@datos_procesados)

## ----analyze-growth-----------------------------------------------------------
obj <- analyze_growth(obj)

# View the scatter plot
obj@graficos$growth_scatter

# Top 10 consortia by number of generations
obj@resultados_analisis$best_10_ngen

## ----analyze-social-----------------------------------------------------------
obj <- analyze_social_behavior(obj)

# Fitness boxplots (NGen and GR)
obj@resultados_analisis$social_behavior$social_generations_plot
obj@resultados_analisis$social_behavior$social_gr_plot

## ----summarize-social---------------------------------------------------------
obj <- summarize_social_behavior(obj)

# Classification based on number of generations
obj@resultados_analisis$summary_gen

# Classification based on growth rate
obj@resultados_analisis$summary_gr

## ----analyze-diversity--------------------------------------------------------
obj <- analyze_diversity(obj)

# Diversity effect on fitness (NGen)
obj@graficos$diversity_gen_plot

# Diversity effect on fitness (GR)
obj@graficos$diversity_gr_plot

## ----analyze-stability--------------------------------------------------------
obj <- analyze_stability(obj)

# Stability violin plots
obj@graficos$stability_ngen_plot
obj@graficos$stability_gr_plot

## ----analyze-biofilm----------------------------------------------------------
obj <- analyze_biofilm_sequence(obj)

# The paths are stored as named lists
str(obj@resultados_analisis$biofilm_gen_paths, max.level = 2)

# Plot the assembly graph (base R plot)
obj@graficos$biofilm_gen_plot_func()

## ----raw-workflow, eval = FALSE-----------------------------------------------
#  library(bsocialv2)
#  library(readr)
#  
#  obj <- new("bsocial")
#  obj@id_proyecto <- "raw_example"
#  
#  # Read consortia matrix
#  consortia <- read.csv(
#    system.file("extdata", "consortia.csv", package = "bsocialv2")
#  )
#  if (!"Consortia" %in% colnames(consortia)) colnames(consortia)[1] <- "Consortia"
#  
#  obj@cepas_seleccionadas <- setdiff(colnames(consortia), "Consortia")
#  
#  # Read plate CSVs
#  plate_files <- paste0("plate", 1:6, ".csv")
#  plates <- lapply(plate_files, function(f) {
#    read_csv(system.file("extdata", f, package = "bsocialv2"), show_col_types = FALSE)
#  })
#  
#  obj@datos_crudos <- list(
#    consortia = consortia,
#    plates    = plates,
#    type      = "raw"
#  )
#  
#  # Step 1: Preprocess raw data (background correction + replicate aggregation)
#  #   groups    - integer vector assigning plates to replicate groups
#  #   bg_type   - "blank" (subtract blank well) or "threshold" (subtract OD value)
#  #   bg_param  - blank well ID (for "blank") or numeric threshold (for "threshold")
#  obj <- transform_raw_data(obj,
#    groups   = c(1, 1, 2, 2, 3, 3),
#    bg_type  = "blank",
#    bg_param = "BLANK"
#  )
#  
#  # Step 2: Calculate growth parameters
#  obj <- calculate_growth_params(obj, method = "growthcurver")
#  
#  # Optional: visualize processed curves
#  obj <- plot_processed_curves(obj)
#  obj@graficos$processed_curves_plot
#  
#  # Step 3 onwards: same pipeline as curated workflow
#  obj <- analyze_growth(obj)
#  obj <- analyze_social_behavior(obj)
#  obj <- summarize_social_behavior(obj)
#  obj <- analyze_diversity(obj)
#  obj <- analyze_stability(obj)
#  obj <- analyze_biofilm_sequence(obj)

