# ======================================================
# Universidad Central del Ecuador
# FACULTAD DE INGENIERÍA EN GEOLOGÍA, MINAS, PETRÓLEOS Y AMBIENTAL 
# CARRERA DE INGENIERÍA EN MINAS
# SOFTWARE MINERO
# TEMA: DESNORMALIZACIÓN DE DATOS ESTIMADOS
# AUTORES: Mónica Alejandro, Antonio Chulde, Wendy Montenegro, Johan Morales, Bryan Pastrano
# FECHA: 23/07/2025
# ======================================================

# Establecer directorio de trabajo
setwd("/cloud/project")
# Definir valor común del mínimo logarítmico
minlog <- -2
# FUNCIÓN GENERAL PARA DESNORMALIZAR VARIABLES
desnormalizar_datos <- function(archivo_csv, patron_estimacion, patron_varianza, 
                                nombre_salida, nombre_ppm, nombre_var_desnorm) {
  
  cat("\nProcesando archivo:", archivo_csv, "\n")
  
  # Leer archivo CSV
  datos <- read.csv(archivo_csv)
  
  # Mostrar nombres de columnas para verificar
  print(colnames(datos))
  
  # Buscar columnas por nombre aproximado
  col_estim <- grep(patron_estimacion, colnames(datos), value = TRUE)[1]
  col_var <- grep(patron_varianza, colnames(datos), value = TRUE)[1]
  
  # Validar existencia
  if (is.na(col_estim) | is.na(col_var)) {
    stop(paste("No se encontraron columnas con patrones:", patron_estimacion, "y/o", patron_varianza))
  }
  
  # Extraer variables
  estim <- datos[[col_estim]]
  varianza <- datos[[col_var]]
  
  # Desnormalizar
  datos[[nombre_ppm]] <- 10^(estim + minlog) - 0.01
  datos[[nombre_var_desnorm]] <- 10^(varianza + minlog) - 0.01
  
  # Exportar CSV
  write.csv(datos, nombre_salida, row.names = FALSE)
  cat("Archivo exportado exitosamente:", nombre_salida, "\n")
  
  # Mostrar primeras filas
  print(head(datos[, c(col_estim, nombre_ppm, col_var, nombre_var_desnorm)]))
}

# ========================================
# 1. Ni - Nivel Superior
# ========================================
desnormalizar_datos(
  archivo_csv = "estimacion_Ni_bloques.csv",
  patron_estimacion = "estimacion.*[Nn]i$",
  patron_varianza = "estimacion.*[Nn]i.*var",
  nombre_salida = "estimacion_desnormalizada_Ni_Sup.csv",
  nombre_ppm = "Ni_ppm_sup",
  nombre_var_desnorm = "Ni_var_sup_desnorm"
)
## 
## Procesando archivo: estimacion_Ni_bloques.csv 
## [1] "X"                      "Y"                      "Z"                     
## [4] "estimacion_Ni"          "estimacion_Ni_krig_var"
## Archivo exportado exitosamente: estimacion_desnormalizada_Ni_Sup.csv 
##   estimacion_Ni Ni_ppm_sup estimacion_Ni_krig_var Ni_var_sup_desnorm
## 1       2.95461   8.997619               0.193909        0.005628201
## 2       2.89726   7.883325               0.211921        0.006289997
## 3       3.02535  10.591077               0.181004        0.005170643
## 4       3.04765  11.149635               0.166369        0.004667936
## 5       2.99573   9.892161               0.178478        0.005082662
## 6       2.92095   8.325852               0.201525        0.005904682
# ========================================
# 2. Cu - Nivel Superior
# ========================================
desnormalizar_datos(
  archivo_csv = "estimacion_cu_bloques1.csv",
  patron_estimacion = "estimacion.*[Cc]u$",
  patron_varianza = "estimacion.*[Cc]u.*var",
  nombre_salida = "estimacion_desnormalizada_Cu_Sup.csv",
  nombre_ppm = "Cu_ppm_sup",
  nombre_var_desnorm = "Cu_var_sup_desnorm"
)
## 
## Procesando archivo: estimacion_cu_bloques1.csv 
## [1] "X"                      "Y"                      "Z"                     
## [4] "estimacion._Cu"         "estimacion_Cu_krig_var"
## Archivo exportado exitosamente: estimacion_desnormalizada_Cu_Sup.csv 
##   estimacion._Cu Cu_ppm_sup estimacion_Cu_krig_var Cu_var_sup_desnorm
## 1        3.37792   23.86371               0.302097        0.010049198
## 2        3.28953   19.46736               0.331156        0.011436605
## 3        3.48323   30.41496               0.279897        0.009050089
## 4        3.53479   34.25021               0.252226        0.007874175
## 5        3.44755   28.01528               0.275020        0.008837358
## 6        3.32816   21.27923               0.314487        0.010629419
# ========================================
# 3. Ni - Nivel Inferior
# ========================================
desnormalizar_datos(
  archivo_csv = "estimacion_Ni_inferior.csv",
  patron_estimacion = "estimacion.*[Nn]i[_]*inf$",
  patron_varianza = "estimacion.*[Nn]i[_]*inf.*var",
  nombre_salida = "estimacion_desnormal_Ni_inf.csv",
  nombre_ppm = "Ni_ppm_inf",
  nombre_var_desnorm = "Ni_var_inf_desnorm"
)
## 
## Procesando archivo: estimacion_Ni_inferior.csv 
## [1] "X"                          "Y"                         
## [3] "Z"                          "estimacion_Ni_inf"         
## [5] "estimacion_Ni_inf_krig_var"
## Archivo exportado exitosamente: estimacion_desnormal_Ni_inf.csv 
##   estimacion_Ni_inf Ni_ppm_inf estimacion_Ni_inf_krig_var Ni_var_inf_desnorm
## 1           3.31321   20.55885                   0.491263         0.02099296
## 2           3.31267   20.53329                   0.492751         0.02109933
## 3           3.32704   21.22440                   0.487453         0.02072225
## 4           3.32610   21.17849                   0.488495         0.02079605
## 5           3.32515   21.13219                   0.489728         0.02088361
## 6           3.32422   21.08697                   0.491136         0.02098389