soilMineralVars <- dataframe %>%
  select( contains( "soil10.loi.xrf" ),contains( "soil20.loi.xrf" ) ) %>%
  select( - contains("orig") ) %>%
  colnames

studiedVariables <- c( "crop",
                      "climateRegion",
                      "variety",
                      "cropColor",
                      "brix",
                      "sample_source"
                      )

studiedVariables <- c( studiedVariables, soilMineralVars )

dataframe <- dataframe %>%
  mutate_at( vars( !!soilMineralVars ), as.double )


generalMediansTable <- tibble()

soilTables <- function( variable, factors = factorsList, data = dataframe, imgBaseDir="./graphics/soil/", reportToGenTable = TRUE ) {
  output <- list()

  filtArray <- tribble(
    ~ variable, ~ value,
    ## "crop", selCrop
    )

  print("explained var")
  print( variable )

  cropDF <- data %>%
    select( !!studiedVariables,
           !!factors,
           sourceUID
           )

  output$df <- cropDF

  freqsTable90 <- frequencyDelta( explainedVar = variable,
                                 data = cropDF,
                                 filteringArray = filtArray,
                                 explicativeFactors = factors)

    output$table90 <- freqsTable90

  freqsTable75 <- frequencyDelta( explainedVar = variable,
                                 data = cropDF,
                                 filteringArray = filtArray,
                                 explicativeFactors = factors,
                                 rangeMin = 0.75)

  output$table75 <- freqsTable75

  freqsTable15 <- frequencyDelta( explainedVar = variable,
                                 data = cropDF,
                                 filteringArray = filtArray,
                                 explicativeFactors = factors,
                                 rangeMin = 0,
                                 rangeMax = 0.15
                                 )

  output$table15 <- freqsTable15

  output$mediansPractices <- pmap_df( enframe( farmPracticesCols, name = NULL ), ~ positionStatisticsByLogicColumn(
                                                                                  data = cropDF,
                                                                                  column = .x,
                                                                                  explained = variable,
                                                                                  center = "farm_practices.none"
                                                                                )
                                     ) %>% filter( N != 0 )

  output$mediansAmendments <- pmap_df( enframe( amendmentsCols, name = NULL ), ~ positionStatisticsByLogicColumn(
                                                                                data = cropDF,
                                                                                column = .x,
                                                                                explained = variable,
                                                                                center = "amendments.none"
                                                                              )
                                      ) %>% filter( N != 0 )

  if ( reportToGenTable ) {

    medPract <- output$mediansPractices %>% mutate( explained = variable,
                                                   ## crop =selCrop,
                                                   family = "practices"
                                                   )
    medAmend <- output$mediansAmendments %>% mutate( explained = variable,
                                                    ## crop =selCrop,
                                                    family = "amendments"
                                                    )
    generalTable <- bind_rows( generalMediansTable, medPract, medAmend )
    output$generalTable <- generalTable
  }

  return( output )
}

## plan( multisession, workers=20 )
## tablesObjectList <- future_map( soilMineralVars, ~ soilTables( variable = .x ) )

## write_rds( tablesObjectList, path = "../bigFiles/tablesObjectListSoilMinerals.Rds" )

tablesObjectList <- read_rds( "../bigFiles/tablesObjectListSoilMinerals.Rds" )

generalMediansTable <- tibble()
for ( entry in tablesObjectList ) {
  generalMediansTable <- bind_rows( generalMediansTable, entry$generalTable )
  ## speechTable <- bind_rows( speechTable, entry$speechTable )
}

generalMediansTable <- generalMediansTable %>% unique

synthesisTable <- generalMediansTable %>%
  filter( isRelevant == TRUE & !is.na( isRelevant ) ) %>%
  select( factor, family, explained, N, p.value, intervalMin, intervalMax ) %>%
  pivot_wider( names_from = c( explained ), values_from = c( N, p.value, intervalMin, intervalMax ) ) %>%
  mutate( factor = str_replace( string = factor, pattern = "(amendments.)|(farm_practices.)", replacement = "" ) )

amendmentsSynthesis <- synthesisTable %>% filter( family == "amendments" )
practicesSynthesis <- synthesisTable %>% filter( family == "practices" )

