Drinking water chlorination efficiency: Difference between revisions

From Opasnet
Jump to navigation Jump to search
 
(37 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 40: Line 42:
=== Data ===
=== Data ===


Function Log credits by inactivation (Log_credits_by_inac1) in the model [[:Tiedosto:Vesiopas.ANA]]:
Pathogen sensitivity to chlorine:
* Parametrit (ct,sensitivity), jossa
**ct is Ct distribution (Ct_distribution1), which is the distribution of CT_values)
** sensitivity on Chlorine sensitivity by pathogen, the table on this page
 
<pre>
Var Lr:=0;
Var ct1:= sensitivity[@Ct_for_log_reduction=1];
Var ct2:sensitivity[@Ct_for_log_reduction=2];
Var ct3:=sensitivity[@Ct_for_log_reduction=3];
Var ct4:=sensitivity[@Ct_for_log_reduction=4];
Var ct5:=sensitivity[@Ct_for_log_reduction=5];
Lr:=if ct < ct1 and ct1>0          then    ct    *(1/ ct1)      else Lr;
Lr:=If ct >=ct1 and ct1>0          then (1+(ct-ct1)*(1/(ct2-ct1))) else Lr;
Lr:=If ct >=ct2 and ct2>0          then (2+(ct-ct2)*(1/(ct3-ct2))) else Lr;
Lr:=If ct >=ct3 and ct3>0          then (3+(ct-ct3)*(1/(ct4-ct3))) else Lr;
Lr:=If ct >=ct3 and ct3>0 and ct4=0 then (3+(ct-ct3)*(1/(ct3-ct2))) else Lr;
Lr:=If ct >=ct4 and ct4>0          then (4+(ct-ct4)*(1/(ct5-ct4))) else Lr;
Lr:=If ct >=ct4 and ct4>0 and ct5=0 then (4+(ct-ct4)*(1/(ct4-ct3))) else Lr;
Lr:=If ct >=ct5 and ct5>0          then  5                        else Lr;
Lr
</pre>


Nähdäkseni funktio käy läpi kullekin patogeenille taulukon arvot CT1:stä CT5:een niin kauan, kunnes tulee nolla vastaan. Eli laskennassa käytetään ainoastaan viimeistä ehdot täyttävää yhtälöä. Jos taulukossa olevan luvun tulkinta on tämä: "CT-arvo, joka aiheuttaa 1/2/jne logaritmisen vähenemän patogeenipitoituudessa", niin silloin tässä olisi järkeä. Ensimmäinen yhtälö laskee, minkä osuuden 10-kertaisesta vähenemästä ct saa aikaan; toinen yhtälö laskee sen osuuden CT-arvosta, joka jää vielä yli ja katsoo, millaisen lisävähenemän sillä saa aikaan jne. Lopputuloksena on Log reduction by Proposed method.  
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.


