Drinking water chlorination efficiency: Difference between revisions

From Opasnet
Jump to navigation Jump to search
 
(27 intermediate revisions by 3 users not shown)
Line 7: Line 7:


== Answer ==
== Answer ==
{{argument|relat1=attack|id=arg2071|type=truth|content=Sapovirus missing|sign=--[[User:Päivi Meriläinen|Päivi Meriläinen]] ([[User talk:Päivi Meriläinen|talk]]) 14:14, 23 March 2020 (UTC)}}


{| {{prettytable}}
{| {{prettytable}}
Line 15: Line 17:
| 8.837981871
| 8.837981871
|----
|----
| E.coli O157:H7
| ''E.coli'' O157:H7
| 7.182699561
| 7.182699561
|----
|----
Line 44: Line 46:
The rows tell which pathogen the ct-values on that row are for.
The rows tell which pathogen the ct-values on that row are for.


The columns tell the ct-value required to decrease the amount of each pathogen in the drinking water to a certain level on the log-scale. Column 1 means pathogen concentration will drop to 10<sup>-1</sup> of the original, column 2 means the concentration will drop to 10<sup>-2</sup> and so on.
The columns tell the ct-value required to decrease the amount of each pathogen in the drinking water to a certain level on the log-scale. Column 1 means pathogen concentration will drop to 10<sup>-1</sup> of the original, column 2 means the concentration will drop to 10<sup>-2</sup> and so on.  


<t2b index="Pathogen,Logdecrease" Locations="0,1,2,3,4,5" unit="(mg/l)*min">
<t2b index="Pathogen,Logdecrease" Locations="0,1,2,3,4,5,6" unit="(mg/l)*min">
Campylobacter|0| 0.152| 0.294| 0.436| 0| 0
campylobacter|0| 0.154| 0.294| 0.436| NA| NA| NA
E.coli O157:H7|0| 0.17| 0.34| 0.52| 1.06| 0
E.coli O157:H7|0| 0.17| 0.34| 0.52| 1.06| 2.06| NA
Rotavirus|0| 0.12| 0.16| 0.2| 0.3| 0
rotavirus|0| 0.12| 0.16| 0.2| 0.3| NA| NA
Norovirus|0| 0.09| 0.18| 0.245| 0.314| 0
norovirus|0| 0.09| 0.18| 0.245| 0.314| NA| NA
Cryptosporidium|0| 0| 0| 0| 0| 0
sapovirus|0| 0.09| 0.18| 0.245| 0.314| NA| NA
Giardia|0| 75| 150| 216| 0| 0
cryptosporidium|0| NA| NA| NA| NA| NA| NA
giardia|0| 75| 150| 216| NA| NA| NA
</t2b>
</t2b>


Line 60: Line 63:
|----
|----
| Campylobacter
| Campylobacter
| <ref>Blaser, M. J., Smith, P. F., Wang, W.‐L. L. and Hoff, J. C. (1986). "Inactivation of Campylobacter jejuni by Chlorine and Monochloramine." Applied and Environmental Microbiology 51(2): 307‐311.</ref>; <ref>Lund, V. (1996). "Evaluation of E. coli as an indicator for the presence of Campylobacter jejuni and Yersinia enterocolitica in chlorinated and untreated oligotrophic lake water." Water Research 30(6): 1528‐ 1534.</ref>
| <ref name="blaser">Blaser, M. J., Smith, P. F., Wang, W.‐L. L. and Hoff, J. C. (1986). "Inactivation of Campylobacter jejuni by Chlorine and Monochloramine." Applied and Environmental Microbiology 51(2): 307‐311.</ref>; <ref>Lund, V. (1996). "Evaluation of ''E. coli'' as an indicator for the presence of Campylobacter jejuni and Yersinia enterocolitica in chlorinated and untreated oligotrophic lake water." Water Research 30(6): 1528‐ 1534.</ref>
|----
|----
| E.coli O157:H7
| ''E.coli'' O157:H7
| <ref>Blaser, M. J., Smith, P. F., Wang, W.‐L. L. and Hoff, J. C. (1986). "Inactivation of Campylobacter jejuni by Chlorine and Monochloramine." Applied and Environmental Microbiology 51(2): 307‐311.</ref>; <ref>Lund, V. (1996). "Evaluation of E. coli as an indicator for the presence of Campylobacter jejuni and Yersinia enterocolitica in chlorinated and untreated oligotrophic lake water." Water Research 30(6): 1528‐ 1534.</ref>
| <ref name="blaser"/>, <ref name="petterson"> S. R. Petterson & T. A. Stenström 2015. Quantification of pathogen inactivation efficacy by free chlorine disinfection of drinking water for QMRA. J Water Health (2015) 13 (3): 625-644. [https://doi.org/10.2166/wh.2015.193]
</ref>
|----
|----
| Rotavirus
| Rotavirus
| <ref>Rice, E. W., Hoff, J. C. and III, F. W. S. (1982). "Inactivation of Giardia cysts by chlorine." Applied and Environmental Microbiology 43(1): 250‐251</ref>
| <ref name="rice">Rice, E. W., Hoff, J. C. and III, F. W. S. (1982). "Inactivation of Giardia cysts by chlorine." Applied and Environmental Microbiology 43(1): 250‐251</ref>
|----
|----
| Norovirus
| Norovirus
| <ref>Keswick, B. H., Satterwhite, T. K., Johnson, P. C., DuPont, H. L., Secor, S. L., Bitsura, J. A., Gary, G. W. and Hoff, J. C. (1985). Inactivation of norwalk virus in drinking water by chlorine. Applied and Environmental  Microbiology 50(2): 261-264.</ref>
|----
| Sapovirus
| <ref>Keswick, B. H., Satterwhite, T. K., Johnson, P. C., DuPont, H. L., Secor, S. L., Bitsura, J. A., Gary, G. W. and Hoff, J. C. (1985). Inactivation of norwalk virus in drinking water by chlorine. Applied and Environmental  Microbiology 50(2): 261-264.</ref>
| <ref>Keswick, B. H., Satterwhite, T. K., Johnson, P. C., DuPont, H. L., Secor, S. L., Bitsura, J. A., Gary, G. W. and Hoff, J. C. (1985). Inactivation of norwalk virus in drinking water by chlorine. Applied and Environmental  Microbiology 50(2): 261-264.</ref>
|----
|----
Line 75: Line 82:
|----
|----
| Giardia
| Giardia
| <ref>Rice, E. W., Hoff, J. C. and III, F. W. S. (1982). "Inactivation of Giardia cysts by chlorine." Applied and Environmental Microbiology 43(1): 250‐251</ref>
| <ref name="rice"/>
|----
|----
|}
|}
Line 98: Line 105:
   library(OpasnetUtils)
   library(OpasnetUtils)


ChlorineDose = data.frame(ChlorineDoseResult = 1.5)
ChlorineDose = data.frame(ChlorineDoseResult = 0.5)
 
ChlorineDose = Ovariable("ChlorineDose", data = ChlorineDose)


ChlorineDose = Ovariable("ChlorineDose", data = ChlorineDose, save = TRUE)
objects.store(ChlorineDose)
 
cat("Ovariable ChlorineDose saved.\n")


oprint(ChlorineDose)
oprint(ChlorineDose)
Line 109: Line 120:
label="Initialize chlorine sensitivity"
label="Initialize chlorine sensitivity"
>
>
#This is code "Op_en7956/seisitivity" on page [[Drinking water chlorination efficiency]]
#This is code "Op_en7956/sensitivity" on page [[Drinking water chlorination efficiency]]
library(OpasnetUtils)
library(OpasnetUtils)


# Get the data from OpasnetBase. The data is in long format, each log decrease for each microbe one row.
ClSensitivity <- Ovariable("ClSensitivity", ddata = "Op_en7956", save=TRUE)
CLsensitivity <- tidy(
 
   opbase.data("Op_en7956"),  
objects.store(ClSensitivity)
   objname = "CLsensitivity"
 
cat("Ovariable ClSensitivity saved.\n")
 
oprint(ClSensitivity)
</rcode>
 
<rcode
name="constants"
label="Initialize cstr, mrt and k"
>
 
  #This is code "Op_en7956/constants" on page [[Drinking water chlorination efficiency]]
  library(OpasnetUtils)
 
Ncstr <- 6 # the number of continuously stirred tank reactors
mrt <- 2 # mean residence time, the time water on average spends in each cstr
k <- Ovariable("k", data = data.frame(kResult = 0.13)) # the rate at which chlorine concentration decreases
 
objects.store(Ncstr, mrt, k)
 
cat("Constants Ncstr, mrt and ovariable k saved.\n")
 
</rcode>
 
<rcode
name="CT"
label="Initialize CT"
>
# This is code "Op_en7956/CT" on page [[Drinking water chlorination efficiency]]
library(OpasnetUtils)
library(reshape2)
 
CT <- Ovariable(
   "CT",
  dependencies =  data.frame(
    Name = c("ChlorineDose", "mrt", "Ncstr", "k"),
    Ident = c("Op_en7956/dose", "Op_en7956/constants", "Op_en7956/constants", "Op_en7956/constants")),
   formula = function(...){
 
# Produces a distribution of total time water spends in the contactor
# from an exponential probability distribution with lambda = 1/mrt
# 1000 iterations
Times <- data.frame(Iter= 1:openv$N, Result = 0)
for(i in 1:(Ncstr)) {
  Times$Result <- Times$Result + rexp(n=openv$N, rate= 1/mrt)
}
 
Times <- Ovariable(name="Times", output=Times)
 
# Integral of concentration along Times:
# Int(ChlorineDose*exp(-k*Times)) = ChlorineDose*(-1/k)*exp(-k*Times)
# Definite integral from 0 to Times = ChlorineDose*(-1/k)*exp(-k*Times) - ChlorineDose(-1/k) = ChlorineDose/k (1-exp(-k*Times))
 
CT <- ChlorineDose/k * (1-exp(-1 * k * Times))
 
return(CT)
 
}
 
)
)


# At this point the data is identical to the t2b on the page. Stick it into an ovariable
objects.store(CT)
CLsensitivity <- Ovariable("CLsensitivity", data = CLsensitivity)
 
objects.store(CLsensitivity)
cat("Ovariable CT saved.\n")


oprint(CLsensitivity)
</rcode>
</rcode>


Line 134: Line 202:
library(reshape2)
library(reshape2)


riippuvuudet = data.frame(
ChlorineEfficiency <- Ovariable("ChlorineEfficiency", dependencies = data.frame(
Name = c("ChlorineDose", "CLsensitivity", "ChlorineEfficiencyF"),
  Name = c("CT", "ClSensitivity"),
Ident = c("Op_en7956/dose", "Op_en7956/sensitivity)
  Ident = c("Op_en7956/CT", "Op_en7956/sensitivity")),
)
  formula = function(...){
 
  ClSensitivity <- EvalOutput(ClSensitivity)


ChlorineEfficiencyF <- function(ChlorineDose, Ctvalues, logDecreases) {
  # make CT into an Ovariable, if it's not already
   if(sum(Ctvalues) == 0) {return(0) # if all the ct:s are 0, return 0
   if(!"ovariable" %in% class(CT)) CT <- Ovariable(name="CT", output=data.frame(Result=CT))
    } else {
   CT <- EvalOutput(CT)
      # this next bit calculates the ct, given Chlorine dose. I don't know what it does.
   sensname <- paste0(ClSensitivity@name,"Result") # put "ClSensitivityResult" into sensname
   Mrt <- 12
   ctname <- paste0(CT@name,"Result") # put "CTResult" into ctname
   Ncstr <- 6
    
   Ttimes <- c(0.001,0.01,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1.1,1.2,1.3,1.4,1.5,1.6,2,2.5,4)
   ova <- merge(ClSensitivity, CT) # merge to get the variables into the same table
   Times <- Ttimes * Mrt
   ova$Logdecrease <- as.numeric(as.character(ova$Logdecrease)) # make sure Logdecrease-column is numeric
   Times.inc <- Times - c(0,Times[1:20])
 
   Probability <- (Times^(Ncstr - 1) * exp(-Ncstr * Times / Mrt))/(factorial(Ncstr - 1) * (Mrt / Ncstr) ^ Ncstr) # If we calculate for each CSTR separately, we could integrate analytically and get rid of Times and Times.inc altogether.
  out <- aggregate(
  ChlorineDose  <- ChlorineDose * exp(-0.13 * Times) # Instead of this, we could integrate analytically because it is easy with exponential functions.
    1:nrow(ova@output), #take a set of row numbers included in ova...
# Where does 0.13 come from? Can it vary in different situations, so should it be an ovariable as well?
    by = ova@output[ova@marginal & colnames(ova@output)!="Logdecrease"], #...that has a unique combination of values in the
  ChlorineDose  <- ChlorineDose  * Times.inc
            # index-columns, except Logdecrease. It takes the row numbers with different values of Logdecrease, with the
  ChlorineDoseCumsum <- cumsum(ChlorineDose)
            # combination of other indices unique.
  ClConcDistr <- sum(ChlorineDoseCumsum * Probability) / length(Probability)
      FUN = function(x) {
  # given the ct:s known to be required for different log-decreases of concentration, what's the log-decrease with the ct calculated above
      tmp <- ova@output[x,] # actually takes those rows whose numbers were selected above from ova
  # simple linear interpolation. Rule: if CTConc exceeds data, use the highest logDecrease
      ord <- order(tmp$Logdecrease) # saves the order of rows ordered based on Logdecrease, smallest first.
  logD <- approx(x=Ctvalues, y=logDecreases, xout=ClConcDistr, rule=1:2)$y # The line must start from point (0,0). Add that to data
      if(sum(tmp[[sensname]], na.rm=TRUE)==0) return(0) # if all the ct:s in this set of rows are 0, return 0
  return(logD) # return the log-decrease
      out <- approx( # Otherwise use approx to interpolate the log-decrease for the ct value(s) from earlier
        x=tmp[[sensname]][ord],
        y=tmp$Logdecrease[ord],
        xout=tmp[[ctname]][1],
        rule=1:2
      )$y
      return(out)
     }
     }
}
  )
  colnames(out)[colnames(out)=="x"] <- "Result"
  return(out)


ChlorineEfficiency <- Ovariable("ChlorineEfficiency", dependencies = riippuvuudet, formula = function(...){
  ChlorineDose <- ChlorineDose$ChlorineDoseResult[1] # Take the chlorine dose value out of the df and save as a value
  temp <- data.frame(Pathogen=(unique(CLsensitivity$Pathogen))) # make a df with  the names of pathogens in one column
  for (j in 1:nrow(temp)) { # for each pathogen
# This for loop is problematic because all inputs are ovariables and that meant that a) they may be probabilistic and have e.g. 1000 rows of iterations (numbered in Iter column), and b) they may have other, unknown index columns.
# So, the code must reflect situations where the sizes and widths of the output dataframes of ovariables are not know.
# One way to do this is to merge the ovariables
# tmp <- ChlorineDose + CLsensitivity
# and then use their
    temp$Result[j] <- ChlorineEfficiencyF( #run Chlorine efficiency, and put the resulting log decrease in temp$Result for that pathogen
      ChlorineDose,
      CLsensitivity$CLsensitivityResult[CLsensitivity$Pathogen == unique(CLsensitivity$Pathogen)[j]],
      # the ct:s for different log decreases for the pathogen in question
      CLsensitivity$`Log decrease`[CLsensitivity$Pathogen == unique(CLsensitivity$Pathogen)[j]]
      # the log decreases resulting from those ct:s for the pathogen in question
    )
   }
   }
  temp$TreatmentMethod <- "Chlorination"
  # By returning as ovariable marginals can be manually defined
  temp <- Ovariable(output = temp, marginal = colnames(temp) %in% c("TreatmentMethod", "Pathogen", "ChlorineDoseSource"))
 
  return(temp)
}
)
)


objects.store(ChlorineEfficiency, ChlorineEfficiencyF)
objects.store(ChlorineEfficiency)
 
cat("Ovariable ChlorineEfficiency saved.\n")


oprint(ChlorineEfficiency)
</rcode>
</rcode>



Latest revision as of 14:14, 23 March 2020

Question

How does chlorination affect the concentrations of pathogens in drinking water, reported in log-decrese?

Answer

⇤--arg2071: . Sapovirus missing --Päivi Meriläinen (talk) 14:14, 23 March 2020 (UTC) (type: truth; paradigms: science: attack)

Pathogen Log-dercease
Campylobacter 8.837981871
E.coli O157:H7 7.182699561
Rotavirus 11.97117474
Norovirus 13.55252482
Cryptosporidium 0
Giardia 0.095329311

Rationale

Chloriantion efficiency, or chlorine's capacity to destroy microbes, depends on many factors: the form of the chlorine, temperature, retention period, pH and concentration as well as other chemicals in the water. In some circumstances it might efficiently kill all indicator organisms, but some active viruses, protists or their cysts may remain in the water. The meter to measure the efficiency of chlorination is kloorikokema ⇤--arg5411: . Someone else has to translate this --Heta (talk) 14:31, 4 July 2019 (UTC) (type: truth; paradigms: science: attack), which is the concentration multiplied by retention period, so called CT-value. The required CT-value depends on the temperature: the lower the temperature, the higher the CT-value has to be.

[1]

Data

Pathogen sensitivity to chlorine:

The rows tell which pathogen the ct-values on that row are for.

The columns tell the ct-value required to decrease the amount of each pathogen in the drinking water to a certain level on the log-scale. Column 1 means pathogen concentration will drop to 10-1 of the original, column 2 means the concentration will drop to 10-2 and so on.

Drinking water chlorination efficiency: Difference between revisions((mg/l)*min)
ObsPathogen0123456
1campylobacter0 0.154 0.294 0.436 NA NA NA
2E.coli O157:H70 0.17 0.34 0.52 1.06 2.06 NA
3rotavirus0 0.12 0.16 0.2 0.3 NA NA
4norovirus0 0.09 0.18 0.245 0.314 NA NA
5sapovirus0 0.09 0.18 0.245 0.314 NA NA
6cryptosporidium0 NA NA NA NA NA NA
7giardia0 75 150 216 NA NA NA
Pathogen Reference
Campylobacter [2]; [3]
E.coli O157:H7 [2], [4]
Rotavirus [5]
Norovirus [6]
Sapovirus [7]
Cryptosporidium [8]
Giardia [5]

Causality


Unit

logarithmic decrease

Calculations

CT-value = Chlorine residue concentration (mg/l)* time (min)

+ Show code

+ Show code

+ Show code

+ Show code


+ Show code

See also

References

  1. Valve, M ja Isomäki, E. 2007. Klooraus - Tuttu ja turvallinen? Vesitalous 4/2007.
  2. 2.0 2.1 Blaser, M. J., Smith, P. F., Wang, W.‐L. L. and Hoff, J. C. (1986). "Inactivation of Campylobacter jejuni by Chlorine and Monochloramine." Applied and Environmental Microbiology 51(2): 307‐311.
  3. Lund, V. (1996). "Evaluation of E. coli as an indicator for the presence of Campylobacter jejuni and Yersinia enterocolitica in chlorinated and untreated oligotrophic lake water." Water Research 30(6): 1528‐ 1534.
  4. S. R. Petterson & T. A. Stenström 2015. Quantification of pathogen inactivation efficacy by free chlorine disinfection of drinking water for QMRA. J Water Health (2015) 13 (3): 625-644. [1]
  5. 5.0 5.1 Rice, E. W., Hoff, J. C. and III, F. W. S. (1982). "Inactivation of Giardia cysts by chlorine." Applied and Environmental Microbiology 43(1): 250‐251
  6. Keswick, B. H., Satterwhite, T. K., Johnson, P. C., DuPont, H. L., Secor, S. L., Bitsura, J. A., Gary, G. W. and Hoff, J. C. (1985). Inactivation of norwalk virus in drinking water by chlorine. Applied and Environmental Microbiology 50(2): 261-264.
  7. Keswick, B. H., Satterwhite, T. K., Johnson, P. C., DuPont, H. L., Secor, S. L., Bitsura, J. A., Gary, G. W. and Hoff, J. C. (1985). Inactivation of norwalk virus in drinking water by chlorine. Applied and Environmental Microbiology 50(2): 261-264.
  8. Benito Corona-Vasquez, Amy Samuelson, Jason L. Rennecker and Benito J. Mariñas (2002): Inactivation of Cryptosporidium parvum oocysts with ozone and free chlorine. Water Research 36, 4053-4063