write_rds( x = amendmentsSynthesis, path=".soilAmendmentsSynthesisTable.Rds" )
write_csv( x = amendmentsSynthesis, path=".soilAmendmentsSynthesisTable.csv" )
write_rds( x = practicesSynthesis, path=".soilPracticesSynthesisTable.Rds" )
write_csv( x = practicesSynthesis, path=".soilPracticesSynthesisTable.csv" )

referenceValues <- generalMediansTable %>%
  filter( str_detect( string = factor, pattern="none" ) ) %>%
  select( factor, "HL Estimate", explained, family ) %>%
  mutate( reference = .data[["HL Estimate"]] ) %>%
  select( explained, family, reference )

generalMediansTable <- left_join( x= generalMediansTable, y = referenceValues, by=c( "explained", "family") )

relevantsTable <- generalMediansTable %>%
  filter( observedUIDs >= 3 ) %>%
  mutate( shiftPercentage = .data[['HL Median Shift Estimate']] / reference,
         shiftPercentage = round( shiftPercentage * 100, digits = 2 )
         ## shiftPercentage = round( shiftPercentage * 100, digits = 2 ) %>% str_c( ., "%", sep ="" )
         ) %>%
  select( factor, explained, shiftPercentage, family ) %>%
  pivot_wider( names_from = explained, values_from = c( shiftPercentage ) ) %>%
  mutate( factor = str_replace( string = factor, pattern = "(amendments.)|(farm_practices.)", replacement = "" ) ) %>%
  select( factor, family, contains("10"), contains("20") )

sampleSizesTable <- generalMediansTable %>%
  filter( observedUIDs >= 3 ) %>%
  select( factor, explained, family, N ) %>%
  pivot_wider( names_from = c( explained ), values_from = c( N ) ) %>%
  mutate( factor = str_replace( string = factor, pattern = "(amendments.)|(farm_practices.)", replacement = "" ) ) %>%
  select( factor, family, contains("10"), contains("20") )

pValuesTable <- generalMediansTable %>%
  filter( observedUIDs >= 3 ) %>%
  mutate( p.value = ifelse( p.value > 0.1 & isRelevant == TRUE, 0.09, p.value  ) ) %>%
  select( factor, explained, family, p.value ) %>%
  pivot_wider( names_from = c( explained ), values_from = c( p.value ) ) %>%
  mutate( factor = str_replace( string = factor, pattern = "(amendments.)|(farm_practices.)", replacement = "" ) ) %>%
  select( factor, family, contains("10"), contains("20") )


relevants <- relevantsTable

pValueAlphaScale <- function( pValue ) {
  pValue <- 1 - pValue
  if ( pValue >= 0.95 ) { return(1) }
  else if ( pValue > 0.90 ) { return(0.70) }
  else if ( pValue > 0.8 ) { return(0.60) }
  else if ( pValue > 0.5 ) { return(0.4) }
  else if ( pValue < 0.1 ) { return(0.1) }
  else { return(0.3) }
}

assignBackgroundNonVec <- function( value, pValue ) {
  if ( is.na(value) | is.na(pValue) | typeof( value ) != "double" ) { return("none") }
  pValue <- pValueAlphaScale( pValue )
  if ( value >= 0 ) { return( paste0( "rgba(1,121,11,", pValue ,")" ) ) }
  else if ( value < 0 ) { return( paste0( "rgba(255,0,0,", pValue ,")" ) ) }
}

assignBackground <- function( vecsValue, vecsPValue ) {
  map2_chr( vecsValue, vecsPValue, assignBackgroundNonVec )
}

assignColorNonVec <- function( value ) {
  if ( is.na(value) | typeof( value ) != "double" ) { return("black") }
  else if ( value == 0 ) { return("white") }
  else if ( value > 0 ) { return("white") }
  else if ( value < 0 ) { return("white") }
}

assignColor <- function( vecsValue ) {
  vecsValue %>% map_chr( assignColorNonVec )
}

formatCols <- relevants %>% select( -"factor", -"family" ) %>%
  colnames

relevantSpecAmendments <- relevants %>% filter( family == "amendments" ) %>% select( - "family" )