{{vastusta_pätemätön|#: |Yksikkö pitäisi olla standardimuodossa (ks. [[:op_en:Unit conversions]]) eli "mg /l min". Kuitenkin tulee mieleen, että eikös tämä ole tietyn klooriannoksen teho eli esim. 0.152 silloin, kun 1 mg/l pitoisuutta käytetään 1 min ajan. Silloinhan yksikön pitäisi olla 1/(mg/l min) eli standardimuodossa kirjoitettuna l /mg /min.|--[[Käyttäjä:Jouni|Jouni Tuomisto]] 28. kesäkuuta 2012 kello 23.08 (EEST)}}
<t2b index="Pathogen,Logdecrease" Locations="0,1,2,3,4,5,6" unit="(mg/l)*min">
: {{vastusta|#: |Oikea yksikkö on "mg /l min", koska arvot ovat CT-arvoja annetulla vähenemällä (ks. pohdinta yllä). |--[[Käyttäjä:Jouni|Jouni Tuomisto]] 1. heinäkuuta 2012 kello 16.31 (EEST)}}
campylobacter|0| 0.154| 0.294| 0.436| NA| NA| NA
 
E.coli O157:H7|0| 0.17| 0.34| 0.52| 1.06| 2.06| NA
Pathogen sensitivity to chlorine:
rotavirus|0| 0.12| 0.16| 0.2| 0.3| NA| NA
 
norovirus|0| 0.09| 0.18| 0.245| 0.314| NA| NA
<t2b index="Pathogen,Ct value" Locations="Ct 1 Log decrease,Ct 2 Log decrease,Ct 3 Log decrease,Ct 4 Log decrease,Ct 5 Log decrease" unit="(mg/l)*min">
sapovirus|0| 0.09| 0.18| 0.245| 0.314| NA| NA
Campylobacter| 0.152| 0.294| 0.436| 0| 0
cryptosporidium|0| NA| NA| NA| NA| NA| NA
E.coli O157:H7| 0.17| 0.34| 0.52| 1.06| 0
giardia|0| 75| 150| 216| NA| NA| NA
Rotavirus| 0.12| 0.16| 0.2| 0.3| 0
Norovirus| 0.09| 0.18| 0.245| 0.314| 0
Cryptosporidium| 0| 0| 0| 0| 0
Giardia| 75| 150| 216| 0| 0
</t2b>
</t2b>


Line 85: 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 100: 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 117: Line 99:


<rcode
<rcode
name="dose"
name="dose"
label="Initialize chlorine dose"
label="Initialize chlorine dose"
>
  #This is code "Op_en7956/dose" on page [[Drinking water chlorination efficiency]]
  library(OpasnetUtils)
 
ChlorineDose = data.frame(ChlorineDoseResult = 0.5)
 
ChlorineDose = Ovariable("ChlorineDose", data = ChlorineDose)
 
objects.store(ChlorineDose)
 
cat("Ovariable ChlorineDose saved.\n")
 
oprint(ChlorineDose)
</rcode>
 
<rcode
name="sensitivity"
label="Initialize chlorine sensitivity"
>
>
#This is code "Op_en7956/dose" on page [[Drinking water chlorination efficiency]]
#This is code "Op_en7956/sensitivity" on page [[Drinking water chlorination efficiency]]
library(OpasnetUtils)
library(OpasnetUtils)


ChlorineDose = data.frame(ChlorineDosesResult = 1.5)
ClSensitivity <- Ovariable("ClSensitivity", ddata = "Op_en7956", save=TRUE)
 
objects.store(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)


ChlorineDose = Ovariable("ChlorineDose", data = ChlorineDose, save = TRUE)
cat("Constants Ncstr, mrt and ovariable k saved.\n")


oprint(ChlorineDose)
</rcode>
</rcode>


<rcode
<rcode
name="efficiency"
name="CT"
label="Initialize chlorinazion efficiency"
label="Initialize CT"
>
>
# This is code "Op_en7956/efficiency" on page [[Drinking water chlorination efficiency]]
# This is code "Op_en7956/CT" on page [[Drinking water chlorination efficiency]]
library(OpasnetUtils)
library(OpasnetUtils)
library(reshape2)
library(reshape2)


riippuvuudet = data.frame(
CT <- Ovariable(
Name = c("ChlorineDose", "CLMysteeri", "CLsensitivity", "ChlorineEfficiencyF"),
  "CT",
Ident = c("Op_fi2667/dose")
  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)


CLMysteeri <- function(ct, sens) { # jotakin mysteeristä
out <- NA
if (sum(sens) == 0) out <- 0
if (ct < sens[1] & sens[1] > 0) {out <- ct * (1 / sens[1])}
if (ct >= sens[1] & sens[1] > 0) {out <- 1 + (ct - sens[1]) * (1 / (sens[2] - sens[1]))}
if (ct >= sens[2] & sens[2] > 0) {out <- 2 + (ct - sens[2]) * (1 / (sens[3] - sens[2]))}
if (ct >= sens[3] & sens[3] > 0 & sens[4] > 0) {out <- 3 + (ct - sens[3]) * (1 / (sens[4] - sens[3]))}
if (ct >= sens[3] & sens[3] > 0 & sens[4] == 0) {out <- 3 + (ct - sens[3]) * (1 / (sens[3] - sens[2]))}
if (ct >= sens[4] & sens[4] > 0 & sens[5] > 0) {out <- 4 + (ct - sens[4]) * (1 / (sens[5] - sens[4]))}
if (ct >= sens[4] & sens[4] > 0 & sens[5] == 0) {out <- 4 + (ct - sens[4]) * (1 / (sens[4] - sens[3]))}
if (ct >= sens[5] & sens[5] > 0) {out <- 5}
return(out)
}
}


CLsensitivity <- tidy(
opbase.data("Op_fi2667"),
objname = "CLsensitivity",
)
)


CLsensitivity <- CLsensitivity <- reshape(CLsensitivity, idvar = "Pathogen", timevar = "Ct value", v.names = "CLsensitivityResult", direction = "wide")
objects.store(CT)
colnames(CLsensitivity) <- gsub("^CLsensitivityResult.", "", colnames(CLsensitivity))
 
cat("Ovariable CT saved.\n")
 
</rcode>


CLsensitivity <- Ovariable("CLsensitivity", output = CLsensitivity, marginal = c(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE))


ChlorineEfficiencyF <- function(ChlorineDose, Ctarvot) {
<rcode
Mrt <- 12
name="efficiency"
Ncstr <- 6
label="Initialize chlorination efficiency"
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)
>
Times <- Ttimes * Mrt
# This is code "Op_en7956/efficiency" on page [[Drinking water chlorination efficiency]]
Times.inc <- Times - c(0,Times[1:20])
library(OpasnetUtils)
Probability <- (Times^(Ncstr - 1) * exp(-Ncstr * Times / Mrt))/(factorial(Ncstr - 1) * (Mrt / Ncstr) ^ Ncstr)
library(reshape2)
ChlorineDose  <- ChlorineDose * exp(-0.13 * Times)
 
ChlorineDose  <- KChlorineDose  * Times.inc
ChlorineEfficiency <- Ovariable("ChlorineEfficiency", dependencies = data.frame(
ChlorineDoseCumsum <- cumsum(ChlorineDose)
  Name = c("CT", "ClSensitivity"),
ClConcDistr <- sum(ChlorineDoseCumsum * Probability) / length(Probability)
  Ident = c("Op_en7956/CT", "Op_en7956/sensitivity")),
temp <- CLMysteeri(ClConcDistr, Ctarvot)
  formula = function(...){
return(temp)
 
}
  ClSensitivity <- EvalOutput(ClSensitivity)
 
  # make CT into an Ovariable, if it's not already
  if(!"ovariable" %in% class(CT)) CT <- Ovariable(name="CT", output=data.frame(Result=CT))
  CT <- EvalOutput(CT)
  sensname <- paste0(ClSensitivity@name,"Result") # put "ClSensitivityResult" into sensname
  ctname <- paste0(CT@name,"Result") # put "CTResult" into ctname
 
  ova <- merge(ClSensitivity, CT) # merge to get the variables into the same table
  ova$Logdecrease <- as.numeric(as.character(ova$Logdecrease)) # make sure Logdecrease-column is numeric
 
  out <- aggregate(
    1:nrow(ova@output), #take a set of row numbers included in ova...
    by = ova@output[ova@marginal & colnames(ova@output)!="Logdecrease"], #...that has a unique combination of values in the
            # index-columns, except Logdecrease. It takes the row numbers with different values of Logdecrease, with the
            # combination of other indices unique.
      FUN = function(x) {
      tmp <- ova@output[x,] # actually takes those rows whose numbers were selected above from ova
      ord <- order(tmp$Logdecrease) # saves the order of rows ordered based on Logdecrease, smallest first.
      if(sum(tmp[[sensname]], na.rm=TRUE)==0) return(0) # if all the ct:s in this set of rows are 0, return 0
      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)


funktio = function(...){
  }
temp <- merge(ChlorineDose@output, CLsensitivity@output)
)
for (j in 1:nrow(temp)) {
temp$Result[j] <- ChlorineEfficiencyF(
temp$ChlorineDoseResult[j],
unlist(temp[j, paste("Ct", 1:5, "Log decrease")])
)
}
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)
}


ChlorineEfficiency <- Ovariable("ChlorineEfficiency", dependencies = riippuvuudet, formula = funktio)
objects.store(ChlorineEfficiency)


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


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


Line 211: Line 255:


<references/>
<references/>
[[Class:Drinking water]]
[[Category:Drinking water]]


{{eracedu}}
{{eracedu}}

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