sampleSizesAmendments <- sampleSizesTable %>% filter(  family == "amendments") %>% select( - "family" )

pValuesAmendments <- pValuesTable %>% filter(  family == "amendments") %>% select( - "family" )

for ( col in formatCols ) {
  relevantSpecAmendments[[col]] <- cell_spec(
    relevantSpecAmendments[[col]],
    background = assignBackground( relevantSpecAmendments[[col]], pValuesAmendments[[col]] ),
    tooltip = sampleSizesAmendments[[col]] %>% str_c( "Sample size: ", ., sep = "" ) ,
    color = assignColor( relevantSpecAmendments[[col]] ),
    bold = TRUE
  )
}

fullColorAmendments <- relevantSpecAmendments %>%
  filter( factor != "none" ) %>%
  mutate( factor = str_replace_all( factor, pattern = "_", replacement = " " ) %>% str_to_title( . ) ) %>%
  rename_all( ~ str_replace_all( ., pattern = "_", replacement = " " ) %>% str_to_title( . ) ) %>%
  kable( escape = FALSE, caption = "Percent of Variation over Median Value" ) %>%
  kable_styling( c( "hover", "striped" ),
                full_width = FALSE,
                fixed_thead = TRUE
                ) %>%
  column_spec( 1, bold = TRUE, border_right = TRUE )

write_rds( fullColorAmendments, path="./soilAmendmentsShiftTable.Rds" )

relevantSpecPractices <- relevants %>% filter( family == "practices" ) %>% select( - "family" )

sampleSizesPractices <- sampleSizesTable %>% filter(  family == "practices") %>% select( - "family" )

pValuesPractices <- pValuesTable %>% filter(  family == "practices") %>% select( - "family" )

for ( col in formatCols ) {
  relevantSpecPractices[[col]] <- cell_spec(
    relevantSpecPractices[[col]],
    background = assignBackground( relevantSpecPractices[[col]], pValuesPractices[[col]] ),
    tooltip = sampleSizesPractices[[col]] %>% str_c( "Sample size: ", ., sep = "" ) ,
    color = assignColor( relevantSpecPractices[[col]] ),
    bold = TRUE
  )
}

fullColorPractices <- relevantSpecPractices %>%
  filter( factor != "none" ) %>%
  mutate( factor = str_replace_all( factor, pattern = "_", replacement = " " ) %>% str_to_title( . ) ) %>%
  rename_all( ~ str_replace_all( ., pattern = "_", replacement = " " ) %>% str_to_title( . ) ) %>%
  kable( escape = FALSE, caption = "Percent of Variation over Median Value" ) %>%
  kable_styling( c( "hover", "striped" ),
                full_width = FALSE,
                fixed_thead = TRUE
                ) %>%
  column_spec( 1, bold = TRUE, border_right = TRUE )

write_rds( fullColorPractices, path="./soilPracticesShiftTable.Rds" )

fullColorPractices
Percent of Variation over Median Value
Factor Soil10.Loi.xrf.na Soil10.Loi.xrf.mg Soil10.Loi.xrf.al Soil10.Loi.xrf.si Soil10.Loi.xrf.p Soil10.Loi.xrf.s Soil10.Loi.xrf.k Soil10.Loi.xrf.ca Soil10.Loi.xrf.ti Soil10.Loi.xrf.v Soil10.Loi.xrf.cr Soil10.Loi.xrf.mn Soil10.Loi.xrf.fe Soil10.Loi.xrf.co Soil10.Loi.xrf.ni Soil10.Loi.xrf.cu Soil10.Loi.xrf.zn Soil20.Loi.xrf.na Soil20.Loi.xrf.mg Soil20.Loi.xrf.al Soil20.Loi.xrf.si Soil20.Loi.xrf.p Soil20.Loi.xrf.s Soil20.Loi.xrf.k Soil20.Loi.xrf.ca Soil20.Loi.xrf.ti Soil20.Loi.xrf.v Soil20.Loi.xrf.cr Soil20.Loi.xrf.mn Soil20.Loi.xrf.fe Soil20.Loi.xrf.co Soil20.Loi.xrf.ni Soil20.Loi.xrf.cu Soil20.Loi.xrf.zn
Certified Organic 0.03 0.04 -11.63 12.87 0.02 0 -16.22 -22.22 0.01 14.26 4.49 5.94 -11.32 4.52 50.13 9.07 -30.06 0.01 -0.01 -18 5.99 0.02 0 -16.66 0 -0.01 13.08 -0.3 -1.96 -16.95 -2.22 83.83 8.72 -24.32
Organic -0.02 0.01 -13.95 1.17 0 3.33 -10.81 -22.22 0.02 6.12 -11.85 -8.62 -18.87 -2.58 43.41 7.36 -7.76 0.01 66.61 -12 0 -0.01 3.39 -11.11 -9.09 0.01 11.25 -10.81 -7.56 -20.34 -3.88 61.39 11.71 -11.96
Notill 0.04 66.63 -11.63 -2.34 0.01 6.67 -16.21 -14.82 0.01 9.16 -12.67 -6.32 -15.09 4.52 20.67 11.04 -16.42 0.02 66.63 -12 -7.63 -0.04 10.17 -16.67 -9.09 0.01 20.41 -12.43 -7.15 -13.56 2.77 30.36 18.68 -21.2
Nospray 40 66.6 13.95 3.51 0.02 6.67 -16.22 -37.03 33.34 29.05 -16.45 6.58 -11.32 16.77 18.09 5.36 8.21 39.97 133.25 10 -1.64 0.02 20.34 -16.67 -18.19 28.58 51.5 -8.99 14.44 -10.17 13.3 40.26 35.74 -19.51
Biodynamic -0.01 0 -6.98 7.6 -0.02 3.34 -10.81 -29.63 -0.01 4.99 9.91 -3.3 -11.32 9.03 30.49 10.51 6.43 -0.02 66.59 -12 3.27 -0.03 6.78 -5.56 -9.08 -0.01 -1.32 10.31 -0.86 -13.56 1.66 24.42 6.6 29.39
Cover Crops 39.99 0.02 4.65 4.09 0.02 3.33 -21.63 -29.63 33.32 29.85 -16.55 6.08 -3.77 18.06 16.54 11.56 -23.41 39.98 66.65 0 -2.82 49.99 16.95 -27.78 -18.19 28.58 52.05 -13.34 11.41 -3.39 19.39 38.94 29.64 -34.2
Nonchlorine Water 0.04 66.65 -13.95 4.68 0.02 6.67 -16.22 -29.63 0.02 22.5 -11.85 -2.34 -18.87 2.58 46.51 23 -18.86 0.02 66.62 -14 3.27 -0.04 6.78 -16.66 -18.18 0.01 24.93 -14.76 -5.05 -20.34 0.55 79.87 17.31 -13.52
Irrigation 0.01 66.64 -18.6 3.51 -0.02 10 -16.21 -14.82 0.01 16.05 -9.3 -4.26 -26.41 -7.1 97.16 18 -20.97 0 66.62 -24 1.63 -0.04 6.78 -11.11 -18.18 0.01 26.6 -12.33 -11.23 -27.12 -11.08 171.62 16.81 -19.77
fullColorAmendments
Percent of Variation over Median Value
Factor Soil10.Loi.xrf.na Soil10.Loi.xrf.mg Soil10.Loi.xrf.al Soil10.Loi.xrf.si Soil10.Loi.xrf.p Soil10.Loi.xrf.s Soil10.Loi.xrf.k Soil10.Loi.xrf.ca Soil10.Loi.xrf.ti Soil10.Loi.xrf.v Soil10.Loi.xrf.cr Soil10.Loi.xrf.mn Soil10.Loi.xrf.fe Soil10.Loi.xrf.co Soil10.Loi.xrf.ni Soil10.Loi.xrf.cu Soil10.Loi.xrf.zn Soil20.Loi.xrf.na Soil20.Loi.xrf.mg Soil20.Loi.xrf.al Soil20.Loi.xrf.si Soil20.Loi.xrf.p Soil20.Loi.xrf.s Soil20.Loi.xrf.k Soil20.Loi.xrf.ca Soil20.Loi.xrf.ti Soil20.Loi.xrf.v Soil20.Loi.xrf.cr Soil20.Loi.xrf.mn Soil20.Loi.xrf.fe Soil20.Loi.xrf.co Soil20.Loi.xrf.ni Soil20.Loi.xrf.cu Soil20.Loi.xrf.zn
Alfalfa Meal -0.01 49.98 -14.29 -10.61 -0.01 16.67 20 0 0 17.42 -3.16 4.33 8.33 9.29 -68.03 40.29 -32.06 0 0.02 -8.89 -7.8 -50 9.84 27.59 -9.09 -0.01 11.17 -8.21 -0.31 12 8.65 -94.97 27.04 -24.06
All Purpose -0.01 0.01 4.76 -2.23 -49.95 13.33 20 8 -0.01 19.64 2.63 12.78 12.5 14.24 -98.77 25.18 3.5 0 0 0 -2.79 -50.02 16.39 20.69 18.18 -0.01 19.17 1.14 13.49 16 13.83 -91.89 25.72 7.8
Azomite -39.99 0.03 -2.38 -8.38 0 10 13.33 48 -28.57 -3.32 1.43 6.61 8.33 3.72 -68.03 13.92 18.04 -0.02 -0.02 2.22 0.56 -49.99 3.28 13.79 27.28 -0.01 -4.61 5.51 10.98 12 3.22 -108.56 -0.68 55.01
Blood Meal -0.02 150.01 -9.53 5.03 -49.97 46.67 13.33 -24 0 86.75 7.16 30.87 -8.33 20.43 -3.28 101.26 -76.3 -39.97 99.99 -15.55 4.46 -50 32.79 13.79 -18.19 -0.02 52.2 3.64 20.3 -8 8.65 10.36 71.87 -60.6
Boron 0.02 50.05 -50 -6.7 -0.02 26.66 0 -24 57.14 78.7 -58.77 -14.01 -45.84 -21.05 104.51 56.86 -58.1 40.01 50.01 -33.33 9.47 -0.01 22.95 -6.9 -54.55 74.99 99.76 -56.1 -6.48 -44 -6.92 172.52 52.16 -84.53
Calcium -0.01 50.01 -42.86 24.58 -49.95 10 -46.67 -8.01 0 10.3 10.95 -5.67 -50 -27.86 136.7 38.97 -79.26 0.02 99.96 -33.33 31.2 -50.02 19.67 -48.28 -9.1 -0.01 42.83 19.01 14.75 -36 -8.65 214.41 53 -96.42
Compost 0.02 -50.01 9.52 12.85 49.99 -30 0 -8 -0.03 -38.68 -3.9 -16.47 -16.67 -26.01 45.9 -58.45 60.5 0 -99.95 8.89 11.14 50 -29.51 0 -0.01 0 -37.46 -9.35 -18.94 -13.53 -24.21 17.57 -59.13 100.39
Compost Tea -0.01 50.01 -42.86 24.58 -49.95 10 -46.67 -8.01 0 10.3 10.95 -5.67 -50 -27.86 136.7 38.97 -79.26 0.02 99.96 -33.33 31.2 -50.02 19.67 -48.28 -9.1 -0.01 42.83 19.01 14.75 -36 -8.65 214.41 53 -96.42
Compost With Chicken Manure And Peatmoss -40 -0.03 -11.91 -12.29 -49.99 0 20 24 -28.57 -25.11 3.37 -9.38 8.33 -6.19 -37.29 16.17 -14.55 -39.97 0.01 6.67 6.13 -50.02 3.28 27.59 27.27 -24.99 -2.67 5.3 16.88 16 2.31 -110.36 11.06 15.6
Copper Sulfate -0.01 50 -42.86 -2.23 -49.96 13.33 13.34 -8 28.57 40.35 -51.08 -17.45 -33.33 -21.67 78.69 22.8 -45.51 0.01 49.96 -40 8.36 -49.98 13.11 13.8 -18.18 25.01 53.26 -50.39 -12.04 -36 -17.29 120.27 28.98 -39.47
Donald Stoner Compost 39.98 300.03 -9.52 -1.68 -0.01 113.33 60 -56 57.14 284.71 -27.17 58.74 -4.17 60.06 53.69 230.86 -193.76 39.99 299.92 8.89 20.61 -0.01 95.08 68.97 -54.55 50 235.83 -31.06 55.03 0 58.79 119.37 190.26 -188.17
Down To Earth 0 -0.01 11.91 1.68 -49.96 6.67 20 23.99 0 7.09 10.29 21.32 20.83 13 -130.74 14.05 16.04 -0.03 0.01 6.67 1.67 -49.97 9.83 20.69 27.27 -25 4.99 5.51 18.86 20 10.95 -124.32 15.63 22.63
Feather Meal 0.01 50.02 -26.19 1.68 -0.01 20 -6.67 -24 28.6 66.05 -37.91 -2.91 -37.5 -11.76 93.03 44.53 -50 39.98 49.97 -4.45 5.01 -50 13.11 -6.9 -45.46 49.99 51.94 -35.32 -7.52 -24 1.73 84.23 28 -48.11
Fish Emulsion -39.99 150 -47.62 -29.05 -49.98 80 33.34 -23.99 0 91.72 -20.33 26.09 -29.17 3.1 32.79 146.06 -122.55 -0.02 50.03 -42.22 -2.23 -50.05 29.51 41.38 -45.46 0.01 57.39 -21.3 -14.53 -32 -2.88 187.84 62.38 -108.58
Fish Seaweed -0.01 50.01 -42.86 24.58 -49.95 10 -46.67 -8.01 0 10.3 10.95 -5.67 -50 -27.86 136.7 38.97 -79.26 0.02 99.96 -33.33 31.2 -50.02 19.67 -48.28 -9.1 -0.01 42.83 19.01 14.75 -36 -8.65 214.41 53 -96.42
Fishbone Meal -0.02 0.01 21.43 2.79 -0.01 6.67 20 32 -0.01 13.17 9.14 25.66 29.17 18.58 -126.1 7.6 32.06 -0.01 0.02 8.89 5.01 -50.01 9.84 20.69 36.36 -0.01 11.83 8.62 28.17 24 14.41 -134.68 10.58 41.09
Green Sand -0.02 150.02 -52.38 -7.82 -49.94 70 -13.33 -24 0 115.78 -1.05 16.86 -33.33 9.29 68.44 143.41 -125.71 -39.97 99.96 -57.78 -6.68 -50.05 32.79 -6.9 -18.18 -0.01 40.37 -8.21 -15.04 -32 -9.22 87.39 66.71 -78.41
Gypsum 0.03 49.99 0 6.15 -49.97 13.34 26.67 -24 -0.02 29.59 7.06 8.54 16.67 19.19 33.61 21.47 -12.25 0.01 49.98 11.11 14.48 -49.98 13.12 27.59 -27.27 -0.02 28.58 12.57 15.91 20 21.9 22.97 21.39 -15.34
Kelp Meal -0.01 100.01 -35.71 8.38 -49.95 46.67 -6.66 -16 0.01 71.71 1.9 18.94 -20.83 9.29 107.38 86.55 -74.62 -0.01 99.97 -35.55 11.14 -50.01 29.51 0 -18.19 -0.01 45.79 2.29 6.11 -20 2.88 129.73 56.97 -51.5
Manganese Sulfate 39.98 0.02 -2.38 29.61 0 0 6.67 0 -0.02 12.44 10.01 20.85 0 6.81 180.74 -39.63 49.56 -0.01 0.02 -20 17.83 -50.01 -6.56 0 9.09 -0.01 -20.65 10.18 5.59 -12 -12.68 112.16 -32.21 98.31
Nutrilive Vitality -0.01 50.01 -42.86 24.58 -49.95 10 -46.67 -8.01 0 10.3 10.95 -5.67 -50 -27.86 136.7 38.97 -79.26 0.02 99.96 -33.33 31.2 -50.02 19.67 -48.28 -9.1 -0.01 42.83 19.01 14.75 -36 -8.65 214.41 53 -96.42
Nutrisprout 40 100.03 -19.05 35.75 -0.03 30 0.01 -56 28.58 109.9 -7.69 26.67 -16.66 22.91 302.46 72.91 -10.39 40 99.97 -17.78 38.44 -0.01 26.23 6.89 -54.55 25.02 82.77 -10.6 23.98 -20 15.56 357.21 54.81 -2.86
Potash -40 -0.02 -28.57 -22.9 0.02 -13.33 0 24 -28.56 -35.17 19.69 -27.15 -20.83 -24.77 4.92 -1.54 -15.43 -40.01 -49.98 -22.22 -15.04 0.03 -9.83 0 36.37 -25 -27.81 18.16 -22.79 -20 -23.63 77.03 -1.32 -13.91
Potassium Sulfate 0.02 0.01 -2.38 19.55 -49.96 3.33 20 -32.01 28.57 26.04 -10.43 -2.98 -12.5 -2.48 89.75 3.98 -12.8 0.01 0 2.22 18.38 -50.01 0 13.79 -36.37 24.99 19.95 -8.73 -0.62 -8 2.88 86.94 -1.92 1.43
Pro Grow 79.99 99.98 -14.29 -21.23 299.87 30 0 72 85.75 121.85 3.48 27.54 45.83 71.83 -130.74 61.59 -56.51 40 49.98 -28.89 -32.31 150.06 19.67 -6.9 72.72 74.98 74.63 4.57 6.47 40 53.6 -121.17 51.08 -62.42
Proboost -39.98 -0.02 -16.67 -12.85 49.97 -10 0 16 -0.01 -24.31 21.17 -16.24 -12.5 -19.2 24.18 -2.78 -12.58 -39.98 -49.99 -15.55 -0.56 50.01 -9.83 0 36.36 -24.99 -21.85 25.39 -11.81 -16 -16.79 81.98 -3.86 -1.43
Progro 0.02 -0.02 0 3.91 0 -10 6.66 0 -0.02 -3.96 28.52 -4.12 0 -0.62 78.28 -6.63 2.49 39.98 -49.97 17.78 22.84 50.02 -3.28 6.9 18.18 -0.01 12.82 41.77 24.42 12 10.95 178.38 -12.85 47.96
Revita -0.02 150.02 -52.38 -7.82 -49.94 70 -13.33 -24 0 115.78 -1.05 16.86 -33.33 9.29 68.44 143.41 -125.71 -39.97 99.96 -57.78 -6.68 -50.05 32.79 -6.9 -18.18 -0.01 40.37 -8.21 -15.04 -32 -9.22 87.39 66.71 -78.41
Seasalt 0.01 -99.98 11.9 34.08 -49.96 -26.67 26.66 -24 -0.01 -24.77 25.28 -3.66 -4.17 -14.86 142.21 -49.04 51.53 0.02 -100 2.22 34.54 -50.01 -29.51 27.58 -9.09 -0.01 -30.26 18.53 -5.23 -8 -17.87 192.98 -53.49 81.53
Sodium Molybdate 0 0 -2.38 30.17 -0.03 0 6.67 -8 0 10.86 14.32 16.13 0 3.1 157.79 -31.15 37.64 -0.02 0.02 -20 20.06 -50.01 0 0 9.09 -0.01 -10.34 14.55 13.04 -8 -6.34 125.22 -21.15 78.02
Sodium Selenate 0 0 -2.38 30.17 -0.03 0 6.67 -8 0 10.86 14.32 16.13 0 3.1 157.79 -31.15 37.64 -0.02 0.02 -20 20.06 -50.01 0 0 9.09 -0.01 -10.34 14.55 13.04 -8 -6.34 125.22 -21.15 78.02
Solubor 0.02 0.01 -2.38 29.61 -49.97 0 6.67 0 -0.01 9.9 13.48 17.94 0 5.57 168.44 -36.85 51.53 -0.01 49.98 -13.33 23.4 -50 6.56 6.89 0 -0.01 5.12 15.69 21.38 -4 1.73 148.65 -9.13 57.09
Sulfur 39.98 49.99 -7.14 19.55 0.01 10 6.66 23.99 0.01 44.64 7.9 23.4 16.66 25.39 100 -8.08 19.58 0 0.01 -22.22 -4.46